PaymentChannelV1ServerState.smali
.class public Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;
.super Lorg/bitcoinj/protocols/channels/PaymentChannelServerState;
.source "PaymentChannelV1ServerState.java"
# static fields
.field private static final log:Lorg/slf4j/Logger;
# instance fields
.field protected clientKey:Lorg/bitcoinj/core/ECKey;
.field private clientOutput:Lorg/bitcoinj/core/TransactionOutput;
.field final closedFuture:Lcom/google/common/util/concurrent/ao;
.annotation system Ldalvik/annotation/Signature;
value = {
"Lcom/google/common/util/concurrent/ao",
"<",
"Lorg/bitcoinj/core/Transaction;",
">;"
}
.end annotation
.end field
.field private feePaidForPayment:Lorg/bitcoinj/core/Coin;
.field private refundTransactionUnlockTimeSecs:J
# direct methods
.method static constructor <clinit>()V
.registers 1
.prologue
.line 43
const-class v0, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;
invoke-static {v0}, Lorg/slf4j/LoggerFactory;->getLogger(Ljava/lang/Class;)Lorg/slf4j/Logger;
move-result-object v0
sput-object v0, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->log:Lorg/slf4j/Logger;
return-void
.end method
.method public constructor <init>(Lorg/bitcoinj/core/TransactionBroadcaster;Lorg/bitcoinj/wallet/Wallet;Lorg/bitcoinj/core/ECKey;J)V
.registers 8
.prologue
.line 76
invoke-direct/range {p0 .. p5}, Lorg/bitcoinj/protocols/channels/PaymentChannelServerState;-><init>(Lorg/bitcoinj/core/TransactionBroadcaster;Lorg/bitcoinj/wallet/Wallet;Lorg/bitcoinj/core/ECKey;J)V
.line 173
invoke-static {}, Lcom/google/common/util/concurrent/ao;->yj()Lcom/google/common/util/concurrent/ao;
move-result-object v0
iput-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->closedFuture:Lcom/google/common/util/concurrent/ao;
.line 77
iget-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->stateMachine:Lorg/bitcoinj/protocols/channels/StateMachine;
sget-object v1, Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;->WAITING_FOR_REFUND_TRANSACTION:Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;
invoke-virtual {v0, v1}, Lorg/bitcoinj/protocols/channels/StateMachine;->transition(Ljava/lang/Enum;)V
.line 78
return-void
.end method
.method constructor <init>(Lorg/bitcoinj/protocols/channels/StoredServerChannel;Lorg/bitcoinj/wallet/Wallet;Lorg/bitcoinj/core/TransactionBroadcaster;)V
.registers 6
.prologue
.line 57
invoke-direct {p0, p1, p2, p3}, Lorg/bitcoinj/protocols/channels/PaymentChannelServerState;-><init>(Lorg/bitcoinj/protocols/channels/StoredServerChannel;Lorg/bitcoinj/wallet/Wallet;Lorg/bitcoinj/core/TransactionBroadcaster;)V
.line 173
invoke-static {}, Lcom/google/common/util/concurrent/ao;->yj()Lcom/google/common/util/concurrent/ao;
move-result-object v0
iput-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->closedFuture:Lcom/google/common/util/concurrent/ao;
.line 58
monitor-enter p1
.line 59
:try_start_a
invoke-virtual {p0}, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->getContractScript()Lorg/bitcoinj/script/Script;
move-result-object v0
invoke-virtual {v0}, Lorg/bitcoinj/script/Script;->getChunks()Ljava/util/List;
move-result-object v0
const/4 v1, 0x1
invoke-interface {v0, v1}, Ljava/util/List;->get(I)Ljava/lang/Object;
move-result-object v0
check-cast v0, Lorg/bitcoinj/script/ScriptChunk;
iget-object v0, v0, Lorg/bitcoinj/script/ScriptChunk;->data:[B
invoke-static {v0}, Lorg/bitcoinj/core/ECKey;->fromPublicOnly([B)Lorg/bitcoinj/core/ECKey;
move-result-object v0
iput-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->clientKey:Lorg/bitcoinj/core/ECKey;
.line 60
iget-object v0, p1, Lorg/bitcoinj/protocols/channels/StoredServerChannel;->clientOutput:Lorg/bitcoinj/core/TransactionOutput;
invoke-static {v0}, Lcom/google/common/base/n;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, Lorg/bitcoinj/core/TransactionOutput;
iput-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->clientOutput:Lorg/bitcoinj/core/TransactionOutput;
.line 61
iget-wide v0, p1, Lorg/bitcoinj/protocols/channels/StoredServerChannel;->refundTransactionUnlockTimeSecs:J
iput-wide v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->refundTransactionUnlockTimeSecs:J
.line 62
iget-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->stateMachine:Lorg/bitcoinj/protocols/channels/StateMachine;
sget-object v1, Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;->READY:Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;
invoke-virtual {v0, v1}, Lorg/bitcoinj/protocols/channels/StateMachine;->transition(Ljava/lang/Enum;)V
.line 63
monitor-exit p1
return-void
:catchall_38
move-exception v0
monitor-exit p1
:try_end_3a
.catchall {:try_start_a .. :try_end_3a} :catchall_38
throw v0
.end method
.method static synthetic access$000()Lorg/slf4j/Logger;
.registers 1
.prologue
.line 42
sget-object v0, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->log:Lorg/slf4j/Logger;
return-object v0
.end method
.method private signMultisigInput(Lorg/bitcoinj/core/Transaction;Lorg/bitcoinj/core/Transaction$SigHash;Z)V
.registers 10
.prologue
.line 167
const/4 v1, 0x0
iget-object v2, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->serverKey:Lorg/bitcoinj/core/ECKey;
invoke-virtual {p0}, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->getContractScript()Lorg/bitcoinj/script/Script;
move-result-object v3
move-object v0, p1
move-object v4, p2
move v5, p3
invoke-virtual/range {v0 .. v5}, Lorg/bitcoinj/core/Transaction;->calculateSignature(ILorg/bitcoinj/core/ECKey;Lorg/bitcoinj/script/Script;Lorg/bitcoinj/core/Transaction$SigHash;Z)Lorg/bitcoinj/crypto/TransactionSignature;
move-result-object v0
.line 168
invoke-virtual {v0}, Lorg/bitcoinj/crypto/TransactionSignature;->encodeToBitcoin()[B
move-result-object v0
.line 169
iget-object v1, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->bestValueSignature:[B
invoke-static {v1, v0}, Lcom/google/common/collect/ImmutableList;->of(Ljava/lang/Object;Ljava/lang/Object;)Lcom/google/common/collect/ImmutableList;
move-result-object v0
invoke-static {v0}, Lorg/bitcoinj/script/ScriptBuilder;->createMultiSigInputScriptBytes(Ljava/util/List;)Lorg/bitcoinj/script/Script;
move-result-object v0
.line 170
const-wide/16 v2, 0x0
invoke-virtual {p1, v2, v3}, Lorg/bitcoinj/core/Transaction;->getInput(J)Lorg/bitcoinj/core/TransactionInput;
move-result-object v1
invoke-virtual {v1, v0}, Lorg/bitcoinj/core/TransactionInput;->setScriptSig(Lorg/bitcoinj/script/Script;)V
.line 171
return-void
.end method
# virtual methods
.method public declared-synchronized close()Lcom/google/common/util/concurrent/y;
.registers 7
.annotation system Ldalvik/annotation/Signature;
value = {
"()",
"Lcom/google/common/util/concurrent/y",
"<",
"Lorg/bitcoinj/core/Transaction;",
">;"
}
.end annotation
.prologue
const/4 v1, 0x0
.line 191
monitor-enter p0
:try_start_2
iget-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->storedServerChannel:Lorg/bitcoinj/protocols/channels/StoredServerChannel;
if-eqz v0, :cond_2c
.line 192
iget-object v2, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->storedServerChannel:Lorg/bitcoinj/protocols/channels/StoredServerChannel;
.line 193
const/4 v0, 0x0
iput-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->storedServerChannel:Lorg/bitcoinj/protocols/channels/StoredServerChannel;
.line 194
iget-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->wallet:Lorg/bitcoinj/wallet/Wallet;
.line 195
invoke-virtual {v0}, Lorg/bitcoinj/wallet/Wallet;->getExtensions()Ljava/util/Map;
move-result-object v0
sget-object v3, Lorg/bitcoinj/protocols/channels/StoredPaymentChannelServerStates;->EXTENSION_ID:Ljava/lang/String;
invoke-interface {v0, v3}, Ljava/util/Map;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, Lorg/bitcoinj/protocols/channels/StoredPaymentChannelServerStates;
.line 196
invoke-virtual {v0, v2}, Lorg/bitcoinj/protocols/channels/StoredPaymentChannelServerStates;->closeChannel(Lorg/bitcoinj/protocols/channels/StoredServerChannel;)V
.line 197
invoke-virtual {p0}, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->getState()Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;
move-result-object v0
sget-object v2, Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;->CLOSING:Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;
invoke-virtual {v0, v2}, Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;->compareTo(Ljava/lang/Enum;)I
move-result v0
if-ltz v0, :cond_2c
.line 198
iget-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->closedFuture:Lcom/google/common/util/concurrent/ao;
:try_end_2a
.catchall {:try_start_2 .. :try_end_2a} :catchall_e1
.line 261
:goto_2a
monitor-exit p0
return-object v0
.line 201
:cond_2c
:try_start_2c
invoke-virtual {p0}, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->getState()Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;
move-result-object v0
invoke-virtual {v0}, Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;->ordinal()I
move-result v0
sget-object v2, Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;->READY:Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;
invoke-virtual {v2}, Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;->ordinal()I
move-result v2
if-ge v0, v2, :cond_64
.line 202
sget-object v0, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->log:Lorg/slf4j/Logger;
new-instance v1, Ljava/lang/StringBuilder;
const-string v2, "Attempt to settle channel in state "
invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {p0}, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->getState()Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;
move-result-object v2
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
move-result-object v1
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
invoke-interface {v0, v1}, Lorg/slf4j/Logger;->error(Ljava/lang/String;)V
.line 203
iget-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->stateMachine:Lorg/bitcoinj/protocols/channels/StateMachine;
sget-object v1, Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;->CLOSED:Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;
invoke-virtual {v0, v1}, Lorg/bitcoinj/protocols/channels/StateMachine;->transition(Ljava/lang/Enum;)V
.line 204
iget-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->closedFuture:Lcom/google/common/util/concurrent/ao;
const/4 v1, 0x0
invoke-virtual {v0, v1}, Lcom/google/common/util/concurrent/ao;->set(Ljava/lang/Object;)Z
.line 205
iget-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->closedFuture:Lcom/google/common/util/concurrent/ao;
goto :goto_2a
.line 207
:cond_64
invoke-virtual {p0}, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->getState()Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;
move-result-object v0
sget-object v2, Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;->READY:Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;
if-eq v0, v2, :cond_87
.line 209
sget-object v0, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->log:Lorg/slf4j/Logger;
new-instance v1, Ljava/lang/StringBuilder;
const-string v2, "Failed attempt to settle a channel in state "
invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {p0}, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->getState()Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;
move-result-object v2
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
move-result-object v1
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
invoke-interface {v0, v1}, Lorg/slf4j/Logger;->warn(Ljava/lang/String;)V
.line 210
iget-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->closedFuture:Lcom/google/common/util/concurrent/ao;
:try_end_86
.catchall {:try_start_2c .. :try_end_86} :catchall_e1
goto :goto_2a
.line 214
:cond_87
:try_start_87
iget-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->bestValueToMe:Lorg/bitcoinj/core/Coin;
invoke-virtual {p0, v0}, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->makeUnsignedChannelContract(Lorg/bitcoinj/core/Coin;)Lorg/bitcoinj/wallet/SendRequest;
move-result-object v0
.line 215
iget-object v1, v0, Lorg/bitcoinj/wallet/SendRequest;->tx:Lorg/bitcoinj/core/Transaction;
.line 220
sget-object v2, Lorg/bitcoinj/core/Transaction$SigHash;->NONE:Lorg/bitcoinj/core/Transaction$SigHash;
const/4 v3, 0x1
invoke-direct {p0, v1, v2, v3}, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->signMultisigInput(Lorg/bitcoinj/core/Transaction;Lorg/bitcoinj/core/Transaction$SigHash;Z)V
.line 222
const/4 v2, 0x0
iput-boolean v2, v0, Lorg/bitcoinj/wallet/SendRequest;->shuffleOutputs:Z
.line 223
sget-object v2, Lorg/bitcoinj/wallet/Wallet$MissingSigsMode;->USE_DUMMY_SIG:Lorg/bitcoinj/wallet/Wallet$MissingSigsMode;
iput-object v2, v0, Lorg/bitcoinj/wallet/SendRequest;->missingSigsMode:Lorg/bitcoinj/wallet/Wallet$MissingSigsMode;
.line 224
iget-object v2, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->wallet:Lorg/bitcoinj/wallet/Wallet;
invoke-virtual {v2, v0}, Lorg/bitcoinj/wallet/Wallet;->completeTx(Lorg/bitcoinj/wallet/SendRequest;)V
.line 225
iget-object v0, v0, Lorg/bitcoinj/wallet/SendRequest;->tx:Lorg/bitcoinj/core/Transaction;
invoke-virtual {v0}, Lorg/bitcoinj/core/Transaction;->getFee()Lorg/bitcoinj/core/Coin;
move-result-object v0
iput-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->feePaidForPayment:Lorg/bitcoinj/core/Coin;
.line 226
sget-object v0, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->log:Lorg/slf4j/Logger;
const-string v2, "Calculated fee is {}"
iget-object v3, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->feePaidForPayment:Lorg/bitcoinj/core/Coin;
invoke-interface {v0, v2, v3}, Lorg/slf4j/Logger;->info(Ljava/lang/String;Ljava/lang/Object;)V
.line 227
iget-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->feePaidForPayment:Lorg/bitcoinj/core/Coin;
iget-object v2, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->bestValueToMe:Lorg/bitcoinj/core/Coin;
invoke-virtual {v0, v2}, Lorg/bitcoinj/core/Coin;->compareTo(Lorg/bitcoinj/core/Coin;)I
move-result v0
if-lez v0, :cond_e4
.line 228
sget-object v0, Ljava/util/Locale;->US:Ljava/util/Locale;
const-string v2, "Had to pay more in fees (%s) than the channel was worth (%s)"
const/4 v3, 0x2
new-array v3, v3, [Ljava/lang/Object;
const/4 v4, 0x0
iget-object v5, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->feePaidForPayment:Lorg/bitcoinj/core/Coin;
aput-object v5, v3, v4
const/4 v4, 0x1
iget-object v5, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->bestValueToMe:Lorg/bitcoinj/core/Coin;
aput-object v5, v3, v4
invoke-static {v0, v2, v3}, Ljava/lang/String;->format(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
move-result-object v0
.line 230
new-instance v2, Lorg/bitcoinj/core/InsufficientMoneyException;
iget-object v3, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->feePaidForPayment:Lorg/bitcoinj/core/Coin;
iget-object v4, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->bestValueToMe:Lorg/bitcoinj/core/Coin;
invoke-virtual {v3, v4}, Lorg/bitcoinj/core/Coin;->subtract(Lorg/bitcoinj/core/Coin;)Lorg/bitcoinj/core/Coin;
move-result-object v3
invoke-direct {v2, v3, v0}, Lorg/bitcoinj/core/InsufficientMoneyException;-><init>(Lorg/bitcoinj/core/Coin;Ljava/lang/String;)V
throw v2
:try_end_df
.catch Lorg/bitcoinj/core/InsufficientMoneyException; {:try_start_87 .. :try_end_df} :catch_df
.catch Ljava/lang/Exception; {:try_start_87 .. :try_end_df} :catch_105
.catchall {:try_start_87 .. :try_end_df} :catchall_e1
.line 239
:catch_df
move-exception v0
:try_start_e0
throw v0
:try_end_e1
.catchall {:try_start_e0 .. :try_end_e1} :catchall_e1
.line 191
:catchall_e1
move-exception v0
monitor-exit p0
throw v0
.line 233
:cond_e4
:try_start_e4
sget-object v0, Lorg/bitcoinj/core/Transaction$SigHash;->ALL:Lorg/bitcoinj/core/Transaction$SigHash;
const/4 v2, 0x0
invoke-direct {p0, v1, v0, v2}, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->signMultisigInput(Lorg/bitcoinj/core/Transaction;Lorg/bitcoinj/core/Transaction$SigHash;Z)V
.line 235
invoke-virtual {v1}, Lorg/bitcoinj/core/Transaction;->verify()V
.line 236
invoke-virtual {v1}, Lorg/bitcoinj/core/Transaction;->getInputs()Ljava/util/List;
move-result-object v0
invoke-interface {v0}, Ljava/util/List;->iterator()Ljava/util/Iterator;
move-result-object v2
:goto_f5
invoke-interface {v2}, Ljava/util/Iterator;->hasNext()Z
move-result v0
if-eqz v0, :cond_11a
invoke-interface {v2}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v0
check-cast v0, Lorg/bitcoinj/core/TransactionInput;
.line 237
invoke-virtual {v0}, Lorg/bitcoinj/core/TransactionInput;->verify()V
:try_end_104
.catch Lorg/bitcoinj/core/InsufficientMoneyException; {:try_start_e4 .. :try_end_104} :catch_df
.catch Ljava/lang/Exception; {:try_start_e4 .. :try_end_104} :catch_105
.catchall {:try_start_e4 .. :try_end_104} :catchall_e1
goto :goto_f5
.line 240
:catch_105
move-exception v0
.line 241
:try_start_106
sget-object v2, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->log:Lorg/slf4j/Logger;
const-string v3, "Could not verify self-built tx\nMULTISIG {}\nCLOSE {}"
iget-object v4, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->contract:Lorg/bitcoinj/core/Transaction;
if-eqz v1, :cond_117
:goto_10e
invoke-interface {v2, v3, v4, v1}, Lorg/slf4j/Logger;->error(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
.line 242
new-instance v1, Ljava/lang/RuntimeException;
invoke-direct {v1, v0}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/Throwable;)V
throw v1
.line 241
:cond_117
const-string v1, ""
goto :goto_10e
.line 244
:cond_11a
iget-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->stateMachine:Lorg/bitcoinj/protocols/channels/StateMachine;
sget-object v2, Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;->CLOSING:Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;
invoke-virtual {v0, v2}, Lorg/bitcoinj/protocols/channels/StateMachine;->transition(Ljava/lang/Enum;)V
.line 245
sget-object v0, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->log:Lorg/slf4j/Logger;
const-string v2, "Closing channel, broadcasting tx {}"
invoke-interface {v0, v2, v1}, Lorg/slf4j/Logger;->info(Ljava/lang/String;Ljava/lang/Object;)V
.line 247
iget-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->broadcaster:Lorg/bitcoinj/core/TransactionBroadcaster;
invoke-interface {v0, v1}, Lorg/bitcoinj/core/TransactionBroadcaster;->broadcastTransaction(Lorg/bitcoinj/core/Transaction;)Lorg/bitcoinj/core/TransactionBroadcast;
move-result-object v0
invoke-virtual {v0}, Lorg/bitcoinj/core/TransactionBroadcast;->future()Lcom/google/common/util/concurrent/y;
move-result-object v0
.line 248
new-instance v1, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState$1;
invoke-direct {v1, p0}, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState$1;-><init>(Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;)V
invoke-static {v0, v1}, Lcom/google/common/util/concurrent/r;->a(Lcom/google/common/util/concurrent/y;Lcom/google/common/util/concurrent/q;)V
.line 261
iget-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->closedFuture:Lcom/google/common/util/concurrent/ao;
:try_end_13c
.catchall {:try_start_106 .. :try_end_13c} :catchall_e1
goto/16 :goto_2a
.end method
.method protected createOutputScript()Lorg/bitcoinj/script/Script;
.registers 4
.prologue
.line 158
const/4 v0, 0x2
iget-object v1, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->clientKey:Lorg/bitcoinj/core/ECKey;
iget-object v2, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->serverKey:Lorg/bitcoinj/core/ECKey;
invoke-static {v1, v2}, Lcom/google/common/collect/ImmutableList;->of(Ljava/lang/Object;Ljava/lang/Object;)Lcom/google/common/collect/ImmutableList;
move-result-object v1
invoke-static {v0, v1}, Lorg/bitcoinj/script/ScriptBuilder;->createMultiSigOutputScript(ILjava/util/List;)Lorg/bitcoinj/script/Script;
move-result-object v0
return-object v0
.end method
.method protected getClientKey()Lorg/bitcoinj/core/ECKey;
.registers 2
.prologue
.line 162
iget-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->clientKey:Lorg/bitcoinj/core/ECKey;
return-object v0
.end method
.method public getClientOutput()Lorg/bitcoinj/core/TransactionOutput;
.registers 2
.prologue
.line 103
iget-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->clientOutput:Lorg/bitcoinj/core/TransactionOutput;
return-object v0
.end method
.method public declared-synchronized getFeePaid()Lorg/bitcoinj/core/Coin;
.registers 5
.prologue
.line 269
monitor-enter p0
:try_start_1
iget-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->stateMachine:Lorg/bitcoinj/protocols/channels/StateMachine;
const/4 v1, 0x2
new-array v1, v1, [Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;
const/4 v2, 0x0
sget-object v3, Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;->CLOSED:Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;
aput-object v3, v1, v2
const/4 v2, 0x1
sget-object v3, Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;->CLOSING:Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;
aput-object v3, v1, v2
invoke-virtual {v0, v1}, Lorg/bitcoinj/protocols/channels/StateMachine;->checkState([Ljava/lang/Enum;)V
.line 270
iget-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->feePaidForPayment:Lorg/bitcoinj/core/Coin;
:try_end_15
.catchall {:try_start_1 .. :try_end_15} :catchall_17
monitor-exit p0
return-object v0
.line 269
:catchall_17
move-exception v0
monitor-exit p0
throw v0
.end method
.method public getMajorVersion()I
.registers 2
.prologue
.line 98
const/4 v0, 0x1
return v0
.end method
.method public declared-synchronized getRefundTransactionUnlockTime()J
.registers 3
.prologue
.line 278
monitor-enter p0
:try_start_1
invoke-virtual {p0}, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->getState()Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;
move-result-object v0
sget-object v1, Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;->WAITING_FOR_MULTISIG_CONTRACT:Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;
invoke-virtual {v0, v1}, Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;->compareTo(Ljava/lang/Enum;)I
move-result v0
if-lez v0, :cond_1d
invoke-virtual {p0}, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->getState()Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;
move-result-object v0
sget-object v1, Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;->ERROR:Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;
if-eq v0, v1, :cond_1d
const/4 v0, 0x1
:goto_16
invoke-static {v0}, Lcom/google/common/base/n;->checkState(Z)V
.line 279
iget-wide v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->refundTransactionUnlockTimeSecs:J
:try_end_1b
.catchall {:try_start_1 .. :try_end_1b} :catchall_1f
monitor-exit p0
return-wide v0
.line 278
:cond_1d
const/4 v0, 0x0
goto :goto_16
:catchall_1f
move-exception v0
monitor-exit p0
throw v0
.end method
.method protected getSignedScript()Lorg/bitcoinj/script/Script;
.registers 2
.prologue
.line 108
invoke-virtual {p0}, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->getContractScript()Lorg/bitcoinj/script/Script;
move-result-object v0
return-object v0
.end method
.method public getStateTransitions()Lcom/google/common/collect/cf;
.registers 7
.annotation system Ldalvik/annotation/Signature;
value = {
"()",
"Lcom/google/common/collect/cf",
"<",
"Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;",
"Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;",
">;"
}
.end annotation
.prologue
.line 82
const-class v0, Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;
invoke-static {v0}, Lcom/google/common/collect/MultimapBuilder;->k(Ljava/lang/Class;)Lcom/google/common/collect/ch;
move-result-object v0
invoke-virtual {v0}, Lcom/google/common/collect/ch;->xG()Lcom/google/common/collect/cg;
move-result-object v0
invoke-virtual {v0}, Lcom/google/common/collect/cg;->xF()Lcom/google/common/collect/bb;
move-result-object v1
.line 83
sget-object v0, Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;->UNINITIALISED:Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;
sget-object v2, Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;->READY:Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;
invoke-interface {v1, v0, v2}, Lcom/google/common/collect/cf;->put(Ljava/lang/Object;Ljava/lang/Object;)Z
.line 84
sget-object v0, Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;->UNINITIALISED:Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;
sget-object v2, Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;->WAITING_FOR_REFUND_TRANSACTION:Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;
invoke-interface {v1, v0, v2}, Lcom/google/common/collect/cf;->put(Ljava/lang/Object;Ljava/lang/Object;)Z
.line 85
sget-object v0, Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;->WAITING_FOR_REFUND_TRANSACTION:Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;
sget-object v2, Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;->WAITING_FOR_MULTISIG_CONTRACT:Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;
invoke-interface {v1, v0, v2}, Lcom/google/common/collect/cf;->put(Ljava/lang/Object;Ljava/lang/Object;)Z
.line 86
sget-object v0, Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;->WAITING_FOR_MULTISIG_CONTRACT:Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;
sget-object v2, Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;->WAITING_FOR_MULTISIG_ACCEPTANCE:Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;
invoke-interface {v1, v0, v2}, Lcom/google/common/collect/cf;->put(Ljava/lang/Object;Ljava/lang/Object;)Z
.line 87
sget-object v0, Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;->WAITING_FOR_MULTISIG_ACCEPTANCE:Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;
sget-object v2, Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;->READY:Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;
invoke-interface {v1, v0, v2}, Lcom/google/common/collect/cf;->put(Ljava/lang/Object;Ljava/lang/Object;)Z
.line 88
sget-object v0, Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;->READY:Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;
sget-object v2, Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;->CLOSING:Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;
invoke-interface {v1, v0, v2}, Lcom/google/common/collect/cf;->put(Ljava/lang/Object;Ljava/lang/Object;)Z
.line 89
sget-object v0, Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;->CLOSING:Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;
sget-object v2, Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;->CLOSED:Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;
invoke-interface {v1, v0, v2}, Lcom/google/common/collect/cf;->put(Ljava/lang/Object;Ljava/lang/Object;)Z
.line 90
invoke-static {}, Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;->values()[Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;
move-result-object v2
array-length v3, v2
const/4 v0, 0x0
:goto_45
if-ge v0, v3, :cond_51
aget-object v4, v2, v0
.line 91
sget-object v5, Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;->ERROR:Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;
invoke-interface {v1, v4, v5}, Lcom/google/common/collect/cf;->put(Ljava/lang/Object;Ljava/lang/Object;)Z
.line 90
add-int/lit8 v0, v0, 0x1
goto :goto_45
.line 93
:cond_51
return-object v1
.end method
.method public declared-synchronized provideRefundTransaction(Lorg/bitcoinj/core/Transaction;[B)[B
.registers 9
.prologue
const/4 v4, 0x1
.line 122
monitor-enter p0
:try_start_2
invoke-static {p1}, Lcom/google/common/base/n;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object;
.line 123
invoke-static {p2}, Lcom/google/common/base/n;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object;
.line 124
iget-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->stateMachine:Lorg/bitcoinj/protocols/channels/StateMachine;
sget-object v1, Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;->WAITING_FOR_REFUND_TRANSACTION:Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;
invoke-virtual {v0, v1}, Lorg/bitcoinj/protocols/channels/StateMachine;->checkState(Ljava/lang/Enum;)V
.line 125
sget-object v0, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->log:Lorg/slf4j/Logger;
const-string v1, "Provided with refund transaction: {}"
invoke-interface {v0, v1, p1}, Lorg/slf4j/Logger;->info(Ljava/lang/String;Ljava/lang/Object;)V
.line 127
invoke-virtual {p1}, Lorg/bitcoinj/core/Transaction;->verify()V
.line 129
invoke-virtual {p1}, Lorg/bitcoinj/core/Transaction;->getInputs()Ljava/util/List;
move-result-object v0
invoke-interface {v0}, Ljava/util/List;->size()I
move-result v0
if-eq v0, v4, :cond_2e
.line 130
new-instance v0, Lorg/bitcoinj/core/VerificationException;
const-string v1, "Refund transaction does not have exactly one input"
invoke-direct {v0, v1}, Lorg/bitcoinj/core/VerificationException;-><init>(Ljava/lang/String;)V
throw v0
:try_end_2b
.catchall {:try_start_2 .. :try_end_2b} :catchall_2b
.line 122
:catchall_2b
move-exception v0
monitor-exit p0
throw v0
.line 132
:cond_2e
const-wide/16 v0, 0x0
:try_start_30
invoke-virtual {p1, v0, v1}, Lorg/bitcoinj/core/Transaction;->getInput(J)Lorg/bitcoinj/core/TransactionInput;
move-result-object v0
invoke-virtual {v0}, Lorg/bitcoinj/core/TransactionInput;->getSequenceNumber()J
move-result-wide v0
const-wide v2, 0xffffffffL
cmp-long v0, v0, v2
if-nez v0, :cond_49
.line 133
new-instance v0, Lorg/bitcoinj/core/VerificationException;
const-string v1, "Refund transaction\'s input\'s sequence number disables lock time"
invoke-direct {v0, v1}, Lorg/bitcoinj/core/VerificationException;-><init>(Ljava/lang/String;)V
throw v0
.line 134
:cond_49
invoke-virtual {p1}, Lorg/bitcoinj/core/Transaction;->getLockTime()J
move-result-wide v0
iget-wide v2, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->minExpireTime:J
cmp-long v0, v0, v2
if-gez v0, :cond_5b
.line 135
new-instance v0, Lorg/bitcoinj/core/VerificationException;
const-string v1, "Refund transaction has a lock time too soon"
invoke-direct {v0, v1}, Lorg/bitcoinj/core/VerificationException;-><init>(Ljava/lang/String;)V
throw v0
.line 139
:cond_5b
invoke-virtual {p1}, Lorg/bitcoinj/core/Transaction;->getOutputs()Ljava/util/List;
move-result-object v0
invoke-interface {v0}, Ljava/util/List;->size()I
move-result v0
if-eq v0, v4, :cond_6d
.line 140
new-instance v0, Lorg/bitcoinj/core/VerificationException;
const-string v1, "Refund transaction does not have exactly one output"
invoke-direct {v0, v1}, Lorg/bitcoinj/core/VerificationException;-><init>(Ljava/lang/String;)V
throw v0
.line 142
:cond_6d
invoke-virtual {p1}, Lorg/bitcoinj/core/Transaction;->getLockTime()J
move-result-wide v0
iput-wide v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->refundTransactionUnlockTimeSecs:J
.line 146
invoke-static {p2}, Lorg/bitcoinj/core/ECKey;->fromPublicOnly([B)Lorg/bitcoinj/core/ECKey;
move-result-object v0
iput-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->clientKey:Lorg/bitcoinj/core/ECKey;
.line 147
const/4 v0, 0x2
iget-object v1, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->clientKey:Lorg/bitcoinj/core/ECKey;
iget-object v2, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->serverKey:Lorg/bitcoinj/core/ECKey;
invoke-static {v1, v2}, Lcom/google/common/collect/ImmutableList;->of(Ljava/lang/Object;Ljava/lang/Object;)Lcom/google/common/collect/ImmutableList;
move-result-object v1
invoke-static {v0, v1}, Lorg/bitcoinj/script/ScriptBuilder;->createMultiSigOutputScript(ILjava/util/List;)Lorg/bitcoinj/script/Script;
move-result-object v3
.line 150
const/4 v1, 0x0
iget-object v2, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->serverKey:Lorg/bitcoinj/core/ECKey;
sget-object v4, Lorg/bitcoinj/core/Transaction$SigHash;->NONE:Lorg/bitcoinj/core/Transaction$SigHash;
const/4 v5, 0x1
move-object v0, p1
invoke-virtual/range {v0 .. v5}, Lorg/bitcoinj/core/Transaction;->calculateSignature(ILorg/bitcoinj/core/ECKey;Lorg/bitcoinj/script/Script;Lorg/bitcoinj/core/Transaction$SigHash;Z)Lorg/bitcoinj/crypto/TransactionSignature;
move-result-object v0
.line 151
sget-object v1, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->log:Lorg/slf4j/Logger;
const-string v2, "Signed refund transaction."
invoke-interface {v1, v2}, Lorg/slf4j/Logger;->info(Ljava/lang/String;)V
.line 152
const-wide/16 v2, 0x0
invoke-virtual {p1, v2, v3}, Lorg/bitcoinj/core/Transaction;->getOutput(J)Lorg/bitcoinj/core/TransactionOutput;
move-result-object v1
iput-object v1, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->clientOutput:Lorg/bitcoinj/core/TransactionOutput;
.line 153
iget-object v1, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV1ServerState;->stateMachine:Lorg/bitcoinj/protocols/channels/StateMachine;
sget-object v2, Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;->WAITING_FOR_MULTISIG_CONTRACT:Lorg/bitcoinj/protocols/channels/PaymentChannelServerState$State;
invoke-virtual {v1, v2}, Lorg/bitcoinj/protocols/channels/StateMachine;->transition(Ljava/lang/Enum;)V
.line 154
invoke-virtual {v0}, Lorg/bitcoinj/crypto/TransactionSignature;->encodeToBitcoin()[B
:try_end_aa
.catchall {:try_start_30 .. :try_end_aa} :catchall_2b
move-result-object v0
monitor-exit p0
return-object v0
.end method