From 541cfd73b19d09b131565cbaeac5611562178ea4 Mon Sep 17 00:00:00 2001 From: elmattic Date: Mon, 11 Aug 2025 17:56:26 +0200 Subject: [PATCH 01/71] Add market actor --- src/rpc/registry/actors/market.rs | 55 +++++++++++++++++++++++++++++++ src/rpc/registry/actors/mod.rs | 1 + src/rpc/registry/methods_reg.rs | 3 +- 3 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 src/rpc/registry/actors/market.rs diff --git a/src/rpc/registry/actors/market.rs b/src/rpc/registry/actors/market.rs new file mode 100644 index 000000000000..6cdc77c91f63 --- /dev/null +++ b/src/rpc/registry/actors/market.rs @@ -0,0 +1,55 @@ +// Copyright 2019-2025 ChainSafe Systems +// SPDX-License-Identifier: Apache-2.0, MIT + +use crate::rpc::registry::methods_reg::{MethodRegistry, register_actor_methods}; +use crate::shim::message::MethodNum; +use anyhow::Result; +use cid::Cid; + +// Macro for versions 8-10 that only have Exec method +macro_rules! register_market_versions_8_to_10 { + ($registry:expr, $code_cid:expr, $state_version:path) => {{ + use $state_version::{ConstructorParams, ExecParams, Method}; + + register_actor_methods!( + $registry, + $code_cid, + [ + (Method::Constructor, ConstructorParams), + (Method::Exec, ExecParams), + ] + ); + }}; +} + +// Macro for versions 11-16 that have Exec4 +macro_rules! register_market_versions_11_to_16 { + ($registry:expr, $code_cid:expr, $state_version:path) => {{ + use $state_version::{ConstructorParams, Exec4Params, ExecParams, Method}; + + register_actor_methods!( + $registry, + $code_cid, + [ + (Method::Constructor, ConstructorParams), + (Method::Exec, ExecParams), + (Method::Exec4, Exec4Params) + ] + ); + }}; +} + +pub(crate) fn register_actor_methods(registry: &mut MethodRegistry, cid: Cid, version: u64) { + match version { + 8 => register_market_versions_8_to_10!(registry, cid, fil_actor_init_state::v8), + 9 => register_market_versions_8_to_10!(registry, cid, fil_actor_init_state::v9), + 10 => register_market_versions_8_to_10!(registry, cid, fil_actor_init_state::v10), + 11 => register_market_versions_11_to_16!(registry, cid, fil_actor_init_state::v11), + 12 => register_market_versions_11_to_16!(registry, cid, fil_actor_init_state::v12), + 13 => register_market_versions_11_to_16!(registry, cid, fil_actor_init_state::v13), + 14 => register_market_versions_11_to_16!(registry, cid, fil_actor_init_state::v14), + 15 => register_market_versions_11_to_16!(registry, cid, fil_actor_init_state::v15), + 16 => register_market_versions_11_to_16!(registry, cid, fil_actor_init_state::v16), + _ => {} + } +} diff --git a/src/rpc/registry/actors/mod.rs b/src/rpc/registry/actors/mod.rs index 7d995f8e3658..0985b96acfab 100644 --- a/src/rpc/registry/actors/mod.rs +++ b/src/rpc/registry/actors/mod.rs @@ -4,6 +4,7 @@ pub(crate) mod account; pub(crate) mod evm; pub(crate) mod init; +pub(crate) mod market; pub(crate) mod miner; pub(crate) mod multisig; pub(crate) mod power; diff --git a/src/rpc/registry/methods_reg.rs b/src/rpc/registry/methods_reg.rs index cb9a05bf3e8c..f8834bb86c93 100644 --- a/src/rpc/registry/methods_reg.rs +++ b/src/rpc/registry/methods_reg.rs @@ -74,7 +74,7 @@ impl MethodRegistry { fn register_known_methods(&mut self) { use crate::rpc::registry::actors::{ - account, evm, init, miner, multisig, power, reward, system, + account, evm, init, market, miner, multisig, power, reward, system, }; for (&cid, &(actor_type, version)) in ACTOR_REGISTRY.iter() { @@ -89,6 +89,7 @@ impl MethodRegistry { BuiltinActor::Power => power::register_actor_methods(self, cid, version), BuiltinActor::Reward => reward::register_actor_methods(self, cid, version), BuiltinActor::Multisig => multisig::register_actor_methods(self, cid, version), + BuiltinActor::Market => market::register_actor_methods(self, cid, version), _ => {} } } From 08828a1c3f6fe1cf12b2a9f30fa242a4976295a3 Mon Sep 17 00:00:00 2001 From: elmattic Date: Wed, 13 Aug 2025 18:12:21 +0200 Subject: [PATCH 02/71] Add market module to registry --- .../actor_states/methods/market_actor.rs | 58 ++++++++++++++ src/lotus_json/actor_states/methods/mod.rs | 1 + src/rpc/registry/actors/market.rs | 75 ++++++++++++++----- 3 files changed, 114 insertions(+), 20 deletions(-) create mode 100644 src/lotus_json/actor_states/methods/market_actor.rs diff --git a/src/lotus_json/actor_states/methods/market_actor.rs b/src/lotus_json/actor_states/methods/market_actor.rs new file mode 100644 index 000000000000..96f54a29c77e --- /dev/null +++ b/src/lotus_json/actor_states/methods/market_actor.rs @@ -0,0 +1,58 @@ +// Copyright 2019-2025 ChainSafe Systems +// SPDX-License-Identifier: Apache-2.0, MIT + +use super::*; +use crate::shim::address::Address; +use crate::shim::econ::TokenAmount; +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 WithdrawBalanceParamsLotusJson { + #[schemars(with = "LotusJson
")] + #[serde(with = "crate::lotus_json")] + pub provider_or_client: Address, + #[schemars(with = "LotusJson")] + #[serde(with = "crate::lotus_json")] + pub amount: TokenAmount, +} + +macro_rules! impl_lotus_json_for_withdraw_balance_params { + ($($version:literal),+) => { + $( + paste! { + impl HasLotusJson for fil_actor_market_state::[]::WithdrawBalanceParams { + type LotusJson = WithdrawBalanceParamsLotusJson; + + #[cfg(test)] + fn snapshots() -> Vec<(serde_json::Value, Self)> { + vec![ + ] + } + + fn into_lotus_json(self) -> Self::LotusJson { + Self::LotusJson { + provider_or_client: self.provider_or_client.into(), + amount: self.amount.into(), + } + } + + fn from_lotus_json(json: Self::LotusJson) -> Self { + Self { + provider_or_client: json.provider_or_client.into(), + amount: json.amount.into(), + } + } + } + } + )+ + }; +} + +impl_lotus_json_for_withdraw_balance_params!(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 index 49d8ecd20ab0..ca93081078c0 100644 --- a/src/lotus_json/actor_states/methods/mod.rs +++ b/src/lotus_json/actor_states/methods/mod.rs @@ -7,6 +7,7 @@ mod evm_constructor_params; mod init_constructor_params; mod init_exec4_params; mod init_exec_params; +mod market_actor; mod miner_change_worker_params; mod miner_constructor_params; mod multisig_actor; diff --git a/src/rpc/registry/actors/market.rs b/src/rpc/registry/actors/market.rs index 6cdc77c91f63..561e27819d70 100644 --- a/src/rpc/registry/actors/market.rs +++ b/src/rpc/registry/actors/market.rs @@ -6,34 +6,69 @@ use crate::shim::message::MethodNum; use anyhow::Result; use cid::Cid; -// Macro for versions 8-10 that only have Exec method -macro_rules! register_market_versions_8_to_10 { +macro_rules! register_market_versions_8_to_9 { ($registry:expr, $code_cid:expr, $state_version:path) => {{ - use $state_version::{ConstructorParams, ExecParams, Method}; + use $state_version::{self, Method}; register_actor_methods!( $registry, $code_cid, [ - (Method::Constructor, ConstructorParams), - (Method::Exec, ExecParams), + (Method::Constructor, empty), + // (Method::AddBalance, AddBalanceParams), + // (Method::WithdrawBalance, WithdrawBalanceParams), + // (Method::PublishStorageDeals, PublishStorageDealsParams), ] ); }}; } -// Macro for versions 11-16 that have Exec4 -macro_rules! register_market_versions_11_to_16 { +macro_rules! register_market_versions_10_to_11 { ($registry:expr, $code_cid:expr, $state_version:path) => {{ - use $state_version::{ConstructorParams, Exec4Params, ExecParams, Method}; + use $state_version::{self, Method, PublishStorageDealsParams, WithdrawBalanceParams}; register_actor_methods!( $registry, $code_cid, [ - (Method::Constructor, ConstructorParams), - (Method::Exec, ExecParams), - (Method::Exec4, Exec4Params) + (Method::Constructor, empty), + // (Method::AddBalance, AddBalanceParams), + // (Method::WithdrawBalance, WithdrawBalanceParams), + // (Method::PublishStorageDeals, PublishStorageDealsParams), + ] + ); + }}; +} + +macro_rules! register_market_versions_12 { + ($registry:expr, $code_cid:expr, $state_version:path) => {{ + use $state_version::{Method, PublishStorageDealsParams, WithdrawBalanceParams}; + + register_actor_methods!( + $registry, + $code_cid, + [ + (Method::Constructor, empty), + // (Method::AddBalance, AddBalanceParams), + // (Method::WithdrawBalance, WithdrawBalanceParams), + // (Method::PublishStorageDeals, PublishStorageDealsParams), + ] + ); + }}; +} + +macro_rules! register_market_versions_13_to_16 { + ($registry:expr, $code_cid:expr, $state_version:path) => {{ + use $state_version::{Method, PublishStorageDealsParams, WithdrawBalanceParams}; + + register_actor_methods!( + $registry, + $code_cid, + [ + (Method::Constructor, empty), + // (Method::AddBalance, AddBalanceParams), + // (Method::WithdrawBalance, WithdrawBalanceParams), + // (Method::PublishStorageDeals, PublishStorageDealsParams), ] ); }}; @@ -41,15 +76,15 @@ macro_rules! register_market_versions_11_to_16 { pub(crate) fn register_actor_methods(registry: &mut MethodRegistry, cid: Cid, version: u64) { match version { - 8 => register_market_versions_8_to_10!(registry, cid, fil_actor_init_state::v8), - 9 => register_market_versions_8_to_10!(registry, cid, fil_actor_init_state::v9), - 10 => register_market_versions_8_to_10!(registry, cid, fil_actor_init_state::v10), - 11 => register_market_versions_11_to_16!(registry, cid, fil_actor_init_state::v11), - 12 => register_market_versions_11_to_16!(registry, cid, fil_actor_init_state::v12), - 13 => register_market_versions_11_to_16!(registry, cid, fil_actor_init_state::v13), - 14 => register_market_versions_11_to_16!(registry, cid, fil_actor_init_state::v14), - 15 => register_market_versions_11_to_16!(registry, cid, fil_actor_init_state::v15), - 16 => register_market_versions_11_to_16!(registry, cid, fil_actor_init_state::v16), + 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_13_to_16!(registry, cid, fil_actor_market_state::v13), + 14 => register_market_versions_13_to_16!(registry, cid, fil_actor_market_state::v14), + 15 => register_market_versions_13_to_16!(registry, cid, fil_actor_market_state::v15), + 16 => register_market_versions_13_to_16!(registry, cid, fil_actor_market_state::v16), _ => {} } } From 755f1661e1726706cde33a8e8ce093098cb85045 Mon Sep 17 00:00:00 2001 From: elmattic Date: Wed, 13 Aug 2025 18:46:13 +0200 Subject: [PATCH 03/71] Add methods without parameters --- src/rpc/registry/actors/market.rs | 52 +++++++++++++++++++++++++++---- 1 file changed, 46 insertions(+), 6 deletions(-) diff --git a/src/rpc/registry/actors/market.rs b/src/rpc/registry/actors/market.rs index 561e27819d70..d403e5f30af9 100644 --- a/src/rpc/registry/actors/market.rs +++ b/src/rpc/registry/actors/market.rs @@ -8,35 +8,55 @@ use cid::Cid; macro_rules! register_market_versions_8_to_9 { ($registry:expr, $code_cid:expr, $state_version:path) => {{ - use $state_version::{self, Method}; + use $state_version::{Method}; register_actor_methods!( $registry, $code_cid, [ - (Method::Constructor, empty), // (Method::AddBalance, AddBalanceParams), // (Method::WithdrawBalance, WithdrawBalanceParams), // (Method::PublishStorageDeals, PublishStorageDealsParams), ] ); + + // Register methods without parameters + register_actor_methods!( + $registry, + $code_cid, + [ + (Method::Constructor, empty), + (Method::AddBalance, empty), + (Method::CronTick, empty), + ] + ); }}; } macro_rules! register_market_versions_10_to_11 { ($registry:expr, $code_cid:expr, $state_version:path) => {{ - use $state_version::{self, Method, PublishStorageDealsParams, WithdrawBalanceParams}; + use $state_version::{Method, PublishStorageDealsParams, WithdrawBalanceParams}; register_actor_methods!( $registry, $code_cid, [ - (Method::Constructor, empty), // (Method::AddBalance, AddBalanceParams), // (Method::WithdrawBalance, WithdrawBalanceParams), // (Method::PublishStorageDeals, PublishStorageDealsParams), ] ); + + // Register methods without parameters + register_actor_methods!( + $registry, + $code_cid, + [ + (Method::Constructor, empty), + (Method::AddBalance, empty), + (Method::CronTick, empty), + ] + ); }}; } @@ -48,12 +68,22 @@ macro_rules! register_market_versions_12 { $registry, $code_cid, [ - (Method::Constructor, empty), // (Method::AddBalance, AddBalanceParams), // (Method::WithdrawBalance, WithdrawBalanceParams), // (Method::PublishStorageDeals, PublishStorageDealsParams), ] ); + + // Register methods without parameters + register_actor_methods!( + $registry, + $code_cid, + [ + (Method::Constructor, empty), + (Method::AddBalance, empty), + (Method::CronTick, empty), + ] + ); }}; } @@ -65,12 +95,22 @@ macro_rules! register_market_versions_13_to_16 { $registry, $code_cid, [ - (Method::Constructor, empty), // (Method::AddBalance, AddBalanceParams), // (Method::WithdrawBalance, WithdrawBalanceParams), // (Method::PublishStorageDeals, PublishStorageDealsParams), ] ); + + // Register methods without parameters + register_actor_methods!( + $registry, + $code_cid, + [ + (Method::Constructor, empty), + (Method::AddBalance, empty), + (Method::CronTick, empty), + ] + ); }}; } From 76d62192bbb3703a4c98949ed8c81ab7ddaade95 Mon Sep 17 00:00:00 2001 From: elmattic Date: Wed, 13 Aug 2025 19:02:13 +0200 Subject: [PATCH 04/71] Add AddBalance method --- .../actor_states/methods/market_actor.rs | 40 +++++++++++++++++++ src/rpc/registry/actors/market.rs | 25 +++++------- 2 files changed, 50 insertions(+), 15 deletions(-) diff --git a/src/lotus_json/actor_states/methods/market_actor.rs b/src/lotus_json/actor_states/methods/market_actor.rs index 96f54a29c77e..73fd6b910946 100644 --- a/src/lotus_json/actor_states/methods/market_actor.rs +++ b/src/lotus_json/actor_states/methods/market_actor.rs @@ -23,6 +23,14 @@ pub struct WithdrawBalanceParamsLotusJson { pub amount: TokenAmount, } +#[derive(Serialize, Deserialize, JsonSchema, Debug, Clone, PartialEq)] +#[serde(rename_all = "PascalCase")] +pub struct AddBalanceParamsLotusJson { + #[schemars(with = "LotusJson
")] + #[serde(with = "crate::lotus_json")] + pub provider_or_client: Address, +} + macro_rules! impl_lotus_json_for_withdraw_balance_params { ($($version:literal),+) => { $( @@ -56,3 +64,35 @@ macro_rules! impl_lotus_json_for_withdraw_balance_params { } impl_lotus_json_for_withdraw_balance_params!(9, 10, 11, 12, 13, 14, 15, 16); + +macro_rules! impl_lotus_json_for_add_balance_params { + ($($version:literal),+) => { + $( + paste! { + impl HasLotusJson for fil_actor_market_state::[]::AddBalanceParams { + type LotusJson = AddBalanceParamsLotusJson; + + #[cfg(test)] + fn snapshots() -> Vec<(serde_json::Value, Self)> { + vec![ + ] + } + + fn into_lotus_json(self) -> Self::LotusJson { + Self::LotusJson { + provider_or_client: self.provider_or_client.into(), + } + } + + fn from_lotus_json(json: Self::LotusJson) -> Self { + Self { + provider_or_client: json.provider_or_client.into(), + } + } + } + } + )+ + }; +} + +impl_lotus_json_for_add_balance_params!(11, 12, 13, 14, 15, 16); diff --git a/src/rpc/registry/actors/market.rs b/src/rpc/registry/actors/market.rs index d403e5f30af9..547223efe230 100644 --- a/src/rpc/registry/actors/market.rs +++ b/src/rpc/registry/actors/market.rs @@ -26,7 +26,6 @@ macro_rules! register_market_versions_8_to_9 { $code_cid, [ (Method::Constructor, empty), - (Method::AddBalance, empty), (Method::CronTick, empty), ] ); @@ -51,24 +50,22 @@ macro_rules! register_market_versions_10_to_11 { register_actor_methods!( $registry, $code_cid, - [ - (Method::Constructor, empty), - (Method::AddBalance, empty), - (Method::CronTick, empty), - ] + [(Method::Constructor, empty), (Method::CronTick, empty),] ); }}; } macro_rules! register_market_versions_12 { ($registry:expr, $code_cid:expr, $state_version:path) => {{ - use $state_version::{Method, PublishStorageDealsParams, WithdrawBalanceParams}; + use $state_version::{ + AddBalanceParams, Method, PublishStorageDealsParams, WithdrawBalanceParams, + }; register_actor_methods!( $registry, $code_cid, [ - // (Method::AddBalance, AddBalanceParams), + (Method::AddBalance, AddBalanceParams), // (Method::WithdrawBalance, WithdrawBalanceParams), // (Method::PublishStorageDeals, PublishStorageDealsParams), ] @@ -78,24 +75,22 @@ macro_rules! register_market_versions_12 { register_actor_methods!( $registry, $code_cid, - [ - (Method::Constructor, empty), - (Method::AddBalance, empty), - (Method::CronTick, empty), - ] + [(Method::Constructor, empty), (Method::CronTick, empty),] ); }}; } macro_rules! register_market_versions_13_to_16 { ($registry:expr, $code_cid:expr, $state_version:path) => {{ - use $state_version::{Method, PublishStorageDealsParams, WithdrawBalanceParams}; + use $state_version::{ + AddBalanceParams, Method, PublishStorageDealsParams, WithdrawBalanceParams, + }; register_actor_methods!( $registry, $code_cid, [ - // (Method::AddBalance, AddBalanceParams), + (Method::AddBalance, AddBalanceParams), // (Method::WithdrawBalance, WithdrawBalanceParams), // (Method::PublishStorageDeals, PublishStorageDealsParams), ] From 82b9d907a8494aaa34ae78d28668590368e02cfb Mon Sep 17 00:00:00 2001 From: elmattic Date: Thu, 14 Aug 2025 11:55:06 +0200 Subject: [PATCH 05/71] Rename module --- .../methods/{market_actor.rs => market_actor_params.rs} | 0 src/lotus_json/actor_states/methods/mod.rs | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename src/lotus_json/actor_states/methods/{market_actor.rs => market_actor_params.rs} (100%) diff --git a/src/lotus_json/actor_states/methods/market_actor.rs b/src/lotus_json/actor_states/methods/market_actor_params.rs similarity index 100% rename from src/lotus_json/actor_states/methods/market_actor.rs rename to src/lotus_json/actor_states/methods/market_actor_params.rs diff --git a/src/lotus_json/actor_states/methods/mod.rs b/src/lotus_json/actor_states/methods/mod.rs index ca93081078c0..56a0ad41d146 100644 --- a/src/lotus_json/actor_states/methods/mod.rs +++ b/src/lotus_json/actor_states/methods/mod.rs @@ -7,7 +7,7 @@ mod evm_constructor_params; mod init_constructor_params; mod init_exec4_params; mod init_exec_params; -mod market_actor; +mod market_actor_params; mod miner_change_worker_params; mod miner_constructor_params; mod multisig_actor; From 0761e68771822d7b5670a7b9c25ef713bd73cde8 Mon Sep 17 00:00:00 2001 From: elmattic Date: Thu, 14 Aug 2025 12:37:18 +0200 Subject: [PATCH 06/71] Remove method --- src/rpc/registry/actors/market.rs | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/rpc/registry/actors/market.rs b/src/rpc/registry/actors/market.rs index 547223efe230..b15c8acd16ad 100644 --- a/src/rpc/registry/actors/market.rs +++ b/src/rpc/registry/actors/market.rs @@ -100,11 +100,7 @@ macro_rules! register_market_versions_13_to_16 { register_actor_methods!( $registry, $code_cid, - [ - (Method::Constructor, empty), - (Method::AddBalance, empty), - (Method::CronTick, empty), - ] + [(Method::Constructor, empty), (Method::CronTick, empty),] ); }}; } From b754541728dc91ae9bda69e2564106ee685b019f Mon Sep 17 00:00:00 2001 From: elmattic Date: Thu, 14 Aug 2025 13:29:01 +0200 Subject: [PATCH 07/71] Ad WithdrawBalance method --- src/rpc/registry/actors/market.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/rpc/registry/actors/market.rs b/src/rpc/registry/actors/market.rs index b15c8acd16ad..dc41c0ec23fb 100644 --- a/src/rpc/registry/actors/market.rs +++ b/src/rpc/registry/actors/market.rs @@ -91,8 +91,7 @@ macro_rules! register_market_versions_13_to_16 { $code_cid, [ (Method::AddBalance, AddBalanceParams), - // (Method::WithdrawBalance, WithdrawBalanceParams), - // (Method::PublishStorageDeals, PublishStorageDealsParams), + (Method::WithdrawBalance, WithdrawBalanceParams), ] ); From 1bea3e5e95ac9d74133a9ab4b02c2947e2ebf7f6 Mon Sep 17 00:00:00 2001 From: elmattic Date: Thu, 14 Aug 2025 15:23:49 +0200 Subject: [PATCH 08/71] Add PaddedPieceSize --- .../methods/market_actor_params.rs | 99 ++++++++++++++++--- src/lotus_json/mod.rs | 1 + src/lotus_json/padded_piece_size.rs | 26 +++++ 3 files changed, 115 insertions(+), 11 deletions(-) create mode 100644 src/lotus_json/padded_piece_size.rs diff --git a/src/lotus_json/actor_states/methods/market_actor_params.rs b/src/lotus_json/actor_states/methods/market_actor_params.rs index 73fd6b910946..976e8480b035 100644 --- a/src/lotus_json/actor_states/methods/market_actor_params.rs +++ b/src/lotus_json/actor_states/methods/market_actor_params.rs @@ -3,9 +3,14 @@ use super::*; use crate::shim::address::Address; +use crate::shim::clock::ChainEpoch; use crate::shim::econ::TokenAmount; +use crate::shim::piece::PaddedPieceSize; + use ::cid::Cid; -use fvm_ipld_encoding::RawBytes; +// use fil_actor_market_state::v16::ClientDealProposal; +// use fil_actor_market_state::v16::Label; +// use fvm_ipld_encoding::RawBytes; use jsonrpsee::core::Serialize; use paste::paste; use schemars::JsonSchema; @@ -31,12 +36,51 @@ pub struct AddBalanceParamsLotusJson { pub provider_or_client: Address, } -macro_rules! impl_lotus_json_for_withdraw_balance_params { +#[derive(Serialize, Deserialize, JsonSchema, Debug, Clone, PartialEq)] +#[serde(rename_all = "PascalCase")] +pub struct DealProposalLotusJson { + #[schemars(with = "LotusJson")] + #[serde(with = "crate::lotus_json")] + #[serde(rename = "CodeCID")] + pub piece_cid: Cid, + #[schemars(with = "LotusJson")] + #[serde(with = "crate::lotus_json")] + pub piece_size: PaddedPieceSize, + pub verified_deal: bool, + #[schemars(with = "LotusJson
")] + #[serde(with = "crate::lotus_json")] + pub client: Address, + #[schemars(with = "LotusJson
")] + #[serde(with = "crate::lotus_json")] + pub provider: Address, + // pub label: Label, + pub start_epoch: ChainEpoch, + pub end_epoch: ChainEpoch, + #[schemars(with = "LotusJson")] + #[serde(with = "crate::lotus_json")] + pub storage_price_per_epoch: TokenAmount, + #[schemars(with = "LotusJson")] + #[serde(with = "crate::lotus_json")] + pub provider_collateral: TokenAmount, + #[schemars(with = "LotusJson")] + #[serde(with = "crate::lotus_json")] + pub client_collateral: TokenAmount, +} + +#[derive(Serialize, Deserialize, JsonSchema, Debug, Clone, PartialEq)] +#[serde(rename_all = "PascalCase")] +pub struct PublishStorageDealsParamsLotusJson { + // #[schemars(with = "LotusJson")] + // #[serde(with = "crate::lotus_json")] + // pub deals: Vec, +} + +macro_rules! impl_lotus_json_for_add_balance_params { ($($version:literal),+) => { $( paste! { - impl HasLotusJson for fil_actor_market_state::[]::WithdrawBalanceParams { - type LotusJson = WithdrawBalanceParamsLotusJson; + impl HasLotusJson for fil_actor_market_state::[]::AddBalanceParams { + type LotusJson = AddBalanceParamsLotusJson; #[cfg(test)] fn snapshots() -> Vec<(serde_json::Value, Self)> { @@ -47,14 +91,12 @@ macro_rules! impl_lotus_json_for_withdraw_balance_params { fn into_lotus_json(self) -> Self::LotusJson { Self::LotusJson { provider_or_client: self.provider_or_client.into(), - amount: self.amount.into(), } } fn from_lotus_json(json: Self::LotusJson) -> Self { Self { provider_or_client: json.provider_or_client.into(), - amount: json.amount.into(), } } } @@ -63,14 +105,14 @@ macro_rules! impl_lotus_json_for_withdraw_balance_params { }; } -impl_lotus_json_for_withdraw_balance_params!(9, 10, 11, 12, 13, 14, 15, 16); +impl_lotus_json_for_add_balance_params!(11, 12, 13, 14, 15, 16); -macro_rules! impl_lotus_json_for_add_balance_params { +macro_rules! impl_lotus_json_for_withdraw_balance_params { ($($version:literal),+) => { $( paste! { - impl HasLotusJson for fil_actor_market_state::[]::AddBalanceParams { - type LotusJson = AddBalanceParamsLotusJson; + impl HasLotusJson for fil_actor_market_state::[]::WithdrawBalanceParams { + type LotusJson = WithdrawBalanceParamsLotusJson; #[cfg(test)] fn snapshots() -> Vec<(serde_json::Value, Self)> { @@ -81,12 +123,14 @@ macro_rules! impl_lotus_json_for_add_balance_params { fn into_lotus_json(self) -> Self::LotusJson { Self::LotusJson { provider_or_client: self.provider_or_client.into(), + amount: self.amount.into(), } } fn from_lotus_json(json: Self::LotusJson) -> Self { Self { provider_or_client: json.provider_or_client.into(), + amount: json.amount.into(), } } } @@ -95,4 +139,37 @@ macro_rules! impl_lotus_json_for_add_balance_params { }; } -impl_lotus_json_for_add_balance_params!(11, 12, 13, 14, 15, 16); +impl_lotus_json_for_withdraw_balance_params!(9, 10, 11, 12, 13, 14, 15, 16); + +//PublishStorageDealsParams +// macro_rules! impl_lotus_json_for_publish_storage_deals_params { +// ($($version:literal),+) => { +// $( +// paste! { +// impl HasLotusJson for fil_actor_market_state::[]::PublishStorageDealsParams { +// type LotusJson = PublishStorageDealsParamsLotusJson; + +// #[cfg(test)] +// fn snapshots() -> Vec<(serde_json::Value, Self)> { +// vec![ +// ] +// } + +// fn into_lotus_json(self) -> Self::LotusJson { +// Self::LotusJson { +// deals: self.deals.into(), +// } +// } + +// fn from_lotus_json(json: Self::LotusJson) -> Self { +// Self { +// deals: json.deals.into(), +// } +// } +// } +// } +// )+ +// }; +// } + +// impl_lotus_json_for_publish_storage_deals_params!(9, 10, 11, 12, 13, 14, 15, 16); diff --git a/src/lotus_json/mod.rs b/src/lotus_json/mod.rs index 6d2d35c56ec2..1bd098428004 100644 --- a/src/lotus_json/mod.rs +++ b/src/lotus_json/mod.rs @@ -231,6 +231,7 @@ mod miner_info; // fil_actor_miner_state::v12::MinerInfo: !quickcheck::Arbitrary mod miner_power; // actors::miner::MinerInfo: !quickcheck::Arbitrary mod nonempty; // can't make snapshots of generic type mod opt; // can't make snapshots of generic type +mod padded_piece_size; mod pending_beneficiary_change; // fil_actor_miner_state::v12::PendingBeneficiaryChange: !quickcheck::Arbitrary mod power_claim; // actors::power::Claim: !quickcheck::Arbitrary mod raw_bytes; // fvm_ipld_encoding::RawBytes: !quickcheck::Arbitrary diff --git a/src/lotus_json/padded_piece_size.rs b/src/lotus_json/padded_piece_size.rs new file mode 100644 index 000000000000..45431d76bc67 --- /dev/null +++ b/src/lotus_json/padded_piece_size.rs @@ -0,0 +1,26 @@ +// Copyright 2019-2025 ChainSafe Systems +// SPDX-License-Identifier: Apache-2.0, MIT + +use super::*; +use crate::shim::piece::PaddedPieceSize; + +#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, JsonSchema)] +#[schemars(rename = "PaddedPieceSize")] +pub struct PaddedPieceSizeLotusJson(#[schemars(with = "u64")] PaddedPieceSize); + +impl HasLotusJson for PaddedPieceSize { + type LotusJson = PaddedPieceSizeLotusJson; + + #[cfg(test)] + fn snapshots() -> Vec<(serde_json::Value, Self)> { + vec![] + } + + fn into_lotus_json(self) -> Self::LotusJson { + PaddedPieceSizeLotusJson(self) + } + + fn from_lotus_json(PaddedPieceSizeLotusJson(inner): Self::LotusJson) -> Self { + inner.into() + } +} From fb32a311b27c2718104938def958031346ea8bed Mon Sep 17 00:00:00 2001 From: elmattic Date: Thu, 14 Aug 2025 18:05:41 +0200 Subject: [PATCH 09/71] Implement LabelLotusJson --- .../methods/market_actor_params.rs | 6 ++-- src/lotus_json/label.rs | 36 +++++++++++++++++++ src/lotus_json/mod.rs | 1 + 3 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 src/lotus_json/label.rs diff --git a/src/lotus_json/actor_states/methods/market_actor_params.rs b/src/lotus_json/actor_states/methods/market_actor_params.rs index 976e8480b035..dc8749650abc 100644 --- a/src/lotus_json/actor_states/methods/market_actor_params.rs +++ b/src/lotus_json/actor_states/methods/market_actor_params.rs @@ -9,7 +9,7 @@ use crate::shim::piece::PaddedPieceSize; use ::cid::Cid; // use fil_actor_market_state::v16::ClientDealProposal; -// use fil_actor_market_state::v16::Label; +use fil_actor_market_state::v16::Label; // use fvm_ipld_encoding::RawBytes; use jsonrpsee::core::Serialize; use paste::paste; @@ -53,7 +53,9 @@ pub struct DealProposalLotusJson { #[schemars(with = "LotusJson
")] #[serde(with = "crate::lotus_json")] pub provider: Address, - // pub label: Label, + #[schemars(with = "LotusJson
")] + #[serde(with = "crate::lotus_json")] + pub label: Label, pub start_epoch: ChainEpoch, pub end_epoch: ChainEpoch, #[schemars(with = "LotusJson")] diff --git a/src/lotus_json/label.rs b/src/lotus_json/label.rs new file mode 100644 index 000000000000..652ec359186b --- /dev/null +++ b/src/lotus_json/label.rs @@ -0,0 +1,36 @@ +// Copyright 2019-2025 ChainSafe Systems +// SPDX-License-Identifier: Apache-2.0, MIT + +use super::*; +use fil_actor_market_state::v16::Label; +use serde::{Deserialize, Serialize}; + +#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, JsonSchema)] +#[serde(untagged)] +pub enum LabelLotusJson { + String(String), + Bytes(Vec), +} + +impl HasLotusJson for Label { + type LotusJson = LabelLotusJson; + + #[cfg(test)] + fn snapshots() -> Vec<(serde_json::Value, Self)> { + vec![] + } + + fn into_lotus_json(self) -> Self::LotusJson { + match self { + Label::Bytes(bytes) => LabelLotusJson::Bytes(bytes), + Label::String(string) => LabelLotusJson::String(string), + } + } + + fn from_lotus_json(lotus_json: Self::LotusJson) -> Self { + match lotus_json { + LabelLotusJson::Bytes(bytes) => Label::Bytes(bytes), + LabelLotusJson::String(string) => Label::String(string), + } + } +} diff --git a/src/lotus_json/mod.rs b/src/lotus_json/mod.rs index 1bd098428004..1e19f75069ce 100644 --- a/src/lotus_json/mod.rs +++ b/src/lotus_json/mod.rs @@ -227,6 +227,7 @@ mod entry; mod filter_estimate; mod hash_map; mod ipld; // NaN != NaN +mod label; mod miner_info; // fil_actor_miner_state::v12::MinerInfo: !quickcheck::Arbitrary mod miner_power; // actors::miner::MinerInfo: !quickcheck::Arbitrary mod nonempty; // can't make snapshots of generic type From 5fa58c0486020c208b32188cd001bb8cc46740d4 Mon Sep 17 00:00:00 2001 From: elmattic Date: Mon, 18 Aug 2025 14:32:33 +0200 Subject: [PATCH 10/71] Implement PublishStorageDealsParamsLotusJson type (wip) --- .../methods/market_actor_params.rs | 106 ++++++---------- src/lotus_json/client_deal_proposal.rs | 57 +++++++++ src/lotus_json/deal_proposal.rs | 114 ++++++++++++++++++ src/lotus_json/mod.rs | 2 + 4 files changed, 209 insertions(+), 70 deletions(-) create mode 100644 src/lotus_json/client_deal_proposal.rs create mode 100644 src/lotus_json/deal_proposal.rs diff --git a/src/lotus_json/actor_states/methods/market_actor_params.rs b/src/lotus_json/actor_states/methods/market_actor_params.rs index dc8749650abc..057c9a5fa262 100644 --- a/src/lotus_json/actor_states/methods/market_actor_params.rs +++ b/src/lotus_json/actor_states/methods/market_actor_params.rs @@ -6,10 +6,9 @@ use crate::shim::address::Address; use crate::shim::clock::ChainEpoch; use crate::shim::econ::TokenAmount; use crate::shim::piece::PaddedPieceSize; +use fil_actor_market_state::v16::ClientDealProposal; use ::cid::Cid; -// use fil_actor_market_state::v16::ClientDealProposal; -use fil_actor_market_state::v16::Label; // use fvm_ipld_encoding::RawBytes; use jsonrpsee::core::Serialize; use paste::paste; @@ -36,45 +35,12 @@ pub struct AddBalanceParamsLotusJson { pub provider_or_client: Address, } -#[derive(Serialize, Deserialize, JsonSchema, Debug, Clone, PartialEq)] -#[serde(rename_all = "PascalCase")] -pub struct DealProposalLotusJson { - #[schemars(with = "LotusJson")] - #[serde(with = "crate::lotus_json")] - #[serde(rename = "CodeCID")] - pub piece_cid: Cid, - #[schemars(with = "LotusJson")] - #[serde(with = "crate::lotus_json")] - pub piece_size: PaddedPieceSize, - pub verified_deal: bool, - #[schemars(with = "LotusJson
")] - #[serde(with = "crate::lotus_json")] - pub client: Address, - #[schemars(with = "LotusJson
")] - #[serde(with = "crate::lotus_json")] - pub provider: Address, - #[schemars(with = "LotusJson
")] - #[serde(with = "crate::lotus_json")] - pub label: Label, - pub start_epoch: ChainEpoch, - pub end_epoch: ChainEpoch, - #[schemars(with = "LotusJson")] - #[serde(with = "crate::lotus_json")] - pub storage_price_per_epoch: TokenAmount, - #[schemars(with = "LotusJson")] - #[serde(with = "crate::lotus_json")] - pub provider_collateral: TokenAmount, - #[schemars(with = "LotusJson")] - #[serde(with = "crate::lotus_json")] - pub client_collateral: TokenAmount, -} - #[derive(Serialize, Deserialize, JsonSchema, Debug, Clone, PartialEq)] #[serde(rename_all = "PascalCase")] pub struct PublishStorageDealsParamsLotusJson { - // #[schemars(with = "LotusJson")] - // #[serde(with = "crate::lotus_json")] - // pub deals: Vec, + #[schemars(with = "LotusJson")] + #[serde(with = "crate::lotus_json")] + pub deals: Vec, } macro_rules! impl_lotus_json_for_add_balance_params { @@ -143,35 +109,35 @@ macro_rules! impl_lotus_json_for_withdraw_balance_params { impl_lotus_json_for_withdraw_balance_params!(9, 10, 11, 12, 13, 14, 15, 16); -//PublishStorageDealsParams -// macro_rules! impl_lotus_json_for_publish_storage_deals_params { -// ($($version:literal),+) => { -// $( -// paste! { -// impl HasLotusJson for fil_actor_market_state::[]::PublishStorageDealsParams { -// type LotusJson = PublishStorageDealsParamsLotusJson; - -// #[cfg(test)] -// fn snapshots() -> Vec<(serde_json::Value, Self)> { -// vec![ -// ] -// } - -// fn into_lotus_json(self) -> Self::LotusJson { -// Self::LotusJson { -// deals: self.deals.into(), -// } -// } - -// fn from_lotus_json(json: Self::LotusJson) -> Self { -// Self { -// deals: json.deals.into(), -// } -// } -// } -// } -// )+ -// }; -// } - -// impl_lotus_json_for_publish_storage_deals_params!(9, 10, 11, 12, 13, 14, 15, 16); +macro_rules! impl_lotus_json_for_publish_storage_deals_params { + ($($version:literal),+) => { + $( + paste! { + impl HasLotusJson for fil_actor_market_state::[]::PublishStorageDealsParams { + type LotusJson = PublishStorageDealsParamsLotusJson; + + #[cfg(test)] + fn snapshots() -> Vec<(serde_json::Value, Self)> { + vec![ + ] + } + + fn into_lotus_json(self) -> Self::LotusJson { + Self::LotusJson { + deals: self.deals.into(), + } + } + + fn from_lotus_json(json: Self::LotusJson) -> Self { + Self { + deals: json.deals.into(), + } + } + } + } + )+ + }; +} + +//impl_lotus_json_for_publish_storage_deals_params!(9, 10, 11, 12, 13, 14, 15, 16); +impl_lotus_json_for_publish_storage_deals_params!(16); diff --git a/src/lotus_json/client_deal_proposal.rs b/src/lotus_json/client_deal_proposal.rs new file mode 100644 index 000000000000..b4d7859e4aaf --- /dev/null +++ b/src/lotus_json/client_deal_proposal.rs @@ -0,0 +1,57 @@ +// Copyright 2019-2025 ChainSafe Systems +// SPDX-License-Identifier: Apache-2.0, MIT + +use super::*; +use crate::shim::address::Address; +use crate::shim::clock::ChainEpoch; +use crate::shim::crypto::Signature; +use crate::shim::econ::TokenAmount; +use crate::shim::piece::PaddedPieceSize; + +use ::cid::Cid; +use fil_actor_market_state::v16::{ClientDealProposal, DealProposal}; +use schemars::JsonSchema; +use serde::Deserialize; +use std::fmt::Debug; + +#[derive(Serialize, Deserialize, JsonSchema, Debug, Clone, PartialEq)] +#[serde(rename_all = "PascalCase")] +pub struct ClientDealProposalLotusJson { + #[schemars(with = "LotusJson")] + #[serde(with = "crate::lotus_json")] + pub proposal: DealProposal, + #[schemars(with = "LotusJson")] + #[serde(with = "crate::lotus_json")] + pub client_signature: Signature, +} + +impl HasLotusJson for ClientDealProposal { + type LotusJson = ClientDealProposalLotusJson; + + #[cfg(test)] + fn snapshots() -> Vec<(serde_json::Value, Self)> { + vec![] + } + + fn into_lotus_json(self) -> Self::LotusJson { + let Self { + proposal, + client_signature, + } = self; + Self::LotusJson { + proposal, + client_signature: todo!(), //client_signature.into(), + } + } + + fn from_lotus_json(lotus_json: Self::LotusJson) -> Self { + let Self::LotusJson { + proposal, + client_signature, + } = lotus_json; + Self { + proposal, + client_signature: todo!(), //client_signature.into(), + } + } +} diff --git a/src/lotus_json/deal_proposal.rs b/src/lotus_json/deal_proposal.rs new file mode 100644 index 000000000000..15de6dfd12ab --- /dev/null +++ b/src/lotus_json/deal_proposal.rs @@ -0,0 +1,114 @@ +// Copyright 2019-2025 ChainSafe Systems +// SPDX-License-Identifier: Apache-2.0, MIT + +use super::*; +use crate::shim::address::Address; +use crate::shim::clock::ChainEpoch; +use crate::shim::econ::TokenAmount; +use crate::shim::piece::PaddedPieceSize; + +use ::cid::Cid; +use fil_actor_market_state::v16::{DealProposal, Label}; +use schemars::JsonSchema; +use serde::Deserialize; +use std::fmt::Debug; + +#[derive(Serialize, Deserialize, JsonSchema, Debug, Clone, PartialEq)] +#[serde(rename_all = "PascalCase")] +pub struct DealProposalLotusJson { + #[schemars(with = "LotusJson")] + #[serde(with = "crate::lotus_json")] + #[serde(rename = "CodeCID")] + pub piece_cid: Cid, + #[schemars(with = "LotusJson")] + #[serde(with = "crate::lotus_json")] + pub piece_size: PaddedPieceSize, + pub verified_deal: bool, + #[schemars(with = "LotusJson
")] + #[serde(with = "crate::lotus_json")] + pub client: Address, + #[schemars(with = "LotusJson
")] + #[serde(with = "crate::lotus_json")] + pub provider: Address, + #[schemars(with = "LotusJson
")] + #[serde(with = "crate::lotus_json")] + pub label: Label, + pub start_epoch: ChainEpoch, + pub end_epoch: ChainEpoch, + #[schemars(with = "LotusJson")] + #[serde(with = "crate::lotus_json")] + pub storage_price_per_epoch: TokenAmount, + #[schemars(with = "LotusJson")] + #[serde(with = "crate::lotus_json")] + pub provider_collateral: TokenAmount, + #[schemars(with = "LotusJson")] + #[serde(with = "crate::lotus_json")] + pub client_collateral: TokenAmount, +} + +impl HasLotusJson for DealProposal { + type LotusJson = DealProposalLotusJson; + + #[cfg(test)] + fn snapshots() -> Vec<(serde_json::Value, Self)> { + vec![] + } + + fn into_lotus_json(self) -> Self::LotusJson { + let Self { + piece_cid, + piece_size, + verified_deal, + client, + provider, + label, + start_epoch, + end_epoch, + storage_price_per_epoch, + provider_collateral, + client_collateral, + } = self; + Self::LotusJson { + piece_cid: piece_cid.into(), + piece_size: piece_size.into(), + verified_deal: verified_deal.into(), + client: client.into(), + provider: provider.into(), + label: label.into(), + start_epoch: start_epoch.into(), + end_epoch: end_epoch.into(), + storage_price_per_epoch: storage_price_per_epoch.into(), + provider_collateral: provider_collateral.into(), + client_collateral: client_collateral.into(), + } + } + + fn from_lotus_json(lotus_json: Self::LotusJson) -> Self { + let Self::LotusJson { + piece_cid, + piece_size, + verified_deal, + client, + provider, + label, + start_epoch, + end_epoch, + storage_price_per_epoch, + provider_collateral, + client_collateral, + } = lotus_json; + Self { + piece_cid, + piece_size: piece_size.into(), + verified_deal, + client: client.into(), + provider: provider.into(), + label, + start_epoch, + end_epoch, + storage_price_per_epoch: storage_price_per_epoch.into(), + provider_collateral: provider_collateral.into(), + client_collateral: client_collateral.into(), + } + } +} diff --git a/src/lotus_json/mod.rs b/src/lotus_json/mod.rs index 1e19f75069ce..9e57033cfea5 100644 --- a/src/lotus_json/mod.rs +++ b/src/lotus_json/mod.rs @@ -223,6 +223,8 @@ 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 mod bytecode_hash; +mod client_deal_proposal; +mod deal_proposal; mod entry; mod filter_estimate; mod hash_map; From 0d948ec5cefa41ca3097c9a92f0756ff87095a9b Mon Sep 17 00:00:00 2001 From: elmattic Date: Mon, 18 Aug 2025 16:41:46 +0200 Subject: [PATCH 11/71] Refactor --- .../methods/market_actor_params.rs | 224 +++++++++++++++++- src/lotus_json/client_deal_proposal.rs | 100 ++++---- src/lotus_json/deal_proposal.rs | 214 ++++++++--------- src/lotus_json/label.rs | 60 ++--- 4 files changed, 399 insertions(+), 199 deletions(-) diff --git a/src/lotus_json/actor_states/methods/market_actor_params.rs b/src/lotus_json/actor_states/methods/market_actor_params.rs index 057c9a5fa262..efeb9b78d896 100644 --- a/src/lotus_json/actor_states/methods/market_actor_params.rs +++ b/src/lotus_json/actor_states/methods/market_actor_params.rs @@ -5,8 +5,9 @@ use super::*; use crate::shim::address::Address; use crate::shim::clock::ChainEpoch; use crate::shim::econ::TokenAmount; +use crate::shim::fvm_shared_latest::crypto::signature::Signature; use crate::shim::piece::PaddedPieceSize; -use fil_actor_market_state::v16::ClientDealProposal; +use fil_actor_market_state::v16::{ClientDealProposal, DealProposal, Label}; use ::cid::Cid; // use fvm_ipld_encoding::RawBytes; @@ -35,14 +36,6 @@ pub struct AddBalanceParamsLotusJson { pub provider_or_client: Address, } -#[derive(Serialize, Deserialize, JsonSchema, Debug, Clone, PartialEq)] -#[serde(rename_all = "PascalCase")] -pub struct PublishStorageDealsParamsLotusJson { - #[schemars(with = "LotusJson")] - #[serde(with = "crate::lotus_json")] - pub deals: Vec, -} - macro_rules! impl_lotus_json_for_add_balance_params { ($($version:literal),+) => { $( @@ -109,6 +102,213 @@ macro_rules! impl_lotus_json_for_withdraw_balance_params { impl_lotus_json_for_withdraw_balance_params!(9, 10, 11, 12, 13, 14, 15, 16); +#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, JsonSchema)] +#[serde(untagged)] +pub enum LabelLotusJson { + String(String), + Bytes(Vec), +} + +macro_rules! impl_lotus_json_for_label { + ($($version:literal),+) => { + $( + paste! { + impl HasLotusJson for fil_actor_market_state::[]::Label { + type LotusJson = LabelLotusJson; + + #[cfg(test)] + fn snapshots() -> Vec<(serde_json::Value, Self)> { + vec![ + ] + } + + fn into_lotus_json(self) -> Self::LotusJson { + match self { + Self::Bytes(bytes) => LabelLotusJson::Bytes(bytes), + Self::String(string) => LabelLotusJson::String(string), + } + } + + fn from_lotus_json(lotus_json: Self::LotusJson) -> Self { + match lotus_json { + LabelLotusJson::Bytes(bytes) => Self::Bytes(bytes), + LabelLotusJson::String(string) => Self::String(string), + } + } + } + } + )+ + }; +} + +impl_lotus_json_for_label!(15, 16); + +#[derive(Serialize, Deserialize, JsonSchema, Debug, Clone, PartialEq)] +#[serde(rename_all = "PascalCase")] +pub struct DealProposalLotusJson { + #[schemars(with = "LotusJson")] + #[serde(with = "crate::lotus_json")] + #[serde(rename = "CodeCID")] + pub piece_cid: Cid, + #[schemars(with = "LotusJson")] + #[serde(with = "crate::lotus_json")] + pub piece_size: PaddedPieceSize, + pub verified_deal: bool, + #[schemars(with = "LotusJson
")] + #[serde(with = "crate::lotus_json")] + pub client: Address, + #[schemars(with = "LotusJson
")] + #[serde(with = "crate::lotus_json")] + pub provider: Address, + // #[schemars(with = "LotusJson