funga-eth

Ethereum implementation of the funga keystore and signer
Info | Log | Files | Refs | README | LICENSE

test_sign.py (2855B)


      1 # standard imports
      2 import unittest
      3 import logging
      4 import json
      5 
      6 from rlp import encode as rlp_encode
      7 
      8 from funga.eth.signer import EIP155Signer
      9 from funga.eth.transaction import EIP155Transaction
     10 
     11 logging.basicConfig(level=logging.DEBUG)
     12 logg = logging.getLogger()
     13 
     14 
     15 tx_ints = {
     16     'nonce': 0,
     17     'from': "0xEB014f8c8B418Db6b45774c326A0E64C78914dC0",
     18     'gasPrice': "20000000000",
     19     'gas': "21000",
     20     'to': '0x3535353535353535353535353535353535353535',
     21     'value': "1000",
     22     'data': "deadbeef",
     23 }
     24 
     25 tx_hexs = {
     26     'nonce': '0x0',
     27     'from': "0xEB014f8c8B418Db6b45774c326A0E64C78914dC0",
     28     'gasPrice': "0x4a817c800",
     29     'gas': "0x5208",
     30     'to': '0x3535353535353535353535353535353535353535',
     31     'value': "0x3e8",
     32     'data': "deadbeef",
     33 }
     34 
     35 class pkGetter:
     36 
     37     def __init__(self, pk):
     38         self.pk = pk
     39 
     40     def get(self, address, password=None):
     41         return self.pk
     42 
     43 
     44 class TestSign(unittest.TestCase):
     45 
     46     pk = None
     47     nonce = -1
     48     pk_getter = None
     49 
     50 
     51     def getNonce(self):
     52         self.nonce += 1
     53         return self.nonce
     54 
     55 
     56     def setUp(self):
     57         self.pk = bytes.fromhex('5087503f0a9cc35b38665955eb830c63f778453dd11b8fa5bd04bc41fd2cc6d6')
     58         self.pk_getter = pkGetter(self.pk)
     59 
     60 
     61     def tearDown(self):
     62         logg.info('teardown empty')
     63 
     64 
     65 
     66     # TODO: verify rlp tx output
     67     def test_serialize_transaction(self):
     68         t = EIP155Transaction(tx_ints, 0)
     69         self.assertRegex(t.__class__.__name__, "Transaction")
     70         s = t.serialize()
     71         self.assertDictEqual(s, {'nonce': '0x', 'gasPrice': '0x04a817c800', 'gas': '0x5208', 'to': '0x3535353535353535353535353535353535353535', 'value': '0x03e8', 'data': '0xdeadbeef', 'v': '0x01', 'r': '0x', 's': '0x'})
     72         r = t.rlp_serialize()
     73         self.assertEqual(r.hex(), 'ea808504a817c8008252089435353535353535353535353535353535353535358203e884deadbeef018080')
     74 
     75         t = EIP155Transaction(tx_hexs, 0)
     76         self.assertRegex(t.__class__.__name__, "Transaction")
     77         s = t.serialize()
     78         #o = json.loads(s)
     79         self.assertDictEqual(s, {'nonce': '0x', 'gasPrice': '0x04a817c800', 'gas': '0x5208', 'to': '0x3535353535353535353535353535353535353535', 'value': '0x03e8', 'data': '0xdeadbeef', 'v': '0x01', 'r': '0x', 's': '0x'})
     80         r = t.rlp_serialize()
     81         self.assertEqual(r.hex(), 'ea808504a817c8008252089435353535353535353535353535353535353535358203e884deadbeef018080')
     82 
     83 
     84 
     85     def test_sign_transaction(self):
     86         t = EIP155Transaction(tx_ints, 461, 8995)
     87         s = EIP155Signer(self.pk_getter)
     88         z = s.sign_transaction(t)
     89 
     90 
     91     def test_sign_message(self):
     92         s = EIP155Signer(self.pk_getter)
     93         z = s.sign_ethereum_message(tx_ints['from'], '666f6f')
     94         z = s.sign_ethereum_message(tx_ints['from'], b'foo')
     95         logg.debug('zzz {}'.format(str(z)))
     96 
     97 
     98 if __name__ == '__main__':
     99     unittest.main()