Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions bindings/curse_mcms/curse_mcms/curse_mcms.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions bindings/mcms/mcms/mcms.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions contracts/mcms/curse_mcms/sources/curse_mcms.move
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,8 @@ module curse_mcms::curse_mcms {
const E_UNKNOWN_TARGET: u64 = 54;
const E_UNKNOWN_CURSE_MCMS_MODULE_FUNCTION: u64 = 55;
const E_UNKNOWN_CURSE_MCMS_ACCOUNT_FUNCTION: u64 = 56;
const E_INVALID_PREDECESSOR_LEN: u64 = 57;
const E_INVALID_SALT_LEN: u64 = 58;

fun init_module(publisher: &signer) {
let bypasser = create_multisig(publisher, BYPASSER_ROLE);
Expand Down Expand Up @@ -1535,6 +1537,9 @@ module curse_mcms::curse_mcms {
public fun hash_operation_batch(
calls: vector<Call>, predecessor: vector<u8>, salt: vector<u8>
): vector<u8> {
assert!(predecessor.length() == 32, E_INVALID_PREDECESSOR_LEN);
assert!(salt.length() == 32, E_INVALID_SALT_LEN);

let packed = vector[];
packed.append(bcs::to_bytes(&calls));
packed.append(predecessor);
Expand Down
38 changes: 38 additions & 0 deletions contracts/mcms/curse_mcms/tests/curse_mcms_test.move
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#[test_only]
module curse_mcms::curse_mcms_test {
use std::signer;
use std::string;
use std::vector;
use aptos_framework::account;
use aptos_framework::timestamp;
Expand Down Expand Up @@ -604,4 +605,41 @@ module curse_mcms::curse_mcms_test {
let _config_bypasser = curse_mcms::get_config(curse_mcms::bypasser_role());
let _config_proposer = curse_mcms::get_config(curse_mcms::proposer_role());
}

#[test]
#[
expected_failure(
abort_code = curse_mcms::curse_mcms::E_INVALID_PREDECESSOR_LEN,
location = curse_mcms::curse_mcms
)
]
fun test_hash_operation_batch__invalid_predecessor_len() {
let calls =
curse_mcms::create_calls(
vector[@curse_mcms],
vector[string::utf8(b"curse_mcms")],
vector[string::utf8(b"timelock_update_min_delay")],
vector[vector[0u8]]
);
let _ = curse_mcms::hash_operation_batch(calls, x"deadbeef", vector[1u8]);
}

#[test]
#[
expected_failure(
abort_code = curse_mcms::curse_mcms::E_INVALID_SALT_LEN,
location = curse_mcms::curse_mcms
)
]
fun test_hash_operation_batch__invalid_salt_len() {
let calls =
curse_mcms::create_calls(
vector[@curse_mcms],
vector[string::utf8(b"curse_mcms")],
vector[string::utf8(b"timelock_update_min_delay")],
vector[vector[0u8]]
);
let _ =
curse_mcms::hash_operation_batch(calls, curse_mcms::zero_hash(), x"deadbeef");
}
}
5 changes: 5 additions & 0 deletions contracts/mcms/mcms/sources/mcms.move
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,8 @@ module mcms::mcms {
const E_NOT_CANCELLER_ROLE: u64 = 50;
const E_NOT_TIMELOCK_ROLE: u64 = 51;
const E_UNKNOWN_MCMS_MODULE: u64 = 52;
const E_INVALID_PREDECESSOR_LEN: u64 = 53;
const E_INVALID_SALT_LEN: u64 = 54;

fun init_module(publisher: &signer) {
let bypasser = create_multisig(publisher, BYPASSER_ROLE);
Expand Down Expand Up @@ -1614,6 +1616,9 @@ module mcms::mcms {
public fun hash_operation_batch(
calls: vector<Call>, predecessor: vector<u8>, salt: vector<u8>
): vector<u8> {
assert!(predecessor.length() == 32, E_INVALID_PREDECESSOR_LEN);
assert!(salt.length() == 32, E_INVALID_SALT_LEN);

let packed = vector[];
packed.append(bcs::to_bytes(&calls));
packed.append(predecessor);
Expand Down
8 changes: 4 additions & 4 deletions contracts/mcms/mcms/tests/mcms_executor_test.move
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,11 @@ module mcms::mcms_executor_test {
const TEST_CHAIN_ID: u256 = 4;
const TEST_NONCE: u64 = 0;

const PROPOSER_ADDR1: vector<u8> = x"5916431f0ea809587757df994233861e1271be55";
const PROPOSER_ADDR2: vector<u8> = x"8803c3ed076e57d51e28301933418094bd961cc5";
const PROPOSER_ADDR3: vector<u8> = x"8950e6c6832c9b0591801418684d27b2853b2c74";
const PROPOSER_ADDR1: vector<u8> = x"2b5ad5c4795c026514f8317c7a215e218dccd6cf";
const PROPOSER_ADDR2: vector<u8> = x"6813eb9362372eef6200f3b1dbc3f819671cba69";
const PROPOSER_ADDR3: vector<u8> = x"7e5f4552091a69125d5dfcb7b8c2659029395bdf";

const ROOT: vector<u8> = x"f7a8b0f28b2ae826313604377ecd0dd07dd4107e0777db5d251560aa2dbf760d";
const ROOT: vector<u8> = x"d65e7d9805d6a2943fd5bdaf9f14285788b8ae7fdcb6424f1b0c1fe0e63d90bc";

const TEST_PROOF: vector<vector<u8>> = vector[
x"a619565e90c1c564293b59b344ed0e12ed06eafb3c45b70baf6fdf299a046297",
Expand Down
Loading
Loading