From b8a852d280c9f85bfaab13a4725bef99a8fcd761 Mon Sep 17 00:00:00 2001 From: liyukun Date: Sun, 28 Apr 2024 13:16:07 +0800 Subject: [PATCH 1/2] feat: remove co-build requirement --- contracts/cluster/src/entry.rs | 40 +++++++------- contracts/cluster_agent/src/entry.rs | 56 +++++++++---------- contracts/cluster_proxy/src/entry.rs | 40 +++++++------- contracts/spore/src/entry.rs | 83 ++++++++++++++++------------ tests/src/tests/spore.rs | 20 +++---- 5 files changed, 126 insertions(+), 113 deletions(-) diff --git a/contracts/cluster/src/entry.rs b/contracts/cluster/src/entry.rs index 64ae330..66eba75 100644 --- a/contracts/cluster/src/entry.rs +++ b/contracts/cluster/src/entry.rs @@ -50,16 +50,16 @@ fn process_creation(index: usize) -> Result<(), Error> { .ok_or(Error::MutantNotInDeps)?; } - // check co-build action @lyk - let action::SporeActionUnion::MintCluster(mint) = extract_spore_action()?.to_enum() else { - return Err(Error::SporeActionMismatch); - }; - if cluster_id != mint.cluster_id().as_slice() - || blake2b_256(cluster_data.as_slice()) != mint.data_hash().as_slice() - { - return Err(Error::SporeActionFieldMismatch); - } - check_spore_address(GroupOutput, mint.to())?; + // // check co-build action @lyk + // let action::SporeActionUnion::MintCluster(mint) = extract_spore_action()?.to_enum() else { + // return Err(Error::SporeActionMismatch); + // }; + // if cluster_id != mint.cluster_id().as_slice() + // || blake2b_256(cluster_data.as_slice()) != mint.data_hash().as_slice() + // { + // return Err(Error::SporeActionFieldMismatch); + // } + // check_spore_address(GroupOutput, mint.to())?; Ok(()) } @@ -73,16 +73,16 @@ fn process_transfer() -> Result<(), Error> { return Err(Error::ModifyClusterPermanentField); } - // check co-build action @lyk - let action::SporeActionUnion::TransferCluster(transfer) = extract_spore_action()?.to_enum() - else { - return Err(Error::SporeActionMismatch); - }; - if transfer.cluster_id().as_slice() != &load_self_id()? { - return Err(Error::SporeActionFieldMismatch); - } - check_spore_address(GroupInput, transfer.from())?; - check_spore_address(GroupOutput, transfer.to())?; + // // check co-build action @lyk + // let action::SporeActionUnion::TransferCluster(transfer) = extract_spore_action()?.to_enum() + // else { + // return Err(Error::SporeActionMismatch); + // }; + // if transfer.cluster_id().as_slice() != &load_self_id()? { + // return Err(Error::SporeActionFieldMismatch); + // } + // check_spore_address(GroupInput, transfer.from())?; + // check_spore_address(GroupOutput, transfer.to())?; Ok(()) } diff --git a/contracts/cluster_agent/src/entry.rs b/contracts/cluster_agent/src/entry.rs index 8ba1a3f..1fbdb56 100644 --- a/contracts/cluster_agent/src/entry.rs +++ b/contracts/cluster_agent/src/entry.rs @@ -97,16 +97,16 @@ fn process_creation(_index: usize) -> Result<(), Error> { } } - // co-build check @lyk - let action::SporeActionUnion::MintAgent(mint) = extract_spore_action()?.to_enum() else { - return Err(Error::SporeActionMismatch); - }; - if &cluster_id != mint.cluster_id().as_slice() - || &proxy_type.args().raw_data()[..CLUSTER_PROXY_ID_LEN] != mint.proxy_id().as_slice() - { - return Err(Error::SporeActionFieldMismatch); - } - check_spore_address(GroupOutput, mint.to())?; + // // co-build check @lyk + // let action::SporeActionUnion::MintAgent(mint) = extract_spore_action()?.to_enum() else { + // return Err(Error::SporeActionMismatch); + // }; + // if &cluster_id != mint.cluster_id().as_slice() + // || &proxy_type.args().raw_data()[..CLUSTER_PROXY_ID_LEN] != mint.proxy_id().as_slice() + // { + // return Err(Error::SporeActionFieldMismatch); + // } + // check_spore_address(GroupOutput, mint.to())?; Ok(()) } @@ -119,29 +119,29 @@ fn process_transfer() -> Result<(), Error> { return Err(Error::ImmutableAgentFieldModification); } - // co-build check @lyk - let action::SporeActionUnion::TransferAgent(transfer) = extract_spore_action()?.to_enum() - else { - return Err(Error::SporeActionMismatch); - }; - if &load_self_id()? != transfer.cluster_id().as_slice() { - return Err(Error::SporeActionFieldMismatch); - } - check_spore_address(GroupInput, transfer.from())?; - check_spore_address(GroupOutput, transfer.to())?; + // // co-build check @lyk + // let action::SporeActionUnion::TransferAgent(transfer) = extract_spore_action()?.to_enum() + // else { + // return Err(Error::SporeActionMismatch); + // }; + // if &load_self_id()? != transfer.cluster_id().as_slice() { + // return Err(Error::SporeActionFieldMismatch); + // } + // check_spore_address(GroupInput, transfer.from())?; + // check_spore_address(GroupOutput, transfer.to())?; Ok(()) } fn process_destruction() -> Result<(), Error> { - // co-build check @lyk - let action::SporeActionUnion::BurnAgent(burn) = extract_spore_action()?.to_enum() else { - return Err(Error::SporeActionMismatch); - }; - if &load_self_id()? != burn.cluster_id().as_slice() { - return Err(Error::SporeActionFieldMismatch); - } - check_spore_address(GroupInput, burn.from())?; + // // co-build check @lyk + // let action::SporeActionUnion::BurnAgent(burn) = extract_spore_action()?.to_enum() else { + // return Err(Error::SporeActionMismatch); + // }; + // if &load_self_id()? != burn.cluster_id().as_slice() { + // return Err(Error::SporeActionFieldMismatch); + // } + // check_spore_address(GroupInput, burn.from())?; Ok(()) } diff --git a/contracts/cluster_proxy/src/entry.rs b/contracts/cluster_proxy/src/entry.rs index 64bc39b..2050461 100644 --- a/contracts/cluster_proxy/src/entry.rs +++ b/contracts/cluster_proxy/src/entry.rs @@ -54,14 +54,14 @@ fn process_creation(index: usize) -> Result<(), Error> { .ok_or(Error::ClusterOwnershipVerifyFailed)?; } - // co-build check @lyk - let action::SporeActionUnion::MintProxy(create) = extract_spore_action()?.to_enum() else { - return Err(Error::SporeActionMismatch); - }; - if proxy_id != create.proxy_id().as_slice() || &cluster_id != create.cluster_id().as_slice() { - return Err(Error::SporeActionFieldMismatch); - } - check_spore_address(GroupOutput, create.to())?; + // // co-build check @lyk + // let action::SporeActionUnion::MintProxy(create) = extract_spore_action()?.to_enum() else { + // return Err(Error::SporeActionMismatch); + // }; + // if proxy_id != create.proxy_id().as_slice() || &cluster_id != create.cluster_id().as_slice() { + // return Err(Error::SporeActionFieldMismatch); + // } + // check_spore_address(GroupOutput, create.to())?; Ok(()) } @@ -74,18 +74,18 @@ fn process_transfer() -> Result<(), Error> { return Err(Error::ImmutableProxyFieldModification); } - // co-build check @lyk - let action::SporeActionUnion::TransferProxy(transfer) = extract_spore_action()?.to_enum() - else { - return Err(Error::SporeActionMismatch); - }; - if input_data.as_slice() != transfer.cluster_id().as_slice() - || &load_self_id()? != transfer.proxy_id().as_slice() - { - return Err(Error::SporeActionFieldMismatch); - } - check_spore_address(GroupInput, transfer.from())?; - check_spore_address(GroupOutput, transfer.to())?; + // // co-build check @lyk + // let action::SporeActionUnion::TransferProxy(transfer) = extract_spore_action()?.to_enum() + // else { + // return Err(Error::SporeActionMismatch); + // }; + // if input_data.as_slice() != transfer.cluster_id().as_slice() + // || &load_self_id()? != transfer.proxy_id().as_slice() + // { + // return Err(Error::SporeActionFieldMismatch); + // } + // check_spore_address(GroupInput, transfer.from())?; + // check_spore_address(GroupOutput, transfer.to())?; Ok(()) } diff --git a/contracts/spore/src/entry.rs b/contracts/spore/src/entry.rs index f73d956..745b5f8 100644 --- a/contracts/spore/src/entry.rs +++ b/contracts/spore/src/entry.rs @@ -159,16 +159,16 @@ fn process_creation(index: usize) -> Result<(), Error> { } } - // check co-build action @lyk - let action::SporeActionUnion::MintSpore(mint) = extract_spore_action()?.to_enum() else { - return Err(Error::SporeActionMismatch); - }; - if mint.spore_id().as_slice() != spore_id - || mint.data_hash().as_slice() != blake2b_256(spore_data.as_slice()) - { - return Err(Error::SporeActionFieldMismatch); - } - check_spore_address(GroupOutput, mint.to())?; + // // check co-build action @lyk + // let action::SporeActionUnion::MintSpore(mint) = extract_spore_action()?.to_enum() else { + // return Err(Error::SporeActionMismatch); + // }; + // if mint.spore_id().as_slice() != spore_id + // || mint.data_hash().as_slice() != blake2b_256(spore_data.as_slice()) + // { + // return Err(Error::SporeActionFieldMismatch); + // } + // check_spore_address(GroupOutput, mint.to())?; Ok(()) } @@ -189,14 +189,14 @@ fn process_destruction() -> Result<(), Error> { verify_extension(&mime, Operation::Burn, vec![index as u8])?; } - // check co-build action @lyk - let action::SporeActionUnion::BurnSpore(burn) = extract_spore_action()?.to_enum() else { - return Err(Error::SporeActionMismatch); - }; - if burn.spore_id().as_slice() != &load_self_id()? { - return Err(Error::SporeActionFieldMismatch); - } - check_spore_address(GroupInput, burn.from())?; + // // check co-build action @lyk + // let action::SporeActionUnion::BurnSpore(burn) = extract_spore_action()?.to_enum() else { + // return Err(Error::SporeActionMismatch); + // }; + // if burn.spore_id().as_slice() != &load_self_id()? { + // return Err(Error::SporeActionFieldMismatch); + // } + // check_spore_address(GroupInput, burn.from())?; Ok(()) } @@ -226,16 +226,16 @@ fn process_transfer() -> Result<(), Error> { )?; } - // check co-build action @lyk - let action::SporeActionUnion::TransferSpore(transfer) = extract_spore_action()?.to_enum() - else { - return Err(Error::SporeActionMismatch); - }; - if transfer.spore_id().as_slice() != &load_self_id()? { - return Err(Error::SporeActionFieldMismatch); - } - check_spore_address(GroupInput, transfer.from())?; - check_spore_address(GroupOutput, transfer.to())?; + // // check co-build action @lyk + // let action::SporeActionUnion::TransferSpore(transfer) = extract_spore_action()?.to_enum() + // else { + // return Err(Error::SporeActionMismatch); + // }; + // if transfer.spore_id().as_slice() != &load_self_id()? { + // return Err(Error::SporeActionFieldMismatch); + // } + // check_spore_address(GroupInput, transfer.from())?; + // check_spore_address(GroupOutput, transfer.to())?; Ok(()) } @@ -271,8 +271,12 @@ fn verify_extension(mime: &MIME, op: Operation, argv: Vec) -> Result<(), Err ScriptHashType::Data1, &[ CStr::from_bytes_with_nul([b'0', 0].as_slice()).unwrap_or_default(), - CStr::from_bytes_with_nul([b'0' + mutant_index as u8, 0].as_slice(),) .unwrap_or_default(), - CStr::from_bytes_with_nul([b'0' + argv[0], 0].as_slice()) .unwrap_or_default(), + CStr::from_bytes_with_nul( + [b'0' + mutant_index as u8, 0].as_slice(), + ) + .unwrap_or_default(), + CStr::from_bytes_with_nul([b'0' + argv[0], 0].as_slice()) + .unwrap_or_default(), ], )?; } @@ -282,9 +286,14 @@ fn verify_extension(mime: &MIME, op: Operation, argv: Vec) -> Result<(), Err ScriptHashType::Data1, &[ CStr::from_bytes_with_nul([b'1', 0].as_slice()).unwrap_or_default(), - CStr::from_bytes_with_nul([b'0' + mutant_index as u8, 0].as_slice(),) .unwrap_or_default(), - CStr::from_bytes_with_nul([b'0' + argv[0], 0].as_slice()) .unwrap_or_default(), - CStr::from_bytes_with_nul([b'0' + argv[1], 0].as_slice()) .unwrap_or_default(), + CStr::from_bytes_with_nul( + [b'0' + mutant_index as u8, 0].as_slice(), + ) + .unwrap_or_default(), + CStr::from_bytes_with_nul([b'0' + argv[0], 0].as_slice()) + .unwrap_or_default(), + CStr::from_bytes_with_nul([b'0' + argv[1], 0].as_slice()) + .unwrap_or_default(), ], )?; } @@ -294,8 +303,12 @@ fn verify_extension(mime: &MIME, op: Operation, argv: Vec) -> Result<(), Err ScriptHashType::Data1, &[ CStr::from_bytes_with_nul([b'2', 0].as_slice()).unwrap_or_default(), - CStr::from_bytes_with_nul([b'0' + mutant_index as u8, 0].as_slice(),) .unwrap_or_default(), - CStr::from_bytes_with_nul([b'0' + argv[0], 0].as_slice()) .unwrap_or_default(), + CStr::from_bytes_with_nul( + [b'0' + mutant_index as u8, 0].as_slice(), + ) + .unwrap_or_default(), + CStr::from_bytes_with_nul([b'0' + argv[0], 0].as_slice()) + .unwrap_or_default(), ], )?; } diff --git a/tests/src/tests/spore.rs b/tests/src/tests/spore.rs index e7844c7..4db5c51 100644 --- a/tests/src/tests/spore.rs +++ b/tests/src/tests/spore.rs @@ -391,11 +391,11 @@ mod spore_mint_from_cluster_transfer { make_spore_mint_from_cluster_transfer(true, true); } - #[should_panic] - #[test] - fn test_spore_mint_from_cluster_transfer_failed_with_no_cluster_action() { - make_spore_mint_from_cluster_transfer(false, true); - } + // #[should_panic] + // #[test] + // fn test_spore_mint_from_cluster_transfer_failed_with_no_cluster_action() { + // make_spore_mint_from_cluster_transfer(false, true); + // } #[should_panic] #[test] @@ -525,11 +525,11 @@ mod spore_mint_from_agent_transfer { make_spore_mint_from_agent_transfer(false, true); } - #[should_panic] - #[test] - fn test_spore_mint_from_agent_transfer_failed_with_no_agent_action() { - make_spore_mint_from_agent_transfer(true, false); - } + // #[should_panic] + // #[test] + // fn test_spore_mint_from_agent_transfer_failed_with_no_agent_action() { + // make_spore_mint_from_agent_transfer(true, false); + // } } mod simple_spore_destroy { From 379a0a5da4d993480e7e3d590117694b691681a6 Mon Sep 17 00:00:00 2001 From: ashuralyk Date: Thu, 1 Aug 2024 11:33:29 +0800 Subject: [PATCH 2/2] feat: update rust-toolchain --- rust-toolchain | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust-toolchain b/rust-toolchain index dc87e8a..5422724 100644 --- a/rust-toolchain +++ b/rust-toolchain @@ -1 +1 @@ -1.74.0 +1.78.0