gmsol_sdk/client/ops/
system.rs1use std::ops::Deref;
2
3use gmsol_solana_utils::transaction_builder::TransactionBuilder;
4use solana_sdk::{pubkey::Pubkey, signer::Signer};
5
6pub trait SystemProgramOps<C> {
8 fn transfer(&self, to: &Pubkey, lamports: u64) -> crate::Result<TransactionBuilder<C>>;
10}
11
12impl<C: Clone + Deref<Target = impl Signer>> SystemProgramOps<C> for crate::Client<C> {
13 fn transfer(&self, to: &Pubkey, lamports: u64) -> crate::Result<TransactionBuilder<C>> {
14 use solana_sdk::system_instruction::transfer;
15
16 if lamports == 0 {
17 return Err(crate::Error::custom("transferring amount is zero"));
18 }
19 Ok(self
20 .store_transaction()
21 .pre_instruction(transfer(&self.payer(), to, lamports), false))
22 }
23}