Module: Solana::Ruby::Kit::Programs::AssociatedTokenAccount
- Extended by:
- T::Sig
- Defined in:
- lib/solana/ruby/kit/programs/associated_token_account.rb
Overview
Ruby interface for the SPL Associated Token Account on-chain program.
An Associated Token Account (ATA) is a Program Derived Address that holds SPL token balances for a given wallet + mint pair. The ATA address is deterministic: given a wallet and a mint, there is exactly one “canonical” token account for that combination.
Seeds used for PDA derivation (all raw 32-byte address buffers):
[ wallet_bytes, token_program_bytes, mint_bytes ]
Program: PROGRAM_ID (the Associated Token Account program)
Reference: github.com/solana-program/associated-token-account
Constant Summary collapse
- PROGRAM_ID =
SPL Associated Token Account program.
T.let( Addresses::Address.new('ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL'), Addresses::Address )
- TOKEN_PROGRAM_ID =
Original SPL Token program (spl-token).
T.let( Addresses::Address.new('TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA'), Addresses::Address )
- TOKEN_2022_PROGRAM_ID =
Token Extensions program (spl-token-2022).
T.let( Addresses::Address.new('TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb'), Addresses::Address )
- SYSTEM_PROGRAM_ID =
Solana System Program.
T.let( Addresses::Address.new('11111111111111111111111111111111'), Addresses::Address )
Class Method Summary collapse
- .create_instruction(payer:, wallet:, mint:, token_program_id: TOKEN_PROGRAM_ID, idempotent: false) ⇒ Object
- .get_associated_token_address(wallet:, mint:, token_program_id: TOKEN_PROGRAM_ID) ⇒ Object
Class Method Details
.create_instruction(payer:, wallet:, mint:, token_program_id: TOKEN_PROGRAM_ID, idempotent: false) ⇒ Object
106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
# File 'lib/solana/ruby/kit/programs/associated_token_account.rb', line 106 def create_instruction( payer:, wallet:, mint:, token_program_id: TOKEN_PROGRAM_ID, idempotent: false ) ata = get_associated_token_address(wallet: wallet, mint: mint, token_program_id: token_program_id) # Discriminator: none for "Create", 0x01 for "CreateIdempotent" data = idempotent ? "\x01".b : nil Instructions::Instruction.new( program_address: PROGRAM_ID, accounts: [ Instructions.writable_signer_account(payer), # 0 payer Instructions.writable_account(ata.address), # 1 ATA to create Instructions.readonly_account(wallet), # 2 owner (readonly) Instructions.readonly_account(mint), # 3 mint Instructions.readonly_account(SYSTEM_PROGRAM_ID), # 4 System Program Instructions.readonly_account(token_program_id), # 5 Token Program ], data: data ) end |
.get_associated_token_address(wallet:, mint:, token_program_id: TOKEN_PROGRAM_ID) ⇒ Object
66 67 68 69 70 71 72 73 74 75 |
# File 'lib/solana/ruby/kit/programs/associated_token_account.rb', line 66 def get_associated_token_address(wallet:, mint:, token_program_id: TOKEN_PROGRAM_ID) wallet_bytes = Addresses.decode_address(wallet) token_program_bytes = Addresses.decode_address(token_program_id) mint_bytes = Addresses.decode_address(mint) Addresses.get_program_derived_address( program_address: PROGRAM_ID, seeds: [wallet_bytes, token_program_bytes, mint_bytes] ) end |