From 74aa250dd5415525e260700ef0689f7fa44cd0c0 Mon Sep 17 00:00:00 2001 From: rustdev Date: Mon, 23 Dec 2024 19:04:07 +0000 Subject: [PATCH] fix build --- Anchor.toml | 10 +- Cargo.lock | 60 --- solana/merkle-distributor/Cargo.toml | 2 +- .../src/instructions/admin_new_claim.rs | 2 +- solana/staking/programs/staking/Cargo.toml | 3 +- solana/staking/programs/staking/src/lib.rs | 4 +- solana/staking/programs/staking/src/tests.rs | 389 ------------------ 7 files changed, 11 insertions(+), 459 deletions(-) diff --git a/Anchor.toml b/Anchor.toml index 6e103b5..16d5074 100644 --- a/Anchor.toml +++ b/Anchor.toml @@ -1,12 +1,14 @@ [toolchain] +anchor_version = "0.29.0" +# solana_version = "1.16.9" # Solana version to use [features] seeds = false skip-lint = false [programs.devnet] -# staking="67Ypf1ZfxRDvW3eKMcV1h6s9y7jfFyNJ5yWqMDDJ3Zvs" -merkle_distributor="GVHsT5QaxEYjrSDt7bLGiQJ8xyzS2PD8byVVkcZUBsVR" +staking="67Ypf1ZfxRDvW3eKMcV1h6s9y7jfFyNJ5yWqMDDJ3Zvs" +# merkle_distributor="GVHsT5QaxEYjrSDt7bLGiQJ8xyzS2PD8byVVkcZUBsVR" # restaking = "8n3FHwYxFgQCQc2FNFkwDUf9mcqupxXcCvgfHbApMLv3" # restaking_v2 = "H69iS4rPnrRAMciLJcpEY3tRtFro7Mo7a2YAU8Q1busv" # solana_ibc = "2HLLVco5HvwWriNbUhmVwA2pCetRkpgrqwnjcsZdyTKT" @@ -24,8 +26,8 @@ cluster = "Devnet" wallet = "/Users/mykyta/.config/solana/id.json" [workspace] -members = ["solana/merkle-distributor"] -# members = ["solana/staking/programs/staking", "solana/merkle-distributor"] +# members = ["solana/merkle-distributor"] +members = ["solana/staking/programs/staking"] [scripts] test = "./solana-test.sh" diff --git a/Cargo.lock b/Cargo.lock index bf25087..1831fcb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1710,15 +1710,6 @@ version = "2.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" -[[package]] -name = "fast-math" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2465292146cdfc2011350fe3b1c616ac83cf0faeedb33463ba1c332ed8948d66" -dependencies = [ - "ieee754", -] - [[package]] name = "fastrand" version = "2.0.1" @@ -2113,9 +2104,6 @@ name = "hex" version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" -dependencies = [ - "serde", -] [[package]] name = "hex-literal" @@ -2892,12 +2880,6 @@ dependencies = [ "unicode-normalization", ] -[[package]] -name = "ieee754" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9007da9cacbd3e6343da136e98b0d2df013f553d35bdec8b518f07bea768e19c" - [[package]] name = "im" version = "15.1.0" @@ -3950,37 +3932,6 @@ dependencies = [ "prost", ] -[[package]] -name = "pyth-solana-receiver-sdk" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "937c8595148fb2a9a90439daf6a371a5b3c9fcd9b636f26d36ae31d6846d4339" -dependencies = [ - "anchor-lang", - "hex", - "pythnet-sdk", - "solana-program", -] - -[[package]] -name = "pythnet-sdk" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bbbc0456f9f27c9ad16b6c3bf1b2a7fea61eebf900f4d024a0468b9a84fe0c1" -dependencies = [ - "bincode", - "borsh 0.10.3", - "bytemuck", - "byteorder", - "fast-math", - "hex", - "rustc_version", - "serde", - "sha3 0.10.8", - "slow_primes", - "thiserror", -] - [[package]] name = "qstring" version = "0.7.2" @@ -4876,15 +4827,6 @@ dependencies = [ "autocfg", ] -[[package]] -name = "slow_primes" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58267dd2fbaa6dceecba9e3e106d2d90a2b02497c0e8b01b8759beccf5113938" -dependencies = [ - "num", -] - [[package]] name = "smallvec" version = "1.13.2" @@ -6038,8 +5980,6 @@ dependencies = [ "anchor-spl", "anyhow", "merkle-distributor", - "pyth-solana-receiver-sdk", - "solana-ibc", "solana-program", "solana-signature-verifier", "spl-associated-token-account", diff --git a/solana/merkle-distributor/Cargo.toml b/solana/merkle-distributor/Cargo.toml index 37505f5..c5186fa 100644 --- a/solana/merkle-distributor/Cargo.toml +++ b/solana/merkle-distributor/Cargo.toml @@ -15,7 +15,7 @@ path = "src/lib.rs" [features] no-entrypoint = [] cpi = ["no-entrypoint"] -idl-build = ["anchor-lang/idl-build"] +# idl-build = ["anchor-lang/idl-build"] [dependencies] anchor-lang = { workspace = true, features = ["init-if-needed"]} diff --git a/solana/merkle-distributor/src/instructions/admin_new_claim.rs b/solana/merkle-distributor/src/instructions/admin_new_claim.rs index 10ce99b..6e11f2a 100644 --- a/solana/merkle-distributor/src/instructions/admin_new_claim.rs +++ b/solana/merkle-distributor/src/instructions/admin_new_claim.rs @@ -50,7 +50,7 @@ impl PageAccount { pub const LEN: usize = 8 + std::mem::size_of::() + PageVestingItem::LEN * 200; } -#[derive(Clone, Debug, Default, PartialEq, Eq, borsh::BorshSerialize, borsh::BorshDeserialize)] +#[account] pub struct PageVestingItem { pub claimant: Pubkey, pub amount_unlocked: u64, diff --git a/solana/staking/programs/staking/Cargo.toml b/solana/staking/programs/staking/Cargo.toml index cbf1cc9..4bdd1b5 100644 --- a/solana/staking/programs/staking/Cargo.toml +++ b/solana/staking/programs/staking/Cargo.toml @@ -16,15 +16,14 @@ no-idl = [] no-log-ix-name = [] cpi = ["no-entrypoint"] default = [] +idl-build = ["anchor-lang/idl-build", "anchor-spl/idl-build"] [dependencies] anchor-lang = { workspace = true, features = ["init-if-needed"] } anchor-spl = { workspace = true, features = ["metadata"] } -solana-ibc = { workspace = true, features = ["cpi"] } merkle-distributor = { workspace = true, features = ["cpi"] } solana-program.workspace = true solana-signature-verifier.workspace = true -pyth-solana-receiver-sdk.workspace = true [dev-dependencies] anchor-client.workspace = true diff --git a/solana/staking/programs/staking/src/lib.rs b/solana/staking/programs/staking/src/lib.rs index 40735fb..20e5475 100644 --- a/solana/staking/programs/staking/src/lib.rs +++ b/solana/staking/programs/staking/src/lib.rs @@ -1608,7 +1608,7 @@ pub struct CommonStateStakingMode1 { pub new_admin_proposal: Option, } -#[derive(Clone, Debug, Default, PartialEq, Eq, borsh::BorshSerialize, borsh::BorshDeserialize)] +#[account] pub struct EpochState { pub epoch_number: u64, pub total_stake_amount: u64, @@ -1673,7 +1673,7 @@ impl LSTStakeState { } -#[derive(Clone, Debug, Default, PartialEq, Eq, borsh::BorshSerialize, borsh::BorshDeserialize)] +#[account] pub struct StakerState { pub timestamp: i64, pub amount: u64, diff --git a/solana/staking/programs/staking/src/tests.rs b/solana/staking/programs/staking/src/tests.rs index 8982ce0..e69de29 100644 --- a/solana/staking/programs/staking/src/tests.rs +++ b/solana/staking/programs/staking/src/tests.rs @@ -1,389 +0,0 @@ -use std::rc::Rc; -use std::str::FromStr; -use std::thread::sleep; -use std::time::Duration; - -use anchor_client::solana_client::rpc_client::RpcClient; -use anchor_client::solana_client::rpc_config::RpcSendTransactionConfig; -use anchor_client::solana_sdk::commitment_config::CommitmentConfig; -use anchor_client::solana_sdk::pubkey::Pubkey; -use anchor_client::solana_sdk::signature::{Keypair, Signature, Signer}; -use anchor_client::{Client, Cluster}; -use anchor_lang::solana_program::system_instruction::create_account; -use anchor_spl::associated_token::get_associated_token_address; -use anyhow::Result; -use pyth_solana_receiver_sdk::price_update::get_feed_id_from_hex; -use spl_token::instruction::initialize_mint2; - -use crate::{CommonState, NewTokenPayload, SOL_PRICE_FEED_ID}; - -const PYTH_PROGRAM_ID: &str = "pythWSnswVUd12oZpeFP8e9CVaEqJg25g1Vtc2biRsT"; - -const STAKE_TOKEN_MINT_DECIMALS: u8 = 6; - -const MINT_AMOUNT: u64 = 1000000000000; -const STAKE_AMOUNT: u64 = 100_000; - -const TOKEN_FEED_ID: &str = - "0xeaa020c61cc479712813461ce153894a96a6c00b21ed0cfc2798d1f9a9e9c94a"; - -fn airdrop(client: &RpcClient, account: Pubkey, lamports: u64) -> Signature { - let balance_before = client.get_balance(&account).unwrap(); - println!("This is balance before {}", balance_before); - let airdrop_signature = client.request_airdrop(&account, lamports).unwrap(); - sleep(Duration::from_secs(2)); - println!("This is airdrop signature {}", airdrop_signature); - - let balance_after = client.get_balance(&account).unwrap(); - println!("This is balance after {}", balance_after); - assert_eq!(balance_before + lamports, balance_after); - airdrop_signature -} - -#[test] -#[ignore = "Requires local validator to run"] -fn restaking_test_deliver() -> Result<()> { - let authority = Rc::new(Keypair::new()); - println!("This is pubkey {}", authority.pubkey().to_string()); - let lamports = 2_000_000_000; - - let client = Client::new_with_options( - Cluster::Localnet, - authority.clone(), - CommitmentConfig::processed(), - ); - let program = client.program(crate::ID).unwrap(); - - let sol_rpc_client = program.rpc(); - let _airdrop_signature = - airdrop(&sol_rpc_client, authority.pubkey(), lamports); - - let common_state = - Pubkey::find_program_address(&[crate::COMMON_SEED], &crate::ID).0; - - /* - * Creating Token Mint - */ - println!("\nCreating a token mint"); - - let token_mint = Keypair::new(); - let token_mint_key = token_mint.pubkey(); - - let create_account_ix = create_account( - &authority.pubkey(), - &token_mint_key, - sol_rpc_client.get_minimum_balance_for_rent_exemption(82).unwrap(), - 82, - &anchor_spl::token::ID, - ); - - let create_mint_ix = initialize_mint2( - &anchor_spl::token::ID, - &token_mint_key, - &authority.pubkey(), - Some(&authority.pubkey()), - STAKE_TOKEN_MINT_DECIMALS, - ) - .expect("invalid mint instruction"); - - let create_token_acc_ix = spl_associated_token_account::instruction::create_associated_token_account(&authority.pubkey(), &authority.pubkey(), &token_mint_key, &anchor_spl::token::ID); - let associated_token_addr = - get_associated_token_address(&authority.pubkey(), &token_mint_key); - let mint_ix = spl_token::instruction::mint_to( - &anchor_spl::token::ID, - &token_mint_key, - &associated_token_addr, - &authority.pubkey(), - &[&authority.pubkey()], - MINT_AMOUNT, - ) - .unwrap(); - - let tx = program - .request() - .instruction(create_account_ix) - .instruction(create_mint_ix) - .instruction(create_token_acc_ix) - .instruction(mint_ix) - .payer(authority.clone()) - .signer(&*authority) - .signer(&token_mint) - .send_with_spinner_and_config(RpcSendTransactionConfig { - skip_preflight: true, - ..RpcSendTransactionConfig::default() - })?; - - println!(" Signature: {}", tx); - - /* - * Initializing the program - */ - println!("\nInitializing the program"); - - let new_token_mint = NewTokenPayload { - address: token_mint_key, - oracle_address: Some(TOKEN_FEED_ID.to_string()), - max_update_time_in_sec: 60, - }; - - let tx = program - .request() - .accounts(crate::accounts::Initialize { - admin: authority.pubkey(), - common_state, - system_program: solana_program::system_program::ID, - }) - .args(crate::instruction::Initialize { - whitelisted_tokens: vec![new_token_mint], - initial_validators: vec![authority.pubkey()], - }) - .payer(authority.clone()) - .signer(&*authority) - .send_with_spinner_and_config(RpcSendTransactionConfig { - skip_preflight: true, - ..Default::default() - })?; - - println!(" Signature: {}", tx); - - let escrow_token_account = Pubkey::find_program_address( - &[crate::ESCROW_SEED, &token_mint_key.to_bytes()], - &crate::ID, - ) - .0; - let receipt_token_mint = Pubkey::find_program_address( - &[crate::RECEIPT_SEED, &token_mint_key.to_bytes()], - &crate::ID, - ) - .0; - - let staker_receipt_token_account = - spl_associated_token_account::get_associated_token_address( - &authority.pubkey(), - &receipt_token_mint, - ); - - let trie = - Pubkey::find_program_address(&[solana_ibc::TRIE_SEED], &solana_ibc::ID) - .0; - let chain = Pubkey::find_program_address( - &[solana_ibc::CHAIN_SEED], - &solana_ibc::ID, - ) - .0; - - /* - Update the token price - */ - println!("\nUpdating the token price"); - - let token_feed_id = get_feed_id_from_hex(TOKEN_FEED_ID).unwrap(); - let sol_feed_id = get_feed_id_from_hex(SOL_PRICE_FEED_ID).unwrap(); - let shard_buffer = 0_u16.to_le_bytes(); - - let token_price_acc = Pubkey::find_program_address( - &[&shard_buffer, &token_feed_id], - &Pubkey::from_str(PYTH_PROGRAM_ID).unwrap(), - ) - .0; - - let sol_price_acc = Pubkey::find_program_address( - &[&shard_buffer, &sol_feed_id], - &Pubkey::from_str(PYTH_PROGRAM_ID).unwrap(), - ) - .0; - - let tx = program - .request() - .accounts(crate::accounts::UpdateTokenPrice { - signer: authority.pubkey(), - common_state, - token_mint: token_mint_key, - token_price_feed: token_price_acc, - sol_price_feed: sol_price_acc, - system_program: solana_program::system_program::ID, - chain, - trie, - guest_chain_program: solana_ibc::ID, - instruction: solana_program::sysvar::instructions::ID, - }) - .args(crate::instruction::UpdateTokenPrice {}) - .payer(authority.clone()) - .signer(&*authority) - .send_with_spinner_and_config(RpcSendTransactionConfig { - skip_preflight: true, - ..Default::default() - })?; - - println!(" Signature: {}", tx); - - /* - * Depositing to multiple validators - */ - println!("\nDepositing to multiple validators"); - - let staker_token_acc_balance_before = sol_rpc_client - .get_token_account_balance(&associated_token_addr) - .unwrap(); - - let tx = program - .request() - .accounts(crate::accounts::Deposit { - common_state, - fee_payer: authority.pubkey(), - system_program: solana_program::system_program::ID, - staker: authority.pubkey(), - token_mint: token_mint_key, - staker_token_account: associated_token_addr, - escrow_token_account, - receipt_token_mint, - staker_receipt_token_account, - token_program: anchor_spl::token::ID, - associated_token_program: anchor_spl::associated_token::ID, - chain, - trie, - guest_chain_program: solana_ibc::ID, - instruction: solana_program::sysvar::instructions::ID, - }) - .args(crate::instruction::Deposit { amount: STAKE_AMOUNT }) - .payer(authority.clone()) - .signer(&*authority) - .send_with_spinner_and_config(RpcSendTransactionConfig { - skip_preflight: true, - ..Default::default() - })?; - - let common_state_data: CommonState = program.account(common_state).unwrap(); - - println!("\n{:?}\n", common_state_data); - - let staker_token_acc_balance_after = sol_rpc_client - .get_token_account_balance(&associated_token_addr) - .unwrap(); - let staker_receipt_token_acc_balance_after = sol_rpc_client - .get_token_account_balance(&staker_receipt_token_account) - .unwrap(); - - assert_eq!( - (staker_receipt_token_acc_balance_after.ui_amount.unwrap() * - 10_f64.powf(crate::RECEIPT_TOKEN_DECIMALS.into())) as u64, - STAKE_AMOUNT - ); - assert_eq!( - ((staker_token_acc_balance_before.ui_amount.unwrap() - - staker_token_acc_balance_after.ui_amount.unwrap()) * - 10_f64.powf(STAKE_TOKEN_MINT_DECIMALS.into())) - .round() as u64, - STAKE_AMOUNT - ); - - println!(" Signature: {}", tx); - - /* - Update the token price - */ - println!("\nUpdating the token price"); - - let token_feed_id = get_feed_id_from_hex(TOKEN_FEED_ID).unwrap(); - let sol_feed_id = get_feed_id_from_hex(SOL_PRICE_FEED_ID).unwrap(); - let shard_buffer = 0_u16.to_le_bytes(); - - let token_price_acc = Pubkey::find_program_address( - &[&shard_buffer, &token_feed_id], - &Pubkey::from_str(PYTH_PROGRAM_ID).unwrap(), - ) - .0; - - let sol_price_acc = Pubkey::find_program_address( - &[&shard_buffer, &sol_feed_id], - &Pubkey::from_str(PYTH_PROGRAM_ID).unwrap(), - ) - .0; - - let tx = program - .request() - .accounts(crate::accounts::UpdateTokenPrice { - signer: authority.pubkey(), - common_state, - token_mint: token_mint_key, - token_price_feed: token_price_acc, - sol_price_feed: sol_price_acc, - system_program: solana_program::system_program::ID, - chain, - trie, - guest_chain_program: solana_ibc::ID, - instruction: solana_program::sysvar::instructions::ID, - }) - .args(crate::instruction::UpdateTokenPrice {}) - .payer(authority.clone()) - .signer(&*authority) - .send_with_spinner_and_config(RpcSendTransactionConfig { - skip_preflight: true, - ..Default::default() - })?; - - println!(" Signature: {}", tx); - - /* - * Withdrawing the stake - */ - println!("\nWithdrawing the stake"); - - let staker_token_acc_balance_before = sol_rpc_client - .get_token_account_balance(&associated_token_addr) - .unwrap(); - let staker_receipt_token_acc_balance_before = sol_rpc_client - .get_token_account_balance(&staker_receipt_token_account) - .unwrap(); - - let tx = program - .request() - .accounts(crate::accounts::Withdraw { - common_state, - system_program: solana_program::system_program::ID, - staker: authority.pubkey(), - token_mint: token_mint_key, - staker_token_account: associated_token_addr, - escrow_token_account, - receipt_token_mint, - staker_receipt_token_account, - token_program: anchor_spl::token::ID, - chain, - trie, - guest_chain_program: solana_ibc::ID, - instruction: solana_program::sysvar::instructions::ID, - }) - .args(crate::instruction::Withdraw { amount: STAKE_AMOUNT / 2 }) - .payer(authority.clone()) - .signer(&*authority) - .send_with_spinner_and_config(RpcSendTransactionConfig { - skip_preflight: true, - ..Default::default() - })?; - - let staker_token_acc_balance_after = sol_rpc_client - .get_token_account_balance(&associated_token_addr) - .unwrap(); - let staker_receipt_token_acc_balance_after = sol_rpc_client - .get_token_account_balance(&staker_receipt_token_account) - .unwrap(); - - assert_eq!( - ((staker_receipt_token_acc_balance_before.ui_amount.unwrap() - - staker_receipt_token_acc_balance_after.ui_amount.unwrap()) * - 10_f64.powf(crate::RECEIPT_TOKEN_DECIMALS.into())) - .round() as u64, - STAKE_AMOUNT / 2 - ); - assert_eq!( - ((staker_token_acc_balance_after.ui_amount.unwrap() - - staker_token_acc_balance_before.ui_amount.unwrap()) * - 10_f64.powf(STAKE_TOKEN_MINT_DECIMALS.into())) - .round() as u64, - STAKE_AMOUNT / 2 - ); - - println!(" Signature: {}", tx); - - Ok(()) -}