Accept none value in build raw for to address
This commit is contained in:
		
							parent
							
								
									17431dc000
								
							
						
					
					
						commit
						1f19aecd0e
					
				| @ -6,9 +6,29 @@ from hexathon import ( | ||||
|     ) | ||||
| 
 | ||||
| 
 | ||||
| def is_address(address_hex): | ||||
|     try: | ||||
|         address_hex = strip_0x(address_hex)     | ||||
|     except ValueError: | ||||
|         return False | ||||
|     return len(address_hex) == 40 | ||||
| 
 | ||||
| 
 | ||||
| def is_checksum_address(address_hex): | ||||
|     hx = None | ||||
|     try: | ||||
|         hx = to_checksum(address_hex) | ||||
|     except ValueError: | ||||
|         return False | ||||
|     print('{} {}'.format(hx, address_hex)) | ||||
|     return hx == address_hex | ||||
| 
 | ||||
| 
 | ||||
| def to_checksum(address_hex): | ||||
|         address_hex = strip_0x(address_hex) | ||||
|         address_hex = uniform(address_hex) | ||||
|         if len(address_hex) != 40: | ||||
|             raise ValueError('Invalid address length') | ||||
|         h = sha3.keccak_256() | ||||
|         h.update(address_hex.encode('utf-8')) | ||||
|         z = h.digest() | ||||
|  | ||||
| @ -44,6 +44,7 @@ class HTTPConnection: | ||||
|         logg.debug('(HTTP) send {}'.format(data)) | ||||
|         res = urlopen(req, data=data.encode('utf-8')) | ||||
|         o = json.load(res) | ||||
|         logg.debug('(HTTP) recv {}'.format(o)) | ||||
|         return jsonrpc_result(o, error_parser) | ||||
| 
 | ||||
|      | ||||
|  | ||||
| @ -73,6 +73,7 @@ def main(): | ||||
| 
 | ||||
|     tx = None | ||||
|     status = -1 | ||||
|     rcpt = None | ||||
|     if tx_src['blockHash'] != None: | ||||
|         o = jsonrpc_template() | ||||
|         o['method'] = 'eth_getBlockByHash' | ||||
| @ -88,13 +89,13 @@ def main(): | ||||
|         o['method'] = 'eth_getTransactionReceipt' | ||||
|         o['params'].append(tx_hash) | ||||
|         rcpt = conn.do(o) | ||||
|         status = int(strip_0x(rcpt['status']), 16) | ||||
|         #status = int(strip_0x(rcpt['status']), 16) | ||||
| 
 | ||||
|     if tx == None: | ||||
|         tx = Tx(tx_src) | ||||
|     if rcpt != None: | ||||
|         tx.apply_receipt(rcpt) | ||||
|     print(tx) | ||||
|     status_name = Status(status).name | ||||
|     print('status {}'.format(status_name)) | ||||
| 
 | ||||
| 
 | ||||
| if __name__ == '__main__': | ||||
|  | ||||
| @ -112,6 +112,8 @@ class TxFactory: | ||||
| 
 | ||||
| 
 | ||||
|     def build_raw(self, tx): | ||||
|         if tx['to'] == None or tx['to'] == '': | ||||
|             tx['to'] = '0x' | ||||
|         txe = EIP155Transaction(tx, tx['nonce'], tx['chainId']) | ||||
|         self.signer.signTransaction(txe) | ||||
|         tx_raw = txe.rlp_serialize() | ||||
|  | ||||
| @ -1,6 +1,6 @@ | ||||
| [metadata] | ||||
| name = chainlib | ||||
| version = 0.0.1a18 | ||||
| version = 0.0.1a19 | ||||
| description = Generic blockchain access library and tooling | ||||
| author = Louis Holbrook | ||||
| author_email = dev@holbrook.no | ||||
|  | ||||
							
								
								
									
										35
									
								
								tests/test_address.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								tests/test_address.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,35 @@ | ||||
| import unittest | ||||
| 
 | ||||
| from chainlib.eth.address import ( | ||||
|         is_address, | ||||
|         is_checksum_address, | ||||
|         to_checksum, | ||||
|         ) | ||||
| 
 | ||||
| from tests.base import TestBase | ||||
| 
 | ||||
| 
 | ||||
| class TestChain(TestBase): | ||||
| 
 | ||||
|     def test_chain_spec(self): | ||||
|         checksum_address = '0xEb3907eCad74a0013c259D5874AE7f22DcBcC95C' | ||||
|         plain_address = checksum_address.lower() | ||||
| 
 | ||||
|         self.assertEqual(checksum_address, to_checksum(checksum_address)) | ||||
| 
 | ||||
|         self.assertTrue(is_address(plain_address)) | ||||
|         self.assertFalse(is_checksum_address(plain_address)) | ||||
|         self.assertTrue(is_checksum_address(checksum_address)) | ||||
| 
 | ||||
|         self.assertFalse(is_address(plain_address + "00")) | ||||
|         self.assertFalse(is_address(plain_address[:len(plain_address)-2])) | ||||
| 
 | ||||
|         with self.assertRaises(ValueError): | ||||
|             to_checksum(plain_address + "00") | ||||
| 
 | ||||
|         with self.assertRaises(ValueError): | ||||
|             to_checksum(plain_address[:len(plain_address)-2]) | ||||
| 
 | ||||
| 
 | ||||
| if __name__ == '__main__': | ||||
|     unittest.main() | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user