1
- use ethers_contract :: BaseContract ;
2
- use ethers_core :: abi :: parse_abi ;
1
+ use alloy_sol_types :: sol ;
2
+ use alloy_sol_types :: SolCall ;
3
3
use ethers_providers:: { Http , Provider } ;
4
4
use revm:: {
5
5
db:: { CacheDB , EmptyDB , EthersDB } ,
@@ -35,14 +35,12 @@ async fn main() -> anyhow::Result<()> {
35
35
let pool_address = address ! ( "0d4a11d5EEaaC28EC3F61d100daF4d40471f1852" ) ;
36
36
37
37
// generate abi for the calldata from the human readable interface
38
- let abi = BaseContract :: from (
39
- parse_abi ( & [
40
- "function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast)" ,
41
- ] ) ?
42
- ) ;
38
+ sol ! {
39
+ function getReserves( ) external view returns ( uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast) ;
40
+ }
43
41
44
42
// encode abi into Bytes
45
- let encoded = abi . encode ( "getReserves" , ( ) ) ? ;
43
+ let encoded = getReservesCall :: new ( ( ) ) . abi_encode ( ) ;
46
44
47
45
// initialize new EthersDB
48
46
let mut ethersdb = EthersDB :: new ( Arc :: clone ( & client) , None ) . unwrap ( ) ;
@@ -74,7 +72,7 @@ async fn main() -> anyhow::Result<()> {
74
72
// account you want to transact with
75
73
tx. transact_to = TransactTo :: Call ( pool_address) ;
76
74
// calldata formed via abigen
77
- tx. data = encoded. 0 . into ( ) ;
75
+ tx. data = encoded. into ( ) ;
78
76
// transaction value in wei
79
77
tx. value = U256 :: from ( 0 ) ;
80
78
} )
@@ -94,13 +92,13 @@ async fn main() -> anyhow::Result<()> {
94
92
result => panic ! ( "Execution failed: {result:?}" ) ,
95
93
} ;
96
94
97
- // decode bytes to reserves + ts via ethers-rs 's abi decode
98
- let ( reserve0 , reserve1 , ts ) : ( u128 , u128 , u32 ) = abi . decode_output ( "getReserves" , value ) ?;
95
+ // decode bytes to reserves + ts via alloy 's abi decode
96
+ let return_vals = getReservesCall :: abi_decode_returns ( & value , true ) ?;
99
97
100
98
// Print emulated getReserves() call output
101
- println ! ( "Reserve0: {:#?}" , reserve0) ;
102
- println ! ( "Reserve1: {:#?}" , reserve1) ;
103
- println ! ( "Timestamp: {:#?}" , ts ) ;
99
+ println ! ( "Reserve0: {:#?}" , return_vals . reserve0) ;
100
+ println ! ( "Reserve1: {:#?}" , return_vals . reserve1) ;
101
+ println ! ( "Timestamp: {:#?}" , return_vals . blockTimestampLast ) ;
104
102
105
103
Ok ( ( ) )
106
104
}
0 commit comments