def test_segwit_transaction(self): outputs = [ ("2NEcbT1xeB7488HqpmXeC2u5zqYFQ5n4x5Q", 50000000), ("2N21Gzex7WJCzzsA5D33nofcnm1dYSKuJzT", 149990000), ] private_key = PrivateKeyTestnet(WALLET_FORMAT_TEST_1) tx = create_new_transaction(private_key, UNSPENTS_SEGWIT, outputs) assert tx == FINAL_TX_SEGWIT
def test_multisig_tx_many_inputs(self): key1 = PrivateKeyTestnet(WALLET_FORMAT_TEST_1) key2 = PrivateKeyTestnet(WALLET_FORMAT_TEST_2) p = [key1.public_key.hex(), key2.public_key.hex()] multi1 = MultiSigTestnet(key1, p, 2) multi2 = MultiSigTestnet(key2, p, 2) tx0 = create_new_transaction( multi1, UNSPENTS_MULTISIG_MANY, [("bcrt1qpm3x3jrdqhefptw3hlymmlpejttct08zgzzd2t", 4000000000), ("2NCWeVbWmaUp92dSFP3RddPk6r3GTd6cDd6", 999971920)]) tx1 = multi2.sign_transaction(tx0, unspents=UNSPENTS_MULTISIG_MANY) assert tx1 == FINAL_TX_MULTISIG_MANY
def test_batch_and_multisig_tx(self): key1 = PrivateKeyTestnet(WALLET_FORMAT_TEST_1) key2 = PrivateKeyTestnet(WALLET_FORMAT_TEST_2) p = [key1.public_key.hex(), key2.public_key.hex()] multi1 = MultiSigTestnet(key1, p, 2) multi2 = MultiSigTestnet(key2, p, 2) tx0 = create_new_transaction( multi2, UNSPENTS_BATCH, [("bcrt1qpm3x3jrdqhefptw3hlymmlpejttct08zgzzd2t", 4000000000), ("2NCWeVbWmaUp92dSFP3RddPk6r3GTd6cDd6", 999971920)]) tx1 = key1.sign_transaction(tx0, unspents=UNSPENTS_BATCH) tx2 = multi1.sign_transaction(tx1, unspents=UNSPENTS_BATCH[::-1]) assert tx2 == FINAL_TX_BATCH
def test_dont_overwrite_relative_locktime(self): # opting in for RBF shouldn't overwrite a relative locktime unspents = [] for unspent in UNSPENTS_RBF: locked_unspent = Unspent.from_dict(unspent.to_dict()) locked_unspent.sequence = 50000 locked_unspent.opt_in_for_RBF() unspents.append(locked_unspent) rbf_tx = create_new_transaction(PrivateKey(), unspents, OUTPUTS_RBF) START = 8 # exclude transaction version END = len( rbf_tx) - 12 # exlude locktime and 2x one byte of empty witness assert rbf_tx[START:END] != FINAL_TX_RBF[START:END]
def test_opt_in_for_RBF(self): # test based on tx 4162a41175658e76ae5d22f02739932c9997caaeaeaa1e1db30f352f926aa97a, mined in block 640001 unspents = [] for unspent in UNSPENTS_RBF: replaceable_unspent = Unspent.from_dict(unspent.to_dict()) replaceable_unspent.opt_in_for_RBF() unspents.append(replaceable_unspent) rbf_tx = create_new_transaction(PrivateKey(), unspents, OUTPUTS_RBF) START = 8 # exclude transaction version END = len( rbf_tx) - 12 # exlude locktime and 2x one byte of empty witness assert rbf_tx[START:END] == FINAL_TX_RBF[START:END]
def test_matching(self): private_key = PrivateKey(WALLET_FORMAT_MAIN) tx = create_new_transaction(private_key, UNSPENTS, OUTPUTS) assert tx[-288:] == FINAL_TX_1[-288:]