Skip to content

Commit

Permalink
Minor improvements.
Browse files Browse the repository at this point in the history
Fix build and tests
  • Loading branch information
syan095 committed Feb 19, 2025
1 parent dbfa16e commit 3cfe705
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 47 deletions.
18 changes: 2 additions & 16 deletions state-chain/cf-integration-tests/src/solana.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,7 @@ use cf_chains::{
api::{SolanaApi, SolanaEnvironment, SolanaTransactionBuildingError},
sol_tx_core::sol_test_values,
transaction_builder::SolanaTransactionBuilder,
SolAddress, SolAddressLookupTableAccount, SolApiEnvironment, SolCcmAccounts, SolCcmAddress,
SolHash, SolPubkey, SolanaCrypto,
SolAddress, SolCcmAccounts, SolCcmAddress, SolHash, SolPubkey, SolanaCrypto,
},
CcmChannelMetadata, CcmDepositMetadata, Chain, ChannelRefundParameters,
ExecutexSwapAndCallError, ForeignChainAddress, RequiresSignatureRefresh, SetAggKeyWithAggKey,
Expand Down Expand Up @@ -76,20 +75,7 @@ type SolanaElectionVote = BoundedBTreeMap<

fn setup_sol_environments() {
// Environment::SolanaApiEnvironment
pallet_cf_environment::SolanaApiEnvironment::<Runtime>::set(SolApiEnvironment {
vault_program: sol_test_values::VAULT_PROGRAM,
vault_program_data_account: sol_test_values::VAULT_PROGRAM_DATA_ACCOUNT,
token_vault_pda_account: sol_test_values::TOKEN_VAULT_PDA_ACCOUNT,
usdc_token_mint_pubkey: sol_test_values::USDC_TOKEN_MINT_PUB_KEY,
usdc_token_vault_ata: sol_test_values::USDC_TOKEN_VAULT_ASSOCIATED_TOKEN_ACCOUNT,
swap_endpoint_program: sol_test_values::SWAP_ENDPOINT_PROGRAM,
swap_endpoint_program_data_account: sol_test_values::SWAP_ENDPOINT_PROGRAM_DATA_ACCOUNT,
alt_manager_program: sol_test_values::ALT_MANAGER_PROGRAM,
address_lookup_table_account: SolAddressLookupTableAccount {
key: sol_test_values::ADDRESS_LOOKUP_TABLE_ACCOUNT.into(),
addresses: vec![],
},
});
pallet_cf_environment::SolanaApiEnvironment::<Runtime>::set(sol_test_values::api_env());

// Environment::AvailableDurableNonces
pallet_cf_environment::SolanaAvailableNonceAccounts::<Runtime>::set(
Expand Down
16 changes: 6 additions & 10 deletions state-chain/chains/src/sol/api.rs
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ pub trait SolanaEnvironment:
.ok_or(SolanaTransactionBuildingError::NoNonceAccountsSet)
}

/// Get any relevant Address lookup tables from the Environment. Those are user-defined.
/// Get any user-defined Address lookup tables from the Environment.
fn get_address_lookup_tables(id: SwapRequestId) -> Vec<SolAddressLookupTableAccount> {
Self::lookup(SolanaAddressLookupTables(id)).unwrap_or_default()
}
Expand Down Expand Up @@ -236,7 +236,6 @@ impl<Environment: SolanaEnvironment> SolanaApi<Environment> {
let sol_api_environment = Environment::api_environment()?;
let compute_price = Environment::compute_price()?;
let durable_nonce = Environment::nonce_account()?;
let address_lookup_tables = Environment::get_address_lookup_tables(None);

// Build the transaction
let transaction = SolanaTransactionBuilder::fetch_from(
Expand All @@ -245,7 +244,6 @@ impl<Environment: SolanaEnvironment> SolanaApi<Environment> {
agg_key,
durable_nonce,
compute_price,
address_lookup_tables,
)?;

Ok(Self {
Expand All @@ -263,7 +261,6 @@ impl<Environment: SolanaEnvironment> SolanaApi<Environment> {
let agg_key = Environment::current_agg_key()?;
let sol_api_environment = Environment::api_environment()?;
let compute_price = Environment::compute_price()?;
let address_lookup_tables = Environment::get_address_lookup_tables(None);

transfer_params
.into_iter()
Expand Down Expand Up @@ -296,7 +293,7 @@ impl<Environment: SolanaEnvironment> SolanaApi<Environment> {
durable_nonce,
compute_price,
SOL_USDC_DECIMAL,
address_lookup_tables.clone(),
vec![sol_api_environment.address_lookup_table_account.clone()],
)
},
}?;
Expand Down Expand Up @@ -399,11 +396,11 @@ impl<Environment: SolanaEnvironment> SolanaApi<Environment> {

let sol_api_environment = Environment::api_environment()?;
let agg_key = Environment::current_agg_key()?;
// TODO roy: Coordinate with Ramiz on the interface for getting ALTS
let user_address_lookup_tables = Environment::get_address_lookup_tables(swap_request_id);

// Get the Address lookup tables. Chainflip's ALT is proceeded with the User's.
// TODO roy: Coordinate with Ramiz on the interface for getting ALTS
let mut address_lookup_tables = vec![sol_api_environment.address_lookup_table_account];
address_lookup_tables.extend(user_address_lookup_tables);
address_lookup_tables.extend(Environment::get_address_lookup_tables(swap_request_id));

// Ensure the CCM parameters do not contain blacklisted accounts.
check_ccm_for_blacklisted_accounts(
Expand Down Expand Up @@ -722,7 +719,6 @@ impl<Environment: SolanaEnvironment> SetGovKeyWithAggKey<SolanaCrypto> for Solan
let sol_api_environment = Environment::api_environment().map_err(|_e| ())?;
let compute_price = Environment::compute_price().map_err(|_e| ())?;
let durable_nonce = Environment::nonce_account().map_err(|_e| ())?;
let address_lookup_tables = Environment::get_address_lookup_tables(None);

// Build the transaction
let transaction = SolanaTransactionBuilder::set_gov_key_with_agg_key(
Expand All @@ -732,7 +728,7 @@ impl<Environment: SolanaEnvironment> SetGovKeyWithAggKey<SolanaCrypto> for Solan
agg_key,
durable_nonce,
compute_price,
address_lookup_tables,
vec![sol_api_environment.address_lookup_table_account],
)
.map_err(|e| {
// SetGovKeyWithAggKey call building NOT transactional - meaning when this fails,
Expand Down
10 changes: 2 additions & 8 deletions state-chain/chains/src/sol/sol_tx_core.rs
Original file line number Diff line number Diff line change
Expand Up @@ -253,10 +253,7 @@ pub mod sol_test_values {
swap_endpoint_program: SWAP_ENDPOINT_PROGRAM,
swap_endpoint_program_data_account: SWAP_ENDPOINT_PROGRAM_DATA_ACCOUNT,
alt_manager_program: ALT_MANAGER_PROGRAM,
address_lookup_table_account: SolAddressLookupTableAccount {
key: ADDRESS_LOOKUP_TABLE_ACCOUNT.into(),
addresses: vec![],
},
address_lookup_table_account: user_alt(),
}
}

Expand Down Expand Up @@ -340,10 +337,7 @@ pub mod sol_test_values {
}

pub fn user_alt() -> SolAddressLookupTableAccount {
SolAddressLookupTableAccount {
key: const_address("3VBLeVu7rZciyk19M9V7VbHBM2uFm9YbnKKPB33mGRW8").into(),
addresses: vec![TRANSFER_TO_ACCOUNT.into()],
}
SolAddressLookupTableAccount { key: ADDRESS_LOOKUP_TABLE_ACCOUNT.into(), addresses: vec![] }
}

#[track_caller]
Expand Down
19 changes: 6 additions & 13 deletions state-chain/chains/src/sol/transaction_builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,6 @@ impl SolanaTransactionBuilder {
agg_key: SolAddress,
durable_nonce: DurableNonceAndAccount,
compute_price: SolAmount,
address_lookup_tables: Vec<SolAddressLookupTableAccount>,
) -> Result<SolVersionedTransaction, SolanaTransactionBuildingError> {
let mut compute_limit: SolComputeLimit = BASE_COMPUTE_UNITS_PER_TX;
let instructions = fetch_params
Expand Down Expand Up @@ -191,7 +190,7 @@ impl SolanaTransactionBuilder {
agg_key.into(),
compute_price,
compute_limit_with_buffer(compute_limit),
address_lookup_tables,
vec![sol_api_environment.address_lookup_table_account],
)
}

Expand Down Expand Up @@ -614,12 +613,11 @@ pub mod test {
agg_key(),
durable_nonce(),
compute_price(),
vec![chainflip_alt()],
)
.unwrap();

// Serialized tx built in `create_fetch_native` test
let expected_serialized_tx = hex_literal::hex!("014c9e86bf4a01223aaad71560605c3bf8925aebaec28dad02ae7008290cf3682e649ab82d087c387d5ae72d362852737ce5802d48b17e054500bf8ad40787890e8001000407f79d5e026f12edc6443a534b2cdd5072233989b415d7596573e743f3e5b386fb3a4539fbb757256442c16343f639b15db95c39a6d35721439f7f94f5c8776b7bfd35d0bf8686de2e369c3d97a8033b31e6bc33518629f59314bc3d9050956c8d00000000000000000000000000000000000000000000000000000000000000000306466fe5211732ffecadba72c39be7bc8ce5bbc5f7126b2c439b3a4000000006a7d517192c568ee08a845f73d29788cf035c3145b21ab344d8062ea940000072b5d2051d300b10b74314b7e25ace9998ca66eb2c7fbc10ef130dd67028293cc27e9074fac5e8d36cf04f94a0606fdd8ddbb420e99a489c7915ce5699e489000403030705000404000000040009038096980000000000040005021f95000006050800020103158e24658f6c59298c080000000b0c0d3700000000fc013001afd71da9456a977233960b08eba77d2e3690b8c7259637c8fb8f82cf58a101090102").to_vec();
let expected_serialized_tx = hex_literal::hex!("0183f284c4160d449a41f0a7b30c3710a7e1876d514ef6d87b89a35ae203d50c6928b1dcd2f821496ac4027bfd84e07f921a912537e3d3f3cd4530935b0cae36028001000509f79d5e026f12edc6443a534b2cdd5072233989b415d7596573e743f3e5b386fb17eb2b10d3377bda2bc7bea65bec6b8372f4fc3463ec2cd6f9fde4b2c633d1923a4539fbb757256442c16343f639b15db95c39a6d35721439f7f94f5c8776b7bfd35d0bf8686de2e369c3d97a8033b31e6bc33518629f59314bc3d9050956c8d00000000000000000000000000000000000000000000000000000000000000000306466fe5211732ffecadba72c39be7bc8ce5bbc5f7126b2c439b3a4000000006a7d517192c568ee08a845f73d29788cf035c3145b21ab344d8062ea940000072b5d2051d300b10b74314b7e25ace9998ca66eb2c7fbc10ef130dd67028293ca1e031c8bc9bec3b610cf7b36eb3bf3aa40237c9e5be2c7893878578439eb00bc27e9074fac5e8d36cf04f94a0606fdd8ddbb420e99a489c7915ce5699e489000404030106000404000000050009038096980000000000050005021f95000007050800030204158e24658f6c59298c080000000b0c0d3700000000fc00").to_vec();

test_constructed_transaction(transaction, expected_serialized_tx);
}
Expand All @@ -637,12 +635,11 @@ pub mod test {
agg_key(),
durable_nonce(),
compute_price(),
vec![chainflip_alt()],
)
.unwrap();

// Serialized tx built in `create_fetch_native_in_batch` test
let expected_serialized_tx = hex_literal::hex!("012a95015c2c1a08af3013fd2575a7f61bf3a4faca1a010f7ec29f017ff10b52c49b9b8113e1adc89a9248c9537bff2eb3b2ca5bfafe9abbe4fbea753fccc139008001000409f79d5e026f12edc6443a534b2cdd5072233989b415d7596573e743f3e5b386fb38861d2f0bf5cd80031b701a6c25d13b4c812dd92f9d6301fafd9a58fb9e438646cd507258c10454d484e64ba59d3e7570658001c5f854b6b3ebb57be90e7a708d9871ed5fb2ee05765af23b7cabcc0d6b08ed370bb9f616a0d4dea40a25f870b5b9d633289c8fd72fb05f33349bf4cc44e82add5d865311ae346d7c9a67b7dd00000000000000000000000000000000000000000000000000000000000000000306466fe5211732ffecadba72c39be7bc8ce5bbc5f7126b2c439b3a4000000006a7d517192c568ee08a845f73d29788cf035c3145b21ab344d8062ea940000072b5d2051d300b10b74314b7e25ace9998ca66eb2c7fbc10ef130dd67028293cc27e9074fac5e8d36cf04f94a0606fdd8ddbb420e99a489c7915ce5699e48900050503090700040400000006000903809698000000000006000502c34a010008050a00020105158e24658f6c59298c080000000000000000000000ff08050a00030405158e24658f6c59298c080000000100000000000000ff013001afd71da9456a977233960b08eba77d2e3690b8c7259637c8fb8f82cf58a101090102").to_vec();
let expected_serialized_tx = hex_literal::hex!("01f6a40d02eb553db89f9be4a37bfccd9c9a18ea6687c6e092cec5935863f8b4416c2a290cc474be118a404dc3035866e714dd70d4c77a6549b59a21a6bdb6bf06800100050bf79d5e026f12edc6443a534b2cdd5072233989b415d7596573e743f3e5b386fb17eb2b10d3377bda2bc7bea65bec6b8372f4fc3463ec2cd6f9fde4b2c633d19238861d2f0bf5cd80031b701a6c25d13b4c812dd92f9d6301fafd9a58fb9e438646cd507258c10454d484e64ba59d3e7570658001c5f854b6b3ebb57be90e7a708d9871ed5fb2ee05765af23b7cabcc0d6b08ed370bb9f616a0d4dea40a25f870b5b9d633289c8fd72fb05f33349bf4cc44e82add5d865311ae346d7c9a67b7dd00000000000000000000000000000000000000000000000000000000000000000306466fe5211732ffecadba72c39be7bc8ce5bbc5f7126b2c439b3a4000000006a7d517192c568ee08a845f73d29788cf035c3145b21ab344d8062ea940000072b5d2051d300b10b74314b7e25ace9998ca66eb2c7fbc10ef130dd67028293ca1e031c8bc9bec3b610cf7b36eb3bf3aa40237c9e5be2c7893878578439eb00bc27e9074fac5e8d36cf04f94a0606fdd8ddbb420e99a489c7915ce5699e48900050603010800040400000007000903809698000000000007000502c34a010009050a00030206158e24658f6c59298c080000000000000000000000ff09050a00040506158e24658f6c59298c080000000100000000000000ff00").to_vec();

test_constructed_transaction(transaction, expected_serialized_tx);
}
Expand All @@ -656,12 +653,11 @@ pub mod test {
agg_key(),
durable_nonce(),
compute_price(),
vec![chainflip_alt()],
)
.unwrap();

// Serialized tx built in `create_fetch_tokens` test
let expected_serialized_tx = hex_literal::hex!("0171e6c4881666cb11c8ab4402a1b0b5728c5a18acd668b0ffb524d913ff5bb717597564d05880a8e693ea3c6fd329750e88a0b6de6f97fa62a0c428b020cbea0e8001000609f79d5e026f12edc6443a534b2cdd5072233989b415d7596573e743f3e5b386fb42ff6863b52c3f8faf95739e6541bda5d0ac593f00c6c07d9ab37096bf26d910ae85f2fb6289c70bfe37df150dddb17dd84f403fd0b1aa1bfee85795159de21f00000000000000000000000000000000000000000000000000000000000000000306466fe5211732ffecadba72c39be7bc8ce5bbc5f7126b2c439b3a4000000006a7d517192c568ee08a845f73d29788cf035c3145b21ab344d8062ea940000006ddf6e1d765a193d9cbe146ceeb79ac1cb485ed5f5b37913a8cf5857eff00a946cd507258c10454d484e64ba59d3e7570658001c5f854b6b3ebb57be90e7a7072b5d2051d300b10b74314b7e25ace9998ca66eb2c7fbc10ef130dd67028293cc27e9074fac5e8d36cf04f94a0606fdd8ddbb420e99a489c7915ce5699e489000403030905000404000000040009038096980000000000040005024f0a010008090c0007010a0b06020316494710642cb0c646080000000000000000000000ff06013001afd71da9456a977233960b08eba77d2e3690b8c7259637c8fb8f82cf58a1020905020302").to_vec();
let expected_serialized_tx = hex_literal::hex!("013f38d2f1a1669aabbc375de98a7030310f36e4482732ad92adc2fff31c1e63cf5713c92dd41f56b11fe2edf0679f3e095d88a5bb96055c1c84d5bfe0779e3606800100080df79d5e026f12edc6443a534b2cdd5072233989b415d7596573e743f3e5b386fb17eb2b10d3377bda2bc7bea65bec6b8372f4fc3463ec2cd6f9fde4b2c633d19242ff6863b52c3f8faf95739e6541bda5d0ac593f00c6c07d9ab37096bf26d910ae85f2fb6289c70bfe37df150dddb17dd84f403fd0b1aa1bfee85795159de21fe91372b3d301c202a633da0a92365a736e462131aecfad1fac47322cf8863ada00000000000000000000000000000000000000000000000000000000000000000306466fe5211732ffecadba72c39be7bc8ce5bbc5f7126b2c439b3a4000000006a7d517192c568ee08a845f73d29788cf035c3145b21ab344d8062ea940000006ddf6e1d765a193d9cbe146ceeb79ac1cb485ed5f5b37913a8cf5857eff00a90fb9ba52b1f09445f1e3a7508d59f0797923acf744fbe2da303fb06da859ee8746cd507258c10454d484e64ba59d3e7570658001c5f854b6b3ebb57be90e7a7072b5d2051d300b10b74314b7e25ace9998ca66eb2c7fbc10ef130dd67028293ca1e031c8bc9bec3b610cf7b36eb3bf3aa40237c9e5be2c7893878578439eb00bc27e9074fac5e8d36cf04f94a0606fdd8ddbb420e99a489c7915ce5699e489000405030107000404000000060009038096980000000000060005024f0a01000b090c000a02040908030516494710642cb0c646080000000000000000000000ff0600").to_vec();

test_constructed_transaction(transaction, expected_serialized_tx);
}
Expand All @@ -678,12 +674,11 @@ pub mod test {
agg_key(),
durable_nonce(),
compute_price(),
vec![chainflip_alt()],
)
.unwrap();

// Serialized tx built in `create_batch_fetch` test
let expected_serialized_tx = hex_literal::hex!("015eab79254444f6f235494a180b8c0c11fe4ee73c85656eda36b4dccf717ace5d0613540e9d3febb4b439f86b45bfdb26ba4810e17d224efd8ad13c2f34f09f0a800100070ef79d5e026f12edc6443a534b2cdd5072233989b415d7596573e743f3e5b386fb1ad0968d57ee79348476716f9b2cd44ec4284b8f52c36648d560949e41589a5540de1c0451cccb6edd1fda9b4a48c282b279350b55a7a9716800cc0132b6f0b042ff6863b52c3f8faf95739e6541bda5d0ac593f00c6c07d9ab37096bf26d910a140fd3d05766f0087d57bf99df05731e894392ffcc8e8d7e960ba73c09824aaae85f2fb6289c70bfe37df150dddb17dd84f403fd0b1aa1bfee85795159de21fb4baefcd4965beb1c71311a2ffe76419d4b8f8d35fbc4cf514b1bd02da2df2e300000000000000000000000000000000000000000000000000000000000000000306466fe5211732ffecadba72c39be7bc8ce5bbc5f7126b2c439b3a4000000006a7d517192c568ee08a845f73d29788cf035c3145b21ab344d8062ea940000006ddf6e1d765a193d9cbe146ceeb79ac1cb485ed5f5b37913a8cf5857eff00a946cd507258c10454d484e64ba59d3e7570658001c5f854b6b3ebb57be90e7a7072b5d2051d300b10b74314b7e25ace9998ca66eb2c7fbc10ef130dd67028293c8d9871ed5fb2ee05765af23b7cabcc0d6b08ed370bb9f616a0d4dea40a25f870c27e9074fac5e8d36cf04f94a0606fdd8ddbb420e99a489c7915ce5699e489000607030e0900040400000008000903809698000000000008000502e7bb02000c0911000b030f100a050716494710642cb0c646080000000000000000000000ff060c0911000d010f100a020716494710642cb0c646080000000100000000000000ff060c051100040607158e24658f6c59298c080000000200000000000000ff013001afd71da9456a977233960b08eba77d2e3690b8c7259637c8fb8f82cf58a1020905020302").to_vec();
let expected_serialized_tx = hex_literal::hex!("01815a9e25f301f6877feb533c18b7ecaec40b2164ccffada07a0a228a7d67beb339b77a0146c5c44f18030ddadcce4ab6c18e9033d1b89ac7dcd0814d9ba7d6078001000912f79d5e026f12edc6443a534b2cdd5072233989b415d7596573e743f3e5b386fb17eb2b10d3377bda2bc7bea65bec6b8372f4fc3463ec2cd6f9fde4b2c633d1921ad0968d57ee79348476716f9b2cd44ec4284b8f52c36648d560949e41589a5540de1c0451cccb6edd1fda9b4a48c282b279350b55a7a9716800cc0132b6f0b042ff6863b52c3f8faf95739e6541bda5d0ac593f00c6c07d9ab37096bf26d910a140fd3d05766f0087d57bf99df05731e894392ffcc8e8d7e960ba73c09824aaae85f2fb6289c70bfe37df150dddb17dd84f403fd0b1aa1bfee85795159de21fb4baefcd4965beb1c71311a2ffe76419d4b8f8d35fbc4cf514b1bd02da2df2e3e91372b3d301c202a633da0a92365a736e462131aecfad1fac47322cf8863ada00000000000000000000000000000000000000000000000000000000000000000306466fe5211732ffecadba72c39be7bc8ce5bbc5f7126b2c439b3a4000000006a7d517192c568ee08a845f73d29788cf035c3145b21ab344d8062ea940000006ddf6e1d765a193d9cbe146ceeb79ac1cb485ed5f5b37913a8cf5857eff00a90fb9ba52b1f09445f1e3a7508d59f0797923acf744fbe2da303fb06da859ee8746cd507258c10454d484e64ba59d3e7570658001c5f854b6b3ebb57be90e7a7072b5d2051d300b10b74314b7e25ace9998ca66eb2c7fbc10ef130dd67028293c8d9871ed5fb2ee05765af23b7cabcc0d6b08ed370bb9f616a0d4dea40a25f870a1e031c8bc9bec3b610cf7b36eb3bf3aa40237c9e5be2c7893878578439eb00bc27e9074fac5e8d36cf04f94a0606fdd8ddbb420e99a489c7915ce5699e48900060903010b0004040000000a00090380969800000000000a000502e7bb02000f0911000e04080d0c060916494710642cb0c646080000000000000000000000ff060f0911001002080d0c030916494710642cb0c646080000000100000000000000ff060f051100050709158e24658f6c59298c080000000200000000000000ff00").to_vec();

test_constructed_transaction(transaction, expected_serialized_tx);
}
Expand Down Expand Up @@ -917,7 +912,6 @@ pub mod test {
agg_key(),
durable_nonce(),
compute_price(),
vec![chainflip_alt()],
));

assert_err!(
Expand All @@ -927,9 +921,8 @@ pub mod test {
agg_key(),
durable_nonce(),
compute_price(),
vec![chainflip_alt()],
),
SolanaTransactionBuildingError::FinalTransactionExceededMaxLength(1260)
SolanaTransactionBuildingError::FinalTransactionExceededMaxLength(1288)
);
}
}

0 comments on commit 3cfe705

Please sign in to comment.