@@ -29,6 +29,7 @@ use valence_e2e::{
29
29
ICA_CCTP_TRANSFER_NAME , ICA_IBC_TRANSFER_NAME , INTERCHAIN_ACCOUNT_NAME ,
30
30
NEUTRON_IBC_TRANSFER_NAME ,
31
31
} ,
32
+ mock_cctp_relayer,
32
33
solidity_contracts:: ValenceVault ,
33
34
vault:: { self , setup_cctp_transfer, setup_valence_vault} ,
34
35
DEFAULT_ANVIL_RPC_ENDPOINT , LOCAL_CODE_ID_CACHE_PATH_NEUTRON , LOGS_FILE_PATH ,
@@ -59,6 +60,7 @@ fn main() -> Result<(), Box<dyn Error>> {
59
60
async_run ! ( rt, ethereum_utils:: set_up_anvil_container( ) . await ) ?;
60
61
61
62
let eth = EthClient :: new ( DEFAULT_ANVIL_RPC_ENDPOINT ) ?;
63
+
62
64
let eth_client = valence_chain_client_utils:: ethereum:: EthereumClient :: new (
63
65
DEFAULT_ANVIL_RPC_ENDPOINT ,
64
66
"test test test test test test test test test test test junk" ,
@@ -70,6 +72,15 @@ fn main() -> Result<(), Box<dyn Error>> {
70
72
let eth_admin_acc = eth_accounts[ 0 ] ;
71
73
let _eth_user_acc = eth_accounts[ 2 ] ;
72
74
75
+ // create two Valence Base Accounts on Ethereum to test the processor with libraries (in this case the forwarder)
76
+ let deposit_acc_addr =
77
+ ethereum_utils:: valence_account:: setup_valence_account ( & rt, & eth_client, eth_admin_acc) ?;
78
+ let withdraw_acc_addr =
79
+ ethereum_utils:: valence_account:: setup_valence_account ( & rt, & eth_client, eth_admin_acc) ?;
80
+ // set up the cctp messenger
81
+ let mock_cctp_messenger_address =
82
+ valence_e2e:: utils:: vault:: setup_mock_token_messenger ( & rt, & eth_client) ?;
83
+
73
84
info ! ( "Setting up Neutron side flow..." ) ;
74
85
75
86
let mut test_ctx = TestContextBuilder :: default ( )
@@ -178,7 +189,7 @@ fn main() -> Result<(), Box<dyn Error>> {
178
189
& neutron_processor_address,
179
190
amount_to_transfer,
180
191
& uusdc_on_neutron_denom,
181
- eth_admin_acc . to_string ( ) ,
192
+ withdraw_acc_addr . to_string ( ) ,
182
193
) ?;
183
194
184
195
noble:: mint_usdc_to_addr (
@@ -225,6 +236,21 @@ fn main() -> Result<(), Box<dyn Error>> {
225
236
& pool_addr,
226
237
) ?;
227
238
239
+ let usdc_token_address =
240
+ ethereum_utils:: mock_erc20:: setup_deposit_erc20 ( & rt, & eth_client, "MockUSDC" , "USDC" ) ?;
241
+
242
+ info ! ( "Starting CCTP mock relayer between Noble and Ethereum..." ) ;
243
+ let mock_cctp_relayer = mock_cctp_relayer:: MockCctpRelayer :: new (
244
+ & rt,
245
+ mock_cctp_messenger_address,
246
+ usdc_token_address,
247
+ ) ?;
248
+ let rly_rt = tokio:: runtime:: Runtime :: new ( ) . unwrap ( ) ;
249
+
250
+ let _join_handle = rly_rt. spawn ( mock_cctp_relayer. start ( ) ) ;
251
+ info ! ( "main sleep for 3..." ) ;
252
+ sleep ( Duration :: from_secs ( 3 ) ) ;
253
+
228
254
strategist:: route_usdc_to_noble (
229
255
& rt,
230
256
& neutron_client,
@@ -233,8 +259,6 @@ fn main() -> Result<(), Box<dyn Error>> {
233
259
& uusdc_on_neutron_denom,
234
260
) ?;
235
261
236
- sleep ( Duration :: from_secs ( 5 ) ) ;
237
-
238
262
let noble_outbound_ica_usdc_bal = async_run ! (
239
263
& rt,
240
264
noble_client
@@ -255,15 +279,6 @@ fn main() -> Result<(), Box<dyn Error>> {
255
279
& neutron_program_libraries,
256
280
) ?;
257
281
258
- // create two Valence Base Accounts on Ethereum to test the processor with libraries (in this case the forwarder)
259
- let deposit_acc_addr =
260
- ethereum_utils:: valence_account:: setup_valence_account ( & rt, & eth_client, eth_admin_acc) ?;
261
- let withdraw_acc_addr =
262
- ethereum_utils:: valence_account:: setup_valence_account ( & rt, & eth_client, eth_admin_acc) ?;
263
-
264
- let usdc_token_address =
265
- ethereum_utils:: mock_erc20:: setup_deposit_erc20 ( & rt, & eth_client, "MockUSDC" , "USDC" ) ?;
266
-
267
282
info ! ( "Setting up Lite Processor on Ethereum" ) ;
268
283
let _lite_processor_address = ethereum_utils:: lite_processor:: setup_lite_processor (
269
284
& rt,
@@ -276,9 +291,6 @@ fn main() -> Result<(), Box<dyn Error>> {
276
291
authorization_contract_address. as_str ( ) ,
277
292
) ?;
278
293
279
- let mock_cctp_messenger_address =
280
- valence_e2e:: utils:: vault:: setup_mock_token_messenger ( & rt, & eth_client) ?;
281
-
282
294
info ! ( "Setting up Valence Vault..." ) ;
283
295
let vault_address = setup_valence_vault (
284
296
& rt,
@@ -293,7 +305,10 @@ fn main() -> Result<(), Box<dyn Error>> {
293
305
let cctp_forwarder = setup_cctp_transfer (
294
306
& rt,
295
307
& eth_client,
296
- neutron_program_accounts. noble_inbound_ica . remote_addr ,
308
+ neutron_program_accounts
309
+ . noble_inbound_ica
310
+ . remote_addr
311
+ . to_string ( ) ,
297
312
deposit_acc_addr,
298
313
eth_admin_acc,
299
314
eth_admin_acc,
@@ -497,52 +512,60 @@ fn main() -> Result<(), Box<dyn Error>> {
497
512
498
513
info ! ( "user1 completing withdraw request..." ) ;
499
514
vault:: complete_withdraw_request ( * valence_vault. address ( ) , & rt, & eth_client, eth_user_acc) ?;
500
- let withdraw_acc_usdc_bal = ethereum_utils:: mock_erc20:: query_balance (
501
- & rt,
502
- & eth_client,
503
- usdc_token_address,
504
- withdraw_acc_addr,
505
- ) ;
515
+
506
516
let user1_usdc_bal = ethereum_utils:: mock_erc20:: query_balance (
507
517
& rt,
508
518
& eth_client,
509
519
usdc_token_address,
510
520
eth_user_acc,
511
521
) ;
512
- assert_eq ! ( withdraw_acc_usdc_bal, U256 :: from( 50 ) ) ; // fees leftover
513
522
assert_eq ! ( user1_usdc_bal, user_1_deposit_amount - U256 :: from( 50 ) ) ;
514
523
515
- let deposit_acc_usdc_bal = ethereum_utils:: mock_erc20:: query_balance (
524
+ let pre_cctp_deposit_acc_usdc_bal = ethereum_utils:: mock_erc20:: query_balance (
516
525
& rt,
517
526
& eth_client,
518
527
usdc_token_address,
519
528
deposit_acc_addr,
520
529
) ;
521
- info ! ( "deposit account usdc balance: {deposit_acc_usdc_bal}" ) ;
522
- assert_ne ! ( deposit_acc_usdc_bal, U256 :: ZERO ) ;
530
+ let pre_cctp_neutron_ica_bal = async_run ! (
531
+ & rt,
532
+ noble_client
533
+ . query_balance(
534
+ & neutron_program_accounts. noble_inbound_ica. remote_addr,
535
+ UUSDC_DENOM
536
+ )
537
+ . await
538
+ . unwrap( )
539
+ ) ;
540
+
541
+ assert_eq ! ( pre_cctp_neutron_ica_bal, 0 ) ;
542
+ assert_eq ! ( pre_cctp_deposit_acc_usdc_bal, U256 :: from( 1000000 ) ) ;
523
543
524
544
info ! ( "strategist cctp routing eth->ntrn..." ) ;
525
545
strategist:: cctp_route_usdc_from_eth ( & rt, & eth_client, cctp_forwarder, eth_admin_acc) ?;
526
546
527
- let deposit_acc_usdc_bal = ethereum_utils:: mock_erc20:: query_balance (
547
+ info ! ( "[MAIN] sleeping for 5 to give cctp time to relay" ) ;
548
+ sleep ( Duration :: from_secs ( 5 ) ) ;
549
+
550
+ let post_cctp_deposit_acc_usdc_bal = ethereum_utils:: mock_erc20:: query_balance (
528
551
& rt,
529
552
& eth_client,
530
553
usdc_token_address,
531
554
deposit_acc_addr,
532
555
) ;
533
- assert_eq ! ( deposit_acc_usdc_bal, U256 :: ZERO ) ;
534
-
535
- log_eth_balances (
536
- & eth_client,
556
+ let post_cctp_neutron_ica_bal = async_run ! (
537
557
& rt,
538
- valence_vault. address ( ) ,
539
- & usdc_token_address,
540
- & deposit_acc_addr,
541
- & withdraw_acc_addr,
542
- & eth_user_acc,
543
- & eth_user2_acc,
544
- )
545
- . unwrap ( ) ;
558
+ noble_client
559
+ . query_balance(
560
+ & neutron_program_accounts. noble_inbound_ica. remote_addr,
561
+ UUSDC_DENOM
562
+ )
563
+ . await
564
+ . unwrap( )
565
+ ) ;
566
+
567
+ assert_eq ! ( post_cctp_neutron_ica_bal, 1000000 ) ;
568
+ assert_eq ! ( post_cctp_deposit_acc_usdc_bal, U256 :: ZERO ) ;
546
569
547
570
Ok ( ( ) )
548
571
}
0 commit comments