CustomTransactionSigner.smali
.class public abstract Lorg/bitcoinj/signers/CustomTransactionSigner;
.super Lorg/bitcoinj/signers/StatelessTransactionSigner;
.source "CustomTransactionSigner.java"
# static fields
.field private static final log:Lorg/slf4j/Logger;
# direct methods
.method static constructor <clinit>()V
.registers 1
.prologue
.line 42
const-class v0, Lorg/bitcoinj/signers/CustomTransactionSigner;
invoke-static {v0}, Lorg/slf4j/LoggerFactory;->getLogger(Ljava/lang/Class;)Lorg/slf4j/Logger;
move-result-object v0
sput-object v0, Lorg/bitcoinj/signers/CustomTransactionSigner;->log:Lorg/slf4j/Logger;
return-void
.end method
.method public constructor <init>()V
.registers 1
.prologue
.line 41
invoke-direct {p0}, Lorg/bitcoinj/signers/StatelessTransactionSigner;-><init>()V
return-void
.end method
# virtual methods
.method protected abstract getSignature(Lorg/bitcoinj/core/Sha256Hash;Ljava/util/List;)Lorg/bitcoinj/signers/CustomTransactionSigner$SignatureAndKey;
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Lorg/bitcoinj/core/Sha256Hash;",
"Ljava/util/List",
"<",
"Lorg/bitcoinj/crypto/ChildNumber;",
">;)",
"Lorg/bitcoinj/signers/CustomTransactionSigner$SignatureAndKey;"
}
.end annotation
.end method
.method public isReady()Z
.registers 2
.prologue
.line 46
const/4 v0, 0x1
return v0
.end method
.method public signInputs(Lorg/bitcoinj/signers/TransactionSigner$ProposedTransaction;Lorg/bitcoinj/wallet/KeyBag;)Z
.registers 15
.prologue
const/4 v2, 0x0
.line 51
iget-object v4, p1, Lorg/bitcoinj/signers/TransactionSigner$ProposedTransaction;->partialTx:Lorg/bitcoinj/core/Transaction;
.line 52
invoke-virtual {v4}, Lorg/bitcoinj/core/Transaction;->getInputs()Ljava/util/List;
move-result-object v0
invoke-interface {v0}, Ljava/util/List;->size()I
move-result v5
move v3, v2
.line 53
:goto_c
if-ge v3, v5, :cond_97
.line 54
int-to-long v0, v3
invoke-virtual {v4, v0, v1}, Lorg/bitcoinj/core/Transaction;->getInput(J)Lorg/bitcoinj/core/TransactionInput;
move-result-object v6
.line 55
invoke-virtual {v6}, Lorg/bitcoinj/core/TransactionInput;->getConnectedOutput()Lorg/bitcoinj/core/TransactionOutput;
move-result-object v0
.line 56
if-eqz v0, :cond_51
.line 59
invoke-virtual {v0}, Lorg/bitcoinj/core/TransactionOutput;->getScriptPubKey()Lorg/bitcoinj/script/Script;
move-result-object v7
.line 60
invoke-virtual {v7}, Lorg/bitcoinj/script/Script;->isPayToScriptHash()Z
move-result v0
if-nez v0, :cond_2c
.line 61
sget-object v0, Lorg/bitcoinj/signers/CustomTransactionSigner;->log:Lorg/slf4j/Logger;
const-string v1, "CustomTransactionSigner works only with P2SH transactions"
invoke-interface {v0, v1}, Lorg/slf4j/Logger;->warn(Ljava/lang/String;)V
move v0, v2
.line 91
:goto_2b
return v0
.line 65
:cond_2c
invoke-virtual {v6}, Lorg/bitcoinj/core/TransactionInput;->getScriptSig()Lorg/bitcoinj/script/Script;
move-result-object v0
invoke-static {v0}, Lcom/google/common/base/n;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, Lorg/bitcoinj/script/Script;
.line 71
:try_start_36
invoke-virtual {v6}, Lorg/bitcoinj/core/TransactionInput;->getScriptSig()Lorg/bitcoinj/script/Script;
move-result-object v1
int-to-long v8, v3
invoke-virtual {v6}, Lorg/bitcoinj/core/TransactionInput;->getConnectedOutput()Lorg/bitcoinj/core/TransactionOutput;
move-result-object v10
invoke-virtual {v10}, Lorg/bitcoinj/core/TransactionOutput;->getScriptPubKey()Lorg/bitcoinj/script/Script;
move-result-object v10
invoke-virtual {v1, v4, v8, v9, v10}, Lorg/bitcoinj/script/Script;->correctlySpends(Lorg/bitcoinj/core/Transaction;JLorg/bitcoinj/script/Script;)V
.line 72
sget-object v1, Lorg/bitcoinj/signers/CustomTransactionSigner;->log:Lorg/slf4j/Logger;
const-string v8, "Input {} already correctly spends output, assuming SIGHASH type used will be safe and skipping signing."
invoke-static {v3}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
move-result-object v9
invoke-interface {v1, v8, v9}, Lorg/slf4j/Logger;->warn(Ljava/lang/String;Ljava/lang/Object;)V
:try_end_51
.catch Lorg/bitcoinj/core/ScriptException; {:try_start_36 .. :try_end_51} :catch_55
.line 53
:cond_51
:goto_51
add-int/lit8 v0, v3, 0x1
move v3, v0
goto :goto_c
.line 78
:catch_55
move-exception v1
invoke-virtual {v6, p2}, Lorg/bitcoinj/core/TransactionInput;->getConnectedRedeemData(Lorg/bitcoinj/wallet/KeyBag;)Lorg/bitcoinj/wallet/RedeemData;
move-result-object v1
.line 79
if-nez v1, :cond_68
.line 80
sget-object v0, Lorg/bitcoinj/signers/CustomTransactionSigner;->log:Lorg/slf4j/Logger;
const-string v1, "No redeem data found for input {}"
invoke-static {v3}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
move-result-object v6
invoke-interface {v0, v1, v6}, Lorg/slf4j/Logger;->warn(Ljava/lang/String;Ljava/lang/Object;)V
goto :goto_51
.line 84
:cond_68
iget-object v1, v1, Lorg/bitcoinj/wallet/RedeemData;->redeemScript:Lorg/bitcoinj/script/Script;
sget-object v8, Lorg/bitcoinj/core/Transaction$SigHash;->ALL:Lorg/bitcoinj/core/Transaction$SigHash;
invoke-virtual {v4, v3, v1, v8, v2}, Lorg/bitcoinj/core/Transaction;->hashForSignature(ILorg/bitcoinj/script/Script;Lorg/bitcoinj/core/Transaction$SigHash;Z)Lorg/bitcoinj/core/Sha256Hash;
move-result-object v8
.line 85
iget-object v1, p1, Lorg/bitcoinj/signers/TransactionSigner$ProposedTransaction;->keyPaths:Ljava/util/Map;
invoke-interface {v1, v7}, Ljava/util/Map;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v1
check-cast v1, Ljava/util/List;
invoke-virtual {p0, v8, v1}, Lorg/bitcoinj/signers/CustomTransactionSigner;->getSignature(Lorg/bitcoinj/core/Sha256Hash;Ljava/util/List;)Lorg/bitcoinj/signers/CustomTransactionSigner$SignatureAndKey;
move-result-object v1
.line 86
new-instance v9, Lorg/bitcoinj/crypto/TransactionSignature;
iget-object v10, v1, Lorg/bitcoinj/signers/CustomTransactionSigner$SignatureAndKey;->sig:Lorg/bitcoinj/core/ECKey$ECDSASignature;
sget-object v11, Lorg/bitcoinj/core/Transaction$SigHash;->ALL:Lorg/bitcoinj/core/Transaction$SigHash;
invoke-direct {v9, v10, v11, v2}, Lorg/bitcoinj/crypto/TransactionSignature;-><init>(Lorg/bitcoinj/core/ECKey$ECDSASignature;Lorg/bitcoinj/core/Transaction$SigHash;Z)V
.line 87
iget-object v1, v1, Lorg/bitcoinj/signers/CustomTransactionSigner$SignatureAndKey;->pubKey:Lorg/bitcoinj/core/ECKey;
invoke-virtual {v0, v8, v1}, Lorg/bitcoinj/script/Script;->getSigInsertionIndex(Lorg/bitcoinj/core/Sha256Hash;Lorg/bitcoinj/core/ECKey;)I
move-result v1
.line 88
invoke-virtual {v9}, Lorg/bitcoinj/crypto/TransactionSignature;->encodeToBitcoin()[B
move-result-object v8
invoke-virtual {v7, v0, v8, v1}, Lorg/bitcoinj/script/Script;->getScriptSigWithSignature(Lorg/bitcoinj/script/Script;[BI)Lorg/bitcoinj/script/Script;
move-result-object v0
.line 89
invoke-virtual {v6, v0}, Lorg/bitcoinj/core/TransactionInput;->setScriptSig(Lorg/bitcoinj/script/Script;)V
goto :goto_51
.line 91
:cond_97
const/4 v0, 0x1
goto :goto_2b
.end method