153 lines
5.3 KiB
Python
Executable file
153 lines
5.3 KiB
Python
Executable file
#!/usr/bin/env python3
|
|
#
|
|
# MMGen Wallet, a terminal-based cryptocurrency wallet
|
|
# Copyright (C)2013-2026 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.chainsplit: Forking scenario tests for the cmdtest.py test suite
|
|
This module is unmaintained and currently non-functional
|
|
"""
|
|
|
|
from mmgen.util import die
|
|
|
|
from .include.common import get_file_with_ext, rt_pw
|
|
from .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)
|