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()