From b15d80639edbfd871be0867e3717c7da77efe9c4 Mon Sep 17 00:00:00 2001 From: Shashank Date: Mon, 28 Jul 2025 19:28:48 +0530 Subject: [PATCH 01/14] Add support for datacap actor --- .../methods/datacap_balance_params.rs | 44 ++++++++++++ .../methods/datacap_constructor_params.rs | 44 ++++++++++++ .../methods/datacap_destroy_params.rs | 58 ++++++++++++++++ .../methods/datacap_mint_params.rs | 68 +++++++++++++++++++ src/lotus_json/actor_states/methods/mod.rs | 4 ++ src/rpc/registry/actors/datacap.rs | 64 +++++++++++++++++ src/rpc/registry/actors/mod.rs | 1 + src/rpc/registry/methods_reg.rs | 3 +- .../subcommands/api_cmd/api_compare_tests.rs | 43 ++++++++++++ 9 files changed, 328 insertions(+), 1 deletion(-) create mode 100644 src/lotus_json/actor_states/methods/datacap_balance_params.rs create mode 100644 src/lotus_json/actor_states/methods/datacap_constructor_params.rs create mode 100644 src/lotus_json/actor_states/methods/datacap_destroy_params.rs create mode 100644 src/lotus_json/actor_states/methods/datacap_mint_params.rs create mode 100644 src/rpc/registry/actors/datacap.rs diff --git a/src/lotus_json/actor_states/methods/datacap_balance_params.rs b/src/lotus_json/actor_states/methods/datacap_balance_params.rs new file mode 100644 index 000000000000..005c289e102c --- /dev/null +++ b/src/lotus_json/actor_states/methods/datacap_balance_params.rs @@ -0,0 +1,44 @@ +// Copyright 2019-2025 ChainSafe Systems +// SPDX-License-Identifier: Apache-2.0, MIT + +use crate::lotus_json::{HasLotusJson, LotusJson}; +use crate::shim::address::Address; +use fil_actor_datacap_state as datacap; +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, schemars::JsonSchema)] +#[serde(rename_all = "PascalCase")] +pub struct DatacapBalanceParamsLotusJson { + #[schemars(with = "LotusJson
")] + #[serde(with = "crate::lotus_json")] + pub address: Address, +} + +macro_rules! impl_datacap_balance_params_lotus_json { + ($($version:ident),*) => { + $( + impl HasLotusJson for datacap::$version::BalanceParams { + type LotusJson = DatacapBalanceParamsLotusJson; + + #[cfg(test)] + fn snapshots() -> Vec<(serde_json::Value, Self)> { + vec![( + serde_json::json!({"address": "f01234"}), + datacap::$version::BalanceParams { + address: Address::new_id(1234).into(), + }, + )] + } + + fn into_lotus_json(self) -> Self::LotusJson { + DatacapBalanceParamsLotusJson { address: self.address.into() } + } + fn from_lotus_json(lotus_json: Self::LotusJson) -> Self { + datacap::$version::BalanceParams { address: lotus_json.address.into() } + } + } + )* + }; +} + +impl_datacap_balance_params_lotus_json!(v11, v12, v13, v14, v15, v16); diff --git a/src/lotus_json/actor_states/methods/datacap_constructor_params.rs b/src/lotus_json/actor_states/methods/datacap_constructor_params.rs new file mode 100644 index 000000000000..728cfc6657c8 --- /dev/null +++ b/src/lotus_json/actor_states/methods/datacap_constructor_params.rs @@ -0,0 +1,44 @@ +// Copyright 2019-2025 ChainSafe Systems +// SPDX-License-Identifier: Apache-2.0, MIT + +use crate::lotus_json::{HasLotusJson, LotusJson}; +use crate::shim::address::Address; +use fil_actor_datacap_state as datacap; +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, schemars::JsonSchema)] +#[serde(rename_all = "PascalCase")] +pub struct DatacapConstructorParamsLotusJson { + #[schemars(with = "LotusJson
")] + #[serde(with = "crate::lotus_json")] + pub governor: Address, +} + +macro_rules! impl_datacap_constructor_params_lotus_json { + ($($version:ident),*) => { + $( + impl HasLotusJson for datacap::$version::ConstructorParams { + type LotusJson = DatacapConstructorParamsLotusJson; + + #[cfg(test)] + fn snapshots() -> Vec<(serde_json::Value, Self)> { + vec![( + serde_json::json!({"governor": "f01234"}), + datacap::$version::ConstructorParams { + governor: Address::new_id(1234).into(), + }, + )] + } + + fn into_lotus_json(self) -> Self::LotusJson { + DatacapConstructorParamsLotusJson { governor: self.governor.into() } + } + fn from_lotus_json(lotus_json: Self::LotusJson) -> Self { + datacap::$version::ConstructorParams { governor: lotus_json.governor.into() } + } + } + )* + }; +} + +impl_datacap_constructor_params_lotus_json!(v11, v12, v13, v14, v15, v16); diff --git a/src/lotus_json/actor_states/methods/datacap_destroy_params.rs b/src/lotus_json/actor_states/methods/datacap_destroy_params.rs new file mode 100644 index 000000000000..d198aebaa8c7 --- /dev/null +++ b/src/lotus_json/actor_states/methods/datacap_destroy_params.rs @@ -0,0 +1,58 @@ +// Copyright 2019-2025 ChainSafe Systems +// SPDX-License-Identifier: Apache-2.0, MIT + +use crate::lotus_json::{HasLotusJson, LotusJson}; +use crate::shim::address::Address; +use crate::shim::econ::TokenAmount; +use fil_actor_datacap_state as datacap; +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, schemars::JsonSchema)] +#[serde(rename_all = "PascalCase")] +pub struct DatacapDestroyParamsLotusJson { + #[schemars(with = "LotusJson
")] + #[serde(with = "crate::lotus_json")] + pub owner: Address, + #[schemars(with = "LotusJson")] + #[serde(with = "crate::lotus_json")] + pub amount: TokenAmount, +} + +macro_rules! impl_datacap_destroy_params_lotus_json { + ($($version:ident),*) => { + $( + impl HasLotusJson for datacap::$version::DestroyParams { + type LotusJson = DatacapDestroyParamsLotusJson; + + #[cfg(test)] + fn snapshots() -> Vec<(serde_json::Value, Self)> { + vec![( + serde_json::json!({ + "owner": "f01234", + "amount": "1000000000000000000" + }), + datacap::$version::DestroyParams { + owner: Address::new_id(1234).into(), + amount: TokenAmount::from_atto(1_000_000_000_000_000_000_i64).into(), + }, + )] + } + + fn into_lotus_json(self) -> Self::LotusJson { + DatacapDestroyParamsLotusJson { + owner: self.owner.into(), + amount: self.amount.into(), + } + } + fn from_lotus_json(lotus_json: Self::LotusJson) -> Self { + datacap::$version::DestroyParams { + owner: lotus_json.owner.into(), + amount: lotus_json.amount.into(), + } + } + } + )* + }; +} + +impl_datacap_destroy_params_lotus_json!(v9, v10, v11, v12, v13, v14, v15, v16); diff --git a/src/lotus_json/actor_states/methods/datacap_mint_params.rs b/src/lotus_json/actor_states/methods/datacap_mint_params.rs new file mode 100644 index 000000000000..aaa8dfe52343 --- /dev/null +++ b/src/lotus_json/actor_states/methods/datacap_mint_params.rs @@ -0,0 +1,68 @@ +// Copyright 2019-2025 ChainSafe Systems +// SPDX-License-Identifier: Apache-2.0, MIT + +use crate::lotus_json::{HasLotusJson, LotusJson}; +use crate::shim::address::Address; +use crate::shim::econ::TokenAmount; +use fil_actor_datacap_state as datacap; +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, schemars::JsonSchema)] +#[serde(rename_all = "PascalCase")] +pub struct DatacapMintParamsLotusJson { + #[schemars(with = "LotusJson
")] + #[serde(with = "crate::lotus_json")] + pub to: Address, + #[schemars(with = "LotusJson")] + #[serde(with = "crate::lotus_json")] + pub amount: TokenAmount, + #[schemars(with = "LotusJson>")] + #[serde(with = "crate::lotus_json")] + pub operators: Vec
, +} + +macro_rules! impl_datacap_mint_params_lotus_json { + ($($version:ident),*) => { + $( + impl HasLotusJson for datacap::$version::MintParams { + type LotusJson = DatacapMintParamsLotusJson; + + #[cfg(test)] + fn snapshots() -> Vec<(serde_json::Value, Self)> { + vec![( + serde_json::json!({ + "to": "f01234", + "amount": "1000000000000000000", + "operators": ["f01235", "f01236"] + }), + datacap::$version::MintParams { + to: Address::new_id(1234).into(), + amount: TokenAmount::from_atto(1_000_000_000_000_000_000_i64).into(), + operators: vec![ + Address::new_id(1235).into(), + Address::new_id(1236).into(), + ], + }, + )] + } + + fn into_lotus_json(self) -> Self::LotusJson { + DatacapMintParamsLotusJson { + to: self.to.into(), + amount: self.amount.into(), + operators: self.operators.into_iter().map(|a| a.into()).collect(), + } + } + fn from_lotus_json(lotus_json: Self::LotusJson) -> Self { + datacap::$version::MintParams { + to: lotus_json.to.into(), + amount: lotus_json.amount.into(), + operators: lotus_json.operators.into_iter().map(|a| a.into()).collect(), + } + } + } + )* + }; +} + +impl_datacap_mint_params_lotus_json!(v9, v10, v11, v12, v13, v14, v15, v16); diff --git a/src/lotus_json/actor_states/methods/mod.rs b/src/lotus_json/actor_states/methods/mod.rs index 825949dbe75f..09e3f94811b5 100644 --- a/src/lotus_json/actor_states/methods/mod.rs +++ b/src/lotus_json/actor_states/methods/mod.rs @@ -3,6 +3,10 @@ use super::*; mod account_authenticate_params; mod account_constructor_params; +mod datacap_balance_params; +mod datacap_constructor_params; +mod datacap_destroy_params; +mod datacap_mint_params; mod evm_constructor_params; mod init_constructor_params; mod init_exec4_params; diff --git a/src/rpc/registry/actors/datacap.rs b/src/rpc/registry/actors/datacap.rs new file mode 100644 index 000000000000..c1cb2b402b30 --- /dev/null +++ b/src/rpc/registry/actors/datacap.rs @@ -0,0 +1,64 @@ +// 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 anyhow::Result; +use cid::Cid; + +macro_rules! register_datacap_v9 { + ($registry:expr, $code_cid:expr) => {{ + use fil_actor_datacap_state::v9::{DestroyParams, Method, MintParams}; + register_actor_methods!( + $registry, + $code_cid, + [ + (Method::Constructor, ()), + (Method::Mint, MintParams), + (Method::Destroy, DestroyParams), + ] + ); + }}; +} + +macro_rules! register_datacap_v10 { + ($registry:expr, $code_cid:expr) => {{ + use fil_actor_datacap_state::v10::{DestroyParams, Method, MintParams}; + register_actor_methods!( + $registry, + $code_cid, + [ + (Method::Constructor, ()), + (Method::MintExported, MintParams), + (Method::DestroyExported, DestroyParams), + ] + ); + }}; +} + +macro_rules! register_datacap_version { + ($registry:expr, $code_cid:expr, $state_version:path) => {{ + use $state_version::{BalanceParams, ConstructorParams, DestroyParams, Method, MintParams}; + register_actor_methods!( + $registry, + $code_cid, + [ + (Method::Constructor, ConstructorParams), + (Method::MintExported, MintParams), + (Method::DestroyExported, DestroyParams), + (Method::BalanceExported, BalanceParams), + ] + ); + }}; +} + +pub(crate) fn register_datacap_actor_methods(registry: &mut MethodRegistry, cid: Cid) { + register_datacap_v9!(registry, cid); + register_datacap_v10!(registry, cid); + register_datacap_version!(registry, cid, fil_actor_datacap_state::v11); + register_datacap_version!(registry, cid, fil_actor_datacap_state::v12); + register_datacap_version!(registry, cid, fil_actor_datacap_state::v13); + register_datacap_version!(registry, cid, fil_actor_datacap_state::v14); + register_datacap_version!(registry, cid, fil_actor_datacap_state::v15); + register_datacap_version!(registry, cid, fil_actor_datacap_state::v16); +} diff --git a/src/rpc/registry/actors/mod.rs b/src/rpc/registry/actors/mod.rs index 483ff04baa3a..0f5e2d007416 100644 --- a/src/rpc/registry/actors/mod.rs +++ b/src/rpc/registry/actors/mod.rs @@ -2,6 +2,7 @@ // SPDX-License-Identifier: Apache-2.0, MIT pub(crate) mod account; +pub(crate) mod datacap; 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 e839a838abf6..017659bb8d0b 100644 --- a/src/rpc/registry/methods_reg.rs +++ b/src/rpc/registry/methods_reg.rs @@ -74,7 +74,7 @@ impl MethodRegistry { } fn register_known_methods(&mut self) { - use crate::rpc::registry::actors::{account, evm, init, miner}; + use crate::rpc::registry::actors::{account, datacap, evm, init, miner}; for (&cid, &(actor_type, _version)) in ACTOR_REGISTRY.iter() { match actor_type { @@ -82,6 +82,7 @@ impl MethodRegistry { BuiltinActor::Miner => miner::register_miner_actor_methods(self, cid), BuiltinActor::EVM => evm::register_evm_actor_methods(self, cid), BuiltinActor::Init => init::register_actor_methods(self, cid), + BuiltinActor::DataCap => datacap::register_datacap_actor_methods(self, cid), _ => {} } } diff --git a/src/tool/subcommands/api_cmd/api_compare_tests.rs b/src/tool/subcommands/api_cmd/api_compare_tests.rs index 3458bf937d03..4518a08780c7 100644 --- a/src/tool/subcommands/api_cmd/api_compare_tests.rs +++ b/src/tool/subcommands/api_cmd/api_compare_tests.rs @@ -1845,6 +1845,24 @@ fn state_decode_params_api_tests(tipset: &Tipset) -> anyhow::Result code_cid: Cid::default(), constructor_params: fvm_ipld_encoding::RawBytes::new(vec![0x12, 0x34, 0x56]), // dummy bytecode }; + let datacap_constructor_params = fil_actor_datacap_state::v16::ConstructorParams { + governor: Address::new_id(3000).into(), + }; + + let datacap_mint_params = fil_actor_datacap_state::v16::MintParams { + to: Address::new_id(3001).into(), + amount: fvm_shared4::econ::TokenAmount::from_atto(1_000_000_000_000_000_000_i64), + operators: vec![Address::new_id(3002).into(), Address::new_id(3003).into()], + }; + + let datacap_destroy_params = fil_actor_datacap_state::v16::DestroyParams { + owner: Address::new_id(3004).into(), + amount: fvm_shared4::econ::TokenAmount::from_atto(500_000_000_000_000_000_i64), + }; + + let datacap_balance_params = fil_actor_datacap_state::v16::BalanceParams { + address: Address::new_id(3005).into(), + }; let tests = vec![ RpcTest::identity(StateDecodeParams::request(( @@ -1895,6 +1913,31 @@ fn state_decode_params_api_tests(tipset: &Tipset) -> anyhow::Result to_vec(&init_exec4_params)?, tipset.key().into(), ))?), + // DataCap actor tests + RpcTest::identity(StateDecodeParams::request(( + Address::DATACAP_TOKEN_ACTOR, + 1, // Constructor + to_vec(&datacap_constructor_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::DATACAP_TOKEN_ACTOR, + 2643134072, // frc42_dispatch::method_hash!("Mint") + to_vec(&datacap_mint_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::DATACAP_TOKEN_ACTOR, + 2643134073, // frc42_dispatch::method_hash!("Destroy") + to_vec(&datacap_destroy_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::DATACAP_TOKEN_ACTOR, + 2643134074, // frc42_dispatch::method_hash!("Balance") + to_vec(&datacap_balance_params)?, + tipset.key().into(), + ))?), ]; Ok(tests) From 007aa6ebd2f9d2d07fca7b2da84bfd120e8e0c3d Mon Sep 17 00:00:00 2001 From: Shashank Date: Tue, 29 Jul 2025 12:45:01 +0530 Subject: [PATCH 02/14] fix test --- .../actor_states/methods/datacap_balance_params.rs | 4 ++-- .../actor_states/methods/datacap_constructor_params.rs | 4 ++-- src/tool/subcommands/api_cmd/api_compare_tests.rs | 9 ++++----- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/lotus_json/actor_states/methods/datacap_balance_params.rs b/src/lotus_json/actor_states/methods/datacap_balance_params.rs index 005c289e102c..6b9c4ea0a90a 100644 --- a/src/lotus_json/actor_states/methods/datacap_balance_params.rs +++ b/src/lotus_json/actor_states/methods/datacap_balance_params.rs @@ -7,7 +7,7 @@ use fil_actor_datacap_state as datacap; use serde::{Deserialize, Serialize}; #[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, schemars::JsonSchema)] -#[serde(rename_all = "PascalCase")] +#[serde(transparent)] pub struct DatacapBalanceParamsLotusJson { #[schemars(with = "LotusJson
")] #[serde(with = "crate::lotus_json")] @@ -23,7 +23,7 @@ macro_rules! impl_datacap_balance_params_lotus_json { #[cfg(test)] fn snapshots() -> Vec<(serde_json::Value, Self)> { vec![( - serde_json::json!({"address": "f01234"}), + serde_json::json!("f01234"), datacap::$version::BalanceParams { address: Address::new_id(1234).into(), }, diff --git a/src/lotus_json/actor_states/methods/datacap_constructor_params.rs b/src/lotus_json/actor_states/methods/datacap_constructor_params.rs index 728cfc6657c8..62db2cbb6185 100644 --- a/src/lotus_json/actor_states/methods/datacap_constructor_params.rs +++ b/src/lotus_json/actor_states/methods/datacap_constructor_params.rs @@ -7,7 +7,7 @@ use fil_actor_datacap_state as datacap; use serde::{Deserialize, Serialize}; #[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, schemars::JsonSchema)] -#[serde(rename_all = "PascalCase")] +#[serde(transparent)] pub struct DatacapConstructorParamsLotusJson { #[schemars(with = "LotusJson
")] #[serde(with = "crate::lotus_json")] @@ -23,7 +23,7 @@ macro_rules! impl_datacap_constructor_params_lotus_json { #[cfg(test)] fn snapshots() -> Vec<(serde_json::Value, Self)> { vec![( - serde_json::json!({"governor": "f01234"}), + serde_json::json!("f01234"), datacap::$version::ConstructorParams { governor: Address::new_id(1234).into(), }, diff --git a/src/tool/subcommands/api_cmd/api_compare_tests.rs b/src/tool/subcommands/api_cmd/api_compare_tests.rs index 4518a08780c7..169f0143fb03 100644 --- a/src/tool/subcommands/api_cmd/api_compare_tests.rs +++ b/src/tool/subcommands/api_cmd/api_compare_tests.rs @@ -1913,28 +1913,27 @@ fn state_decode_params_api_tests(tipset: &Tipset) -> anyhow::Result to_vec(&init_exec4_params)?, tipset.key().into(), ))?), - // DataCap actor tests RpcTest::identity(StateDecodeParams::request(( Address::DATACAP_TOKEN_ACTOR, - 1, // Constructor + 1, to_vec(&datacap_constructor_params)?, tipset.key().into(), ))?), RpcTest::identity(StateDecodeParams::request(( Address::DATACAP_TOKEN_ACTOR, - 2643134072, // frc42_dispatch::method_hash!("Mint") + 116935346, // frc42_dispatch::method_hash!("Mint") to_vec(&datacap_mint_params)?, tipset.key().into(), ))?), RpcTest::identity(StateDecodeParams::request(( Address::DATACAP_TOKEN_ACTOR, - 2643134073, // frc42_dispatch::method_hash!("Destroy") + 2624896501, // frc42_dispatch::method_hash!("Destroy") to_vec(&datacap_destroy_params)?, tipset.key().into(), ))?), RpcTest::identity(StateDecodeParams::request(( Address::DATACAP_TOKEN_ACTOR, - 2643134074, // frc42_dispatch::method_hash!("Balance") + 3261979605, // frc42_dispatch::method_hash!("Balance") to_vec(&datacap_balance_params)?, tipset.key().into(), ))?), From a3e1148ad1d6788e4a6b789de12c721e9e7af9ef Mon Sep 17 00:00:00 2001 From: Shashank Date: Tue, 29 Jul 2025 13:07:05 +0530 Subject: [PATCH 03/14] Cleanup --- src/rpc/registry/actors/datacap.rs | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/rpc/registry/actors/datacap.rs b/src/rpc/registry/actors/datacap.rs index c1cb2b402b30..d1c9e20d5400 100644 --- a/src/rpc/registry/actors/datacap.rs +++ b/src/rpc/registry/actors/datacap.rs @@ -12,11 +12,7 @@ macro_rules! register_datacap_v9 { register_actor_methods!( $registry, $code_cid, - [ - (Method::Constructor, ()), - (Method::Mint, MintParams), - (Method::Destroy, DestroyParams), - ] + [(Method::Mint, MintParams), (Method::Destroy, DestroyParams),] ); }}; } @@ -28,7 +24,6 @@ macro_rules! register_datacap_v10 { $registry, $code_cid, [ - (Method::Constructor, ()), (Method::MintExported, MintParams), (Method::DestroyExported, DestroyParams), ] From 331f733e8b9d53f361cbda35996d6420b316f8ad Mon Sep 17 00:00:00 2001 From: Shashank Date: Tue, 29 Jul 2025 13:27:19 +0530 Subject: [PATCH 04/14] cleanup --- src/lotus_json/actor_states/methods/datacap_balance_params.rs | 3 ++- .../actor_states/methods/datacap_constructor_params.rs | 3 ++- src/lotus_json/actor_states/methods/datacap_destroy_params.rs | 3 ++- src/lotus_json/actor_states/methods/datacap_mint_params.rs | 3 ++- src/tool/subcommands/api_cmd/api_compare_tests.rs | 4 ++-- 5 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/lotus_json/actor_states/methods/datacap_balance_params.rs b/src/lotus_json/actor_states/methods/datacap_balance_params.rs index 6b9c4ea0a90a..69e2c52514e8 100644 --- a/src/lotus_json/actor_states/methods/datacap_balance_params.rs +++ b/src/lotus_json/actor_states/methods/datacap_balance_params.rs @@ -4,9 +4,10 @@ use crate::lotus_json::{HasLotusJson, LotusJson}; use crate::shim::address::Address; use fil_actor_datacap_state as datacap; +use schemars::JsonSchema; use serde::{Deserialize, Serialize}; -#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, schemars::JsonSchema)] +#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, JsonSchema)] #[serde(transparent)] pub struct DatacapBalanceParamsLotusJson { #[schemars(with = "LotusJson
")] diff --git a/src/lotus_json/actor_states/methods/datacap_constructor_params.rs b/src/lotus_json/actor_states/methods/datacap_constructor_params.rs index 62db2cbb6185..e98ab42eebc2 100644 --- a/src/lotus_json/actor_states/methods/datacap_constructor_params.rs +++ b/src/lotus_json/actor_states/methods/datacap_constructor_params.rs @@ -4,9 +4,10 @@ use crate::lotus_json::{HasLotusJson, LotusJson}; use crate::shim::address::Address; use fil_actor_datacap_state as datacap; +use schemars::JsonSchema; use serde::{Deserialize, Serialize}; -#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, schemars::JsonSchema)] +#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, JsonSchema)] #[serde(transparent)] pub struct DatacapConstructorParamsLotusJson { #[schemars(with = "LotusJson
")] diff --git a/src/lotus_json/actor_states/methods/datacap_destroy_params.rs b/src/lotus_json/actor_states/methods/datacap_destroy_params.rs index d198aebaa8c7..369943bc1324 100644 --- a/src/lotus_json/actor_states/methods/datacap_destroy_params.rs +++ b/src/lotus_json/actor_states/methods/datacap_destroy_params.rs @@ -5,9 +5,10 @@ use crate::lotus_json::{HasLotusJson, LotusJson}; use crate::shim::address::Address; use crate::shim::econ::TokenAmount; use fil_actor_datacap_state as datacap; +use schemars::JsonSchema; use serde::{Deserialize, Serialize}; -#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, schemars::JsonSchema)] +#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, JsonSchema)] #[serde(rename_all = "PascalCase")] pub struct DatacapDestroyParamsLotusJson { #[schemars(with = "LotusJson
")] diff --git a/src/lotus_json/actor_states/methods/datacap_mint_params.rs b/src/lotus_json/actor_states/methods/datacap_mint_params.rs index aaa8dfe52343..eaeb35fcff87 100644 --- a/src/lotus_json/actor_states/methods/datacap_mint_params.rs +++ b/src/lotus_json/actor_states/methods/datacap_mint_params.rs @@ -5,9 +5,10 @@ use crate::lotus_json::{HasLotusJson, LotusJson}; use crate::shim::address::Address; use crate::shim::econ::TokenAmount; use fil_actor_datacap_state as datacap; +use schemars::JsonSchema; use serde::{Deserialize, Serialize}; -#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, schemars::JsonSchema)] +#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, JsonSchema)] #[serde(rename_all = "PascalCase")] pub struct DatacapMintParamsLotusJson { #[schemars(with = "LotusJson
")] diff --git a/src/tool/subcommands/api_cmd/api_compare_tests.rs b/src/tool/subcommands/api_cmd/api_compare_tests.rs index 169f0143fb03..4dddeb92046a 100644 --- a/src/tool/subcommands/api_cmd/api_compare_tests.rs +++ b/src/tool/subcommands/api_cmd/api_compare_tests.rs @@ -1851,13 +1851,13 @@ fn state_decode_params_api_tests(tipset: &Tipset) -> anyhow::Result let datacap_mint_params = fil_actor_datacap_state::v16::MintParams { to: Address::new_id(3001).into(), - amount: fvm_shared4::econ::TokenAmount::from_atto(1_000_000_000_000_000_000_i64), + amount: TokenAmount::default().into(), operators: vec![Address::new_id(3002).into(), Address::new_id(3003).into()], }; let datacap_destroy_params = fil_actor_datacap_state::v16::DestroyParams { owner: Address::new_id(3004).into(), - amount: fvm_shared4::econ::TokenAmount::from_atto(500_000_000_000_000_000_i64), + amount: TokenAmount::default().into(), }; let datacap_balance_params = fil_actor_datacap_state::v16::BalanceParams { From 92caa40d8a03cdd07ae2f8a8cba12baceabc506d Mon Sep 17 00:00:00 2001 From: Shashank Date: Fri, 1 Aug 2025 14:49:55 +0530 Subject: [PATCH 05/14] fix test --- src/tool/subcommands/api_cmd/api_compare_tests.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/tool/subcommands/api_cmd/api_compare_tests.rs b/src/tool/subcommands/api_cmd/api_compare_tests.rs index 8f69428901be..300dcb6d724f 100644 --- a/src/tool/subcommands/api_cmd/api_compare_tests.rs +++ b/src/tool/subcommands/api_cmd/api_compare_tests.rs @@ -1918,25 +1918,25 @@ fn state_decode_params_api_tests(tipset: &Tipset) -> anyhow::Result ))?), RpcTest::identity(StateDecodeParams::request(( Address::DATACAP_TOKEN_ACTOR, - 1, + fil_actor_datacap_state::v16::Method::Constructor as u64, to_vec(&datacap_constructor_params)?, tipset.key().into(), ))?), RpcTest::identity(StateDecodeParams::request(( Address::DATACAP_TOKEN_ACTOR, - 116935346, // frc42_dispatch::method_hash!("Mint") + fil_actor_datacap_state::v16::Method::MintExported as u64, to_vec(&datacap_mint_params)?, tipset.key().into(), ))?), RpcTest::identity(StateDecodeParams::request(( Address::DATACAP_TOKEN_ACTOR, - 2624896501, // frc42_dispatch::method_hash!("Destroy") + fil_actor_datacap_state::v16::Method::DestroyExported as u64, to_vec(&datacap_destroy_params)?, tipset.key().into(), ))?), RpcTest::identity(StateDecodeParams::request(( Address::DATACAP_TOKEN_ACTOR, - 3261979605, // frc42_dispatch::method_hash!("Balance") + fil_actor_datacap_state::v16::Method::BalanceExported as u64, to_vec(&datacap_balance_params)?, tipset.key().into(), ))?), From 1e612ec585c5c0eaac9c1310434c86392ecf0abe Mon Sep 17 00:00:00 2001 From: Shashank Date: Fri, 1 Aug 2025 15:02:52 +0530 Subject: [PATCH 06/14] Add test snapshots --- src/tool/subcommands/api_cmd/test_snapshots.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/tool/subcommands/api_cmd/test_snapshots.txt b/src/tool/subcommands/api_cmd/test_snapshots.txt index d5216a484c70..1ff91aa9ae3b 100644 --- a/src/tool/subcommands/api_cmd/test_snapshots.txt +++ b/src/tool/subcommands/api_cmd/test_snapshots.txt @@ -134,6 +134,10 @@ filecoin_statedecodeparams_1749826976836194.rpcsnap.json.zst filecoin_statedecodeparams_1749826976835026.rpcsnap.json.zst filecoin_statedecodeparams_1749826976835457.rpcsnap.json.zst filecoin_statedecodeparams_1750858921185411.rpcsnap.json.zst +filecoin_statedecodeparams_1754040220700753.rpcsnap.json.zst +filecoin_statedecodeparams_1754040220704974.rpcsnap.json.zst +filecoin_statedecodeparams_1754040220705114.rpcsnap.json.zst +filecoin_statedecodeparams_1754040220705189.rpcsnap.json.zst filecoin_statereplay_1743504051038215.rpcsnap.json.zst filecoin_statesearchmsg_1741784596636715.rpcsnap.json.zst filecoin_statesearchmsglimited_1741784596704876.rpcsnap.json.zst From e143f88b63ef18bf30f2ddc6b357dc1e73453568 Mon Sep 17 00:00:00 2001 From: Shashank Date: Mon, 11 Aug 2025 13:51:34 +0530 Subject: [PATCH 07/14] Add more methods --- .../methods/datacap_balance_params.rs | 45 ---- .../methods/datacap_constructor_params.rs | 45 ---- .../methods/datacap_destroy_params.rs | 59 ------ .../actor_states/methods/datacap_methods.rs | 197 ++++++++++++++++++ .../methods/datacap_mint_params.rs | 69 ------ src/lotus_json/actor_states/methods/mod.rs | 5 +- src/rpc/registry/actors/datacap.rs | 32 +++ .../subcommands/api_cmd/api_compare_tests.rs | 24 +++ .../subcommands/api_cmd/test_snapshots.txt | 12 +- 9 files changed, 262 insertions(+), 226 deletions(-) delete mode 100644 src/lotus_json/actor_states/methods/datacap_balance_params.rs delete mode 100644 src/lotus_json/actor_states/methods/datacap_constructor_params.rs delete mode 100644 src/lotus_json/actor_states/methods/datacap_destroy_params.rs create mode 100644 src/lotus_json/actor_states/methods/datacap_methods.rs delete mode 100644 src/lotus_json/actor_states/methods/datacap_mint_params.rs diff --git a/src/lotus_json/actor_states/methods/datacap_balance_params.rs b/src/lotus_json/actor_states/methods/datacap_balance_params.rs deleted file mode 100644 index 69e2c52514e8..000000000000 --- a/src/lotus_json/actor_states/methods/datacap_balance_params.rs +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2019-2025 ChainSafe Systems -// SPDX-License-Identifier: Apache-2.0, MIT - -use crate::lotus_json::{HasLotusJson, LotusJson}; -use crate::shim::address::Address; -use fil_actor_datacap_state as datacap; -use schemars::JsonSchema; -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, JsonSchema)] -#[serde(transparent)] -pub struct DatacapBalanceParamsLotusJson { - #[schemars(with = "LotusJson
")] - #[serde(with = "crate::lotus_json")] - pub address: Address, -} - -macro_rules! impl_datacap_balance_params_lotus_json { - ($($version:ident),*) => { - $( - impl HasLotusJson for datacap::$version::BalanceParams { - type LotusJson = DatacapBalanceParamsLotusJson; - - #[cfg(test)] - fn snapshots() -> Vec<(serde_json::Value, Self)> { - vec![( - serde_json::json!("f01234"), - datacap::$version::BalanceParams { - address: Address::new_id(1234).into(), - }, - )] - } - - fn into_lotus_json(self) -> Self::LotusJson { - DatacapBalanceParamsLotusJson { address: self.address.into() } - } - fn from_lotus_json(lotus_json: Self::LotusJson) -> Self { - datacap::$version::BalanceParams { address: lotus_json.address.into() } - } - } - )* - }; -} - -impl_datacap_balance_params_lotus_json!(v11, v12, v13, v14, v15, v16); diff --git a/src/lotus_json/actor_states/methods/datacap_constructor_params.rs b/src/lotus_json/actor_states/methods/datacap_constructor_params.rs deleted file mode 100644 index e98ab42eebc2..000000000000 --- a/src/lotus_json/actor_states/methods/datacap_constructor_params.rs +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2019-2025 ChainSafe Systems -// SPDX-License-Identifier: Apache-2.0, MIT - -use crate::lotus_json::{HasLotusJson, LotusJson}; -use crate::shim::address::Address; -use fil_actor_datacap_state as datacap; -use schemars::JsonSchema; -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, JsonSchema)] -#[serde(transparent)] -pub struct DatacapConstructorParamsLotusJson { - #[schemars(with = "LotusJson
")] - #[serde(with = "crate::lotus_json")] - pub governor: Address, -} - -macro_rules! impl_datacap_constructor_params_lotus_json { - ($($version:ident),*) => { - $( - impl HasLotusJson for datacap::$version::ConstructorParams { - type LotusJson = DatacapConstructorParamsLotusJson; - - #[cfg(test)] - fn snapshots() -> Vec<(serde_json::Value, Self)> { - vec![( - serde_json::json!("f01234"), - datacap::$version::ConstructorParams { - governor: Address::new_id(1234).into(), - }, - )] - } - - fn into_lotus_json(self) -> Self::LotusJson { - DatacapConstructorParamsLotusJson { governor: self.governor.into() } - } - fn from_lotus_json(lotus_json: Self::LotusJson) -> Self { - datacap::$version::ConstructorParams { governor: lotus_json.governor.into() } - } - } - )* - }; -} - -impl_datacap_constructor_params_lotus_json!(v11, v12, v13, v14, v15, v16); diff --git a/src/lotus_json/actor_states/methods/datacap_destroy_params.rs b/src/lotus_json/actor_states/methods/datacap_destroy_params.rs deleted file mode 100644 index 369943bc1324..000000000000 --- a/src/lotus_json/actor_states/methods/datacap_destroy_params.rs +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2019-2025 ChainSafe Systems -// SPDX-License-Identifier: Apache-2.0, MIT - -use crate::lotus_json::{HasLotusJson, LotusJson}; -use crate::shim::address::Address; -use crate::shim::econ::TokenAmount; -use fil_actor_datacap_state as datacap; -use schemars::JsonSchema; -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, JsonSchema)] -#[serde(rename_all = "PascalCase")] -pub struct DatacapDestroyParamsLotusJson { - #[schemars(with = "LotusJson
")] - #[serde(with = "crate::lotus_json")] - pub owner: Address, - #[schemars(with = "LotusJson")] - #[serde(with = "crate::lotus_json")] - pub amount: TokenAmount, -} - -macro_rules! impl_datacap_destroy_params_lotus_json { - ($($version:ident),*) => { - $( - impl HasLotusJson for datacap::$version::DestroyParams { - type LotusJson = DatacapDestroyParamsLotusJson; - - #[cfg(test)] - fn snapshots() -> Vec<(serde_json::Value, Self)> { - vec![( - serde_json::json!({ - "owner": "f01234", - "amount": "1000000000000000000" - }), - datacap::$version::DestroyParams { - owner: Address::new_id(1234).into(), - amount: TokenAmount::from_atto(1_000_000_000_000_000_000_i64).into(), - }, - )] - } - - fn into_lotus_json(self) -> Self::LotusJson { - DatacapDestroyParamsLotusJson { - owner: self.owner.into(), - amount: self.amount.into(), - } - } - fn from_lotus_json(lotus_json: Self::LotusJson) -> Self { - datacap::$version::DestroyParams { - owner: lotus_json.owner.into(), - amount: lotus_json.amount.into(), - } - } - } - )* - }; -} - -impl_datacap_destroy_params_lotus_json!(v9, v10, v11, v12, v13, v14, v15, v16); diff --git a/src/lotus_json/actor_states/methods/datacap_methods.rs b/src/lotus_json/actor_states/methods/datacap_methods.rs new file mode 100644 index 000000000000..8fc8c295cd8e --- /dev/null +++ b/src/lotus_json/actor_states/methods/datacap_methods.rs @@ -0,0 +1,197 @@ +// Copyright 2019-2025 ChainSafe Systems +// SPDX-License-Identifier: Apache-2.0, MIT + +use crate::lotus_json::{HasLotusJson, LotusJson}; +use crate::shim::address::Address; +use crate::shim::econ::TokenAmount; +use fil_actor_datacap_state as datacap; +use schemars::JsonSchema; +use serde::{Deserialize, Serialize}; + +// Balance Params +#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, JsonSchema)] +#[serde(transparent)] +pub struct DatacapBalanceParamsLotusJson { + #[schemars(with = "LotusJson
")] + #[serde(with = "crate::lotus_json")] + pub address: Address, +} + +macro_rules! impl_datacap_balance_params_lotus_json { + ($($version:ident),*) => { + $( + impl HasLotusJson for datacap::$version::BalanceParams { + type LotusJson = DatacapBalanceParamsLotusJson; + + #[cfg(test)] + fn snapshots() -> Vec<(serde_json::Value, Self)> { + vec![( + serde_json::json!("f01234"), + datacap::$version::BalanceParams { + address: Address::new_id(1234).into(), + }, + )] + } + + fn into_lotus_json(self) -> Self::LotusJson { + DatacapBalanceParamsLotusJson { address: self.address.into() } + } + fn from_lotus_json(lotus_json: Self::LotusJson) -> Self { + datacap::$version::BalanceParams { address: lotus_json.address.into() } + } + } + )* + }; +} + +impl_datacap_balance_params_lotus_json!(v11, v12, v13, v14, v15, v16); + +// Constructor Params +#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, JsonSchema)] +#[serde(transparent)] +pub struct DatacapConstructorParamsLotusJson { + #[schemars(with = "LotusJson
")] + #[serde(with = "crate::lotus_json")] + pub governor: Address, +} + +macro_rules! impl_datacap_constructor_params_lotus_json { + ($($version:ident),*) => { + $( + impl HasLotusJson for datacap::$version::ConstructorParams { + type LotusJson = DatacapConstructorParamsLotusJson; + + #[cfg(test)] + fn snapshots() -> Vec<(serde_json::Value, Self)> { + vec![( + serde_json::json!("f01234"), + datacap::$version::ConstructorParams { + governor: Address::new_id(1234).into(), + }, + )] + } + + fn into_lotus_json(self) -> Self::LotusJson { + DatacapConstructorParamsLotusJson { governor: self.governor.into() } + } + fn from_lotus_json(lotus_json: Self::LotusJson) -> Self { + datacap::$version::ConstructorParams { governor: lotus_json.governor.into() } + } + } + )* + }; +} + +impl_datacap_constructor_params_lotus_json!(v11, v12, v13, v14, v15, v16); + +// Destroy Params +#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, JsonSchema)] +#[serde(rename_all = "PascalCase")] +pub struct DatacapDestroyParamsLotusJson { + #[schemars(with = "LotusJson
")] + #[serde(with = "crate::lotus_json")] + pub owner: Address, + #[schemars(with = "LotusJson")] + #[serde(with = "crate::lotus_json")] + pub amount: TokenAmount, +} + +macro_rules! impl_datacap_destroy_params_lotus_json { + ($($version:ident),*) => { + $( + impl HasLotusJson for datacap::$version::DestroyParams { + type LotusJson = DatacapDestroyParamsLotusJson; + + #[cfg(test)] + fn snapshots() -> Vec<(serde_json::Value, Self)> { + vec![( + serde_json::json!({ + "owner": "f01234", + "amount": "1000000000000000000" + }), + datacap::$version::DestroyParams { + owner: Address::new_id(1234).into(), + amount: TokenAmount::from_atto(1_000_000_000_000_000_000_i64).into(), + }, + )] + } + + fn into_lotus_json(self) -> Self::LotusJson { + DatacapDestroyParamsLotusJson { + owner: self.owner.into(), + amount: self.amount.into(), + } + } + fn from_lotus_json(lotus_json: Self::LotusJson) -> Self { + datacap::$version::DestroyParams { + owner: lotus_json.owner.into(), + amount: lotus_json.amount.into(), + } + } + } + )* + }; +} + +impl_datacap_destroy_params_lotus_json!(v9, v10, v11, v12, v13, v14, v15, v16); + +// Mint Params +#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, JsonSchema)] +#[serde(rename_all = "PascalCase")] +pub struct DatacapMintParamsLotusJson { + #[schemars(with = "LotusJson
")] + #[serde(with = "crate::lotus_json")] + pub to: Address, + #[schemars(with = "LotusJson")] + #[serde(with = "crate::lotus_json")] + pub amount: TokenAmount, + #[schemars(with = "LotusJson>")] + #[serde(with = "crate::lotus_json")] + pub operators: Vec
, +} + +macro_rules! impl_datacap_mint_params_lotus_json { + ($($version:ident),*) => { + $( + impl HasLotusJson for datacap::$version::MintParams { + type LotusJson = DatacapMintParamsLotusJson; + + #[cfg(test)] + fn snapshots() -> Vec<(serde_json::Value, Self)> { + vec![( + serde_json::json!({ + "to": "f01234", + "amount": "1000000000000000000", + "operators": ["f01235", "f01236"] + }), + datacap::$version::MintParams { + to: Address::new_id(1234).into(), + amount: TokenAmount::from_atto(1_000_000_000_000_000_000_i64).into(), + operators: vec![ + Address::new_id(1235).into(), + Address::new_id(1236).into(), + ], + }, + )] + } + + fn into_lotus_json(self) -> Self::LotusJson { + DatacapMintParamsLotusJson { + to: self.to.into(), + amount: self.amount.into(), + operators: self.operators.into_iter().map(|a| a.into()).collect(), + } + } + fn from_lotus_json(lotus_json: Self::LotusJson) -> Self { + datacap::$version::MintParams { + to: lotus_json.to.into(), + amount: lotus_json.amount.into(), + operators: lotus_json.operators.into_iter().map(|a| a.into()).collect(), + } + } + } + )* + }; +} + +impl_datacap_mint_params_lotus_json!(v9, v10, v11, v12, v13, v14, v15, v16); diff --git a/src/lotus_json/actor_states/methods/datacap_mint_params.rs b/src/lotus_json/actor_states/methods/datacap_mint_params.rs deleted file mode 100644 index eaeb35fcff87..000000000000 --- a/src/lotus_json/actor_states/methods/datacap_mint_params.rs +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright 2019-2025 ChainSafe Systems -// SPDX-License-Identifier: Apache-2.0, MIT - -use crate::lotus_json::{HasLotusJson, LotusJson}; -use crate::shim::address::Address; -use crate::shim::econ::TokenAmount; -use fil_actor_datacap_state as datacap; -use schemars::JsonSchema; -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, JsonSchema)] -#[serde(rename_all = "PascalCase")] -pub struct DatacapMintParamsLotusJson { - #[schemars(with = "LotusJson
")] - #[serde(with = "crate::lotus_json")] - pub to: Address, - #[schemars(with = "LotusJson")] - #[serde(with = "crate::lotus_json")] - pub amount: TokenAmount, - #[schemars(with = "LotusJson>")] - #[serde(with = "crate::lotus_json")] - pub operators: Vec
, -} - -macro_rules! impl_datacap_mint_params_lotus_json { - ($($version:ident),*) => { - $( - impl HasLotusJson for datacap::$version::MintParams { - type LotusJson = DatacapMintParamsLotusJson; - - #[cfg(test)] - fn snapshots() -> Vec<(serde_json::Value, Self)> { - vec![( - serde_json::json!({ - "to": "f01234", - "amount": "1000000000000000000", - "operators": ["f01235", "f01236"] - }), - datacap::$version::MintParams { - to: Address::new_id(1234).into(), - amount: TokenAmount::from_atto(1_000_000_000_000_000_000_i64).into(), - operators: vec![ - Address::new_id(1235).into(), - Address::new_id(1236).into(), - ], - }, - )] - } - - fn into_lotus_json(self) -> Self::LotusJson { - DatacapMintParamsLotusJson { - to: self.to.into(), - amount: self.amount.into(), - operators: self.operators.into_iter().map(|a| a.into()).collect(), - } - } - fn from_lotus_json(lotus_json: Self::LotusJson) -> Self { - datacap::$version::MintParams { - to: lotus_json.to.into(), - amount: lotus_json.amount.into(), - operators: lotus_json.operators.into_iter().map(|a| a.into()).collect(), - } - } - } - )* - }; -} - -impl_datacap_mint_params_lotus_json!(v9, v10, v11, v12, v13, v14, v15, v16); diff --git a/src/lotus_json/actor_states/methods/mod.rs b/src/lotus_json/actor_states/methods/mod.rs index da8f19755ac9..2d6a51461779 100644 --- a/src/lotus_json/actor_states/methods/mod.rs +++ b/src/lotus_json/actor_states/methods/mod.rs @@ -3,10 +3,7 @@ use super::*; mod account_authenticate_params; mod account_constructor_params; -mod datacap_balance_params; -mod datacap_constructor_params; -mod datacap_destroy_params; -mod datacap_mint_params; +mod datacap_methods; mod evm_constructor_params; mod init_constructor_params; mod init_exec4_params; diff --git a/src/rpc/registry/actors/datacap.rs b/src/rpc/registry/actors/datacap.rs index a42230611c8b..aa85e63a5ccd 100644 --- a/src/rpc/registry/actors/datacap.rs +++ b/src/rpc/registry/actors/datacap.rs @@ -14,6 +14,16 @@ macro_rules! register_datacap_v9 { $code_cid, [(Method::Mint, MintParams), (Method::Destroy, DestroyParams),] ); + + register_actor_methods!( + $registry, + $code_cid, + [ + (Method::Name, empty), + (Method::Symbol, empty), + (Method::TotalSupply, empty), + ] + ); }}; } @@ -28,6 +38,17 @@ macro_rules! register_datacap_v10 { (Method::DestroyExported, DestroyParams), ] ); + + register_actor_methods!( + $registry, + $code_cid, + [ + (Method::NameExported, empty), + (Method::SymbolExported, empty), + (Method::TotalSupplyExported, empty), + (Method::GranularityExported, empty) + ] + ); }}; } @@ -44,6 +65,17 @@ macro_rules! register_datacap_version { (Method::BalanceExported, BalanceParams), ] ); + + register_actor_methods!( + $registry, + $code_cid, + [ + (Method::NameExported, empty), + (Method::SymbolExported, empty), + (Method::TotalSupplyExported, empty), + (Method::GranularityExported, empty) + ] + ); }}; } diff --git a/src/tool/subcommands/api_cmd/api_compare_tests.rs b/src/tool/subcommands/api_cmd/api_compare_tests.rs index 09ee9f622995..21e28d9111ad 100644 --- a/src/tool/subcommands/api_cmd/api_compare_tests.rs +++ b/src/tool/subcommands/api_cmd/api_compare_tests.rs @@ -2025,12 +2025,36 @@ fn state_decode_params_api_tests(tipset: &Tipset) -> anyhow::Result to_vec(&datacap_destroy_params)?, tipset.key().into(), ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::DATACAP_TOKEN_ACTOR, + fil_actor_datacap_state::v16::Method::NameExported as u64, + vec![], + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::DATACAP_TOKEN_ACTOR, + fil_actor_datacap_state::v16::Method::SymbolExported as u64, + vec![], + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::DATACAP_TOKEN_ACTOR, + fil_actor_datacap_state::v16::Method::TotalSupplyExported as u64, + vec![], + tipset.key().into(), + ))?), RpcTest::identity(StateDecodeParams::request(( Address::DATACAP_TOKEN_ACTOR, fil_actor_datacap_state::v16::Method::BalanceExported as u64, to_vec(&datacap_balance_params)?, tipset.key().into(), ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::DATACAP_TOKEN_ACTOR, + fil_actor_datacap_state::v16::Method::GranularityExported as u64, + vec![], + tipset.key().into(), + ))?), RpcTest::identity(StateDecodeParams::request(( Address::REWARD_ACTOR, fil_actor_reward_state::v16::Method::Constructor as u64, diff --git a/src/tool/subcommands/api_cmd/test_snapshots.txt b/src/tool/subcommands/api_cmd/test_snapshots.txt index fa46aeda402a..893f299f1fa3 100644 --- a/src/tool/subcommands/api_cmd/test_snapshots.txt +++ b/src/tool/subcommands/api_cmd/test_snapshots.txt @@ -134,10 +134,14 @@ filecoin_statedecodeparams_1749826976836194.rpcsnap.json.zst filecoin_statedecodeparams_1749826976835026.rpcsnap.json.zst filecoin_statedecodeparams_1749826976835457.rpcsnap.json.zst filecoin_statedecodeparams_1750858921185411.rpcsnap.json.zst -filecoin_statedecodeparams_1754040220700753.rpcsnap.json.zst -filecoin_statedecodeparams_1754040220704974.rpcsnap.json.zst -filecoin_statedecodeparams_1754040220705114.rpcsnap.json.zst -filecoin_statedecodeparams_1754040220705189.rpcsnap.json.zst +filecoin_datacap_balance_statedecodeparams_1754907971558328.rpcsnap.json.zst +filecoin_datacap_constructor_statedecodeparams_1754907971554508.rpcsnap.json.zst +filecoin_datacap_destroy_statedecodeparams_1754907971558376.rpcsnap.json.zst +filecoin_datacap_granularity_statedecodeparams_1754907971554148.rpcsnap.json.zst +filecoin_datacap_mind_statedecodeparams_1754907971554434.rpcsnap.json.zst +filecoin_datacap_name_statedecodeparams_1754907971558192.rpcsnap.json.zst +filecoin_datacap_symbol_statedecodeparams_1754907971554570.rpcsnap.json.zst +filecoin_datacap_totalsupply_statedecodeparams_1754907971558270.rpcsnap.json.zst filecoin_statedecodeparams_1754059748144675.rpcsnap.json.zst filecoin_statedecodeparams_1754059748147929.rpcsnap.json.zst filecoin_statedecodeparams_1754059748148210.rpcsnap.json.zst From e453d049d7f1e10ca33bd1cf250d5086a104deac Mon Sep 17 00:00:00 2001 From: Shashank Date: Mon, 11 Aug 2025 16:47:22 +0530 Subject: [PATCH 08/14] cleanup --- src/lotus_json/actor_states/methods/datacap_methods.rs | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/lotus_json/actor_states/methods/datacap_methods.rs b/src/lotus_json/actor_states/methods/datacap_methods.rs index 8fc8c295cd8e..eeb301c30621 100644 --- a/src/lotus_json/actor_states/methods/datacap_methods.rs +++ b/src/lotus_json/actor_states/methods/datacap_methods.rs @@ -8,7 +8,6 @@ use fil_actor_datacap_state as datacap; use schemars::JsonSchema; use serde::{Deserialize, Serialize}; -// Balance Params #[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, JsonSchema)] #[serde(transparent)] pub struct DatacapBalanceParamsLotusJson { @@ -46,7 +45,6 @@ macro_rules! impl_datacap_balance_params_lotus_json { impl_datacap_balance_params_lotus_json!(v11, v12, v13, v14, v15, v16); -// Constructor Params #[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, JsonSchema)] #[serde(transparent)] pub struct DatacapConstructorParamsLotusJson { @@ -84,7 +82,6 @@ macro_rules! impl_datacap_constructor_params_lotus_json { impl_datacap_constructor_params_lotus_json!(v11, v12, v13, v14, v15, v16); -// Destroy Params #[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, JsonSchema)] #[serde(rename_all = "PascalCase")] pub struct DatacapDestroyParamsLotusJson { @@ -135,7 +132,6 @@ macro_rules! impl_datacap_destroy_params_lotus_json { impl_datacap_destroy_params_lotus_json!(v9, v10, v11, v12, v13, v14, v15, v16); -// Mint Params #[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, JsonSchema)] #[serde(rename_all = "PascalCase")] pub struct DatacapMintParamsLotusJson { From 95e79267a75dfc12cd9c17de6a849223ed9d3615 Mon Sep 17 00:00:00 2001 From: Shashank Date: Mon, 11 Aug 2025 17:36:53 +0530 Subject: [PATCH 09/14] Add more support --- .../actor_states/methods/datacap_methods.rs | 356 ++++++++++++++++++ src/rpc/registry/actors/datacap.rs | 41 +- .../subcommands/api_cmd/api_compare_tests.rs | 94 +++++ 3 files changed, 490 insertions(+), 1 deletion(-) diff --git a/src/lotus_json/actor_states/methods/datacap_methods.rs b/src/lotus_json/actor_states/methods/datacap_methods.rs index eeb301c30621..2f6c17f1741f 100644 --- a/src/lotus_json/actor_states/methods/datacap_methods.rs +++ b/src/lotus_json/actor_states/methods/datacap_methods.rs @@ -5,6 +5,11 @@ use crate::lotus_json::{HasLotusJson, LotusJson}; use crate::shim::address::Address; use crate::shim::econ::TokenAmount; use fil_actor_datacap_state as datacap; +use fil_actors_shared::frc46_token::token::types::{ + BurnFromParams, BurnParams, DecreaseAllowanceParams, GetAllowanceParams, + IncreaseAllowanceParams, RevokeAllowanceParams, TransferFromParams, TransferParams, +}; +use fvm_ipld_encoding::RawBytes; use schemars::JsonSchema; use serde::{Deserialize, Serialize}; @@ -191,3 +196,354 @@ macro_rules! impl_datacap_mint_params_lotus_json { } impl_datacap_mint_params_lotus_json!(v9, v10, v11, v12, v13, v14, v15, v16); + +#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, JsonSchema)] +#[serde(rename_all = "PascalCase")] +pub struct TransferParamsLotusJson { + #[schemars(with = "LotusJson
")] + #[serde(with = "crate::lotus_json")] + pub to: Address, + #[schemars(with = "LotusJson")] + #[serde(with = "crate::lotus_json")] + pub amount: TokenAmount, + #[schemars(with = "LotusJson")] + #[serde(with = "crate::lotus_json")] + pub operator_data: RawBytes, +} + +impl HasLotusJson for TransferParams { + type LotusJson = TransferParamsLotusJson; + + #[cfg(test)] + fn snapshots() -> Vec<(serde_json::Value, Self)> { + vec![( + serde_json::json!({ + "to": "f01234", + "amount": "1000000000000000000", + "operator_data": "dGVzdCBkYXRh" + }), + TransferParams { + to: Address::new_id(1234).into(), + amount: TokenAmount::from_atto(1_000_000_000_000_000_000_i64).into(), + operator_data: RawBytes::new(b"test data".to_vec()), + }, + )] + } + + fn into_lotus_json(self) -> Self::LotusJson { + TransferParamsLotusJson { + to: self.to.into(), + amount: self.amount.into(), + operator_data: self.operator_data, + } + } + + fn from_lotus_json(lotus_json: Self::LotusJson) -> Self { + TransferParams { + to: lotus_json.to.into(), + amount: lotus_json.amount.into(), + operator_data: lotus_json.operator_data, + } + } +} + +#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, JsonSchema)] +#[serde(rename_all = "PascalCase")] +pub struct TransferFromParamsLotusJson { + #[schemars(with = "LotusJson
")] + #[serde(with = "crate::lotus_json")] + pub from: Address, + #[schemars(with = "LotusJson
")] + #[serde(with = "crate::lotus_json")] + pub to: Address, + #[schemars(with = "LotusJson")] + #[serde(with = "crate::lotus_json")] + pub amount: TokenAmount, + #[schemars(with = "LotusJson")] + #[serde(with = "crate::lotus_json")] + pub operator_data: RawBytes, +} + +impl HasLotusJson for TransferFromParams { + type LotusJson = TransferFromParamsLotusJson; + + #[cfg(test)] + fn snapshots() -> Vec<(serde_json::Value, Self)> { + vec![( + serde_json::json!({ + "from": "f01234", + "to": "f01235", + "amount": "1000000000000000000", + "operator_data": "dGVzdCBkYXRh" + }), + TransferFromParams { + from: Address::new_id(1234).into(), + to: Address::new_id(1235).into(), + amount: TokenAmount::from_atto(1_000_000_000_000_000_000_i64).into(), + operator_data: RawBytes::new(b"test data".to_vec()), + }, + )] + } + + fn into_lotus_json(self) -> Self::LotusJson { + TransferFromParamsLotusJson { + from: self.from.into(), + to: self.to.into(), + amount: self.amount.into(), + operator_data: self.operator_data, + } + } + + fn from_lotus_json(lotus_json: Self::LotusJson) -> Self { + TransferFromParams { + from: lotus_json.from.into(), + to: lotus_json.to.into(), + amount: lotus_json.amount.into(), + operator_data: lotus_json.operator_data, + } + } +} + +#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, JsonSchema)] +#[serde(rename_all = "PascalCase")] +pub struct IncreaseAllowanceParamsLotusJson { + #[schemars(with = "LotusJson
")] + #[serde(with = "crate::lotus_json")] + pub operator: Address, + #[schemars(with = "LotusJson")] + #[serde(with = "crate::lotus_json")] + pub increase: TokenAmount, +} + +impl HasLotusJson for IncreaseAllowanceParams { + type LotusJson = IncreaseAllowanceParamsLotusJson; + + #[cfg(test)] + fn snapshots() -> Vec<(serde_json::Value, Self)> { + vec![( + serde_json::json!({ + "operator": "f01234", + "increase": "1000000000000000000" + }), + IncreaseAllowanceParams { + operator: Address::new_id(1234).into(), + increase: TokenAmount::from_atto(1_000_000_000_000_000_000_i64).into(), + }, + )] + } + + fn into_lotus_json(self) -> Self::LotusJson { + IncreaseAllowanceParamsLotusJson { + operator: self.operator.into(), + increase: self.increase.into(), + } + } + + fn from_lotus_json(lotus_json: Self::LotusJson) -> Self { + IncreaseAllowanceParams { + operator: lotus_json.operator.into(), + increase: lotus_json.increase.into(), + } + } +} + +#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, JsonSchema)] +#[serde(rename_all = "PascalCase")] +pub struct DecreaseAllowanceParamsLotusJson { + #[schemars(with = "LotusJson
")] + #[serde(with = "crate::lotus_json")] + pub operator: Address, + #[schemars(with = "LotusJson")] + #[serde(with = "crate::lotus_json")] + pub decrease: TokenAmount, +} + +impl HasLotusJson for DecreaseAllowanceParams { + type LotusJson = DecreaseAllowanceParamsLotusJson; + + #[cfg(test)] + fn snapshots() -> Vec<(serde_json::Value, Self)> { + vec![( + serde_json::json!({ + "operator": "f01234", + "decrease": "1000000000000000000" + }), + DecreaseAllowanceParams { + operator: Address::new_id(1234).into(), + decrease: TokenAmount::from_atto(1_000_000_000_000_000_000_i64).into(), + }, + )] + } + + fn into_lotus_json(self) -> Self::LotusJson { + DecreaseAllowanceParamsLotusJson { + operator: self.operator.into(), + decrease: self.decrease.into(), + } + } + + fn from_lotus_json(lotus_json: Self::LotusJson) -> Self { + DecreaseAllowanceParams { + operator: lotus_json.operator.into(), + decrease: lotus_json.decrease.into(), + } + } +} + +#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, JsonSchema)] +#[serde(rename_all = "PascalCase")] +pub struct RevokeAllowanceParamsLotusJson { + #[schemars(with = "LotusJson
")] + #[serde(with = "crate::lotus_json")] + pub operator: Address, +} + +impl HasLotusJson for RevokeAllowanceParams { + type LotusJson = RevokeAllowanceParamsLotusJson; + + #[cfg(test)] + fn snapshots() -> Vec<(serde_json::Value, Self)> { + vec![( + serde_json::json!({ + "operator": "f01234" + }), + RevokeAllowanceParams { + operator: Address::new_id(1234).into(), + }, + )] + } + + fn into_lotus_json(self) -> Self::LotusJson { + RevokeAllowanceParamsLotusJson { + operator: self.operator.into(), + } + } + + fn from_lotus_json(lotus_json: Self::LotusJson) -> Self { + RevokeAllowanceParams { + operator: lotus_json.operator.into(), + } + } +} + +#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, JsonSchema)] +#[serde(rename_all = "PascalCase")] +pub struct BurnParamsLotusJson { + #[schemars(with = "LotusJson")] + #[serde(with = "crate::lotus_json")] + pub amount: TokenAmount, +} + +impl HasLotusJson for BurnParams { + type LotusJson = BurnParamsLotusJson; + + #[cfg(test)] + fn snapshots() -> Vec<(serde_json::Value, Self)> { + vec![( + serde_json::json!({ + "amount": "1000000000000000000" + }), + BurnParams { + amount: TokenAmount::from_atto(1_000_000_000_000_000_000_i64).into(), + }, + )] + } + + fn into_lotus_json(self) -> Self::LotusJson { + BurnParamsLotusJson { + amount: self.amount.into(), + } + } + + fn from_lotus_json(lotus_json: Self::LotusJson) -> Self { + BurnParams { + amount: lotus_json.amount.into(), + } + } +} + +#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, JsonSchema)] +#[serde(rename_all = "PascalCase")] +pub struct BurnFromParamsLotusJson { + #[schemars(with = "LotusJson
")] + #[serde(with = "crate::lotus_json")] + pub owner: Address, + #[schemars(with = "LotusJson")] + #[serde(with = "crate::lotus_json")] + pub amount: TokenAmount, +} + +impl HasLotusJson for BurnFromParams { + type LotusJson = BurnFromParamsLotusJson; + + #[cfg(test)] + fn snapshots() -> Vec<(serde_json::Value, Self)> { + vec![( + serde_json::json!({ + "owner": "f01234", + "amount": "1000000000000000000" + }), + BurnFromParams { + owner: Address::new_id(1234).into(), + amount: TokenAmount::from_atto(1_000_000_000_000_000_000_i64).into(), + }, + )] + } + + fn into_lotus_json(self) -> Self::LotusJson { + BurnFromParamsLotusJson { + owner: self.owner.into(), + amount: self.amount.into(), + } + } + + fn from_lotus_json(lotus_json: Self::LotusJson) -> Self { + BurnFromParams { + owner: lotus_json.owner.into(), + amount: lotus_json.amount.into(), + } + } +} + +#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, JsonSchema)] +#[serde(rename_all = "PascalCase")] +pub struct GetAllowanceParamsLotusJson { + #[schemars(with = "LotusJson
")] + #[serde(with = "crate::lotus_json")] + pub owner: Address, + #[schemars(with = "LotusJson
")] + #[serde(with = "crate::lotus_json")] + pub operator: Address, +} + +impl HasLotusJson for GetAllowanceParams { + type LotusJson = GetAllowanceParamsLotusJson; + + #[cfg(test)] + fn snapshots() -> Vec<(serde_json::Value, Self)> { + vec![( + serde_json::json!({ + "owner": "f01234", + "operator": "f01235" + }), + GetAllowanceParams { + owner: Address::new_id(1234).into(), + operator: Address::new_id(1235).into(), + }, + )] + } + + fn into_lotus_json(self) -> Self::LotusJson { + GetAllowanceParamsLotusJson { + owner: self.owner.into(), + operator: self.operator.into(), + } + } + + fn from_lotus_json(lotus_json: Self::LotusJson) -> Self { + GetAllowanceParams { + owner: lotus_json.owner.into(), + operator: lotus_json.operator.into(), + } + } +} diff --git a/src/rpc/registry/actors/datacap.rs b/src/rpc/registry/actors/datacap.rs index aa85e63a5ccd..c947d1a16d9a 100644 --- a/src/rpc/registry/actors/datacap.rs +++ b/src/rpc/registry/actors/datacap.rs @@ -9,10 +9,25 @@ use cid::Cid; macro_rules! register_datacap_v9 { ($registry:expr, $code_cid:expr) => {{ use fil_actor_datacap_state::v9::{DestroyParams, Method, MintParams}; + use fil_actors_shared::frc46_token::token::types::{ + BurnFromParams, BurnParams, DecreaseAllowanceParams, GetAllowanceParams, + IncreaseAllowanceParams, RevokeAllowanceParams, TransferFromParams, TransferParams, + }; register_actor_methods!( $registry, $code_cid, - [(Method::Mint, MintParams), (Method::Destroy, DestroyParams),] + [ + (Method::Mint, MintParams), + (Method::Destroy, DestroyParams), + (Method::Transfer, TransferParams), + (Method::TransferFrom, TransferFromParams), + (Method::IncreaseAllowance, IncreaseAllowanceParams), + (Method::DecreaseAllowance, DecreaseAllowanceParams), + (Method::RevokeAllowance, RevokeAllowanceParams), + (Method::Burn, BurnParams), + (Method::BurnFrom, BurnFromParams), + (Method::Allowance, GetAllowanceParams), + ] ); register_actor_methods!( @@ -30,12 +45,24 @@ macro_rules! register_datacap_v9 { macro_rules! register_datacap_v10 { ($registry:expr, $code_cid:expr) => {{ use fil_actor_datacap_state::v10::{DestroyParams, Method, MintParams}; + use fil_actors_shared::frc46_token::token::types::{ + BurnFromParams, BurnParams, DecreaseAllowanceParams, GetAllowanceParams, + IncreaseAllowanceParams, RevokeAllowanceParams, TransferFromParams, TransferParams, + }; register_actor_methods!( $registry, $code_cid, [ (Method::MintExported, MintParams), (Method::DestroyExported, DestroyParams), + (Method::TransferExported, TransferParams), + (Method::TransferFromExported, TransferFromParams), + (Method::IncreaseAllowanceExported, IncreaseAllowanceParams), + (Method::DecreaseAllowanceExported, DecreaseAllowanceParams), + (Method::RevokeAllowanceExported, RevokeAllowanceParams), + (Method::BurnExported, BurnParams), + (Method::BurnFromExported, BurnFromParams), + (Method::AllowanceExported, GetAllowanceParams), ] ); @@ -54,6 +81,10 @@ macro_rules! register_datacap_v10 { macro_rules! register_datacap_version { ($registry:expr, $code_cid:expr, $state_version:path) => {{ + use fil_actors_shared::frc46_token::token::types::{ + BurnFromParams, BurnParams, DecreaseAllowanceParams, GetAllowanceParams, + IncreaseAllowanceParams, RevokeAllowanceParams, TransferFromParams, TransferParams, + }; use $state_version::{BalanceParams, ConstructorParams, DestroyParams, Method, MintParams}; register_actor_methods!( $registry, @@ -63,6 +94,14 @@ macro_rules! register_datacap_version { (Method::MintExported, MintParams), (Method::DestroyExported, DestroyParams), (Method::BalanceExported, BalanceParams), + (Method::TransferExported, TransferParams), + (Method::TransferFromExported, TransferFromParams), + (Method::IncreaseAllowanceExported, IncreaseAllowanceParams), + (Method::DecreaseAllowanceExported, DecreaseAllowanceParams), + (Method::RevokeAllowanceExported, RevokeAllowanceParams), + (Method::BurnExported, BurnParams), + (Method::BurnFromExported, BurnFromParams), + (Method::AllowanceExported, GetAllowanceParams), ] ); diff --git a/src/tool/subcommands/api_cmd/api_compare_tests.rs b/src/tool/subcommands/api_cmd/api_compare_tests.rs index 21e28d9111ad..0b786f4258f3 100644 --- a/src/tool/subcommands/api_cmd/api_compare_tests.rs +++ b/src/tool/subcommands/api_cmd/api_compare_tests.rs @@ -1869,6 +1869,52 @@ fn state_decode_params_api_tests(tipset: &Tipset) -> anyhow::Result address: Address::new_id(3005).into(), }; + let datacap_transfer_params = fil_actors_shared::frc46_token::token::types::TransferParams { + to: Address::new_id(3006).into(), + amount: TokenAmount::default().into(), + operator_data: fvm_ipld_encoding::RawBytes::new(b"transfer test data".to_vec()), + }; + + let datacap_transfer_from_params = + fil_actors_shared::frc46_token::token::types::TransferFromParams { + from: Address::new_id(3007).into(), + to: Address::new_id(3008).into(), + amount: TokenAmount::default().into(), + operator_data: fvm_ipld_encoding::RawBytes::new(b"transfer_from test data".to_vec()), + }; + + let datacap_increase_allowance_params = + fil_actors_shared::frc46_token::token::types::IncreaseAllowanceParams { + operator: Address::new_id(3009).into(), + increase: TokenAmount::default().into(), + }; + + let datacap_decrease_allowance_params = + fil_actors_shared::frc46_token::token::types::DecreaseAllowanceParams { + operator: Address::new_id(3010).into(), + decrease: TokenAmount::default().into(), + }; + + let datacap_revoke_allowance_params = + fil_actors_shared::frc46_token::token::types::RevokeAllowanceParams { + operator: Address::new_id(3011).into(), + }; + + let datacap_burn_params = fil_actors_shared::frc46_token::token::types::BurnParams { + amount: TokenAmount::default().into(), + }; + + let datacap_burn_from_params = fil_actors_shared::frc46_token::token::types::BurnFromParams { + owner: Address::new_id(3012).into(), + amount: TokenAmount::default().into(), + }; + + let datacap_get_allowance_params = + fil_actors_shared::frc46_token::token::types::GetAllowanceParams { + owner: Address::new_id(3013).into(), + operator: Address::new_id(3014).into(), + }; + let power_create_miner_params = fil_actor_power_state::v16::CreateMinerParams { owner: Address::new_id(1000).into(), worker: Address::new_id(1001).into(), @@ -2055,6 +2101,54 @@ fn state_decode_params_api_tests(tipset: &Tipset) -> anyhow::Result vec![], tipset.key().into(), ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::DATACAP_TOKEN_ACTOR, + fil_actor_datacap_state::v16::Method::TransferExported as u64, + to_vec(&datacap_transfer_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::DATACAP_TOKEN_ACTOR, + fil_actor_datacap_state::v16::Method::TransferFromExported as u64, + to_vec(&datacap_transfer_from_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::DATACAP_TOKEN_ACTOR, + fil_actor_datacap_state::v16::Method::IncreaseAllowanceExported as u64, + to_vec(&datacap_increase_allowance_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::DATACAP_TOKEN_ACTOR, + fil_actor_datacap_state::v16::Method::DecreaseAllowanceExported as u64, + to_vec(&datacap_decrease_allowance_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::DATACAP_TOKEN_ACTOR, + fil_actor_datacap_state::v16::Method::RevokeAllowanceExported as u64, + to_vec(&datacap_revoke_allowance_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::DATACAP_TOKEN_ACTOR, + fil_actor_datacap_state::v16::Method::BurnExported as u64, + to_vec(&datacap_burn_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::DATACAP_TOKEN_ACTOR, + fil_actor_datacap_state::v16::Method::BurnFromExported as u64, + to_vec(&datacap_burn_from_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::DATACAP_TOKEN_ACTOR, + fil_actor_datacap_state::v16::Method::AllowanceExported as u64, + to_vec(&datacap_get_allowance_params)?, + tipset.key().into(), + ))?), RpcTest::identity(StateDecodeParams::request(( Address::REWARD_ACTOR, fil_actor_reward_state::v16::Method::Constructor as u64, From ea9a640117c6515cea1ea20fc3442968e01269ce Mon Sep 17 00:00:00 2001 From: Shashank Date: Mon, 11 Aug 2025 18:11:30 +0530 Subject: [PATCH 10/14] Add more test snapshots --- src/tool/subcommands/api_cmd/test_snapshots.txt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/tool/subcommands/api_cmd/test_snapshots.txt b/src/tool/subcommands/api_cmd/test_snapshots.txt index 893f299f1fa3..bb51a01f5fcc 100644 --- a/src/tool/subcommands/api_cmd/test_snapshots.txt +++ b/src/tool/subcommands/api_cmd/test_snapshots.txt @@ -134,14 +134,22 @@ filecoin_statedecodeparams_1749826976836194.rpcsnap.json.zst filecoin_statedecodeparams_1749826976835026.rpcsnap.json.zst filecoin_statedecodeparams_1749826976835457.rpcsnap.json.zst filecoin_statedecodeparams_1750858921185411.rpcsnap.json.zst +filecoin_datacap_allowance_statedecodeparams_1754915081822379.rpcsnap.json.zst filecoin_datacap_balance_statedecodeparams_1754907971558328.rpcsnap.json.zst +filecoin_datacap_burn_statedecodeparams_1754915081822140.rpcsnap.json.zst +filecoin_datacap_burnfrom_statedecodeparams_1754915081822428.rpcsnap.json.zst filecoin_datacap_constructor_statedecodeparams_1754907971554508.rpcsnap.json.zst +filecoin_datacap_decreaseallowance_statedecodeparams_1754915081822632.rpcsnap.json.zst filecoin_datacap_destroy_statedecodeparams_1754907971558376.rpcsnap.json.zst filecoin_datacap_granularity_statedecodeparams_1754907971554148.rpcsnap.json.zst +filecoin_datacap_increaseallowance_statedecodeparams_1754915081822588.rpcsnap.json.zst filecoin_datacap_mind_statedecodeparams_1754907971554434.rpcsnap.json.zst filecoin_datacap_name_statedecodeparams_1754907971558192.rpcsnap.json.zst +filecoin_datacap_revokeallowance_statedecodeparams_1754915081822483.rpcsnap.json.zst filecoin_datacap_symbol_statedecodeparams_1754907971554570.rpcsnap.json.zst filecoin_datacap_totalsupply_statedecodeparams_1754907971558270.rpcsnap.json.zst +filecoin_datacap_transfer_statedecodeparams_1754915081822541.rpcsnap.json.zst +filecoin_datacap_transferfrom_statedecodeparams_1754915081822316.rpcsnap.json.zst filecoin_statedecodeparams_1754059748144675.rpcsnap.json.zst filecoin_statedecodeparams_1754059748147929.rpcsnap.json.zst filecoin_statedecodeparams_1754059748148210.rpcsnap.json.zst From c0b48901cb5e4d14fdb719edf90786520bc2f820 Mon Sep 17 00:00:00 2001 From: Shashank Date: Mon, 11 Aug 2025 19:25:23 +0530 Subject: [PATCH 11/14] fix typo --- src/tool/subcommands/api_cmd/test_snapshots.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tool/subcommands/api_cmd/test_snapshots.txt b/src/tool/subcommands/api_cmd/test_snapshots.txt index bb51a01f5fcc..1f8120b9b01d 100644 --- a/src/tool/subcommands/api_cmd/test_snapshots.txt +++ b/src/tool/subcommands/api_cmd/test_snapshots.txt @@ -143,7 +143,7 @@ filecoin_datacap_decreaseallowance_statedecodeparams_1754915081822632.rpcsnap.js filecoin_datacap_destroy_statedecodeparams_1754907971558376.rpcsnap.json.zst filecoin_datacap_granularity_statedecodeparams_1754907971554148.rpcsnap.json.zst filecoin_datacap_increaseallowance_statedecodeparams_1754915081822588.rpcsnap.json.zst -filecoin_datacap_mind_statedecodeparams_1754907971554434.rpcsnap.json.zst +filecoin_datacap_mint_statedecodeparams_1754907971554434.rpcsnap.json.zst filecoin_datacap_name_statedecodeparams_1754907971558192.rpcsnap.json.zst filecoin_datacap_revokeallowance_statedecodeparams_1754915081822483.rpcsnap.json.zst filecoin_datacap_symbol_statedecodeparams_1754907971554570.rpcsnap.json.zst From e5c0fce6897773afac371d2ba14b40838be8976f Mon Sep 17 00:00:00 2001 From: Shashank Date: Mon, 11 Aug 2025 19:28:01 +0530 Subject: [PATCH 12/14] Add datacap to test_supported_actor_methods_registered --- src/rpc/registry/methods_reg.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/rpc/registry/methods_reg.rs b/src/rpc/registry/methods_reg.rs index 6a2bd1410572..c8fc478514df 100644 --- a/src/rpc/registry/methods_reg.rs +++ b/src/rpc/registry/methods_reg.rs @@ -261,6 +261,7 @@ mod test { BuiltinActor::Account, BuiltinActor::Miner, BuiltinActor::EVM, + BuiltinActor::DataCap, ]; for actor_type in supported_actors { From a3ff7c4b15f5abeedd8d8fed53737f27bb72b0a6 Mon Sep 17 00:00:00 2001 From: Shashank Date: Wed, 13 Aug 2025 16:39:01 +0530 Subject: [PATCH 13/14] Add missing methods for v9 and v10 --- .../methods/{datacap_methods.rs => datacap_actor_params.rs} | 0 src/lotus_json/actor_states/methods/mod.rs | 2 +- src/rpc/registry/actors/datacap.rs | 5 +++++ 3 files changed, 6 insertions(+), 1 deletion(-) rename src/lotus_json/actor_states/methods/{datacap_methods.rs => datacap_actor_params.rs} (100%) diff --git a/src/lotus_json/actor_states/methods/datacap_methods.rs b/src/lotus_json/actor_states/methods/datacap_actor_params.rs similarity index 100% rename from src/lotus_json/actor_states/methods/datacap_methods.rs rename to src/lotus_json/actor_states/methods/datacap_actor_params.rs diff --git a/src/lotus_json/actor_states/methods/mod.rs b/src/lotus_json/actor_states/methods/mod.rs index 2d6a51461779..f475f0147628 100644 --- a/src/lotus_json/actor_states/methods/mod.rs +++ b/src/lotus_json/actor_states/methods/mod.rs @@ -3,7 +3,7 @@ use super::*; mod account_authenticate_params; mod account_constructor_params; -mod datacap_methods; +mod datacap_actor_params; mod evm_constructor_params; mod init_constructor_params; mod init_exec4_params; diff --git a/src/rpc/registry/actors/datacap.rs b/src/rpc/registry/actors/datacap.rs index c947d1a16d9a..df13780b9948 100644 --- a/src/rpc/registry/actors/datacap.rs +++ b/src/rpc/registry/actors/datacap.rs @@ -2,6 +2,7 @@ // SPDX-License-Identifier: Apache-2.0, MIT use crate::rpc::registry::methods_reg::{MethodRegistry, register_actor_methods}; +use crate::shim::address::Address; use crate::shim::message::MethodNum; use anyhow::Result; use cid::Cid; @@ -17,6 +18,8 @@ macro_rules! register_datacap_v9 { $registry, $code_cid, [ + (Method::Constructor, Address), + (Method::BalanceOf, Address), (Method::Mint, MintParams), (Method::Destroy, DestroyParams), (Method::Transfer, TransferParams), @@ -53,6 +56,8 @@ macro_rules! register_datacap_v10 { $registry, $code_cid, [ + (Method::Constructor, Address), + (Method::BalanceExported, Address), (Method::MintExported, MintParams), (Method::DestroyExported, DestroyParams), (Method::TransferExported, TransferParams), From 9616cce7760e9468f1a13d51b078aed513601131 Mon Sep 17 00:00:00 2001 From: Shashank Date: Wed, 13 Aug 2025 17:54:38 +0530 Subject: [PATCH 14/14] split datacap decode params test --- .../subcommands/api_cmd/api_compare_tests.rs | 332 +++++++++--------- 1 file changed, 171 insertions(+), 161 deletions(-) diff --git a/src/tool/subcommands/api_cmd/api_compare_tests.rs b/src/tool/subcommands/api_cmd/api_compare_tests.rs index 0b786f4258f3..542abb71e73f 100644 --- a/src/tool/subcommands/api_cmd/api_compare_tests.rs +++ b/src/tool/subcommands/api_cmd/api_compare_tests.rs @@ -1850,70 +1850,6 @@ fn state_decode_params_api_tests(tipset: &Tipset) -> anyhow::Result code_cid: Cid::default(), constructor_params: fvm_ipld_encoding::RawBytes::new(vec![0x12, 0x34, 0x56]), // dummy bytecode }; - let datacap_constructor_params = fil_actor_datacap_state::v16::ConstructorParams { - governor: Address::new_id(3000).into(), - }; - - let datacap_mint_params = fil_actor_datacap_state::v16::MintParams { - to: Address::new_id(3001).into(), - amount: TokenAmount::default().into(), - operators: vec![Address::new_id(3002).into(), Address::new_id(3003).into()], - }; - - let datacap_destroy_params = fil_actor_datacap_state::v16::DestroyParams { - owner: Address::new_id(3004).into(), - amount: TokenAmount::default().into(), - }; - - let datacap_balance_params = fil_actor_datacap_state::v16::BalanceParams { - address: Address::new_id(3005).into(), - }; - - let datacap_transfer_params = fil_actors_shared::frc46_token::token::types::TransferParams { - to: Address::new_id(3006).into(), - amount: TokenAmount::default().into(), - operator_data: fvm_ipld_encoding::RawBytes::new(b"transfer test data".to_vec()), - }; - - let datacap_transfer_from_params = - fil_actors_shared::frc46_token::token::types::TransferFromParams { - from: Address::new_id(3007).into(), - to: Address::new_id(3008).into(), - amount: TokenAmount::default().into(), - operator_data: fvm_ipld_encoding::RawBytes::new(b"transfer_from test data".to_vec()), - }; - - let datacap_increase_allowance_params = - fil_actors_shared::frc46_token::token::types::IncreaseAllowanceParams { - operator: Address::new_id(3009).into(), - increase: TokenAmount::default().into(), - }; - - let datacap_decrease_allowance_params = - fil_actors_shared::frc46_token::token::types::DecreaseAllowanceParams { - operator: Address::new_id(3010).into(), - decrease: TokenAmount::default().into(), - }; - - let datacap_revoke_allowance_params = - fil_actors_shared::frc46_token::token::types::RevokeAllowanceParams { - operator: Address::new_id(3011).into(), - }; - - let datacap_burn_params = fil_actors_shared::frc46_token::token::types::BurnParams { - amount: TokenAmount::default().into(), - }; - - let datacap_burn_from_params = fil_actors_shared::frc46_token::token::types::BurnFromParams { - owner: Address::new_id(3012).into(), - amount: TokenAmount::default().into(), - }; - - let datacap_get_allowance_params = - fil_actors_shared::frc46_token::token::types::GetAllowanceParams { - owner: Address::new_id(3013).into(), - operator: Address::new_id(3014).into(), - }; let power_create_miner_params = fil_actor_power_state::v16::CreateMinerParams { owner: Address::new_id(1000).into(), @@ -2004,7 +1940,7 @@ fn state_decode_params_api_tests(tipset: &Tipset) -> anyhow::Result amount: Default::default(), }; - let tests = vec![ + let mut tests = vec![ RpcTest::identity(StateDecodeParams::request(( MINER_ADDRESS, 1, @@ -2053,102 +1989,6 @@ fn state_decode_params_api_tests(tipset: &Tipset) -> anyhow::Result to_vec(&init_exec4_params)?, tipset.key().into(), ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::DATACAP_TOKEN_ACTOR, - fil_actor_datacap_state::v16::Method::Constructor as u64, - to_vec(&datacap_constructor_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::DATACAP_TOKEN_ACTOR, - fil_actor_datacap_state::v16::Method::MintExported as u64, - to_vec(&datacap_mint_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::DATACAP_TOKEN_ACTOR, - fil_actor_datacap_state::v16::Method::DestroyExported as u64, - to_vec(&datacap_destroy_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::DATACAP_TOKEN_ACTOR, - fil_actor_datacap_state::v16::Method::NameExported as u64, - vec![], - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::DATACAP_TOKEN_ACTOR, - fil_actor_datacap_state::v16::Method::SymbolExported as u64, - vec![], - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::DATACAP_TOKEN_ACTOR, - fil_actor_datacap_state::v16::Method::TotalSupplyExported as u64, - vec![], - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::DATACAP_TOKEN_ACTOR, - fil_actor_datacap_state::v16::Method::BalanceExported as u64, - to_vec(&datacap_balance_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::DATACAP_TOKEN_ACTOR, - fil_actor_datacap_state::v16::Method::GranularityExported as u64, - vec![], - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::DATACAP_TOKEN_ACTOR, - fil_actor_datacap_state::v16::Method::TransferExported as u64, - to_vec(&datacap_transfer_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::DATACAP_TOKEN_ACTOR, - fil_actor_datacap_state::v16::Method::TransferFromExported as u64, - to_vec(&datacap_transfer_from_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::DATACAP_TOKEN_ACTOR, - fil_actor_datacap_state::v16::Method::IncreaseAllowanceExported as u64, - to_vec(&datacap_increase_allowance_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::DATACAP_TOKEN_ACTOR, - fil_actor_datacap_state::v16::Method::DecreaseAllowanceExported as u64, - to_vec(&datacap_decrease_allowance_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::DATACAP_TOKEN_ACTOR, - fil_actor_datacap_state::v16::Method::RevokeAllowanceExported as u64, - to_vec(&datacap_revoke_allowance_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::DATACAP_TOKEN_ACTOR, - fil_actor_datacap_state::v16::Method::BurnExported as u64, - to_vec(&datacap_burn_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::DATACAP_TOKEN_ACTOR, - fil_actor_datacap_state::v16::Method::BurnFromExported as u64, - to_vec(&datacap_burn_from_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::DATACAP_TOKEN_ACTOR, - fil_actor_datacap_state::v16::Method::AllowanceExported as u64, - to_vec(&datacap_get_allowance_params)?, - tipset.key().into(), - ))?), RpcTest::identity(StateDecodeParams::request(( Address::REWARD_ACTOR, fil_actor_reward_state::v16::Method::Constructor as u64, @@ -2327,6 +2167,176 @@ fn state_decode_params_api_tests(tipset: &Tipset) -> anyhow::Result ))?), ]; + tests.extend(datacap_actor_state_decode_params_tests(tipset)?); + + Ok(tests) +} + +fn datacap_actor_state_decode_params_tests(tipset: &Tipset) -> anyhow::Result> { + let datacap_constructor_params = fil_actor_datacap_state::v16::ConstructorParams { + governor: Address::new_id(3000).into(), + }; + + let datacap_mint_params = fil_actor_datacap_state::v16::MintParams { + to: Address::new_id(3001).into(), + amount: TokenAmount::default().into(), + operators: vec![Address::new_id(3002).into(), Address::new_id(3003).into()], + }; + + let datacap_destroy_params = fil_actor_datacap_state::v16::DestroyParams { + owner: Address::new_id(3004).into(), + amount: TokenAmount::default().into(), + }; + + let datacap_balance_params = fil_actor_datacap_state::v16::BalanceParams { + address: Address::new_id(3005).into(), + }; + + let datacap_transfer_params = fil_actors_shared::frc46_token::token::types::TransferParams { + to: Address::new_id(3006).into(), + amount: TokenAmount::default().into(), + operator_data: fvm_ipld_encoding::RawBytes::new(b"transfer test data".to_vec()), + }; + + let datacap_transfer_from_params = + fil_actors_shared::frc46_token::token::types::TransferFromParams { + from: Address::new_id(3007).into(), + to: Address::new_id(3008).into(), + amount: TokenAmount::default().into(), + operator_data: fvm_ipld_encoding::RawBytes::new(b"transfer_from test data".to_vec()), + }; + + let datacap_increase_allowance_params = + fil_actors_shared::frc46_token::token::types::IncreaseAllowanceParams { + operator: Address::new_id(3009).into(), + increase: TokenAmount::default().into(), + }; + + let datacap_decrease_allowance_params = + fil_actors_shared::frc46_token::token::types::DecreaseAllowanceParams { + operator: Address::new_id(3010).into(), + decrease: TokenAmount::default().into(), + }; + + let datacap_revoke_allowance_params = + fil_actors_shared::frc46_token::token::types::RevokeAllowanceParams { + operator: Address::new_id(3011).into(), + }; + + let datacap_burn_params = fil_actors_shared::frc46_token::token::types::BurnParams { + amount: TokenAmount::default().into(), + }; + + let datacap_burn_from_params = fil_actors_shared::frc46_token::token::types::BurnFromParams { + owner: Address::new_id(3012).into(), + amount: TokenAmount::default().into(), + }; + + let datacap_get_allowance_params = + fil_actors_shared::frc46_token::token::types::GetAllowanceParams { + owner: Address::new_id(3013).into(), + operator: Address::new_id(3014).into(), + }; + + let tests = vec![ + RpcTest::identity(StateDecodeParams::request(( + Address::DATACAP_TOKEN_ACTOR, + fil_actor_datacap_state::v16::Method::Constructor as u64, + to_vec(&datacap_constructor_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::DATACAP_TOKEN_ACTOR, + fil_actor_datacap_state::v16::Method::MintExported as u64, + to_vec(&datacap_mint_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::DATACAP_TOKEN_ACTOR, + fil_actor_datacap_state::v16::Method::DestroyExported as u64, + to_vec(&datacap_destroy_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::DATACAP_TOKEN_ACTOR, + fil_actor_datacap_state::v16::Method::NameExported as u64, + vec![], + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::DATACAP_TOKEN_ACTOR, + fil_actor_datacap_state::v16::Method::SymbolExported as u64, + vec![], + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::DATACAP_TOKEN_ACTOR, + fil_actor_datacap_state::v16::Method::TotalSupplyExported as u64, + vec![], + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::DATACAP_TOKEN_ACTOR, + fil_actor_datacap_state::v16::Method::BalanceExported as u64, + to_vec(&datacap_balance_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::DATACAP_TOKEN_ACTOR, + fil_actor_datacap_state::v16::Method::GranularityExported as u64, + vec![], + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::DATACAP_TOKEN_ACTOR, + fil_actor_datacap_state::v16::Method::TransferExported as u64, + to_vec(&datacap_transfer_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::DATACAP_TOKEN_ACTOR, + fil_actor_datacap_state::v16::Method::TransferFromExported as u64, + to_vec(&datacap_transfer_from_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::DATACAP_TOKEN_ACTOR, + fil_actor_datacap_state::v16::Method::IncreaseAllowanceExported as u64, + to_vec(&datacap_increase_allowance_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::DATACAP_TOKEN_ACTOR, + fil_actor_datacap_state::v16::Method::DecreaseAllowanceExported as u64, + to_vec(&datacap_decrease_allowance_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::DATACAP_TOKEN_ACTOR, + fil_actor_datacap_state::v16::Method::RevokeAllowanceExported as u64, + to_vec(&datacap_revoke_allowance_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::DATACAP_TOKEN_ACTOR, + fil_actor_datacap_state::v16::Method::BurnExported as u64, + to_vec(&datacap_burn_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::DATACAP_TOKEN_ACTOR, + fil_actor_datacap_state::v16::Method::BurnFromExported as u64, + to_vec(&datacap_burn_from_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::DATACAP_TOKEN_ACTOR, + fil_actor_datacap_state::v16::Method::AllowanceExported as u64, + to_vec(&datacap_get_allowance_params)?, + tipset.key().into(), + ))?), + ]; + Ok(tests) }