123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- #!/usr/bin/env python3
- #
- # MMGen Wallet, a terminal-based cryptocurrency wallet
- # Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
- #
- # This program is free software: you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
- # the Free Software Foundation, either version 3 of the License, or
- # (at your option) any later version.
- #
- # This program is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- # GNU General Public License for more details.
- #
- # You should have received a copy of the GNU General Public License
- # along with this program. If not, see <http://www.gnu.org/licenses/>.
- """
- test.cmdtest_d.ct_chainsplit: Forking scenario tests for the cmdtest.py test suite
- This module is unmaintained and currently non-functional
- """
- from mmgen.util import die
- from .common import get_file_with_ext, rt_pw
- from .ct_regtest import CmdTestRegtest
- class CmdTestChainsplit(CmdTestRegtest):
- 'forking scenario tests for the cmdtest.py test suite'
- cmd_group = (
- ('split_setup', 'regtest forking scenario setup'),
- ('walletgen_bob', 'generating Bob’s wallet'),
- ('addrgen_bob', 'generating Bob’s addresses'),
- ('addrimport_bob', 'importing Bob’s addresses'),
- ('fund_bob', 'funding Bob’s wallet'),
- ('split_fork', 'regtest split fork'),
- ('split_start_btc', 'start regtest daemon (BTC)'),
- ('split_start_b2x', 'start regtest daemon (B2X)'),
- ('split_gen_btc', 'mining a block (BTC)'),
- ('split_gen_b2x', 'mining 100 blocks (B2X)'),
- ('split_do_split', 'creating coin splitting transactions'),
- ('split_sign_b2x', 'signing B2X split transaction'),
- ('split_sign_btc', 'signing BTC split transaction'),
- ('split_send_b2x', 'sending B2X split transaction'),
- ('split_send_btc', 'sending BTC split transaction'),
- ('split_gen_btc', 'mining a block (BTC)'),
- ('split_gen_b2x2', 'mining a block (B2X)'),
- ('split_txdo_timelock_bad_btc', 'sending transaction with bad locktime (BTC)'),
- ('split_txdo_timelock_good_btc', 'sending transaction with good locktime (BTC)'),
- ('split_txdo_timelock_bad_b2x', 'sending transaction with bad locktime (B2X)'),
- ('split_txdo_timelock_good_b2x', 'sending transaction with good locktime (B2X)'),
- )
- def split_setup(self):
- if self.proto.coin != 'BTC':
- die(1, 'Test valid only for coin BTC')
- self.coin = 'BTC'
- return self.setup()
- def split_fork(self):
- self.coin = 'B2X'
- t = self.spawn('mmgen-regtest', ['fork', 'btc'])
- t.expect('Creating fork from coin')
- t.expect('successfully created')
- t.ok()
- def split_start(self, coin):
- self.coin = coin
- t = self.spawn('mmgen-regtest', ['bob'])
- t.expect('Starting')
- t.expect('done')
- t.ok()
- def split_start_btc(self):
- self.regtest_start(coin='BTC')
- def split_start_b2x(self):
- self.regtest_start(coin='B2X')
- def split_gen_btc(self):
- self.regtest_generate(coin='BTC')
- def split_gen_b2x(self):
- self.regtest_generate(coin='B2X', num_blocks=100)
- def split_gen_b2x2(self):
- self.regtest_generate(coin='B2X')
- def split_do_split(self):
- self.coin = 'B2X'
- sid = self.regtest_user_sid('bob')
- t = self.spawn('mmgen-split', [
- '--bob',
- '--outdir='+self.tmpdir,
- '--tx-fees=0.0001,0.0003',
- sid+':S:1', sid+':S:2'])
- t.expect(r'\[q\]uit menu, .*?:.', 'q', regex=True)
- t.expect('outputs to spend: ', '1\n')
- for _ in ('timelocked', 'split'):
- for _ in ('fee', 'change'):
- t.expect('OK? (Y/n): ', 'y')
- t.do_comment(False)
- t.view_tx('t')
- t.written_to_file('Long chain (timelocked) transaction')
- t.written_to_file('Short chain transaction')
- t.ok()
- def split_sign(self, coin, ext):
- wf = get_file_with_ext(self.regtest_user_dir('bob', coin=coin.lower()), 'mmdat')
- txfile = self.get_file_with_ext(ext, no_dot=True)
- self.coin = coin
- self.txsign(txfile, wf, extra_opts=['--bob'])
- def split_sign_b2x(self):
- return self.regtest_sign(coin='B2X', ext='533].rawtx')
- def split_sign_btc(self):
- return self.regtest_sign(coin='BTC', ext='9997].rawtx')
- def split_send(self, coin, ext):
- self.coin = coin
- txfile = self.get_file_with_ext(ext, no_dot=True)
- self.txsend(txfile, bogus_send=False, extra_opts=['--bob'])
- def split_send_b2x(self):
- return self.regtest_send(coin='B2X', ext='533].sigtx')
- def split_send_btc(self):
- return self.regtest_send(coin='BTC', ext='9997].sigtx')
- def split_txdo_timelock(self, coin, locktime, bad_locktime):
- self.coin = coin
- sid = self.regtest_user_sid('bob')
- self.regtest_user_txdo(
- 'bob',
- '0.0001',
- [sid+':S:5'],
- '1',
- pw = rt_pw,
- extra_args = ['--locktime='+str(locktime)],
- bad_locktime = bad_locktime)
- def split_txdo_timelock_bad_btc(self):
- self.regtest_txdo_timelock('BTC', locktime=8888, bad_locktime=True)
- def split_txdo_timelock_good_btc(self):
- self.regtest_txdo_timelock('BTC', locktime=1321009871, bad_locktime=False)
- def split_txdo_timelock_bad_b2x(self):
- self.regtest_txdo_timelock('B2X', locktime=8888, bad_locktime=True)
- def split_txdo_timelock_good_b2x(self):
- self.regtest_txdo_timelock('B2X', locktime=1321009871, bad_locktime=False)
|