diff --git a/CHANGELOG.md b/CHANGELOG.md index 9032eb6d7230..8b22a418ac41 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,6 +30,7 @@ ### Added - [#6057](https://github.com/ChainSafe/forest/issues/6057) Added `--no-progress-timeout` to `forest-cli f3 ready` subcommand to exit when F3 is stuck for the given timeout. +- [#6000](https://github.com/ChainSafe/forest/pull/6000) Add support for the `Filecoin.StateDecodeParams` API methods to enable decoding actors method params. ### Changed diff --git a/Cargo.toml b/Cargo.toml index a36b792aff4a..c13ff97da1d2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -67,22 +67,22 @@ educe = { version = "0.6.0", features = ["Debug"], default-features = false } enumflags2 = "0.7" ethereum-types = { version = "0.15", features = ["ethbloom"] } ez-jsonrpc-types = "0.5" -fil_actor_account_state = { version = "24" } -fil_actor_cron_state = { version = "24" } -fil_actor_datacap_state = { version = "24" } -fil_actor_eam_state = { version = "24" } -fil_actor_ethaccount_state = { version = "24" } -fil_actor_evm_state = { version = "24" } -fil_actor_init_state = { version = "24" } -fil_actor_market_state = { version = "24" } -fil_actor_miner_state = { version = "24" } -fil_actor_multisig_state = { version = "24" } -fil_actor_paych_state = { version = "24" } -fil_actor_power_state = { version = "24" } -fil_actor_reward_state = { version = "24" } -fil_actor_system_state = { version = "24" } -fil_actor_verifreg_state = { version = "24" } -fil_actors_shared = { version = "24", features = ["json"] } +fil_actor_account_state = { version = "24.1.2" } +fil_actor_cron_state = { version = "24.1.2" } +fil_actor_datacap_state = { version = "24.1.2" } +fil_actor_eam_state = { version = "24.1.2" } +fil_actor_ethaccount_state = { version = "24.1.2" } +fil_actor_evm_state = { version = "24.1.2" } +fil_actor_init_state = { version = "24.1.2" } +fil_actor_market_state = { version = "24.1.2" } +fil_actor_miner_state = { version = "24.1.2" } +fil_actor_multisig_state = { version = "24.1.2" } +fil_actor_paych_state = { version = "24.1.2" } +fil_actor_power_state = { version = "24.1.2" } +fil_actor_reward_state = { version = "24.1.2" } +fil_actor_system_state = { version = "24.1.2" } +fil_actor_verifreg_state = { version = "24.1.2" } +fil_actors_shared = { version = "24.1.2", features = ["json"] } flate2 = "1" flume = { workspace = true } fs_extra = "1" diff --git a/src/lotus_json/actor_states/methods/account_constructor_params.rs b/src/lotus_json/actor_states/methods/account_constructor_params.rs deleted file mode 100644 index 1bd244dad4dc..000000000000 --- a/src/lotus_json/actor_states/methods/account_constructor_params.rs +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2019-2025 ChainSafe Systems -// SPDX-License-Identifier: Apache-2.0, MIT -use super::*; -use crate::shim::address::Address; -use paste::paste; -use serde::{Deserialize, Serialize}; - -#[derive(Serialize, Deserialize, JsonSchema, Debug, Clone, PartialEq)] -#[serde(transparent)] -pub struct AccountConstructorParamsLotusJson { - #[schemars(with = "LotusJson
")] - #[serde(with = "crate::lotus_json")] - pub address: Address, -} - -macro_rules! impl_account_constructor_params { - ($type_suffix:path: $($version:literal),+) => { - $( - paste! { - impl HasLotusJson for fil_actor_account_state::[]::$type_suffix { - type LotusJson = AccountConstructorParamsLotusJson; - - #[cfg(test)] - fn snapshots() -> Vec<(serde_json::Value, Self)> { - vec![ - ( - json!("f01234"), - Self { - address: Address::new_id(1234).into(), - }, - ), - ] - } - - fn into_lotus_json(self) -> Self::LotusJson { - AccountConstructorParamsLotusJson { address: self.address.into() } - } - - fn from_lotus_json(lotus_json: Self::LotusJson) -> Self { - Self { address: lotus_json.address.into() } - } - } - } - )+ - }; -} - -// not added other versions because `fil_actor_account_state::types` -// is private for all of them -impl_account_constructor_params!(types::ConstructorParams: 15, 16); -impl_account_constructor_params!(ConstructorParams: 11, 12, 13, 14); diff --git a/src/lotus_json/actor_states/methods/init_constructor_params.rs b/src/lotus_json/actor_states/methods/init_constructor_params.rs deleted file mode 100644 index fae5c3c05c73..000000000000 --- a/src/lotus_json/actor_states/methods/init_constructor_params.rs +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2019-2025 ChainSafe Systems -// SPDX-License-Identifier: Apache-2.0, MIT - -use super::*; -use jsonrpsee::core::Serialize; -use paste::paste; -use schemars::JsonSchema; -use serde::Deserialize; -use std::fmt::Debug; - -#[derive(Serialize, Deserialize, JsonSchema, Debug, Clone, PartialEq)] -#[serde(rename_all = "PascalCase")] -pub struct InitConstructorParamsLotusJson { - pub network_name: String, -} - -macro_rules! impl_lotus_json_for_init_constructor_params { - ($($version:literal),+) => { - $( - paste! { - impl HasLotusJson for fil_actor_init_state::[]::ConstructorParams { - type LotusJson = InitConstructorParamsLotusJson; - - #[cfg(test)] - fn snapshots() -> Vec<(serde_json::Value, Self)> { - vec![ - ( - json!({ - "NetworkName": "calibnet", - }), - Self { - network_name: "calibnet".to_string(), - }, - ), - ] - } - - fn into_lotus_json(self) -> Self::LotusJson { - Self::LotusJson { - network_name: self.network_name, - } - } - - fn from_lotus_json(json: Self::LotusJson) -> Self { - Self { - network_name: json.network_name, - } - } - } - } - )+ - } -} - -impl_lotus_json_for_init_constructor_params!(8, 9, 10, 11, 12, 13, 14, 15, 16); diff --git a/src/lotus_json/actor_states/methods/init_exec4_params.rs b/src/lotus_json/actor_states/methods/init_exec4_params.rs deleted file mode 100644 index 0b9bffca8010..000000000000 --- a/src/lotus_json/actor_states/methods/init_exec4_params.rs +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2019-2025 ChainSafe Systems -// SPDX-License-Identifier: Apache-2.0, MIT - -use super::*; -use ::cid::Cid; -use fvm_ipld_encoding::RawBytes; -use jsonrpsee::core::Serialize; -use paste::paste; -use schemars::JsonSchema; -use serde::Deserialize; -use std::fmt::Debug; - -#[derive(Serialize, Deserialize, JsonSchema, Debug, Clone, PartialEq)] -#[serde(rename_all = "PascalCase")] -pub struct InitExec4ParamsLotusJson { - #[schemars(with = "LotusJson")] - #[serde(with = "crate::lotus_json")] - #[serde(rename = "CodeCID")] - pub code_cid: Cid, - - #[schemars(with = "LotusJson")] - #[serde(with = "crate::lotus_json")] - pub constructor_params: RawBytes, - - #[schemars(with = "LotusJson")] - #[serde(with = "crate::lotus_json")] - pub sub_address: RawBytes, -} - -macro_rules! impl_lotus_json_for_init_exec4_params { - ($($version:literal),+) => { - $( - paste! { - impl HasLotusJson for fil_actor_init_state::[]::Exec4Params { - type LotusJson = InitExec4ParamsLotusJson; - - #[cfg(test)] - fn snapshots() -> Vec<(serde_json::Value, Self)> { - vec![ - ( - json!({ - "CodeCid": { - "/": "baeaaaaa" - }, - "ConstructorParams": "ESIzRFU=", - "Subaddress": "ESIzRFU=", - }), - Self { - code_cid: Cid::default(), - constructor_params: RawBytes::new(hex::decode("1122334455").unwrap()), - subaddress: RawBytes::new(hex::decode("1122334455").unwrap()), - }, - ), - ] - } - - fn into_lotus_json(self) -> Self::LotusJson { - Self::LotusJson { - code_cid: self.code_cid, - constructor_params: self.constructor_params, - sub_address: self.subaddress, - } - } - - fn from_lotus_json(json: Self::LotusJson) -> Self { - Self { - code_cid: json.code_cid, - constructor_params: json.constructor_params, - subaddress: json.sub_address, - } - } - } - } - )+ - }; -} - -impl_lotus_json_for_init_exec4_params!(10, 11, 12, 13, 14, 15, 16); diff --git a/src/lotus_json/actor_states/methods/init_exec_params.rs b/src/lotus_json/actor_states/methods/init_exec_params.rs deleted file mode 100644 index 6820a72ec4d0..000000000000 --- a/src/lotus_json/actor_states/methods/init_exec_params.rs +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2019-2025 ChainSafe Systems -// SPDX-License-Identifier: Apache-2.0, MIT - -use super::*; -use ::cid::Cid; -use fvm_ipld_encoding::RawBytes; -use jsonrpsee::core::Serialize; -use paste::paste; -use schemars::JsonSchema; -use serde::Deserialize; -use std::fmt::Debug; - -#[derive(Serialize, Deserialize, JsonSchema, Debug, Clone, PartialEq)] -#[serde(rename_all = "PascalCase")] -pub struct InitExecParamsLotusJson { - #[schemars(with = "LotusJson")] - #[serde(with = "crate::lotus_json")] - #[serde(rename = "CodeCID")] - pub code_cid: Cid, - - #[schemars(with = "LotusJson")] - #[serde(with = "crate::lotus_json")] - pub constructor_params: RawBytes, -} - -macro_rules! impl_lotus_json_for_init_exec_params { - ($($version:literal),+) => { - $( - paste! { - impl HasLotusJson for fil_actor_init_state::[]::ExecParams { - type LotusJson = InitExecParamsLotusJson; - - #[cfg(test)] - fn snapshots() -> Vec<(serde_json::Value, Self)> { - vec![ - ( - json!({ - "CodeCid": { - "/": "baeaaaaa" - }, - "ConstructorParams": "ESIzRFU=", - }), - Self { - code_cid: Cid::default(), - constructor_params: RawBytes::new(hex::decode("1122334455").unwrap()), - }, - ), - ] - } - - fn into_lotus_json(self) -> Self::LotusJson { - Self::LotusJson { - code_cid: self.code_cid, - constructor_params: self.constructor_params, - } - } - - fn from_lotus_json(json: Self::LotusJson) -> Self { - Self { - code_cid: json.code_cid, - constructor_params: json.constructor_params, - } - } - } - } - )+ - }; -} - -impl_lotus_json_for_init_exec_params!(8, 9, 10, 11, 12, 13, 14, 15, 16); diff --git a/src/lotus_json/actor_states/methods/mod.rs b/src/lotus_json/actor_states/methods/mod.rs deleted file mode 100644 index ae64614e81ad..000000000000 --- a/src/lotus_json/actor_states/methods/mod.rs +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2019-2025 ChainSafe Systems -// SPDX-License-Identifier: Apache-2.0, MIT - -use super::*; -mod account_authenticate_params; -mod account_constructor_params; -mod cron_actor_params; -mod datacap_actor_params; -mod eam_params; -mod evm_actor_params; -mod init_constructor_params; -mod init_exec4_params; -mod init_exec_params; -mod market_actor_params; -mod miner_actor_params; -mod multisig_actor; -mod paych_params; -mod power_actor; -mod reward_methods; -pub mod verified_reg_actor; diff --git a/src/lotus_json/actors/mod.rs b/src/lotus_json/actors/mod.rs new file mode 100644 index 000000000000..77e47808441d --- /dev/null +++ b/src/lotus_json/actors/mod.rs @@ -0,0 +1,6 @@ +// Copyright 2019-2025 ChainSafe Systems +// SPDX-License-Identifier: Apache-2.0, MIT + +use super::*; +mod params; +mod states; diff --git a/src/lotus_json/actor_states/methods/account_authenticate_params.rs b/src/lotus_json/actors/params/account_params.rs similarity index 56% rename from src/lotus_json/actor_states/methods/account_authenticate_params.rs rename to src/lotus_json/actors/params/account_params.rs index e34accd2b63c..a0fbb2013c73 100644 --- a/src/lotus_json/actor_states/methods/account_authenticate_params.rs +++ b/src/lotus_json/actors/params/account_params.rs @@ -1,11 +1,21 @@ // Copyright 2019-2025 ChainSafe Systems // SPDX-License-Identifier: Apache-2.0, MIT + use super::*; +use crate::shim::address::Address; use jsonrpsee::core::Serialize; use paste::paste; use schemars::JsonSchema; use serde::Deserialize; +#[derive(Serialize, Deserialize, JsonSchema, Debug, Clone, PartialEq)] +#[serde(transparent)] +pub struct AccountConstructorParamsLotusJson { + #[schemars(with = "LotusJson
")] + #[serde(with = "crate::lotus_json")] + pub address: Address, +} + #[derive(Serialize, Deserialize, JsonSchema, Debug, Clone, PartialEq)] #[serde(rename_all = "PascalCase")] pub struct AuthenticateParamsLotusJson { @@ -59,6 +69,39 @@ macro_rules! impl_account_authenticate_params { }; } -// not added other versions because AuthenticateMessageParams is private for the rest of them -impl_account_authenticate_params!(types::AuthenticateMessageParams: 15, 16); -impl_account_authenticate_params!(AuthenticateMessageParams: 11, 12, 13, 14); +macro_rules! impl_account_constructor_params { + ($type_suffix:path: $($version:literal),+) => { + $( + paste! { + impl HasLotusJson for fil_actor_account_state::[]::$type_suffix { + type LotusJson = AccountConstructorParamsLotusJson; + + #[cfg(test)] + fn snapshots() -> Vec<(serde_json::Value, Self)> { + vec![ + ( + json!("f01234"), + Self { + address: Address::new_id(1234).into(), + }, + ), + ] + } + + fn into_lotus_json(self) -> Self::LotusJson { + AccountConstructorParamsLotusJson { address: self.address.into() } + } + + fn from_lotus_json(lotus_json: Self::LotusJson) -> Self { + Self { address: lotus_json.address.into() } + } + } + } + )+ + }; +} + +impl_account_constructor_params!(types::ConstructorParams: 15, 16, 17); +impl_account_constructor_params!(ConstructorParams: 11, 12, 13, 14); +impl_account_authenticate_params!(types::AuthenticateMessageParams: 15, 16, 17); +impl_account_authenticate_params!(AuthenticateMessageParams: 9, 10, 11, 12, 13, 14); diff --git a/src/lotus_json/actor_states/methods/cron_actor_params.rs b/src/lotus_json/actors/params/cron_params.rs similarity index 99% rename from src/lotus_json/actor_states/methods/cron_actor_params.rs rename to src/lotus_json/actors/params/cron_params.rs index 82849bb7d941..b97298c0ad1a 100644 --- a/src/lotus_json/actor_states/methods/cron_actor_params.rs +++ b/src/lotus_json/actors/params/cron_params.rs @@ -79,4 +79,4 @@ macro_rules! impl_lotus_json_for_cron_constructor_params { }; } -impl_lotus_json_for_cron_constructor_params!(8, 9, 10, 11, 12, 13, 14, 15, 16); +impl_lotus_json_for_cron_constructor_params!(8, 9, 10, 11, 12, 13, 14, 15, 16, 17); diff --git a/src/lotus_json/actor_states/methods/datacap_actor_params.rs b/src/lotus_json/actors/params/datacap_params.rs similarity index 99% rename from src/lotus_json/actor_states/methods/datacap_actor_params.rs rename to src/lotus_json/actors/params/datacap_params.rs index 2f6c17f1741f..cc9ad1a6109b 100644 --- a/src/lotus_json/actor_states/methods/datacap_actor_params.rs +++ b/src/lotus_json/actors/params/datacap_params.rs @@ -48,7 +48,7 @@ macro_rules! impl_datacap_balance_params_lotus_json { }; } -impl_datacap_balance_params_lotus_json!(v11, v12, v13, v14, v15, v16); +impl_datacap_balance_params_lotus_json!(v11, v12, v13, v14, v15, v16, v17); #[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, JsonSchema)] #[serde(transparent)] @@ -85,7 +85,7 @@ macro_rules! impl_datacap_constructor_params_lotus_json { }; } -impl_datacap_constructor_params_lotus_json!(v11, v12, v13, v14, v15, v16); +impl_datacap_constructor_params_lotus_json!(v11, v12, v13, v14, v15, v16, v17); #[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, JsonSchema)] #[serde(rename_all = "PascalCase")] @@ -135,7 +135,7 @@ macro_rules! impl_datacap_destroy_params_lotus_json { }; } -impl_datacap_destroy_params_lotus_json!(v9, v10, v11, v12, v13, v14, v15, v16); +impl_datacap_destroy_params_lotus_json!(v9, v10, v11, v12, v13, v14, v15, v16, v17); #[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, JsonSchema)] #[serde(rename_all = "PascalCase")] @@ -195,7 +195,7 @@ macro_rules! impl_datacap_mint_params_lotus_json { }; } -impl_datacap_mint_params_lotus_json!(v9, v10, v11, v12, v13, v14, v15, v16); +impl_datacap_mint_params_lotus_json!(v9, v10, v11, v12, v13, v14, v15, v16, v17); #[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, JsonSchema)] #[serde(rename_all = "PascalCase")] diff --git a/src/lotus_json/actor_states/methods/eam_params.rs b/src/lotus_json/actors/params/eam_params.rs similarity index 96% rename from src/lotus_json/actor_states/methods/eam_params.rs rename to src/lotus_json/actors/params/eam_params.rs index be92e48f108c..b9023da1fb97 100644 --- a/src/lotus_json/actor_states/methods/eam_params.rs +++ b/src/lotus_json/actors/params/eam_params.rs @@ -147,6 +147,6 @@ macro_rules! impl_eam_create_external_params { }; } -impl_eam_create_params!(10, 11, 12, 13, 14, 15, 16); -impl_eam_create2_params!(10, 11, 12, 13, 14, 15, 16); -impl_eam_create_external_params!(10, 11, 12, 13, 14, 15, 16); +impl_eam_create_params!(10, 11, 12, 13, 14, 15, 16, 17); +impl_eam_create2_params!(10, 11, 12, 13, 14, 15, 16, 17); +impl_eam_create_external_params!(10, 11, 12, 13, 14, 15, 16, 17); diff --git a/src/lotus_json/actor_states/methods/evm_actor_params.rs b/src/lotus_json/actors/params/evm_params.rs similarity index 98% rename from src/lotus_json/actor_states/methods/evm_actor_params.rs rename to src/lotus_json/actors/params/evm_params.rs index 8cde8409f13e..13b72bd0e40e 100644 --- a/src/lotus_json/actor_states/methods/evm_actor_params.rs +++ b/src/lotus_json/actors/params/evm_params.rs @@ -61,7 +61,7 @@ macro_rules! impl_evm_constructor_params { }; } -impl_evm_constructor_params!(10, 11, 12, 13, 14, 15, 16); +impl_evm_constructor_params!(10, 11, 12, 13, 14, 15, 16, 17); #[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, JsonSchema)] #[serde(rename_all = "PascalCase")] @@ -124,7 +124,7 @@ macro_rules! impl_evm_delegate_call_params_lotus_json { }; } -impl_evm_delegate_call_params_lotus_json!(10, 11, 12, 13, 14, 15, 16); +impl_evm_delegate_call_params_lotus_json!(10, 11, 12, 13, 14, 15, 16, 17); #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)] #[serde(rename_all = "PascalCase")] diff --git a/src/lotus_json/actors/params/init_params.rs b/src/lotus_json/actors/params/init_params.rs new file mode 100644 index 000000000000..a754fac3945f --- /dev/null +++ b/src/lotus_json/actors/params/init_params.rs @@ -0,0 +1,181 @@ +// Copyright 2019-2025 ChainSafe Systems +// SPDX-License-Identifier: Apache-2.0, MIT + +use super::*; +use ::cid::Cid; +use fvm_ipld_encoding::RawBytes; +use jsonrpsee::core::Serialize; +use paste::paste; +use schemars::JsonSchema; +use serde::Deserialize; +use std::fmt::Debug; + +#[derive(Serialize, Deserialize, JsonSchema, Debug, Clone, PartialEq)] +#[serde(rename_all = "PascalCase")] +pub struct InitConstructorParamsLotusJson { + pub network_name: String, +} + +#[derive(Serialize, Deserialize, JsonSchema, Debug, Clone, PartialEq)] +#[serde(rename_all = "PascalCase")] +pub struct InitExecParamsLotusJson { + #[schemars(with = "LotusJson")] + #[serde(with = "crate::lotus_json")] + #[serde(rename = "CodeCID")] + pub code_cid: Cid, + + #[schemars(with = "LotusJson")] + #[serde(with = "crate::lotus_json")] + pub constructor_params: RawBytes, +} + +#[derive(Serialize, Deserialize, JsonSchema, Debug, Clone, PartialEq)] +#[serde(rename_all = "PascalCase")] +pub struct InitExec4ParamsLotusJson { + #[schemars(with = "LotusJson")] + #[serde(with = "crate::lotus_json")] + #[serde(rename = "CodeCID")] + pub code_cid: Cid, + + #[schemars(with = "LotusJson")] + #[serde(with = "crate::lotus_json")] + pub constructor_params: RawBytes, + + #[schemars(with = "LotusJson")] + #[serde(with = "crate::lotus_json")] + pub sub_address: RawBytes, +} + +macro_rules! impl_lotus_json_for_init_constructor_params { + ($($version:literal),+) => { + $( + paste! { + impl HasLotusJson for fil_actor_init_state::[]::ConstructorParams { + type LotusJson = InitConstructorParamsLotusJson; + + #[cfg(test)] + fn snapshots() -> Vec<(serde_json::Value, Self)> { + vec![ + ( + json!({ + "NetworkName": "calibnet", + }), + Self { + network_name: "calibnet".to_string(), + }, + ), + ] + } + + fn into_lotus_json(self) -> Self::LotusJson { + Self::LotusJson { + network_name: self.network_name, + } + } + + fn from_lotus_json(json: Self::LotusJson) -> Self { + Self { + network_name: json.network_name, + } + } + } + } + )+ + } +} + +macro_rules! impl_lotus_json_for_init_exec_params { + ($($version:literal),+) => { + $( + paste! { + impl HasLotusJson for fil_actor_init_state::[]::ExecParams { + type LotusJson = InitExecParamsLotusJson; + + #[cfg(test)] + fn snapshots() -> Vec<(serde_json::Value, Self)> { + vec![ + ( + json!({ + "CodeCID": { + "/": "baeaaaaa" + }, + "ConstructorParams": "ESIzRFU=", + }), + Self { + code_cid: Cid::default(), + constructor_params: RawBytes::new(hex::decode("1122334455").unwrap()), + }, + ), + ] + } + + fn into_lotus_json(self) -> Self::LotusJson { + Self::LotusJson { + code_cid: self.code_cid, + constructor_params: self.constructor_params, + } + } + + fn from_lotus_json(json: Self::LotusJson) -> Self { + Self { + code_cid: json.code_cid, + constructor_params: json.constructor_params, + } + } + } + } + )+ + }; +} + +macro_rules! impl_lotus_json_for_init_exec4_params { + ($($version:literal),+) => { + $( + paste! { + impl HasLotusJson for fil_actor_init_state::[]::Exec4Params { + type LotusJson = InitExec4ParamsLotusJson; + + #[cfg(test)] + fn snapshots() -> Vec<(serde_json::Value, Self)> { + vec![ + ( + json!({ + "CodeCID": { + "/": "baeaaaaa" + }, + "ConstructorParams": "ESIzRFU=", + "SubAddress": "ESIzRFU=", + }), + Self { + code_cid: Cid::default(), + constructor_params: RawBytes::new(hex::decode("1122334455").unwrap()), + subaddress: RawBytes::new(hex::decode("1122334455").unwrap()), + }, + ), + ] + } + + fn into_lotus_json(self) -> Self::LotusJson { + Self::LotusJson { + code_cid: self.code_cid, + constructor_params: self.constructor_params, + sub_address: self.subaddress, + } + } + + fn from_lotus_json(json: Self::LotusJson) -> Self { + Self { + code_cid: json.code_cid, + constructor_params: json.constructor_params, + subaddress: json.sub_address, + } + } + } + } + )+ + }; +} + +impl_lotus_json_for_init_constructor_params!(8, 9, 10, 11, 12, 13, 14, 15, 16, 17); +impl_lotus_json_for_init_exec_params!(8, 9, 10, 11, 12, 13, 14, 15, 16, 17); +impl_lotus_json_for_init_exec4_params!(10, 11, 12, 13, 14, 15, 16, 17); diff --git a/src/lotus_json/actor_states/methods/market_actor_params.rs b/src/lotus_json/actors/params/market_params.rs similarity index 98% rename from src/lotus_json/actor_states/methods/market_actor_params.rs rename to src/lotus_json/actors/params/market_params.rs index b6311ae9e6db..ddd78cedab62 100644 --- a/src/lotus_json/actor_states/methods/market_actor_params.rs +++ b/src/lotus_json/actors/params/market_params.rs @@ -210,18 +210,18 @@ macro_rules! impl_lotus_json_for_deal_proposal { "ClientCollateral": "3000" }), // Create the corresponding object using from_lotus_json to ensure compatibility - Self::from_lotus_json(crate::lotus_json::actor_states::methods::market_actor_params::DealProposalLotusJson { + Self::from_lotus_json(DealProposalLotusJson { piece_cid: test_cid, piece_size: 1024u64.into(), verified_deal: false, - client: crate::shim::address::Address::new_id(1234).into(), - provider: crate::shim::address::Address::new_id(5678).into(), - label: crate::lotus_json::actor_states::methods::market_actor_params::LabelLotusJson::String("test".to_string()), + client: Address::new_id(1234).into(), + provider: Address::new_id(5678).into(), + label: LabelLotusJson::String("test".to_string()), start_epoch: 100, end_epoch: 200, - storage_price_per_epoch: crate::shim::econ::TokenAmount::from_atto(1000u64).into(), - provider_collateral: crate::shim::econ::TokenAmount::from_atto(2000u64).into(), - client_collateral: crate::shim::econ::TokenAmount::from_atto(3000u64).into(), + storage_price_per_epoch: TokenAmount::from_atto(1000u64).into(), + provider_collateral: TokenAmount::from_atto(2000u64).into(), + client_collateral: TokenAmount::from_atto(3000u64).into(), }) )] } @@ -350,13 +350,13 @@ macro_rules! impl_lotus_json_for_client_deal_proposal { }), // Create object using from_lotus_json to ensure compatibility Self::from_lotus_json($lotus_json_type { - proposal: crate::lotus_json::actor_states::methods::market_actor_params::DealProposalLotusJson { + proposal: DealProposalLotusJson { piece_cid: test_cid, piece_size: 1024u64.into(), verified_deal: false, client: crate::shim::address::Address::new_id(1234).into(), provider: crate::shim::address::Address::new_id(5678).into(), - label: crate::lotus_json::actor_states::methods::market_actor_params::LabelLotusJson::String("test".to_string()), + label: LabelLotusJson::String("test".to_string()), start_epoch: 100, end_epoch: 200, storage_price_per_epoch: crate::shim::econ::TokenAmount::from_atto(1000u64).into(), diff --git a/src/lotus_json/actor_states/methods/miner_actor_params.rs b/src/lotus_json/actors/params/miner_params.rs similarity index 99% rename from src/lotus_json/actor_states/methods/miner_actor_params.rs rename to src/lotus_json/actors/params/miner_params.rs index be20adc8aaf2..04e0882b521c 100644 --- a/src/lotus_json/actor_states/methods/miner_actor_params.rs +++ b/src/lotus_json/actors/params/miner_params.rs @@ -2518,7 +2518,7 @@ macro_rules! impl_lotus_json_for_miner_apply_reward_params { }; } -macro_rules! impl_lotus_json_for_miner_prove_commit_aggregate_params_v13_and_above { +macro_rules! impl_lotus_json_for_miner_prove_commit_aggregate_params_v9_to_v16 { ($($version:literal),+) => { $( paste! { @@ -3695,54 +3695,54 @@ macro_rules! impl_miner_internal_sector_setup_for_preseal_params { }; } -impl_lotus_json_for_miner_constructor_params!(8, 9, 10, 11, 12, 13, 14, 15, 16); -impl_lotus_json_for_miner_change_worker_param!(8, 9, 10, 11, 12, 13, 14, 15, 16); -impl_lotus_json_for_miner_change_owner_address_params!(11, 12, 13, 14, 15, 16); -impl_lotus_json_for_miner_extend_sector_expiration2_params!(9, 10, 11, 12, 13, 14, 15, 16); -impl_lotus_json_for_miner_change_beneficiary_params!(9, 10, 11, 12, 13, 14, 15, 16); -impl_lotus_json_for_miner_declare_faults_recovered_params!(8, 9, 10, 11, 12, 13, 14, 15, 16); -impl_lotus_json_for_miner_dispute_windowed_post_params!(8, 9, 10, 11, 12, 13, 14, 15, 16); -impl_lotus_json_for_recover_declaration_params_v9_and_above!(9, 10, 11, 12, 13, 14, 15, 16); -impl_lotus_json_for_miner_post_partition_v9_and_above!(9, 10, 11, 12, 13, 14, 15, 16); +impl_lotus_json_for_miner_constructor_params!(8, 9, 10, 11, 12, 13, 14, 15, 16, 17); +impl_lotus_json_for_miner_change_worker_param!(8, 9, 10, 11, 12, 13, 14, 15, 16, 17); +impl_lotus_json_for_miner_change_owner_address_params!(11, 12, 13, 14, 15, 16, 17); +impl_lotus_json_for_miner_extend_sector_expiration2_params!(9, 10, 11, 12, 13, 14, 15, 16, 17); +impl_lotus_json_for_miner_change_beneficiary_params!(9, 10, 11, 12, 13, 14, 15, 16, 17); +impl_lotus_json_for_miner_declare_faults_recovered_params!(8, 9, 10, 11, 12, 13, 14, 15, 16, 17); +impl_lotus_json_for_miner_dispute_windowed_post_params!(8, 9, 10, 11, 12, 13, 14, 15, 16, 17); +impl_lotus_json_for_recover_declaration_params_v9_and_above!(9, 10, 11, 12, 13, 14, 15, 16, 17); +impl_lotus_json_for_miner_post_partition_v9_and_above!(9, 10, 11, 12, 13, 14, 15, 16, 17); impl_lotus_json_for_miner_submit_windowed_post_params_v9_and_above!(fvm_shared2: 9); impl_lotus_json_for_miner_submit_windowed_post_params_v9_and_above!(fvm_shared3: 10, 11); -impl_lotus_json_for_miner_submit_windowed_post_params_v9_and_above!(fvm_shared4: 12, 13, 14, 15, 16); -impl_lotus_json_for_miner_declare_faults_params_v9_and_above!(9, 10, 11, 12, 13, 14, 15, 16); -impl_lotus_json_for_miner_declare_faults_params!(8, 9, 10, 11, 12, 13, 14, 15, 16); -impl_lotus_json_for_miner_termination_declaration_v9_and_above!(9, 10, 11, 12, 13, 14, 15, 16); -impl_lotus_json_for_miner_terminate_sectors_params_v9_and_above!(8, 9, 10, 11, 12, 13, 14, 15, 16); -impl_lotus_json_for_miner_withdraw_balance_params!(8, 9, 10, 11, 12, 13, 14, 15, 16); -impl_lotus_json_for_miner_change_multiaddrs_params!(8, 9, 10, 11, 12, 13, 14, 15, 16); -impl_lotus_json_for_miner_compact_partitions_params!(9, 10, 11, 12, 13, 14, 15, 16); -impl_lotus_json_for_miner_compact_sector_numbers_params!(9, 10, 11, 12, 13, 14, 15, 16); -impl_lotus_json_for_miner_pre_commit_sector_params!(8, 9, 10, 11, 12, 13, 14, 15, 16); -impl_lotus_json_for_miner_pre_commit_sector_and_batch_params!(9, 10, 11, 12, 13, 14, 15, 16); -impl_lotus_json_for_miner_pre_commit_sector_batch2_params!(9, 10, 11, 12, 13, 14, 15, 16); -impl_lotus_json_for_miner_prove_commit_sectors3_params!(13, 14, 15, 16); -impl_lotus_json_for_miner_prove_replica_updates3_params!(13, 14, 15, 16); -impl_lotus_json_for_miner_report_consensus_fault_params!(8, 9, 10, 11, 12, 13, 14, 15, 16); -impl_lotus_json_for_miner_check_sector_proven_params!(8, 9, 10, 11, 12, 13, 14, 15, 16); -impl_lotus_json_for_miner_apply_reward_params!(8, 9, 10, 11, 12, 13, 14, 15, 16); -impl_lotus_json_for_miner_prove_commit_aggregate_params_v13_and_above!( - 9, 10, 11, 12, 13, 14, 15, 16 +impl_lotus_json_for_miner_submit_windowed_post_params_v9_and_above!(fvm_shared4: 12, 13, 14, 15, 16, 17); +impl_lotus_json_for_miner_declare_faults_params_v9_and_above!(9, 10, 11, 12, 13, 14, 15, 16, 17); +impl_lotus_json_for_miner_declare_faults_params!(8, 9, 10, 11, 12, 13, 14, 15, 16, 17); +impl_lotus_json_for_miner_termination_declaration_v9_and_above!(9, 10, 11, 12, 13, 14, 15, 16, 17); +impl_lotus_json_for_miner_terminate_sectors_params_v9_and_above!( + 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 ); +impl_lotus_json_for_miner_withdraw_balance_params!(8, 9, 10, 11, 12, 13, 14, 15, 16, 17); +impl_lotus_json_for_miner_change_multiaddrs_params!(8, 9, 10, 11, 12, 13, 14, 15, 16, 17); +impl_lotus_json_for_miner_compact_partitions_params!(9, 10, 11, 12, 13, 14, 15, 16, 17); +impl_lotus_json_for_miner_compact_sector_numbers_params!(9, 10, 11, 12, 13, 14, 15, 16, 17); +impl_lotus_json_for_miner_pre_commit_sector_params!(8, 9, 10, 11, 12, 13, 14, 15, 16, 17); +impl_lotus_json_for_miner_pre_commit_sector_and_batch_params!(9, 10, 11, 12, 13, 14, 15, 16, 17); +impl_lotus_json_for_miner_pre_commit_sector_batch2_params!(9, 10, 11, 12, 13, 14, 15, 16, 17); +impl_lotus_json_for_miner_prove_commit_sectors3_params!(13, 14, 15, 16, 17); +impl_lotus_json_for_miner_prove_replica_updates3_params!(13, 14, 15, 16, 17); +impl_lotus_json_for_miner_report_consensus_fault_params!(8, 9, 10, 11, 12, 13, 14, 15, 16, 17); +impl_lotus_json_for_miner_check_sector_proven_params!(8, 9, 10, 11, 12, 13, 14, 15, 16, 17); +impl_lotus_json_for_miner_apply_reward_params!(8, 9, 10, 11, 12, 13, 14, 15, 16, 17); +impl_lotus_json_for_miner_prove_commit_aggregate_params_v9_to_v16!(9, 10, 11, 12, 13, 14, 15, 16); impl_lotus_json_for_miner_prove_replica_updates_params!(fvm_shared2: 8, 9); impl_lotus_json_for_miner_prove_replica_updates_params!(fvm_shared3: 10, 11); impl_lotus_json_for_miner_prove_replica_updates_params!(fvm_shared4: 12, 13, 14, 15, 16); -impl_lotus_json_for_miner_is_controlling_address_param!(10, 11, 12, 13, 14, 15, 16); -impl_lotus_json_for_miner_max_termination_fee_params!(16); -impl_lotus_json_for_miner_change_peer_id_params!(8, 9, 10, 11, 12, 13, 14, 15, 16); -impl_lotus_json_for_miner_sector_activation_manifest!(13, 14, 15, 16); -impl_lotus_json_for_miner_sector_update_manifest!(13, 14, 15, 16); -impl_miner_prove_commit_sector_params!(8, 9, 10, 11, 12, 13, 14, 15, 16); +impl_lotus_json_for_miner_is_controlling_address_param!(10, 11, 12, 13, 14, 15, 16, 17); +impl_lotus_json_for_miner_max_termination_fee_params!(16, 17); +impl_lotus_json_for_miner_change_peer_id_params!(8, 9, 10, 11, 12, 13, 14, 15, 16, 17); +impl_lotus_json_for_miner_sector_activation_manifest!(13, 14, 15, 16, 17); +impl_lotus_json_for_miner_sector_update_manifest!(13, 14, 15, 16, 17); +impl_miner_prove_commit_sector_params!(8, 9, 10, 11, 12, 13, 14, 15, 16, 17); impl_miner_extend_sector_expiration_params_v9_onwards!(9, 10, 11, 12, 13, 14, 15, 16); impl_miner_confirm_sector_proofs_param_v8_to_v13!(fvm_shared2: 8, 9); impl_miner_confirm_sector_proofs_param_v8_to_v13!(fvm_shared3: 10, 11,12, 13); -impl_miner_deferred_cron_event_params_v14_onwards!(14, 15, 16); +impl_miner_deferred_cron_event_params_v14_onwards!(14, 15, 16, 17); impl_miner_deferred_cron_event_params_v8_to_v13!(fvm_shared2: 8, 9); impl_miner_deferred_cron_event_params_v8_to_v13!(fvm_shared3: 10, 11, 12, 13); impl_miner_prove_replica_update_params2!(fvm_shared2: 9); impl_miner_prove_replica_update_params2!(fvm_shared3: 10, 11); impl_miner_prove_replica_update_params2!(fvm_shared4: 12); -impl_lotus_json_for_miner_prove_commit_sector_ni_params!(14, 15, 16); -impl_miner_internal_sector_setup_for_preseal_params!(14, 15, 16); +impl_lotus_json_for_miner_prove_commit_sector_ni_params!(14, 15, 16, 17); +impl_miner_internal_sector_setup_for_preseal_params!(14, 15, 16, 17); diff --git a/src/lotus_json/actors/params/mod.rs b/src/lotus_json/actors/params/mod.rs new file mode 100644 index 000000000000..edae9c291e56 --- /dev/null +++ b/src/lotus_json/actors/params/mod.rs @@ -0,0 +1,17 @@ +// Copyright 2019-2025 ChainSafe Systems +// SPDX-License-Identifier: Apache-2.0, MIT + +use super::*; +mod account_params; +mod cron_params; +mod datacap_params; +mod eam_params; +mod evm_params; +mod init_params; +mod market_params; +mod miner_params; +mod multisig_params; +mod paych_params; +mod power_params; +mod reward_params; +mod verified_reg_params; diff --git a/src/lotus_json/actor_states/methods/multisig_actor.rs b/src/lotus_json/actors/params/multisig_params.rs similarity index 98% rename from src/lotus_json/actor_states/methods/multisig_actor.rs rename to src/lotus_json/actors/params/multisig_params.rs index 8de3eb4f5e97..b34e7f3c6177 100644 --- a/src/lotus_json/actor_states/methods/multisig_actor.rs +++ b/src/lotus_json/actors/params/multisig_params.rs @@ -457,11 +457,11 @@ macro_rules! impl_multisig_lock_balance_params { }; } -impl_multisig_constructor_params!(8, 9, 10, 11, 12, 13, 14, 15, 16); -impl_multisig_propose_params!(8, 9, 10, 11, 12, 13, 14, 15, 16); -impl_multisig_txn_id_params!(8, 9, 10, 11, 12, 13, 14, 15, 16); -impl_multisig_add_signer_params!(8, 9, 10, 11, 12, 13, 14, 15, 16); -impl_multisig_remove_signer_params!(8, 9, 10, 11, 12, 13, 14, 15, 16); -impl_multisig_swap_signer_params!(8, 9, 10, 11, 12, 13, 14, 15, 16); -impl_multisig_change_num_approvals_threshold_params!(8, 9, 10, 11, 12, 13, 14, 15, 16); -impl_multisig_lock_balance_params!(8, 9, 10, 11, 12, 13, 14, 15, 16); +impl_multisig_constructor_params!(8, 9, 10, 11, 12, 13, 14, 15, 16, 17); +impl_multisig_propose_params!(8, 9, 10, 11, 12, 13, 14, 15, 16, 17); +impl_multisig_txn_id_params!(8, 9, 10, 11, 12, 13, 14, 15, 16, 17); +impl_multisig_add_signer_params!(8, 9, 10, 11, 12, 13, 14, 15, 16, 17); +impl_multisig_remove_signer_params!(8, 9, 10, 11, 12, 13, 14, 15, 16, 17); +impl_multisig_swap_signer_params!(8, 9, 10, 11, 12, 13, 14, 15, 16, 17); +impl_multisig_change_num_approvals_threshold_params!(8, 9, 10, 11, 12, 13, 14, 15, 16, 17); +impl_multisig_lock_balance_params!(8, 9, 10, 11, 12, 13, 14, 15, 16, 17); diff --git a/src/lotus_json/actor_states/methods/paych_params.rs b/src/lotus_json/actors/params/paych_params.rs similarity index 99% rename from src/lotus_json/actor_states/methods/paych_params.rs rename to src/lotus_json/actors/params/paych_params.rs index 42901f7dc381..0bff50ed1901 100644 --- a/src/lotus_json/actor_states/methods/paych_params.rs +++ b/src/lotus_json/actors/params/paych_params.rs @@ -540,7 +540,7 @@ macro_rules! impl_paych_update_channel_state_params_v4 { } // Apply implementations with correct fvm_shared versions -impl_paych_constructor_params!(8, 9, 10, 11, 12, 13, 14, 15, 16); +impl_paych_constructor_params!(8, 9, 10, 11, 12, 13, 14, 15, 16, 17); impl_paych_update_channel_state_params_v2!(8, 9); impl_paych_update_channel_state_params_v3!(10, 11); -impl_paych_update_channel_state_params_v4!(12, 13, 14, 15, 16); +impl_paych_update_channel_state_params_v4!(12, 13, 14, 15, 16, 17); diff --git a/src/lotus_json/actor_states/methods/power_actor.rs b/src/lotus_json/actors/params/power_params.rs similarity index 94% rename from src/lotus_json/actor_states/methods/power_actor.rs rename to src/lotus_json/actors/params/power_params.rs index faea44701b5f..2207cdf108bc 100644 --- a/src/lotus_json/actor_states/methods/power_actor.rs +++ b/src/lotus_json/actors/params/power_params.rs @@ -289,7 +289,7 @@ macro_rules! impl_lotus_json_for_power_miner_raw_power_params { }; } -// Implementations for MinerPowerParams (only present in the power actor v16) +// Implementations for MinerPowerParams (only present in the power actor v16 and v17) impl HasLotusJson for fil_actor_power_state::v16::MinerPowerParams { type LotusJson = MinerPowerParamsLotusJson; @@ -314,8 +314,32 @@ impl HasLotusJson for fil_actor_power_state::v16::MinerPowerParams { } } -impl_lotus_json_for_power_create_miner_params!(8, 9, 10, 11, 12, 13, 14, 15, 16); -impl_lotus_json_for_power_update_claimed_power_params!(8, 9, 10, 11, 12, 13, 14, 15, 16); -impl_lotus_json_for_power_enroll_cron_event_params!(8, 9, 10, 11, 12, 13, 14, 15, 16); -impl_lotus_json_for_power_update_pledge_total_params!(10, 11, 12, 13, 14, 15, 16); -impl_lotus_json_for_power_miner_raw_power_params!(10, 11, 12, 13, 14, 15, 16); +impl HasLotusJson for fil_actor_power_state::v17::MinerPowerParams { + type LotusJson = MinerPowerParamsLotusJson; + + #[cfg(test)] + fn snapshots() -> Vec<(serde_json::Value, Self)> { + vec![( + json!({ + "Miner": 1002, + }), + Self { miner: 1002 }, + )] + } + + fn into_lotus_json(self) -> Self::LotusJson { + MinerPowerParamsLotusJson { miner: self.miner } + } + + fn from_lotus_json(lotus_json: Self::LotusJson) -> Self { + Self { + miner: lotus_json.miner, + } + } +} + +impl_lotus_json_for_power_create_miner_params!(8, 9, 10, 11, 12, 13, 14, 15, 16, 17); +impl_lotus_json_for_power_update_claimed_power_params!(8, 9, 10, 11, 12, 13, 14, 15, 16, 17); +impl_lotus_json_for_power_enroll_cron_event_params!(8, 9, 10, 11, 12, 13, 14, 15, 16, 17); +impl_lotus_json_for_power_update_pledge_total_params!(10, 11, 12, 13, 14, 15, 16, 17); +impl_lotus_json_for_power_miner_raw_power_params!(10, 11, 12, 13, 14, 15, 16, 17); diff --git a/src/lotus_json/actor_states/methods/reward_methods.rs b/src/lotus_json/actors/params/reward_params.rs similarity index 96% rename from src/lotus_json/actor_states/methods/reward_methods.rs rename to src/lotus_json/actors/params/reward_params.rs index e71d3177ba3e..004dbd3cce64 100644 --- a/src/lotus_json/actor_states/methods/reward_methods.rs +++ b/src/lotus_json/actors/params/reward_params.rs @@ -173,8 +173,8 @@ macro_rules! impl_update_network_kpi_params { }; } -impl_reward_constructor_params!(fvm_shared4::bigint: 16, 15, 14, 13, 12); +impl_reward_constructor_params!(fvm_shared4::bigint: 17, 16, 15, 14, 13, 12); impl_reward_constructor_params!(fvm_shared3::bigint: 11); -impl_award_block_reward_params!(16, 15, 14, 13, 12, 11, 10, 9, 8); -impl_update_network_kpi_params!(fvm_shared4::bigint: 16, 15, 14, 13, 12); +impl_award_block_reward_params!(17, 16, 15, 14, 13, 12, 11, 10, 9, 8); +impl_update_network_kpi_params!(fvm_shared4::bigint: 17, 16, 15, 14, 13, 12); impl_update_network_kpi_params!(fvm_shared3::bigint: 11); diff --git a/src/lotus_json/actor_states/methods/verified_reg_actor.rs b/src/lotus_json/actors/params/verified_reg_params.rs similarity index 99% rename from src/lotus_json/actor_states/methods/verified_reg_actor.rs rename to src/lotus_json/actors/params/verified_reg_params.rs index 06d86ba03102..a358e03c9f85 100644 --- a/src/lotus_json/actor_states/methods/verified_reg_actor.rs +++ b/src/lotus_json/actors/params/verified_reg_params.rs @@ -1236,20 +1236,20 @@ impl HasLotusJson for fil_actor_verifreg_state::v9::AddVerifierClientParams { } } -impl_constructor_params!(11, 12, 13, 14, 15, 16); -impl_verifier_params!(10, 11, 12, 13, 14, 15, 16); // Exclude v8,v9 due to different param names -impl_remove_verifier_params!(11, 12, 13, 14, 15, 16); -impl_remove_expired_allocations_params!(9, 10, 11, 12, 13, 14, 15, 16); -impl_get_claims_params!(9, 10, 11, 12, 13, 14, 15, 16); -impl_remove_expired_claims_params!(9, 10, 11, 12, 13, 14, 15, 16); -impl_extend_claim_terms_params!(9, 10, 11, 12, 13, 14, 15, 16); +impl_constructor_params!(11, 12, 13, 14, 15, 16, 17); +impl_verifier_params!(10, 11, 12, 13, 14, 15, 16, 17); // Exclude v8,v9 due to different param names +impl_remove_verifier_params!(11, 12, 13, 14, 15, 16, 17); +impl_remove_expired_allocations_params!(9, 10, 11, 12, 13, 14, 15, 16, 17); +impl_get_claims_params!(9, 10, 11, 12, 13, 14, 15, 16, 17); +impl_remove_expired_claims_params!(9, 10, 11, 12, 13, 14, 15, 16, 17); +impl_extend_claim_terms_params!(9, 10, 11, 12, 13, 14, 15, 16, 17); impl_remove_data_cap_params_v2!(8, 9); impl_remove_data_cap_params_v3!(10, 11); -impl_remove_data_cap_params_v4!(12, 13, 14, 15, 16); +impl_remove_data_cap_params_v4!(12, 13, 14, 15, 16, 17); impl_claim_allocations_params_v11!(fvm_shared2: 9); impl_claim_allocations_params_v11!(fvm_shared3: 10, 11); -impl_claim_allocations_params_v12_plus!(fvm_shared4: 12, 13, 14, 15, 16); -impl_allocation_requests!(fvm_shared4: 12, 13, 14, 15, 16); +impl_claim_allocations_params_v12_plus!(fvm_shared4: 12, 13, 14, 15, 16, 17); +impl_allocation_requests!(fvm_shared4: 12, 13, 14, 15, 16, 17); impl_allocation_requests!(fvm_shared3: 11); diff --git a/src/lotus_json/actor_states/account_state.rs b/src/lotus_json/actors/states/account_state.rs similarity index 100% rename from src/lotus_json/actor_states/account_state.rs rename to src/lotus_json/actors/states/account_state.rs diff --git a/src/lotus_json/actor_states/cron_state.rs b/src/lotus_json/actors/states/cron_state.rs similarity index 100% rename from src/lotus_json/actor_states/cron_state.rs rename to src/lotus_json/actors/states/cron_state.rs diff --git a/src/lotus_json/actor_states/datacap_state.rs b/src/lotus_json/actors/states/datacap_state.rs similarity index 100% rename from src/lotus_json/actor_states/datacap_state.rs rename to src/lotus_json/actors/states/datacap_state.rs diff --git a/src/lotus_json/actor_states/evm_state.rs b/src/lotus_json/actors/states/evm_state.rs similarity index 100% rename from src/lotus_json/actor_states/evm_state.rs rename to src/lotus_json/actors/states/evm_state.rs diff --git a/src/lotus_json/actor_states/init_state.rs b/src/lotus_json/actors/states/init_state.rs similarity index 100% rename from src/lotus_json/actor_states/init_state.rs rename to src/lotus_json/actors/states/init_state.rs diff --git a/src/lotus_json/actor_states/market_state.rs b/src/lotus_json/actors/states/market_state.rs similarity index 100% rename from src/lotus_json/actor_states/market_state.rs rename to src/lotus_json/actors/states/market_state.rs diff --git a/src/lotus_json/actor_states/miner_state.rs b/src/lotus_json/actors/states/miner_state.rs similarity index 100% rename from src/lotus_json/actor_states/miner_state.rs rename to src/lotus_json/actors/states/miner_state.rs diff --git a/src/lotus_json/actor_states/mod.rs b/src/lotus_json/actors/states/mod.rs similarity index 96% rename from src/lotus_json/actor_states/mod.rs rename to src/lotus_json/actors/states/mod.rs index bcc7fa747475..296bc47b4cf3 100644 --- a/src/lotus_json/actor_states/mod.rs +++ b/src/lotus_json/actors/states/mod.rs @@ -1,5 +1,6 @@ // Copyright 2019-2025 ChainSafe Systems // SPDX-License-Identifier: Apache-2.0, MIT + use super::*; mod account_state; mod cron_state; @@ -7,7 +8,6 @@ mod datacap_state; mod evm_state; mod init_state; mod market_state; -mod methods; mod miner_state; mod multisig_state; mod payment_channel_state; diff --git a/src/lotus_json/actor_states/multisig_state.rs b/src/lotus_json/actors/states/multisig_state.rs similarity index 100% rename from src/lotus_json/actor_states/multisig_state.rs rename to src/lotus_json/actors/states/multisig_state.rs diff --git a/src/lotus_json/actor_states/payment_channel_state.rs b/src/lotus_json/actors/states/payment_channel_state.rs similarity index 100% rename from src/lotus_json/actor_states/payment_channel_state.rs rename to src/lotus_json/actors/states/payment_channel_state.rs diff --git a/src/lotus_json/actor_states/power_states.rs b/src/lotus_json/actors/states/power_states.rs similarity index 100% rename from src/lotus_json/actor_states/power_states.rs rename to src/lotus_json/actors/states/power_states.rs diff --git a/src/lotus_json/actor_states/reward_state.rs b/src/lotus_json/actors/states/reward_state.rs similarity index 100% rename from src/lotus_json/actor_states/reward_state.rs rename to src/lotus_json/actors/states/reward_state.rs diff --git a/src/lotus_json/actor_states/system_state.rs b/src/lotus_json/actors/states/system_state.rs similarity index 100% rename from src/lotus_json/actor_states/system_state.rs rename to src/lotus_json/actors/states/system_state.rs diff --git a/src/lotus_json/actor_states/verified_reg_state.rs b/src/lotus_json/actors/states/verified_reg_state.rs similarity index 100% rename from src/lotus_json/actor_states/verified_reg_state.rs rename to src/lotus_json/actors/states/verified_reg_state.rs diff --git a/src/lotus_json/actor_states/vesting_funds.rs b/src/lotus_json/actors/states/vesting_funds.rs similarity index 100% rename from src/lotus_json/actor_states/vesting_funds.rs rename to src/lotus_json/actors/states/vesting_funds.rs diff --git a/src/lotus_json/mod.rs b/src/lotus_json/mod.rs index 345bae794644..868e5cdbd249 100644 --- a/src/lotus_json/mod.rs +++ b/src/lotus_json/mod.rs @@ -218,7 +218,7 @@ decl_and_test!( // If a module cannot be tested normally above, you MAY declare it separately here // but you MUST document any tech debt - the reason WHY it cannot be tested above. -mod actor_states; +mod actors; mod allocation; mod beneficiary_term; // fil_actor_miner_state::v12::BeneficiaryTerm: !quickcheck::Arbitrary mod bit_field; // fil_actors_shared::fvm_ipld_bitfield::BitField: !quickcheck::Arbitrary diff --git a/src/rpc/registry/actors/account.rs b/src/rpc/registry/actors/account.rs index dce848fa62a4..0c0b57afdea8 100644 --- a/src/rpc/registry/actors/account.rs +++ b/src/rpc/registry/actors/account.rs @@ -2,12 +2,59 @@ // 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 cid::Cid; +use fil_actors_shared::actor_versions::ActorVersion; -/// Macro to generate account method registration for different versions -macro_rules! register_account_version { - // For versions that use types module (v15, v16) +fn register_account_version_v8(registry: &mut MethodRegistry, cid: Cid) { + use fil_actor_account_state::v8::Method; + + register_actor_methods!(registry, cid, [(Method::Constructor, Address),]); + register_actor_methods!(registry, cid, [(Method::PubkeyAddress, empty)]); +} + +fn register_account_version_v9(registry: &mut MethodRegistry, cid: Cid) { + use fil_actor_account_state::v9::{AuthenticateMessageParams, Method}; + register_actor_methods!( + registry, + cid, + [ + (Method::Constructor, Address), + (Method::AuthenticateMessage, AuthenticateMessageParams) + ] + ); + + register_actor_methods!( + registry, + cid, + [ + (Method::PubkeyAddress, empty), + (Method::UniversalReceiverHook, empty) + ] + ); +} + +fn register_account_version_10(registry: &mut MethodRegistry, cid: Cid) { + use fil_actor_account_state::v10::{AuthenticateMessageParams, Method}; + + register_actor_methods!( + registry, + cid, + [ + (Method::Constructor, Address), + ( + Method::AuthenticateMessageExported, + AuthenticateMessageParams + ) + ] + ); + + register_actor_methods!(registry, cid, [(Method::PubkeyAddress, empty)]); +} + +macro_rules! register_account_version_11_onwards { + // For versions that use types module (v15 onwards) ($registry:expr, $code_cid:expr, $state_version:path, with_types) => {{ use $state_version::{Method, types}; @@ -22,6 +69,8 @@ macro_rules! register_account_version { ) ] ); + + register_actor_methods!($registry, $code_cid, [(Method::PubkeyAddress, empty)]); }}; // For versions that don't use types module (v11-v14) @@ -39,6 +88,8 @@ macro_rules! register_account_version { ) ] ); + + register_actor_methods!($registry, $code_cid, [(Method::PubkeyAddress, empty)]); }}; } @@ -46,15 +97,47 @@ macro_rules! register_account_version { pub(crate) fn register_account_actor_methods( registry: &mut MethodRegistry, cid: Cid, - version: u64, + version: ActorVersion, ) { match version { - 11 => register_account_version!(registry, cid, fil_actor_account_state::v11), - 12 => register_account_version!(registry, cid, fil_actor_account_state::v12), - 13 => register_account_version!(registry, cid, fil_actor_account_state::v13), - 14 => register_account_version!(registry, cid, fil_actor_account_state::v14), - 15 => register_account_version!(registry, cid, fil_actor_account_state::v15, with_types), - 16 => register_account_version!(registry, cid, fil_actor_account_state::v16, with_types), - _ => {} + ActorVersion::V8 => register_account_version_v8(registry, cid), + ActorVersion::V9 => register_account_version_v9(registry, cid), + ActorVersion::V10 => register_account_version_10(registry, cid), + ActorVersion::V11 => { + register_account_version_11_onwards!(registry, cid, fil_actor_account_state::v11) + } + ActorVersion::V12 => { + register_account_version_11_onwards!(registry, cid, fil_actor_account_state::v12) + } + ActorVersion::V13 => { + register_account_version_11_onwards!(registry, cid, fil_actor_account_state::v13) + } + ActorVersion::V14 => { + register_account_version_11_onwards!(registry, cid, fil_actor_account_state::v14) + } + ActorVersion::V15 => { + register_account_version_11_onwards!( + registry, + cid, + fil_actor_account_state::v15, + with_types + ) + } + ActorVersion::V16 => { + register_account_version_11_onwards!( + registry, + cid, + fil_actor_account_state::v16, + with_types + ) + } + ActorVersion::V17 => { + register_account_version_11_onwards!( + registry, + cid, + fil_actor_account_state::v17, + with_types + ) + } } } diff --git a/src/rpc/registry/actors/cron.rs b/src/rpc/registry/actors/cron.rs index 56117b2afbaf..f4efc581aadd 100644 --- a/src/rpc/registry/actors/cron.rs +++ b/src/rpc/registry/actors/cron.rs @@ -4,6 +4,7 @@ use crate::rpc::registry::methods_reg::{MethodRegistry, register_actor_methods}; use crate::shim::message::MethodNum; use cid::Cid; +use fil_actors_shared::actor_versions::ActorVersion; macro_rules! register_cron_version { ($registry:expr, $code_cid:expr, $state_version:path) => {{ @@ -20,17 +21,21 @@ macro_rules! register_cron_version { }}; } -pub(crate) fn register_actor_methods(registry: &mut MethodRegistry, cid: Cid, version: u64) { +pub(crate) fn register_actor_methods( + registry: &mut MethodRegistry, + cid: Cid, + version: ActorVersion, +) { match version { - 8 => register_cron_version!(registry, cid, fil_actor_cron_state::v8), - 9 => register_cron_version!(registry, cid, fil_actor_cron_state::v9), - 10 => register_cron_version!(registry, cid, fil_actor_cron_state::v10), - 11 => register_cron_version!(registry, cid, fil_actor_cron_state::v11), - 12 => register_cron_version!(registry, cid, fil_actor_cron_state::v12), - 13 => register_cron_version!(registry, cid, fil_actor_cron_state::v13), - 14 => register_cron_version!(registry, cid, fil_actor_cron_state::v14), - 15 => register_cron_version!(registry, cid, fil_actor_cron_state::v15), - 16 => register_cron_version!(registry, cid, fil_actor_cron_state::v16), - _ => {} + ActorVersion::V8 => register_cron_version!(registry, cid, fil_actor_cron_state::v8), + ActorVersion::V9 => register_cron_version!(registry, cid, fil_actor_cron_state::v9), + ActorVersion::V10 => register_cron_version!(registry, cid, fil_actor_cron_state::v10), + ActorVersion::V11 => register_cron_version!(registry, cid, fil_actor_cron_state::v11), + ActorVersion::V12 => register_cron_version!(registry, cid, fil_actor_cron_state::v12), + ActorVersion::V13 => register_cron_version!(registry, cid, fil_actor_cron_state::v13), + ActorVersion::V14 => register_cron_version!(registry, cid, fil_actor_cron_state::v14), + ActorVersion::V15 => register_cron_version!(registry, cid, fil_actor_cron_state::v15), + ActorVersion::V16 => register_cron_version!(registry, cid, fil_actor_cron_state::v16), + ActorVersion::V17 => register_cron_version!(registry, cid, fil_actor_cron_state::v17), } } diff --git a/src/rpc/registry/actors/datacap.rs b/src/rpc/registry/actors/datacap.rs index d21bd4b22bed..7a50653ea169 100644 --- a/src/rpc/registry/actors/datacap.rs +++ b/src/rpc/registry/actors/datacap.rs @@ -5,6 +5,7 @@ use crate::rpc::registry::methods_reg::{MethodRegistry, register_actor_methods}; use crate::shim::address::Address; use crate::shim::message::MethodNum; use cid::Cid; +use fil_actors_shared::actor_versions::ActorVersion; macro_rules! register_datacap_v9 { ($registry:expr, $code_cid:expr) => {{ @@ -125,17 +126,18 @@ macro_rules! register_datacap_version { pub(crate) fn register_datacap_actor_methods( registry: &mut MethodRegistry, cid: Cid, - version: u64, + version: ActorVersion, ) { match version { - 9 => register_datacap_v9!(registry, cid), - 10 => register_datacap_v10!(registry, cid), - 11 => register_datacap_version!(registry, cid, fil_actor_datacap_state::v11), - 12 => register_datacap_version!(registry, cid, fil_actor_datacap_state::v12), - 13 => register_datacap_version!(registry, cid, fil_actor_datacap_state::v13), - 14 => register_datacap_version!(registry, cid, fil_actor_datacap_state::v14), - 15 => register_datacap_version!(registry, cid, fil_actor_datacap_state::v15), - 16 => register_datacap_version!(registry, cid, fil_actor_datacap_state::v16), - _ => {} + ActorVersion::V8 => {} + ActorVersion::V9 => register_datacap_v9!(registry, cid), + ActorVersion::V10 => register_datacap_v10!(registry, cid), + ActorVersion::V11 => register_datacap_version!(registry, cid, fil_actor_datacap_state::v11), + ActorVersion::V12 => register_datacap_version!(registry, cid, fil_actor_datacap_state::v12), + ActorVersion::V13 => register_datacap_version!(registry, cid, fil_actor_datacap_state::v13), + ActorVersion::V14 => register_datacap_version!(registry, cid, fil_actor_datacap_state::v14), + ActorVersion::V15 => register_datacap_version!(registry, cid, fil_actor_datacap_state::v15), + ActorVersion::V16 => register_datacap_version!(registry, cid, fil_actor_datacap_state::v16), + ActorVersion::V17 => register_datacap_version!(registry, cid, fil_actor_datacap_state::v17), } } diff --git a/src/rpc/registry/actors/eam.rs b/src/rpc/registry/actors/eam.rs index a02bd8b9e80f..d2e6b3b9bef7 100644 --- a/src/rpc/registry/actors/eam.rs +++ b/src/rpc/registry/actors/eam.rs @@ -4,6 +4,7 @@ use crate::rpc::registry::methods_reg::{MethodRegistry, register_actor_methods}; use crate::shim::message::MethodNum; use cid::Cid; +use fil_actors_shared::actor_versions::ActorVersion; macro_rules! register_eam_reg_version { ($registry:expr, $code_cid:expr, $state_version:path) => {{ @@ -24,15 +25,22 @@ macro_rules! register_eam_reg_version { }}; } -pub(crate) fn register_actor_methods(registry: &mut MethodRegistry, cid: Cid, version: u64) { +pub(crate) fn register_actor_methods( + registry: &mut MethodRegistry, + cid: Cid, + version: ActorVersion, +) { match version { - 10 => register_eam_reg_version!(registry, cid, fil_actor_eam_state::v10), - 11 => register_eam_reg_version!(registry, cid, fil_actor_eam_state::v11), - 12 => register_eam_reg_version!(registry, cid, fil_actor_eam_state::v12), - 13 => register_eam_reg_version!(registry, cid, fil_actor_eam_state::v13), - 14 => register_eam_reg_version!(registry, cid, fil_actor_eam_state::v14), - 15 => register_eam_reg_version!(registry, cid, fil_actor_eam_state::v15), - 16 => register_eam_reg_version!(registry, cid, fil_actor_eam_state::v16), - _ => {} + ActorVersion::V8 | ActorVersion::V9 => { + // EAM actor was introduced in V10, so V8 and V9 don't have EAM actors + } + ActorVersion::V10 => register_eam_reg_version!(registry, cid, fil_actor_eam_state::v10), + ActorVersion::V11 => register_eam_reg_version!(registry, cid, fil_actor_eam_state::v11), + ActorVersion::V12 => register_eam_reg_version!(registry, cid, fil_actor_eam_state::v12), + ActorVersion::V13 => register_eam_reg_version!(registry, cid, fil_actor_eam_state::v13), + ActorVersion::V14 => register_eam_reg_version!(registry, cid, fil_actor_eam_state::v14), + ActorVersion::V15 => register_eam_reg_version!(registry, cid, fil_actor_eam_state::v15), + ActorVersion::V16 => register_eam_reg_version!(registry, cid, fil_actor_eam_state::v16), + ActorVersion::V17 => register_eam_reg_version!(registry, cid, fil_actor_eam_state::v17), } } diff --git a/src/rpc/registry/actors/eth_account.rs b/src/rpc/registry/actors/eth_account.rs index 86749e8c5acb..c48fb501ffe2 100644 --- a/src/rpc/registry/actors/eth_account.rs +++ b/src/rpc/registry/actors/eth_account.rs @@ -4,6 +4,7 @@ use crate::rpc::registry::methods_reg::{MethodRegistry, register_actor_methods}; use crate::shim::message::MethodNum; use cid::Cid; +use fil_actors_shared::actor_versions::ActorVersion; macro_rules! register_eth_account_reg_version { ($registry:expr, $code_cid:expr, $state_version:path) => {{ @@ -14,15 +15,36 @@ macro_rules! register_eth_account_reg_version { }}; } -pub(crate) fn register_actor_methods(registry: &mut MethodRegistry, cid: Cid, version: u64) { +pub(crate) fn register_actor_methods( + registry: &mut MethodRegistry, + cid: Cid, + version: ActorVersion, +) { 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), - _ => {} + ActorVersion::V8 | ActorVersion::V9 => {} + ActorVersion::V10 => { + register_eth_account_reg_version!(registry, cid, fil_actor_ethaccount_state::v10) + } + ActorVersion::V11 => { + register_eth_account_reg_version!(registry, cid, fil_actor_ethaccount_state::v11) + } + ActorVersion::V12 => { + register_eth_account_reg_version!(registry, cid, fil_actor_ethaccount_state::v12) + } + ActorVersion::V13 => { + register_eth_account_reg_version!(registry, cid, fil_actor_ethaccount_state::v13) + } + ActorVersion::V14 => { + register_eth_account_reg_version!(registry, cid, fil_actor_ethaccount_state::v14) + } + ActorVersion::V15 => { + register_eth_account_reg_version!(registry, cid, fil_actor_ethaccount_state::v15) + } + ActorVersion::V16 => { + register_eth_account_reg_version!(registry, cid, fil_actor_ethaccount_state::v16) + } + ActorVersion::V17 => { + register_eth_account_reg_version!(registry, cid, fil_actor_ethaccount_state::v17) + } } } diff --git a/src/rpc/registry/actors/evm.rs b/src/rpc/registry/actors/evm.rs index d2536d18fc38..069e6efa63f8 100644 --- a/src/rpc/registry/actors/evm.rs +++ b/src/rpc/registry/actors/evm.rs @@ -5,6 +5,7 @@ use crate::rpc::eth::types::GetStorageAtParams; use crate::rpc::registry::methods_reg::{MethodRegistry, register_actor_methods}; use crate::shim::message::MethodNum; use cid::Cid; +use fil_actors_shared::actor_versions::ActorVersion; use fvm_ipld_encoding::RawBytes; macro_rules! register_evm_version { @@ -39,15 +40,20 @@ macro_rules! register_evm_version { }}; } -pub(crate) fn register_evm_actor_methods(registry: &mut MethodRegistry, cid: Cid, version: u64) { +pub(crate) fn register_evm_actor_methods( + registry: &mut MethodRegistry, + cid: Cid, + version: ActorVersion, +) { match version { - 10 => register_evm_version!(registry, cid, fil_actor_evm_state::v10), - 11 => register_evm_version!(registry, cid, fil_actor_evm_state::v11), - 12 => register_evm_version!(registry, cid, fil_actor_evm_state::v12), - 13 => register_evm_version!(registry, cid, fil_actor_evm_state::v13), - 14 => register_evm_version!(registry, cid, fil_actor_evm_state::v14), - 15 => register_evm_version!(registry, cid, fil_actor_evm_state::v15), - 16 => register_evm_version!(registry, cid, fil_actor_evm_state::v16), - _ => {} + ActorVersion::V8 | ActorVersion::V9 => {} + ActorVersion::V10 => register_evm_version!(registry, cid, fil_actor_evm_state::v10), + ActorVersion::V11 => register_evm_version!(registry, cid, fil_actor_evm_state::v11), + ActorVersion::V12 => register_evm_version!(registry, cid, fil_actor_evm_state::v12), + ActorVersion::V13 => register_evm_version!(registry, cid, fil_actor_evm_state::v13), + ActorVersion::V14 => register_evm_version!(registry, cid, fil_actor_evm_state::v14), + ActorVersion::V15 => register_evm_version!(registry, cid, fil_actor_evm_state::v15), + ActorVersion::V16 => register_evm_version!(registry, cid, fil_actor_evm_state::v16), + ActorVersion::V17 => register_evm_version!(registry, cid, fil_actor_evm_state::v17), } } diff --git a/src/rpc/registry/actors/init.rs b/src/rpc/registry/actors/init.rs index af06ef04c449..17cba4de35d6 100644 --- a/src/rpc/registry/actors/init.rs +++ b/src/rpc/registry/actors/init.rs @@ -4,9 +4,10 @@ use crate::rpc::registry::methods_reg::{MethodRegistry, register_actor_methods}; use crate::shim::message::MethodNum; use cid::Cid; +use fil_actors_shared::actor_versions::ActorVersion; -// Macro for versions 8-10 that only have Exec method -macro_rules! register_init_versions_8_to_10 { +// Macro for versions 8-9 that only have Exec method +macro_rules! register_init_versions_8_to_9 { ($registry:expr, $code_cid:expr, $state_version:path) => {{ use $state_version::{ConstructorParams, ExecParams, Method}; @@ -21,8 +22,8 @@ macro_rules! register_init_versions_8_to_10 { }}; } -// Macro for versions 11-16 that have Exec4 -macro_rules! register_init_versions_11_to_16 { +// Macro for versions 10 onwards that have Exec4 +macro_rules! register_init_versions_10_onwards { ($registry:expr, $code_cid:expr, $state_version:path) => {{ use $state_version::{ConstructorParams, Exec4Params, ExecParams, Method}; @@ -38,17 +39,41 @@ macro_rules! register_init_versions_11_to_16 { }}; } -pub(crate) fn register_actor_methods(registry: &mut MethodRegistry, cid: Cid, version: u64) { +pub(crate) fn register_actor_methods( + registry: &mut MethodRegistry, + cid: Cid, + version: ActorVersion, +) { match version { - 8 => register_init_versions_8_to_10!(registry, cid, fil_actor_init_state::v8), - 9 => register_init_versions_8_to_10!(registry, cid, fil_actor_init_state::v9), - 10 => register_init_versions_8_to_10!(registry, cid, fil_actor_init_state::v10), - 11 => register_init_versions_11_to_16!(registry, cid, fil_actor_init_state::v11), - 12 => register_init_versions_11_to_16!(registry, cid, fil_actor_init_state::v12), - 13 => register_init_versions_11_to_16!(registry, cid, fil_actor_init_state::v13), - 14 => register_init_versions_11_to_16!(registry, cid, fil_actor_init_state::v14), - 15 => register_init_versions_11_to_16!(registry, cid, fil_actor_init_state::v15), - 16 => register_init_versions_11_to_16!(registry, cid, fil_actor_init_state::v16), - _ => {} + ActorVersion::V8 => { + register_init_versions_8_to_9!(registry, cid, fil_actor_init_state::v8) + } + ActorVersion::V9 => { + register_init_versions_8_to_9!(registry, cid, fil_actor_init_state::v9) + } + ActorVersion::V10 => { + register_init_versions_10_onwards!(registry, cid, fil_actor_init_state::v10) + } + ActorVersion::V11 => { + register_init_versions_10_onwards!(registry, cid, fil_actor_init_state::v11) + } + ActorVersion::V12 => { + register_init_versions_10_onwards!(registry, cid, fil_actor_init_state::v12) + } + ActorVersion::V13 => { + register_init_versions_10_onwards!(registry, cid, fil_actor_init_state::v13) + } + ActorVersion::V14 => { + register_init_versions_10_onwards!(registry, cid, fil_actor_init_state::v14) + } + ActorVersion::V15 => { + register_init_versions_10_onwards!(registry, cid, fil_actor_init_state::v15) + } + ActorVersion::V16 => { + register_init_versions_10_onwards!(registry, cid, fil_actor_init_state::v16) + } + ActorVersion::V17 => { + register_init_versions_10_onwards!(registry, cid, fil_actor_init_state::v17) + } } } diff --git a/src/rpc/registry/actors/market.rs b/src/rpc/registry/actors/market.rs index 3a752849d525..9a811feed5ee 100644 --- a/src/rpc/registry/actors/market.rs +++ b/src/rpc/registry/actors/market.rs @@ -5,6 +5,7 @@ use crate::rpc::registry::methods_reg::{MethodRegistry, register_actor_methods}; use crate::shim::address::Address; use crate::shim::message::MethodNum; use cid::Cid; +use fil_actors_shared::actor_versions::ActorVersion; macro_rules! register_market_basic_methods { ($registry:expr, $code_cid:expr, $state_version:path) => {{ @@ -174,18 +175,41 @@ macro_rules! register_market_versions_onwards { }}; } -pub(crate) fn register_actor_methods(registry: &mut MethodRegistry, cid: Cid, version: u64) { +pub(crate) fn register_actor_methods( + registry: &mut MethodRegistry, + cid: Cid, + version: ActorVersion, +) { match version { - 8 => register_market_versions_8_to_9!(registry, cid, fil_actor_market_state::v8), - 9 => register_market_versions_8_to_9!(registry, cid, fil_actor_market_state::v9), - 10 => register_market_versions_10_to_11!(registry, cid, fil_actor_market_state::v10), - 11 => register_market_versions_10_to_11!(registry, cid, fil_actor_market_state::v11), - 12 => register_market_versions_12!(registry, cid, fil_actor_market_state::v12), - 13 => register_market_versions_onwards!(registry, cid, fil_actor_market_state::v13), - 14 => register_market_versions_onwards!(registry, cid, fil_actor_market_state::v14), - 15 => register_market_versions_onwards!(registry, cid, fil_actor_market_state::v15), - 16 => register_market_versions_onwards!(registry, cid, fil_actor_market_state::v16), - 17 => register_market_versions_onwards!(registry, cid, fil_actor_market_state::v17), - _ => {} + ActorVersion::V8 => { + register_market_versions_8_to_9!(registry, cid, fil_actor_market_state::v8) + } + ActorVersion::V9 => { + register_market_versions_8_to_9!(registry, cid, fil_actor_market_state::v9) + } + ActorVersion::V10 => { + register_market_versions_10_to_11!(registry, cid, fil_actor_market_state::v10) + } + ActorVersion::V11 => { + register_market_versions_10_to_11!(registry, cid, fil_actor_market_state::v11) + } + ActorVersion::V12 => { + register_market_versions_12!(registry, cid, fil_actor_market_state::v12) + } + ActorVersion::V13 => { + register_market_versions_onwards!(registry, cid, fil_actor_market_state::v13) + } + ActorVersion::V14 => { + register_market_versions_onwards!(registry, cid, fil_actor_market_state::v14) + } + ActorVersion::V15 => { + register_market_versions_onwards!(registry, cid, fil_actor_market_state::v15) + } + ActorVersion::V16 => { + register_market_versions_onwards!(registry, cid, fil_actor_market_state::v16) + } + ActorVersion::V17 => { + register_market_versions_onwards!(registry, cid, fil_actor_market_state::v17) + } } } diff --git a/src/rpc/registry/actors/miner.rs b/src/rpc/registry/actors/miner.rs index 89ee822f4830..5a37067f5b98 100644 --- a/src/rpc/registry/actors/miner.rs +++ b/src/rpc/registry/actors/miner.rs @@ -5,6 +5,7 @@ use crate::rpc::registry::methods_reg::{MethodRegistry, register_actor_methods}; use crate::shim::address::Address; use crate::shim::message::MethodNum; use cid::Cid; +use fil_actors_shared::actor_versions::ActorVersion; macro_rules! register_miner_basic_methods { ($registry:expr, $code_cid:expr, $state_version:path) => {{ @@ -12,8 +13,7 @@ macro_rules! register_miner_basic_methods { ApplyRewardParams, ChangeMultiaddrsParams, ChangePeerIDParams, ChangeWorkerAddressParams, CheckSectorProvenParams, CompactPartitionsParams, CompactSectorNumbersParams, DeclareFaultsParams, DeclareFaultsRecoveredParams, - DeferredCronEventParams, DisputeWindowedPoStParams, ExtendSectorExpirationParams, - Method, MinerConstructorParams, ProveCommitAggregateParams, ProveReplicaUpdatesParams, + DeferredCronEventParams, DisputeWindowedPoStParams, Method, MinerConstructorParams, ReportConsensusFaultParams, SubmitWindowedPoStParams, TerminateSectorsParams, WithdrawBalanceParams, }; @@ -26,7 +26,6 @@ macro_rules! register_miner_basic_methods { (Method::ChangeWorkerAddress, ChangeWorkerAddressParams), (Method::ChangePeerID, ChangePeerIDParams), (Method::SubmitWindowedPoSt, SubmitWindowedPoStParams), - (Method::ExtendSectorExpiration, ExtendSectorExpirationParams), (Method::TerminateSectors, TerminateSectorsParams), (Method::DeclareFaults, DeclareFaultsParams), (Method::DeclareFaultsRecovered, DeclareFaultsRecoveredParams), @@ -39,8 +38,6 @@ macro_rules! register_miner_basic_methods { (Method::CompactPartitions, CompactPartitionsParams), (Method::CompactSectorNumbers, CompactSectorNumbersParams), (Method::DisputeWindowedPoSt, DisputeWindowedPoStParams), - (Method::ProveCommitAggregate, ProveCommitAggregateParams), - (Method::ProveReplicaUpdates, ProveReplicaUpdatesParams), ] ); @@ -136,12 +133,30 @@ macro_rules! register_miner_common_method_v14_onwards { }}; } +macro_rules! register_miner_common_method_v16_onwards { + ($registry:expr, $code_cid:expr, $state_version:path) => {{ + use $state_version::{MaxTerminationFeeParams, Method}; + register_actor_methods!( + $registry, + $code_cid, + [(Method::MaxTerminationFeeExported, MaxTerminationFeeParams),] + ); + + register_actor_methods!( + $registry, + $code_cid, + [(Method::InitialPledgeExported, empty)] + ); + }}; +} + fn register_miner_version_8(registry: &mut MethodRegistry, cid: Cid) { register_miner_basic_methods!(registry, cid, fil_actor_miner_state::v8); use fil_actor_miner_state::v8::{ - ConfirmSectorProofsParams, Method, PreCommitSectorBatchParams, PreCommitSectorParams, - ProveCommitSectorParams, + ConfirmSectorProofsParams, ExtendSectorExpirationParams, Method, + PreCommitSectorBatchParams, PreCommitSectorParams, ProveCommitAggregateParams, + ProveCommitSectorParams, ProveReplicaUpdatesParams, }; register_actor_methods!( @@ -151,8 +166,11 @@ fn register_miner_version_8(registry: &mut MethodRegistry, cid: Cid) { (Method::ChangeOwnerAddress, Address), (Method::PreCommitSector, PreCommitSectorParams), (Method::ProveCommitSector, ProveCommitSectorParams), + (Method::ExtendSectorExpiration, ExtendSectorExpirationParams), (Method::PreCommitSectorBatch, PreCommitSectorBatchParams), (Method::ConfirmSectorProofsValid, ConfirmSectorProofsParams), + (Method::ProveCommitAggregate, ProveCommitAggregateParams), + (Method::ProveReplicaUpdates, ProveReplicaUpdatesParams), ] ); @@ -163,9 +181,10 @@ fn register_miner_version_9(registry: &mut MethodRegistry, cid: Cid) { register_miner_basic_methods!(registry, cid, fil_actor_miner_state::v9); use fil_actor_miner_state::v9::{ - ChangeBeneficiaryParams, ConfirmSectorProofsParams, ExtendSectorExpiration2Params, Method, - PreCommitSectorBatchParams, PreCommitSectorBatchParams2, PreCommitSectorParams, - ProveCommitSectorParams, ProveReplicaUpdatesParams2, + ChangeBeneficiaryParams, ConfirmSectorProofsParams, ExtendSectorExpiration2Params, + ExtendSectorExpirationParams, Method, PreCommitSectorBatchParams, + PreCommitSectorBatchParams2, PreCommitSectorParams, ProveCommitAggregateParams, + ProveCommitSectorParams, ProveReplicaUpdatesParams, ProveReplicaUpdatesParams2, }; register_actor_methods!( @@ -174,6 +193,7 @@ fn register_miner_version_9(registry: &mut MethodRegistry, cid: Cid) { [ (Method::PreCommitSector, PreCommitSectorParams), (Method::ProveCommitSector, ProveCommitSectorParams), + (Method::ExtendSectorExpiration, ExtendSectorExpirationParams), (Method::PreCommitSectorBatch, PreCommitSectorBatchParams), (Method::PreCommitSectorBatch2, PreCommitSectorBatchParams2), (Method::ChangeOwnerAddress, Address), @@ -184,6 +204,8 @@ fn register_miner_version_9(registry: &mut MethodRegistry, cid: Cid) { ExtendSectorExpiration2Params ), (Method::ConfirmSectorProofsValid, ConfirmSectorProofsParams), + (Method::ProveCommitAggregate, ProveCommitAggregateParams), + (Method::ProveReplicaUpdates, ProveReplicaUpdatesParams), ] ); @@ -201,9 +223,9 @@ fn register_miner_version_10(registry: &mut MethodRegistry, cid: Cid) { register_miner_common_methods_v10_onwards!(registry, cid, fil_actor_miner_state::v10); use fil_actor_miner_state::v10::{ - ConfirmSectorProofsParams, ExtendSectorExpiration2Params, Method, - PreCommitSectorBatchParams, PreCommitSectorParams, ProveCommitSectorParams, - ProveReplicaUpdatesParams2, + ConfirmSectorProofsParams, ExtendSectorExpiration2Params, ExtendSectorExpirationParams, + Method, PreCommitSectorBatchParams, PreCommitSectorParams, ProveCommitAggregateParams, + ProveCommitSectorParams, ProveReplicaUpdatesParams, ProveReplicaUpdatesParams2, }; register_actor_methods!( @@ -211,6 +233,7 @@ fn register_miner_version_10(registry: &mut MethodRegistry, cid: Cid) { cid, [ (Method::PreCommitSector, PreCommitSectorParams), + (Method::ExtendSectorExpiration, ExtendSectorExpirationParams), (Method::ProveReplicaUpdates2, ProveReplicaUpdatesParams2), (Method::ProveCommitSector, ProveCommitSectorParams), (Method::PreCommitSectorBatch, PreCommitSectorBatchParams), @@ -221,6 +244,8 @@ fn register_miner_version_10(registry: &mut MethodRegistry, cid: Cid) { (Method::ChangeOwnerAddress, Address), (Method::ChangeOwnerAddressExported, Address), (Method::ConfirmSectorProofsValid, ConfirmSectorProofsParams), + (Method::ProveCommitAggregate, ProveCommitAggregateParams), + (Method::ProveReplicaUpdates, ProveReplicaUpdatesParams), ] ); } @@ -229,8 +254,9 @@ fn register_miner_version_11(registry: &mut MethodRegistry, cid: Cid) { register_miner_common_methods_v10_onwards!(registry, cid, fil_actor_miner_state::v11); use fil_actor_miner_state::v11::{ - ChangeOwnerAddressParams, ConfirmSectorProofsParams, ExtendSectorExpiration2Params, Method, - PreCommitSectorBatchParams, PreCommitSectorParams, ProveCommitSectorParams, + ChangeOwnerAddressParams, ConfirmSectorProofsParams, ExtendSectorExpiration2Params, + ExtendSectorExpirationParams, Method, PreCommitSectorBatchParams, PreCommitSectorParams, + ProveCommitAggregateParams, ProveCommitSectorParams, ProveReplicaUpdatesParams, ProveReplicaUpdatesParams2, }; @@ -239,6 +265,7 @@ fn register_miner_version_11(registry: &mut MethodRegistry, cid: Cid) { cid, [ (Method::PreCommitSector, PreCommitSectorParams), + (Method::ExtendSectorExpiration, ExtendSectorExpirationParams), (Method::ProveReplicaUpdates2, ProveReplicaUpdatesParams2), (Method::ProveCommitSector, ProveCommitSectorParams), (Method::PreCommitSectorBatch, PreCommitSectorBatchParams), @@ -249,6 +276,8 @@ fn register_miner_version_11(registry: &mut MethodRegistry, cid: Cid) { (Method::ChangeOwnerAddress, ChangeOwnerAddressParams), (Method::ChangeOwnerAddressExported, ChangeOwnerAddressParams), (Method::ConfirmSectorProofsValid, ConfirmSectorProofsParams), + (Method::ProveCommitAggregate, ProveCommitAggregateParams), + (Method::ProveReplicaUpdates, ProveReplicaUpdatesParams), ] ); } @@ -257,8 +286,9 @@ fn register_miner_version_12(registry: &mut MethodRegistry, cid: Cid) { register_miner_common_methods_v10_onwards!(registry, cid, fil_actor_miner_state::v12); use fil_actor_miner_state::v12::{ - ChangeOwnerAddressParams, ConfirmSectorProofsParams, Method, PreCommitSectorBatchParams, - PreCommitSectorParams, ProveCommitSectorParams, ProveReplicaUpdatesParams2, + ChangeOwnerAddressParams, ConfirmSectorProofsParams, ExtendSectorExpirationParams, Method, + PreCommitSectorBatchParams, PreCommitSectorParams, ProveCommitAggregateParams, + ProveCommitSectorParams, ProveReplicaUpdatesParams, ProveReplicaUpdatesParams2, }; register_actor_methods!( registry, @@ -267,10 +297,13 @@ fn register_miner_version_12(registry: &mut MethodRegistry, cid: Cid) { (Method::PreCommitSector, PreCommitSectorParams), (Method::ProveReplicaUpdates2, ProveReplicaUpdatesParams2), (Method::ProveCommitSector, ProveCommitSectorParams), + (Method::ExtendSectorExpiration, ExtendSectorExpirationParams), (Method::PreCommitSectorBatch, PreCommitSectorBatchParams), (Method::ChangeOwnerAddress, ChangeOwnerAddressParams), (Method::ChangeOwnerAddressExported, ChangeOwnerAddressParams), (Method::ConfirmSectorProofsValid, ConfirmSectorProofsParams), + (Method::ProveCommitAggregate, ProveCommitAggregateParams), + (Method::ProveReplicaUpdates, ProveReplicaUpdatesParams), ] ); } @@ -279,18 +312,22 @@ fn register_miner_version_13(registry: &mut MethodRegistry, cid: Cid) { register_miner_common_methods_v10_onwards!(registry, cid, fil_actor_miner_state::v13); use fil_actor_miner_state::v13::{ - ChangeOwnerAddressParams, ConfirmSectorProofsParams, Method, ProveCommitSectorParams, - ProveCommitSectors3Params, + ChangeOwnerAddressParams, ConfirmSectorProofsParams, ExtendSectorExpirationParams, Method, + ProveCommitAggregateParams, ProveCommitSectorParams, ProveCommitSectors3Params, + ProveReplicaUpdatesParams, }; register_actor_methods!( registry, cid, [ (Method::ProveCommitSector, ProveCommitSectorParams), + (Method::ExtendSectorExpiration, ExtendSectorExpirationParams), (Method::ProveCommitSectors3, ProveCommitSectors3Params), (Method::ChangeOwnerAddress, ChangeOwnerAddressParams), (Method::ChangeOwnerAddressExported, ChangeOwnerAddressParams), (Method::ConfirmSectorProofsValid, ConfirmSectorProofsParams), + (Method::ProveCommitAggregate, ProveCommitAggregateParams), + (Method::ProveReplicaUpdates, ProveReplicaUpdatesParams), ] ); } @@ -298,38 +335,77 @@ fn register_miner_version_13(registry: &mut MethodRegistry, cid: Cid) { fn register_miner_versions_14(registry: &mut MethodRegistry, cid: Cid) { register_miner_common_methods_v10_onwards!(registry, cid, fil_actor_miner_state::v14); register_miner_common_method_v14_onwards!(registry, cid, fil_actor_miner_state::v14); + use fil_actor_miner_state::v14::{ + ExtendSectorExpirationParams, Method, ProveCommitAggregateParams, ProveReplicaUpdatesParams, + }; + register_actor_methods!( + registry, + cid, + [ + (Method::ExtendSectorExpiration, ExtendSectorExpirationParams), + (Method::ProveCommitAggregate, ProveCommitAggregateParams), + (Method::ProveReplicaUpdates, ProveReplicaUpdatesParams), + ] + ); } fn register_miner_version_15(registry: &mut MethodRegistry, cid: Cid) { register_miner_common_methods_v10_onwards!(registry, cid, fil_actor_miner_state::v15); register_miner_common_method_v14_onwards!(registry, cid, fil_actor_miner_state::v15); + use fil_actor_miner_state::v15::{ + ExtendSectorExpirationParams, Method, ProveCommitAggregateParams, ProveReplicaUpdatesParams, + }; + register_actor_methods!( + registry, + cid, + [ + (Method::ExtendSectorExpiration, ExtendSectorExpirationParams), + (Method::ProveCommitAggregate, ProveCommitAggregateParams), + (Method::ProveReplicaUpdates, ProveReplicaUpdatesParams), + ] + ); } fn register_miner_version_16(registry: &mut MethodRegistry, cid: Cid) { register_miner_common_methods_v10_onwards!(registry, cid, fil_actor_miner_state::v16); register_miner_common_method_v14_onwards!(registry, cid, fil_actor_miner_state::v16); + register_miner_common_method_v16_onwards!(registry, cid, fil_actor_miner_state::v16); - use fil_actor_miner_state::v16::{MaxTerminationFeeParams, Method}; + use fil_actor_miner_state::v16::{ + ExtendSectorExpirationParams, Method, ProveCommitAggregateParams, ProveReplicaUpdatesParams, + }; register_actor_methods!( registry, cid, - [(Method::MaxTerminationFeeExported, MaxTerminationFeeParams),] + [ + (Method::ExtendSectorExpiration, ExtendSectorExpirationParams), + (Method::ProveCommitAggregate, ProveCommitAggregateParams), + (Method::ProveReplicaUpdates, ProveReplicaUpdatesParams), + ] ); +} - register_actor_methods!(registry, cid, [(Method::InitialPledgeExported, empty)]); +fn register_miner_version_17(registry: &mut MethodRegistry, cid: Cid) { + register_miner_common_methods_v10_onwards!(registry, cid, fil_actor_miner_state::v17); + register_miner_common_method_v14_onwards!(registry, cid, fil_actor_miner_state::v17); + register_miner_common_method_v16_onwards!(registry, cid, fil_actor_miner_state::v17); } -pub(crate) fn register_miner_actor_methods(registry: &mut MethodRegistry, cid: Cid, version: u64) { +pub(crate) fn register_miner_actor_methods( + registry: &mut MethodRegistry, + cid: Cid, + version: ActorVersion, +) { match version { - 8 => register_miner_version_8(registry, cid), - 9 => register_miner_version_9(registry, cid), - 10 => register_miner_version_10(registry, cid), - 11 => register_miner_version_11(registry, cid), - 12 => register_miner_version_12(registry, cid), - 13 => register_miner_version_13(registry, cid), - 14 => register_miner_versions_14(registry, cid), - 15 => register_miner_version_15(registry, cid), - 16 => register_miner_version_16(registry, cid), - _ => {} + ActorVersion::V8 => register_miner_version_8(registry, cid), + ActorVersion::V9 => register_miner_version_9(registry, cid), + ActorVersion::V10 => register_miner_version_10(registry, cid), + ActorVersion::V11 => register_miner_version_11(registry, cid), + ActorVersion::V12 => register_miner_version_12(registry, cid), + ActorVersion::V13 => register_miner_version_13(registry, cid), + ActorVersion::V14 => register_miner_versions_14(registry, cid), + ActorVersion::V15 => register_miner_version_15(registry, cid), + ActorVersion::V16 => register_miner_version_16(registry, cid), + ActorVersion::V17 => register_miner_version_17(registry, cid), } } diff --git a/src/rpc/registry/actors/multisig.rs b/src/rpc/registry/actors/multisig.rs index b7b6c689ce6a..7e56c1170dae 100644 --- a/src/rpc/registry/actors/multisig.rs +++ b/src/rpc/registry/actors/multisig.rs @@ -4,6 +4,7 @@ use crate::rpc::registry::methods_reg::{MethodRegistry, register_actor_methods}; use crate::shim::message::MethodNum; use cid::Cid; +use fil_actors_shared::actor_versions::ActorVersion; // Macro for version 8 that doesn't have UniversalReceiverHook macro_rules! register_multisig_v8 { @@ -72,17 +73,37 @@ macro_rules! register_multisig_v9_plus { }}; } -pub(crate) fn register_actor_methods(registry: &mut MethodRegistry, cid: Cid, version: u64) { +pub(crate) fn register_actor_methods( + registry: &mut MethodRegistry, + cid: Cid, + version: ActorVersion, +) { match version { - 8 => register_multisig_v8!(registry, cid, fil_actor_multisig_state::v8), - 9 => register_multisig_v9_plus!(registry, cid, fil_actor_multisig_state::v9), - 10 => register_multisig_v9_plus!(registry, cid, fil_actor_multisig_state::v10), - 11 => register_multisig_v9_plus!(registry, cid, fil_actor_multisig_state::v11), - 12 => register_multisig_v9_plus!(registry, cid, fil_actor_multisig_state::v12), - 13 => register_multisig_v9_plus!(registry, cid, fil_actor_multisig_state::v13), - 14 => register_multisig_v9_plus!(registry, cid, fil_actor_multisig_state::v14), - 15 => register_multisig_v9_plus!(registry, cid, fil_actor_multisig_state::v15), - 16 => register_multisig_v9_plus!(registry, cid, fil_actor_multisig_state::v16), - _ => {} + ActorVersion::V8 => register_multisig_v8!(registry, cid, fil_actor_multisig_state::v8), + ActorVersion::V9 => register_multisig_v9_plus!(registry, cid, fil_actor_multisig_state::v9), + ActorVersion::V10 => { + register_multisig_v9_plus!(registry, cid, fil_actor_multisig_state::v10) + } + ActorVersion::V11 => { + register_multisig_v9_plus!(registry, cid, fil_actor_multisig_state::v11) + } + ActorVersion::V12 => { + register_multisig_v9_plus!(registry, cid, fil_actor_multisig_state::v12) + } + ActorVersion::V13 => { + register_multisig_v9_plus!(registry, cid, fil_actor_multisig_state::v13) + } + ActorVersion::V14 => { + register_multisig_v9_plus!(registry, cid, fil_actor_multisig_state::v14) + } + ActorVersion::V15 => { + register_multisig_v9_plus!(registry, cid, fil_actor_multisig_state::v15) + } + ActorVersion::V16 => { + register_multisig_v9_plus!(registry, cid, fil_actor_multisig_state::v16) + } + ActorVersion::V17 => { + register_multisig_v9_plus!(registry, cid, fil_actor_multisig_state::v17) + } } } diff --git a/src/rpc/registry/actors/payment_channel.rs b/src/rpc/registry/actors/payment_channel.rs index 7176c4484d60..9d49c0ce4604 100644 --- a/src/rpc/registry/actors/payment_channel.rs +++ b/src/rpc/registry/actors/payment_channel.rs @@ -4,12 +4,12 @@ use crate::rpc::registry::methods_reg::{MethodRegistry, register_actor_methods}; use crate::shim::message::MethodNum; use cid::Cid; +use fil_actors_shared::actor_versions::ActorVersion; -macro_rules! register_payment_channel_reg_versions { - ($registry:expr, $code_cid:expr, $version:literal) => {{ - paste::paste!{ - use fil_actor_paych_state::[]::{ConstructorParams, Method, UpdateChannelStateParams}; - } +// Payment channel methods are consistent across all versions V8-V16 +macro_rules! register_payment_channel_methods { + ($registry:expr, $code_cid:expr, $state_version:path) => {{ + use $state_version::{ConstructorParams, Method, UpdateChannelStateParams}; // Register methods with parameters register_actor_methods!( @@ -30,16 +30,41 @@ macro_rules! register_payment_channel_reg_versions { }}; } -pub(crate) fn register_actor_methods(registry: &mut MethodRegistry, cid: Cid, version: u64) { - macro_rules! register_versions { - ($($version:literal),+) => {{ - match version { - $( - $version => register_payment_channel_reg_versions!(registry, cid, $version), - )+ - _ => {} - } - }}; +pub(crate) fn register_actor_methods( + registry: &mut MethodRegistry, + cid: Cid, + version: ActorVersion, +) { + match version { + ActorVersion::V8 => { + register_payment_channel_methods!(registry, cid, fil_actor_paych_state::v8) + } + ActorVersion::V9 => { + register_payment_channel_methods!(registry, cid, fil_actor_paych_state::v9) + } + ActorVersion::V10 => { + register_payment_channel_methods!(registry, cid, fil_actor_paych_state::v10) + } + ActorVersion::V11 => { + register_payment_channel_methods!(registry, cid, fil_actor_paych_state::v11) + } + ActorVersion::V12 => { + register_payment_channel_methods!(registry, cid, fil_actor_paych_state::v12) + } + ActorVersion::V13 => { + register_payment_channel_methods!(registry, cid, fil_actor_paych_state::v13) + } + ActorVersion::V14 => { + register_payment_channel_methods!(registry, cid, fil_actor_paych_state::v14) + } + ActorVersion::V15 => { + register_payment_channel_methods!(registry, cid, fil_actor_paych_state::v15) + } + ActorVersion::V16 => { + register_payment_channel_methods!(registry, cid, fil_actor_paych_state::v16) + } + ActorVersion::V17 => { + register_payment_channel_methods!(registry, cid, fil_actor_paych_state::v17) + } } - register_versions!(8, 9, 10, 11, 12, 13, 14, 15, 16) } diff --git a/src/rpc/registry/actors/power.rs b/src/rpc/registry/actors/power.rs index 50b0a1b06472..461f5e8c34bf 100644 --- a/src/rpc/registry/actors/power.rs +++ b/src/rpc/registry/actors/power.rs @@ -4,6 +4,7 @@ use crate::rpc::registry::methods_reg::{MethodRegistry, register_actor_methods}; use crate::shim::message::MethodNum; use cid::Cid; +use fil_actors_shared::actor_versions::ActorVersion; // Macro for versions 8-9 that have limited methods macro_rules! register_power_versions_8_to_9 { @@ -75,7 +76,7 @@ macro_rules! register_power_versions_10_to_15 { } // Macro for version 16 that has all methods -macro_rules! register_power_version_16 { +macro_rules! register_power_version_16_onwards { ($registry:expr, $code_cid:expr, $state_version:path) => {{ use $state_version::{ CreateMinerParams, EnrollCronEventParams, Method, MinerPowerParams, @@ -113,17 +114,41 @@ macro_rules! register_power_version_16 { }}; } -pub(crate) fn register_actor_methods(registry: &mut MethodRegistry, cid: Cid, version: u64) { +pub(crate) fn register_actor_methods( + registry: &mut MethodRegistry, + cid: Cid, + version: ActorVersion, +) { match version { - 8 => register_power_versions_8_to_9!(registry, cid, fil_actor_power_state::v8), - 9 => register_power_versions_8_to_9!(registry, cid, fil_actor_power_state::v9), - 10 => register_power_versions_10_to_15!(registry, cid, fil_actor_power_state::v10), - 11 => register_power_versions_10_to_15!(registry, cid, fil_actor_power_state::v11), - 12 => register_power_versions_10_to_15!(registry, cid, fil_actor_power_state::v12), - 13 => register_power_versions_10_to_15!(registry, cid, fil_actor_power_state::v13), - 14 => register_power_versions_10_to_15!(registry, cid, fil_actor_power_state::v14), - 15 => register_power_versions_10_to_15!(registry, cid, fil_actor_power_state::v15), - 16 => register_power_version_16!(registry, cid, fil_actor_power_state::v16), - _ => {} + ActorVersion::V8 => { + register_power_versions_8_to_9!(registry, cid, fil_actor_power_state::v8) + } + ActorVersion::V9 => { + register_power_versions_8_to_9!(registry, cid, fil_actor_power_state::v9) + } + ActorVersion::V10 => { + register_power_versions_10_to_15!(registry, cid, fil_actor_power_state::v10) + } + ActorVersion::V11 => { + register_power_versions_10_to_15!(registry, cid, fil_actor_power_state::v11) + } + ActorVersion::V12 => { + register_power_versions_10_to_15!(registry, cid, fil_actor_power_state::v12) + } + ActorVersion::V13 => { + register_power_versions_10_to_15!(registry, cid, fil_actor_power_state::v13) + } + ActorVersion::V14 => { + register_power_versions_10_to_15!(registry, cid, fil_actor_power_state::v14) + } + ActorVersion::V15 => { + register_power_versions_10_to_15!(registry, cid, fil_actor_power_state::v15) + } + ActorVersion::V16 => { + register_power_version_16_onwards!(registry, cid, fil_actor_power_state::v16) + } + ActorVersion::V17 => { + register_power_version_16_onwards!(registry, cid, fil_actor_power_state::v17) + } } } diff --git a/src/rpc/registry/actors/reward.rs b/src/rpc/registry/actors/reward.rs index 344459dc94d0..bc9f6f41b69b 100644 --- a/src/rpc/registry/actors/reward.rs +++ b/src/rpc/registry/actors/reward.rs @@ -4,6 +4,7 @@ use crate::rpc::registry::methods_reg::{MethodRegistry, register_actor_methods}; use crate::shim::message::MethodNum; use cid::Cid; +use fil_actors_shared::actor_versions::ActorVersion; macro_rules! register_reward_version_11_to_16 { ($registry:expr, $code_cid:expr, $state_version:path) => {{ @@ -46,15 +47,19 @@ macro_rules! register_reward_version_8_to_10 { }}; } -pub(crate) fn register_actor_methods(registry: &mut MethodRegistry, cid: Cid, version: u64) { +pub(crate) fn register_actor_methods( + registry: &mut MethodRegistry, + cid: Cid, + version: ActorVersion, +) { match version { - 8 => { + ActorVersion::V8 => { register_reward_version_8_to_10!(registry, cid, fil_actor_reward_state::v8, fvm_shared2) } - 9 => { + ActorVersion::V9 => { register_reward_version_8_to_10!(registry, cid, fil_actor_reward_state::v9, fvm_shared2) } - 10 => { + ActorVersion::V10 => { register_reward_version_8_to_10!( registry, cid, @@ -62,12 +67,26 @@ pub(crate) fn register_actor_methods(registry: &mut MethodRegistry, cid: Cid, ve fvm_shared3 ) } - 11 => register_reward_version_11_to_16!(registry, cid, fil_actor_reward_state::v11), - 12 => register_reward_version_11_to_16!(registry, cid, fil_actor_reward_state::v12), - 13 => register_reward_version_11_to_16!(registry, cid, fil_actor_reward_state::v13), - 14 => register_reward_version_11_to_16!(registry, cid, fil_actor_reward_state::v14), - 15 => register_reward_version_11_to_16!(registry, cid, fil_actor_reward_state::v15), - 16 => register_reward_version_11_to_16!(registry, cid, fil_actor_reward_state::v16), - _ => {} + ActorVersion::V11 => { + register_reward_version_11_to_16!(registry, cid, fil_actor_reward_state::v11) + } + ActorVersion::V12 => { + register_reward_version_11_to_16!(registry, cid, fil_actor_reward_state::v12) + } + ActorVersion::V13 => { + register_reward_version_11_to_16!(registry, cid, fil_actor_reward_state::v13) + } + ActorVersion::V14 => { + register_reward_version_11_to_16!(registry, cid, fil_actor_reward_state::v14) + } + ActorVersion::V15 => { + register_reward_version_11_to_16!(registry, cid, fil_actor_reward_state::v15) + } + ActorVersion::V16 => { + register_reward_version_11_to_16!(registry, cid, fil_actor_reward_state::v16) + } + ActorVersion::V17 => { + register_reward_version_11_to_16!(registry, cid, fil_actor_reward_state::v17) + } } } diff --git a/src/rpc/registry/actors/system.rs b/src/rpc/registry/actors/system.rs index 2cf78002c41f..e6573d17fc1c 100644 --- a/src/rpc/registry/actors/system.rs +++ b/src/rpc/registry/actors/system.rs @@ -4,6 +4,7 @@ use crate::rpc::registry::methods_reg::{MethodRegistry, register_actor_methods}; use crate::shim::message::MethodNum; use cid::Cid; +use fil_actors_shared::actor_versions::ActorVersion; macro_rules! register_system_version { ($registry:expr, $code_cid:expr, $state_version:path) => {{ @@ -19,17 +20,21 @@ macro_rules! register_system_version { }}; } -pub(crate) fn register_actor_methods(registry: &mut MethodRegistry, cid: Cid, version: u64) { +pub(crate) fn register_actor_methods( + registry: &mut MethodRegistry, + cid: Cid, + version: ActorVersion, +) { match version { - 8 => register_system_version!(registry, cid, fil_actor_system_state::v8), - 9 => register_system_version!(registry, cid, fil_actor_system_state::v9), - 10 => register_system_version!(registry, cid, fil_actor_system_state::v10), - 11 => register_system_version!(registry, cid, fil_actor_system_state::v11), - 12 => register_system_version!(registry, cid, fil_actor_system_state::v12), - 13 => register_system_version!(registry, cid, fil_actor_system_state::v13), - 14 => register_system_version!(registry, cid, fil_actor_system_state::v14), - 15 => register_system_version!(registry, cid, fil_actor_system_state::v15), - 16 => register_system_version!(registry, cid, fil_actor_system_state::v16), - _ => {} + ActorVersion::V8 => register_system_version!(registry, cid, fil_actor_system_state::v8), + ActorVersion::V9 => register_system_version!(registry, cid, fil_actor_system_state::v9), + ActorVersion::V10 => register_system_version!(registry, cid, fil_actor_system_state::v10), + ActorVersion::V11 => register_system_version!(registry, cid, fil_actor_system_state::v11), + ActorVersion::V12 => register_system_version!(registry, cid, fil_actor_system_state::v12), + ActorVersion::V13 => register_system_version!(registry, cid, fil_actor_system_state::v13), + ActorVersion::V14 => register_system_version!(registry, cid, fil_actor_system_state::v14), + ActorVersion::V15 => register_system_version!(registry, cid, fil_actor_system_state::v15), + ActorVersion::V16 => register_system_version!(registry, cid, fil_actor_system_state::v16), + ActorVersion::V17 => register_system_version!(registry, cid, fil_actor_system_state::v17), } } diff --git a/src/rpc/registry/actors/verified_reg.rs b/src/rpc/registry/actors/verified_reg.rs index 719b789fad62..ee71ed12a681 100644 --- a/src/rpc/registry/actors/verified_reg.rs +++ b/src/rpc/registry/actors/verified_reg.rs @@ -5,6 +5,7 @@ use crate::rpc::registry::methods_reg::{MethodRegistry, register_actor_methods}; use crate::shim::address::Address; use crate::shim::message::MethodNum; use cid::Cid; +use fil_actors_shared::actor_versions::ActorVersion; use paste::paste; // Core methods present in all versions @@ -235,17 +236,33 @@ macro_rules! register_verified_reg_v12_plus { }}; } -pub(crate) fn register_actor_methods(registry: &mut MethodRegistry, cid: Cid, version: u64) { +pub(crate) fn register_actor_methods( + registry: &mut MethodRegistry, + cid: Cid, + version: ActorVersion, +) { match version { - 8 => register_verified_reg_v8(registry, cid), - 9 => register_verified_reg_v9(registry, cid), - 10 => register_verified_reg_v10(registry, cid), - 11 => register_verified_reg_v11(registry, cid), - 12 => register_verified_reg_v12_plus!(registry, cid, fil_actor_verifreg_state::v12, v12), - 13 => register_verified_reg_v12_plus!(registry, cid, fil_actor_verifreg_state::v13, v13), - 14 => register_verified_reg_v12_plus!(registry, cid, fil_actor_verifreg_state::v14, v14), - 15 => register_verified_reg_v12_plus!(registry, cid, fil_actor_verifreg_state::v15, v15), - 16 => register_verified_reg_v12_plus!(registry, cid, fil_actor_verifreg_state::v16, v16), - _ => {} + ActorVersion::V8 => register_verified_reg_v8(registry, cid), + ActorVersion::V9 => register_verified_reg_v9(registry, cid), + ActorVersion::V10 => register_verified_reg_v10(registry, cid), + ActorVersion::V11 => register_verified_reg_v11(registry, cid), + ActorVersion::V12 => { + register_verified_reg_v12_plus!(registry, cid, fil_actor_verifreg_state::v12, v12) + } + ActorVersion::V13 => { + register_verified_reg_v12_plus!(registry, cid, fil_actor_verifreg_state::v13, v13) + } + ActorVersion::V14 => { + register_verified_reg_v12_plus!(registry, cid, fil_actor_verifreg_state::v14, v14) + } + ActorVersion::V15 => { + register_verified_reg_v12_plus!(registry, cid, fil_actor_verifreg_state::v15, v15) + } + ActorVersion::V16 => { + register_verified_reg_v12_plus!(registry, cid, fil_actor_verifreg_state::v16, v16) + } + ActorVersion::V17 => { + register_verified_reg_v12_plus!(registry, cid, fil_actor_verifreg_state::v17, v17) + } } } diff --git a/src/rpc/registry/actors_reg.rs b/src/rpc/registry/actors_reg.rs index 83225e76b472..f990a51d4764 100644 --- a/src/rpc/registry/actors_reg.rs +++ b/src/rpc/registry/actors_reg.rs @@ -13,20 +13,23 @@ use crate::shim::machine::BuiltinActor; use ahash::{HashMap, HashMapExt}; use anyhow::{Context, Result, anyhow}; use cid::Cid; +use fil_actors_shared::actor_versions::ActorVersion; use fvm_ipld_blockstore::Blockstore; use serde_json::Value; use std::sync::LazyLock; #[derive(Debug)] pub struct ActorRegistry { - map: HashMap, + map: HashMap, } impl ActorRegistry { fn new() -> Self { let mut map = HashMap::new(); for ((_, _), metadata) in ACTOR_BUNDLES_METADATA.iter() { - if let Ok(version) = metadata.actor_major_version() { + if let Ok(version_u64) = metadata.actor_major_version() + && let Some(version) = ActorVersion::from_repr(version_u64 as u8) + { for (actor_type, cid) in metadata.manifest.builtin_actors() { map.insert(cid, (actor_type, version)); } @@ -35,7 +38,7 @@ impl ActorRegistry { Self { map } } - pub fn get_actor_details_from_code(code_cid: &Cid) -> Result<(BuiltinActor, u64)> { + pub fn get_actor_details_from_code(code_cid: &Cid) -> Result<(BuiltinActor, ActorVersion)> { ACTOR_REGISTRY .map .get(code_cid) @@ -43,7 +46,7 @@ impl ActorRegistry { .ok_or_else(|| anyhow!("Unknown actor code CID: {}", code_cid)) } - pub fn iter(&self) -> impl Iterator { + pub fn iter(&self) -> impl Iterator { self.map.iter() } } diff --git a/src/rpc/registry/methods_reg.rs b/src/rpc/registry/methods_reg.rs index f2587346db43..ff90f37bd0ae 100644 --- a/src/rpc/registry/methods_reg.rs +++ b/src/rpc/registry/methods_reg.rs @@ -8,6 +8,7 @@ use crate::shim::message::MethodNum; use ahash::{HashMap, HashMapExt}; use anyhow::{Context, Result, bail}; use cid::Cid; +use fil_actors_shared::v11::runtime::builtins::Type; use serde::de::DeserializeOwned; use serde_json::Value; use std::sync::LazyLock; @@ -65,10 +66,7 @@ impl MethodRegistry { let (actor_type, version) = ActorRegistry::get_actor_details_from_code(code_cid)?; bail!( - "No deserializer registered for actor type {:?} (v{}), method {}", - actor_type, - version, - method_num + "No deserializer registered for actor type {actor_type:?} ({version}), method {method_num}" ); } @@ -103,7 +101,7 @@ impl MethodRegistry { payment_channel::register_actor_methods(self, cid, version) } BuiltinActor::EAM => eam::register_actor_methods(self, cid, version), - _ => {} + Type::Placeholder => {} } } } @@ -158,12 +156,12 @@ mod test { use super::*; use crate::lotus_json::HasLotusJson; use crate::utils::multihash::MultihashCode; + use fil_actors_shared::actor_versions::ActorVersion; use fvm_ipld_encoding::{DAG_CBOR, to_vec}; use multihash_derive::MultihashDigest; use serde::{Deserialize, Serialize}; use serde_json::json; - const V16: u64 = 16; // Test parameter type for testing #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] struct TestParams { @@ -192,7 +190,7 @@ mod test { Cid::new_v1(DAG_CBOR, MultihashCode::Blake2b256.digest(data)) } - fn get_real_actor_cid(target_actor: BuiltinActor, target_version: u64) -> Option { + fn get_real_actor_cid(target_actor: BuiltinActor, target_version: ActorVersion) -> Option { ACTOR_REGISTRY .iter() .find_map(|(&cid, &(actor_type, version))| { @@ -252,7 +250,7 @@ mod test { #[test] fn test_deserialize_params_registered_actor_unregistered_method() { - if let Some(account_cid) = get_real_actor_cid(BuiltinActor::Account, V16) { + if let Some(account_cid) = get_real_actor_cid(BuiltinActor::Account, ActorVersion::V16) { let unregistered_method = 999; let result = deserialize_params(&account_cid, unregistered_method, &[]); @@ -277,7 +275,7 @@ mod test { ]; for actor_type in supported_actors { - let actor_cid = get_real_actor_cid(actor_type, V16).unwrap(); + let actor_cid = get_real_actor_cid(actor_type, ActorVersion::V16).unwrap(); // Test that the Constructor method (typically method 1) is registered let constructor_method = 1; @@ -325,7 +323,7 @@ mod test { #[test] fn test_system_actor_deserialize_params_cbor_null() { - let system_cid = get_real_actor_cid(BuiltinActor::System, V16) + let system_cid = get_real_actor_cid(BuiltinActor::System, ActorVersion::V16) .expect("Should have System actor CID in registry"); // Test with null data diff --git a/src/state_migration/nv27/mod.rs b/src/state_migration/nv27/mod.rs index 02b2c1c8d52a..52cded6a7efc 100644 --- a/src/state_migration/nv27/mod.rs +++ b/src/state_migration/nv27/mod.rs @@ -12,8 +12,7 @@ use crate::{define_system_states, impl_system, impl_verifier}; define_system_states!( fil_actor_system_state::v16::State, - // TODO(forest): https://github.com/ChainSafe/forest/issues/5985 - fil_actor_system_state::v16::State + fil_actor_system_state::v17::State ); impl_system!(); diff --git a/src/tool/subcommands/api_cmd.rs b/src/tool/subcommands/api_cmd.rs index fdebd3c4bfe9..7e193120eece 100644 --- a/src/tool/subcommands/api_cmd.rs +++ b/src/tool/subcommands/api_cmd.rs @@ -4,6 +4,7 @@ mod api_compare_tests; mod generate_test_snapshot; mod report; +mod state_decode_params_tests; mod stateful_tests; mod test_snapshot; diff --git a/src/tool/subcommands/api_cmd/api_compare_tests.rs b/src/tool/subcommands/api_cmd/api_compare_tests.rs index 31a39d1fcfee..99f93c90f89e 100644 --- a/src/tool/subcommands/api_cmd/api_compare_tests.rs +++ b/src/tool/subcommands/api_cmd/api_compare_tests.rs @@ -24,7 +24,7 @@ use crate::rpc::{Permission, prelude::*}; use crate::shim::actors::MarketActorStateLoad as _; use crate::shim::actors::market; use crate::shim::executor::Receipt; -use crate::shim::sector::{SectorSize, StoragePower}; +use crate::shim::sector::SectorSize; use crate::shim::{ address::{Address, Protocol}, crypto::Signature, @@ -36,10 +36,10 @@ use crate::state_manager::StateManager; use crate::tool::offline_server::server::handle_chain_config; use crate::tool::subcommands::api_cmd::NetworkChain; use crate::tool::subcommands::api_cmd::report::ReportBuilder; +use crate::tool::subcommands::api_cmd::state_decode_params_tests::create_all_state_decode_params_tests; use crate::utils::proofs_api::{self, ensure_proof_params_downloaded}; use crate::{Config, rpc}; use ahash::HashMap; -use base64::{Engine as _, prelude::BASE64_STANDARD}; use bls_signatures::Serialize as _; use chrono::Utc; use cid::Cid; @@ -48,13 +48,10 @@ use fil_actors_shared::v10::runtime::DomainSeparationTag; use futures::stream::FuturesUnordered; use futures::stream::StreamExt as _; use fvm_ipld_blockstore::Blockstore; -use fvm_ipld_encoding::{BytesDe, RawBytes, to_vec}; -use fvm_shared4::randomness::Randomness; use ipld_core::ipld::Ipld; use itertools::Itertools as _; use jsonrpsee::types::ErrorCode; use libp2p::PeerId; -use num_bigint::BigInt; use num_traits::Signed; use serde::de::DeserializeOwned; use serde::{Deserialize, Serialize}; @@ -330,7 +327,7 @@ impl RpcTest { } /// Check that an endpoint exists and that Forest returns exactly the same /// JSON as Lotus. - fn identity(request: rpc::Request) -> RpcTest { + pub(crate) fn identity(request: rpc::Request) -> RpcTest { Self::validate(request, |forest, lotus| forest == lotus) } @@ -855,7 +852,7 @@ fn state_tests_with_tipset( ]; tests.extend(read_state_api_tests(tipset)?); - tests.extend(state_decode_params_api_tests(tipset)?); + tests.extend(create_all_state_decode_params_tests(tipset)?); for &pending_deal_id in StateGetAllocationIdForPendingDeal::get_allocations_for_pending_deals(store, tipset)? @@ -1854,1763 +1851,6 @@ fn eth_tests_with_tipset(store: &Arc, shared_tipset: &Tipset tests } -fn state_decode_params_api_tests(tipset: &Tipset) -> anyhow::Result> { - // // TODO(go-state-types): https://github.com/filecoin-project/go-state-types/issues/396 - // // Enable this test when lotus supports it in go-state-types. - // let cron_constructor_params = fil_actor_cron_state::v16::ConstructorParams { - // entries: vec![fil_actor_cron_state::v16::Entry { - // receiver: Address::new_id(1000).into(), - // method_num: fil_actor_cron_state::v16::Method::EpochTick as u64, - // }], - // }; - let mut tests = vec![ - RpcTest::identity(StateDecodeParams::request(( - Address::SYSTEM_ACTOR, - fil_actor_system_state::v16::Method::Constructor as u64, - vec![], - tipset.key().into(), - ))?), - // // TODO(go-state-types): https://github.com/filecoin-project/go-state-types/issues/396 - // Enable this test when lotus supports it in go-state-types. - // RpcTest::identity(StateDecodeParams::request(( - // Address::CRON_ACTOR, - // fil_actor_cron_state::v16::Method::Constructor as u64, - // to_vec(&cron_constructor_params)?, - // tipset.key().into(), - // ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::CRON_ACTOR, - fil_actor_cron_state::v16::Method::EpochTick as u64, - 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)?); - tests.extend(account_actor_state_decode_params_tests(tipset)?); - tests.extend(init_actor_state_decode_params_tests(tipset)?); - tests.extend(evm_actor_state_decode_params_tests(tipset)?); - tests.extend(reward_actor_state_decode_params_tests(tipset)?); - tests.extend(power_actor_state_decode_params_tests(tipset)?); - tests.extend(datacap_actor_state_decode_params_tests(tipset)?); - tests.extend(multisig_actor_state_decode_params_tests(tipset)?); - tests.extend(verified_reg_actor_state_decode_params_tests(tipset)?); - tests.extend(market_actor_state_decode_params_tests(tipset)?); - tests.extend(paych_actor_state_decode_params_tests(tipset)?); - tests.extend(eam_actor_state_decode_params_tests(tipset)?); - - Ok(tests) -} - -fn paych_actor_state_decode_params_tests(tipset: &Tipset) -> anyhow::Result> { - // payment channel actor address `t066116` - // https://calibration.filscan.io/en/address/t066116/ - let paych_address = Address::new_id(66116); - - let constructor_params = fil_actor_paych_state::v16::ConstructorParams { - from: Address::new_id(1234).into(), - to: Address::new_id(8457).into(), - }; - - let update_channel_state = fil_actor_paych_state::v16::UpdateChannelStateParams { - sv: fil_actor_paych_state::v16::SignedVoucher { - channel_addr: Address::new_id(1000).into(), - time_lock_min: 21, - time_lock_max: 234, - secret_pre_image: vec![], - extra: Some(fil_actor_paych_state::v16::ModVerifyParams { - actor: Address::new_id(1234).into(), - method: 223, - data: Default::default(), - }), - lane: 234, - nonce: 231, - amount: Default::default(), - min_settle_height: 0, - merges: vec![], - signature: None, - }, - secret: vec![0x11, 0x22, 0x33, 0x44, 0x55], // dummy data - }; - - Ok(vec![ - RpcTest::identity(StateDecodeParams::request(( - paych_address, - fil_actor_paych_state::v16::Method::Constructor as u64, - to_vec(&constructor_params).unwrap(), - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - paych_address, - fil_actor_paych_state::v16::Method::UpdateChannelState as u64, - to_vec(&update_channel_state).unwrap(), - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - paych_address, - fil_actor_paych_state::v16::Method::Settle as u64, - vec![], - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - paych_address, - fil_actor_paych_state::v16::Method::Collect as u64, - vec![], - tipset.key().into(), - ))?), - ]) -} - -fn eam_actor_state_decode_params_tests(tipset: &Tipset) -> anyhow::Result> { - let create_params = fil_actor_eam_state::v16::CreateParams { - initcode: vec![0x11, 0x22, 0x33, 0x44, 0x55], // dummy data - nonce: 2, - }; - - let create_params2 = fil_actor_eam_state::v16::Create2Params { - initcode: vec![0x11, 0x22, 0x33, 0x44, 0x55], // dummy data - salt: [0; 32], - }; - - let create_external_params = - fil_actor_eam_state::v16::CreateExternalParams(vec![0x11, 0x22, 0x33, 0x44, 0x55]); - - Ok(vec![ - RpcTest::identity(StateDecodeParams::request(( - Address::ETHEREUM_ACCOUNT_MANAGER_ACTOR, - fil_actor_eam_state::v16::Method::Constructor as u64, - vec![], - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::ETHEREUM_ACCOUNT_MANAGER_ACTOR, - fil_actor_eam_state::v16::Method::Create as u64, - to_vec(&create_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::ETHEREUM_ACCOUNT_MANAGER_ACTOR, - fil_actor_eam_state::v16::Method::Create2 as u64, - to_vec(&create_params2)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::ETHEREUM_ACCOUNT_MANAGER_ACTOR, - fil_actor_eam_state::v16::Method::CreateExternal as u64, - to_vec(&create_external_params)?, - tipset.key().into(), - ))?), - ]) -} - -fn evm_actor_state_decode_params_tests(tipset: &Tipset) -> anyhow::Result> { - let evm_constructor_params = fil_actor_evm_state::v16::ConstructorParams { - creator: fil_actor_evm_state::evm_shared::v16::address::EthAddress([0; 20]), - initcode: fvm_ipld_encoding::RawBytes::new(vec![0x12, 0x34, 0x56]), // dummy bytecode - }; - - let evm_invoke_contract_params = fil_actor_evm_state::v16::InvokeContractParams { - input_data: vec![0x11, 0x22, 0x33, 0x44, 0x55], // dummy input data - }; - - let evm_delegate_call_params = fil_actor_evm_state::v16::DelegateCallParams { - code: Cid::default(), - input: vec![0x11, 0x22, 0x33, 0x44, 0x55], // dummy input data - caller: fil_actor_evm_state::evm_shared::v16::address::EthAddress([0; 20]), - value: TokenAmount::default().into(), - }; - - let evm_get_storage_at_params = GetStorageAtParams::new(vec![0xa])?; - - let tests = vec![ - RpcTest::identity(StateDecodeParams::request(( - Address::from_str(EVM_ADDRESS).unwrap(), - fil_actor_evm_state::v16::Method::Constructor as u64, - to_vec(&evm_constructor_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::from_str(EVM_ADDRESS).unwrap(), - fil_actor_evm_state::v16::Method::Resurrect as u64, - to_vec(&evm_constructor_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::from_str(EVM_ADDRESS).unwrap(), - fil_actor_evm_state::v16::Method::GetBytecode as u64, - vec![], - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::from_str(EVM_ADDRESS).unwrap(), - fil_actor_evm_state::v16::Method::GetBytecodeHash as u64, - vec![], - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::from_str(EVM_ADDRESS).unwrap(), - fil_actor_evm_state::v16::Method::InvokeContract as u64, - to_vec(&evm_invoke_contract_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::from_str(EVM_ADDRESS).unwrap(), - fil_actor_evm_state::v16::Method::InvokeContractDelegate as u64, - to_vec(&evm_delegate_call_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::from_str(EVM_ADDRESS).unwrap(), - fil_actor_evm_state::v16::Method::GetStorageAt as u64, - evm_get_storage_at_params.serialize_params()?, - tipset.key().into(), - ))?), - ]; - - Ok(tests) -} - -fn account_actor_state_decode_params_tests(tipset: &Tipset) -> anyhow::Result> { - let account_constructor_params = fil_actor_account_state::v16::types::ConstructorParams { - address: Address::new_id(1234).into(), - }; - - let account_auth_params = fil_actor_account_state::v16::types::AuthenticateMessageParams { - signature: vec![0x00; 32], // dummy signature - message: b"test message".to_vec(), - }; - - Ok(vec![ - RpcTest::identity(StateDecodeParams::request(( - ACCOUNT_ADDRESS, - 1, - to_vec(&account_constructor_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - ACCOUNT_ADDRESS, - 2643134072, // frc42_dispatch::method_hash!("AuthenticateMessage"), - to_vec(&account_auth_params)?, - tipset.key().into(), - ))?), - ]) -} - -fn init_actor_state_decode_params_tests(tipset: &Tipset) -> anyhow::Result> { - let init_constructor_params = fil_actor_init_state::v16::ConstructorParams { - network_name: "calibnet".to_string(), - }; - - let init_exec4_params = fil_actor_init_state::v16::Exec4Params { - code_cid: Cid::default(), - constructor_params: fvm_ipld_encoding::RawBytes::new(vec![0x12, 0x34, 0x56]), // dummy bytecode - subaddress: fvm_ipld_encoding::RawBytes::new(vec![0x12, 0x34, 0x56]), // dummy bytecode - }; - - let init_exec_params = fil_actor_init_state::v16::ExecParams { - code_cid: Cid::default(), - constructor_params: fvm_ipld_encoding::RawBytes::new(vec![0x12, 0x34, 0x56]), // dummy bytecode - }; - - Ok(vec![ - RpcTest::identity(StateDecodeParams::request(( - Address::INIT_ACTOR, - 1, - to_vec(&init_constructor_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::INIT_ACTOR, - 2, - to_vec(&init_exec_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::INIT_ACTOR, - 3, - to_vec(&init_exec4_params)?, - tipset.key().into(), - ))?), - ]) -} - -fn reward_actor_state_decode_params_tests(tipset: &Tipset) -> anyhow::Result> { - let reward_constructor_params = fil_actor_reward_state::v16::ConstructorParams { - power: Some(Default::default()), - }; - - let reward_award_block_reward_params = fil_actor_reward_state::v16::AwardBlockRewardParams { - miner: Address::new_id(1000).into(), - penalty: Default::default(), - gas_reward: Default::default(), - win_count: 0, - }; - - let reward_update_network_params = fil_actor_reward_state::v16::UpdateNetworkKPIParams { - curr_realized_power: Option::from(fvm_shared4::bigint::bigint_ser::BigIntDe(BigInt::from( - 111, - ))), - }; - - Ok(vec![ - RpcTest::identity(StateDecodeParams::request(( - Address::REWARD_ACTOR, - fil_actor_reward_state::v16::Method::Constructor as u64, - to_vec(&reward_constructor_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::REWARD_ACTOR, - fil_actor_reward_state::v16::Method::AwardBlockReward as u64, - to_vec(&reward_award_block_reward_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::REWARD_ACTOR, - fil_actor_reward_state::v16::Method::UpdateNetworkKPI as u64, - to_vec(&reward_update_network_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::REWARD_ACTOR, - fil_actor_reward_state::v16::Method::ThisEpochReward as u64, - vec![], - tipset.key().into(), - ))?), - ]) -} - -fn power_actor_state_decode_params_tests(tipset: &Tipset) -> anyhow::Result> { - let power_create_miner_params = fil_actor_power_state::v16::CreateMinerParams { - owner: Address::new_id(1000).into(), - worker: Address::new_id(1001).into(), - window_post_proof_type: fvm_shared4::sector::RegisteredPoStProof::StackedDRGWinning2KiBV1, - peer: b"miner".to_vec(), - multiaddrs: Default::default(), - }; - - // not supported by the lotus - // let _power_miner_power_exp_params = fil_actor_power_state::v16::MinerPowerParams{ - // miner: 1234, - // }; - - let power_update_claim_params = fil_actor_power_state::v16::UpdateClaimedPowerParams { - raw_byte_delta: StoragePower::from(1024u64), - quality_adjusted_delta: StoragePower::from(2048u64), - }; - - let power_enroll_event_params = fil_actor_power_state::v16::EnrollCronEventParams { - event_epoch: 123, - payload: Default::default(), - }; - - let power_update_pledge_ttl_params = fil_actor_power_state::v16::UpdatePledgeTotalParams { - pledge_delta: Default::default(), - }; - - let power_miner_raw_params = fil_actor_power_state::v16::MinerRawPowerParams { miner: 1234 }; - - Ok(vec![ - RpcTest::identity(StateDecodeParams::request(( - Address::POWER_ACTOR, - fil_actor_power_state::v16::Method::CreateMiner as u64, - to_vec(&power_create_miner_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::POWER_ACTOR, - fil_actor_power_state::v16::Method::UpdateClaimedPower as u64, - to_vec(&power_update_claim_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::POWER_ACTOR, - fil_actor_power_state::v16::Method::EnrollCronEvent as u64, - to_vec(&power_enroll_event_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::POWER_ACTOR, - fil_actor_power_state::v16::Method::UpdatePledgeTotal as u64, - to_vec(&power_update_pledge_ttl_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::POWER_ACTOR, - fil_actor_power_state::v16::Method::CreateMinerExported as u64, - to_vec(&power_create_miner_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::POWER_ACTOR, - fil_actor_power_state::v16::Method::MinerRawPowerExported as u64, - to_vec(&power_miner_raw_params)?, - tipset.key().into(), - ))?), - // Not supported by the lotus, - // TODO(go-state-types): https://github.com/filecoin-project/go-state-types/issues/401 - // RpcTest::identity(StateDecodeParams::request(( - // Address::POWER_ACTOR, - // Method::MinerPowerExported as u64, - // to_vec(&power_miner_power_exp_params)?, - // tipset.key().into(), - // ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::POWER_ACTOR, - fil_actor_power_state::v16::Method::Constructor as u64, - vec![], - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::POWER_ACTOR, - fil_actor_power_state::v16::Method::OnEpochTickEnd as u64, - vec![], - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::POWER_ACTOR, - fil_actor_power_state::v16::Method::CurrentTotalPower as u64, - vec![], - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::POWER_ACTOR, - fil_actor_power_state::v16::Method::NetworkRawPowerExported as u64, - vec![], - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::POWER_ACTOR, - fil_actor_power_state::v16::Method::MinerCountExported as u64, - vec![], - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::POWER_ACTOR, - fil_actor_power_state::v16::Method::MinerConsensusCountExported as u64, - vec![], - tipset.key().into(), - ))?), - ]) -} - -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) -} - -fn miner_actor_state_decode_params_tests(tipset: &Tipset) -> anyhow::Result> { - let miner_constructor_params = fil_actor_miner_state::v16::MinerConstructorParams { - owner: Address::new_id(1000).into(), - worker: Address::new_id(1001).into(), - control_addresses: vec![Address::new_id(1002).into(), Address::new_id(1003).into()], - window_post_proof_type: fvm_shared4::sector::RegisteredPoStProof::StackedDRGWindow32GiBV1P1, - peer_id: b"miner".to_vec(), - multi_addresses: Default::default(), - }; - - let miner_change_worker_params = fil_actor_miner_state::v16::ChangeWorkerAddressParams { - new_worker: Address::new_id(2000).into(), - new_control_addresses: vec![Address::new_id(2001).into()], - }; - - let miner_change_peer_id_params = fil_actor_miner_state::v16::ChangePeerIDParams { - new_id: b"new_peer".to_vec(), - }; - - let miner_change_multiaddrs_params = fil_actor_miner_state::v16::ChangeMultiaddrsParams { - new_multi_addrs: vec![BytesDe(vec![1, 2, 3])], - }; - - let miner_change_owner_params = fil_actor_miner_state::v16::ChangeOwnerAddressParams { - new_owner: Address::new_id(3000).into(), - }; - - let miner_change_beneficiary_params = fil_actor_miner_state::v16::ChangeBeneficiaryParams { - new_beneficiary: Address::new_id(4000).into(), - new_quota: TokenAmount::from_atto(1000000000000000000u64).into(), - new_expiration: 1000, - }; - - let miner_withdraw_balance_params = fil_actor_miner_state::v16::WithdrawBalanceParams { - amount_requested: TokenAmount::from_atto(500000000000000000u64).into(), - }; - - let miner_submit_windowed_post_params = fil_actor_miner_state::v16::SubmitWindowedPoStParams { - deadline: 0, - partitions: vec![fil_actor_miner_state::v16::PoStPartition { - index: 0, - skipped: Default::default(), - }], - proofs: vec![], - chain_commit_epoch: 0, - chain_commit_rand: Randomness(vec![1, 22, 43]), - }; - - let miner_extend_sector_expiration_params = - fil_actor_miner_state::v16::ExtendSectorExpirationParams { - extensions: vec![fil_actor_miner_state::v16::ExpirationExtension { - deadline: 12, - partition: 123, - sectors: Default::default(), - new_expiration: 1000, - }], - }; - - let miner_terminate_sectors_params = fil_actor_miner_state::v16::TerminateSectorsParams { - terminations: vec![fil_actor_miner_state::v16::TerminationDeclaration { - deadline: 0, - partition: 0, - sectors: Default::default(), - }], - }; - - let miner_declare_faults_params = fil_actor_miner_state::v16::DeclareFaultsParams { - faults: vec![fil_actor_miner_state::v16::FaultDeclaration { - deadline: 0, - partition: 0, - sectors: Default::default(), - }], - }; - - let miner_declare_faults_recovered_params = - fil_actor_miner_state::v16::DeclareFaultsRecoveredParams { - recoveries: vec![fil_actor_miner_state::v16::RecoveryDeclaration { - deadline: 0, - partition: 0, - sectors: Default::default(), - }], - }; - - let miner_deferred_cron_event_params = fil_actor_miner_state::v16::DeferredCronEventParams { - event_payload: vec![], - reward_smoothed: fil_actors_shared::v16::reward::FilterEstimate { - position: Default::default(), - velocity: Default::default(), - }, - quality_adj_power_smoothed: fil_actors_shared::v16::reward::FilterEstimate { - position: Default::default(), - velocity: Default::default(), - }, - }; - - let miner_check_sector_proven_params = - fil_actor_miner_state::v16::CheckSectorProvenParams { sector_number: 0 }; - - let miner_apply_reward_params = fil_actor_miner_state::v16::ApplyRewardParams { - reward: TokenAmount::from_atto(1000000000000000000u64).into(), - penalty: TokenAmount::from_atto(0u64).into(), - }; - - let miner_report_consensus_fault_params = - fil_actor_miner_state::v16::ReportConsensusFaultParams { - header1: vec![], - header2: vec![], - header_extra: vec![], - }; - - let miner_compact_partitions_params = fil_actor_miner_state::v16::CompactPartitionsParams { - deadline: 0, - partitions: Default::default(), - }; - - let miner_compact_sector_numbers_params = - fil_actor_miner_state::v16::CompactSectorNumbersParams { - mask_sector_numbers: Default::default(), - }; - - let miner_dispute_windowed_post_params = - fil_actor_miner_state::v16::DisputeWindowedPoStParams { - deadline: 0, - post_index: 0, - }; - - let miner_prove_commit_aggregate_params = - fil_actor_miner_state::v16::ProveCommitAggregateParams { - sector_numbers: Default::default(), - aggregate_proof: RawBytes::new(vec![]), - }; - - let miner_prove_replica_updates_params = - fil_actor_miner_state::v16::ProveReplicaUpdatesParams { - updates: vec![fil_actor_miner_state::v16::ReplicaUpdate { - sector_number: 0, - deadline: 0, - partition: 0, - new_sealed_cid: Cid::default(), - deals: vec![], - update_proof_type: fvm_shared4::sector::RegisteredUpdateProof::StackedDRG2KiBV1, - replica_proof: RawBytes::new(vec![]), - }], - }; - - let miner_pre_commit_sector_batch2_params = - fil_actor_miner_state::v16::PreCommitSectorBatchParams2 { - sectors: vec![fil_actor_miner_state::v16::SectorPreCommitInfo { - seal_proof: fvm_shared4::sector::RegisteredSealProof::StackedDRG2KiBV1P1, - sector_number: 0, - sealed_cid: Cid::default(), - seal_rand_epoch: 0, - deal_ids: vec![], - expiration: 1000, - unsealed_cid: fil_actor_miner_state::v16::CompactCommD(None), - }], - }; - - let miner_extend_sector_expiration2_params = - fil_actor_miner_state::v16::ExtendSectorExpiration2Params { - extensions: vec![fil_actor_miner_state::v16::ExpirationExtension2 { - deadline: 0, - partition: 0, - sectors: Default::default(), - sectors_with_claims: vec![], - new_expiration: 1000, - }], - }; - - let miner_is_controlling_address_param = - fil_actor_miner_state::v16::IsControllingAddressParam { - address: Address::new_id(5000).into(), - }; - - let miner_prove_commit_sectors3_params = - fil_actor_miner_state::v16::ProveCommitSectors3Params { - sector_activations: vec![fil_actor_miner_state::v16::SectorActivationManifest { - sector_number: 0, - pieces: vec![fil_actor_miner_state::v16::PieceActivationManifest { - cid: Cid::default(), - size: fvm_shared4::piece::PaddedPieceSize(23), - verified_allocation_key: None, - notify: vec![], - }], - }], - sector_proofs: vec![RawBytes::new(vec![])], - aggregate_proof: RawBytes::new(vec![]), - aggregate_proof_type: None, - require_activation_success: true, - require_notification_success: true, - }; - - let miner_prove_replica_updates3_params = - fil_actor_miner_state::v16::ProveReplicaUpdates3Params { - sector_updates: vec![fil_actor_miner_state::v16::SectorUpdateManifest { - sector: 0, - deadline: 0, - partition: 0, - new_sealed_cid: Cid::default(), - pieces: vec![fil_actor_miner_state::v16::PieceActivationManifest { - cid: Cid::default(), - size: fvm_shared4::piece::PaddedPieceSize(12), - verified_allocation_key: None, - notify: vec![], - }], - }], - sector_proofs: vec![RawBytes::new(vec![])], - aggregate_proof: RawBytes::new(vec![]), - update_proofs_type: fvm_shared4::sector::RegisteredUpdateProof::StackedDRG2KiBV1, - aggregate_proof_type: None, - require_activation_success: true, - require_notification_success: true, - }; - - let miner_prove_commit_sectors_ni_params = - fil_actor_miner_state::v16::ProveCommitSectorsNIParams { - sectors: vec![fil_actor_miner_state::v16::SectorNIActivationInfo { - sealing_number: 12, - sealer_id: 23343, - sealed_cid: Cid::default(), - sector_number: 2343, - seal_rand_epoch: 2343, - expiration: 1000, - }], - aggregate_proof: RawBytes::new(vec![23, 2, 23]), - seal_proof_type: fvm_shared4::sector::RegisteredSealProof::StackedDRG2KiBV1P1, - aggregate_proof_type: fvm_shared4::sector::RegisteredAggregateProof::SnarkPackV1, - proving_deadline: 234, - require_activation_success: true, - }; - - let miner_internal_sector_setup_for_preseal_params = - fil_actor_miner_state::v16::InternalSectorSetupForPresealParams { - sectors: vec![0], - reward_smoothed: fil_actors_shared::v16::reward::FilterEstimate { - position: Default::default(), - velocity: Default::default(), - }, - reward_baseline_power: Default::default(), - quality_adj_power_smoothed: fil_actors_shared::v16::reward::FilterEstimate { - position: Default::default(), - velocity: Default::default(), - }, - }; - - // let miner_max_termination_fee_params = fil_actor_miner_state::v16::MaxTerminationFeeParams { - // power: Default::default(), - // initial_pledge: TokenAmount::from_atto(1000000000000000000u64).into(), - // }; - - use fil_actor_miner_state::v16::Method; - Ok(vec![ - RpcTest::identity(StateDecodeParams::request(( - MINER_ADDRESS, - Method::Constructor as u64, - to_vec(&miner_constructor_params)?, - tipset.key().into(), - ))?), - // Methods without parameters - RpcTest::identity(StateDecodeParams::request(( - MINER_ADDRESS, - Method::ControlAddresses as u64, - vec![], - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - MINER_ADDRESS, - Method::ChangeWorkerAddress as u64, - to_vec(&miner_change_worker_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - MINER_ADDRESS, - Method::ChangePeerID as u64, - to_vec(&miner_change_peer_id_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - MINER_ADDRESS, - Method::SubmitWindowedPoSt as u64, - to_vec(&miner_submit_windowed_post_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - MINER_ADDRESS, - Method::ExtendSectorExpiration as u64, - to_vec(&miner_extend_sector_expiration_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - MINER_ADDRESS, - Method::TerminateSectors as u64, - to_vec(&miner_terminate_sectors_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - MINER_ADDRESS, - Method::DeclareFaults as u64, - to_vec(&miner_declare_faults_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - MINER_ADDRESS, - Method::DeclareFaultsRecovered as u64, - to_vec(&miner_declare_faults_recovered_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - MINER_ADDRESS, - Method::OnDeferredCronEvent as u64, - to_vec(&miner_deferred_cron_event_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - MINER_ADDRESS, - Method::CheckSectorProven as u64, - to_vec(&miner_check_sector_proven_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - MINER_ADDRESS, - Method::ApplyRewards as u64, - to_vec(&miner_apply_reward_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - MINER_ADDRESS, - Method::ReportConsensusFault as u64, - to_vec(&miner_report_consensus_fault_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - MINER_ADDRESS, - Method::WithdrawBalance as u64, - to_vec(&miner_withdraw_balance_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - MINER_ADDRESS, - Method::InternalSectorSetupForPreseal as u64, - to_vec(&miner_internal_sector_setup_for_preseal_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - MINER_ADDRESS, - Method::ChangeMultiaddrs as u64, - to_vec(&miner_change_multiaddrs_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - MINER_ADDRESS, - Method::CompactPartitions as u64, - to_vec(&miner_compact_partitions_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - MINER_ADDRESS, - Method::CompactSectorNumbers as u64, - to_vec(&miner_compact_sector_numbers_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - MINER_ADDRESS, - Method::ConfirmChangeWorkerAddress as u64, - vec![], - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - MINER_ADDRESS, - Method::RepayDebt as u64, - vec![], - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - MINER_ADDRESS, - Method::ChangeOwnerAddress as u64, - to_vec(&miner_change_owner_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - MINER_ADDRESS, - Method::DisputeWindowedPoSt as u64, - to_vec(&miner_dispute_windowed_post_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - MINER_ADDRESS, - Method::ProveCommitAggregate as u64, - to_vec(&miner_prove_commit_aggregate_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - MINER_ADDRESS, - Method::ProveReplicaUpdates as u64, - to_vec(&miner_prove_replica_updates_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - MINER_ADDRESS, - Method::PreCommitSectorBatch2 as u64, - to_vec(&miner_pre_commit_sector_batch2_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - MINER_ADDRESS, - Method::ChangeBeneficiary as u64, - to_vec(&miner_change_beneficiary_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - MINER_ADDRESS, - Method::GetBeneficiary as u64, - vec![], - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - MINER_ADDRESS, - Method::ExtendSectorExpiration2 as u64, - to_vec(&miner_extend_sector_expiration2_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - MINER_ADDRESS, - Method::ProveCommitSectors3 as u64, - to_vec(&miner_prove_commit_sectors3_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - MINER_ADDRESS, - Method::ProveReplicaUpdates3 as u64, - to_vec(&miner_prove_replica_updates3_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - MINER_ADDRESS, - Method::ProveCommitSectorsNI as u64, - to_vec(&miner_prove_commit_sectors_ni_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - MINER_ADDRESS, - Method::ChangeWorkerAddressExported as u64, - to_vec(&miner_change_worker_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - MINER_ADDRESS, - Method::ChangePeerIDExported as u64, - to_vec(&miner_change_peer_id_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - MINER_ADDRESS, - Method::WithdrawBalanceExported as u64, - to_vec(&miner_withdraw_balance_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - MINER_ADDRESS, - Method::ChangeMultiaddrsExported as u64, - to_vec(&miner_change_multiaddrs_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - MINER_ADDRESS, - Method::ConfirmChangeWorkerAddressExported as u64, - vec![], - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - MINER_ADDRESS, - Method::RepayDebtExported as u64, - vec![], - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - MINER_ADDRESS, - Method::ChangeOwnerAddressExported as u64, - to_vec(&miner_change_owner_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - MINER_ADDRESS, - Method::ChangeBeneficiaryExported as u64, - to_vec(&miner_change_beneficiary_params)?, - tipset.key().into(), - ))?), - // Not supported by the lotus. - // RpcTest::identity(StateDecodeParams::request(( - // MINER_ADDRESS, - // Method::GetBeneficiaryExported as u64, - // vec![], - // tipset.key().into(), - // ))?), - RpcTest::identity(StateDecodeParams::request(( - MINER_ADDRESS, - Method::GetOwnerExported as u64, - vec![], - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - MINER_ADDRESS, - Method::IsControllingAddressExported as u64, - to_vec(&miner_is_controlling_address_param)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - MINER_ADDRESS, - Method::GetSectorSizeExported as u64, - vec![], - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - MINER_ADDRESS, - Method::GetAvailableBalanceExported as u64, - vec![], - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - MINER_ADDRESS, - Method::GetVestingFundsExported as u64, - vec![], - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - MINER_ADDRESS, - Method::GetPeerIDExported as u64, - vec![], - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - MINER_ADDRESS, - Method::GetMultiaddrsExported as u64, - vec![], - tipset.key().into(), - ))?), - // Not supported by the lotus. - // RpcTest::identity(StateDecodeParams::request(( - // MINER_ADDRESS, - // Method::MaxTerminationFeeExported as u64, - // to_vec(&miner_max_termination_fee_params)?, - // tipset.key().into(), - // ))?), - // RpcTest::identity(StateDecodeParams::request(( - // MINER_ADDRESS, - // Method::InitialPledgeExported as u64, - // vec![], - // tipset.key().into(), - // ))?), - ]) -} - -fn multisig_actor_state_decode_params_tests(tipset: &Tipset) -> anyhow::Result> { - let multisig_constructor_params = fil_actor_multisig_state::v16::ConstructorParams { - signers: vec![Address::new_id(1000).into(), Address::new_id(1001).into()], - num_approvals_threshold: Default::default(), - unlock_duration: Default::default(), - start_epoch: Default::default(), - }; - - let multisig_propose_params = fil_actor_multisig_state::v16::ProposeParams { - to: Address::new_id(1000).into(), - value: Default::default(), - method: 0, - params: Default::default(), - }; - - let multisig_tx_id_params = fil_actor_multisig_state::v16::TxnIDParams { - id: Default::default(), - proposal_hash: vec![Default::default()], - }; - - let multisig_add_signer_params = fil_actor_multisig_state::v16::AddSignerParams { - signer: Address::new_id(1012).into(), - increase: false, - }; - - let multisig_remove_signer_params = fil_actor_multisig_state::v16::RemoveSignerParams { - signer: Address::new_id(1012).into(), - decrease: false, - }; - - let multisig_swap_signer_params = fil_actor_multisig_state::v16::SwapSignerParams { - from: Address::new_id(122).into(), - to: Address::new_id(1234).into(), - }; - - let multisig_change_num_app_params = - fil_actor_multisig_state::v16::ChangeNumApprovalsThresholdParams { new_threshold: 2 }; - - let multisig_lock_bal_params = fil_actor_multisig_state::v16::LockBalanceParams { - start_epoch: 22, - unlock_duration: 12, - amount: Default::default(), - }; - - Ok(vec![ - RpcTest::identity(StateDecodeParams::request(( - Address::new_id(18101), // https://calibration.filscan.io/en/address/t018101/, - fil_actor_multisig_state::v16::Method::Constructor as u64, - to_vec(&multisig_constructor_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::new_id(18101), // https://calibration.filscan.io/en/address/t018101/, - fil_actor_multisig_state::v16::Method::Propose as u64, - to_vec(&multisig_propose_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::new_id(18101), // https://calibration.filscan.io/en/address/t018101/, - fil_actor_multisig_state::v16::Method::Approve as u64, - to_vec(&multisig_tx_id_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::new_id(18101), // https://calibration.filscan.io/en/address/t018101/, - fil_actor_multisig_state::v16::Method::Cancel as u64, - to_vec(&multisig_tx_id_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::new_id(18101), // https://calibration.filscan.io/en/address/t018101/, - fil_actor_multisig_state::v16::Method::AddSigner as u64, - to_vec(&multisig_add_signer_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::new_id(18101), // https://calibration.filscan.io/en/address/t018101/, - fil_actor_multisig_state::v16::Method::RemoveSigner as u64, - to_vec(&multisig_remove_signer_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::new_id(18101), // https://calibration.filscan.io/en/address/t018101/, - fil_actor_multisig_state::v16::Method::SwapSigner as u64, - to_vec(&multisig_swap_signer_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::new_id(18101), // https://calibration.filscan.io/en/address/t018101/, - fil_actor_multisig_state::v16::Method::ChangeNumApprovalsThreshold as u64, - to_vec(&multisig_change_num_app_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::new_id(18101), // https://calibration.filscan.io/en/address/t018101/, - fil_actor_multisig_state::v16::Method::LockBalance as u64, - to_vec(&multisig_lock_bal_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::new_id(18101), // https://calibration.filscan.io/en/address/t018101/, - fil_actor_multisig_state::v16::Method::LockBalance as u64, - to_vec(&multisig_lock_bal_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::new_id(18101), // https://calibration.filscan.io/en/address/t018101/, - fil_actor_multisig_state::v16::Method::UniversalReceiverHook as u64, - BASE64_STANDARD.decode("ghgqRBI0Vng=").unwrap(), - tipset.key().into(), - ))?), - ]) -} - -fn verified_reg_actor_state_decode_params_tests(tipset: &Tipset) -> anyhow::Result> { - let verified_reg_constructor_params = fil_actor_verifreg_state::v16::ConstructorParams { - root_key: Address::new_id(1000).into(), - }; - - let verified_reg_add_verifier_params = fil_actor_verifreg_state::v16::AddVerifierParams { - address: Address::new_id(1234).into(), - allowance: StoragePower::from(1048576u64), // 1MB - }; - - let verified_reg_remove_verifier_params = fil_actor_verifreg_state::v16::RemoveVerifierParams { - verifier: Address::new_id(1234).into(), - }; - - let verified_reg_add_verified_client_params = - fil_actor_verifreg_state::v16::AddVerifiedClientParams { - address: Address::new_id(1235).into(), - allowance: fil_actor_verifreg_state::v16::types::DataCap::from(2097152u64), // 2MB - }; - - let verified_reg_remove_data_cap_params = fil_actor_verifreg_state::v16::RemoveDataCapParams { - verified_client_to_remove: Address::new_id(1236).into(), - data_cap_amount_to_remove: fil_actor_verifreg_state::v16::types::DataCap::from(1048576u64), - verifier_request_1: fil_actor_verifreg_state::v16::RemoveDataCapRequest { - verifier: Address::new_id(1237).into(), - signature: fvm_shared4::crypto::signature::Signature::new_bls( - b"test_signature_1".to_vec(), - ), - }, - verifier_request_2: fil_actor_verifreg_state::v16::RemoveDataCapRequest { - verifier: Address::new_id(1238).into(), - signature: fvm_shared4::crypto::signature::Signature::new_secp256k1( - b"test_signature_2".to_vec(), - ), - }, - }; - - let verified_reg_remove_expired_allocations_params = - fil_actor_verifreg_state::v16::RemoveExpiredAllocationsParams { - client: 1239, - allocation_ids: vec![1001, 1002, 1003], - }; - - let verified_reg_claim_allocations_params = - fil_actor_verifreg_state::v16::ClaimAllocationsParams { - sectors: vec![fil_actor_verifreg_state::v16::SectorAllocationClaims { - sector: 42, - expiry: 2000000, - claims: vec![ - fil_actor_verifreg_state::v16::AllocationClaim { - client: 1240, - allocation_id: 2001, - data: Cid::default(), - size: fvm_shared4::piece::PaddedPieceSize(1024), - }, - fil_actor_verifreg_state::v16::AllocationClaim { - client: 1241, - allocation_id: 2002, - data: Cid::default(), - size: fvm_shared4::piece::PaddedPieceSize(2048), - }, - ], - }], - all_or_nothing: false, - }; - - let verified_reg_get_claims_params = fil_actor_verifreg_state::v16::GetClaimsParams { - provider: 1242, - claim_ids: vec![3001, 3002, 3003], - }; - - let verified_reg_extend_claim_terms_params = - fil_actor_verifreg_state::v16::ExtendClaimTermsParams { - terms: vec![fil_actor_verifreg_state::v16::ClaimTerm { - provider: 12, - claim_id: 12, - term_max: 123, - }], - }; - - let verified_reg_remove_expired_claims_params = - fil_actor_verifreg_state::v16::RemoveExpiredClaimsParams { - provider: 1243, - claim_ids: vec![4001, 4002, 4003], - }; - - let verified_reg_universal_receiver_params = - fvm_actor_utils::receiver::UniversalReceiverParams { - type_: 42, - payload: fvm_ipld_encoding::RawBytes::new(vec![0x12, 0x34, 0x56, 0x78]), - }; - - Ok(vec![ - RpcTest::identity(StateDecodeParams::request(( - Address::VERIFIED_REGISTRY_ACTOR, - fil_actor_verifreg_state::v16::Method::Constructor as u64, - to_vec(&verified_reg_constructor_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::VERIFIED_REGISTRY_ACTOR, - fil_actor_verifreg_state::v16::Method::AddVerifier as u64, - to_vec(&verified_reg_add_verifier_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::VERIFIED_REGISTRY_ACTOR, - fil_actor_verifreg_state::v16::Method::RemoveVerifier as u64, - to_vec(&verified_reg_remove_verifier_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::VERIFIED_REGISTRY_ACTOR, - fil_actor_verifreg_state::v16::Method::AddVerifiedClient as u64, - to_vec(&verified_reg_add_verified_client_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::VERIFIED_REGISTRY_ACTOR, - fil_actor_verifreg_state::v16::Method::RemoveVerifiedClientDataCap as u64, - to_vec(&verified_reg_remove_data_cap_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::VERIFIED_REGISTRY_ACTOR, - fil_actor_verifreg_state::v16::Method::RemoveExpiredAllocations as u64, - to_vec(&verified_reg_remove_expired_allocations_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::VERIFIED_REGISTRY_ACTOR, - fil_actor_verifreg_state::v16::Method::ClaimAllocations as u64, - to_vec(&verified_reg_claim_allocations_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::VERIFIED_REGISTRY_ACTOR, - fil_actor_verifreg_state::v16::Method::GetClaims as u64, - to_vec(&verified_reg_get_claims_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::VERIFIED_REGISTRY_ACTOR, - fil_actor_verifreg_state::v16::Method::ExtendClaimTerms as u64, - to_vec(&verified_reg_extend_claim_terms_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::VERIFIED_REGISTRY_ACTOR, - fil_actor_verifreg_state::v16::Method::RemoveExpiredClaims as u64, - to_vec(&verified_reg_remove_expired_claims_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::VERIFIED_REGISTRY_ACTOR, - fil_actor_verifreg_state::v16::Method::AddVerifiedClientExported as u64, - to_vec(&verified_reg_add_verified_client_params)?, // reuse same params - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::VERIFIED_REGISTRY_ACTOR, - fil_actor_verifreg_state::v16::Method::RemoveExpiredAllocationsExported as u64, - to_vec(&verified_reg_remove_expired_allocations_params)?, // reuse same params - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::VERIFIED_REGISTRY_ACTOR, - fil_actor_verifreg_state::v16::Method::GetClaimsExported as u64, - to_vec(&verified_reg_get_claims_params)?, // reuse same params - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::VERIFIED_REGISTRY_ACTOR, - fil_actor_verifreg_state::v16::Method::ExtendClaimTermsExported as u64, - to_vec(&verified_reg_extend_claim_terms_params)?, // reuse same params - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::VERIFIED_REGISTRY_ACTOR, - fil_actor_verifreg_state::v16::Method::RemoveExpiredClaimsExported as u64, - to_vec(&verified_reg_remove_expired_claims_params)?, // reuse same params - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::VERIFIED_REGISTRY_ACTOR, - fil_actor_verifreg_state::v16::Method::UniversalReceiverHook as u64, - to_vec(&verified_reg_universal_receiver_params)?, - tipset.key().into(), - ))?), - ]) -} - -fn market_actor_state_decode_params_tests(tipset: &Tipset) -> anyhow::Result> { - fn create_deal_proposal( - client: fvm_shared4::address::Address, - provider: fvm_shared4::address::Address, - client_collateral: fvm_shared4::econ::TokenAmount, - provider_collateral: fvm_shared4::econ::TokenAmount, - start_epoch: fvm_shared4::clock::ChainEpoch, - end_epoch: fvm_shared4::clock::ChainEpoch, - ) -> fil_actor_market_state::v16::DealProposal { - let piece_cid = Cid::default(); - let piece_size = fvm_shared4::piece::PaddedPieceSize(2048); - let storage_price_per_epoch = fvm_shared4::econ::TokenAmount::from_atto(10u8); - - fil_actor_market_state::v16::DealProposal { - piece_cid, - piece_size, - verified_deal: false, - client, - provider, - label: fil_actor_market_state::v16::Label::String("label".to_string()), - start_epoch, - end_epoch, - storage_price_per_epoch, - provider_collateral, - client_collateral, - } - } - - fn create_client_deal_proposal() -> fil_actor_market_state::v16::ClientDealProposal { - let proposal = create_deal_proposal( - fvm_shared4::address::Address::new_id(1000), - fvm_shared4::address::Address::new_id(1000), - fvm_shared4::econ::TokenAmount::from_atto(10u8), - fvm_shared4::econ::TokenAmount::from_atto(10u8), - 0, - 10, - ); - fil_actor_market_state::v16::ClientDealProposal { - proposal, - client_signature: fvm_shared4::crypto::signature::Signature::new_bls( - b"test_signature".to_vec(), - ), - } - } - - fn create_sector_deals() -> fil_actor_market_state::v16::SectorDeals { - fil_actor_market_state::v16::SectorDeals { - sector_number: 42, - sector_type: fvm_shared4::sector::RegisteredSealProof::StackedDRG2KiBV1, - sector_expiry: 100, - deal_ids: vec![0, 1], - } - } - - fn create_sector_changes() -> fil_actor_miner_state::v16::SectorChanges { - let piece_change = fil_actor_miner_state::v16::PieceChange { - data: Cid::default(), - size: fvm_shared4::piece::PaddedPieceSize(2048), - payload: fvm_ipld_encoding::RawBytes::new(vec![0x12, 0x34, 0x56, 0x78]), - }; - - fil_actor_miner_state::v16::SectorChanges { - sector: 2, - minimum_commitment_epoch: 0, - added: vec![piece_change], - } - } - - let market_actor_add_balance_params = fil_actor_market_state::v16::AddBalanceParams { - provider_or_client: fvm_shared4::address::Address::new_id(1000), - }; - let market_actor_withdraw_balance_params = fil_actor_market_state::v16::WithdrawBalanceParams { - provider_or_client: Address::new_id(1000).into(), - amount: TokenAmount::default().into(), - }; - - let market_actor_publish_storage_deals_params = - fil_actor_market_state::v16::PublishStorageDealsParams { - deals: vec![create_client_deal_proposal()], - }; - - let _market_actor_verify_deals_for_activation_params = - fil_actor_market_state::v16::VerifyDealsForActivationParams { - sectors: vec![create_sector_deals()], - }; - - let _market_actor_batch_activate_deals_params = - fil_actor_market_state::v16::BatchActivateDealsParams { - sectors: vec![create_sector_deals()], - compute_cid: true, - }; - - let _market_actor_on_miner_sectors_terminate_params = - fil_actor_market_state::v16::OnMinerSectorsTerminateParams { - epoch: 123, - sectors: { - let mut bf = BitField::new(); - bf.set(3); - bf - }, - }; - - let market_actor_get_balance_exported_params = Address::new_id(1000); - - let market_actor_settle_deal_payments_params = - fil_actor_market_state::v16::SettleDealPaymentsParams { - deal_ids: { - let mut bf = BitField::new(); - bf.set(42); - bf - }, - }; - - let market_actor_get_deal_data_commitment_params = - fil_actor_market_state::v16::DealQueryParams { id: 0 }; - - let _market_actor_sector_content_changed_params = { - fil_actor_miner_state::v16::SectorContentChangedParams { - sectors: vec![create_sector_changes()], - } - }; - - Ok(vec![ - RpcTest::identity(StateDecodeParams::request(( - Address::MARKET_ACTOR, - fil_actor_market_state::v16::Method::AddBalance as u64, - to_vec(&market_actor_add_balance_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::MARKET_ACTOR, - fil_actor_market_state::v16::Method::WithdrawBalance as u64, - to_vec(&market_actor_withdraw_balance_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::MARKET_ACTOR, - fil_actor_market_state::v16::Method::PublishStorageDeals as u64, - to_vec(&market_actor_publish_storage_deals_params)?, - tipset.key().into(), - ))?), - // TODO(go-state-types): https://github.com/filecoin-project/go-state-types/issues/409 - // Enable this test when lotus supports this method - // RpcTest::identity(StateDecodeParams::request(( - // Address::MARKET_ACTOR, - // fil_actor_market_state::v16::Method::BatchActivateDeals as u64, - // to_vec(&market_actor_batch_activate_deals_params)?, - // tipset.key().into(), - // ))?), - // TODO(go-state-types): https://github.com/filecoin-project/go-state-types/issues/408 - // Enable this test once Lotus adds the `sector_number` field. - // RpcTest::identity(StateDecodeParams::request(( - // Address::MARKET_ACTOR, - // fil_actor_market_state::v16::Method::VerifyDealsForActivation as u64, - // to_vec(&market_actor_verify_deals_for_activation_params)?, - // tipset.key().into(), - // ))?), - // TODO(go-state-types): https://github.com/filecoin-project/go-state-types/issues/408 - // Enable this test when lotus supports correct types in go-state-types. - // RpcTest::identity(StateDecodeParams::request(( - // Address::MARKET_ACTOR, - // fil_actor_market_state::v16::Method::OnMinerSectorsTerminate as u64, - // to_vec(&market_actor_on_miner_sectors_terminate_params)?, - // tipset.key().into(), - // ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::MARKET_ACTOR, - fil_actor_market_state::v16::Method::Constructor as u64, - vec![], - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::MARKET_ACTOR, - fil_actor_market_state::v16::Method::CronTick as u64, - vec![], - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::MARKET_ACTOR, - fil_actor_market_state::v16::Method::AddBalanceExported as u64, - to_vec(&market_actor_get_balance_exported_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::MARKET_ACTOR, - fil_actor_market_state::v16::Method::WithdrawBalanceExported as u64, - to_vec(&market_actor_withdraw_balance_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::MARKET_ACTOR, - fil_actor_market_state::v16::Method::PublishStorageDealsExported as u64, - to_vec(&market_actor_publish_storage_deals_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::MARKET_ACTOR, - fil_actor_market_state::v16::Method::GetBalanceExported as u64, - to_vec(&market_actor_get_balance_exported_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::MARKET_ACTOR, - fil_actor_market_state::v16::Method::GetDealDataCommitmentExported as u64, - to_vec(&market_actor_get_deal_data_commitment_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::MARKET_ACTOR, - fil_actor_market_state::v16::Method::GetDealClientExported as u64, - to_vec(&market_actor_get_deal_data_commitment_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::MARKET_ACTOR, - fil_actor_market_state::v16::Method::GetDealProviderExported as u64, - to_vec(&market_actor_get_deal_data_commitment_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::MARKET_ACTOR, - fil_actor_market_state::v16::Method::GetDealLabelExported as u64, - to_vec(&market_actor_get_deal_data_commitment_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::MARKET_ACTOR, - fil_actor_market_state::v16::Method::GetDealTermExported as u64, - to_vec(&market_actor_get_deal_data_commitment_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::MARKET_ACTOR, - fil_actor_market_state::v16::Method::GetDealTotalPriceExported as u64, - to_vec(&market_actor_get_deal_data_commitment_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::MARKET_ACTOR, - fil_actor_market_state::v16::Method::GetDealClientCollateralExported as u64, - to_vec(&market_actor_get_deal_data_commitment_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::MARKET_ACTOR, - fil_actor_market_state::v16::Method::GetDealProviderCollateralExported as u64, - to_vec(&market_actor_get_deal_data_commitment_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::MARKET_ACTOR, - fil_actor_market_state::v16::Method::GetDealVerifiedExported as u64, - to_vec(&market_actor_get_deal_data_commitment_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::MARKET_ACTOR, - fil_actor_market_state::v16::Method::GetDealActivationExported as u64, - to_vec(&market_actor_get_deal_data_commitment_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::MARKET_ACTOR, - fil_actor_market_state::v16::Method::GetDealSectorExported as u64, - to_vec(&market_actor_get_deal_data_commitment_params)?, - tipset.key().into(), - ))?), - RpcTest::identity(StateDecodeParams::request(( - Address::MARKET_ACTOR, - fil_actor_market_state::v16::Method::SettleDealPaymentsExported as u64, - to_vec(&market_actor_settle_deal_payments_params)?, - tipset.key().into(), - ))?), - // TODO(lotus): https://github.com/filecoin-project/lotus/issues/13329 - // Lotus panics while decoding this method. - // RpcTest::identity(StateDecodeParams::request(( - // Address::MARKET_ACTOR, - // fil_actor_market_state::v16::Method::SectorContentChangedExported as u64, - // to_vec(&market_actor_sector_content_changed_params)?, - // tipset.key().into(), - // ))?), - ]) -} - fn read_state_api_tests(tipset: &Tipset) -> anyhow::Result> { let tests = vec![ RpcTest::identity(StateReadState::request(( diff --git a/src/tool/subcommands/api_cmd/state_decode_params_tests/account.rs b/src/tool/subcommands/api_cmd/state_decode_params_tests/account.rs new file mode 100644 index 000000000000..317afb03cbf0 --- /dev/null +++ b/src/tool/subcommands/api_cmd/state_decode_params_tests/account.rs @@ -0,0 +1,33 @@ +// Copyright 2019-2025 ChainSafe Systems +// SPDX-License-Identifier: Apache-2.0, MIT + +use super::*; +use fil_actor_account_state::v17::*; + +/// Creates state decode params tests for the Account actor. +pub fn create_tests(tipset: &Tipset) -> Result> { + let account_constructor_params = types::ConstructorParams { + address: Address::new_id(1234).into(), + }; + + let account_auth_params = types::AuthenticateMessageParams { + signature: vec![0x00; 32], // dummy signature + message: b"test message".to_vec(), + }; + + const ACCOUNT_ADDRESS: Address = Address::new_id(1234); + Ok(vec![ + RpcTest::identity(StateDecodeParams::request(( + ACCOUNT_ADDRESS, + Method::Constructor as u64, + to_vec(&account_constructor_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + ACCOUNT_ADDRESS, + Method::AuthenticateMessageExported as u64, + to_vec(&account_auth_params)?, + tipset.key().into(), + ))?), + ]) +} diff --git a/src/tool/subcommands/api_cmd/state_decode_params_tests/cron.rs b/src/tool/subcommands/api_cmd/state_decode_params_tests/cron.rs new file mode 100644 index 000000000000..a8aacb4b0338 --- /dev/null +++ b/src/tool/subcommands/api_cmd/state_decode_params_tests/cron.rs @@ -0,0 +1,32 @@ +// Copyright 2019-2025 ChainSafe Systems +// SPDX-License-Identifier: Apache-2.0, MIT + +use super::*; +use fil_actor_cron_state::v17::*; + +/// Creates state decode params tests for the Cron actor. +pub fn create_tests(tipset: &Tipset) -> anyhow::Result> { + // let cron_constructor_params = ConstructorParams { + // entries: vec![Entry { + // receiver: Address::new_id(1000).into(), + // method_num: EpochTick as u64, + // }], + // }; + + Ok(vec![ + // // TODO(go-state-types): https://github.com/filecoin-project/go-state-types/issues/396 + // Enable this test when lotus supports it in go-state-types. + // RpcTest::identity(StateDecodeParams::request(( + // Address::CRON_ACTOR, + // Constructor as u64, + // to_vec(&cron_constructor_params)?, + // tipset.key().into(), + // ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::CRON_ACTOR, + Method::EpochTick as u64, + vec![], + tipset.key().into(), + ))?), + ]) +} diff --git a/src/tool/subcommands/api_cmd/state_decode_params_tests/datacap.rs b/src/tool/subcommands/api_cmd/state_decode_params_tests/datacap.rs new file mode 100644 index 000000000000..02865b577b64 --- /dev/null +++ b/src/tool/subcommands/api_cmd/state_decode_params_tests/datacap.rs @@ -0,0 +1,172 @@ +// Copyright 2019-2025 ChainSafe Systems +// SPDX-License-Identifier: Apache-2.0, MIT + +use super::*; +use fil_actor_datacap_state::v17::*; + +/// Creates state decode params tests for the Datacap actor. +pub fn create_tests(tipset: &Tipset) -> Result> { + let datacap_constructor_params = ConstructorParams { + governor: Address::new_id(3000).into(), + }; + + let datacap_mint_params = 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 = DestroyParams { + owner: Address::new_id(3004).into(), + amount: TokenAmount::default().into(), + }; + + let datacap_balance_params = 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(), + }; + + Ok(vec![ + RpcTest::identity(StateDecodeParams::request(( + Address::DATACAP_TOKEN_ACTOR, + Method::Constructor as u64, + to_vec(&datacap_constructor_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::DATACAP_TOKEN_ACTOR, + Method::MintExported as u64, + to_vec(&datacap_mint_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::DATACAP_TOKEN_ACTOR, + Method::DestroyExported as u64, + to_vec(&datacap_destroy_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::DATACAP_TOKEN_ACTOR, + Method::NameExported as u64, + vec![], + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::DATACAP_TOKEN_ACTOR, + Method::SymbolExported as u64, + vec![], + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::DATACAP_TOKEN_ACTOR, + Method::TotalSupplyExported as u64, + vec![], + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::DATACAP_TOKEN_ACTOR, + Method::BalanceExported as u64, + to_vec(&datacap_balance_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::DATACAP_TOKEN_ACTOR, + Method::GranularityExported as u64, + vec![], + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::DATACAP_TOKEN_ACTOR, + Method::TransferExported as u64, + to_vec(&datacap_transfer_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::DATACAP_TOKEN_ACTOR, + Method::TransferFromExported as u64, + to_vec(&datacap_transfer_from_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::DATACAP_TOKEN_ACTOR, + Method::IncreaseAllowanceExported as u64, + to_vec(&datacap_increase_allowance_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::DATACAP_TOKEN_ACTOR, + Method::DecreaseAllowanceExported as u64, + to_vec(&datacap_decrease_allowance_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::DATACAP_TOKEN_ACTOR, + Method::RevokeAllowanceExported as u64, + to_vec(&datacap_revoke_allowance_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::DATACAP_TOKEN_ACTOR, + Method::BurnExported as u64, + to_vec(&datacap_burn_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::DATACAP_TOKEN_ACTOR, + Method::BurnFromExported as u64, + to_vec(&datacap_burn_from_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::DATACAP_TOKEN_ACTOR, + Method::AllowanceExported as u64, + to_vec(&datacap_get_allowance_params)?, + tipset.key().into(), + ))?), + ]) +} diff --git a/src/tool/subcommands/api_cmd/state_decode_params_tests/eam.rs b/src/tool/subcommands/api_cmd/state_decode_params_tests/eam.rs new file mode 100644 index 000000000000..9ebd75ec914c --- /dev/null +++ b/src/tool/subcommands/api_cmd/state_decode_params_tests/eam.rs @@ -0,0 +1,47 @@ +// Copyright 2019-2025 ChainSafe Systems +// SPDX-License-Identifier: Apache-2.0, MIT + +use super::*; +use fil_actor_eam_state::v17::*; + +/// Creates state decode params tests for the EAM actor. +pub fn create_tests(tipset: &Tipset) -> Result> { + let create_params = CreateParams { + initcode: vec![0x11, 0x22, 0x33, 0x44, 0x55], // dummy data + nonce: 2, + }; + + let create_params2 = Create2Params { + initcode: vec![0x11, 0x22, 0x33, 0x44, 0x55], // dummy data + salt: [0; 32], + }; + + let create_external_params = CreateExternalParams(vec![0x11, 0x22, 0x33, 0x44, 0x55]); + + Ok(vec![ + RpcTest::identity(StateDecodeParams::request(( + Address::ETHEREUM_ACCOUNT_MANAGER_ACTOR, + Method::Constructor as u64, + vec![], + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::ETHEREUM_ACCOUNT_MANAGER_ACTOR, + Method::Create as u64, + to_vec(&create_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::ETHEREUM_ACCOUNT_MANAGER_ACTOR, + Method::Create2 as u64, + to_vec(&create_params2)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::ETHEREUM_ACCOUNT_MANAGER_ACTOR, + Method::CreateExternal as u64, + to_vec(&create_external_params)?, + tipset.key().into(), + ))?), + ]) +} diff --git a/src/tool/subcommands/api_cmd/state_decode_params_tests/ethaccount.rs b/src/tool/subcommands/api_cmd/state_decode_params_tests/ethaccount.rs new file mode 100644 index 000000000000..f38d5f11e2ab --- /dev/null +++ b/src/tool/subcommands/api_cmd/state_decode_params_tests/ethaccount.rs @@ -0,0 +1,15 @@ +// Copyright 2019-2025 ChainSafe Systems +// SPDX-License-Identifier: Apache-2.0, MIT + +use super::*; +use fil_actor_ethaccount_state::v17::*; + +/// Creates state decode params tests for the EthAccount actor. +pub fn create_tests(tipset: &Tipset) -> anyhow::Result> { + Ok(vec![RpcTest::identity(StateDecodeParams::request(( + Address::new_delegated(Address::ETHEREUM_ACCOUNT_MANAGER_ACTOR.id()?, &[0; 20])?, + Method::Constructor as u64, + vec![], + tipset.key().into(), + ))?)]) +} diff --git a/src/tool/subcommands/api_cmd/state_decode_params_tests/evm.rs b/src/tool/subcommands/api_cmd/state_decode_params_tests/evm.rs new file mode 100644 index 000000000000..8ca0acc16a13 --- /dev/null +++ b/src/tool/subcommands/api_cmd/state_decode_params_tests/evm.rs @@ -0,0 +1,76 @@ +// Copyright 2019-2025 ChainSafe Systems +// SPDX-License-Identifier: Apache-2.0, MIT + +use super::*; +use crate::rpc::eth::types::GetStorageAtParams; +use fil_actor_evm_state::evm_shared::v17::address::EthAddress; +use fil_actor_evm_state::v17::*; +use std::str::FromStr; + +const EVM_ADDRESS: &str = "t410fbqoynu2oi2lxam43knqt6ordiowm2ywlml27z4i"; + +/// Creates state decode params tests for the EVM actor. +pub fn create_tests(tipset: &Tipset) -> Result> { + let evm_constructor_params = ConstructorParams { + creator: EthAddress([0; 20]), + initcode: fvm_ipld_encoding::RawBytes::new(vec![0x12, 0x34, 0x56]), // dummy bytecode + }; + + let evm_invoke_contract_params = InvokeContractParams { + input_data: vec![0x11, 0x22, 0x33, 0x44, 0x55], // dummy input data + }; + + let evm_delegate_call_params = DelegateCallParams { + code: Cid::default(), + input: vec![0x11, 0x22, 0x33, 0x44, 0x55], // dummy input data + caller: EthAddress([0; 20]), + value: TokenAmount::default().into(), + }; + + let evm_get_storage_at_params = GetStorageAtParams::new(vec![0xa])?; + + Ok(vec![ + RpcTest::identity(StateDecodeParams::request(( + Address::from_str(EVM_ADDRESS)?, + Method::Constructor as u64, + to_vec(&evm_constructor_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::from_str(EVM_ADDRESS)?, + Method::Resurrect as u64, + to_vec(&evm_constructor_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::from_str(EVM_ADDRESS)?, + Method::GetBytecode as u64, + vec![], + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::from_str(EVM_ADDRESS)?, + Method::GetBytecodeHash as u64, + vec![], + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::from_str(EVM_ADDRESS)?, + Method::InvokeContract as u64, + to_vec(&evm_invoke_contract_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::from_str(EVM_ADDRESS)?, + Method::InvokeContractDelegate as u64, + to_vec(&evm_delegate_call_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::from_str(EVM_ADDRESS)?, + Method::GetStorageAt as u64, + evm_get_storage_at_params.serialize_params()?, + tipset.key().into(), + ))?), + ]) +} diff --git a/src/tool/subcommands/api_cmd/state_decode_params_tests/init.rs b/src/tool/subcommands/api_cmd/state_decode_params_tests/init.rs new file mode 100644 index 000000000000..c4ab84135310 --- /dev/null +++ b/src/tool/subcommands/api_cmd/state_decode_params_tests/init.rs @@ -0,0 +1,44 @@ +// Copyright 2019-2025 ChainSafe Systems +// SPDX-License-Identifier: Apache-2.0, MIT + +use super::*; +use fil_actor_init_state::v17::*; + +/// Creates state decode params tests for the Init actor. +pub fn create_tests(tipset: &Tipset) -> Result> { + let init_constructor_params = ConstructorParams { + network_name: "calibnet".to_string(), + }; + + let init_exec4_params = Exec4Params { + code_cid: Cid::default(), + constructor_params: fvm_ipld_encoding::RawBytes::new(vec![0x12, 0x34, 0x56]), // dummy bytecode + subaddress: fvm_ipld_encoding::RawBytes::new(vec![0x12, 0x34, 0x56]), // dummy bytecode + }; + + let init_exec_params = ExecParams { + code_cid: Cid::default(), + constructor_params: fvm_ipld_encoding::RawBytes::new(vec![0x12, 0x34, 0x56]), // dummy bytecode + }; + + Ok(vec![ + RpcTest::identity(StateDecodeParams::request(( + Address::INIT_ACTOR, + Method::Constructor as u64, + to_vec(&init_constructor_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::INIT_ACTOR, + Method::Exec as u64, + to_vec(&init_exec_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::INIT_ACTOR, + Method::Exec4 as u64, + to_vec(&init_exec4_params)?, + tipset.key().into(), + ))?), + ]) +} diff --git a/src/tool/subcommands/api_cmd/state_decode_params_tests/market.rs b/src/tool/subcommands/api_cmd/state_decode_params_tests/market.rs new file mode 100644 index 000000000000..9ce5b55708be --- /dev/null +++ b/src/tool/subcommands/api_cmd/state_decode_params_tests/market.rs @@ -0,0 +1,285 @@ +// Copyright 2019-2025 ChainSafe Systems +// SPDX-License-Identifier: Apache-2.0, MIT + +use super::*; +use fil_actor_market_state::v17::*; +use fil_actors_shared::fvm_ipld_bitfield::BitField; + +/// Creates state decode params tests for the Market actor. +pub fn create_tests(tipset: &Tipset) -> Result> { + fn create_deal_proposal( + client: fvm_shared4::address::Address, + provider: fvm_shared4::address::Address, + client_collateral: fvm_shared4::econ::TokenAmount, + provider_collateral: fvm_shared4::econ::TokenAmount, + start_epoch: fvm_shared4::clock::ChainEpoch, + end_epoch: fvm_shared4::clock::ChainEpoch, + ) -> DealProposal { + let piece_cid = Cid::default(); + let piece_size = fvm_shared4::piece::PaddedPieceSize(2048); + let storage_price_per_epoch = fvm_shared4::econ::TokenAmount::from_atto(10u8); + + DealProposal { + piece_cid, + piece_size, + verified_deal: false, + client, + provider, + label: Label::String("label".to_string()), + start_epoch, + end_epoch, + storage_price_per_epoch, + provider_collateral, + client_collateral, + } + } + + fn create_client_deal_proposal() -> ClientDealProposal { + let proposal = create_deal_proposal( + fvm_shared4::address::Address::new_id(1000), + fvm_shared4::address::Address::new_id(1000), + fvm_shared4::econ::TokenAmount::from_atto(10u8), + fvm_shared4::econ::TokenAmount::from_atto(10u8), + 0, + 10, + ); + ClientDealProposal { + proposal, + client_signature: fvm_shared4::crypto::signature::Signature::new_bls( + b"test_signature".to_vec(), + ), + } + } + + fn create_sector_deals() -> SectorDeals { + SectorDeals { + sector_number: 42, + sector_type: fvm_shared4::sector::RegisteredSealProof::StackedDRG2KiBV1, + sector_expiry: 100, + deal_ids: vec![0, 1], + } + } + + fn create_sector_changes() -> ext::miner::SectorChanges { + let piece_change = ext::miner::PieceChange { + data: Cid::default(), + size: fvm_shared4::piece::PaddedPieceSize(2048), + payload: fvm_ipld_encoding::RawBytes::new(vec![0x12, 0x34, 0x56, 0x78]), + }; + + ext::miner::SectorChanges { + sector: 2, + minimum_commitment_epoch: 0, + added: vec![piece_change], + } + } + + let market_actor_add_balance_params = AddBalanceParams { + provider_or_client: fvm_shared4::address::Address::new_id(1000), + }; + let market_actor_withdraw_balance_params = WithdrawBalanceParams { + provider_or_client: Address::new_id(1000).into(), + amount: TokenAmount::default().into(), + }; + + let market_actor_publish_storage_deals_params = PublishStorageDealsParams { + deals: vec![create_client_deal_proposal()], + }; + + let _market_actor_verify_deals_for_activation_params = VerifyDealsForActivationParams { + sectors: vec![create_sector_deals()], + }; + + let _market_actor_batch_activate_deals_params = BatchActivateDealsParams { + sectors: vec![create_sector_deals()], + compute_cid: true, + }; + + let _market_actor_on_miner_sectors_terminate_params = OnMinerSectorsTerminateParams { + epoch: 123, + sectors: { + let mut bf = BitField::new(); + bf.set(3); + bf + }, + }; + + let market_actor_get_balance_exported_params = Address::new_id(1000); + + let market_actor_settle_deal_payments_params = SettleDealPaymentsParams { + deal_ids: { + let mut bf = BitField::new(); + bf.set(42); + bf + }, + }; + + let market_actor_get_deal_data_commitment_params = DealQueryParams { id: 0 }; + + let _market_actor_sector_content_changed_params = { + ext::miner::SectorContentChangedParams { + sectors: vec![create_sector_changes()], + } + }; + + Ok(vec![ + RpcTest::identity(StateDecodeParams::request(( + Address::MARKET_ACTOR, + Method::AddBalance as u64, + to_vec(&market_actor_add_balance_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::MARKET_ACTOR, + Method::WithdrawBalance as u64, + to_vec(&market_actor_withdraw_balance_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::MARKET_ACTOR, + Method::PublishStorageDeals as u64, + to_vec(&market_actor_publish_storage_deals_params)?, + tipset.key().into(), + ))?), + // TODO(go-state-types): https://github.com/filecoin-project/go-state-types/issues/409 + // Enable this test when lotus supports this method + // RpcTest::identity(StateDecodeParams::request(( + // Address::MARKET_ACTOR, + // Method::BatchActivateDeals as u64, + // to_vec(&market_actor_batch_activate_deals_params)?, + // tipset.key().into(), + // ))?), + // TODO(go-state-types): https://github.com/filecoin-project/go-state-types/issues/408 + // Enable this test once Lotus adds the `sector_number` field. + // RpcTest::identity(StateDecodeParams::request(( + // Address::MARKET_ACTOR, + // Method::VerifyDealsForActivation as u64, + // to_vec(&market_actor_verify_deals_for_activation_params)?, + // tipset.key().into(), + // ))?), + // TODO(go-state-types): https://github.com/filecoin-project/go-state-types/issues/408 + // Enable this test when lotus supports correct types in go-state-types. + // RpcTest::identity(StateDecodeParams::request(( + // Address::MARKET_ACTOR, + // Method::OnMinerSectorsTerminate as u64, + // to_vec(&market_actor_on_miner_sectors_terminate_params)?, + // tipset.key().into(), + // ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::MARKET_ACTOR, + Method::Constructor as u64, + vec![], + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::MARKET_ACTOR, + Method::CronTick as u64, + vec![], + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::MARKET_ACTOR, + Method::AddBalanceExported as u64, + to_vec(&market_actor_get_balance_exported_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::MARKET_ACTOR, + Method::WithdrawBalanceExported as u64, + to_vec(&market_actor_withdraw_balance_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::MARKET_ACTOR, + Method::PublishStorageDealsExported as u64, + to_vec(&market_actor_publish_storage_deals_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::MARKET_ACTOR, + Method::GetBalanceExported as u64, + to_vec(&market_actor_get_balance_exported_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::MARKET_ACTOR, + Method::GetDealDataCommitmentExported as u64, + to_vec(&market_actor_get_deal_data_commitment_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::MARKET_ACTOR, + Method::GetDealClientExported as u64, + to_vec(&market_actor_get_deal_data_commitment_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::MARKET_ACTOR, + Method::GetDealProviderExported as u64, + to_vec(&market_actor_get_deal_data_commitment_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::MARKET_ACTOR, + Method::GetDealLabelExported as u64, + to_vec(&market_actor_get_deal_data_commitment_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::MARKET_ACTOR, + Method::GetDealTermExported as u64, + to_vec(&market_actor_get_deal_data_commitment_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::MARKET_ACTOR, + Method::GetDealTotalPriceExported as u64, + to_vec(&market_actor_get_deal_data_commitment_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::MARKET_ACTOR, + Method::GetDealClientCollateralExported as u64, + to_vec(&market_actor_get_deal_data_commitment_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::MARKET_ACTOR, + Method::GetDealProviderCollateralExported as u64, + to_vec(&market_actor_get_deal_data_commitment_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::MARKET_ACTOR, + Method::GetDealVerifiedExported as u64, + to_vec(&market_actor_get_deal_data_commitment_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::MARKET_ACTOR, + Method::GetDealActivationExported as u64, + to_vec(&market_actor_get_deal_data_commitment_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::MARKET_ACTOR, + Method::GetDealSectorExported as u64, + to_vec(&market_actor_get_deal_data_commitment_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::MARKET_ACTOR, + Method::SettleDealPaymentsExported as u64, + to_vec(&market_actor_settle_deal_payments_params)?, + tipset.key().into(), + ))?), + // TODO(lotus): https://github.com/filecoin-project/lotus/issues/13329 + // Lotus panics while decoding this method. + // RpcTest::identity(StateDecodeParams::request(( + // Address::MARKET_ACTOR, + // Method::SectorContentChangedExported as u64, + // to_vec(&market_actor_sector_content_changed_params)?, + // tipset.key().into(), + // ))?), + ]) +} diff --git a/src/tool/subcommands/api_cmd/state_decode_params_tests/miner.rs b/src/tool/subcommands/api_cmd/state_decode_params_tests/miner.rs new file mode 100644 index 000000000000..45097f346df1 --- /dev/null +++ b/src/tool/subcommands/api_cmd/state_decode_params_tests/miner.rs @@ -0,0 +1,506 @@ +// Copyright 2019-2025 ChainSafe Systems +// SPDX-License-Identifier: Apache-2.0, MIT + +use super::*; +use fil_actor_miner_state::v17::*; +use fil_actors_shared::v17::reward::FilterEstimate; +use fvm_ipld_encoding::{BytesDe, RawBytes}; +use fvm_shared4::randomness::Randomness; + +/// Creates state decode params tests for the Miner actor. +pub fn create_tests(tipset: &Tipset) -> Result> { + let miner_constructor_params = MinerConstructorParams { + owner: Address::new_id(1000).into(), + worker: Address::new_id(1001).into(), + control_addresses: vec![Address::new_id(1002).into(), Address::new_id(1003).into()], + window_post_proof_type: fvm_shared4::sector::RegisteredPoStProof::StackedDRGWindow32GiBV1P1, + peer_id: b"miner".to_vec(), + multi_addresses: Default::default(), + }; + + let miner_change_worker_params = ChangeWorkerAddressParams { + new_worker: Address::new_id(2000).into(), + new_control_addresses: vec![Address::new_id(2001).into()], + }; + + let miner_change_peer_id_params = ChangePeerIDParams { + new_id: b"new_peer".to_vec(), + }; + + let miner_change_multiaddrs_params = ChangeMultiaddrsParams { + new_multi_addrs: vec![BytesDe(vec![1, 2, 3])], + }; + + let miner_change_owner_params = ChangeOwnerAddressParams { + new_owner: Address::new_id(3000).into(), + }; + + let miner_change_beneficiary_params = ChangeBeneficiaryParams { + new_beneficiary: Address::new_id(4000).into(), + new_quota: TokenAmount::from_atto(1000000000000000000u64).into(), + new_expiration: 1000, + }; + + let miner_withdraw_balance_params = WithdrawBalanceParams { + amount_requested: TokenAmount::from_atto(500000000000000000u64).into(), + }; + + let miner_submit_windowed_post_params = SubmitWindowedPoStParams { + deadline: 0, + partitions: vec![PoStPartition { + index: 0, + skipped: Default::default(), + }], + proofs: vec![], + chain_commit_epoch: 0, + chain_commit_rand: Randomness(vec![1, 22, 43]), + }; + + let miner_terminate_sectors_params = TerminateSectorsParams { + terminations: vec![TerminationDeclaration { + deadline: 0, + partition: 0, + sectors: Default::default(), + }], + }; + + let miner_declare_faults_params = DeclareFaultsParams { + faults: vec![FaultDeclaration { + deadline: 0, + partition: 0, + sectors: Default::default(), + }], + }; + + let miner_declare_faults_recovered_params = DeclareFaultsRecoveredParams { + recoveries: vec![RecoveryDeclaration { + deadline: 0, + partition: 0, + sectors: Default::default(), + }], + }; + + let miner_deferred_cron_event_params = DeferredCronEventParams { + event_payload: vec![], + reward_smoothed: FilterEstimate { + position: Default::default(), + velocity: Default::default(), + }, + quality_adj_power_smoothed: FilterEstimate { + position: Default::default(), + velocity: Default::default(), + }, + }; + + let miner_check_sector_proven_params = CheckSectorProvenParams { sector_number: 0 }; + + let miner_apply_reward_params = ApplyRewardParams { + reward: TokenAmount::from_atto(1000000000000000000u64).into(), + penalty: TokenAmount::from_atto(0u64).into(), + }; + + let miner_report_consensus_fault_params = ReportConsensusFaultParams { + header1: vec![], + header2: vec![], + header_extra: vec![], + }; + + let miner_compact_partitions_params = CompactPartitionsParams { + deadline: 0, + partitions: Default::default(), + }; + + let miner_compact_sector_numbers_params = CompactSectorNumbersParams { + mask_sector_numbers: Default::default(), + }; + + let miner_dispute_windowed_post_params = DisputeWindowedPoStParams { + deadline: 0, + post_index: 0, + }; + + let miner_pre_commit_sector_batch2_params = PreCommitSectorBatchParams2 { + sectors: vec![SectorPreCommitInfo { + seal_proof: fvm_shared4::sector::RegisteredSealProof::StackedDRG2KiBV1P1, + sector_number: 0, + sealed_cid: Cid::default(), + seal_rand_epoch: 0, + deal_ids: vec![], + expiration: 1000, + unsealed_cid: CompactCommD(None), + }], + }; + + let miner_extend_sector_expiration2_params = ExtendSectorExpiration2Params { + extensions: vec![ExpirationExtension2 { + deadline: 0, + partition: 0, + sectors: Default::default(), + sectors_with_claims: vec![], + new_expiration: 1000, + }], + }; + + let miner_is_controlling_address_param = IsControllingAddressParam { + address: Address::new_id(5000).into(), + }; + + let miner_prove_commit_sectors3_params = ProveCommitSectors3Params { + sector_activations: vec![SectorActivationManifest { + sector_number: 0, + pieces: vec![PieceActivationManifest { + cid: Cid::default(), + size: fvm_shared4::piece::PaddedPieceSize(23), + verified_allocation_key: None, + notify: vec![], + }], + }], + sector_proofs: vec![RawBytes::new(vec![])], + aggregate_proof: RawBytes::new(vec![]), + aggregate_proof_type: None, + require_activation_success: true, + require_notification_success: true, + }; + + let miner_prove_replica_updates3_params = ProveReplicaUpdates3Params { + sector_updates: vec![SectorUpdateManifest { + sector: 0, + deadline: 0, + partition: 0, + new_sealed_cid: Cid::default(), + pieces: vec![PieceActivationManifest { + cid: Cid::default(), + size: fvm_shared4::piece::PaddedPieceSize(12), + verified_allocation_key: None, + notify: vec![], + }], + }], + sector_proofs: vec![RawBytes::new(vec![])], + aggregate_proof: RawBytes::new(vec![]), + update_proofs_type: fvm_shared4::sector::RegisteredUpdateProof::StackedDRG2KiBV1, + aggregate_proof_type: None, + require_activation_success: true, + require_notification_success: true, + }; + + let miner_prove_commit_sectors_ni_params = ProveCommitSectorsNIParams { + sectors: vec![SectorNIActivationInfo { + sealing_number: 12, + sealer_id: 23343, + sealed_cid: Cid::default(), + sector_number: 2343, + seal_rand_epoch: 2343, + expiration: 1000, + }], + aggregate_proof: RawBytes::new(vec![23, 2, 23]), + seal_proof_type: fvm_shared4::sector::RegisteredSealProof::StackedDRG2KiBV1P1, + aggregate_proof_type: fvm_shared4::sector::RegisteredAggregateProof::SnarkPackV1, + proving_deadline: 234, + require_activation_success: true, + }; + + let miner_internal_sector_setup_for_preseal_params = InternalSectorSetupForPresealParams { + sectors: vec![0], + reward_smoothed: FilterEstimate { + position: Default::default(), + velocity: Default::default(), + }, + reward_baseline_power: Default::default(), + quality_adj_power_smoothed: FilterEstimate { + position: Default::default(), + velocity: Default::default(), + }, + }; + + // let miner_max_termination_fee_params = MaxTerminationFeeParams { + // power: Default::default(), + // initial_pledge: TokenAmount::from_atto(1000000000000000000u64).into(), + // }; + + const MINER_ADDRESS: Address = Address::new_id(78216); + Ok(vec![ + RpcTest::identity(StateDecodeParams::request(( + MINER_ADDRESS, + Method::Constructor as u64, + to_vec(&miner_constructor_params)?, + tipset.key().into(), + ))?), + // Methods without parameters + RpcTest::identity(StateDecodeParams::request(( + MINER_ADDRESS, + Method::ControlAddresses as u64, + vec![], + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + MINER_ADDRESS, + Method::ChangeWorkerAddress as u64, + to_vec(&miner_change_worker_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + MINER_ADDRESS, + Method::ChangePeerID as u64, + to_vec(&miner_change_peer_id_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + MINER_ADDRESS, + Method::SubmitWindowedPoSt as u64, + to_vec(&miner_submit_windowed_post_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + MINER_ADDRESS, + Method::TerminateSectors as u64, + to_vec(&miner_terminate_sectors_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + MINER_ADDRESS, + Method::DeclareFaults as u64, + to_vec(&miner_declare_faults_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + MINER_ADDRESS, + Method::DeclareFaultsRecovered as u64, + to_vec(&miner_declare_faults_recovered_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + MINER_ADDRESS, + Method::OnDeferredCronEvent as u64, + to_vec(&miner_deferred_cron_event_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + MINER_ADDRESS, + Method::CheckSectorProven as u64, + to_vec(&miner_check_sector_proven_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + MINER_ADDRESS, + Method::ApplyRewards as u64, + to_vec(&miner_apply_reward_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + MINER_ADDRESS, + Method::ReportConsensusFault as u64, + to_vec(&miner_report_consensus_fault_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + MINER_ADDRESS, + Method::WithdrawBalance as u64, + to_vec(&miner_withdraw_balance_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + MINER_ADDRESS, + Method::InternalSectorSetupForPreseal as u64, + to_vec(&miner_internal_sector_setup_for_preseal_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + MINER_ADDRESS, + Method::ChangeMultiaddrs as u64, + to_vec(&miner_change_multiaddrs_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + MINER_ADDRESS, + Method::CompactPartitions as u64, + to_vec(&miner_compact_partitions_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + MINER_ADDRESS, + Method::CompactSectorNumbers as u64, + to_vec(&miner_compact_sector_numbers_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + MINER_ADDRESS, + Method::ConfirmChangeWorkerAddress as u64, + vec![], + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + MINER_ADDRESS, + Method::RepayDebt as u64, + vec![], + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + MINER_ADDRESS, + Method::ChangeOwnerAddress as u64, + to_vec(&miner_change_owner_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + MINER_ADDRESS, + Method::DisputeWindowedPoSt as u64, + to_vec(&miner_dispute_windowed_post_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + MINER_ADDRESS, + Method::PreCommitSectorBatch2 as u64, + to_vec(&miner_pre_commit_sector_batch2_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + MINER_ADDRESS, + Method::ChangeBeneficiary as u64, + to_vec(&miner_change_beneficiary_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + MINER_ADDRESS, + Method::GetBeneficiary as u64, + vec![], + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + MINER_ADDRESS, + Method::ExtendSectorExpiration2 as u64, + to_vec(&miner_extend_sector_expiration2_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + MINER_ADDRESS, + Method::ProveCommitSectors3 as u64, + to_vec(&miner_prove_commit_sectors3_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + MINER_ADDRESS, + Method::ProveReplicaUpdates3 as u64, + to_vec(&miner_prove_replica_updates3_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + MINER_ADDRESS, + Method::ProveCommitSectorsNI as u64, + to_vec(&miner_prove_commit_sectors_ni_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + MINER_ADDRESS, + Method::ChangeWorkerAddressExported as u64, + to_vec(&miner_change_worker_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + MINER_ADDRESS, + Method::ChangePeerIDExported as u64, + to_vec(&miner_change_peer_id_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + MINER_ADDRESS, + Method::WithdrawBalanceExported as u64, + to_vec(&miner_withdraw_balance_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + MINER_ADDRESS, + Method::ChangeMultiaddrsExported as u64, + to_vec(&miner_change_multiaddrs_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + MINER_ADDRESS, + Method::ConfirmChangeWorkerAddressExported as u64, + vec![], + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + MINER_ADDRESS, + Method::RepayDebtExported as u64, + vec![], + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + MINER_ADDRESS, + Method::ChangeOwnerAddressExported as u64, + to_vec(&miner_change_owner_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + MINER_ADDRESS, + Method::ChangeBeneficiaryExported as u64, + to_vec(&miner_change_beneficiary_params)?, + tipset.key().into(), + ))?), + // TODO(go-state-types): https://github.com/filecoin-project/go-state-types/issues/403 + // Enable this test once lotus starts supporting this. + // RpcTest::identity(StateDecodeParams::request(( + // MINER_ADDRESS, + // Method::GetBeneficiaryExported as u64, + // vec![], + // tipset.key().into(), + // ))?), + RpcTest::identity(StateDecodeParams::request(( + MINER_ADDRESS, + Method::GetOwnerExported as u64, + vec![], + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + MINER_ADDRESS, + Method::IsControllingAddressExported as u64, + to_vec(&miner_is_controlling_address_param)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + MINER_ADDRESS, + Method::GetSectorSizeExported as u64, + vec![], + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + MINER_ADDRESS, + Method::GetAvailableBalanceExported as u64, + vec![], + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + MINER_ADDRESS, + Method::GetVestingFundsExported as u64, + vec![], + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + MINER_ADDRESS, + Method::GetPeerIDExported as u64, + vec![], + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + MINER_ADDRESS, + Method::GetMultiaddrsExported as u64, + vec![], + tipset.key().into(), + ))?), + // TODO(go-state-types): https://github.com/filecoin-project/go-state-types/issues/403 + // Enable this test once lotus starts supporting this. + // RpcTest::identity(StateDecodeParams::request(( + // MINER_ADDRESS, + // Method::MaxTerminationFeeExported as u64, + // to_vec(&miner_max_termination_fee_params)?, + // tipset.key().into(), + // ))?), + // TODO(go-state-types): https://github.com/filecoin-project/go-state-types/issues/403 + // Enable this test once lotus starts supporting this. + // RpcTest::identity(StateDecodeParams::request(( + // MINER_ADDRESS, + // Method::InitialPledgeExported as u64, + // vec![], + // tipset.key().into(), + // ))?), + ]) +} diff --git a/src/tool/subcommands/api_cmd/state_decode_params_tests/mod.rs b/src/tool/subcommands/api_cmd/state_decode_params_tests/mod.rs new file mode 100644 index 000000000000..41ea269d16f6 --- /dev/null +++ b/src/tool/subcommands/api_cmd/state_decode_params_tests/mod.rs @@ -0,0 +1,51 @@ +// Copyright 2019-2025 ChainSafe Systems +// SPDX-License-Identifier: Apache-2.0, MIT + +use crate::blocks::Tipset; +use crate::rpc::RpcMethodExt; +use crate::rpc::prelude::StateDecodeParams; +use crate::shim::address::Address; +use crate::shim::econ::TokenAmount; +use crate::tool::subcommands::api_cmd::api_compare_tests::RpcTest; +use anyhow::Result; +use cid::Cid; +use fvm_ipld_encoding::to_vec; + +mod account; +mod cron; +mod datacap; +mod eam; +mod ethaccount; +mod evm; +mod init; +mod market; +mod miner; +mod multisig; +mod paych; +mod power; +mod reward; +mod system; +mod verified_reg; + +/// Creates all state decode params tests for all supported actors. +pub fn create_all_state_decode_params_tests(tipset: &Tipset) -> Result> { + let mut tests = Vec::new(); + + tests.extend(account::create_tests(tipset)?); + tests.extend(datacap::create_tests(tipset)?); + tests.extend(eam::create_tests(tipset)?); + tests.extend(evm::create_tests(tipset)?); + tests.extend(init::create_tests(tipset)?); + tests.extend(market::create_tests(tipset)?); + tests.extend(miner::create_tests(tipset)?); + tests.extend(multisig::create_tests(tipset)?); + tests.extend(paych::create_tests(tipset)?); + tests.extend(power::create_tests(tipset)?); + tests.extend(reward::create_tests(tipset)?); + tests.extend(verified_reg::create_tests(tipset)?); + tests.extend(cron::create_tests(tipset)?); + tests.extend(ethaccount::create_tests(tipset)?); + tests.extend(system::create_tests(tipset)?); + + Ok(tests) +} diff --git a/src/tool/subcommands/api_cmd/state_decode_params_tests/multisig.rs b/src/tool/subcommands/api_cmd/state_decode_params_tests/multisig.rs new file mode 100644 index 000000000000..37fb2e1187bb --- /dev/null +++ b/src/tool/subcommands/api_cmd/state_decode_params_tests/multisig.rs @@ -0,0 +1,120 @@ +// Copyright 2019-2025 ChainSafe Systems +// SPDX-License-Identifier: Apache-2.0, MIT + +use super::*; +use base64::{Engine, prelude::BASE64_STANDARD}; +use fil_actor_multisig_state::v17::*; + +/// Creates state decode params tests for the Multisig actor. +pub fn create_tests(tipset: &Tipset) -> Result> { + let multisig_constructor_params = ConstructorParams { + signers: vec![Address::new_id(1000).into(), Address::new_id(1001).into()], + num_approvals_threshold: Default::default(), + unlock_duration: Default::default(), + start_epoch: Default::default(), + }; + + let multisig_propose_params = ProposeParams { + to: Address::new_id(1000).into(), + value: Default::default(), + method: 0, + params: Default::default(), + }; + + let multisig_tx_id_params = TxnIDParams { + id: Default::default(), + proposal_hash: vec![Default::default()], + }; + + let multisig_add_signer_params = AddSignerParams { + signer: Address::new_id(1012).into(), + increase: false, + }; + + let multisig_remove_signer_params = RemoveSignerParams { + signer: Address::new_id(1012).into(), + decrease: false, + }; + + let multisig_swap_signer_params = SwapSignerParams { + from: Address::new_id(122).into(), + to: Address::new_id(1234).into(), + }; + + let multisig_change_num_app_params = ChangeNumApprovalsThresholdParams { new_threshold: 2 }; + + let multisig_lock_bal_params = LockBalanceParams { + start_epoch: 22, + unlock_duration: 12, + amount: Default::default(), + }; + + Ok(vec![ + RpcTest::identity(StateDecodeParams::request(( + Address::new_id(18101), // https://calibration.filscan.io/en/address/t018101/, + Method::Constructor as u64, + to_vec(&multisig_constructor_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::new_id(18101), // https://calibration.filscan.io/en/address/t018101/, + Method::Propose as u64, + to_vec(&multisig_propose_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::new_id(18101), // https://calibration.filscan.io/en/address/t018101/, + Method::Approve as u64, + to_vec(&multisig_tx_id_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::new_id(18101), // https://calibration.filscan.io/en/address/t018101/, + Method::Cancel as u64, + to_vec(&multisig_tx_id_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::new_id(18101), // https://calibration.filscan.io/en/address/t018101/, + Method::AddSigner as u64, + to_vec(&multisig_add_signer_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::new_id(18101), // https://calibration.filscan.io/en/address/t018101/, + Method::RemoveSigner as u64, + to_vec(&multisig_remove_signer_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::new_id(18101), // https://calibration.filscan.io/en/address/t018101/, + Method::SwapSigner as u64, + to_vec(&multisig_swap_signer_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::new_id(18101), // https://calibration.filscan.io/en/address/t018101/, + Method::ChangeNumApprovalsThreshold as u64, + to_vec(&multisig_change_num_app_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::new_id(18101), // https://calibration.filscan.io/en/address/t018101/, + Method::LockBalance as u64, + to_vec(&multisig_lock_bal_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::new_id(18101), // https://calibration.filscan.io/en/address/t018101/, + Method::LockBalance as u64, + to_vec(&multisig_lock_bal_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::new_id(18101), // https://calibration.filscan.io/en/address/t018101/, + Method::UniversalReceiverHook as u64, + BASE64_STANDARD.decode("ghgqRBI0Vng=")?, + tipset.key().into(), + ))?), + ]) +} diff --git a/src/tool/subcommands/api_cmd/state_decode_params_tests/paych.rs b/src/tool/subcommands/api_cmd/state_decode_params_tests/paych.rs new file mode 100644 index 000000000000..ff31ca0ba650 --- /dev/null +++ b/src/tool/subcommands/api_cmd/state_decode_params_tests/paych.rs @@ -0,0 +1,65 @@ +// Copyright 2019-2025 ChainSafe Systems +// SPDX-License-Identifier: Apache-2.0, MIT + +use super::*; +use fil_actor_paych_state::v17::*; + +/// Creates state decode params tests for the Payment Channel actor. +pub fn create_tests(tipset: &Tipset) -> Result> { + // payment channel actor address `t066116` + // https://calibration.filscan.io/en/address/t066116/ + let paych_address = Address::new_id(66116); + + let constructor_params = ConstructorParams { + from: Address::new_id(1234).into(), + to: Address::new_id(8457).into(), + }; + + let update_channel_state = UpdateChannelStateParams { + sv: SignedVoucher { + channel_addr: Address::new_id(1000).into(), + time_lock_min: 21, + time_lock_max: 234, + secret_pre_image: vec![], + extra: Some(ModVerifyParams { + actor: Address::new_id(1234).into(), + method: 223, + data: Default::default(), + }), + lane: 234, + nonce: 231, + amount: Default::default(), + min_settle_height: 0, + merges: vec![], + signature: None, + }, + secret: vec![0x11, 0x22, 0x33, 0x44, 0x55], // dummy data + }; + + Ok(vec![ + RpcTest::identity(StateDecodeParams::request(( + paych_address, + Method::Constructor as u64, + to_vec(&constructor_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + paych_address, + Method::UpdateChannelState as u64, + to_vec(&update_channel_state)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + paych_address, + Method::Settle as u64, + vec![], + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + paych_address, + Method::Collect as u64, + vec![], + tipset.key().into(), + ))?), + ]) +} diff --git a/src/tool/subcommands/api_cmd/state_decode_params_tests/power.rs b/src/tool/subcommands/api_cmd/state_decode_params_tests/power.rs new file mode 100644 index 000000000000..cd2260ae9054 --- /dev/null +++ b/src/tool/subcommands/api_cmd/state_decode_params_tests/power.rs @@ -0,0 +1,121 @@ +// Copyright 2019-2025 ChainSafe Systems +// SPDX-License-Identifier: Apache-2.0, MIT + +use super::*; +use crate::shim::sector::StoragePower; +use fil_actor_power_state::v17::*; + +/// Creates state decode params tests for the Storage Power actor. +pub fn create_tests(tipset: &Tipset) -> Result> { + let power_create_miner_params = CreateMinerParams { + owner: Address::new_id(1000).into(), + worker: Address::new_id(1001).into(), + window_post_proof_type: fvm_shared4::sector::RegisteredPoStProof::StackedDRGWindow32GiBV1P1, + peer: b"miner".to_vec(), + multiaddrs: Default::default(), + }; + + // not supported by the lotus + // let _power_miner_power_exp_params = MinerPowerParams{ + // miner: 1234, + // }; + + let power_update_claim_params = UpdateClaimedPowerParams { + raw_byte_delta: StoragePower::from(1024u64), + quality_adjusted_delta: StoragePower::from(2048u64), + }; + + let power_enroll_event_params = EnrollCronEventParams { + event_epoch: 123, + payload: Default::default(), + }; + + let power_update_pledge_ttl_params = UpdatePledgeTotalParams { + pledge_delta: Default::default(), + }; + + let power_miner_raw_params = MinerRawPowerParams { miner: 1234 }; + + Ok(vec![ + RpcTest::identity(StateDecodeParams::request(( + Address::POWER_ACTOR, + Method::CreateMiner as u64, + to_vec(&power_create_miner_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::POWER_ACTOR, + Method::UpdateClaimedPower as u64, + to_vec(&power_update_claim_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::POWER_ACTOR, + Method::EnrollCronEvent as u64, + to_vec(&power_enroll_event_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::POWER_ACTOR, + Method::UpdatePledgeTotal as u64, + to_vec(&power_update_pledge_ttl_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::POWER_ACTOR, + Method::CreateMinerExported as u64, + to_vec(&power_create_miner_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::POWER_ACTOR, + Method::MinerRawPowerExported as u64, + to_vec(&power_miner_raw_params)?, + tipset.key().into(), + ))?), + // Not supported by the lotus, + // TODO(go-state-types): https://github.com/filecoin-project/go-state-types/issues/401 + // RpcTest::identity(StateDecodeParams::request(( + // Address::POWER_ACTOR, + // Method::MinerPowerExported as u64, + // to_vec(&power_miner_power_exp_params)?, + // tipset.key().into(), + // ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::POWER_ACTOR, + Method::Constructor as u64, + vec![], + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::POWER_ACTOR, + Method::OnEpochTickEnd as u64, + vec![], + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::POWER_ACTOR, + Method::CurrentTotalPower as u64, + vec![], + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::POWER_ACTOR, + Method::NetworkRawPowerExported as u64, + vec![], + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::POWER_ACTOR, + Method::MinerCountExported as u64, + vec![], + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::POWER_ACTOR, + Method::MinerConsensusCountExported as u64, + vec![], + tipset.key().into(), + ))?), + ]) +} diff --git a/src/tool/subcommands/api_cmd/state_decode_params_tests/reward.rs b/src/tool/subcommands/api_cmd/state_decode_params_tests/reward.rs new file mode 100644 index 000000000000..bdc463e041d0 --- /dev/null +++ b/src/tool/subcommands/api_cmd/state_decode_params_tests/reward.rs @@ -0,0 +1,53 @@ +// Copyright 2019-2025 ChainSafe Systems +// SPDX-License-Identifier: Apache-2.0, MIT + +use super::*; +use fil_actor_reward_state::v17::*; +use num_bigint::BigInt; + +/// Creates state decode params tests for the Reward actor. +pub fn create_tests(tipset: &Tipset) -> Result> { + let reward_constructor_params = ConstructorParams { + power: Some(Default::default()), + }; + + let reward_award_block_reward_params = AwardBlockRewardParams { + miner: Address::new_id(1000).into(), + penalty: Default::default(), + gas_reward: Default::default(), + win_count: 0, + }; + + let reward_update_network_params = UpdateNetworkKPIParams { + curr_realized_power: Option::from(fvm_shared4::bigint::bigint_ser::BigIntDe(BigInt::from( + 111, + ))), + }; + + Ok(vec![ + RpcTest::identity(StateDecodeParams::request(( + Address::REWARD_ACTOR, + Method::Constructor as u64, + to_vec(&reward_constructor_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::REWARD_ACTOR, + Method::AwardBlockReward as u64, + to_vec(&reward_award_block_reward_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::REWARD_ACTOR, + Method::UpdateNetworkKPI as u64, + to_vec(&reward_update_network_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::REWARD_ACTOR, + Method::ThisEpochReward as u64, + vec![], + tipset.key().into(), + ))?), + ]) +} diff --git a/src/tool/subcommands/api_cmd/state_decode_params_tests/system.rs b/src/tool/subcommands/api_cmd/state_decode_params_tests/system.rs new file mode 100644 index 000000000000..49e178cfc7ed --- /dev/null +++ b/src/tool/subcommands/api_cmd/state_decode_params_tests/system.rs @@ -0,0 +1,15 @@ +// Copyright 2019-2025 ChainSafe Systems +// SPDX-License-Identifier: Apache-2.0, MIT + +use super::*; +use fil_actor_system_state::v17::*; + +/// Creates state decode params tests for the System actor. +pub fn create_tests(tipset: &Tipset) -> Result> { + Ok(vec![RpcTest::identity(StateDecodeParams::request(( + Address::SYSTEM_ACTOR, + Method::Constructor as u64, + vec![], + tipset.key().into(), + ))?)]) +} diff --git a/src/tool/subcommands/api_cmd/state_decode_params_tests/verified_reg.rs b/src/tool/subcommands/api_cmd/state_decode_params_tests/verified_reg.rs new file mode 100644 index 000000000000..ed143f85e941 --- /dev/null +++ b/src/tool/subcommands/api_cmd/state_decode_params_tests/verified_reg.rs @@ -0,0 +1,194 @@ +// Copyright 2019-2025 ChainSafe Systems +// SPDX-License-Identifier: Apache-2.0, MIT + +use super::*; +use crate::shim::sector::StoragePower; +use fil_actor_verifreg_state::v17::*; + +/// Creates state decode params tests for the Verified Registry actor. +pub fn create_tests(tipset: &Tipset) -> Result> { + let verified_reg_constructor_params = ConstructorParams { + root_key: Address::new_id(1000).into(), + }; + + let verified_reg_add_verifier_params = AddVerifierParams { + address: Address::new_id(1234).into(), + allowance: StoragePower::from(1048576u64), // 1MB + }; + + let verified_reg_remove_verifier_params = RemoveVerifierParams { + verifier: Address::new_id(1234).into(), + }; + + let verified_reg_add_verified_client_params = AddVerifiedClientParams { + address: Address::new_id(1235).into(), + allowance: types::DataCap::from(2097152u64), // 2MB + }; + + let verified_reg_remove_data_cap_params = RemoveDataCapParams { + verified_client_to_remove: Address::new_id(1236).into(), + data_cap_amount_to_remove: types::DataCap::from(1048576u64), + verifier_request_1: RemoveDataCapRequest { + verifier: Address::new_id(1237).into(), + signature: fvm_shared4::crypto::signature::Signature::new_bls( + b"test_signature_1".to_vec(), + ), + }, + verifier_request_2: RemoveDataCapRequest { + verifier: Address::new_id(1238).into(), + signature: fvm_shared4::crypto::signature::Signature::new_secp256k1( + b"test_signature_2".to_vec(), + ), + }, + }; + + let verified_reg_remove_expired_allocations_params = RemoveExpiredAllocationsParams { + client: 1239, + allocation_ids: vec![1001, 1002, 1003], + }; + + let verified_reg_claim_allocations_params = ClaimAllocationsParams { + sectors: vec![SectorAllocationClaims { + sector: 42, + expiry: 2000000, + claims: vec![ + AllocationClaim { + client: 1240, + allocation_id: 2001, + data: Cid::default(), + size: fvm_shared4::piece::PaddedPieceSize(1024), + }, + AllocationClaim { + client: 1241, + allocation_id: 2002, + data: Cid::default(), + size: fvm_shared4::piece::PaddedPieceSize(2048), + }, + ], + }], + all_or_nothing: false, + }; + + let verified_reg_get_claims_params = GetClaimsParams { + provider: 1242, + claim_ids: vec![3001, 3002, 3003], + }; + + let verified_reg_extend_claim_terms_params = ExtendClaimTermsParams { + terms: vec![ClaimTerm { + provider: 12, + claim_id: 12, + term_max: 123, + }], + }; + + let verified_reg_remove_expired_claims_params = RemoveExpiredClaimsParams { + provider: 1243, + claim_ids: vec![4001, 4002, 4003], + }; + + let verified_reg_universal_receiver_params = + fvm_actor_utils::receiver::UniversalReceiverParams { + type_: 42, + payload: fvm_ipld_encoding::RawBytes::new(vec![0x12, 0x34, 0x56, 0x78]), + }; + + Ok(vec![ + RpcTest::identity(StateDecodeParams::request(( + Address::VERIFIED_REGISTRY_ACTOR, + Method::Constructor as u64, + to_vec(&verified_reg_constructor_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::VERIFIED_REGISTRY_ACTOR, + Method::AddVerifier as u64, + to_vec(&verified_reg_add_verifier_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::VERIFIED_REGISTRY_ACTOR, + Method::RemoveVerifier as u64, + to_vec(&verified_reg_remove_verifier_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::VERIFIED_REGISTRY_ACTOR, + Method::AddVerifiedClient as u64, + to_vec(&verified_reg_add_verified_client_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::VERIFIED_REGISTRY_ACTOR, + Method::RemoveVerifiedClientDataCap as u64, + to_vec(&verified_reg_remove_data_cap_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::VERIFIED_REGISTRY_ACTOR, + Method::RemoveExpiredAllocations as u64, + to_vec(&verified_reg_remove_expired_allocations_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::VERIFIED_REGISTRY_ACTOR, + Method::ClaimAllocations as u64, + to_vec(&verified_reg_claim_allocations_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::VERIFIED_REGISTRY_ACTOR, + Method::GetClaims as u64, + to_vec(&verified_reg_get_claims_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::VERIFIED_REGISTRY_ACTOR, + Method::ExtendClaimTerms as u64, + to_vec(&verified_reg_extend_claim_terms_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::VERIFIED_REGISTRY_ACTOR, + Method::RemoveExpiredClaims as u64, + to_vec(&verified_reg_remove_expired_claims_params)?, + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::VERIFIED_REGISTRY_ACTOR, + Method::AddVerifiedClientExported as u64, + to_vec(&verified_reg_add_verified_client_params)?, // reuse same params + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::VERIFIED_REGISTRY_ACTOR, + Method::RemoveExpiredAllocationsExported as u64, + to_vec(&verified_reg_remove_expired_allocations_params)?, // reuse same params + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::VERIFIED_REGISTRY_ACTOR, + Method::GetClaimsExported as u64, + to_vec(&verified_reg_get_claims_params)?, // reuse same params + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::VERIFIED_REGISTRY_ACTOR, + Method::ExtendClaimTermsExported as u64, + to_vec(&verified_reg_extend_claim_terms_params)?, // reuse same params + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::VERIFIED_REGISTRY_ACTOR, + Method::RemoveExpiredClaimsExported as u64, + to_vec(&verified_reg_remove_expired_claims_params)?, // reuse same params + tipset.key().into(), + ))?), + RpcTest::identity(StateDecodeParams::request(( + Address::VERIFIED_REGISTRY_ACTOR, + Method::UniversalReceiverHook as u64, + to_vec(&verified_reg_universal_receiver_params)?, + tipset.key().into(), + ))?), + ]) +}