Skip to content
Merged
Show file tree
Hide file tree
Changes from 61 commits
Commits
Show all changes
63 commits
Select commit Hold shift + click to select a range
ff388c7
integrate chain-client-utils eth client into vault e2e
bekauz Mar 4, 2025
b9455aa
split away eth side setup into separate fn; init vault mod
bekauz Mar 4, 2025
e03839b
add transaction response try_from broadcasting response
bekauz Mar 5, 2025
ed343f9
cleanup eth side setup, mint some deposit tokens
bekauz Mar 5, 2025
34c6915
derive debug for valence vault sol macro
bekauz Mar 5, 2025
829487f
vault minting shares; performing update
bekauz Mar 5, 2025
f2a35f0
vault pause+unpause
bekauz Mar 6, 2025
d8d31ee
wip: user shares redeem
bekauz Mar 6, 2025
3535e1f
cleanup vault utils
bekauz Mar 6, 2025
799252d
further cleanup
bekauz Mar 6, 2025
c7b0f1d
Merge branch 'main' into benskey/strategist-e2e
bekauz Mar 18, 2025
8f4bc1c
clippyfmt
bekauz Mar 18, 2025
643fe2d
update hyperlane config for apple silicon; cleanup vault and mine evm…
bekauz Mar 18, 2025
c2ff556
setup noble minter
bekauz Mar 18, 2025
5d1c9d4
Merge branch 'main' into benskey/strategist-e2e
bekauz Mar 18, 2025
c9d12af
integrate interchain account & ica ibc transfer library; transferring…
bekauz Mar 19, 2025
d38568f
move vault example into own mod; split away program definition into s…
bekauz Mar 19, 2025
b8a477b
clippyfmt
bekauz Mar 19, 2025
0777762
move neutron vault side logic to separate file
bekauz Mar 19, 2025
cfc9045
move eth vault side logic to separate file
bekauz Mar 19, 2025
b9a721b
move ica related logic to neutron mod
bekauz Mar 19, 2025
46ca07e
move noble logic to separate mod
bekauz Mar 19, 2025
4bd6972
simplify astroport setup
bekauz Mar 19, 2025
c858628
wip: factoring out manager
bekauz Mar 19, 2025
0d84073
add neutron ibc transfer lib
bekauz Mar 19, 2025
cbc07b7
move libraries setup to separate call
bekauz Mar 19, 2025
f6b2f8b
strategist mod; pulling funds from noble inbound ica
bekauz Mar 19, 2025
5c6d35d
add strategist lp entry
bekauz Mar 19, 2025
904b685
add strategist exit lp helper
bekauz Mar 19, 2025
297a4c4
strategist swaps counterparty denom into usdc
bekauz Mar 19, 2025
e1ee64a
routing usdc out of neutron
bekauz Mar 19, 2025
985a9ea
clippyfmt
bekauz Mar 19, 2025
b36f380
add strategist cctp outbound forwarding
bekauz Mar 20, 2025
c8a8d2a
cleanup
bekauz Mar 25, 2025
251f748
clippy
bekauz Mar 25, 2025
52cae4f
merge main
bekauz Mar 25, 2025
bc61e9d
update to proxy vault impl
bekauz Mar 25, 2025
6980db6
integrate vault proxy
bekauz Mar 25, 2025
fa392e7
clippyfmt rerun
bekauz Mar 25, 2025
0d2d9fc
merge main
bekauz Mar 27, 2025
88dfa57
fix merge
bekauz Mar 27, 2025
60298d7
add utils mod to eth_vault
bekauz Mar 28, 2025
239a30c
instantiate cctp transfer lib; wip: transfer
bekauz Mar 28, 2025
ec38cc5
update mock token messenger to take the tokens from deposit addr and …
bekauz Mar 28, 2025
84bf58d
cctp transfer out of eth works
bekauz Mar 28, 2025
2e7ce02
update netting
bekauz Mar 28, 2025
c0f46bf
evm vault nets, cctp forwards, allows user withdrawal
bekauz Mar 31, 2025
907a388
cleanup
bekauz Mar 31, 2025
0c5679f
solidity fmt
bekauz Mar 31, 2025
ee3773d
picking up mock token messenger events; decoding noble destination ad…
bekauz Mar 31, 2025
7072662
minting usdc on noble based on evm logs
bekauz Mar 31, 2025
773f5b7
picking up noble cctp events
bekauz Apr 1, 2025
ab82a27
minting erc20 on evm based on noble cctp burn events
bekauz Apr 1, 2025
7477d96
move mock cctp relayer to utils
bekauz Apr 1, 2025
b721364
cleanup mock relayer setup
bekauz Apr 1, 2025
735e043
merge main
bekauz Apr 1, 2025
8383552
reorg vault main() fn; clean up cctp relayer setup
bekauz Apr 2, 2025
566c2d1
cleanup final e2e assertions
bekauz Apr 2, 2025
bccfdad
fmt
bekauz Apr 2, 2025
9ee8440
generalize local-ic logs parser
bekauz Apr 3, 2025
55ef71b
cleanup cctp relayer setup
bekauz Apr 3, 2025
e31bc31
drop arc<mutex<>> from relayer state
bekauz Apr 3, 2025
d630e15
toml fmt
bekauz Apr 3, 2025
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
8 changes: 5 additions & 3 deletions e2e/examples/eth_vault/neutron.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@ use valence_chain_client_utils::neutron::NeutronClient;
use valence_e2e::{
async_run,
utils::{
parse::get_grpc_address_and_port_from_logs, ADMIN_MNEMONIC, ASTROPORT_PATH, GAS_FLAGS,
LOCAL_CODE_ID_CACHE_PATH_NEUTRON,
parse::{get_chain_field_from_local_ic_log, get_grpc_address_and_port_from_url},
ADMIN_MNEMONIC, ASTROPORT_PATH, GAS_FLAGS, LOCAL_CODE_ID_CACHE_PATH_NEUTRON,
},
};

Expand Down Expand Up @@ -276,7 +276,9 @@ pub fn setup_astroport_cl_pool(
}

pub fn get_neutron_client(rt: &Runtime) -> Result<NeutronClient, Box<dyn Error>> {
let (grpc_url, grpc_port) = get_grpc_address_and_port_from_logs(NEUTRON_CHAIN_ID)?;
let grpc_addr = get_chain_field_from_local_ic_log(NEUTRON_CHAIN_ID, "grpc_address")?;
let (grpc_url, grpc_port) = get_grpc_address_and_port_from_url(&grpc_addr)?;

let neutron_client = async_run!(
rt,
NeutronClient::new(
Expand Down
7 changes: 4 additions & 3 deletions e2e/examples/eth_vault/noble.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,14 @@ use valence_chain_client_utils::{cosmos::base_client::BaseClient, noble::NobleCl
use valence_e2e::{
async_run,
utils::{
parse::get_grpc_address_and_port_from_logs, ADMIN_MNEMONIC, NOBLE_CHAIN_ADMIN_ADDR,
NOBLE_CHAIN_DENOM, NOBLE_CHAIN_ID, UUSDC_DENOM,
parse::{get_chain_field_from_local_ic_log, get_grpc_address_and_port_from_url},
ADMIN_MNEMONIC, NOBLE_CHAIN_ADMIN_ADDR, NOBLE_CHAIN_DENOM, NOBLE_CHAIN_ID, UUSDC_DENOM,
},
};

pub fn get_client(rt: &Runtime) -> Result<NobleClient, Box<dyn Error>> {
let (grpc_url, grpc_port) = get_grpc_address_and_port_from_logs(NOBLE_CHAIN_ID)?;
let grpc_addr = get_chain_field_from_local_ic_log(NOBLE_CHAIN_ID, "grpc_address")?;
let (grpc_url, grpc_port) = get_grpc_address_and_port_from_url(&grpc_addr)?;

let noble_client = async_run!(
rt,
Expand Down
4 changes: 2 additions & 2 deletions e2e/examples/eth_vault/program.rs
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ pub fn setup_neutron_libraries(
processor: &str,
amount: u128,
usdc_on_neutron: &str,
eth_admin_addr: String,
eth_withdraw_acc: String,
) -> Result<NeutronProgramLibraries, Box<dyn Error>> {
let astro_cl_pool_asset_data = AssetData {
asset1: NEUTRON_CHAIN_DENOM.to_string(),
Expand Down Expand Up @@ -172,7 +172,7 @@ pub fn setup_neutron_libraries(
.noble_outbound_ica
.library_account
.clone(),
eth_admin_addr,
eth_withdraw_acc,
processor.to_string(),
amount,
)?;
Expand Down
101 changes: 62 additions & 39 deletions e2e/examples/eth_vault/vault.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ use valence_e2e::{
ICA_CCTP_TRANSFER_NAME, ICA_IBC_TRANSFER_NAME, INTERCHAIN_ACCOUNT_NAME,
NEUTRON_IBC_TRANSFER_NAME,
},
mock_cctp_relayer,
solidity_contracts::ValenceVault,
vault::{self, setup_cctp_transfer, setup_valence_vault},
DEFAULT_ANVIL_RPC_ENDPOINT, LOCAL_CODE_ID_CACHE_PATH_NEUTRON, LOGS_FILE_PATH,
Expand Down Expand Up @@ -59,6 +60,7 @@ fn main() -> Result<(), Box<dyn Error>> {
async_run!(rt, ethereum_utils::set_up_anvil_container().await)?;

let eth = EthClient::new(DEFAULT_ANVIL_RPC_ENDPOINT)?;

let eth_client = valence_chain_client_utils::ethereum::EthereumClient::new(
DEFAULT_ANVIL_RPC_ENDPOINT,
"test test test test test test test test test test test junk",
Expand All @@ -70,6 +72,15 @@ fn main() -> Result<(), Box<dyn Error>> {
let eth_admin_acc = eth_accounts[0];
let _eth_user_acc = eth_accounts[2];

// create two Valence Base Accounts on Ethereum to test the processor with libraries (in this case the forwarder)
let deposit_acc_addr =
ethereum_utils::valence_account::setup_valence_account(&rt, &eth_client, eth_admin_acc)?;
let withdraw_acc_addr =
ethereum_utils::valence_account::setup_valence_account(&rt, &eth_client, eth_admin_acc)?;
// set up the cctp messenger
let mock_cctp_messenger_address =
valence_e2e::utils::vault::setup_mock_token_messenger(&rt, &eth_client)?;

info!("Setting up Neutron side flow...");

let mut test_ctx = TestContextBuilder::default()
Expand Down Expand Up @@ -178,7 +189,7 @@ fn main() -> Result<(), Box<dyn Error>> {
&neutron_processor_address,
amount_to_transfer,
&uusdc_on_neutron_denom,
eth_admin_acc.to_string(),
withdraw_acc_addr.to_string(),
)?;

noble::mint_usdc_to_addr(
Expand Down Expand Up @@ -225,6 +236,21 @@ fn main() -> Result<(), Box<dyn Error>> {
&pool_addr,
)?;

let usdc_token_address =
ethereum_utils::mock_erc20::setup_deposit_erc20(&rt, &eth_client, "MockUSDC", "USDC")?;

info!("Starting CCTP mock relayer between Noble and Ethereum...");
let mock_cctp_relayer = mock_cctp_relayer::MockCctpRelayer::new(
&rt,
mock_cctp_messenger_address,
usdc_token_address,
)?;
let rly_rt = tokio::runtime::Runtime::new().unwrap();

let _join_handle = rly_rt.spawn(mock_cctp_relayer.start());
info!("main sleep for 3...");
sleep(Duration::from_secs(3));

strategist::route_usdc_to_noble(
&rt,
&neutron_client,
Expand All @@ -233,8 +259,6 @@ fn main() -> Result<(), Box<dyn Error>> {
&uusdc_on_neutron_denom,
)?;

sleep(Duration::from_secs(5));

let noble_outbound_ica_usdc_bal = async_run!(
&rt,
noble_client
Expand All @@ -255,15 +279,6 @@ fn main() -> Result<(), Box<dyn Error>> {
&neutron_program_libraries,
)?;

// create two Valence Base Accounts on Ethereum to test the processor with libraries (in this case the forwarder)
let deposit_acc_addr =
ethereum_utils::valence_account::setup_valence_account(&rt, &eth_client, eth_admin_acc)?;
let withdraw_acc_addr =
ethereum_utils::valence_account::setup_valence_account(&rt, &eth_client, eth_admin_acc)?;

let usdc_token_address =
ethereum_utils::mock_erc20::setup_deposit_erc20(&rt, &eth_client, "MockUSDC", "USDC")?;

info!("Setting up Lite Processor on Ethereum");
let _lite_processor_address = ethereum_utils::lite_processor::setup_lite_processor(
&rt,
Expand All @@ -276,9 +291,6 @@ fn main() -> Result<(), Box<dyn Error>> {
authorization_contract_address.as_str(),
)?;

let mock_cctp_messenger_address =
valence_e2e::utils::vault::setup_mock_token_messenger(&rt, &eth_client)?;

info!("Setting up Valence Vault...");
let vault_address = setup_valence_vault(
&rt,
Expand All @@ -293,7 +305,10 @@ fn main() -> Result<(), Box<dyn Error>> {
let cctp_forwarder = setup_cctp_transfer(
&rt,
&eth_client,
neutron_program_accounts.noble_inbound_ica.remote_addr,
neutron_program_accounts
.noble_inbound_ica
.remote_addr
.to_string(),
deposit_acc_addr,
eth_admin_acc,
eth_admin_acc,
Expand Down Expand Up @@ -497,52 +512,60 @@ fn main() -> Result<(), Box<dyn Error>> {

info!("user1 completing withdraw request...");
vault::complete_withdraw_request(*valence_vault.address(), &rt, &eth_client, eth_user_acc)?;
let withdraw_acc_usdc_bal = ethereum_utils::mock_erc20::query_balance(
&rt,
&eth_client,
usdc_token_address,
withdraw_acc_addr,
);

let user1_usdc_bal = ethereum_utils::mock_erc20::query_balance(
&rt,
&eth_client,
usdc_token_address,
eth_user_acc,
);
assert_eq!(withdraw_acc_usdc_bal, U256::from(50)); // fees leftover
assert_eq!(user1_usdc_bal, user_1_deposit_amount - U256::from(50));

let deposit_acc_usdc_bal = ethereum_utils::mock_erc20::query_balance(
let pre_cctp_deposit_acc_usdc_bal = ethereum_utils::mock_erc20::query_balance(
&rt,
&eth_client,
usdc_token_address,
deposit_acc_addr,
);
info!("deposit account usdc balance: {deposit_acc_usdc_bal}");
assert_ne!(deposit_acc_usdc_bal, U256::ZERO);
let pre_cctp_neutron_ica_bal = async_run!(
&rt,
noble_client
.query_balance(
&neutron_program_accounts.noble_inbound_ica.remote_addr,
UUSDC_DENOM
)
.await
.unwrap()
);

assert_eq!(pre_cctp_neutron_ica_bal, 0);
assert_eq!(pre_cctp_deposit_acc_usdc_bal, U256::from(1000000));

info!("strategist cctp routing eth->ntrn...");
strategist::cctp_route_usdc_from_eth(&rt, &eth_client, cctp_forwarder, eth_admin_acc)?;

let deposit_acc_usdc_bal = ethereum_utils::mock_erc20::query_balance(
info!("[MAIN] sleeping for 5 to give cctp time to relay");
sleep(Duration::from_secs(5));

let post_cctp_deposit_acc_usdc_bal = ethereum_utils::mock_erc20::query_balance(
&rt,
&eth_client,
usdc_token_address,
deposit_acc_addr,
);
assert_eq!(deposit_acc_usdc_bal, U256::ZERO);

log_eth_balances(
&eth_client,
let post_cctp_neutron_ica_bal = async_run!(
&rt,
valence_vault.address(),
&usdc_token_address,
&deposit_acc_addr,
&withdraw_acc_addr,
&eth_user_acc,
&eth_user2_acc,
)
.unwrap();
noble_client
.query_balance(
&neutron_program_accounts.noble_inbound_ica.remote_addr,
UUSDC_DENOM
)
.await
.unwrap()
);

assert_eq!(post_cctp_neutron_ica_bal, 1000000);
assert_eq!(post_cctp_deposit_acc_usdc_bal, U256::ZERO);

Ok(())
}
11 changes: 8 additions & 3 deletions e2e/examples/ica_libraries.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,9 @@ use valence_chain_client_utils::{
cosmos::base_client::BaseClient, neutron::NeutronClient, noble::NobleClient,
};
use valence_e2e::utils::{
ibc::poll_for_ica_state, parse::get_grpc_address_and_port_from_logs, relayer::restart_relayer,
ibc::poll_for_ica_state,
parse::{get_chain_field_from_local_ic_log, get_grpc_address_and_port_from_url},
relayer::restart_relayer,
ADMIN_MNEMONIC, GAS_FLAGS, LOGS_FILE_PATH, NOBLE_CHAIN_ADMIN_ADDR, NOBLE_CHAIN_DENOM,
NOBLE_CHAIN_ID, NOBLE_CHAIN_NAME, NOBLE_CHAIN_PREFIX, UUSDC_DENOM, VALENCE_ARTIFACTS_PATH,
};
Expand Down Expand Up @@ -42,7 +44,8 @@ fn main() -> Result<(), Box<dyn Error>> {

let rt = tokio::runtime::Runtime::new()?;
// Get the grpc url and the port for the noble chain
let (grpc_url, grpc_port) = get_grpc_address_and_port_from_logs(NOBLE_CHAIN_ID)?;
let grpc_addr = get_chain_field_from_local_ic_log(NOBLE_CHAIN_ID, "grpc_address")?;
let (grpc_url, grpc_port) = get_grpc_address_and_port_from_url(&grpc_addr)?;

let noble_client = rt.block_on(async {
NobleClient::new(
Expand Down Expand Up @@ -399,7 +402,9 @@ fn main() -> Result<(), Box<dyn Error>> {
.dest(NEUTRON_CHAIN_NAME)
.get();

let (grpc_url, grpc_port) = get_grpc_address_and_port_from_logs(NEUTRON_CHAIN_ID)?;
let grpc_addr = get_chain_field_from_local_ic_log(NEUTRON_CHAIN_ID, "grpc_address")?;
let (grpc_url, grpc_port) = get_grpc_address_and_port_from_url(&grpc_addr)?;

let neutron_client = rt.block_on(async {
NeutronClient::new(
&grpc_url,
Expand Down
16 changes: 8 additions & 8 deletions e2e/hyperlane/config/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@
"displayName": "Ethereum",
"domainId": 1,
"gasCurrencyCoinGeckoId": "ethereum",
"interchainGasPaymaster": "0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0",
"mailbox": "0x5FbDB2315678afecb367f032d93F642f64180aa3",
"merkleTreeHook": "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512",
"interchainGasPaymaster": "0x5FC8d32690cc91D4c39d9d3abcBD16989F875707",
"mailbox": "0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9",
"merkleTreeHook": "0xDc64a140Aa3E981100a9becA4E685f962f0cF6C9",
"name": "ethereum",
"nativeToken": {
"decimals": 18,
Expand All @@ -30,7 +30,7 @@
}
],
"technicalStack": "other",
"validatorAnnounce": "0xDc64a140Aa3E981100a9becA4E685f962f0cF6C9"
"validatorAnnounce": "0xa513E6E4b8f2a923D98304ec87F64353C4D5C853"
},
"neutron": {
"bech32Prefix": "neutron",
Expand Down Expand Up @@ -58,10 +58,10 @@
"http": "http://localneutron-1-val-0-neutronic:9090"
}
],
"interchainGasPaymaster": "0x2943ecc95e93154658ca301d3babfd18b076cc9e64a80ac79f3dfb352871aaf4",
"interchainGasPaymaster": "0x0f7e1e0359e698e16e7b257faf5f5108ceec0dee31ea4ea1c8d187af74d38d9e",
"isTestnet": false,
"mailbox": "0x9ab0f7fe807c59289077acdb20d10f5cfe54d53200242eb9a83250cd6659b0cd",
"merkleTreeHook": "0xbb0739110d17f8230076322931c82be430a126d8513f56c75fda077e99459d24",
"mailbox": "0x0371514a3b98682a98a585938bad276fe11b799a954199f1cd682f9228a73f2d",
"merkleTreeHook": "0x69330695e569b03ec9184a18939eeecb0f50bd430240ea2420363440aece1805",
"name": "neutron",
"nativeToken": {
"decimals": 6,
Expand All @@ -87,7 +87,7 @@
},
"slip44": 118,
"technicalStack": "other",
"validatorAnnounce": "0xb4703662fbe03bd9e67d65a31c8e20ebc11bd310621279863f0712ba77d98c78"
"validatorAnnounce": "0xb3ae3ce5b1a69d0d7cb49629e82098bca96335feb19aef3e8924550c7a9cdf12"
}
},
"defaultRpcConsensusType": "fallback"
Expand Down
Loading
Loading