Changeset View
Changeset View
Standalone View
Standalone View
test/functional/mempool_packages.py
| Show All 10 Lines | |||||
| from test_framework.util import ( | from test_framework.util import ( | ||||
| assert_equal, | assert_equal, | ||||
| assert_raises_rpc_error, | assert_raises_rpc_error, | ||||
| satoshi_round, | satoshi_round, | ||||
| sync_blocks, | sync_blocks, | ||||
| sync_mempools, | sync_mempools, | ||||
| ) | ) | ||||
| MAX_ANCESTORS = 25 | # TODO: The activation code can be reverted after the new policy becomes | ||||
| MAX_DESCENDANTS = 25 | # active. | ||||
| # Phonon dummy activation time | |||||
| ACTIVATION_TIME = 2000000000 | |||||
| # Replay protection time needs to be moved beyond phonon activation | |||||
| REPLAY_PROTECTION_TIME = ACTIVATION_TIME * 2 | |||||
| MAX_ANCESTORS = 50 | |||||
| MAX_DESCENDANTS = 50 | |||||
| class MempoolPackagesTest(BitcoinTestFramework): | class MempoolPackagesTest(BitcoinTestFramework): | ||||
| def set_test_params(self): | def set_test_params(self): | ||||
| self.num_nodes = 2 | self.num_nodes = 2 | ||||
| self.extra_args = [["-maxorphantx=1000"], | |||||
| ["-maxorphantx=1000", "-limitancestorcount=5"]] | common_params = ["-maxorphantx=1000", | ||||
| "-phononactivationtime={}".format(ACTIVATION_TIME), | |||||
| "-replayprotectionactivationtime={}".format(REPLAY_PROTECTION_TIME)] | |||||
| self.extra_args = [common_params, | |||||
| common_params + ["-limitancestorcount=5"]] | |||||
| def skip_test_if_missing_module(self): | def skip_test_if_missing_module(self): | ||||
| self.skip_if_no_wallet() | self.skip_if_no_wallet() | ||||
| # Build a transaction that spends parent_txid:vout | # Build a transaction that spends parent_txid:vout | ||||
| # Return amount sent | # Return amount sent | ||||
| def chain_transaction(self, node, parent_txid, vout, | def chain_transaction(self, node, parent_txid, vout, | ||||
| value, fee, num_outputs): | value, fee, num_outputs): | ||||
| send_value = satoshi_round((value - fee) / num_outputs) | send_value = satoshi_round((value - fee) / num_outputs) | ||||
| inputs = [{'txid': parent_txid, 'vout': vout}] | inputs = [{'txid': parent_txid, 'vout': vout}] | ||||
| outputs = {} | outputs = {} | ||||
| for i in range(num_outputs): | for i in range(num_outputs): | ||||
| outputs[node.getnewaddress()] = send_value | outputs[node.getnewaddress()] = send_value | ||||
| rawtx = node.createrawtransaction(inputs, outputs) | rawtx = node.createrawtransaction(inputs, outputs) | ||||
| signedtx = node.signrawtransactionwithwallet(rawtx) | signedtx = node.signrawtransactionwithwallet(rawtx) | ||||
| txid = node.sendrawtransaction(signedtx['hex']) | txid = node.sendrawtransaction(signedtx['hex']) | ||||
| fulltx = node.getrawtransaction(txid, 1) | fulltx = node.getrawtransaction(txid, 1) | ||||
| # make sure we didn't generate a change output | # make sure we didn't generate a change output | ||||
| assert len(fulltx['vout']) == num_outputs | assert len(fulltx['vout']) == num_outputs | ||||
| return (txid, send_value) | return (txid, send_value) | ||||
| def run_test(self): | def run_test(self): | ||||
| [n.setmocktime(ACTIVATION_TIME) for n in self.nodes] | |||||
| # Mine some blocks and have them mature. | # Mine some blocks and have them mature. | ||||
| self.nodes[0].generate(101) | self.nodes[0].generate(101) | ||||
| utxo = self.nodes[0].listunspent(10) | utxo = self.nodes[0].listunspent(10) | ||||
| txid = utxo[0]['txid'] | txid = utxo[0]['txid'] | ||||
| vout = utxo[0]['vout'] | vout = utxo[0]['vout'] | ||||
| value = utxo[0]['amount'] | value = utxo[0]['amount'] | ||||
| fee = Decimal("0.0001") | fee = Decimal("0.0001") | ||||
| ▲ Show 20 Lines • Show All 278 Lines • Show Last 20 Lines | |||||