From a4825839086827c99b9f661d99dcbd711989502a Mon Sep 17 00:00:00 2001 From: Aryan Tikarya Date: Tue, 26 Aug 2025 11:11:20 +0530 Subject: [PATCH 1/6] add fil_actor_ethaccount_state crate --- Cargo.lock | 15 +++++++++++++++ Cargo.toml | 1 + 2 files changed, 16 insertions(+) diff --git a/Cargo.lock b/Cargo.lock index fde64272a705..af370e3ec372 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2668,6 +2668,20 @@ dependencies = [ "serde", ] +[[package]] +name = "fil_actor_ethaccount_state" +version = "22.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "469515bccbc78aefafa91fad2cb6ab35351c2eaabd8409d5ad3ecf8f3a516bc9" +dependencies = [ + "fvm_ipld_encoding", + "fvm_shared 3.13.1", + "fvm_shared 4.7.2", + "num-derive", + "num-traits", + "serde", +] + [[package]] name = "fil_actor_evm_state" version = "22.4.0" @@ -3141,6 +3155,7 @@ dependencies = [ "fil_actor_cron_state", "fil_actor_datacap_state", "fil_actor_eam_state", + "fil_actor_ethaccount_state", "fil_actor_evm_state", "fil_actor_init_state", "fil_actor_market_state", diff --git a/Cargo.toml b/Cargo.toml index 9df402e0e60e..8cf6cb44cfc7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -72,6 +72,7 @@ fil_actor_account_state = { version = "22.4" } fil_actor_cron_state = { version = "22.4" } fil_actor_datacap_state = { version = "22.4" } fil_actor_eam_state = { version = "22.4" } +fil_actor_ethaccount_state = { version = "22.4" } fil_actor_evm_state = { version = "22.4" } fil_actor_init_state = { version = "22.4" } fil_actor_market_state = { version = "22.4" } From 03fac223e61a95860aa1de71fa2b033f533e194b Mon Sep 17 00:00:00 2001 From: Aryan Tikarya Date: Tue, 26 Aug 2025 11:11:47 +0530 Subject: [PATCH 2/6] add support for the ethaccount actor in state decode params api --- src/rpc/registry/actors/eth_account.rs | 28 ++++++++++++++++++++++++++ src/rpc/registry/actors/mod.rs | 1 + src/rpc/registry/methods_reg.rs | 4 +++- 3 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 src/rpc/registry/actors/eth_account.rs diff --git a/src/rpc/registry/actors/eth_account.rs b/src/rpc/registry/actors/eth_account.rs new file mode 100644 index 000000000000..b6ce71bd974b --- /dev/null +++ b/src/rpc/registry/actors/eth_account.rs @@ -0,0 +1,28 @@ +// Copyright 2019-2025 ChainSafe Systems +// SPDX-License-Identifier: Apache-2.0, MIT + +use crate::rpc::registry::methods_reg::{MethodRegistry, register_actor_methods}; +use crate::shim::message::MethodNum; +use cid::Cid; + +macro_rules! register_eth_account_reg_version { + ($registry:expr, $code_cid:expr, $state_version:path) => {{ + use $state_version::{Method}; + + // Constructor has no parameters + register_actor_methods!($registry, $code_cid, [(Method::Constructor, empty),]); + }}; +} + +pub(crate) fn register_actor_methods(registry: &mut MethodRegistry, cid: Cid, version: u64) { + match version { + 10 => register_eth_account_reg_version!(registry, cid, fil_actor_ethaccount_state::v10), + 11 => register_eth_account_reg_version!(registry, cid, fil_actor_ethaccount_state::v11), + 12 => register_eth_account_reg_version!(registry, cid, fil_actor_ethaccount_state::v12), + 13 => register_eth_account_reg_version!(registry, cid, fil_actor_ethaccount_state::v13), + 14 => register_eth_account_reg_version!(registry, cid, fil_actor_ethaccount_state::v14), + 15 => register_eth_account_reg_version!(registry, cid, fil_actor_ethaccount_state::v15), + 16 => register_eth_account_reg_version!(registry, cid, fil_actor_ethaccount_state::v16), + _ => {} + } +} \ No newline at end of file diff --git a/src/rpc/registry/actors/mod.rs b/src/rpc/registry/actors/mod.rs index 4935fe4b8a51..74b9506ee84a 100644 --- a/src/rpc/registry/actors/mod.rs +++ b/src/rpc/registry/actors/mod.rs @@ -4,6 +4,7 @@ pub(crate) mod account; pub(crate) mod cron; pub(crate) mod datacap; +pub(crate) mod eth_account; pub(crate) mod evm; pub(crate) mod init; pub(crate) mod miner; diff --git a/src/rpc/registry/methods_reg.rs b/src/rpc/registry/methods_reg.rs index 4aa6d6c0f1d5..ffe2a41f5349 100644 --- a/src/rpc/registry/methods_reg.rs +++ b/src/rpc/registry/methods_reg.rs @@ -74,7 +74,8 @@ impl MethodRegistry { fn register_known_methods(&mut self) { use crate::rpc::registry::actors::{ - account, cron, datacap, evm, init, miner, multisig, power, reward, system, verified_reg, + account, cron, datacap, eth_account, evm, init, miner, multisig, power, reward, system, + verified_reg, }; for (&cid, &(actor_type, version)) in ACTOR_REGISTRY.iter() { @@ -96,6 +97,7 @@ impl MethodRegistry { BuiltinActor::VerifiedRegistry => { verified_reg::register_actor_methods(self, cid, version) } + BuiltinActor::EthAccount => eth_account::register_actor_methods(self, cid, version), _ => {} } } From 1425df0131d221f58ab31f20e0f3e3ea7c54c7f3 Mon Sep 17 00:00:00 2001 From: Aryan Tikarya Date: Tue, 26 Aug 2025 11:12:01 +0530 Subject: [PATCH 3/6] add snapshot tests for ethaccount actor --- src/tool/subcommands/api_cmd/api_compare_tests.rs | 7 +++++++ src/tool/subcommands/api_cmd/test_snapshots.txt | 1 + 2 files changed, 8 insertions(+) diff --git a/src/tool/subcommands/api_cmd/api_compare_tests.rs b/src/tool/subcommands/api_cmd/api_compare_tests.rs index 1b28f2e57e0e..6deb4c92cc52 100644 --- a/src/tool/subcommands/api_cmd/api_compare_tests.rs +++ b/src/tool/subcommands/api_cmd/api_compare_tests.rs @@ -1865,6 +1865,13 @@ fn state_decode_params_api_tests(tipset: &Tipset) -> anyhow::Result vec![], tipset.key().into(), ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::new_delegated(Address::ETHEREUM_ACCOUNT_MANAGER_ACTOR.id()?, &[0; 20]) + .unwrap(), + fil_actor_ethaccount_state::v16::Method::Constructor as u64, + vec![], + tipset.key().into(), + ))?), ]; tests.extend(miner_actor_state_decode_params_tests(tipset)?); diff --git a/src/tool/subcommands/api_cmd/test_snapshots.txt b/src/tool/subcommands/api_cmd/test_snapshots.txt index e3eec68b33f0..c0f8aeb8dd9a 100644 --- a/src/tool/subcommands/api_cmd/test_snapshots.txt +++ b/src/tool/subcommands/api_cmd/test_snapshots.txt @@ -201,6 +201,7 @@ filecoin_verified_reg_statedecodeparams_1754401651147022.rpcsnap.json.zst filecoin_verified_reg_statedecodeparams_1754401651147091.rpcsnap.json.zst filecoin_verified_reg_statedecodeparams_1754401651147157.rpcsnap.json.zst filecoin_verified_reg_statedecodeparams_1754401651147231.rpcsnap.json.zst +filecoin_ethaccount_statedecodeparams_1756186350854913.rpcsnap.json.zst filecoin_statereplay_1743504051038215.rpcsnap.json.zst filecoin_statesearchmsg_1741784596636715.rpcsnap.json.zst filecoin_statesearchmsglimited_1741784596704876.rpcsnap.json.zst From bef197dc88990a5a03cd01ec11974fb85f6d4fbb Mon Sep 17 00:00:00 2001 From: Aryan Tikarya Date: Tue, 26 Aug 2025 11:15:57 +0530 Subject: [PATCH 4/6] fix linter issue --- src/rpc/registry/actors/eth_account.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/rpc/registry/actors/eth_account.rs b/src/rpc/registry/actors/eth_account.rs index b6ce71bd974b..d5df206aa18c 100644 --- a/src/rpc/registry/actors/eth_account.rs +++ b/src/rpc/registry/actors/eth_account.rs @@ -7,11 +7,11 @@ use cid::Cid; macro_rules! register_eth_account_reg_version { ($registry:expr, $code_cid:expr, $state_version:path) => {{ - use $state_version::{Method}; + use $state_version::*; - // Constructor has no parameters - register_actor_methods!($registry, $code_cid, [(Method::Constructor, empty),]); - }}; + // Constructor has no parameters + register_actor_methods!($registry, $code_cid, [(Method::Constructor, empty),]); + }}; } pub(crate) fn register_actor_methods(registry: &mut MethodRegistry, cid: Cid, version: u64) { From 564fe196fd79f8d384977f53add6a9b8383e7226 Mon Sep 17 00:00:00 2001 From: Aryan Tikarya Date: Tue, 26 Aug 2025 12:32:23 +0530 Subject: [PATCH 5/6] linter fix --- src/rpc/registry/actors/eth_account.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rpc/registry/actors/eth_account.rs b/src/rpc/registry/actors/eth_account.rs index d5df206aa18c..86749e8c5acb 100644 --- a/src/rpc/registry/actors/eth_account.rs +++ b/src/rpc/registry/actors/eth_account.rs @@ -25,4 +25,4 @@ pub(crate) fn register_actor_methods(registry: &mut MethodRegistry, cid: Cid, ve 16 => register_eth_account_reg_version!(registry, cid, fil_actor_ethaccount_state::v16), _ => {} } -} \ No newline at end of file +} From 6e46b055556309340cfbf60b525ea506f2626978 Mon Sep 17 00:00:00 2001 From: Aryan Tikarya Date: Tue, 2 Sep 2025 14:16:48 +0530 Subject: [PATCH 6/6] update cargo lock file --- Cargo.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9d56a01cfc97..aa2a057bc365 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2693,13 +2693,13 @@ dependencies = [ [[package]] name = "fil_actor_ethaccount_state" -version = "22.4.0" +version = "23.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "469515bccbc78aefafa91fad2cb6ab35351c2eaabd8409d5ad3ecf8f3a516bc9" +checksum = "3b86efe58d250676a39c6a62f95ac77e1366eb5f00647217660d34b86e2551cf" dependencies = [ "fvm_ipld_encoding", - "fvm_shared 3.13.1", - "fvm_shared 4.7.2", + "fvm_shared 3.13.2", + "fvm_shared 4.7.3", "num-derive", "num-traits", "serde",