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