Skip to content

Commit

Permalink
client: use any Signer instead of only Keypair (#975)
Browse files Browse the repository at this point in the history
  • Loading branch information
dnut committed Dec 20, 2021
1 parent 483999e commit 34c4e50
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 13 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Expand Up @@ -24,6 +24,7 @@ incremented for features.

### Breaking

* client: Client::new and Client::new_with_options now accept `Rc<dyn Signer>` 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
Expand Down
3 changes: 2 additions & 1 deletion client/example/src/main.rs
Expand Up @@ -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)]
Expand Down Expand Up @@ -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)?;
Expand Down
27 changes: 16 additions & 11 deletions client/src/lib.rs
Expand Up @@ -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;
Expand All @@ -36,7 +37,7 @@ pub struct Client {
}

impl Client {
pub fn new(cluster: Cluster, payer: Keypair) -> Self {
pub fn new(cluster: Cluster, payer: Rc<dyn Signer>) -> Self {
Self {
cfg: Config {
cluster,
Expand All @@ -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<dyn Signer>,
options: CommitmentConfig,
) -> Self {
Self {
cfg: Config {
cluster,
Expand All @@ -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(),
},
}
}
Expand All @@ -72,7 +77,7 @@ impl Client {
#[derive(Debug)]
struct Config {
cluster: Cluster,
payer: Keypair,
payer: Rc<dyn Signer>,
options: Option<CommitmentConfig>,
}

Expand All @@ -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,
)
Expand All @@ -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 },
)
Expand Down Expand Up @@ -323,7 +328,7 @@ pub struct RequestBuilder<'a> {
accounts: Vec<AccountMeta>,
options: CommitmentConfig,
instructions: Vec<Instruction>,
payer: Keypair,
payer: Rc<dyn Signer>,
// Serialized instruction data for the target RPC.
instruction_data: Option<Vec<u8>>,
signers: Vec<&'a dyn Signer>,
Expand All @@ -345,7 +350,7 @@ impl<'a> RequestBuilder<'a> {
pub fn from(
program_id: Pubkey,
cluster: &str,
payer: Keypair,
payer: Rc<dyn Signer>,
options: Option<CommitmentConfig>,
namespace: RequestNamespace,
) -> Self {
Expand All @@ -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<dyn Signer>) -> Self {
self.payer = payer;
self
}
Expand Down Expand Up @@ -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);

Expand Down
@@ -1,6 +1,7 @@
#![cfg(feature = "test-bpf")]

use {
std::rc::Rc,
anchor_client::{
anchor_lang::Discriminator,
solana_sdk::{
Expand Down Expand Up @@ -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());
Expand Down

0 comments on commit 34c4e50

Please sign in to comment.