automount_eth.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. #!/usr/bin/env python3
  2. #
  3. # MMGen Wallet, a terminal-based cryptocurrency wallet
  4. # Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
  5. # Licensed under the GNU General Public License, Version 3:
  6. # https://www.gnu.org/licenses
  7. # Public project repositories:
  8. # https://github.com/mmgen/mmgen-wallet
  9. # https://gitlab.com/mmgen/mmgen-wallet
  10. """
  11. test.cmdtest_d.automount_eth: Ethereum automount autosigning tests for the cmdtest.py test suite
  12. """
  13. import os, re
  14. from .autosign import CmdTestAutosignThreaded
  15. from .ethdev import CmdTestEthdev, CmdTestEthdevMethods
  16. from .include.common import dfl_words_file
  17. from ..include.common import cfg, joinpath
  18. class CmdTestAutosignETH(CmdTestAutosignThreaded, CmdTestEthdev, CmdTestEthdevMethods):
  19. 'automounted transacting operations for Ethereum via ethdev'
  20. networks = ('eth', 'etc')
  21. tmpdir_nums = [59]
  22. cmd_group = (
  23. ('setup', f'dev mode tests for coin {cfg.coin} (start daemon)'),
  24. ('addrgen', 'generating addresses'),
  25. ('addrimport', 'importing addresses'),
  26. ('addrimport_dev_addr', "importing dev faucet address 'Ox00a329c..'"),
  27. ('fund_dev_address', 'funding the default (Parity dev) address'),
  28. ('fund_mmgen_address', 'funding an MMGen address'),
  29. ('create_tx', 'creating a transaction'),
  30. ('run_autosign_setup', 'running ‘autosign setup’'),
  31. ('wait_loop_start', 'starting autosign wait loop'),
  32. ('send_tx', 'sending the transaction'),
  33. ('token_compile1', 'compiling ERC20 token #1'),
  34. ('token_deploy1a', 'deploying ERC20 token #1 (SafeMath)'),
  35. ('token_deploy1b', 'deploying ERC20 token #1 (Owned)'),
  36. ('token_deploy1c', 'deploying ERC20 token #1 (Token)'),
  37. ('tx_status2', 'getting the transaction status'),
  38. ('token_fund_user', 'transferring token funds from dev to user'),
  39. ('token_addrgen', 'generating token addresses'),
  40. ('token_addrimport', 'importing token addresses using token address (MM1)'),
  41. ('token_bal1', f'the {cfg.coin} balance and token balance'),
  42. ('create_token_tx', 'creating a token transaction'),
  43. ('send_token_tx', 'sending a token transaction'),
  44. ('token_bal2', f'the {cfg.coin} balance and token balance'),
  45. ('wait_loop_kill', 'stopping autosign wait loop'),
  46. ('stop', 'stopping daemon'),
  47. ('txview', 'viewing transactions'),
  48. )
  49. def __init__(self, cfg, trunner, cfgs, spawn):
  50. self.coins = [cfg.coin.lower()]
  51. CmdTestAutosignThreaded.__init__(self, cfg, trunner, cfgs, spawn)
  52. CmdTestEthdev.__init__(self, cfg, trunner, cfgs, spawn)
  53. self.txop_opts = ['--autosign', '--regtest=1', '--quiet']
  54. def fund_mmgen_address(self):
  55. return self._fund_mmgen_address(arg='98831F3A:E:1,123.456')
  56. def create_tx(self):
  57. self.insert_device_online()
  58. t = self._create_tx(fee='50G', args=['98831F3A:E:11,54.321'], add_opts=self.txop_opts)
  59. t.read()
  60. self.remove_device_online()
  61. return t
  62. def run_autosign_setup(self):
  63. return self.run_setup(mn_type='bip39', mn_file='test/ref/98831F3A.bip39', use_dfl_wallet=None)
  64. def send_tx(self):
  65. self._wait_signed('transaction')
  66. self.insert_device_online()
  67. t = self._send_tx(desc='automount transaction', add_opts=self.txop_opts)
  68. t.read()
  69. self.remove_device_online()
  70. return t
  71. def token_addrgen(self):
  72. return self._token_addrgen(mm_idxs=[11], naddrs=3)
  73. def token_addrimport(self):
  74. return self._token_addrimport('token_addr1', '11-13', expect='3/3')
  75. def token_fund_user(self):
  76. return self._token_transfer_ops(op='fund_user', mm_idxs=[11])
  77. def token_bal1(self):
  78. return self._bal_check(pat=r':E:11\s+1000\s+54\.321\s+')
  79. def token_bal2(self):
  80. return self._bal_check(pat=r':E:11\s+998.76544\s+54.318\d+\s+.*:E:12\s+1\.23456\s+')
  81. def create_token_tx(self):
  82. self.insert_device_online()
  83. t = self._create_token_tx(
  84. cmd = 'txcreate',
  85. fee = '50G',
  86. args = ['98831F3A:E:12,1.23456'],
  87. add_opts = self.txop_opts)
  88. t.read()
  89. self.remove_device_online()
  90. return t
  91. send_token_tx = send_tx