Skip to content

Commit e4d9299

Browse files
committed
Update tests and pool modules to handle v1 and v2 ccip receive callback upgrade
1 parent 5e02abf commit e4d9299

16 files changed

Lines changed: 651 additions & 97 deletions

File tree

bindings/ccip/token_admin_registry/token_admin_registry.go

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

contracts/ccip/ccip/sources/receiver_dispatcher.move

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,13 @@ module ccip::receiver_dispatcher {
1111
) {
1212
auth::assert_is_allowed_offramp(signer::address_of(caller));
1313

14-
let dispatch_metadata =
15-
receiver_registry::start_receive(receiver_address, message);
16-
dispatchable_fungible_asset::derived_supply(dispatch_metadata);
17-
receiver_registry::finish_receive(receiver_address);
18-
}
19-
20-
/// Invoke receiver's callback without token dispatchable hooks
21-
public fun dispatch_receive_v2(
22-
caller: &signer, receiver_address: address, message: client::Any2AptosMessage
23-
) {
24-
auth::assert_is_allowed_offramp(signer::address_of(caller));
25-
26-
receiver_registry::invoke_ccip_receive_v2(receiver_address, message);
14+
if (receiver_registry::is_registered_receiver_v2(receiver_address)) {
15+
receiver_registry::invoke_ccip_receive_v2(receiver_address, message);
16+
} else {
17+
let dispatch_metadata =
18+
receiver_registry::start_receive(receiver_address, message);
19+
dispatchable_fungible_asset::derived_supply(dispatch_metadata);
20+
receiver_registry::finish_receive(receiver_address);
21+
}
2722
}
2823
}

contracts/ccip/ccip/sources/receiver_registry.move

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ module ccip::receiver_registry {
3434

3535
struct CCIPReceiverRegistrationV2 has key {
3636
callback: |client::Any2AptosMessage| has drop + copy + store,
37-
proof_typeinfo: TypeInfo,
37+
proof_typeinfo: TypeInfo
3838
}
3939

4040
#[event]
@@ -167,7 +167,7 @@ module ccip::receiver_registry {
167167
);
168168

169169
move_to(
170-
receiver_account,
170+
receiver_account,
171171
CCIPReceiverRegistrationV2 { callback, proof_typeinfo }
172172
);
173173

@@ -181,6 +181,7 @@ module ccip::receiver_registry {
181181
#[view]
182182
public fun is_registered_receiver(receiver_address: address): bool {
183183
exists<CCIPReceiverRegistration>(receiver_address)
184+
|| exists<CCIPReceiverRegistrationV2>(receiver_address)
184185
}
185186

186187
#[view]
@@ -221,9 +222,7 @@ module ccip::receiver_registry {
221222
registration.dispatch_metadata
222223
}
223224

224-
public(friend) fun finish_receive(
225-
receiver_address: address
226-
) acquires CCIPReceiverRegistration {
225+
public(friend) fun finish_receive(receiver_address: address) acquires CCIPReceiverRegistration {
227226
let registration = get_registration_mut(receiver_address);
228227

229228
assert!(
@@ -233,17 +232,15 @@ module ccip::receiver_registry {
233232
}
234233

235234
public(friend) fun invoke_ccip_receive_v2(
236-
receiver_address: address,
237-
message: client::Any2AptosMessage
235+
receiver_address: address, message: client::Any2AptosMessage
238236
) acquires CCIPReceiverRegistrationV2 {
239237
assert!(
240238
exists<CCIPReceiverRegistrationV2>(receiver_address),
241239
error::invalid_argument(E_UNKNOWN_RECEIVER)
242240
);
243241

244242
let registration = borrow_global<CCIPReceiverRegistrationV2>(receiver_address);
245-
246-
(registration.callback)(message);
243+
(registration.callback) (message);
247244
}
248245

249246
inline fun borrow_state(): &ReceiverRegistryState {

contracts/ccip/ccip/sources/token_admin_dispatcher.move

Lines changed: 1 addition & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ module ccip::token_admin_dispatcher {
1616
): (vector<u8>, vector<u8>) {
1717
auth::assert_is_allowed_onramp(signer::address_of(caller));
1818

19-
// Check for V2 first (preferred - uses closures)
2019
if (token_admin_registry::has_token_pool_config(token_pool_address)) {
2120
token_admin_registry::lock_or_burn_v2(
2221
caller,
@@ -93,55 +92,5 @@ module ccip::token_admin_dispatcher {
9392
(fa, destination_amount)
9493
}
9594
}
96-
97-
// ============================================
98-
// V2 Closure-Based Dispatch Functions
99-
// ============================================
100-
101-
public fun dispatch_lock_or_burn_v2(
102-
caller: &signer,
103-
token_pool_address: address,
104-
fa: FungibleAsset,
105-
sender: address,
106-
remote_chain_selector: u64,
107-
receiver: vector<u8>
108-
): (vector<u8>, vector<u8>) {
109-
token_admin_registry::lock_or_burn_v2(
110-
caller,
111-
token_pool_address,
112-
fa,
113-
sender,
114-
remote_chain_selector,
115-
receiver
116-
)
117-
}
118-
119-
public fun dispatch_release_or_mint_v2(
120-
caller: &signer,
121-
token_pool_address: address,
122-
sender: vector<u8>,
123-
receiver: address,
124-
source_amount: u256,
125-
local_token: address,
126-
remote_chain_selector: u64,
127-
source_pool_address: vector<u8>,
128-
source_pool_data: vector<u8>,
129-
offchain_token_data: vector<u8>
130-
): (FungibleAsset, u64) {
131-
let (fa, destination_amount) =
132-
token_admin_registry::release_or_mint_v2(
133-
caller,
134-
token_pool_address,
135-
sender,
136-
receiver,
137-
source_amount,
138-
local_token,
139-
remote_chain_selector,
140-
source_pool_address,
141-
source_pool_data,
142-
offchain_token_data
143-
);
144-
145-
(fa, destination_amount)
146-
}
14795
}
96+

contracts/ccip/ccip_offramp/sources/offramp.move

Lines changed: 6 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -808,14 +808,8 @@ module ccip_offramp::offramp {
808808
// module.
809809
// ref: https://github.com/smartcontractkit/chainlink-ccip/blob/875e982e6437dc126710d8224dd7c792a197bea6/chains/evm/contracts/offRamp/OffRamp.sol#L633
810810

811-
let is_v1_receiver = receiver_registry::is_registered_receiver(message.receiver);
812-
let is_v2_receiver =
813-
receiver_registry::is_registered_receiver_v2(message.receiver);
814-
815-
if ((!message.data.is_empty()
816-
|| message.gas_limit != 0)
817-
&& (is_v1_receiver
818-
|| is_v2_receiver)) {
811+
if ((!message.data.is_empty() || message.gas_limit != 0)
812+
&& receiver_registry::is_registered_receiver(message.receiver)) {
819813
let state_signer =
820814
account::create_signer_with_capability(&state.state_signer_cap);
821815

@@ -833,16 +827,9 @@ module ccip_offramp::offramp {
833827
dest_token_amounts
834828
);
835829

836-
// Use V2 dispatch if available, else V1
837-
if (is_v2_receiver) {
838-
receiver_dispatcher::dispatch_receive_v2(
839-
&state_signer, message.receiver, any2aptos_message
840-
)
841-
} else {
842-
receiver_dispatcher::dispatch_receive(
843-
&state_signer, message.receiver, any2aptos_message
844-
)
845-
}
830+
receiver_dispatcher::dispatch_receive(
831+
&state_signer, message.receiver, any2aptos_message
832+
)
846833
};
847834

848835
}
@@ -909,7 +896,7 @@ module ccip_offramp::offramp {
909896
account::create_signer_with_capability(&state.state_signer_cap);
910897

911898
let (fa, local_amount) =
912-
token_admin_dispatcher::dispatch_release_or_mint_v2(
899+
token_admin_dispatcher::dispatch_release_or_mint(
913900
&state_signer,
914901
token_pool_address,
915902
sender,

0 commit comments

Comments
 (0)