Sha256: df0f6e143c30416315cb2c07f61b4023feb8a5a4cd95f4aaabaa61f187647343

Contents?: true

Size: 1.45 KB

Versions: 9

Compression:

Stored size: 1.45 KB

Contents

module SolanaRuby
  class TransactionInstruction
    require 'base58'

    attr_accessor :keys, :program_id, :data

    def initialize(keys:, program_id:, data:)
      @keys = keys           # Array of account metadata hashes
      @program_id = program_id  # Program ID in Base58
      @data = data           # Binary data for the instruction
    end

    def serialize
      serialized_instruction = ""

      # Convert and serialize the program ID from Base58 to binary
      program_id_binary = Base58.base58_to_binary(@program_id)
      serialized_instruction << program_id_binary

      # Serialize the number of keys
      serialized_instruction << [@keys.length].pack("C")

      # Serialize each key (pubkey in binary, is_signer, is_writable flags)
      @keys.each do |key_meta|
        # Convert public key to binary and serialize it
        pubkey_binary = Base58.base58_to_binary(key_meta[:pubkey])
        serialized_instruction << pubkey_binary

        # Serialize meta flags (is_signer and is_writable)
        meta_flags = (key_meta[:is_signer] ? 1 : 0) | (key_meta[:is_writable] ? 2 : 0)
        serialized_instruction << [meta_flags].pack("C")
      end

      # Serialize data length (encoded as a single byte, can adjust with C, S, and L accordingly if data is larger)
      serialized_instruction << [@data.length].pack("C")

      # Serialize the actual data in binary format
      serialized_instruction << @data
      serialized_instruction
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
solana-ruby-web3js-2.1.2 lib/solana_ruby/transaction_instruction.rb
solana-ruby-web3js-2.1.1 lib/solana_ruby/transaction_instruction.rb
solana-ruby-web3js-2.1.0 lib/solana_ruby/transaction_instruction.rb
solana-ruby-web3js-2.0.2 lib/solana_ruby/transaction_instruction.rb
solana-ruby-web3js-2.0.1 lib/solana_ruby/transaction_instruction.rb
solana-ruby-web3js-2.0.0beta2 lib/solana_ruby/transaction_instruction.rb
solana-ruby-web3js-2.0.0beta1 lib/solana_ruby/transaction_instruction.rb
solana-ruby-web3js-2.0.0 lib/solana_ruby/transaction_instruction.rb
solana-ruby-web3js-1.0.1.beta4 lib/solana_ruby/transaction_instruction.rb