PaymentChannelClientState.smali
.class public abstract Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;
.super Ljava/lang/Object;
.source "PaymentChannelClientState.java"
# static fields
.field private static final log:Lorg/slf4j/Logger;
# instance fields
.field final myKey:Lorg/bitcoinj/core/ECKey;
.field final serverKey:Lorg/bitcoinj/core/ECKey;
.field protected final stateMachine:Lorg/bitcoinj/protocols/channels/StateMachine;
.annotation system Ldalvik/annotation/Signature;
value = {
"Lorg/bitcoinj/protocols/channels/StateMachine",
"<",
"Lorg/bitcoinj/protocols/channels/PaymentChannelClientState$State;",
">;"
}
.end annotation
.end field
.field protected storedChannel:Lorg/bitcoinj/protocols/channels/StoredClientChannel;
.field protected valueToMe:Lorg/bitcoinj/core/Coin;
.field final wallet:Lorg/bitcoinj/wallet/Wallet;
# direct methods
.method static constructor <clinit>()V
.registers 1
.prologue
.line 74
const-class v0, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;
invoke-static {v0}, Lorg/slf4j/LoggerFactory;->getLogger(Ljava/lang/Class;)Lorg/slf4j/Logger;
move-result-object v0
sput-object v0, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->log:Lorg/slf4j/Logger;
return-void
.end method
.method constructor <init>(Lorg/bitcoinj/protocols/channels/StoredClientChannel;Lorg/bitcoinj/wallet/Wallet;)V
.registers 6
.prologue
.line 105
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 106
new-instance v0, Lorg/bitcoinj/protocols/channels/StateMachine;
sget-object v1, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState$State;->UNINITIALISED:Lorg/bitcoinj/protocols/channels/PaymentChannelClientState$State;
invoke-virtual {p0}, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->getStateTransitions()Lcom/google/common/collect/cf;
move-result-object v2
invoke-direct {v0, v1, v2}, Lorg/bitcoinj/protocols/channels/StateMachine;-><init>(Ljava/lang/Enum;Lcom/google/common/collect/cf;)V
iput-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->stateMachine:Lorg/bitcoinj/protocols/channels/StateMachine;
.line 107
invoke-static {p2}, Lcom/google/common/base/n;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, Lorg/bitcoinj/wallet/Wallet;
iput-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->wallet:Lorg/bitcoinj/wallet/Wallet;
.line 108
iget-object v0, p1, Lorg/bitcoinj/protocols/channels/StoredClientChannel;->myKey:Lorg/bitcoinj/core/ECKey;
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/ECKey;
iput-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->myKey:Lorg/bitcoinj/core/ECKey;
.line 109
iget-object v0, p1, Lorg/bitcoinj/protocols/channels/StoredClientChannel;->serverKey:Lorg/bitcoinj/core/ECKey;
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/ECKey;
iput-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->serverKey:Lorg/bitcoinj/core/ECKey;
.line 110
iput-object p1, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->storedChannel:Lorg/bitcoinj/protocols/channels/StoredClientChannel;
.line 111
iget-object v0, p1, Lorg/bitcoinj/protocols/channels/StoredClientChannel;->valueToMe:Lorg/bitcoinj/core/Coin;
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/Coin;
iput-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->valueToMe:Lorg/bitcoinj/core/Coin;
.line 112
return-void
.end method
.method public constructor <init>(Lorg/bitcoinj/wallet/Wallet;Lorg/bitcoinj/core/ECKey;Lorg/bitcoinj/core/ECKey;Lorg/bitcoinj/core/Coin;J)V
.registers 10
.prologue
.line 142
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 143
new-instance v0, Lorg/bitcoinj/protocols/channels/StateMachine;
sget-object v1, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState$State;->UNINITIALISED:Lorg/bitcoinj/protocols/channels/PaymentChannelClientState$State;
invoke-virtual {p0}, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->getStateTransitions()Lcom/google/common/collect/cf;
move-result-object v2
invoke-direct {v0, v1, v2}, Lorg/bitcoinj/protocols/channels/StateMachine;-><init>(Ljava/lang/Enum;Lcom/google/common/collect/cf;)V
iput-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->stateMachine:Lorg/bitcoinj/protocols/channels/StateMachine;
.line 144
invoke-static {p1}, Lcom/google/common/base/n;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, Lorg/bitcoinj/wallet/Wallet;
iput-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->wallet:Lorg/bitcoinj/wallet/Wallet;
.line 145
invoke-static {p3}, Lcom/google/common/base/n;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, Lorg/bitcoinj/core/ECKey;
iput-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->serverKey:Lorg/bitcoinj/core/ECKey;
.line 146
invoke-static {p2}, Lcom/google/common/base/n;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, Lorg/bitcoinj/core/ECKey;
iput-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->myKey:Lorg/bitcoinj/core/ECKey;
.line 147
invoke-static {p4}, Lcom/google/common/base/n;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, Lorg/bitcoinj/core/Coin;
iput-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->valueToMe:Lorg/bitcoinj/core/Coin;
.line 148
return-void
.end method
.method static synthetic access$000()Lorg/slf4j/Logger;
.registers 1
.prologue
.line 73
sget-object v0, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->log:Lorg/slf4j/Logger;
return-object v0
.end method
.method static synthetic access$100(Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;)V
.registers 1
.prologue
.line 73
invoke-direct {p0}, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->deleteChannelFromWallet()V
return-void
.end method
.method private declared-synchronized deleteChannelFromWallet()V
.registers 4
.prologue
.line 195
monitor-enter p0
:try_start_1
sget-object v0, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->log:Lorg/slf4j/Logger;
const-string v1, "Close tx has confirmed, deleting channel from wallet: {}"
iget-object v2, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->storedChannel:Lorg/bitcoinj/protocols/channels/StoredClientChannel;
invoke-interface {v0, v1, v2}, Lorg/slf4j/Logger;->info(Ljava/lang/String;Ljava/lang/Object;)V
.line 196
iget-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->wallet:Lorg/bitcoinj/wallet/Wallet;
.line 197
invoke-virtual {v0}, Lorg/bitcoinj/wallet/Wallet;->getExtensions()Ljava/util/Map;
move-result-object v0
sget-object v1, Lorg/bitcoinj/protocols/channels/StoredPaymentChannelClientStates;->EXTENSION_ID:Ljava/lang/String;
invoke-interface {v0, v1}, Ljava/util/Map;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, Lorg/bitcoinj/protocols/channels/StoredPaymentChannelClientStates;
.line 198
iget-object v1, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->storedChannel:Lorg/bitcoinj/protocols/channels/StoredClientChannel;
invoke-virtual {v0, v1}, Lorg/bitcoinj/protocols/channels/StoredPaymentChannelClientStates;->removeChannel(Lorg/bitcoinj/protocols/channels/StoredClientChannel;)V
.line 199
const/4 v0, 0x0
iput-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->storedChannel:Lorg/bitcoinj/protocols/channels/StoredClientChannel;
:try_end_20
.catchall {:try_start_1 .. :try_end_20} :catchall_22
.line 200
monitor-exit p0
return-void
.line 195
:catchall_22
move-exception v0
monitor-exit p0
throw v0
.end method
.method private declared-synchronized makeUnsignedChannelContract(Lorg/bitcoinj/core/Coin;)Lorg/bitcoinj/core/Transaction;
.registers 6
.prologue
.line 252
monitor-enter p0
:try_start_1
new-instance v0, Lorg/bitcoinj/core/Transaction;
iget-object v1, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->wallet:Lorg/bitcoinj/wallet/Wallet;
invoke-virtual {v1}, Lorg/bitcoinj/wallet/Wallet;->getParams()Lorg/bitcoinj/core/NetworkParameters;
move-result-object v1
invoke-direct {v0, v1}, Lorg/bitcoinj/core/Transaction;-><init>(Lorg/bitcoinj/core/NetworkParameters;)V
.line 253
invoke-virtual {p0}, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->getContractInternal()Lorg/bitcoinj/core/Transaction;
move-result-object v1
const-wide/16 v2, 0x0
invoke-virtual {v1, v2, v3}, Lorg/bitcoinj/core/Transaction;->getOutput(J)Lorg/bitcoinj/core/TransactionOutput;
move-result-object v1
invoke-virtual {v0, v1}, Lorg/bitcoinj/core/Transaction;->addInput(Lorg/bitcoinj/core/TransactionOutput;)Lorg/bitcoinj/core/TransactionInput;
.line 257
iget-object v1, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->myKey:Lorg/bitcoinj/core/ECKey;
iget-object v2, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->wallet:Lorg/bitcoinj/wallet/Wallet;
invoke-virtual {v2}, Lorg/bitcoinj/wallet/Wallet;->getParams()Lorg/bitcoinj/core/NetworkParameters;
move-result-object v2
invoke-virtual {v1, v2}, Lorg/bitcoinj/core/ECKey;->toAddress(Lorg/bitcoinj/core/NetworkParameters;)Lorg/bitcoinj/core/Address;
move-result-object v1
invoke-virtual {v0, p1, v1}, Lorg/bitcoinj/core/Transaction;->addOutput(Lorg/bitcoinj/core/Coin;Lorg/bitcoinj/core/Address;)Lorg/bitcoinj/core/TransactionOutput;
:try_end_28
.catchall {:try_start_1 .. :try_end_28} :catchall_2a
.line 258
monitor-exit p0
return-object v0
.line 252
:catchall_2a
move-exception v0
monitor-exit p0
throw v0
.end method
# virtual methods
.method public declared-synchronized checkNotExpired()V
.registers 5
.prologue
.line 266
monitor-enter p0
:try_start_1
invoke-static {}, Lorg/bitcoinj/core/Utils;->currentTimeSeconds()J
move-result-wide v0
invoke-virtual {p0}, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->getExpiryTime()J
move-result-wide v2
cmp-long v0, v0, v2
if-lez v0, :cond_22
.line 267
iget-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->stateMachine:Lorg/bitcoinj/protocols/channels/StateMachine;
sget-object v1, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState$State;->EXPIRED:Lorg/bitcoinj/protocols/channels/PaymentChannelClientState$State;
invoke-virtual {v0, v1}, Lorg/bitcoinj/protocols/channels/StateMachine;->transition(Ljava/lang/Enum;)V
.line 268
invoke-virtual {p0}, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->disconnectFromChannel()V
.line 269
new-instance v0, Ljava/lang/IllegalStateException;
const-string v1, "Channel expired"
invoke-direct {v0, v1}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/String;)V
throw v0
:try_end_1f
.catchall {:try_start_1 .. :try_end_1f} :catchall_1f
.line 266
:catchall_1f
move-exception v0
monitor-exit p0
throw v0
.line 271
:cond_22
monitor-exit p0
return-void
.end method
.method public declared-synchronized disconnectFromChannel()V
.registers 4
.prologue
.line 343
monitor-enter p0
:try_start_1
iget-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->storedChannel:Lorg/bitcoinj/protocols/channels/StoredClientChannel;
:try_end_3
.catchall {:try_start_1 .. :try_end_3} :catchall_14
if-nez v0, :cond_7
.line 347
:goto_5
monitor-exit p0
return-void
.line 345
:cond_7
:try_start_7
iget-object v1, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->storedChannel:Lorg/bitcoinj/protocols/channels/StoredClientChannel;
monitor-enter v1
:try_end_a
.catchall {:try_start_7 .. :try_end_a} :catchall_14
.line 346
:try_start_a
iget-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->storedChannel:Lorg/bitcoinj/protocols/channels/StoredClientChannel;
const/4 v2, 0x0
iput-boolean v2, v0, Lorg/bitcoinj/protocols/channels/StoredClientChannel;->active:Z
.line 347
monitor-exit v1
goto :goto_5
:catchall_11
move-exception v0
monitor-exit v1
:try_end_13
.catchall {:try_start_a .. :try_end_13} :catchall_11
:try_start_13
throw v0
:try_end_14
.catchall {:try_start_13 .. :try_end_14} :catchall_14
.line 343
:catchall_14
move-exception v0
monitor-exit p0
throw v0
.end method
.method abstract doStoreChannelInWallet(Lorg/bitcoinj/core/Sha256Hash;)V
.end method
.method protected editContractSendRequest(Lorg/bitcoinj/wallet/SendRequest;)V
.registers 2
.prologue
.line 244
return-void
.end method
.method declared-synchronized fakeSave()V
.registers 3
.prologue
.line 355
monitor-enter p0
:try_start_1
iget-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->wallet:Lorg/bitcoinj/wallet/Wallet;
invoke-virtual {p0}, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->getContractInternal()Lorg/bitcoinj/core/Transaction;
move-result-object v1
invoke-virtual {v0, v1}, Lorg/bitcoinj/wallet/Wallet;->commitTx(Lorg/bitcoinj/core/Transaction;)V
:try_end_a
.catch Lorg/bitcoinj/core/VerificationException; {:try_start_1 .. :try_end_a} :catch_13
.catchall {:try_start_1 .. :try_end_a} :catchall_1a
.line 359
:try_start_a
iget-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->stateMachine:Lorg/bitcoinj/protocols/channels/StateMachine;
sget-object v1, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState$State;->PROVIDE_MULTISIG_CONTRACT_TO_SERVER:Lorg/bitcoinj/protocols/channels/PaymentChannelClientState$State;
invoke-virtual {v0, v1}, Lorg/bitcoinj/protocols/channels/StateMachine;->transition(Ljava/lang/Enum;)V
:try_end_11
.catchall {:try_start_a .. :try_end_11} :catchall_1a
.line 360
monitor-exit p0
return-void
.line 356
:catch_13
move-exception v0
.line 357
:try_start_14
new-instance v1, Ljava/lang/RuntimeException;
invoke-direct {v1, v0}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/Throwable;)V
throw v1
:try_end_1a
.catchall {:try_start_14 .. :try_end_1a} :catchall_1a
.line 355
:catchall_1a
move-exception v0
monitor-exit p0
throw v0
.end method
.method public abstract getContract()Lorg/bitcoinj/core/Transaction;
.end method
.method protected abstract getContractInternal()Lorg/bitcoinj/core/Transaction;
.end method
.method protected abstract getContractScript()Lorg/bitcoinj/script/Script;
.end method
.method protected abstract getExpiryTime()J
.end method
.method public abstract getMajorVersion()I
.end method
.method abstract getRefundTransaction()Lorg/bitcoinj/core/Transaction;
.end method
.method public abstract getRefundTxFees()Lorg/bitcoinj/core/Coin;
.end method
.method protected abstract getSignedScript()Lorg/bitcoinj/script/Script;
.end method
.method public declared-synchronized getState()Lorg/bitcoinj/protocols/channels/PaymentChannelClientState$State;
.registers 2
.prologue
.line 203
monitor-enter p0
:try_start_1
iget-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->stateMachine:Lorg/bitcoinj/protocols/channels/StateMachine;
invoke-virtual {v0}, Lorg/bitcoinj/protocols/channels/StateMachine;->getState()Ljava/lang/Enum;
move-result-object v0
check-cast v0, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState$State;
:try_end_9
.catchall {:try_start_1 .. :try_end_9} :catchall_b
monitor-exit p0
return-object v0
:catchall_b
move-exception v0
monitor-exit p0
throw v0
.end method
.method protected abstract getStateTransitions()Lcom/google/common/collect/cf;
.annotation system Ldalvik/annotation/Signature;
value = {
"()",
"Lcom/google/common/collect/cf",
"<",
"Lorg/bitcoinj/protocols/channels/PaymentChannelClientState$State;",
"Lorg/bitcoinj/protocols/channels/PaymentChannelClientState$State;",
">;"
}
.end annotation
.end method
.method public abstract getTotalValue()Lorg/bitcoinj/core/Coin;
.end method
.method public declared-synchronized getValueRefunded()Lorg/bitcoinj/core/Coin;
.registers 3
.prologue
.line 410
monitor-enter p0
:try_start_1
iget-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->stateMachine:Lorg/bitcoinj/protocols/channels/StateMachine;
sget-object v1, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState$State;->READY:Lorg/bitcoinj/protocols/channels/PaymentChannelClientState$State;
invoke-virtual {v0, v1}, Lorg/bitcoinj/protocols/channels/StateMachine;->checkState(Ljava/lang/Enum;)V
.line 411
iget-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->valueToMe:Lorg/bitcoinj/core/Coin;
:try_end_a
.catchall {:try_start_1 .. :try_end_a} :catchall_c
monitor-exit p0
return-object v0
.line 410
:catchall_c
move-exception v0
monitor-exit p0
throw v0
.end method
.method public declared-synchronized getValueSpent()Lorg/bitcoinj/core/Coin;
.registers 3
.prologue
.line 418
monitor-enter p0
:try_start_1
invoke-virtual {p0}, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->getTotalValue()Lorg/bitcoinj/core/Coin;
move-result-object v0
invoke-virtual {p0}, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->getValueRefunded()Lorg/bitcoinj/core/Coin;
move-result-object v1
invoke-virtual {v0, v1}, Lorg/bitcoinj/core/Coin;->subtract(Lorg/bitcoinj/core/Coin;)Lorg/bitcoinj/core/Coin;
:try_end_c
.catchall {:try_start_1 .. :try_end_c} :catchall_f
move-result-object v0
monitor-exit p0
return-object v0
:catchall_f
move-exception v0
monitor-exit p0
throw v0
.end method
.method protected abstract getValueToMe()Lorg/bitcoinj/core/Coin;
.end method
.method public declared-synchronized incrementPaymentBy(Lorg/bitcoinj/core/Coin;Lorg/spongycastle/crypto/params/KeyParameter;)Lorg/bitcoinj/protocols/channels/PaymentChannelClientState$IncrementedPayment;
.registers 10
.prologue
.line 296
monitor-enter p0
:try_start_1
iget-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->stateMachine:Lorg/bitcoinj/protocols/channels/StateMachine;
sget-object v1, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState$State;->READY:Lorg/bitcoinj/protocols/channels/PaymentChannelClientState$State;
invoke-virtual {v0, v1}, Lorg/bitcoinj/protocols/channels/StateMachine;->checkState(Ljava/lang/Enum;)V
.line 297
invoke-virtual {p0}, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->checkNotExpired()V
.line 298
invoke-static {p1}, Lcom/google/common/base/n;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object;
.line 299
invoke-virtual {p1}, Lorg/bitcoinj/core/Coin;->signum()I
move-result v0
if-gez v0, :cond_1f
.line 300
new-instance v0, Lorg/bitcoinj/protocols/channels/ValueOutOfRangeException;
const-string v1, "Tried to decrement payment"
invoke-direct {v0, v1}, Lorg/bitcoinj/protocols/channels/ValueOutOfRangeException;-><init>(Ljava/lang/String;)V
throw v0
:try_end_1c
.catchall {:try_start_1 .. :try_end_1c} :catchall_1c
.line 296
:catchall_1c
move-exception v0
monitor-exit p0
throw v0
.line 301
:cond_1f
:try_start_1f
invoke-virtual {p0}, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->getValueToMe()Lorg/bitcoinj/core/Coin;
move-result-object v0
invoke-virtual {v0, p1}, Lorg/bitcoinj/core/Coin;->subtract(Lorg/bitcoinj/core/Coin;)Lorg/bitcoinj/core/Coin;
move-result-object v0
.line 302
sget-object v1, Lorg/bitcoinj/core/Transaction;->MIN_NONDUST_OUTPUT:Lorg/bitcoinj/core/Coin;
invoke-virtual {v0, v1}, Lorg/bitcoinj/core/Coin;->compareTo(Lorg/bitcoinj/core/Coin;)I
move-result v1
if-gez v1, :cond_9c
invoke-virtual {v0}, Lorg/bitcoinj/core/Coin;->signum()I
move-result v1
if-lez v1, :cond_9c
.line 303
sget-object v0, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->log:Lorg/slf4j/Logger;
const-string v1, "New value being sent back as change was smaller than minimum nondust output, sending all"
invoke-interface {v0, v1}, Lorg/slf4j/Logger;->info(Ljava/lang/String;)V
.line 304
invoke-virtual {p0}, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->getValueToMe()Lorg/bitcoinj/core/Coin;
move-result-object p1
.line 305
sget-object v0, Lorg/bitcoinj/core/Coin;->ZERO:Lorg/bitcoinj/core/Coin;
move-object v6, v0
.line 307
:goto_43
invoke-virtual {v6}, Lorg/bitcoinj/core/Coin;->signum()I
move-result v0
if-gez v0, :cond_64
.line 308
new-instance v0, Lorg/bitcoinj/protocols/channels/ValueOutOfRangeException;
new-instance v1, Ljava/lang/StringBuilder;
const-string v2, "Channel has too little money to pay "
invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {v1, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
move-result-object v1
const-string v2, " satoshis"
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
invoke-direct {v0, v1}, Lorg/bitcoinj/protocols/channels/ValueOutOfRangeException;-><init>(Ljava/lang/String;)V
throw v0
.line 309
:cond_64
invoke-direct {p0, v6}, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->makeUnsignedChannelContract(Lorg/bitcoinj/core/Coin;)Lorg/bitcoinj/core/Transaction;
move-result-object v0
.line 310
sget-object v1, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->log:Lorg/slf4j/Logger;
const-string v2, "Signing new payment tx {}"
invoke-interface {v1, v2, v0}, Lorg/slf4j/Logger;->info(Ljava/lang/String;Ljava/lang/Object;)V
.line 314
sget-object v1, Lorg/bitcoinj/core/Coin;->ZERO:Lorg/bitcoinj/core/Coin;
invoke-virtual {v6, v1}, Lorg/bitcoinj/core/Coin;->equals(Ljava/lang/Object;)Z
move-result v1
if-eqz v1, :cond_99
.line 315
sget-object v4, Lorg/bitcoinj/core/Transaction$SigHash;->NONE:Lorg/bitcoinj/core/Transaction$SigHash;
.line 318
:goto_79
const/4 v1, 0x0
iget-object v2, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->myKey:Lorg/bitcoinj/core/ECKey;
invoke-virtual {v2, p2}, Lorg/bitcoinj/core/ECKey;->maybeDecrypt(Lorg/spongycastle/crypto/params/KeyParameter;)Lorg/bitcoinj/core/ECKey;
move-result-object v2
invoke-virtual {p0}, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->getSignedScript()Lorg/bitcoinj/script/Script;
move-result-object v3
const/4 v5, 0x1
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 319
iput-object v6, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->valueToMe:Lorg/bitcoinj/core/Coin;
.line 320
invoke-virtual {p0}, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->updateChannelInWallet()V
.line 321
new-instance v1, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState$IncrementedPayment;
invoke-direct {v1}, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState$IncrementedPayment;-><init>()V
.line 322
iput-object v0, v1, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState$IncrementedPayment;->signature:Lorg/bitcoinj/crypto/TransactionSignature;
.line 323
iput-object p1, v1, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState$IncrementedPayment;->amount:Lorg/bitcoinj/core/Coin;
:try_end_97
.catchall {:try_start_1f .. :try_end_97} :catchall_1c
.line 324
monitor-exit p0
return-object v1
.line 317
:cond_99
:try_start_99
sget-object v4, Lorg/bitcoinj/core/Transaction$SigHash;->SINGLE:Lorg/bitcoinj/core/Transaction$SigHash;
:try_end_9b
.catchall {:try_start_99 .. :try_end_9b} :catchall_1c
goto :goto_79
:cond_9c
move-object v6, v0
goto :goto_43
.end method
.method protected declared-synchronized initWalletListeners()V
.registers 4
.prologue
.line 152
monitor-enter p0
:try_start_1
iget-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->storedChannel:Lorg/bitcoinj/protocols/channels/StoredClientChannel;
if-eqz v0, :cond_e
iget-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->storedChannel:Lorg/bitcoinj/protocols/channels/StoredClientChannel;
iget-object v0, v0, Lorg/bitcoinj/protocols/channels/StoredClientChannel;->close:Lorg/bitcoinj/core/Transaction;
if-eqz v0, :cond_e
.line 153
invoke-virtual {p0}, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->watchCloseConfirmations()V
.line 155
:cond_e
iget-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->wallet:Lorg/bitcoinj/wallet/Wallet;
sget-object v1, Lorg/bitcoinj/utils/Threading;->SAME_THREAD:Ljava/util/concurrent/Executor;
new-instance v2, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState$1;
invoke-direct {v2, p0}, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState$1;-><init>(Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;)V
invoke-virtual {v0, v1, v2}, Lorg/bitcoinj/wallet/Wallet;->addCoinsReceivedEventListener(Ljava/util/concurrent/Executor;Lorg/bitcoinj/wallet/listeners/WalletCoinsReceivedEventListener;)V
:try_end_1a
.catchall {:try_start_1 .. :try_end_1a} :catchall_1c
.line 172
monitor-exit p0
return-void
.line 152
:catchall_1c
move-exception v0
monitor-exit p0
throw v0
.end method
.method public initiate()V
.registers 2
.prologue
.line 221
const/4 v0, 0x0
invoke-virtual {p0, v0}, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->initiate(Lorg/spongycastle/crypto/params/KeyParameter;)V
.line 222
return-void
.end method
.method public abstract initiate(Lorg/spongycastle/crypto/params/KeyParameter;)V
.end method
.method public declared-synchronized isSettlementTransaction(Lorg/bitcoinj/core/Transaction;)Z
.registers 6
.prologue
.line 119
monitor-enter p0
:try_start_1
invoke-virtual {p1}, Lorg/bitcoinj/core/Transaction;->verify()V
.line 120
const-wide/16 v0, 0x0
invoke-virtual {p1, v0, v1}, Lorg/bitcoinj/core/Transaction;->getInput(J)Lorg/bitcoinj/core/TransactionInput;
move-result-object v0
invoke-virtual {p0}, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->getContractInternal()Lorg/bitcoinj/core/Transaction;
move-result-object v1
const-wide/16 v2, 0x0
invoke-virtual {v1, v2, v3}, Lorg/bitcoinj/core/Transaction;->getOutput(J)Lorg/bitcoinj/core/TransactionOutput;
move-result-object v1
invoke-virtual {v0, v1}, Lorg/bitcoinj/core/TransactionInput;->verify(Lorg/bitcoinj/core/TransactionOutput;)V
:try_end_17
.catch Lorg/bitcoinj/core/VerificationException; {:try_start_1 .. :try_end_17} :catch_1a
.catchall {:try_start_1 .. :try_end_17} :catchall_1d
.line 121
const/4 v0, 0x1
.line 123
:goto_18
monitor-exit p0
return v0
:catch_1a
move-exception v0
const/4 v0, 0x0
goto :goto_18
.line 119
:catchall_1d
move-exception v0
monitor-exit p0
throw v0
.end method
.method public declared-synchronized storeChannelInWallet(Lorg/bitcoinj/core/Sha256Hash;)V
.registers 4
.prologue
.line 377
monitor-enter p0
:try_start_1
iget-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->stateMachine:Lorg/bitcoinj/protocols/channels/StateMachine;
sget-object v1, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState$State;->SAVE_STATE_IN_WALLET:Lorg/bitcoinj/protocols/channels/PaymentChannelClientState$State;
invoke-virtual {v0, v1}, Lorg/bitcoinj/protocols/channels/StateMachine;->checkState(Ljava/lang/Enum;)V
.line 378
if-eqz p1, :cond_1f
const/4 v0, 0x1
:goto_b
invoke-static {v0}, Lcom/google/common/base/n;->checkState(Z)V
.line 379
iget-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->storedChannel:Lorg/bitcoinj/protocols/channels/StoredClientChannel;
if-eqz v0, :cond_21
.line 380
iget-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->storedChannel:Lorg/bitcoinj/protocols/channels/StoredClientChannel;
iget-object v0, v0, Lorg/bitcoinj/protocols/channels/StoredClientChannel;->id:Lorg/bitcoinj/core/Sha256Hash;
invoke-virtual {v0, p1}, Lorg/bitcoinj/core/Sha256Hash;->equals(Ljava/lang/Object;)Z
move-result v0
invoke-static {v0}, Lcom/google/common/base/n;->checkState(Z)V
:try_end_1d
.catchall {:try_start_1 .. :try_end_1d} :catchall_35
.line 391
:goto_1d
monitor-exit p0
return-void
.line 378
:cond_1f
const/4 v0, 0x0
goto :goto_b
.line 383
:cond_21
:try_start_21
invoke-virtual {p0, p1}, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->doStoreChannelInWallet(Lorg/bitcoinj/core/Sha256Hash;)V
:try_end_24
.catchall {:try_start_21 .. :try_end_24} :catchall_35
.line 386
:try_start_24
iget-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->wallet:Lorg/bitcoinj/wallet/Wallet;
invoke-virtual {p0}, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->getContractInternal()Lorg/bitcoinj/core/Transaction;
move-result-object v1
invoke-virtual {v0, v1}, Lorg/bitcoinj/wallet/Wallet;->commitTx(Lorg/bitcoinj/core/Transaction;)V
:try_end_2d
.catch Lorg/bitcoinj/core/VerificationException; {:try_start_24 .. :try_end_2d} :catch_38
.catchall {:try_start_24 .. :try_end_2d} :catchall_35
.line 390
:try_start_2d
iget-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->stateMachine:Lorg/bitcoinj/protocols/channels/StateMachine;
sget-object v1, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState$State;->PROVIDE_MULTISIG_CONTRACT_TO_SERVER:Lorg/bitcoinj/protocols/channels/PaymentChannelClientState$State;
invoke-virtual {v0, v1}, Lorg/bitcoinj/protocols/channels/StateMachine;->transition(Ljava/lang/Enum;)V
:try_end_34
.catchall {:try_start_2d .. :try_end_34} :catchall_35
goto :goto_1d
.line 377
:catchall_35
move-exception v0
monitor-exit p0
throw v0
.line 387
:catch_38
move-exception v0
.line 388
:try_start_39
new-instance v1, Ljava/lang/RuntimeException;
invoke-direct {v1, v0}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/Throwable;)V
throw v1
:try_end_3f
.catchall {:try_start_39 .. :try_end_3f} :catchall_35
.end method
.method protected declared-synchronized updateChannelInWallet()V
.registers 3
.prologue
.line 328
monitor-enter p0
:try_start_1
iget-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->storedChannel:Lorg/bitcoinj/protocols/channels/StoredClientChannel;
:try_end_3
.catchall {:try_start_1 .. :try_end_3} :catchall_23
if-nez v0, :cond_7
.line 334
:goto_5
monitor-exit p0
return-void
.line 330
:cond_7
:try_start_7
iget-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->storedChannel:Lorg/bitcoinj/protocols/channels/StoredClientChannel;
invoke-virtual {p0}, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->getValueToMe()Lorg/bitcoinj/core/Coin;
move-result-object v1
iput-object v1, v0, Lorg/bitcoinj/protocols/channels/StoredClientChannel;->valueToMe:Lorg/bitcoinj/core/Coin;
.line 331
iget-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->wallet:Lorg/bitcoinj/wallet/Wallet;
.line 332
invoke-virtual {v0}, Lorg/bitcoinj/wallet/Wallet;->getExtensions()Ljava/util/Map;
move-result-object v0
sget-object v1, Lorg/bitcoinj/protocols/channels/StoredPaymentChannelClientStates;->EXTENSION_ID:Ljava/lang/String;
invoke-interface {v0, v1}, Ljava/util/Map;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, Lorg/bitcoinj/protocols/channels/StoredPaymentChannelClientStates;
.line 333
iget-object v1, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->storedChannel:Lorg/bitcoinj/protocols/channels/StoredClientChannel;
invoke-virtual {v0, v1}, Lorg/bitcoinj/protocols/channels/StoredPaymentChannelClientStates;->updatedChannel(Lorg/bitcoinj/protocols/channels/StoredClientChannel;)V
:try_end_22
.catchall {:try_start_7 .. :try_end_22} :catchall_23
goto :goto_5
.line 328
:catchall_23
move-exception v0
monitor-exit p0
throw v0
.end method
.method protected watchCloseConfirmations()V
.registers 4
.prologue
.line 178
iget-object v0, p0, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;->storedChannel:Lorg/bitcoinj/protocols/channels/StoredClientChannel;
iget-object v0, v0, Lorg/bitcoinj/protocols/channels/StoredClientChannel;->close:Lorg/bitcoinj/core/Transaction;
invoke-virtual {v0}, Lorg/bitcoinj/core/Transaction;->getConfidence()Lorg/bitcoinj/core/TransactionConfidence;
move-result-object v0
.line 179
invoke-static {}, Lorg/bitcoinj/core/Context;->get()Lorg/bitcoinj/core/Context;
move-result-object v1
invoke-virtual {v1}, Lorg/bitcoinj/core/Context;->getEventHorizon()I
move-result v1
.line 180
sget-object v2, Lorg/bitcoinj/utils/Threading;->SAME_THREAD:Ljava/util/concurrent/Executor;
invoke-virtual {v0, v1, v2}, Lorg/bitcoinj/core/TransactionConfidence;->getDepthFuture(ILjava/util/concurrent/Executor;)Lcom/google/common/util/concurrent/y;
move-result-object v0
.line 181
new-instance v1, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState$2;
invoke-direct {v1, p0}, Lorg/bitcoinj/protocols/channels/PaymentChannelClientState$2;-><init>(Lorg/bitcoinj/protocols/channels/PaymentChannelClientState;)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 192
return-void
.end method