diff --git a/Cargo.lock b/Cargo.lock index 87cac2e6771..66a13acc8e5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2736,9 +2736,9 @@ dependencies = [ [[package]] name = "fil_actor_account_state" -version = "26.0.0" +version = "26.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fef55736740efc902d357c542bc4c271eb3c50b17246aa5a7f274e74800cd0e9" +checksum = "5bce491d6c0e8bc1fadc41bf34c064096baee207246304b1558d260056595c52" dependencies = [ "frc42_dispatch", "fvm_ipld_encoding", @@ -2752,9 +2752,9 @@ dependencies = [ [[package]] name = "fil_actor_cron_state" -version = "26.0.0" +version = "26.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a45b53425091fd6553663e88edcb05e1be13dd6caa43e2ee6c0dd5eebf41da0" +checksum = "fe007af8d7a3a6ddf690baaa06774cca3d7edd60448fb268cc66dac79d0999b0" dependencies = [ "fvm_ipld_encoding", "fvm_shared 2.12.1", @@ -2767,9 +2767,9 @@ dependencies = [ [[package]] name = "fil_actor_datacap_state" -version = "26.0.0" +version = "26.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d030a82e8701c165b3ea027de75dff7e3bb804dca6e206061139e71cd1d6d819" +checksum = "ccc4e64d633b659124268c385571926edf157ec502a29a5fafd53e11b0e46181" dependencies = [ "fil_actors_shared", "frc42_dispatch", @@ -2787,9 +2787,9 @@ dependencies = [ [[package]] name = "fil_actor_eam_state" -version = "26.0.0" +version = "26.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46e77cc10b11f549969ec9e87825cf7fca9e1968bbbfd9cd2430a0572abb3250" +checksum = "6579e799d8242064aee0985293f08875806a2dfce0c570ce0e065a8ae402fe50" dependencies = [ "fil_actor_evm_state", "fvm_ipld_encoding", @@ -2802,9 +2802,9 @@ dependencies = [ [[package]] name = "fil_actor_ethaccount_state" -version = "26.0.0" +version = "26.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c308461a025e4d356c5b483a6c935f66c1ee9555bb111ca0281508bf056f4c03" +checksum = "cf5f355367f50ca21a17379e107ec96a4f1de6e5b389ca9f3bc7fcc95e24be7f" dependencies = [ "fvm_ipld_encoding", "fvm_shared 3.14.1", @@ -2816,9 +2816,9 @@ dependencies = [ [[package]] name = "fil_actor_evm_state" -version = "26.0.0" +version = "26.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83a5f19c48ceb40f28a96463e0361dc8f8f774d869bc9c94fb9bc6586cfe8ae5" +checksum = "e4dddf4b74b7d6e88415da01d5fca68b093e9957ca5c828281e7ff9b6b4b6edc" dependencies = [ "cid", "fil_actors_shared", @@ -2836,9 +2836,9 @@ dependencies = [ [[package]] name = "fil_actor_init_state" -version = "26.0.0" +version = "26.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955058c10013b755edf49007485a2873470d23e3e51abf231843e6669b97c43d" +checksum = "0d1e50313c6ce3952d2311d3f74fcc311e6c52ffd133543f526e9c5a9f302f42" dependencies = [ "anyhow", "cid", @@ -2856,9 +2856,9 @@ dependencies = [ [[package]] name = "fil_actor_market_state" -version = "26.0.0" +version = "26.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e93b86b7aad2e96b95ee2b0768b638d710fec624dd829a7ab800b047990bf89" +checksum = "00a6e4acee963a6c84d5187fb411922cad3f346724d64724c0b00c51d2270d30" dependencies = [ "anyhow", "cid", @@ -2883,9 +2883,9 @@ dependencies = [ [[package]] name = "fil_actor_miner_state" -version = "26.0.0" +version = "26.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7aac0bdd84d9f7c242032761f9c4a79c0596c904ee41c581b2501d42bd7fb507" +checksum = "8982627ead9e2b70fc507372e8228da4f450ea1114c580b291ae573a764c2ecb" dependencies = [ "anyhow", "bitflags", @@ -2913,9 +2913,9 @@ dependencies = [ [[package]] name = "fil_actor_multisig_state" -version = "26.0.0" +version = "26.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1a390651c19b457f7fb3f13bb6aed31fec3beeef3cb1caaa6742328bce50813" +checksum = "bdc5064b4961b73bd7354ecfdd21548bb9fec2955a931e0af648960a8c3730da" dependencies = [ "anyhow", "cid", @@ -2936,9 +2936,9 @@ dependencies = [ [[package]] name = "fil_actor_paych_state" -version = "26.0.0" +version = "26.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25f2e337d38512808a29361127bd5d65ddfb205ded6a4c5c9c747c09471c75d1" +checksum = "9c33e9d6c4ad985e944163717045086a9f59ee910162fadca6eb3bc13934da64" dependencies = [ "cid", "fil_actors_shared", @@ -2954,9 +2954,9 @@ dependencies = [ [[package]] name = "fil_actor_power_state" -version = "26.0.0" +version = "26.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "251bfc751bf3369cebab72d5a6021548dcec4183569bdfc78096dccad8fbb2a6" +checksum = "567169525a8cb91e3fd7f0b65a939aeb0611fc9043a186f297fe393488a955d4" dependencies = [ "anyhow", "cid", @@ -2977,9 +2977,9 @@ dependencies = [ [[package]] name = "fil_actor_reward_state" -version = "26.0.0" +version = "26.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67de85d08a4ebe5acc250eea48a95907dd6afc3114cf96f62f25072e8e990fb7" +checksum = "39cae4c84f48ac55fb42208576da25d9cd4e89cd4d17dd792328968814f271bb" dependencies = [ "fil_actors_shared", "fvm_ipld_encoding", @@ -2994,9 +2994,9 @@ dependencies = [ [[package]] name = "fil_actor_system_state" -version = "26.0.0" +version = "26.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "203b1d6a15f6d95ab0708d4a855bdb9e967eff02598a5a03025851caa38d8006" +checksum = "b74726607cf81eff0aefe57e6aa47f13375abaee99b6db6b9f84ca3d9f5ed0dc" dependencies = [ "cid", "fil_actors_shared", @@ -3012,9 +3012,9 @@ dependencies = [ [[package]] name = "fil_actor_verifreg_state" -version = "26.0.0" +version = "26.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64da13edf021f6397bd43a2fdb12bc07b87cd15679f367eae0a51c27b7a17e84" +checksum = "2ef14c54a8b70893520c27b0b02bce16270cb41031dc2b1b1c0583140a037020" dependencies = [ "anyhow", "cid", @@ -3033,9 +3033,9 @@ dependencies = [ [[package]] name = "fil_actors_shared" -version = "26.0.0" +version = "26.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa0ba0273fd67059d6296fcb6a343f52c26ef6c23145117605a1739677be8fdf" +checksum = "8500a9a1bb3bae78e84b231bc374b0fe22eb989b1f312d8b0fe119a3b189a949" dependencies = [ "anyhow", "cid", diff --git a/Cargo.toml b/Cargo.toml index 4283ade99bf..a17b5d68ead 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -76,22 +76,22 @@ educe = { version = "0.6", features = ["Debug"], default-features = false } enumflags2 = "0.7" ethereum-types = { version = "0.16", features = ["ethbloom"] } ez-jsonrpc-types = "0.5" -fil_actor_account_state = { version = "26.0.0" } -fil_actor_cron_state = { version = "26.0.0" } -fil_actor_datacap_state = { version = "26.0.0" } -fil_actor_eam_state = { version = "26.0.0" } -fil_actor_ethaccount_state = { version = "26.0.0" } -fil_actor_evm_state = { version = "26.0.0" } -fil_actor_init_state = { version = "26.0.0" } -fil_actor_market_state = { version = "26.0.0" } -fil_actor_miner_state = { version = "26.0.0" } -fil_actor_multisig_state = { version = "26.0.0" } -fil_actor_paych_state = { version = "26.0.0" } -fil_actor_power_state = { version = "26.0.0" } -fil_actor_reward_state = { version = "26.0.0" } -fil_actor_system_state = { version = "26.0.0" } -fil_actor_verifreg_state = { version = "26.0.0" } -fil_actors_shared = { version = "26.0.0", features = ["json"] } +fil_actor_account_state = { version = "26.1.0" } +fil_actor_cron_state = { version = "26.1.0" } +fil_actor_datacap_state = { version = "26.1.0" } +fil_actor_eam_state = { version = "26.1.0" } +fil_actor_ethaccount_state = { version = "26.1.0" } +fil_actor_evm_state = { version = "26.1.0" } +fil_actor_init_state = { version = "26.1.0" } +fil_actor_market_state = { version = "26.1.0" } +fil_actor_miner_state = { version = "26.1.0" } +fil_actor_multisig_state = { version = "26.1.0" } +fil_actor_paych_state = { version = "26.1.0" } +fil_actor_power_state = { version = "26.1.0" } +fil_actor_reward_state = { version = "26.1.0" } +fil_actor_system_state = { version = "26.1.0" } +fil_actor_verifreg_state = { version = "26.1.0" } +fil_actors_shared = { version = "26.1.0", features = ["json"] } flate2 = "1" flume = { workspace = true } fs_extra = "1" diff --git a/src/lotus_json/actors/params/miner_params.rs b/src/lotus_json/actors/params/miner_params.rs index e2bfc8d7325..3db8770c1af 100644 --- a/src/lotus_json/actors/params/miner_params.rs +++ b/src/lotus_json/actors/params/miner_params.rs @@ -9,8 +9,10 @@ use crate::shim::{ sector::{PoStProof, RegisteredPoStProof, RegisteredSealProof, SectorNumber}, }; use ::cid::Cid; +use fil_actor_miner_state::v18::SectorStatusCode; use fil_actors_shared::fvm_ipld_bitfield::{BitField, UnvalidatedBitField}; use fil_actors_shared::v16::reward::FilterEstimate; +use fvm_ipld_encoding::repr::{Deserialize_repr, Serialize_repr}; use fvm_ipld_encoding::{BytesDe, RawBytes}; use fvm_shared4::deal::DealID; use fvm_shared4::sector::RegisteredUpdateProof; @@ -603,6 +605,33 @@ pub struct ProveCommitSectorsNIParamsLotusJson { pub require_activation_success: bool, } +#[derive(Serialize, Deserialize, JsonSchema, Debug, Clone, PartialEq)] +#[serde(rename_all = "PascalCase")] +pub struct GenerateSectorLocationParamsLotusJson { + pub sector_number: SectorNumber, +} + +#[derive(Serialize_repr, Deserialize_repr, JsonSchema, Debug, Clone, Copy, PartialEq)] +#[repr(u8)] +#[schemars(with = "u8")] +pub enum SectorStatusCodeLotusJson { + Dead = 0, + Active = 1, + Faulty = 2, +} + +#[derive(Serialize, Deserialize, JsonSchema, Debug, Clone, PartialEq)] +#[serde(rename_all = "PascalCase")] +pub struct ValidateSectorStatusParamsLotusJson { + pub sector_number: SectorNumber, + #[schemars(with = "LotusJson")] + #[serde(with = "crate::lotus_json")] + pub status: SectorStatusCode, + #[schemars(with = "LotusJson>")] + #[serde(with = "crate::lotus_json")] + pub aux_data: Vec, +} + macro_rules! impl_lotus_json_for_miner_change_worker_param { ($($version:literal),+) => { $( @@ -4010,6 +4039,146 @@ macro_rules! impl_miner_internal_sector_setup_for_preseal_params { }; } +macro_rules! impl_lotus_json_for_generate_sector_location_params { + ($($version:literal),+) => { + $( + paste! { + mod [] { + use super::*; + type T = fil_actor_miner_state::[]::GenerateSectorLocationParams; + #[test] + fn snapshots() { + crate::lotus_json::assert_all_snapshots::(); + } + impl HasLotusJson for T { + type LotusJson = GenerateSectorLocationParamsLotusJson; + #[cfg(test)] + fn snapshots() -> Vec<(serde_json::Value, Self)> { + vec![( + json!({ + "SectorNumber": 200, + }), + Self { + sector_number: 200 + }, + )] + } + + fn into_lotus_json(self) -> Self::LotusJson { + GenerateSectorLocationParamsLotusJson { + sector_number: self.sector_number, + } + } + + fn from_lotus_json(lotus_json: Self::LotusJson) -> Self { + Self { + sector_number: lotus_json.sector_number, + } + } + } + } + } + )+ + }; +} + +macro_rules! impl_lotus_json_sector_status_code { + ($($version:literal),+) => { + $( + paste!{ + mod [] { + use super::*; + type T = fil_actor_miner_state::[]::SectorStatusCode; + #[test] + fn snapshots() { + crate::lotus_json::assert_all_snapshots::(); + } + impl HasLotusJson for T { + type LotusJson = SectorStatusCodeLotusJson; + + #[cfg(test)] + fn snapshots() -> Vec<(serde_json::Value, Self)> { + vec![ + (json!(0), Self::Dead), + (json!(1), Self::Active), + (json!(2), Self::Faulty), + ] + } + + fn into_lotus_json(self) -> Self::LotusJson { + match self { + T::Dead => SectorStatusCodeLotusJson::Dead, + T::Active => SectorStatusCodeLotusJson::Active, + T::Faulty => SectorStatusCodeLotusJson::Faulty, + } + } + + fn from_lotus_json(lotus_json: Self::LotusJson) -> Self { + match lotus_json { + SectorStatusCodeLotusJson::Dead => T::Dead, + SectorStatusCodeLotusJson::Active => T::Active, + SectorStatusCodeLotusJson::Faulty => T::Faulty, + } + } + } + } + } + )+ + }; +} + +macro_rules! impl_lotus_json_for_validate_sector_status_change_params { + ($($version:literal),+) => { + $( + paste! { + mod [] { + use super::*; + type T = fil_actor_miner_state::[]::ValidateSectorStatusParams; + #[test] + fn snapshots() { + crate::lotus_json::assert_all_snapshots::(); + } + + impl HasLotusJson for T { + type LotusJson = ValidateSectorStatusParamsLotusJson; + #[cfg(test)] + fn snapshots() -> Vec<(serde_json::Value, Self)> { + vec![( + json!({ + "SectorNumber": 200, + "Status": 1, + "AuxData": "AQID", + }), + Self { + sector_number: 200, + status: fil_actor_miner_state::[]::SectorStatusCode::Active, + aux_data: vec![1, 2, 3], + } + )] + } + + fn into_lotus_json(self) -> Self::LotusJson { + ValidateSectorStatusParamsLotusJson { + sector_number: self.sector_number, + status: self.status, + aux_data: self.aux_data, + } + } + + fn from_lotus_json(lotus_json: Self::LotusJson) -> Self { + Self { + sector_number: lotus_json.sector_number, + status: lotus_json.status, + aux_data: lotus_json.aux_data, + } + } + } + } + } + )+ + } +} + impl_lotus_json_for_miner_constructor_params!(8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18); impl_lotus_json_for_miner_change_worker_param!(8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18); impl_lotus_json_for_miner_change_owner_address_params!(11, 12, 13, 14, 15, 16, 17, 18); @@ -4069,3 +4238,6 @@ 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, 17, 18); impl_miner_internal_sector_setup_for_preseal_params!(14, 15, 16, 17, 18); +impl_lotus_json_for_generate_sector_location_params!(18); +impl_lotus_json_sector_status_code!(18); +impl_lotus_json_for_validate_sector_status_change_params!(18); diff --git a/src/rpc/registry/actors/miner.rs b/src/rpc/registry/actors/miner.rs index ef1cc7615f9..f6a577e1031 100644 --- a/src/rpc/registry/actors/miner.rs +++ b/src/rpc/registry/actors/miner.rs @@ -2,8 +2,8 @@ // 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 crate::shim::{address::Address, sector::SectorNumber}; use cid::Cid; use fil_actors_shared::actor_versions::ActorVersion; @@ -150,6 +150,27 @@ macro_rules! register_miner_common_method_v16_onwards { }}; } +macro_rules! register_miner_common_method_v18_onwards { + ($registry:expr, $code_cid:expr, $state_version:path) => {{ + use $state_version::{GenerateSectorLocationParams, Method, ValidateSectorStatusParams}; + register_actor_methods!( + $registry, + $code_cid, + [ + ( + Method::GenerateSectorLocationExported, + GenerateSectorLocationParams + ), + ( + Method::ValidateSectorStatusExported, + ValidateSectorStatusParams + ), + (Method::GetNominalSectorExpirationExported, SectorNumber), + ] + ); + }}; +} + fn register_miner_version_8(registry: &mut MethodRegistry, cid: Cid) { register_miner_basic_methods!(registry, cid, fil_actor_miner_state::v8); @@ -395,6 +416,7 @@ fn register_miner_version_18(registry: &mut MethodRegistry, cid: Cid) { register_miner_common_methods_v10_onwards!(registry, cid, fil_actor_miner_state::v18); register_miner_common_method_v14_onwards!(registry, cid, fil_actor_miner_state::v18); register_miner_common_method_v16_onwards!(registry, cid, fil_actor_miner_state::v18); + register_miner_common_method_v18_onwards!(registry, cid, fil_actor_miner_state::v18); } pub(crate) fn register_miner_actor_methods(