diff --git a/CHANGELOG.md b/CHANGELOG.md index b4d01a8771..49d8e82302 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,7 @@ incremented for features. ### Breaking +* client: Client::new and Client::new_with_options now accept `Rc` instead of `Keypair` ([#975](https://github.com/project-serum/anchor/pull/975)). * lang, ts: Change error enum name and message for 'wrong program ownership' account validation ([#1154](https://github.com/project-serum/anchor/pull/1154)). ## [0.19.0] - 2021-12-08 diff --git a/client/example/src/main.rs b/client/example/src/main.rs index 6ce0b536df..baa58a8d90 100644 --- a/client/example/src/main.rs +++ b/client/example/src/main.rs @@ -22,6 +22,7 @@ use composite::accounts::{Bar, CompositeUpdate, Foo, Initialize}; use composite::instruction as composite_instruction; use composite::{DummyA, DummyB}; use rand::rngs::OsRng; +use std::rc::Rc; use std::time::Duration; #[derive(Parser, Debug)] @@ -51,7 +52,7 @@ fn main() -> Result<()> { ); // Client. - let client = Client::new_with_options(url, payer, CommitmentConfig::processed()); + let client = Client::new_with_options(url, Rc::new(payer), CommitmentConfig::processed()); // Run tests. composite(&client, opts.composite_pid)?; diff --git a/client/src/lib.rs b/client/src/lib.rs index d5e6520b5e..33e110492d 100644 --- a/client/src/lib.rs +++ b/client/src/lib.rs @@ -13,9 +13,10 @@ use solana_client::rpc_client::RpcClient; use solana_client::rpc_config::{RpcTransactionLogsConfig, RpcTransactionLogsFilter}; use solana_client::rpc_response::{Response as RpcResponse, RpcLogsResponse}; use solana_sdk::commitment_config::CommitmentConfig; -use solana_sdk::signature::{Keypair, Signature, Signer}; +use solana_sdk::signature::{Signature, Signer}; use solana_sdk::transaction::Transaction; use std::convert::Into; +use std::rc::Rc; use thiserror::Error; pub use anchor_lang; @@ -36,7 +37,7 @@ pub struct Client { } impl Client { - pub fn new(cluster: Cluster, payer: Keypair) -> Self { + pub fn new(cluster: Cluster, payer: Rc) -> Self { Self { cfg: Config { cluster, @@ -46,7 +47,11 @@ impl Client { } } - pub fn new_with_options(cluster: Cluster, payer: Keypair, options: CommitmentConfig) -> Self { + pub fn new_with_options( + cluster: Cluster, + payer: Rc, + options: CommitmentConfig, + ) -> Self { Self { cfg: Config { cluster, @@ -62,7 +67,7 @@ impl Client { cfg: Config { cluster: self.cfg.cluster.clone(), options: self.cfg.options, - payer: Keypair::from_bytes(&self.cfg.payer.to_bytes()).unwrap(), + payer: self.cfg.payer.clone(), }, } } @@ -72,7 +77,7 @@ impl Client { #[derive(Debug)] struct Config { cluster: Cluster, - payer: Keypair, + payer: Rc, options: Option, } @@ -93,7 +98,7 @@ impl Program { RequestBuilder::from( self.program_id, self.cfg.cluster.url(), - Keypair::from_bytes(&self.cfg.payer.to_bytes()).unwrap(), + self.cfg.payer.clone(), self.cfg.options, RequestNamespace::Global, ) @@ -104,7 +109,7 @@ impl Program { RequestBuilder::from( self.program_id, self.cfg.cluster.url(), - Keypair::from_bytes(&self.cfg.payer.to_bytes()).unwrap(), + self.cfg.payer.clone(), self.cfg.options, RequestNamespace::State { new: false }, ) @@ -323,7 +328,7 @@ pub struct RequestBuilder<'a> { accounts: Vec, options: CommitmentConfig, instructions: Vec, - payer: Keypair, + payer: Rc, // Serialized instruction data for the target RPC. instruction_data: Option>, signers: Vec<&'a dyn Signer>, @@ -345,7 +350,7 @@ impl<'a> RequestBuilder<'a> { pub fn from( program_id: Pubkey, cluster: &str, - payer: Keypair, + payer: Rc, options: Option, namespace: RequestNamespace, ) -> Self { @@ -363,7 +368,7 @@ impl<'a> RequestBuilder<'a> { } #[must_use] - pub fn payer(mut self, payer: Keypair) -> Self { + pub fn payer(mut self, payer: Rc) -> Self { self.payer = payer; self } @@ -462,7 +467,7 @@ impl<'a> RequestBuilder<'a> { let instructions = self.instructions()?; let mut signers = self.signers; - signers.push(&self.payer); + signers.push(&*self.payer); let rpc_client = RpcClient::new_with_commitment(self.cluster, self.options); diff --git a/tests/zero-copy/programs/zero-copy/tests/compute_unit_test.rs b/tests/zero-copy/programs/zero-copy/tests/compute_unit_test.rs index d1faeb39d7..634ed707e3 100644 --- a/tests/zero-copy/programs/zero-copy/tests/compute_unit_test.rs +++ b/tests/zero-copy/programs/zero-copy/tests/compute_unit_test.rs @@ -1,6 +1,7 @@ #![cfg(feature = "test-bpf")] use { + std::rc::Rc, anchor_client::{ anchor_lang::Discriminator, solana_sdk::{ @@ -42,7 +43,7 @@ async fn update_foo() { let client = Client::new_with_options( Cluster::Debug, - Keypair::new(), + Rc::new(Keypair::new()), CommitmentConfig::processed(), ); let program = client.program(zero_copy::id());