gmsol_sdk/client/ops/
system.rs

1use std::ops::Deref;
2
3use gmsol_solana_utils::transaction_builder::TransactionBuilder;
4use solana_sdk::{pubkey::Pubkey, signer::Signer};
5
6/// System Program Ops.
7pub trait SystemProgramOps<C> {
8    /// Transfer to.
9    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}