etherscan.py 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839
  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.httpd.etherscan: Etherscan WSGI http server
  12. """
  13. from mmgen.util2 import get_keccak
  14. from . import HTTPD
  15. class EtherscanServer(HTTPD):
  16. name = 'etherscan server'
  17. port = 28800
  18. content_type = 'text/html'
  19. def make_response_body(self, method, environ):
  20. match method:
  21. case 'GET':
  22. target = 'form'
  23. case 'POST':
  24. target = 'result'
  25. length = int(environ.get('CONTENT_LENGTH', '0'))
  26. qs = environ['wsgi.input'].read(length).decode()
  27. tx = [s for s in qs.split('&') if 'RawTx=' in s][0].split('=')[1]
  28. keccak_256 = get_keccak()
  29. txid = '0x' + keccak_256(bytes.fromhex(tx[2:])).hexdigest()
  30. with open(f'test/ref/ethereum/etherscan-{target}.html') as fh:
  31. text = fh.read()
  32. return (text if method == 'GET' else text.format(txid=txid)).encode()