@@ -1190,3 +1190,116 @@ async fn test_anvil_reset_fork_to_non_fork() {
11901190 let new_block = provider. get_block ( BlockId :: latest ( ) ) . await . unwrap ( ) . unwrap ( ) ;
11911191 assert_eq ! ( new_block. header. number, 1 ) ;
11921192}
1193+
1194+ #[ tokio:: test( flavor = "multi_thread" ) ]
1195+ async fn can_get_node_info_tempo_t0 ( ) {
1196+ let ( api, handle) = spawn ( NodeConfig :: test_tempo ( ) ) . await ;
1197+
1198+ let node_info = api. anvil_node_info ( ) . await . unwrap ( ) ;
1199+
1200+ let provider = handle. http_provider ( ) ;
1201+
1202+ let block_number = provider. get_block_number ( ) . await . unwrap ( ) ;
1203+ let block = provider. get_block ( BlockId :: from ( block_number) ) . await . unwrap ( ) . unwrap ( ) ;
1204+
1205+ let expected_node_info = NodeInfo {
1206+ current_block_number : 0_u64 ,
1207+ current_block_timestamp : 1 ,
1208+ current_block_hash : block. header . hash ,
1209+ hard_fork : "T0" . to_string ( ) ,
1210+ transaction_order : "fees" . to_owned ( ) ,
1211+ environment : NodeEnvironment {
1212+ base_fee : 10_000_000_000 ,
1213+ chain_id : 31337 ,
1214+ gas_limit : 30_000_000 ,
1215+ gas_price : 11_000_000_000 ,
1216+ } ,
1217+ fork_config : NodeForkConfig {
1218+ fork_url : None ,
1219+ fork_block_number : None ,
1220+ fork_retry_backoff : None ,
1221+ } ,
1222+ network : Some ( "tempo" . to_string ( ) ) ,
1223+ } ;
1224+
1225+ assert_eq ! ( node_info, expected_node_info) ;
1226+ }
1227+
1228+ #[ tokio:: test( flavor = "multi_thread" ) ]
1229+ async fn can_get_node_info_tempo_t1 ( ) {
1230+ use tempo_chainspec:: hardfork:: TempoHardfork ;
1231+
1232+ let config = NodeConfig :: test_tempo ( ) . with_hardfork ( Some ( TempoHardfork :: T1 . into ( ) ) ) ;
1233+ let ( api, handle) = spawn ( config) . await ;
1234+
1235+ let node_info = api. anvil_node_info ( ) . await . unwrap ( ) ;
1236+
1237+ let provider = handle. http_provider ( ) ;
1238+
1239+ let block_number = provider. get_block_number ( ) . await . unwrap ( ) ;
1240+ let block = provider. get_block ( BlockId :: from ( block_number) ) . await . unwrap ( ) . unwrap ( ) ;
1241+
1242+ let expected_node_info = NodeInfo {
1243+ current_block_number : 0_u64 ,
1244+ current_block_timestamp : 1 ,
1245+ current_block_hash : block. header . hash ,
1246+ hard_fork : "T1" . to_string ( ) ,
1247+ transaction_order : "fees" . to_owned ( ) ,
1248+ environment : NodeEnvironment {
1249+ base_fee : 20_000_000_000 ,
1250+ chain_id : 31337 ,
1251+ gas_limit : 30_000_000 ,
1252+ gas_price : 21_000_000_000 ,
1253+ } ,
1254+ fork_config : NodeForkConfig {
1255+ fork_url : None ,
1256+ fork_block_number : None ,
1257+ fork_retry_backoff : None ,
1258+ } ,
1259+ network : Some ( "tempo" . to_string ( ) ) ,
1260+ } ;
1261+
1262+ assert_eq ! ( node_info, expected_node_info) ;
1263+ }
1264+
1265+ #[ tokio:: test( flavor = "multi_thread" ) ]
1266+ async fn can_deal_erc20_tempo ( ) {
1267+ use foundry_evm:: core:: tempo:: { ALPHA_USD_ADDRESS , PATH_USD_ADDRESS } ;
1268+
1269+ let ( api, _handle) = spawn ( NodeConfig :: test_tempo ( ) ) . await ;
1270+
1271+ let target = Address :: random ( ) ;
1272+
1273+ // TIP20 tokens are precompile-backed — anvil_dealERC20 uses access-list slot probing
1274+ // which doesn't discover precompile storage slots. Verify this fails gracefully.
1275+ for token_addr in [ PATH_USD_ADDRESS , ALPHA_USD_ADDRESS ] {
1276+ let amount = U256 :: from ( 5_000_000 ) ; // 5 tokens (6 decimals)
1277+
1278+ let result = api. anvil_deal_erc20 ( target, token_addr, amount) . await ;
1279+ assert ! (
1280+ result. is_err( ) ,
1281+ "anvil_dealERC20 should fail for precompile-based TIP20 {token_addr}"
1282+ ) ;
1283+
1284+ let err = result. unwrap_err ( ) . to_string ( ) ;
1285+ assert ! (
1286+ err. contains( "no slot found" ) ,
1287+ "Error should mention slot discovery failure, got: {err}"
1288+ ) ;
1289+ }
1290+ }
1291+
1292+ #[ tokio:: test( flavor = "multi_thread" ) ]
1293+ async fn can_get_default_base_fee_tempo ( ) {
1294+ let ( api, handle) = spawn ( NodeConfig :: test_tempo ( ) ) . await ;
1295+ let provider = handle. http_provider ( ) ;
1296+
1297+ api. mine_one ( ) . await ;
1298+
1299+ let block = provider. get_block ( BlockNumberOrTag :: Latest . into ( ) ) . await . unwrap ( ) . unwrap ( ) ;
1300+ assert_eq ! (
1301+ block. header. base_fee_per_gas,
1302+ Some ( 10_000_000_000 ) ,
1303+ "T0 base fee should be 10 billion attodollars"
1304+ ) ;
1305+ }
0 commit comments