11use ethereum_json_rpc_client:: reqwest:: ReqwestClient ;
22use ethereum_json_rpc_client:: { EthGetLogsParams , EthJsonRpcClient } ;
3- use ethers_core:: types:: { BlockNumber , Log , H256 } ;
3+ use ethers_core:: abi:: { Function , Param , ParamType , StateMutability , Token } ;
4+ use ethers_core:: types:: { BlockNumber , Log , TransactionRequest , H160 , H256 } ;
45
56const ETHEREUM_JSON_API_URL : & str = "https://cloudflare-eth.com/" ;
67const MAX_BATCH_SIZE : usize = 5 ;
@@ -25,23 +26,94 @@ async fn should_get_block_number() {
2526
2627#[ tokio:: test]
2728async fn should_get_balance ( ) {
28- let erc_1820_address = "0xa990077c3205cbDf861e17Fa532eeB069cE9fF96"
29+ let erc_1820_deployer_address = "0xa990077c3205cbDf861e17Fa532eeB069cE9fF96"
2930 . parse ( )
3031 . unwrap ( ) ;
3132 let result = reqwest_client ( )
32- . get_balance ( erc_1820_address , BlockNumber :: Latest )
33+ . get_balance ( erc_1820_deployer_address , BlockNumber :: Latest )
3334 . await
3435 . unwrap ( ) ;
3536 assert_eq ! ( result, 1409174700000000000u64 . into( ) ) ;
3637}
3738
39+ #[ tokio:: test]
40+ async fn should_get_code ( ) {
41+ let erc_1820_address = "0x1820a4B7618BdE71Dce8cdc73aAB6C95905faD24"
42+ . parse ( )
43+ . unwrap ( ) ;
44+ let result = reqwest_client ( )
45+ . get_code ( erc_1820_address, BlockNumber :: Latest )
46+ . await
47+ . unwrap ( ) ;
48+ assert_eq ! ( result, ERC_1820_EXPECTED_CODE ) ;
49+ }
50+
51+ /// Calls the funtction of ERC-1820:
52+ ///
53+ ///```solidity
54+ /// function getManager(address _addr) public view returns(address)
55+ ///```
56+ #[ tokio:: test]
57+ async fn should_perform_eth_call ( ) {
58+ let erc_1820_address = "0x1820a4B7618BdE71Dce8cdc73aAB6C95905faD24"
59+ . parse :: < H160 > ( )
60+ . unwrap ( ) ;
61+
62+ let caller = "0xf990077c3205cbDf861e17Fa532eeB069cE9fF96"
63+ . parse ( )
64+ . unwrap ( ) ;
65+
66+ #[ allow( deprecated) ]
67+ let func = Function {
68+ name : "getManager" . to_string ( ) ,
69+ inputs : vec ! [ Param {
70+ name: "getManager" . to_string( ) ,
71+ kind: ParamType :: Address ,
72+ internal_type: None ,
73+ } ] ,
74+ outputs : vec ! [ Param {
75+ name: "" . to_string( ) ,
76+ kind: ParamType :: Address ,
77+ internal_type: None ,
78+ } ] ,
79+ constant : None ,
80+ state_mutability : StateMutability :: View ,
81+ } ;
82+
83+ let params = TransactionRequest {
84+ from : Some ( caller) ,
85+ to : Some ( erc_1820_address. into ( ) ) ,
86+ gas : Some ( 1000000u64 . into ( ) ) ,
87+ gas_price : None ,
88+ value : None ,
89+ data : Some ( func. encode_input ( & [ Token :: Address ( caller) ] ) . unwrap ( ) . into ( ) ) ,
90+ ..Default :: default ( )
91+ } ;
92+
93+ let result = reqwest_client ( )
94+ . eth_call ( params, BlockNumber :: Latest )
95+ . await
96+ . unwrap ( ) ;
97+
98+ let result_address = func
99+ . decode_output ( & hex:: decode ( result. trim_start_matches ( "0x" ) ) . unwrap ( ) )
100+ . unwrap ( )
101+ . first ( )
102+ . cloned ( )
103+ . unwrap ( )
104+ . into_address ( )
105+ . unwrap ( ) ;
106+
107+ assert_eq ! ( result_address, caller) ;
108+ }
109+
38110#[ tokio:: test]
39111async fn should_get_transaction_count ( ) {
40- let erc_1820_address = "0xa990077c3205cbDf861e17Fa532eeB069cE9fF96"
112+ let erc_1820_deployer_address = "0xa990077c3205cbDf861e17Fa532eeB069cE9fF96"
41113 . parse ( )
42114 . unwrap ( ) ;
43115 let result = reqwest_client ( )
44- . get_transaction_count ( erc_1820_address , BlockNumber :: Latest )
116+ . get_transaction_count ( erc_1820_deployer_address , BlockNumber :: Latest )
45117 . await
46118 . unwrap ( ) ;
47119 assert_eq ! ( result, 1u64 ) ;
@@ -195,3 +267,56 @@ async fn should_get_transaction_receipts() {
195267 assert_eq ! ( receipts[ 0 ] . gas_used, Some ( 21000 . into( ) ) ) ;
196268 assert_eq ! ( receipts[ 1 ] . gas_used, Some ( 52358 . into( ) ) ) ;
197269}
270+
271+ const ERC_1820_EXPECTED_CODE : & str = "0x608060405234801561001057600080fd5b50600436106100a557600035\
272+ 7c010000000000000000000000000000000000000000000000000000000090048063a41e7d5111610078578063a41e7d51\
273+ 146101d4578063aabbb8ca1461020a578063b705676514610236578063f712f3e814610280576100a5565b806329965a1d\
274+ 146100aa5780633d584063146100e25780635df8122f1461012457806365ba36c114610152575b600080fd5b6100e06004\
275+ 80360360608110156100c057600080fd5b50600160a060020a038135811691602081013591604090910135166102b6565b\
276+ 005b610108600480360360208110156100f857600080fd5b5035600160a060020a0316610570565b60408051600160a060\
277+ 020a039092168252519081900360200190f35b6100e06004803603604081101561013a57600080fd5b50600160a060020a\
278+ 03813581169160200135166105bc565b6101c26004803603602081101561016857600080fd5b8101906020810181356401\
279+ 0000000081111561018357600080fd5b82018360208201111561019557600080fd5b803590602001918460018302840111\
280+ 640100000000831117156101b757600080fd5b5090925090506106b3565b60408051918252519081900360200190f35b61\
281+ 00e0600480360360408110156101ea57600080fd5b508035600160a060020a03169060200135600160e060020a03191661\
282+ 06ee565b6101086004803603604081101561022057600080fd5b50600160a060020a038135169060200135610778565b61\
283+ 026c6004803603604081101561024c57600080fd5b508035600160a060020a03169060200135600160e060020a03191661\
284+ 07ef565b604080519115158252519081900360200190f35b61026c6004803603604081101561029657600080fd5b508035\
285+ 600160a060020a03169060200135600160e060020a0319166108aa565b6000600160a060020a038416156102cd57836102\
286+ cf565b335b9050336102db82610570565b600160a060020a031614610339576040805160e560020a62461bcd0281526020\
287+ 6004820152600f60248201527f4e6f7420746865206d616e61676572000000000000000000000000000000000060448201\
288+ 5290519081900360640190fd5b6103428361092a565b15610397576040805160e560020a62461bcd028152602060048201\
289+ 52601a60248201527f4d757374206e6f7420626520616e2045524331363520686173680000000000006044820152905190\
290+ 81900360640190fd5b600160a060020a038216158015906103b85750600160a060020a0382163314155b156104ff576040\
291+ 5160200180807f455243313832305f4143434550545f4d4147494300000000000000000000000081525060140190506040\
292+ 516020818303038152906040528051906020012082600160a060020a031663249cb3fa85846040518363ffffffff167c01\
293+ 000000000000000000000000000000000000000000000000000000000281526004018083815260200182600160a060020a\
294+ 0316600160a060020a031681526020019250505060206040518083038186803b15801561047e57600080fd5b505afa1580\
295+ 15610492573d6000803e3d6000fd5b505050506040513d60208110156104a857600080fd5b5051146104ff576040805160\
296+ e560020a62461bcd02815260206004820181905260248201527f446f6573206e6f7420696d706c656d656e742074686520\
297+ 696e74657266616365604482015290519081900360640190fd5b600160a060020a03818116600081815260208181526040\
298+ 808320888452909152808220805473ffffffffffffffffffffffffffffffffffffffff1916948716948517905551869291\
299+ 7f93baa6efbd2244243bfee6ce4cfdd1d04fc4c0e9a786abd3a41313bd352db15391a450505050565b600160a060020a03\
300+ 818116600090815260016020526040812054909116151561059a5750806105b7565b50600160a060020a03808216600090\
301+ 815260016020526040902054165b919050565b336105c683610570565b600160a060020a031614610624576040805160e5\
302+ 60020a62461bcd02815260206004820152600f60248201527f4e6f7420746865206d616e61676572000000000000000000\
303+ 0000000000000000604482015290519081900360640190fd5b81600160a060020a031681600160a060020a031614610643\
304+ 5780610646565b60005b600160a060020a03838116600081815260016020526040808220805473ffffffffffffffffffff\
305+ ffffffffffffffffffff19169585169590951790945592519184169290917f605c2dbf762e5f7d60a546d42e7205dcb1b0\
306+ 11ebc62a61736a57c9089d3a43509190a35050565b60008282604051602001808383808284378083019250505092505050\
307+ 6040516020818303038152906040528051906020012090505b92915050565b6106f882826107ef565b6107035760006107\
308+ 05565b815b600160a060020a03928316600081815260208181526040808320600160e060020a0319969096168084529582\
309+ 52808320805473ffffffffffffffffffffffffffffffffffffffff19169590971694909417909555908152600284528181\
310+ 209281529190925220805460ff19166001179055565b600080600160a060020a038416156107905783610792565b335b90\
311+ 5061079d8361092a565b156107c357826107ad82826108aa565b6107b85760006107ba565b815b925050506106e8565b60\
312+ 0160a060020a0390811660009081526020818152604080832086845290915290205416905092915050565b600080806108\
313+ 1d857f01ffc9a70000000000000000000000000000000000000000000000000000000061094c565b909250905081158061\
314+ 082d575080155b1561083d576000925050506106e8565b61084f85600160e060020a031961094c565b9092509050811580\
315+ 61086057508015155b15610870576000925050506106e8565b61087a858561094c565b909250905060018214801561088f\
316+ 5750806001145b1561089f576001925050506106e8565b506000949350505050565b600160a060020a0382166000908152\
317+ 600260209081526040808320600160e060020a03198516845290915281205460ff1615156108f2576108eb83836107ef56\
318+ 5b90506106e8565b50600160a060020a03808316600081815260208181526040808320600160e060020a03198716845290\
319+ 91529020549091161492915050565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff161590565b\
320+ 6040517f01ffc9a70000000000000000000000000000000000000000000000000000000080825260048201839052600091\
321+ 82919060208160248189617530fa90519096909550935050505056fea165627a7a72305820377f4a2d4301ede9949f163f\
322+ 319021a6e9c687c292a5e2b2c4734c126b524e6c0029";
0 commit comments