def test_non_witness_transaction(self): """See if sending a regular transaction works, and create a utxo to use in later tests.""" # Mine a block with an anyone-can-spend coinbase, # let it mature, then try to spend it. block = self.build_next_block(version=1) block.solve() self.test_node.send_message(msg_no_witness_block(block)) self.test_node.sync_with_ping() # make sure the block was processed txid = block.vtx[0].sha256 self.nodes[0].generate(99) # let the block mature # Create a transaction that spends the coinbase tx = CTransaction() tx.vin.append(CTxIn(COutPoint(txid, 0), b"")) tx.vout.append( CTxOut(49 * 100000000, CScript([OP_TRUE, OP_DROP] * 15 + [OP_TRUE]))) tx.calc_sha256() # Check that serializing it with or without witness is the same # This is a sanity check of our testing framework. assert_equal(msg_tx(tx).serialize(), msg_witness_tx(tx).serialize()) self.test_node.send_message(msg_witness_tx(tx)) self.test_node.sync_with_ping() # make sure the tx was processed assert tx.hash in self.nodes[0].getrawmempool() # Save this transaction for later self.utxo.append(UTXO(tx.sha256, 0, 49 * 100000000)) self.nodes[0].generate(1)
def test_transaction_acceptance(node, p2p, tx, with_witness, accepted, reason=None): """Send a transaction to the node and check that it's accepted to the mempool - Submit the transaction over the p2p interface - use the getrawmempool rpc to check for acceptance.""" reason = [reason] if reason else [] with node.assert_debug_log(expected_msgs=reason): p2p.send_message(msg_witness_tx(tx) if with_witness else msg_tx(tx)) p2p.sync_with_ping() assert_equal(tx.hash in node.getrawmempool(), accepted)
def send_via_mininode(self, cmds, address): funds_tx = self.admin.sendtoaddress(address, Decimal("1")) self.wait_for_transaction(funds_tx, timeout=10) _, n = Admin.find_output_for_address(self.admin, funds_tx, address) raw_tx = create_tx(cmds, self.admin, funds_tx, n, address, Decimal("0.09")) raw_tx = set_type_to_admin(raw_tx) raw_tx = self.admin.signrawtransaction(raw_tx)["hex"] tx = CTransaction() f = BytesIO(hex_str_to_bytes(raw_tx)) tx.deserialize(f) self.admin.p2p.send_and_ping(msg_witness_tx(tx)) tx.rehash() txid = tx.hash return txid