-
Notifications
You must be signed in to change notification settings - Fork 0
Transfer SOL
pzupan edited this page Jul 5, 2026
·
1 revision
require 'base64'
require 'solana/ruby/kit'
Kit = Solana::Ruby::Kit
# ── 1. Load your sender keypair ───────────────────────────────────────────────────
sender = Kit::Signers.create_key_pair_signer_from_bytes(File.binread('wallet.bin'))
recipient = Kit::Addresses.address('RECIPIENT_ADDRESS_HERE')
# ── 2. Build the transfer instruction (0.5 SOL) ───────────────────────────────────
ix = Kit::Programs::SystemProgram.transfer_instruction(
sender: sender.address,
recipient: recipient,
lamports: 500_000_000
)
# ── 2. Fetch blockhash, build message, compile, sign, send ───────────────────────────────────
rpc = Kit::Rpc::Client.new(Kit::RpcTypes.devnet)
bh = rpc.get_latest_blockhash
message = Kit::Functional.pipe(
Kit::TransactionMessages.create_transaction_message(version: :legacy),
->(tx) { Kit::TransactionMessages.set_fee_payer(sender.address, tx) },
->(tx) { Kit::TransactionMessages.set_blockhash_lifetime(
Kit::TransactionMessages::BlockhashLifetimeConstraint.new(
blockhash: bh.value.blockhash, last_valid_block_height: bh.value.last_valid_block_height
), tx) },
->(tx) { Kit::TransactionMessages.append_instructions(tx, [ix]) }
)
transaction = Kit::Transactions.compile_transaction_message(message)
signed = Kit::Transactions.sign_transaction([sender.key_pair.signing_key], transaction)
wire_base64 = Base64.strict_encode64(Kit::Transactions.wire_encode_transaction(signed))
sig = rpc.send_transaction(wire_base64)
puts "Signature: #{sig}"