diff --git a/Cargo.lock b/Cargo.lock index f4696c4ad..1275e977e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -847,8 +847,14 @@ dependencies = [ name = "checking-accounts-native-program" version = "0.1.0" dependencies = [ + "litesvm", + "solana-keypair", + "solana-native-token 3.0.0", "solana-program 3.0.0", + "solana-pubkey 3.0.0", + "solana-sdk", "solana-system-interface 2.0.0", + "solana-transaction", ] [[package]] @@ -1222,6 +1228,18 @@ dependencies = [ "zeroize", ] +[[package]] +name = "ed25519-dalek-bip32" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b49a684b133c4980d7ee783936af771516011c8cd15f429dbda77245e282f03" +dependencies = [ + "derivation-path", + "ed25519-dalek 2.2.0", + "hmac 0.12.1", + "sha2 0.10.9", +] + [[package]] name = "either" version = "1.15.0" @@ -2591,6 +2609,12 @@ dependencies = [ "rand_core 0.6.4", ] +[[package]] +name = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + [[package]] name = "smallvec" version = "1.15.0" @@ -2666,6 +2690,7 @@ dependencies = [ "curve25519-dalek 4.1.3", "five8", "five8_const", + "rand 0.8.5", "serde", "serde_derive", "solana-atomic-u64 3.0.0", @@ -3101,6 +3126,16 @@ dependencies = [ "solana-sdk-ids 3.0.0", ] +[[package]] +name = "solana-epoch-info" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8a6b69bd71386f61344f2bcf0f527f5fd6dd3b22add5880e2e1bf1dd1fa8059" +dependencies = [ + "serde", + "serde_derive", +] + [[package]] name = "solana-epoch-rewards" version = "2.2.1" @@ -3129,6 +3164,17 @@ dependencies = [ "solana-sysvar-id 3.0.0", ] +[[package]] +name = "solana-epoch-rewards-hasher" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e507099d0c2c5d7870c9b1848281ea67bbeee80d171ca85003ee5767994c9c38" +dependencies = [ + "siphasher", + "solana-hash 3.0.0", + "solana-pubkey 3.0.0", +] + [[package]] name = "solana-epoch-schedule" version = "2.2.1" @@ -3264,6 +3310,10 @@ name = "solana-fee-structure" version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e2abdb1223eea8ec64136f39cb1ffcf257e00f915c957c35c0dd9e3f4e700b0" +dependencies = [ + "serde", + "serde_derive", +] [[package]] name = "solana-genesis-config" @@ -3337,6 +3387,10 @@ name = "solana-inflation" version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e92f37a14e7c660628752833250dd3dcd8e95309876aee751d7f8769a27947c6" +dependencies = [ + "serde", + "serde_derive", +] [[package]] name = "solana-instruction" @@ -3378,6 +3432,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1f0d483b8ae387178d9210e0575b666b05cdd4bd0f2f188128249f6e454d39d" dependencies = [ "num-traits", + "serde", + "serde_derive", "solana-program-error 3.0.0", ] @@ -3459,9 +3515,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "952ed9074c12edd2060cb09c2a8c664303f4ab7f7056a407ac37dd1da7bdaa3e" dependencies = [ "ed25519-dalek 2.2.0", + "ed25519-dalek-bip32", "five8", "rand 0.8.5", + "solana-derivation-path", "solana-pubkey 3.0.0", + "solana-seed-derivable", "solana-seed-phrase", "solana-signature", "solana-signer", @@ -3719,6 +3778,22 @@ dependencies = [ "solana-sdk-ids 3.0.0", ] +[[package]] +name = "solana-offchain-message" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6e2a1141a673f72a05cf406b99e4b2b8a457792b7c01afa07b3f00d4e2de393" +dependencies = [ + "num_enum", + "solana-hash 3.0.0", + "solana-packet", + "solana-pubkey 3.0.0", + "solana-sanitize 3.0.1", + "solana-sha256-hasher 3.0.0", + "solana-signature", + "solana-signer", +] + [[package]] name = "solana-packet" version = "3.0.0" @@ -3755,6 +3830,17 @@ dependencies = [ "num-traits", ] +[[package]] +name = "solana-presigner" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f704eaf825be3180832445b9e4983b875340696e8e7239bf2d535b0f86c14a2" +dependencies = [ + "solana-pubkey 3.0.0", + "solana-signature", + "solana-signer", +] + [[package]] name = "solana-program" version = "2.3.0" @@ -4055,6 +4141,7 @@ version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8909d399deb0851aa524420beeb5646b115fd253ef446e35fe4504c904da3941" dependencies = [ + "rand 0.8.5", "solana-address", ] @@ -4113,6 +4200,44 @@ dependencies = [ "winapi", ] +[[package]] +name = "solana-sdk" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f03df7969f5e723ad31b6c9eadccc209037ac4caa34d8dc259316b05c11e82b" +dependencies = [ + "bincode", + "bs58", + "serde", + "solana-account 3.1.0", + "solana-epoch-info", + "solana-epoch-rewards-hasher", + "solana-fee-structure", + "solana-inflation", + "solana-keypair", + "solana-message 3.0.1", + "solana-offchain-message", + "solana-presigner", + "solana-program 3.0.0", + "solana-program-memory 3.0.0", + "solana-pubkey 3.0.0", + "solana-sanitize 3.0.1", + "solana-sdk-ids 3.0.0", + "solana-sdk-macro 3.0.0", + "solana-seed-derivable", + "solana-seed-phrase", + "solana-serde", + "solana-serde-varint 3.0.0", + "solana-short-vec 3.0.0", + "solana-shred-version", + "solana-signature", + "solana-signer", + "solana-time-utils", + "solana-transaction", + "solana-transaction-error 3.0.0", + "thiserror 2.0.17", +] + [[package]] name = "solana-sdk-ids" version = "2.2.1" @@ -4223,6 +4348,15 @@ dependencies = [ "sha2 0.10.9", ] +[[package]] +name = "solana-serde" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "709a93cab694c70f40b279d497639788fc2ccbcf9b4aa32273d4b361322c02dd" +dependencies = [ + "serde", +] + [[package]] name = "solana-serde-varint" version = "2.2.2" @@ -4322,6 +4456,7 @@ checksum = "4bb8057cc0e9f7b5e89883d49de6f407df655bb6f3a71d0b7baf9986a2218fd9" dependencies = [ "ed25519-dalek 2.2.0", "five8", + "rand 0.8.5", "serde", "serde-big-array", "serde_derive", @@ -4758,6 +4893,8 @@ version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4222065402340d7e6aec9dc3e54d22992ddcf923d91edcd815443c2bfca3144a" dependencies = [ + "serde", + "serde_derive", "solana-instruction-error", "solana-sanitize 3.0.1", ] diff --git a/basics/checking-accounts/native/program/Cargo.toml b/basics/checking-accounts/native/program/Cargo.toml index 27a3cfbb0..214ea7856 100644 --- a/basics/checking-accounts/native/program/Cargo.toml +++ b/basics/checking-accounts/native/program/Cargo.toml @@ -11,10 +11,17 @@ solana-system-interface.workspace = true crate-type = ["cdylib", "lib"] [features] -anchor-debug = [] custom-heap = [] custom-panic = [] [lints.rust] unexpected_cfgs = { level = "warn", check-cfg = ['cfg(target_os, values("solana"))'] } + +[dev-dependencies] +litesvm = "0.8.1" +solana-keypair = "3.0.1" +solana-native-token = "3.0.0" +solana-pubkey = "3.0.0" +solana-sdk = "3.0.0" +solana-transaction = "3.0.1" diff --git a/basics/checking-accounts/native/program/tests/test.rs b/basics/checking-accounts/native/program/tests/test.rs new file mode 100644 index 000000000..133921c25 --- /dev/null +++ b/basics/checking-accounts/native/program/tests/test.rs @@ -0,0 +1,62 @@ +use litesvm::LiteSVM; +use solana_keypair::{Keypair, Signer}; +use solana_native_token::LAMPORTS_PER_SOL; +use solana_pubkey::Pubkey; +use solana_system_interface::instruction::create_account; +use solana_transaction::{AccountMeta, Instruction, Transaction}; + +#[test] +fn test_checking_accounts() { + let mut svm = LiteSVM::new(); + + let payer = Keypair::new(); + let account_to_change = Keypair::new(); + let account_to_create = Keypair::new(); + + svm.airdrop(&payer.pubkey(), LAMPORTS_PER_SOL * 10).unwrap(); + + let program_id = Pubkey::new_unique(); + let program_bytes = + include_bytes!("../../../../../target/deploy/checking_accounts_native_program.so"); + + svm.add_program(program_id, program_bytes).unwrap(); + + let create_account_ix = create_account( + &payer.pubkey(), + &account_to_change.pubkey(), + LAMPORTS_PER_SOL, + 0, + &program_id, + ); + + let tx = Transaction::new_signed_with_payer( + &[create_account_ix], + Some(&payer.pubkey()), + &[&payer, &account_to_change], + svm.latest_blockhash(), + ); + + // verify tx was sent successfully + let _ = svm.send_transaction(tx).is_ok(); + + let ix = Instruction { + program_id, + accounts: vec![ + AccountMeta::new(payer.pubkey(), true), + AccountMeta::new(account_to_create.pubkey(), true), + AccountMeta::new(account_to_change.pubkey(), true), + AccountMeta::new(solana_system_interface::program::ID, false), + ], + data: vec![0], + }; + + let tx = Transaction::new_signed_with_payer( + &[ix], + Some(&payer.pubkey()), + &[payer, account_to_change, account_to_create], + svm.latest_blockhash(), + ); + + // verify tx was sent successfully + let _ = svm.send_transaction(tx).is_ok(); +}