Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor(gateway): use macro functions #128

Merged
merged 25 commits into from
Sep 11, 2024
Merged
Show file tree
Hide file tree
Changes from 13 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
5 changes: 5 additions & 0 deletions .changeset/twelve-goats-retire.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@axelar-network/axelar-cgp-sui': patch
---

chore: apply macro function to reduce duplication in gateway contract
4 changes: 2 additions & 2 deletions move/abi/Move.lock
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

[move]
version = 2
manifest_digest = "56D8716C87D97BB61C27197FC4026C72B06599560316FD7CAA3A8C4A87DD2AA5"
manifest_digest = "0E79A49391304FF0B2514C198BE3143BE11DCF84B94671256AB963B14D551CEC"
deps_digest = "F8BBB0CCB2491CA29A3DF03D6F92277A4F3574266507ACD77214D37ECA3F3082"
dependencies = [
{ name = "Sui" },
Expand All @@ -21,6 +21,6 @@ dependencies = [
]

[move.toolchain-version]
compiler-version = "1.32.0"
compiler-version = "1.32.2"
edition = "2024.beta"
flavor = "sui"
15 changes: 12 additions & 3 deletions move/axelar_gateway/Move.lock
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@

[move]
version = 2
manifest_digest = "CBC6DDC7C990C4F937839806657649E884F47EACD9F1CA3B46728447128B782B"
deps_digest = "F8BBB0CCB2491CA29A3DF03D6F92277A4F3574266507ACD77214D37ECA3F3082"
manifest_digest = "6B30B068ED8F84A15FBFB2D61BB394FBCDCEAC39A9CAF0A04406D4AD14E6EF8D"
deps_digest = "3C4103934B1E040BB6B23F1D610B4EF9F2F1166A50A104EADCF77467C004C600"
dependencies = [
{ name = "Sui" },
{ name = "Utils" },
]

[[move.package]]
Expand All @@ -20,7 +21,15 @@ dependencies = [
{ name = "MoveStdlib" },
]

[[move.package]]
name = "Utils"
source = { local = "../utils" }

dependencies = [
{ name = "Sui" },
]

[move.toolchain-version]
compiler-version = "1.32.0"
compiler-version = "1.32.2"
edition = "2024.beta"
flavor = "sui"
1 change: 1 addition & 0 deletions move/axelar_gateway/Move.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ edition = "2024.beta"

[dependencies]
Sui = { git = "https://github.com/MystenLabs/sui.git", subdir = "crates/sui-framework/packages/sui-framework", rev = "mainnet-v1.32.2" }
Utils = { local = "../utils" }

[addresses]
axelar_gateway = "0xa1"
Expand Down
98 changes: 37 additions & 61 deletions move/axelar_gateway/sources/gateway.move
Original file line number Diff line number Diff line change
Expand Up @@ -31,14 +31,16 @@ use axelar_gateway::auth::{Self, AxelarSigners, validate_proof};
use axelar_gateway::bytes32::{Self, Bytes32};
use axelar_gateway::channel::{Self, Channel, ApprovedMessage};
use axelar_gateway::message::{Self, Message};
use axelar_gateway::proof::{Self, Proof};
use axelar_gateway::weighted_signers::{Self, WeightedSigners};
use axelar_gateway::proof;
use axelar_gateway::weighted_signers;
use std::ascii::String;
use sui::address;
use sui::bcs;
use sui::clock::Clock;
use sui::hash;
use sui::table::{Self, Table};
use utils::utils;
#[test_only]
use sui::bcs;
npty marked this conversation as resolved.
Show resolved Hide resolved

// ------
// Errors
Expand All @@ -47,10 +49,8 @@ use sui::table::{Self, Table};
const EMessageNotApproved: u64 = 0;
/// Invalid length of vector
const EInvalidLength: u64 = 1;
/// Remaining data after BCS decoding
const ERemainingData: u64 = 2;
/// Not latest signers
const ENotLatestSigners: u64 = 3;
const ENotLatestSigners: u64 = 2;

// -----
// Types
Expand Down Expand Up @@ -141,7 +141,10 @@ public fun setup(
domain_separator,
minimum_rotation_delay,
previous_signers_retention,
peel_weighted_signers(initial_signers),
utils::peel!(
initial_signers,
|bcs| weighted_signers::peel(bcs),
),
clock,
ctx,
),
Expand Down Expand Up @@ -176,8 +179,8 @@ entry fun approve_messages(
message_data: vector<u8>,
proof_data: vector<u8>,
) {
let messages = peel_messages(*&message_data);
npty marked this conversation as resolved.
Show resolved Hide resolved
let proof = peel_proof(proof_data);
let proof = utils::peel!(proof_data, |bcs| proof::peel(bcs));
let messages = peel_messages(message_data);

let _ = self
.signers
Expand All @@ -186,13 +189,7 @@ entry fun approve_messages(
proof,
);

let mut i = 0;

while (i < messages.length()) {
self.approve_message(&messages[i]);

i = i + 1;
};
messages.length().do!(|i| self.approve_message(&messages[i]));
npty marked this conversation as resolved.
Show resolved Hide resolved
}

/// The main entrypoint for rotating Axelar signers.
Expand All @@ -205,8 +202,11 @@ entry fun rotate_signers(
proof_data: vector<u8>,
ctx: &TxContext,
) {
let weighted_signers = peel_weighted_signers(new_signers_data);
let proof = peel_proof(proof_data);
let weighted_signers = utils::peel!(
new_signers_data,
|bcs| weighted_signers::peel(bcs),
);
let proof = utils::peel!(proof_data, |bcs| proof::peel(bcs));

let enforce_rotation_delay = ctx.sender() != self.operator;

Expand Down Expand Up @@ -328,41 +328,17 @@ public fun take_approved_message(
// -----------------

fun peel_messages(message_data: vector<u8>): vector<Message> {
let mut bcs = bcs::new(message_data);

let mut messages = vector::empty<Message>();
let mut len = bcs.peel_vec_length();

while (len > 0) {
messages.push_back(message::peel(&mut bcs));

len = len - 1;
};

assert!(bcs.into_remainder_bytes().length() == 0, ERemainingData);
assert!(messages.length() > 0, EInvalidLength);

messages
}

fun peel_weighted_signers(weighted_signers_data: vector<u8>): WeightedSigners {
let mut bcs = bcs::new(weighted_signers_data);

let weighted_signers = weighted_signers::peel(&mut bcs);

assert!(bcs.into_remainder_bytes().length() == 0, ERemainingData);

weighted_signers
}

fun peel_proof(proof_data: vector<u8>): Proof {
let mut bcs = bcs::new(proof_data);

let proof = proof::peel(&mut bcs);

assert!(bcs.into_remainder_bytes().length() == 0, ERemainingData);

proof
utils::peel!(
message_data,
|bcs| {
let messages = vector::tabulate!(
bcs.peel_vec_length(),
|_| message::peel(bcs),
);
assert!(messages.length() > 0, EInvalidLength);
messages
},
)
}

fun data_hash(command_type: u8, data: vector<u8>): Bytes32 {
Expand Down Expand Up @@ -398,7 +374,7 @@ public fun create_for_testing(
domain_separator: Bytes32,
minimum_rotation_delay: u64,
previous_signers_retention: u64,
initial_signers: WeightedSigners,
initial_signers: weighted_signers::WeightedSigners,
clock: &Clock,
ctx: &mut TxContext,
): Gateway {
Expand Down Expand Up @@ -621,7 +597,7 @@ fun test_peel_messages() {
}

#[test]
#[expected_failure(abort_code = ERemainingData)]
#[expected_failure(abort_code = utils::ERemainingData, location = Self)]
fun test_peel_messages_no_remaining_data() {
let message1 = message::new(
std::ascii::string(b"Source Chain 1"),
Expand All @@ -647,38 +623,38 @@ fun test_peel_messages_no_zero_messages() {
fun test_peel_weighted_signers() {
let signers = axelar_gateway::weighted_signers::dummy();
let bytes = bcs::to_bytes(&signers);
let result = peel_weighted_signers(bytes);
let result = utils::peel!(bytes, |bcs| weighted_signers::peel(bcs));

assert!(result == signers, 0);
}

#[test]
#[expected_failure(abort_code = ERemainingData)]
#[expected_failure(abort_code = utils::ERemainingData, location = Self)]
fun test_peel_weighted_signers_no_remaining_data() {
let signers = axelar_gateway::weighted_signers::dummy();
let mut bytes = bcs::to_bytes(&signers);
bytes.push_back(0);

peel_weighted_signers(bytes);
utils::peel!(bytes, |bcs| weighted_signers::peel(bcs));
}

#[test]
fun test_peel_proof() {
let proof = axelar_gateway::proof::dummy();
let bytes = bcs::to_bytes(&proof);
let result = peel_proof(bytes);
let result = utils::peel!(bytes, |bcs| proof::peel(bcs));

assert!(result == proof, 0);
}

#[test]
#[expected_failure(abort_code = ERemainingData)]
#[expected_failure(abort_code = utils::ERemainingData, location = Self)]
fun test_peel_proof_no_remaining_data() {
let proof = axelar_gateway::proof::dummy();
let mut bytes = bcs::to_bytes(&proof);
bytes.push_back(0);

peel_proof(bytes);
utils::peel!(bytes, |bcs| proof::peel(bcs));
}

#[test]
Expand Down
16 changes: 13 additions & 3 deletions move/example/Move.lock
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,13 @@

[move]
version = 2
manifest_digest = "CE26F6281ECDC2D7E997402E48294A2D50D083F9CB0834AC1B0F57AA10AB2E07"
deps_digest = "060AD7E57DFB13104F21BE5F5C3759D03F0553FC3229247D9A7A6B45F50D03A3"
manifest_digest = "F34C8C11EBF9910157900830188AD969154FB3A0EDEC245D573E44B57B9B39BD"
deps_digest = "F9B494B64F0615AED0E98FC12A85B85ECD2BC5185C22D30E7F67786BB52E507C"
dependencies = [
{ name = "AxelarGateway" },
{ name = "GasService" },
{ name = "Sui" },
{ name = "Utils" },
]

[[move.package]]
Expand All @@ -16,6 +17,7 @@ source = { local = "../axelar_gateway" }

dependencies = [
{ name = "Sui" },
{ name = "Utils" },
]

[[move.package]]
Expand All @@ -38,7 +40,15 @@ dependencies = [
{ name = "MoveStdlib" },
]

[[move.package]]
name = "Utils"
source = { local = "../utils" }

dependencies = [
{ name = "Sui" },
]

[move.toolchain-version]
compiler-version = "1.32.0"
compiler-version = "1.32.2"
edition = "2024.beta"
flavor = "sui"
1 change: 1 addition & 0 deletions move/example/Move.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ edition = "2024.beta"
Sui = { git = "https://github.com/MystenLabs/sui.git", subdir = "crates/sui-framework/packages/sui-framework", rev = "mainnet-v1.32.2" }
AxelarGateway = { local = "../axelar_gateway" }
GasService = { local = "../gas_service" }
Utils = { local = "../utils" }

[addresses]
example = "0xa9"
4 changes: 2 additions & 2 deletions move/gas_service/Move.lock
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

[move]
version = 2
manifest_digest = "3E0F97A9BDB42A04D1524F729EFA345F3634F368AF9C44258DEF28B5A20A0886"
manifest_digest = "605B6467E155A4CA944DE0A99EFB9DD86705A2E9F114940D24B2406F5781A54A"
deps_digest = "F8BBB0CCB2491CA29A3DF03D6F92277A4F3574266507ACD77214D37ECA3F3082"
dependencies = [
{ name = "Sui" },
Expand All @@ -21,6 +21,6 @@ dependencies = [
]

[move.toolchain-version]
compiler-version = "1.32.0"
compiler-version = "1.32.2"
edition = "2024.beta"
flavor = "sui"
16 changes: 13 additions & 3 deletions move/governance/Move.lock
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,13 @@

[move]
version = 2
manifest_digest = "D03AC2A8D65272FAA0AD8CF6D4BF92A91EF7DDA8E2DEA47A807382A4F2E3236E"
deps_digest = "060AD7E57DFB13104F21BE5F5C3759D03F0553FC3229247D9A7A6B45F50D03A3"
manifest_digest = "980A92F6004E2BA06805FC94A718891A879535B74F11A218F3C7E1BA8C8C42DD"
deps_digest = "F9B494B64F0615AED0E98FC12A85B85ECD2BC5185C22D30E7F67786BB52E507C"
dependencies = [
{ name = "Abi" },
{ name = "AxelarGateway" },
{ name = "Sui" },
{ name = "Utils" },
]

[[move.package]]
Expand All @@ -24,6 +25,7 @@ source = { local = "../axelar_gateway" }

dependencies = [
{ name = "Sui" },
{ name = "Utils" },
]

[[move.package]]
Expand All @@ -38,7 +40,15 @@ dependencies = [
{ name = "MoveStdlib" },
]

[[move.package]]
name = "Utils"
source = { local = "../utils" }

dependencies = [
{ name = "Sui" },
]

[move.toolchain-version]
compiler-version = "1.32.0"
compiler-version = "1.32.2"
edition = "2024.beta"
flavor = "sui"
1 change: 1 addition & 0 deletions move/governance/Move.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ edition = "2024.beta"
Sui = { git = "https://github.com/MystenLabs/sui.git", subdir = "crates/sui-framework/packages/sui-framework", rev = "mainnet-v1.32.2" }
AxelarGateway = { local = "../axelar_gateway" }
Abi = { local = "../abi" }
Utils = { local = "../utils" }

[addresses]
governance = "0xa3"
4 changes: 2 additions & 2 deletions move/interchain_token/Move.lock
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

[move]
version = 2
manifest_digest = "76AD3C441FE28BD9B9AAF96B3F8CA684E101BAF0550B2AA5C6D6C1DA553EF6A3"
manifest_digest = "0C5093772F9B04F75BA79CA10A52EA66C5F751AD91FA128CB0FB65616B90E4C2"
deps_digest = "F8BBB0CCB2491CA29A3DF03D6F92277A4F3574266507ACD77214D37ECA3F3082"
dependencies = [
{ name = "Sui" },
Expand All @@ -21,6 +21,6 @@ dependencies = [
]

[move.toolchain-version]
compiler-version = "1.32.0"
compiler-version = "1.32.2"
edition = "2024.beta"
flavor = "sui"
Loading
Loading