PaymentChannelV2ServerState.smali
.class public Lorg/bitcoinj/protocols/channels/PaymentChannelV2ServerState;
.super Lorg/bitcoinj/protocols/channels/PaymentChannelServerState;
.source "PaymentChannelV2ServerState.java"
# static fields
.field private static final log:Lorg/slf4j/Logger;
# instance fields
.field protected clientKey:Lorg/bitcoinj/core/ECKey;
.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;
# 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/PaymentChannelV2ServerState;->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 61
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 142
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/PaymentChannelV2ServerState;->closedFuture:Lcom/google/common/util/concurrent/ao;
.line 62
iget-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV2ServerState;->stateMachine:Lorg/bitcoinj/protocols/channels/StateMachine;
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/StateMachine;->transition(Ljava/lang/Enum;)V
.line 63
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 53
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 142
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/PaymentChannelV2ServerState;->closedFuture:Lcom/google/common/util/concurrent/ao;
.line 54
monitor-enter p1
.line 55
:try_start_a
iget-object v0, p1, Lorg/bitcoinj/protocols/channels/StoredServerChannel;->clientKey:Lorg/bitcoinj/core/ECKey;
iput-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV2ServerState;->clientKey:Lorg/bitcoinj/core/ECKey;
.line 56
iget-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV2ServerState;->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 57
monitor-exit p1
return-void
:catchall_17
move-exception v0
monitor-exit p1
:try_end_19
.catchall {:try_start_a .. :try_end_19} :catchall_17
throw v0
.end method
.method static synthetic access$000()Lorg/slf4j/Logger;
.registers 1
.prologue
.line 42
sget-object v0, Lorg/bitcoinj/protocols/channels/PaymentChannelV2ServerState;->log:Lorg/slf4j/Logger;
return-object v0
.end method
.method private createP2SHRedeemScript()Lorg/bitcoinj/script/Script;
.registers 4
.prologue
.line 127
invoke-virtual {p0}, Lorg/bitcoinj/protocols/channels/PaymentChannelV2ServerState;->getExpiryTime()J
move-result-wide v0
invoke-static {v0, v1}, Ljava/math/BigInteger;->valueOf(J)Ljava/math/BigInteger;
move-result-object v0
iget-object v1, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV2ServerState;->clientKey:Lorg/bitcoinj/core/ECKey;
iget-object v2, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV2ServerState;->serverKey:Lorg/bitcoinj/core/ECKey;
invoke-static {v0, v1, v2}, Lorg/bitcoinj/script/ScriptBuilder;->createCLTVPaymentChannelOutput(Ljava/math/BigInteger;Lorg/bitcoinj/core/ECKey;Lorg/bitcoinj/core/ECKey;)Lorg/bitcoinj/script/Script;
move-result-object v0
return-object v0
.end method
.method private signP2SHInput(Lorg/bitcoinj/core/Transaction;Lorg/bitcoinj/core/Transaction$SigHash;Z)V
.registers 10
.prologue
.line 136
const/4 v1, 0x0
iget-object v2, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV2ServerState;->serverKey:Lorg/bitcoinj/core/ECKey;
invoke-direct {p0}, Lorg/bitcoinj/protocols/channels/PaymentChannelV2ServerState;->createP2SHRedeemScript()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 137
invoke-virtual {v0}, Lorg/bitcoinj/crypto/TransactionSignature;->encodeToBitcoin()[B
move-result-object v0
.line 138
iget-object v1, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV2ServerState;->bestValueSignature:[B
invoke-direct {p0}, Lorg/bitcoinj/protocols/channels/PaymentChannelV2ServerState;->createP2SHRedeemScript()Lorg/bitcoinj/script/Script;
move-result-object v2
invoke-static {v1, v0, v2}, Lorg/bitcoinj/script/ScriptBuilder;->createCLTVPaymentChannelP2SHInput([B[BLorg/bitcoinj/script/Script;)Lorg/bitcoinj/script/Script;
move-result-object v0
.line 139
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 140
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 146
monitor-enter p0
:try_start_2
iget-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV2ServerState;->storedServerChannel:Lorg/bitcoinj/protocols/channels/StoredServerChannel;
if-eqz v0, :cond_2c
.line 147
iget-object v2, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV2ServerState;->storedServerChannel:Lorg/bitcoinj/protocols/channels/StoredServerChannel;
.line 148
const/4 v0, 0x0
iput-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV2ServerState;->storedServerChannel:Lorg/bitcoinj/protocols/channels/StoredServerChannel;
.line 149
iget-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV2ServerState;->wallet:Lorg/bitcoinj/wallet/Wallet;
.line 150
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 151
invoke-virtual {v0, v2}, Lorg/bitcoinj/protocols/channels/StoredPaymentChannelServerStates;->closeChannel(Lorg/bitcoinj/protocols/channels/StoredServerChannel;)V
.line 152
invoke-virtual {p0}, Lorg/bitcoinj/protocols/channels/PaymentChannelV2ServerState;->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 153
iget-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV2ServerState;->closedFuture:Lcom/google/common/util/concurrent/ao;
:try_end_2a
.catchall {:try_start_2 .. :try_end_2a} :catchall_e1
.line 216
:goto_2a
monitor-exit p0
return-object v0
.line 156
:cond_2c
:try_start_2c
invoke-virtual {p0}, Lorg/bitcoinj/protocols/channels/PaymentChannelV2ServerState;->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 157
sget-object v0, Lorg/bitcoinj/protocols/channels/PaymentChannelV2ServerState;->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/PaymentChannelV2ServerState;->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 158
iget-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV2ServerState;->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 159
iget-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV2ServerState;->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 160
iget-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV2ServerState;->closedFuture:Lcom/google/common/util/concurrent/ao;
goto :goto_2a
.line 162
:cond_64
invoke-virtual {p0}, Lorg/bitcoinj/protocols/channels/PaymentChannelV2ServerState;->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 164
sget-object v0, Lorg/bitcoinj/protocols/channels/PaymentChannelV2ServerState;->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/PaymentChannelV2ServerState;->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 165
iget-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV2ServerState;->closedFuture:Lcom/google/common/util/concurrent/ao;
:try_end_86
.catchall {:try_start_2c .. :try_end_86} :catchall_e1
goto :goto_2a
.line 169
:cond_87
:try_start_87
iget-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV2ServerState;->bestValueToMe:Lorg/bitcoinj/core/Coin;
invoke-virtual {p0, v0}, Lorg/bitcoinj/protocols/channels/PaymentChannelV2ServerState;->makeUnsignedChannelContract(Lorg/bitcoinj/core/Coin;)Lorg/bitcoinj/wallet/SendRequest;
move-result-object v0
.line 170
iget-object v1, v0, Lorg/bitcoinj/wallet/SendRequest;->tx:Lorg/bitcoinj/core/Transaction;
.line 175
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/PaymentChannelV2ServerState;->signP2SHInput(Lorg/bitcoinj/core/Transaction;Lorg/bitcoinj/core/Transaction$SigHash;Z)V
.line 177
const/4 v2, 0x0
iput-boolean v2, v0, Lorg/bitcoinj/wallet/SendRequest;->shuffleOutputs:Z
.line 178
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 179
iget-object v2, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV2ServerState;->wallet:Lorg/bitcoinj/wallet/Wallet;
invoke-virtual {v2, v0}, Lorg/bitcoinj/wallet/Wallet;->completeTx(Lorg/bitcoinj/wallet/SendRequest;)V
.line 180
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/PaymentChannelV2ServerState;->feePaidForPayment:Lorg/bitcoinj/core/Coin;
.line 181
sget-object v0, Lorg/bitcoinj/protocols/channels/PaymentChannelV2ServerState;->log:Lorg/slf4j/Logger;
const-string v2, "Calculated fee is {}"
iget-object v3, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV2ServerState;->feePaidForPayment:Lorg/bitcoinj/core/Coin;
invoke-interface {v0, v2, v3}, Lorg/slf4j/Logger;->info(Ljava/lang/String;Ljava/lang/Object;)V
.line 182
iget-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV2ServerState;->feePaidForPayment:Lorg/bitcoinj/core/Coin;
iget-object v2, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV2ServerState;->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 183
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/PaymentChannelV2ServerState;->feePaidForPayment:Lorg/bitcoinj/core/Coin;
aput-object v5, v3, v4
const/4 v4, 0x1
iget-object v5, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV2ServerState;->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 185
new-instance v2, Lorg/bitcoinj/core/InsufficientMoneyException;
iget-object v3, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV2ServerState;->feePaidForPayment:Lorg/bitcoinj/core/Coin;
iget-object v4, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV2ServerState;->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 194
:catch_df
move-exception v0
:try_start_e0
throw v0
:try_end_e1
.catchall {:try_start_e0 .. :try_end_e1} :catchall_e1
.line 146
:catchall_e1
move-exception v0
monitor-exit p0
throw v0
.line 188
: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/PaymentChannelV2ServerState;->signP2SHInput(Lorg/bitcoinj/core/Transaction;Lorg/bitcoinj/core/Transaction$SigHash;Z)V
.line 190
invoke-virtual {v1}, Lorg/bitcoinj/core/Transaction;->verify()V
.line 191
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 192
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 195
:catch_105
move-exception v0
.line 196
:try_start_106
sget-object v2, Lorg/bitcoinj/protocols/channels/PaymentChannelV2ServerState;->log:Lorg/slf4j/Logger;
const-string v3, "Could not verify self-built tx\nMULTISIG {}\nCLOSE {}"
iget-object v4, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV2ServerState;->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 197
new-instance v1, Ljava/lang/RuntimeException;
invoke-direct {v1, v0}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/Throwable;)V
throw v1
.line 196
:cond_117
const-string v1, ""
goto :goto_10e
.line 199
:cond_11a
iget-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV2ServerState;->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 200
sget-object v0, Lorg/bitcoinj/protocols/channels/PaymentChannelV2ServerState;->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 202
iget-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV2ServerState;->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 203
new-instance v1, Lorg/bitcoinj/protocols/channels/PaymentChannelV2ServerState$1;
invoke-direct {v1, p0}, Lorg/bitcoinj/protocols/channels/PaymentChannelV2ServerState$1;-><init>(Lorg/bitcoinj/protocols/channels/PaymentChannelV2ServerState;)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 216
iget-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV2ServerState;->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 2
.prologue
.line 123
invoke-direct {p0}, Lorg/bitcoinj/protocols/channels/PaymentChannelV2ServerState;->createP2SHRedeemScript()Lorg/bitcoinj/script/Script;
move-result-object v0
invoke-static {v0}, Lorg/bitcoinj/script/ScriptBuilder;->createP2SHOutputScript(Lorg/bitcoinj/script/Script;)Lorg/bitcoinj/script/Script;
move-result-object v0
return-object v0
.end method
.method protected getClientKey()Lorg/bitcoinj/core/ECKey;
.registers 2
.prologue
.line 131
iget-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV2ServerState;->clientKey:Lorg/bitcoinj/core/ECKey;
return-object v0
.end method
.method public getClientOutput()Lorg/bitcoinj/core/TransactionOutput;
.registers 2
.prologue
.line 87
const/4 v0, 0x0
return-object v0
.end method
.method public declared-synchronized getFeePaid()Lorg/bitcoinj/core/Coin;
.registers 5
.prologue
.line 96
monitor-enter p0
:try_start_1
iget-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV2ServerState;->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 97
iget-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV2ServerState;->feePaidForPayment:Lorg/bitcoinj/core/Coin;
:try_end_15
.catchall {:try_start_1 .. :try_end_15} :catchall_17
monitor-exit p0
return-object v0
.line 96
:catchall_17
move-exception v0
monitor-exit p0
throw v0
.end method
.method public getMajorVersion()I
.registers 2
.prologue
.line 82
const/4 v0, 0x2
return v0
.end method
.method protected getSignedScript()Lorg/bitcoinj/script/Script;
.registers 2
.prologue
.line 102
invoke-direct {p0}, Lorg/bitcoinj/protocols/channels/PaymentChannelV2ServerState;->createP2SHRedeemScript()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 67
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 68
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 69
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_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 70
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 71
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 72
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 73
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 74
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_3e
if-ge v0, v3, :cond_4a
aget-object v4, v2, v0
.line 75
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 74
add-int/lit8 v0, v0, 0x1
goto :goto_3e
.line 77
:cond_4a
return-object v1
.end method
.method public provideClientKey([B)V
.registers 3
.prologue
.line 91
invoke-static {p1}, Lorg/bitcoinj/core/ECKey;->fromPublicOnly([B)Lorg/bitcoinj/core/ECKey;
move-result-object v0
iput-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelV2ServerState;->clientKey:Lorg/bitcoinj/core/ECKey;
.line 92
return-void
.end method
.method protected verifyContract(Lorg/bitcoinj/core/Transaction;)V
.registers 4
.prologue
.line 107
invoke-super {p0, p1}, Lorg/bitcoinj/protocols/channels/PaymentChannelServerState;->verifyContract(Lorg/bitcoinj/core/Transaction;)V
.line 109
invoke-virtual {p0}, Lorg/bitcoinj/protocols/channels/PaymentChannelV2ServerState;->getContractScript()Lorg/bitcoinj/script/Script;
move-result-object v0
invoke-virtual {v0}, Lorg/bitcoinj/script/Script;->getPubKeyHash()[B
move-result-object v0
.line 110
invoke-direct {p0}, Lorg/bitcoinj/protocols/channels/PaymentChannelV2ServerState;->createP2SHRedeemScript()Lorg/bitcoinj/script/Script;
move-result-object v1
invoke-virtual {v1}, Lorg/bitcoinj/script/Script;->getProgram()[B
move-result-object v1
invoke-static {v1}, Lorg/bitcoinj/core/Utils;->sha256hash160([B)[B
move-result-object v1
.line 111
invoke-static {v1, v0}, Ljava/util/Arrays;->equals([B[B)Z
move-result v0
if-nez v0, :cond_25
.line 112
new-instance v0, Lorg/bitcoinj/core/VerificationException;
const-string v1, "P2SH hash didn\'t match required contract - contract should be a CLTV micropayment channel to client and server in that order."
invoke-direct {v0, v1}, Lorg/bitcoinj/core/VerificationException;-><init>(Ljava/lang/String;)V
throw v0
.line 115
:cond_25
return-void
.end method