Module: Solana::Ruby::Kit::RpcTypes

Extended by:
T::Sig
Defined in:
lib/solana/ruby/kit/rpc_types/lamports.rb,
lib/solana/ruby/kit/rpc_types/commitment.rb,
lib/solana/ruby/kit/rpc_types/cluster_url.rb,
lib/solana/ruby/kit/rpc_types/account_info.rb

Defined Under Namespace

Classes: AccountInfoBase, AccountInfoWithBase64Data, AccountInfoWithJsonData, ClusterUrl, RpcContextualValue

Constant Summary collapse

Lamports =

The smallest denomination of SOL (1 SOL = 1_000_000_000 lamports). Mirrors TypeScript’s Lamports branded bigint. In Ruby, arbitrary-precision Integer replaces JS bigint with no loss of range.

Valid range: 0 .. 18_446_744_073_709_551_615 (u64)

T.type_alias { Integer }
LAMPORTS_U64_MAX =
T.let(T.unsafe(2**64 - 1), Integer)
Commitment =

Network confirmation level for an RPC request. Mirrors TypeScript’s ‘Commitment = ’finalized’ | ‘confirmed’ | ‘processed’‘.

Each level is a measure of how many validators have confirmed a block:

- :finalized  
T.type_alias { Symbol }
FINALIZED =
T.let(:finalized, Symbol)
CONFIRMED =
T.let(:confirmed, Symbol)
PROCESSED =
T.let(:processed, Symbol)
VALID_COMMITMENTS =
T.let(
  [FINALIZED, CONFIRMED, PROCESSED].freeze,
  T::Array[Symbol]
)
MAINNET_URL =

Well-known cluster endpoint URLs.

T.let('https://api.mainnet-beta.solana.com', String)
DEVNET_URL =
T.let('https://api.devnet.solana.com',       String)
TESTNET_URL =
T.let('https://api.testnet.solana.com',      String)

Class Method Summary collapse

Class Method Details

.assert_lamports!(value) ⇒ Object



30
31
32
33
# File 'lib/solana/ruby/kit/rpc_types/lamports.rb', line 30

def assert_lamports!(value)
  Kernel.raise SolanaError.new(:SOLANA_ERROR__LAMPORTS__AMOUNT_MUST_BE_POSITIVE) if value.is_a?(Integer) && value < 0
  Kernel.raise SolanaError.new(:SOLANA_ERROR__LAMPORTS__AMOUNT_OUT_OF_RANGE) unless lamports?(value)
end

.cluster_url(url) ⇒ Object



52
53
54
# File 'lib/solana/ruby/kit/rpc_types/cluster_url.rb', line 52

def cluster_url(url)
  ClusterUrl.new(url: url, cluster: nil)
end

.commitment?(value) ⇒ Boolean

Returns:



48
49
50
# File 'lib/solana/ruby/kit/rpc_types/commitment.rb', line 48

def commitment?(value)
  VALID_COMMITMENTS.include?(value)
end

.commitment_comparator(a, b) ⇒ Object



42
43
44
# File 'lib/solana/ruby/kit/rpc_types/commitment.rb', line 42

def commitment_comparator(a, b)
  commitment_score(a) <=> commitment_score(b)
end

.commitment_score(commitment) ⇒ Object



30
31
32
33
34
35
36
37
# File 'lib/solana/ruby/kit/rpc_types/commitment.rb', line 30

def commitment_score(commitment)
  case commitment
  when FINALIZED then 2
  when CONFIRMED then 1
  when PROCESSED then 0
  else Kernel.raise ArgumentError, "Unknown commitment: #{commitment.inspect}"
  end
end

.devnet(url = DEVNET_URL) ⇒ Object



39
40
41
# File 'lib/solana/ruby/kit/rpc_types/cluster_url.rb', line 39

def devnet(url = DEVNET_URL)
  ClusterUrl.new(url: url, cluster: :devnet)
end

.lamports(value) ⇒ Object



38
39
40
41
# File 'lib/solana/ruby/kit/rpc_types/lamports.rb', line 38

def lamports(value)
  assert_lamports!(value)
  value
end

.lamports?(value) ⇒ Boolean

Returns:



23
24
25
# File 'lib/solana/ruby/kit/rpc_types/lamports.rb', line 23

def lamports?(value)
  !!(value.is_a?(Integer) && value >= 0 && value <= LAMPORTS_U64_MAX)
end

.mainnet(url = MAINNET_URL) ⇒ Object



32
33
34
# File 'lib/solana/ruby/kit/rpc_types/cluster_url.rb', line 32

def mainnet(url = MAINNET_URL)
  ClusterUrl.new(url: url, cluster: :mainnet)
end

.testnet(url = TESTNET_URL) ⇒ Object



46
47
48
# File 'lib/solana/ruby/kit/rpc_types/cluster_url.rb', line 46

def testnet(url = TESTNET_URL)
  ClusterUrl.new(url: url, cluster: :testnet)
end