diff --git a/Cargo.lock b/Cargo.lock index 2aaa97f4a..2c4f279f3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -49,9 +49,9 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.4" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87" +checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b" [[package]] name = "anyhow" @@ -1556,6 +1556,7 @@ dependencies = [ "bitflags 2.4.1", "byteorder", "cid 0.10.1", + "const-hex", "fil_actor_account", "fil_actor_market", "fil_actor_power", @@ -1903,9 +1904,9 @@ dependencies = [ [[package]] name = "frc42_dispatch" -version = "5.0.0" +version = "7.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfe63cf3ff3e332ef15fd19d95cffcb3fd2af14ccb3cb04abc730271c1362c4f" +checksum = "0b9567f7b38af6f277072c9ea230f7c5be12237905ef19348f4b490f563f3fef" dependencies = [ "frc42_hasher", "frc42_macros", @@ -1917,9 +1918,9 @@ dependencies = [ [[package]] name = "frc42_hasher" -version = "3.0.0" +version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08a35e7214108f81cefc17b0466be01279f384faf913918a12dbc8528bb758a4" +checksum = "238a28ff638f138c4b4c75f4d35cd28cedcb45858cfcaa4df36dc25b0b3298db" dependencies = [ "fvm_sdk", "fvm_shared", @@ -1928,9 +1929,9 @@ dependencies = [ [[package]] name = "frc42_macros" -version = "3.0.0" +version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f50cd62b077775194bde67eef8076b31f915b9c099f3a7fd1a760363d65f145" +checksum = "c07758f10c4a85a14b59c1c2d63d6200122f144b42e495dabdc997bf1c917e62" dependencies = [ "blake2b_simd", "frc42_hasher", @@ -1941,9 +1942,9 @@ dependencies = [ [[package]] name = "frc46_token" -version = "9.0.0" +version = "11.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02d3e91e8d92fcd274d4e56cbbec093c4c7613cd294b6c8a855dacc4f9dfff9c" +checksum = "af558bacb4e00ac1aa47115464f2bfa3d8dbd2a3b032dc325d20eaaaa22522e7" dependencies = [ "cid 0.10.1", "frc42_dispatch", @@ -2092,9 +2093,9 @@ dependencies = [ [[package]] name = "fvm_actor_utils" -version = "9.0.0" +version = "11.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1227ae02b9395085d6b4e7e4f5d7ea2fcbfd13197fade8fa8eaba8089b8865d3" +checksum = "fe8cad6375c09395099f25313600a53b1012a29595f9666a48c00eba7a8adaf9" dependencies = [ "anyhow", "cid 0.10.1", @@ -2182,9 +2183,9 @@ dependencies = [ [[package]] name = "fvm_ipld_hamt" -version = "0.8.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03a53e14c789449cec999ca0e93d909490c921b967adb7a9ec8f12286fb809bd" +checksum = "48c900736087ff87cc51f669eee2f8e000c80717472242eb3f712aaa059ac3b3" dependencies = [ "anyhow", "byteorder", @@ -2220,11 +2221,10 @@ dependencies = [ [[package]] name = "fvm_sdk" -version = "4.0.0" +version = "4.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "258cfc9a2e5dcb28ffcadd4abed504893996d31238488a07ef7d2a6a6e80e1ec" +checksum = "d4943c9b564d8417b7723a7b4a6925e54e7d29a0b870917fcdf6426f46430a09" dependencies = [ - "byteorder", "cid 0.10.1", "fvm_ipld_encoding", "fvm_shared", @@ -2236,9 +2236,9 @@ dependencies = [ [[package]] name = "fvm_shared" -version = "4.0.0" +version = "4.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3a19ef48bbc1b22742002667b82944237cfdebc38e946c216aa8de1192392ea" +checksum = "31841282c98f3acd78c741f1e38ecebc97e72243c4ecb73a658f6529246a35a5" dependencies = [ "anyhow", "bitflags 2.4.1", diff --git a/Cargo.toml b/Cargo.toml index e61660660..014ea6a7d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,7 +6,7 @@ members = [ "runtime", "test_vm", "vm_api", - "integration_tests" + "integration_tests", ] [workspace.package] @@ -54,10 +54,16 @@ fil_actors_runtime = { workspace = true } num-traits = { workspace = true } [dependencies] -clap = { version = "4.3.0", features = ["derive", "std", "help", "usage", "error-context"], default-features = false } +clap = { version = "4.3.0", features = [ + "derive", + "std", + "help", + "usage", + "error-context", +], default-features = false } [features] -default = [] ## translates to mainnet +default = [] ## translates to mainnet mainnet = [] caterpillarnet = [] butterflynet = [] @@ -110,22 +116,27 @@ rlp = { version = "0.5.1", default-features = false } substrate-bn = { version = "0.6.0", default-features = false } # IPLD/Encoding -cid = { version = "0.10.1", default-features = false, features = ["serde-codec", "std"] } -multihash = { version = "0.18.1", default-features = false , features = ["multihash-impl"]} +cid = { version = "0.10.1", default-features = false, features = [ + "serde-codec", + "std", +] } +multihash = { version = "0.18.1", default-features = false, features = [ + "multihash-impl", +] } libipld-core = { version = "0.13.1", features = ["serde-codec"] } integer-encoding = { version = "3.0.3", default-features = false } # helix-onchain -fvm_actor_utils = "9.0.0" -frc42_dispatch = "5.0.0" -frc46_token = "9.0.0" +fvm_actor_utils = "11.0.0" +frc42_dispatch = "7.0.0" +frc46_token = "11.0.0" # FVM -fvm_sdk = "~4.0" -fvm_shared = "~4.0" +fvm_sdk = "4.3.0" +fvm_shared = "4.3.0" fvm_ipld_encoding = "0.4.0" fvm_ipld_blockstore = "0.2.0" -fvm_ipld_hamt = "0.8.0" +fvm_ipld_hamt = "0.9.0" fvm_ipld_kamt = "0.3.0" fvm_ipld_amt = { version = "0.6.2" } fvm_ipld_bitfield = "0.6.0" @@ -149,7 +160,7 @@ fil_actor_system = { path = "actors/system" } fil_actor_verifreg = { path = "actors/verifreg" } fil_actors_evm_shared = { path = "actors/evm/shared" } fil_actors_runtime = { path = "runtime" } -fil_builtin_actors_state = { path = "state"} +fil_builtin_actors_state = { path = "state" } fil_actors_integration_tests = { version = "1.0.0", path = "integration_tests" } vm_api = { version = "1.0.0", path = "vm_api" } test_vm = { path = "test_vm" } diff --git a/actors/miner/Cargo.toml b/actors/miner/Cargo.toml index d41af88c3..047231f30 100644 --- a/actors/miner/Cargo.toml +++ b/actors/miner/Cargo.toml @@ -33,6 +33,7 @@ lazy_static = { workspace = true } log = { workspace = true } byteorder = { workspace = true } itertools = { workspace = true } +const-hex = { workspace = true } [dev-dependencies] fil_actors_runtime = { workspace = true, features = ["test_utils", "sector-default"] } diff --git a/actors/miner/src/types.rs b/actors/miner/src/types.rs index 2831f37cb..fdec4ccec 100644 --- a/actors/miner/src/types.rs +++ b/actors/miner/src/types.rs @@ -127,6 +127,27 @@ pub struct ProveCommitSectorParams { pub proof: RawBytes, } +// Note no UnsealedCID because it must be "zero" data. +#[derive(Clone, Debug, Eq, PartialEq, Serialize_tuple, Deserialize_tuple)] +pub struct SectorNIActivationInfo { + pub sealing_number: SectorNumber, // Sector number used to generate replica id + pub sealer_id: ActorID, // Must be set to ID of receiving actor for now + pub sealed_cid: Cid, // CommR + pub sector_number: SectorNumber, // Unique id of sector in actor state + pub seal_rand_epoch: ChainEpoch, + pub expiration: ChainEpoch, +} + +#[derive(Clone, Debug, Eq, PartialEq, Serialize_tuple, Deserialize_tuple)] +pub struct ProveCommitSectorsNIParams { + pub sectors: Vec, // Information about sealing of each sector + pub aggregate_proof: RawBytes, // Aggregate proof for all sectors + pub seal_proof_type: RegisteredSealProof, // Proof type for each seal (must be an NI-PoRep variant) + pub aggregate_proof_type: RegisteredAggregateProof, // Proof type for aggregation + pub proving_deadline: u64, // The Window PoST deadline index at which to schedule the new sectors + pub require_activation_success: bool, // Whether to abort if any sector activation fails +} + #[derive(Clone, Debug, Eq, PartialEq, Serialize_tuple, Deserialize_tuple)] pub struct ProveCommitSectors3Params { // Activation manifest for each sector being proven. diff --git a/actors/miner/tests/types_test.rs b/actors/miner/tests/types_test.rs new file mode 100644 index 000000000..deee9c891 --- /dev/null +++ b/actors/miner/tests/types_test.rs @@ -0,0 +1,82 @@ +// Tests to match with Go github.com/filecoin-project/go-state-types/builtin/*/miner +mod serialization { + use std::str::FromStr; + + use cid::Cid; + use fil_actor_miner::{ProveCommitSectorsNIParams, SectorNIActivationInfo}; + use fvm_ipld_encoding::ipld_block::IpldBlock; + use fvm_shared::sector::{RegisteredAggregateProof, RegisteredSealProof}; + + #[test] + fn prove_commit_sectors_ni_params() { + let test_cases = vec![ + ( + ProveCommitSectorsNIParams { + sectors: vec![], + aggregate_proof: vec![].into(), + seal_proof_type: RegisteredSealProof::StackedDRG32GiBV1P1, + aggregate_proof_type: RegisteredAggregateProof::SnarkPackV2, + proving_deadline: 2, + require_activation_success: false, + }, + // [[],byte[],8,1,2,false] + "868040080102f4", + ), + ( + ProveCommitSectorsNIParams { + sectors: vec![SectorNIActivationInfo { + sealing_number: 1, + sealer_id: 2, + sealed_cid: Cid::from_str("bagboea4seaaqa").unwrap(), + sector_number: 3, + seal_rand_epoch: 4, + expiration: 5, + }], + seal_proof_type: RegisteredSealProof::StackedDRG32GiBV1P2_Feat_NiPoRep, + aggregate_proof: vec![0xde, 0xad, 0xbe, 0xef].into(), + aggregate_proof_type: RegisteredAggregateProof::SnarkPackV2, + proving_deadline: 6, + require_activation_success: true, + }, + // [[[1,2,bagboea4seaaqa,3,4,5]],byte[deadbeef],18,1,6,true] + "8681860102d82a49000182e2039220010003040544deadbeef120106f5", + ), + ( + ProveCommitSectorsNIParams { + sectors: vec![ + SectorNIActivationInfo { + sealing_number: 1, + sealer_id: 2, + sealed_cid: Cid::from_str("bagboea4seaaqa").unwrap(), + sector_number: 3, + seal_rand_epoch: 4, + expiration: 5, + }, + SectorNIActivationInfo { + sealing_number: 6, + sealer_id: 7, + sealed_cid: Cid::from_str("bagboea4seaaqc").unwrap(), + sector_number: 8, + seal_rand_epoch: 9, + expiration: 10, + }, + ], + seal_proof_type: RegisteredSealProof::StackedDRG32GiBV1P2_Feat_NiPoRep, + aggregate_proof: vec![0xde, 0xad, 0xbe, 0xef].into(), + aggregate_proof_type: RegisteredAggregateProof::SnarkPackV2, + proving_deadline: 11, + require_activation_success: false, + }, + // [[[1,2,bagboea4seaaqa,3,4,5],[6,7,bagboea4seaaqc,8,9,10]],byte[deadbeef],18,1,11,false] + "8682860102d82a49000182e20392200100030405860607d82a49000182e2039220010108090a44deadbeef12010bf4", + ), + ]; + + for (params, expected_hex) in test_cases { + let encoded = IpldBlock::serialize_cbor(¶ms).unwrap().unwrap(); + assert_eq!(const_hex::encode(&encoded.data), expected_hex); + let decoded: ProveCommitSectorsNIParams = IpldBlock::deserialize(&encoded).unwrap(); + assert_eq!(params, decoded); + } + } +}