From 7ddd5a49dd08ad7fb4df376ec4eab60c3b67f8bc Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Sat, 2 Feb 2019 21:41:33 +0100 Subject: [PATCH] ScriptBuilder: Rename createOutputScript(ECKey) to createP2PKOutputScript and add a byte[] variant. --- core/src/main/java/org/bitcoinj/core/Block.java | 2 +- .../java/org/bitcoinj/core/TransactionOutput.java | 2 +- .../java/org/bitcoinj/script/ScriptBuilder.java | 15 ++++++++++----- .../org/bitcoinj/core/FullBlockTestGenerator.java | 2 +- .../java/org/bitcoinj/core/TransactionTest.java | 4 ++-- .../src/test/java/org/bitcoinj/core/UTXOTest.java | 2 +- .../org/bitcoinj/script/ScriptPatternTest.java | 2 +- .../test/java/org/bitcoinj/script/ScriptTest.java | 6 +++--- .../bitcoinj/wallet/DefaultRiskAnalysisTest.java | 4 ++-- 9 files changed, 22 insertions(+), 17 deletions(-) diff --git a/core/src/main/java/org/bitcoinj/core/Block.java b/core/src/main/java/org/bitcoinj/core/Block.java index c58746a0..d5177104 100644 --- a/core/src/main/java/org/bitcoinj/core/Block.java +++ b/core/src/main/java/org/bitcoinj/core/Block.java @@ -882,7 +882,7 @@ public class Block extends Message { coinbase.addInput(new TransactionInput(params, coinbase, inputBuilder.build().getProgram())); coinbase.addOutput(new TransactionOutput(params, coinbase, value, - ScriptBuilder.createOutputScript(ECKey.fromPublicOnly(pubKeyTo)).getProgram())); + ScriptBuilder.createP2PKOutputScript(ECKey.fromPublicOnly(pubKeyTo)).getProgram())); transactions.add(coinbase); coinbase.setParent(this); coinbase.length = coinbase.unsafeBitcoinSerialize().length; diff --git a/core/src/main/java/org/bitcoinj/core/TransactionOutput.java b/core/src/main/java/org/bitcoinj/core/TransactionOutput.java index f16f4919..59fe6d77 100644 --- a/core/src/main/java/org/bitcoinj/core/TransactionOutput.java +++ b/core/src/main/java/org/bitcoinj/core/TransactionOutput.java @@ -96,7 +96,7 @@ public class TransactionOutput extends ChildMessage { * {@link Transaction#addOutput(Coin, ECKey)} instead of creating an output directly. */ public TransactionOutput(NetworkParameters params, @Nullable Transaction parent, Coin value, ECKey to) { - this(params, parent, value, ScriptBuilder.createOutputScript(to).getProgram()); + this(params, parent, value, ScriptBuilder.createP2PKOutputScript(to).getProgram()); } public TransactionOutput(NetworkParameters params, @Nullable Transaction parent, Coin value, byte[] scriptBytes) { diff --git a/core/src/main/java/org/bitcoinj/script/ScriptBuilder.java b/core/src/main/java/org/bitcoinj/script/ScriptBuilder.java index 733b2924..7f8021a8 100644 --- a/core/src/main/java/org/bitcoinj/script/ScriptBuilder.java +++ b/core/src/main/java/org/bitcoinj/script/ScriptBuilder.java @@ -275,11 +275,6 @@ public class ScriptBuilder { } } - /** Creates a scriptPubKey that encodes payment to the given raw public key. */ - public static Script createOutputScript(ECKey key) { - return new ScriptBuilder().data(key.getPubKey()).op(OP_CHECKSIG).build(); - } - /** * Creates a scriptSig that can redeem a P2PKH output. * If given signature is null, incomplete scriptSig will be created with OP_0 instead of signature @@ -430,6 +425,16 @@ public class ScriptBuilder { return builder.build(); } + /** Creates a scriptPubKey that encodes payment to the given raw public key. */ + public static Script createP2PKOutputScript(byte[] pubKey) { + return new ScriptBuilder().data(pubKey).op(OP_CHECKSIG).build(); + } + + /** Creates a scriptPubKey that encodes payment to the given raw public key. */ + public static Script createP2PKOutputScript(ECKey pubKey) { + return createP2PKOutputScript(pubKey.getPubKey()); + } + /** * Creates a scriptPubKey that sends to the given public key hash. */ diff --git a/core/src/test/java/org/bitcoinj/core/FullBlockTestGenerator.java b/core/src/test/java/org/bitcoinj/core/FullBlockTestGenerator.java index 03daed93..774a32c9 100644 --- a/core/src/test/java/org/bitcoinj/core/FullBlockTestGenerator.java +++ b/core/src/test/java/org/bitcoinj/core/FullBlockTestGenerator.java @@ -907,7 +907,7 @@ public class FullBlockTestGenerator { // A valid block created exactly like b44 to make sure the creation itself works Block b44 = new Block(params, Block.BLOCK_VERSION_GENESIS); - byte[] outScriptBytes = ScriptBuilder.createOutputScript(ECKey.fromPublicOnly(coinbaseOutKeyPubKey)).getProgram(); + byte[] outScriptBytes = ScriptBuilder.createP2PKOutputScript(ECKey.fromPublicOnly(coinbaseOutKeyPubKey)).getProgram(); { b44.setDifficultyTarget(b43.block.getDifficultyTarget()); b44.addCoinbaseTransaction(coinbaseOutKeyPubKey, ZERO, chainHeadHeight + 15); diff --git a/core/src/test/java/org/bitcoinj/core/TransactionTest.java b/core/src/test/java/org/bitcoinj/core/TransactionTest.java index b20e7729..6858d610 100644 --- a/core/src/test/java/org/bitcoinj/core/TransactionTest.java +++ b/core/src/test/java/org/bitcoinj/core/TransactionTest.java @@ -326,14 +326,14 @@ public class TransactionTest { ECKey key0 = ECKey.fromPrivate( HEX.decode("bbc27228ddcb9209d7fd6f36b02f7dfa6252af40bb2f1cbc7a557da8027ff866")); assertEquals("2103c9f4836b9a4f77fc0d81f7bcb01b7f1b35916864b9476c241ce9fc198bd25432ac", - HEX.encode(ScriptBuilder.createOutputScript(key0).getProgram())); + HEX.encode(ScriptBuilder.createP2PKOutputScript(key0).getProgram())); ECKey key1 = ECKey.fromPrivate( HEX.decode("619c335025c7f4012e556c2a58b2506e30b8511b53ade95ea316fd8c3286feb9")); assertEquals("025476c2e83188368da1ff3e292e7acafcdb3566bb0ad253f62fc70f07aeee6357", key1.getPublicKeyAsHex()); TransactionSignature txSig0 = tx.calculateSignature(0, key0, - ScriptBuilder.createOutputScript(key0).getProgram(), + ScriptBuilder.createP2PKOutputScript(key0).getProgram(), Transaction.SigHash.ALL, false); assertEquals("30450221008b9d1dc26ba6a9cb62127b02742fa9d754cd3bebf337f7a55d114c8e5cdd30be022040529b194ba3f9281a99f2b1c0a19c0489bc22ede944ccf4ecbab4cc618ef3ed01", HEX.encode(txSig0.encodeToBitcoin())); diff --git a/core/src/test/java/org/bitcoinj/core/UTXOTest.java b/core/src/test/java/org/bitcoinj/core/UTXOTest.java index 9721822a..bc8f7615 100644 --- a/core/src/test/java/org/bitcoinj/core/UTXOTest.java +++ b/core/src/test/java/org/bitcoinj/core/UTXOTest.java @@ -32,7 +32,7 @@ public class UTXOTest { @Test public void testJavaSerialization() throws Exception { ECKey key = new ECKey(); - UTXO utxo = new UTXO(Sha256Hash.of(new byte[]{1,2,3}), 1, Coin.COIN, 10, true, ScriptBuilder.createOutputScript(key)); + UTXO utxo = new UTXO(Sha256Hash.of(new byte[]{1,2,3}), 1, Coin.COIN, 10, true, ScriptBuilder.createP2PKOutputScript(key)); ByteArrayOutputStream os = new ByteArrayOutputStream(); new ObjectOutputStream(os).writeObject(utxo); UTXO utxoCopy = (UTXO) new ObjectInputStream( diff --git a/core/src/test/java/org/bitcoinj/script/ScriptPatternTest.java b/core/src/test/java/org/bitcoinj/script/ScriptPatternTest.java index c78208e6..9de63a5f 100644 --- a/core/src/test/java/org/bitcoinj/script/ScriptPatternTest.java +++ b/core/src/test/java/org/bitcoinj/script/ScriptPatternTest.java @@ -39,7 +39,7 @@ public class ScriptPatternTest { ScriptBuilder.createP2SHOutputScript(2, keys) )); assertTrue(ScriptPattern.isPayToPubKey( - ScriptBuilder.createOutputScript(keys.get(0)) + ScriptBuilder.createP2PKOutputScript(keys.get(0)) )); assertTrue(ScriptPattern.isPayToWitnessPubKeyHash( ScriptBuilder.createP2WPKHOutputScript(keys.get(0)) diff --git a/core/src/test/java/org/bitcoinj/script/ScriptTest.java b/core/src/test/java/org/bitcoinj/script/ScriptTest.java index 5dc49843..e0b5c127 100644 --- a/core/src/test/java/org/bitcoinj/script/ScriptTest.java +++ b/core/src/test/java/org/bitcoinj/script/ScriptTest.java @@ -93,7 +93,7 @@ public class ScriptTest { List pubkeys = new ArrayList<>(3); for (ECKey key : keys) pubkeys.add(ECKey.fromPublicOnly(key.getPubKeyPoint())); assertEquals(script.getPubKeys(), pubkeys); - assertFalse(ScriptPattern.isSentToMultisig(ScriptBuilder.createOutputScript(new ECKey()))); + assertFalse(ScriptPattern.isSentToMultisig(ScriptBuilder.createP2PKOutputScript(new ECKey()))); try { // Fail if we ask for more signatures than keys. Script.createMultiSigOutputScript(4, keys); @@ -440,7 +440,7 @@ public class ScriptTest { // pay to pubkey ECKey toKey = new ECKey(); Address toAddress = LegacyAddress.fromKey(TESTNET, toKey); - assertEquals(toAddress, ScriptBuilder.createOutputScript(toKey).getToAddress(TESTNET, true)); + assertEquals(toAddress, ScriptBuilder.createP2PKOutputScript(toKey).getToAddress(TESTNET, true)); // pay to pubkey hash assertEquals(toAddress, ScriptBuilder.createOutputScript(toAddress).getToAddress(TESTNET, true)); // pay to script hash @@ -452,6 +452,6 @@ public class ScriptTest { @Test(expected = ScriptException.class) public void getToAddressNoPubKey() throws Exception { - ScriptBuilder.createOutputScript(new ECKey()).getToAddress(TESTNET, false); + ScriptBuilder.createP2PKOutputScript(new ECKey()).getToAddress(TESTNET, false); } } diff --git a/core/src/test/java/org/bitcoinj/wallet/DefaultRiskAnalysisTest.java b/core/src/test/java/org/bitcoinj/wallet/DefaultRiskAnalysisTest.java index 3f37cdd8..114e3a5c 100644 --- a/core/src/test/java/org/bitcoinj/wallet/DefaultRiskAnalysisTest.java +++ b/core/src/test/java/org/bitcoinj/wallet/DefaultRiskAnalysisTest.java @@ -210,8 +210,8 @@ public class DefaultRiskAnalysisTest { // A pay to address output tx.addOutput(Coin.CENT, ScriptBuilder.createP2PKHOutputScript(key1)); // A pay to pubkey output - tx.addOutput(Coin.CENT, ScriptBuilder.createOutputScript(key1)); - tx.addOutput(Coin.CENT, ScriptBuilder.createOutputScript(key1)); + tx.addOutput(Coin.CENT, ScriptBuilder.createP2PKOutputScript(key1)); + tx.addOutput(Coin.CENT, ScriptBuilder.createP2PKOutputScript(key1)); // 1-of-2 multisig output. ImmutableList keys = ImmutableList.of(key1, new ECKey()); tx.addOutput(Coin.CENT, ScriptBuilder.createMultiSigOutputScript(1, keys));