Skip to content

Commit 63bb14f

Browse files
authored
Merge pull request #116 from buidl-bitcoin/addressout
Added TxOut class method for creating outputs to addresses
2 parents 7ba70b9 + 9ec607f commit 63bb14f

File tree

3 files changed

+72
-40
lines changed

3 files changed

+72
-40
lines changed

buidl/test/test_tx.py

Lines changed: 26 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
from buidl.ecc import PrivateKey, Signature
2-
from buidl.helper import decode_base58
3-
from buidl.script import P2PKHScriptPubKey, RedeemScript, WitnessScript
2+
from buidl.script import RedeemScript, WitnessScript
43
from buidl.tx import Tx, TxIn, TxOut, TxFetcher
54

65
from buidl.test import OfflineTestCase
@@ -230,20 +229,24 @@ def test_sign_p2pkh(self):
230229
private_key = PrivateKey(secret=8675309)
231230
tx_ins = []
232231
prev_tx = bytes.fromhex(
233-
"0025bc3c0fa8b7eb55b9437fdbd016870d18e0df0ace7bc9864efc38414147c8"
232+
"448c1cf931cb8a35d648b75a63c7dbdc6d81a8b82be07c055d599a4ce810a20a"
234233
)
235234
tx_ins.append(TxIn(prev_tx, 0))
236-
tx_outs = []
237-
h160 = decode_base58("mzx5YhAH9kNHtcN481u6WkjeHjYtVeKVh2")
238-
tx_outs.append(
239-
TxOut(amount=int(0.99 * 100000000), script_pubkey=P2PKHScriptPubKey(h160))
240-
)
241-
h160 = decode_base58("mnrVtF8DWjMu839VW3rBfgYaAfKk8983Xf")
242-
tx_outs.append(
243-
TxOut(amount=int(0.1 * 100000000), script_pubkey=P2PKHScriptPubKey(h160))
244-
)
245-
tx = Tx(1, tx_ins, tx_outs, 0, network="testnet")
246-
self.assertTrue(tx.sign_p2pkh(0, private_key))
235+
tx_outs = [
236+
TxOut.to_address("mzx5YhAH9kNHtcN481u6WkjeHjYtVeKVh2", 5999000),
237+
TxOut.to_address("tb1qjfavna0z7r484w674f723w7g4jpeaplttt464w", 1000000),
238+
TxOut.to_address(
239+
"tb1qdhd06yyf7pazh2vx3hm37c3gq8lpra2993hlr784z4e3xwpgksmsceq9wc",
240+
1000000,
241+
),
242+
TxOut.to_address("2MyJsxLnxj7DsNch4xE7B3nMpB94kDPoE2s", 1000000),
243+
TxOut.to_address(
244+
"tb1p9gpzhc5fhlwlf49ze00fgjszxh5pl2p7az76758xwarweq08gcas8qa0r7",
245+
1000000,
246+
),
247+
]
248+
tx_obj = Tx(1, tx_ins, tx_outs, 0, network="signet")
249+
self.assertTrue(tx_obj.sign_p2pkh(0, private_key))
247250

248251
def test_sign_p2wpkh(self):
249252
private_key = PrivateKey(secret=8675309)
@@ -254,8 +257,7 @@ def test_sign_p2wpkh(self):
254257
fee = 500
255258
tx_in = TxIn(prev_tx, prev_index)
256259
amount = tx_in.value(network="testnet") - fee
257-
h160 = decode_base58("mqYz6JpuKukHzPg94y4XNDdPCEJrNkLQcv")
258-
tx_out = TxOut(amount=amount, script_pubkey=P2PKHScriptPubKey(h160))
260+
tx_out = TxOut.to_address("mqYz6JpuKukHzPg94y4XNDdPCEJrNkLQcv", amount)
259261
t = Tx(1, [tx_in], [tx_out], 0, network="testnet", segwit=True)
260262
self.assertTrue(t.sign_input(0, private_key))
261263
want = "0100000000010197ad6fb37f5764c85b375639cbd07dfafd94c2ed18f2fb6cad9fdd329507fa6b0000000000ffffffff014c400f00000000001976a9146e13971913b9aa89659a9f53d327baa8826f2d7588ac02483045022100feab5b8feefd5e774bdfdc1dc23525b40f1ffaa25a376f8453158614f00fa6cb02204456493d0bc606ebeb3fa008e056bbc96a67cb0c11abcc871bfc2bec60206bf0012103935581e52c354cd2f484fe8ed83af7a3097005b2f9c60bff71d35bd795f54b6700000000"
@@ -271,8 +273,7 @@ def test_sign_p2sh_p2wpkh(self):
271273
fee = 500
272274
tx_in = TxIn(prev_tx, prev_index)
273275
amount = tx_in.value(network="testnet") - fee
274-
h160 = decode_base58("mqYz6JpuKukHzPg94y4XNDdPCEJrNkLQcv")
275-
tx_out = TxOut(amount=amount, script_pubkey=P2PKHScriptPubKey(h160))
276+
tx_out = TxOut.to_address("mqYz6JpuKukHzPg94y4XNDdPCEJrNkLQcv", amount)
276277
t = Tx(1, [tx_in], [tx_out], 0, network="testnet", segwit=True)
277278
self.assertTrue(t.sign_input(0, private_key, redeem_script=redeem_script))
278279
want = "01000000000101e92e1c1d29218348f8ec9463a9fc94670f675a7f82ae100f3e8a5cbd63b4192e0100000017160014d52ad7ca9b3d096a38e752c2018e6fbc40cdf26fffffffff014c400f00000000001976a9146e13971913b9aa89659a9f53d327baa8826f2d7588ac0247304402205e3ae5ac9a0e0a16ae04b0678c5732973ce31051ba9f42193e69843e600d84f2022060a91cbd48899b1bf5d1ffb7532f69ab74bc1701a253a415196b38feb599163b012103935581e52c354cd2f484fe8ed83af7a3097005b2f9c60bff71d35bd795f54b6700000000"
@@ -285,22 +286,16 @@ def test_sign_input(self):
285286
"0025bc3c0fa8b7eb55b9437fdbd016870d18e0df0ace7bc9864efc38414147c8"
286287
)
287288
tx_ins.append(TxIn(prev_tx, 0))
288-
tx_outs = []
289-
h160 = decode_base58("mzx5YhAH9kNHtcN481u6WkjeHjYtVeKVh2")
290-
tx_outs.append(
291-
TxOut(amount=int(0.99 * 100000000), script_pubkey=P2PKHScriptPubKey(h160))
292-
)
293-
h160 = decode_base58("mnrVtF8DWjMu839VW3rBfgYaAfKk8983Xf")
294-
tx_outs.append(
295-
TxOut(amount=int(0.1 * 100000000), script_pubkey=P2PKHScriptPubKey(h160))
296-
)
289+
tx_outs = [
290+
TxOut.to_address("mzx5YhAH9kNHtcN481u6WkjeHjYtVeKVh2", 99000000),
291+
TxOut.to_address("mnrVtF8DWjMu839VW3rBfgYaAfKk8983Xf", 10000000),
292+
]
297293
tx = Tx(1, tx_ins, tx_outs, 0, network="testnet")
298294
self.assertTrue(tx.sign_input(0, private_key))
299295

300296
def test_sign_p2sh_multisig(self):
301297
private_key1 = PrivateKey(secret=8675309)
302298
private_key2 = PrivateKey(secret=8675310)
303-
304299
redeem_script = RedeemScript.create_p2sh_multisig(
305300
quorum_m=2,
306301
pubkey_hexes=[
@@ -309,7 +304,6 @@ def test_sign_p2sh_multisig(self):
309304
],
310305
sort_keys=False,
311306
)
312-
313307
prev_tx = bytes.fromhex(
314308
"ded9b3c8b71032d42ea3b2fd5211d75b39a90637f967e637b64dfdb887dd11d7"
315309
)
@@ -318,8 +312,7 @@ def test_sign_p2sh_multisig(self):
318312
tx_in = TxIn(prev_tx, prev_index)
319313
tx_in_sats = 1000000
320314
amount = tx_in_sats - fee_sats
321-
h160 = decode_base58("mqYz6JpuKukHzPg94y4XNDdPCEJrNkLQcv")
322-
tx_out = TxOut(amount=amount, script_pubkey=P2PKHScriptPubKey(h160))
315+
tx_out = TxOut.to_address("mqYz6JpuKukHzPg94y4XNDdPCEJrNkLQcv", amount)
323316
t = Tx(1, [tx_in], [tx_out], 0, network="testnet", segwit=True)
324317
sig1 = t.get_sig_legacy(0, private_key1, redeem_script=redeem_script)
325318
sig2 = t.get_sig_legacy(0, private_key2, redeem_script=redeem_script)
@@ -356,8 +349,7 @@ def test_sign_p2wsh_multisig(self):
356349
fee = 500
357350
tx_in = TxIn(prev_tx, prev_index)
358351
amount = tx_in.value(network="testnet") - fee
359-
h160 = decode_base58("mqYz6JpuKukHzPg94y4XNDdPCEJrNkLQcv")
360-
tx_out = TxOut(amount=amount, script_pubkey=P2PKHScriptPubKey(h160))
352+
tx_out = TxOut.to_address("mqYz6JpuKukHzPg94y4XNDdPCEJrNkLQcv", amount)
361353
t = Tx(1, [tx_in], [tx_out], 0, network="testnet", segwit=True)
362354
sig1 = t.get_sig_segwit(0, private_key1, witness_script=witness_script)
363355
sig2 = t.get_sig_segwit(0, private_key2, witness_script=witness_script)
@@ -394,8 +386,7 @@ def test_sign_p2sh_p2wsh_multisig(self):
394386
fee = 500
395387
tx_in = TxIn(prev_tx, prev_index)
396388
amount = tx_in.value(network="testnet") - fee
397-
h160 = decode_base58("mqYz6JpuKukHzPg94y4XNDdPCEJrNkLQcv")
398-
tx_out = TxOut(amount=amount, script_pubkey=P2PKHScriptPubKey(h160))
389+
tx_out = TxOut.to_address("mqYz6JpuKukHzPg94y4XNDdPCEJrNkLQcv", amount)
399390
t = Tx(1, [tx_in], [tx_out], 0, network="testnet", segwit=True)
400391
sig1 = t.get_sig_segwit(0, private_key1, witness_script=witness_script)
401392
sig2 = t.get_sig_segwit(0, private_key2, witness_script=witness_script)

0 commit comments

Comments
 (0)