Module: Solana::Ruby::Kit::RpcParsedTypes

Extended by:
T::Sig
Defined in:
lib/solana/ruby/kit/rpc_parsed_types.rb,
lib/solana/ruby/kit/rpc_parsed_types/vote_account.rb,
lib/solana/ruby/kit/rpc_parsed_types/nonce_account.rb,
lib/solana/ruby/kit/rpc_parsed_types/stake_account.rb,
lib/solana/ruby/kit/rpc_parsed_types/token_account.rb,
lib/solana/ruby/kit/rpc_parsed_types/address_lookup_table.rb

Constant Summary collapse

VoteState =
T.let(
  Struct.new(:node, :authorized_voter, :authorized_withdrawer, :commission,
             :votes, :root_slot, :epoch_credits, keyword_init: true),
  T.untyped
)
ParsedVoteAccount =
T.let(
  Struct.new(:program, :parsed, :space, keyword_init: true),
  T.untyped
)
NonceAccountData =
T.let(
  Struct.new(:authority, :blockhash, :fee_calculator, keyword_init: true),
  T.untyped
)
ParsedNonceAccount =
T.let(
  Struct.new(:program, :parsed, :space, keyword_init: true),
  T.untyped
)
StakeDelegation =
T.let(
  Struct.new(:stake, :voter, :activation_epoch, :deactivation_epoch,
             :warmup_cooldown_rate, keyword_init: true),
  T.untyped
)
StakeAccountData =
T.let(
  Struct.new(:type, :stake, :meta, keyword_init: true),
  T.untyped
)
ParsedStakeAccount =
T.let(
  Struct.new(:program, :parsed, :space, keyword_init: true),
  T.untyped
)
TokenAmount =

Parsed SPL Token amount.

T.let(
  Struct.new(:amount, :decimals, :ui_amount, :ui_amount_string, keyword_init: true),
  T.untyped
)
TokenAccountInfo =

Parsed SPL Token account data (inside jsonParsed account info).

T.let(
  Struct.new(:is_native, :mint, :owner, :state, :token_amount, keyword_init: true),
  T.untyped
)
ParsedTokenAccount =

Full parsed token account wrapper.

T.let(
  Struct.new(:program, :parsed, :space, keyword_init: true),
  T.untyped
)
AddressLookupTableData =
T.let(
  Struct.new(:deactivation_slot, :last_extended_slot, :addresses, keyword_init: true),
  T.untyped
)
ParsedAddressLookupTable =
T.let(
  Struct.new(:program, :parsed, :space, keyword_init: true),
  T.untyped
)

Class Method Summary collapse

Class Method Details

.parse_address_lookup_table(raw) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/solana/ruby/kit/rpc_parsed_types/address_lookup_table.rb', line 20

def parse_address_lookup_table(raw)
  info = raw.dig('parsed', 'info') || {}
  ParsedAddressLookupTable.new(
    program: raw['program'],
    space:   raw['space'],
    parsed:  AddressLookupTableData.new(
      deactivation_slot:  info['deactivationSlot'] ? Kernel.Integer(info['deactivationSlot']) : nil,
      last_extended_slot: info['lastExtendedSlot']  ? Kernel.Integer(info['lastExtendedSlot']) : nil,
      addresses:          Kernel.Array(info['addresses'])
    )
  )
end

.parse_nonce_account(raw) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/solana/ruby/kit/rpc_parsed_types/nonce_account.rb', line 20

def (raw)
  info = raw.dig('parsed', 'info') || {}
  ParsedNonceAccount.new(
    program: raw['program'],
    space:   raw['space'],
    parsed:  NonceAccountData.new(
      authority:      info['authority'],
      blockhash:      info['blockhash'],
      fee_calculator: info['feeCalculator']
    )
  )
end

.parse_stake_account(raw) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/solana/ruby/kit/rpc_parsed_types/stake_account.rb', line 26

def (raw)
  parsed = raw['parsed'] || {}
  info   = parsed['info'] || {}
  stake  = info['stake'] || {}
  deleg  = stake.dig('delegation') || {}

  delegation = StakeDelegation.new(
    stake:               deleg['stake'] ? Kernel.Integer(deleg['stake']) : nil,
    voter:               deleg['voter'],
    activation_epoch:    deleg['activationEpoch'] ? Kernel.Integer(deleg['activationEpoch']) : nil,
    deactivation_epoch:  deleg['deactivationEpoch'] ? Kernel.Integer(deleg['deactivationEpoch']) : nil,
    warmup_cooldown_rate: deleg['warmupCooldownRate']&.to_f
  )

  ParsedStakeAccount.new(
    program: raw['program'],
    space:   raw['space'],
    parsed:  StakeAccountData.new(
      type:  parsed['type'],
      stake: delegation,
      meta:  info['meta']
    )
  )
end

.parse_token_account(raw) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/solana/ruby/kit/rpc_parsed_types/token_account.rb', line 28

def (raw)
  info_raw = raw.dig('parsed', 'info') || {}
  ta_raw   = info_raw['tokenAmount'] || {}

  info = TokenAccountInfo.new(
    is_native:    info_raw['isNative'],
    mint:         info_raw['mint'],
    owner:        info_raw['owner'],
    state:        info_raw['state'],
    token_amount: TokenAmount.new(
      amount:           ta_raw['amount'],
      decimals:         Kernel.Integer(ta_raw.fetch('decimals', 0)),
      ui_amount:        ta_raw['uiAmount'],
      ui_amount_string: ta_raw['uiAmountString']
    )
  )

  ParsedTokenAccount.new(
    program: raw['program'],
    parsed:  info,
    space:   raw['space']
  )
end

.parse_vote_account(raw) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/solana/ruby/kit/rpc_parsed_types/vote_account.rb', line 21

def (raw)
  info = raw.dig('parsed', 'info') || {}
  ParsedVoteAccount.new(
    program: raw['program'],
    space:   raw['space'],
    parsed:  VoteState.new(
      node:                  info['nodePubkey'],
      authorized_voter:      info['authorizedVoters'],
      authorized_withdrawer: info['authorizedWithdrawer'],
      commission:            info['commission'] ? Kernel.Integer(info['commission']) : nil,
      votes:                 info['votes'],
      root_slot:             info['rootSlot'] ? Kernel.Integer(info['rootSlot']) : nil,
      epoch_credits:         info['epochCredits']
    )
  )
end