diff --git a/Cargo.lock b/Cargo.lock index b1b44b4..5a181ca 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2199,6 +2199,7 @@ dependencies = [ "locked-voter", "shellexpand", "smart-wallet", + "solana-account-decoder", "solana-program", "solana-rpc-client-api", "utils-cli", @@ -3018,9 +3019,9 @@ dependencies = [ [[package]] name = "rayon" -version = "1.7.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" dependencies = [ "either", "rayon-core", @@ -3028,14 +3029,12 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.11.0" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" dependencies = [ - "crossbeam-channel", "crossbeam-deque", "crossbeam-utils", - "num_cpus", ] [[package]] diff --git a/cli/locked-voter/Cargo.toml b/cli/locked-voter/Cargo.toml index 256174f..d3f724b 100644 --- a/cli/locked-voter/Cargo.toml +++ b/cli/locked-voter/Cargo.toml @@ -13,8 +13,9 @@ anchor-lang = "0.28.0" anchor-spl = "0.28.0" anchor-client = "0.28.0" solana-rpc-client-api = "1.16.12" +solana-account-decoder = "1.16.12" anyhow = "1.0.57" solana-program = "1.16.12" govern = { path = "../../programs/govern" } smart-wallet = { path = "../../programs/smart-wallet" } -utils-cli = {path ="../utils"} \ No newline at end of file +utils-cli = {path ="../utils"} diff --git a/cli/locked-voter/src/main.rs b/cli/locked-voter/src/main.rs index 899c70a..348db6e 100644 --- a/cli/locked-voter/src/main.rs +++ b/cli/locked-voter/src/main.rs @@ -1,21 +1,28 @@ mod args; use crate::args::*; +use anchor_client::solana_client::rpc_client::RpcClient; use anchor_client::solana_sdk::commitment_config::CommitmentConfig; use anchor_client::solana_sdk::pubkey::Pubkey; use anchor_client::solana_sdk::signer::keypair::*; use anchor_client::solana_sdk::signer::Signer; use anchor_client::{Client, Program}; +use anchor_lang::AccountDeserialize; +use anchor_lang::Discriminator; use anchor_lang::InstructionData; use anchor_lang::ToAccountMetas; use anchor_spl::associated_token::get_associated_token_address; use anyhow::Result; use clap::*; +use solana_account_decoder::UiAccountEncoding; use solana_program::instruction::Instruction; +use solana_rpc_client_api::config::RpcAccountInfoConfig; +use solana_rpc_client_api::config::RpcProgramAccountsConfig; use solana_rpc_client_api::filter::Memcmp; use solana_rpc_client_api::filter::RpcFilterType; use std::ops::Deref; use std::rc::Rc; use std::str::FromStr; +use std::time::Duration; fn main() -> Result<()> { let opts = Opts::parse(); @@ -487,11 +494,31 @@ fn get_stakers + Clone>( program: &Program, locker: Pubkey, ) -> Result<()> { - let keyed_escrows = program.accounts::(vec![RpcFilterType::Memcmp( - Memcmp::new_base58_encoded(8, &locker.to_bytes()), - )])?; + // Fat call, bump timeout + let rpc_client = RpcClient::new_with_timeout(program.rpc().url(), Duration::from_secs(120)); + let program_accounts = rpc_client.get_program_accounts_with_config( + &locked_voter::ID, + RpcProgramAccountsConfig { + filters: Some(vec![ + RpcFilterType::Memcmp(Memcmp::new_base58_encoded( + 0, + &locked_voter::Escrow::DISCRIMINATOR, + )), + RpcFilterType::Memcmp(Memcmp::new_base58_encoded(8, &locker.to_bytes())), + ]), + account_config: RpcAccountInfoConfig { + encoding: Some(UiAccountEncoding::Base64Zstd), + ..Default::default() + }, + ..Default::default() + }, + )?; + println!("Found {} escrows", program_accounts.len()); + println!("escrow,owner,amount"); - for (key, escrow) in keyed_escrows { + for (key, escrow_account) in program_accounts { + let escrow = + locked_voter::Escrow::try_deserialize(&mut escrow_account.data.as_slice()).unwrap(); println!("{key},{},{}", escrow.owner, escrow.amount); }