Skip to content

Commit 4fa3da4

Browse files
authored
Merge branch 'develop' into remove-coin-metadata
2 parents 5d258cb + b8f7aee commit 4fa3da4

File tree

50 files changed

+572
-327
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

50 files changed

+572
-327
lines changed

bindings/generated/ccip/ccip_token_pools/token_pool/token_pool.go

Lines changed: 9 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

contracts/ccip/ccip/Move.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,6 @@ dependencies = [
5555
]
5656

5757
[move.toolchain-version]
58-
compiler-version = "1.57.2"
58+
compiler-version = "1.58.1"
5959
edition = "2024"
6060
flavor = "sui"

contracts/ccip/ccip/sources/client.move

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ public struct Any2SuiMessage {
9090

9191
public struct Any2SuiTokenAmount has copy, drop, store {
9292
token: address,
93-
amount: u64,
93+
amount: u256,
9494
}
9595

9696
public(package) fun new_any2sui_message(
@@ -128,7 +128,7 @@ public(package) fun consume_any2sui_message(
128128

129129
public fun new_dest_token_amounts(
130130
token_addresses: vector<address>,
131-
token_amounts: vector<u64>,
131+
token_amounts: vector<u256>,
132132
): vector<Any2SuiTokenAmount> {
133133
token_addresses.zip_map_ref!(&token_amounts, |token_address, token_amount| {
134134
Any2SuiTokenAmount { token: *token_address, amount: *token_amount }
@@ -139,10 +139,10 @@ public fun get_token(input: &Any2SuiTokenAmount): address {
139139
input.token
140140
}
141141

142-
public fun get_amount(input: &Any2SuiTokenAmount): u64 {
142+
public fun get_amount(input: &Any2SuiTokenAmount): u256 {
143143
input.amount
144144
}
145145

146-
public fun get_token_and_amount(input: &Any2SuiTokenAmount): (address, u64) {
146+
public fun get_token_and_amount(input: &Any2SuiTokenAmount): (address, u256) {
147147
(input.token, input.amount)
148148
}

contracts/ccip/ccip/sources/offramp_state_helper.move

Lines changed: 4 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public struct DestTokenTransfer has copy, drop {
4343
token_receiver: address,
4444
remote_chain_selector: u64,
4545
// the amount of token to transfer, denoted from the source chain
46-
source_amount: u64,
46+
source_amount: u256,
4747
// the token's coin metadata object id on SUI
4848
dest_token_address: address,
4949
// the destination token pool package id on SUI
@@ -82,7 +82,7 @@ public fun add_dest_token_transfer(
8282
receiver_params: &mut ReceiverParams,
8383
token_receiver: address,
8484
remote_chain_selector: u64,
85-
source_amount: u64,
85+
source_amount: u256,
8686
dest_token_address: address,
8787
dest_token_pool_package_id: address,
8888
source_pool_address: vector<u8>,
@@ -117,31 +117,9 @@ public fun populate_message(
117117
receiver_params.message.fill(any2sui_message);
118118
}
119119

120-
public fun create_dest_token_transfer(
121-
token_receiver: address,
122-
remote_chain_selector: u64,
123-
source_amount: u64,
124-
dest_token_address: address,
125-
dest_token_pool_package_id: address,
126-
source_pool_address: vector<u8>,
127-
source_pool_data: vector<u8>,
128-
offchain_token_data: vector<u8>,
129-
): DestTokenTransfer {
130-
DestTokenTransfer {
131-
token_receiver,
132-
remote_chain_selector,
133-
source_amount,
134-
dest_token_address,
135-
dest_token_pool_package_id,
136-
source_pool_address,
137-
source_pool_data,
138-
offchain_token_data,
139-
}
140-
}
141-
142120
public fun get_dest_token_transfer_data(
143121
receiver_params: &ReceiverParams,
144-
): (address, u64, u64, address, address, vector<u8>, vector<u8>, vector<u8>) {
122+
): (address, u64, u256, address, address, vector<u8>, vector<u8>, vector<u8>) {
145123
assert!(receiver_params.token_transfer.is_some(), ETokenTransferDoesNotExist);
146124

147125
let token_transfer = receiver_params.token_transfer.borrow();
@@ -159,7 +137,7 @@ public fun get_dest_token_transfer_data(
159137

160138
public fun get_token_param_data(
161139
receiver_params: &ReceiverParams,
162-
): (address, u64, address, vector<u8>, vector<u8>, vector<u8>) {
140+
): (address, u256, address, vector<u8>, vector<u8>, vector<u8>) {
163141
assert!(receiver_params.token_transfer.is_some(), ETokenTransferDoesNotExist);
164142
let token_param = receiver_params.token_transfer.borrow();
165143

contracts/ccip/ccip/sources/onramp_state_helper.move

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ use std::type_name;
77
const ETypeProofMismatch: u64 = 1;
88
const ETokenTransferAlreadyExists: u64 = 2;
99
const ETokenTransferDoesNotExist: u64 = 3;
10+
const EInvalidTokenReceiver: u64 = 4;
1011

1112
public struct ONRAMP_STATE_HELPER has drop {}
1213

@@ -17,10 +18,10 @@ public struct SourceTransferCap has key, store {
1718

1819
public struct TokenTransferParams {
1920
token_transfer: Option<TokenTransferMetadata>,
20-
token_receiver: address,
21+
token_receiver: vector<u8>,
2122
}
2223

23-
public fun get_token_receiver(params: &TokenTransferParams): address {
24+
public fun get_token_receiver(params: &TokenTransferParams): vector<u8> {
2425
params.token_receiver
2526
}
2627

@@ -41,7 +42,8 @@ fun init(_witness: ONRAMP_STATE_HELPER, ctx: &mut TxContext) {
4142
transfer::transfer(source_cap, ctx.sender());
4243
}
4344

44-
public fun create_token_transfer_params(token_receiver: address): TokenTransferParams {
45+
public fun create_token_transfer_params(token_receiver: vector<u8>): TokenTransferParams {
46+
assert!(token_receiver.length() == 32, EInvalidTokenReceiver);
4547
TokenTransferParams {
4648
token_transfer: option::none(),
4749
token_receiver,

contracts/ccip/ccip/tests/client_tests.move

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -321,7 +321,7 @@ fun test_new_any2sui_message() {
321321
#[test]
322322
fun test_new_dest_token_amounts() {
323323
let token_addresses = vector[@0x1, @0x2, @0x3];
324-
let token_amounts = vector[100u64, 200u64, 300u64];
324+
let token_amounts = vector[100u256, 200u256, 300u256];
325325

326326
let dest_token_amounts = client::new_dest_token_amounts(token_addresses, token_amounts);
327327

@@ -331,17 +331,17 @@ fun test_new_dest_token_amounts() {
331331
// Verify the first token amount
332332
let first_amount = &dest_token_amounts[0];
333333
assert!(client::get_token(first_amount) == @0x1, 1);
334-
assert!(client::get_amount(first_amount) == 100u64, 2);
334+
assert!(client::get_amount(first_amount) == 100u256, 2);
335335

336336
// Verify the second token amount
337337
let second_amount = &dest_token_amounts[1];
338338
assert!(client::get_token(second_amount) == @0x2, 3);
339-
assert!(client::get_amount(second_amount) == 200u64, 4);
339+
assert!(client::get_amount(second_amount) == 200u256, 4);
340340

341341
// Verify the third token amount
342342
let third_amount = &dest_token_amounts[2];
343343
assert!(client::get_token(third_amount) == @0x3, 5);
344-
assert!(client::get_amount(third_amount) == 300u64, 6);
344+
assert!(client::get_amount(third_amount) == 300u256, 6);
345345
}
346346

347347
#[test]
@@ -391,7 +391,7 @@ fun test_message_with_token_amounts() {
391391
// Create some token amounts
392392
let token_receiver = @0x12345;
393393
let token_addresses = vector[@0xa, @0xb];
394-
let token_amounts = vector[1000u64, 2000u64];
394+
let token_amounts = vector[1000u256, 2000u256];
395395
let dest_token_amounts = client::new_dest_token_amounts(token_addresses, token_amounts);
396396

397397
let message = client::new_any2sui_message(
@@ -420,7 +420,7 @@ fun test_message_with_token_amounts() {
420420
assert!(returned_token_receiver == token_receiver, 4);
421421
assert!(returned_dest_token_amounts.length() == 2, 5);
422422
assert!(client::get_token(&returned_dest_token_amounts[0]) == @0xa, 6);
423-
assert!(client::get_amount(&returned_dest_token_amounts[0]) == 1000u64, 7);
423+
assert!(client::get_amount(&returned_dest_token_amounts[0]) == 1000u256, 7);
424424
assert!(client::get_token(&returned_dest_token_amounts[1]) == @0xb, 8);
425-
assert!(client::get_amount(&returned_dest_token_amounts[1]) == 2000u64, 9);
425+
assert!(client::get_amount(&returned_dest_token_amounts[1]) == 2000u256, 9);
426426
}

contracts/ccip/ccip/tests/onramp_state_helper_tests.move

Lines changed: 36 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ use ccip::state_object::{Self, CCIPObjectRef};
77
use ccip::token_admin_registry as registry;
88
use ccip::upgrade_registry;
99
use std::ascii;
10+
use std::bcs;
1011
use std::string;
1112
use std::type_name;
1213
use sui::test_scenario::{Self as ts, Scenario};
@@ -83,7 +84,9 @@ public fun test_create_token_transfer_params() {
8384
);
8485

8586
// Test creating token transfer params with valid data
86-
let mut token_params = onramp_state_helper::create_token_transfer_params(@0x456);
87+
let mut token_params = onramp_state_helper::create_token_transfer_params(
88+
bcs::to_bytes(&@0x456),
89+
);
8790
onramp_state_helper::add_token_transfer_param<TestTypeProof>(
8891
&ref,
8992
&mut token_params,
@@ -139,7 +142,9 @@ public fun test_create_token_transfer_params_basic() {
139142

140143
// Try to create token transfer params - this test now just creates empty params
141144
// since type proof validation was removed from the helper
142-
let mut token_params = onramp_state_helper::create_token_transfer_params(@0x456);
145+
let mut token_params = onramp_state_helper::create_token_transfer_params(
146+
bcs::to_bytes(&@0x456),
147+
);
143148
onramp_state_helper::add_token_transfer_param<TestTypeProof>(
144149
&ref,
145150
&mut token_params,
@@ -175,7 +180,9 @@ public fun test_get_remote_chain_selector() {
175180
);
176181

177182
// Test creating token transfer params with different chain selectors
178-
let mut token_params1 = onramp_state_helper::create_token_transfer_params(@0x456);
183+
let mut token_params1 = onramp_state_helper::create_token_transfer_params(
184+
bcs::to_bytes(&@0x456),
185+
);
179186
onramp_state_helper::add_token_transfer_param<TestTypeProof>(
180187
&ref,
181188
&mut token_params1,
@@ -188,7 +195,9 @@ public fun test_get_remote_chain_selector() {
188195
);
189196

190197
let different_chain = 2000;
191-
let mut token_params2 = onramp_state_helper::create_token_transfer_params(@0x456);
198+
let mut token_params2 = onramp_state_helper::create_token_transfer_params(
199+
bcs::to_bytes(&@0x456),
200+
);
192201
onramp_state_helper::add_token_transfer_param<TestTypeProof>(
193202
&ref,
194203
&mut token_params2,
@@ -238,7 +247,9 @@ public fun test_create_and_verify_token_transfer() {
238247
);
239248

240249
// Create source token transfer
241-
let mut token_params = onramp_state_helper::create_token_transfer_params(@0x456);
250+
let mut token_params = onramp_state_helper::create_token_transfer_params(
251+
bcs::to_bytes(&@0x456),
252+
);
242253
onramp_state_helper::add_token_transfer_param<TestTypeProof>(
243254
&ref,
244255
&mut token_params,
@@ -278,7 +289,7 @@ public fun test_deconstruct_empty_params_vector() {
278289
let (scenario, owner_cap, ref, source_cap) = setup_test();
279290

280291
// Create empty params and test deconstruct
281-
let empty_params = onramp_state_helper::create_token_transfer_params(@0x456);
292+
let empty_params = onramp_state_helper::create_token_transfer_params(bcs::to_bytes(&@0x456));
282293

283294
// Deconstruct should work with empty params
284295
onramp_state_helper::deconstruct_token_params(&source_cap, empty_params);
@@ -307,7 +318,9 @@ public fun test_add_multiple_token_transfers_should_fail() {
307318
);
308319

309320
// Create token transfer params
310-
let mut token_params = onramp_state_helper::create_token_transfer_params(@0x456);
321+
let mut token_params = onramp_state_helper::create_token_transfer_params(
322+
bcs::to_bytes(&@0x456),
323+
);
311324

312325
// Add first token transfer
313326
onramp_state_helper::add_token_transfer_param<TestTypeProof>(
@@ -344,7 +357,7 @@ public fun test_get_token_transfer_data_when_empty() {
344357
let (scenario, owner_cap, ref, source_cap) = setup_test();
345358

346359
// Create empty token transfer params (no token transfer added)
347-
let token_params = onramp_state_helper::create_token_transfer_params(@0x456);
360+
let token_params = onramp_state_helper::create_token_transfer_params(bcs::to_bytes(&@0x456));
348361

349362
// This should fail with ETokenTransferDoesNotExist because no token transfer was added
350363
let (
@@ -381,7 +394,9 @@ public fun test_get_source_token_transfer_data() {
381394
);
382395

383396
// Create token transfer with specific data
384-
let mut token_params = onramp_state_helper::create_token_transfer_params(@0x456);
397+
let mut token_params = onramp_state_helper::create_token_transfer_params(
398+
bcs::to_bytes(&@0x456),
399+
);
385400
onramp_state_helper::add_token_transfer_param<TestTypeProof>(
386401
&ref,
387402
&mut token_params,
@@ -437,7 +452,9 @@ public fun test_edge_case_large_amounts() {
437452

438453
// Test with maximum u64 value
439454
let max_amount = 18446744073709551615; // u64::MAX
440-
let mut token_params = onramp_state_helper::create_token_transfer_params(@0x456);
455+
let mut token_params = onramp_state_helper::create_token_transfer_params(
456+
bcs::to_bytes(&@0x456),
457+
);
441458
onramp_state_helper::add_token_transfer_param<TestTypeProof>(
442459
&ref,
443460
&mut token_params,
@@ -481,7 +498,9 @@ public fun test_edge_case_empty_data() {
481498
);
482499

483500
// Test with empty destination address and extra data
484-
let mut token_params = onramp_state_helper::create_token_transfer_params(@0x456);
501+
let mut token_params = onramp_state_helper::create_token_transfer_params(
502+
bcs::to_bytes(&@0x456),
503+
);
485504
onramp_state_helper::add_token_transfer_param<TestTypeProof>(
486505
&ref,
487506
&mut token_params,
@@ -531,7 +550,9 @@ public fun test_zero_amount_transfer() {
531550
);
532551

533552
// Test with zero amount - should be allowed
534-
let mut token_params = onramp_state_helper::create_token_transfer_params(@0x456);
553+
let mut token_params = onramp_state_helper::create_token_transfer_params(
554+
bcs::to_bytes(&@0x456),
555+
);
535556
onramp_state_helper::add_token_transfer_param<TestTypeProof>(
536557
&ref,
537558
&mut token_params,
@@ -575,7 +596,9 @@ public fun test_source_transfer_cap_permission() {
575596
);
576597

577598
// Create a source token transfer
578-
let mut token_params = onramp_state_helper::create_token_transfer_params(@0x456);
599+
let mut token_params = onramp_state_helper::create_token_transfer_params(
600+
bcs::to_bytes(&@0x456),
601+
);
579602
onramp_state_helper::add_token_transfer_param<TestTypeProof>(
580603
&ref,
581604
&mut token_params,

contracts/ccip/ccip_offramp/sources/offramp.move

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ use mcms::mcms_registry::{Self, Registry, ExecutingCallbackParams};
2121
use std::ascii;
2222
use std::string::{Self, String};
2323
use std::type_name;
24-
use std::u256;
2524
use sui::address;
2625
use sui::clock;
2726
use sui::derived_object;
@@ -220,18 +219,18 @@ const ECursedByRmn: u64 = 16;
220219
const ESignatureVerificationRequiredInCommitPlugin: u64 = 17;
221220
const ESignatureVerificationNotAllowedInExecutionPlugin: u64 = 18;
222221
const EFeeQuoterCapExists: u64 = 19;
223-
const ETokenAmountOverflow: u64 = 20;
224-
const EDestTransferCapExists: u64 = 21;
225-
const ERmnBlessingMismatch: u64 = 22;
226-
const EUnsupportedToken: u64 = 23;
227-
const EInvalidOnRampUpdate: u64 = 24;
228-
const EDestTransferCapNotSet: u64 = 25;
229-
const ECalculateMessageHashInvalidArguments: u64 = 26;
230-
const EInvalidFunction: u64 = 27;
231-
const EInvalidTokenReceiver: u64 = 28;
232-
const ETokenTransferLimitExceeded: u64 = 29;
233-
const EPackageIdNotFound: u64 = 30;
234-
const EInvalidOwnerCap: u64 = 31;
222+
const EDestTransferCapExists: u64 = 20;
223+
const ERmnBlessingMismatch: u64 = 21;
224+
const EUnsupportedToken: u64 = 22;
225+
const EInvalidOnRampUpdate: u64 = 23;
226+
const EDestTransferCapNotSet: u64 = 24;
227+
const ECalculateMessageHashInvalidArguments: u64 = 25;
228+
const EInvalidFunction: u64 = 26;
229+
const EInvalidTokenReceiver: u64 = 27;
230+
const ETokenTransferLimitExceeded: u64 = 28;
231+
const EPackageIdNotFound: u64 = 29;
232+
const EInvalidOwnerCap: u64 = 30;
233+
const EUnknownSequenceNumber: u64 = 31;
235234

236235
const VERSION: u8 = 1;
237236

@@ -491,6 +490,7 @@ public fun get_execution_state(
491490
): u8 {
492491
assert!(state.execution_states.contains(source_chain_selector), EUnknownSourceChainSelector);
493492
let source_chain_execution_states = state.execution_states.borrow(source_chain_selector);
493+
assert!(source_chain_execution_states.contains(sequence_number), EUnknownSequenceNumber);
494494
let execution_state = source_chain_execution_states.borrow(sequence_number);
495495
*execution_state
496496
}
@@ -652,24 +652,21 @@ fun pre_execute_single_report(
652652
message.token_amounts[0].dest_token_address,
653653
);
654654
assert!(token_pool_address != @0x0, EUnsupportedToken);
655-
let mut amount_op = u256::try_as_u64(message.token_amounts[0].amount);
656-
assert!(amount_op.is_some(), ETokenAmountOverflow);
657-
let amount = amount_op.extract();
658655

659656
osh::add_dest_token_transfer(
660657
state.dest_transfer_cap.borrow(),
661658
&mut receiver_params,
662659
message.token_receiver, // when sending tokens, token receiver will be included in the execution report
663660
source_chain_selector,
664-
amount,
661+
message.token_amounts[0].amount,
665662
message.token_amounts[0].dest_token_address,
666663
token_pool_address,
667664
message.token_amounts[0].source_pool_address,
668665
message.token_amounts[0].extra_data,
669666
execution_report.offchain_token_data[0],
670667
);
671668
token_addresses.push_back(message.token_amounts[0].dest_token_address);
672-
token_amounts.push_back(amount);
669+
token_amounts.push_back(message.token_amounts[0].amount);
673670
};
674671

675672
let has_valid_message_receiver =

0 commit comments

Comments
 (0)