solana-ruby-kit 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. checksums.yaml +7 -0
  2. data/lib/core_extensions/tapioca/name_patch.rb +32 -0
  3. data/lib/core_extensions/tapioca/required_ancestors.rb +13 -0
  4. data/lib/generators/solana/ruby/kit/install/install_generator.rb +17 -0
  5. data/lib/generators/solana/ruby/kit/install/templates/solana_ruby_kit.rb.tt +8 -0
  6. data/lib/solana/ruby/kit/accounts/account.rb +47 -0
  7. data/lib/solana/ruby/kit/accounts/maybe_account.rb +86 -0
  8. data/lib/solana/ruby/kit/accounts.rb +6 -0
  9. data/lib/solana/ruby/kit/addresses/address.rb +133 -0
  10. data/lib/solana/ruby/kit/addresses/curve.rb +112 -0
  11. data/lib/solana/ruby/kit/addresses/program_derived_address.rb +155 -0
  12. data/lib/solana/ruby/kit/addresses/public_key.rb +39 -0
  13. data/lib/solana/ruby/kit/addresses.rb +11 -0
  14. data/lib/solana/ruby/kit/codecs/bytes.rb +58 -0
  15. data/lib/solana/ruby/kit/codecs/codec.rb +135 -0
  16. data/lib/solana/ruby/kit/codecs/data_structures.rb +177 -0
  17. data/lib/solana/ruby/kit/codecs/decoder.rb +43 -0
  18. data/lib/solana/ruby/kit/codecs/encoder.rb +52 -0
  19. data/lib/solana/ruby/kit/codecs/numbers.rb +217 -0
  20. data/lib/solana/ruby/kit/codecs/strings.rb +116 -0
  21. data/lib/solana/ruby/kit/codecs.rb +25 -0
  22. data/lib/solana/ruby/kit/configuration.rb +48 -0
  23. data/lib/solana/ruby/kit/encoding/base58.rb +62 -0
  24. data/lib/solana/ruby/kit/errors.rb +226 -0
  25. data/lib/solana/ruby/kit/fast_stable_stringify.rb +62 -0
  26. data/lib/solana/ruby/kit/functional.rb +29 -0
  27. data/lib/solana/ruby/kit/instruction_plans/plans.rb +27 -0
  28. data/lib/solana/ruby/kit/instruction_plans.rb +47 -0
  29. data/lib/solana/ruby/kit/instructions/accounts.rb +80 -0
  30. data/lib/solana/ruby/kit/instructions/instruction.rb +71 -0
  31. data/lib/solana/ruby/kit/instructions/roles.rb +84 -0
  32. data/lib/solana/ruby/kit/instructions.rb +7 -0
  33. data/lib/solana/ruby/kit/keys/key_pair.rb +84 -0
  34. data/lib/solana/ruby/kit/keys/private_key.rb +39 -0
  35. data/lib/solana/ruby/kit/keys/public_key.rb +31 -0
  36. data/lib/solana/ruby/kit/keys/signatures.rb +171 -0
  37. data/lib/solana/ruby/kit/keys.rb +11 -0
  38. data/lib/solana/ruby/kit/offchain_messages/codec.rb +107 -0
  39. data/lib/solana/ruby/kit/offchain_messages/message.rb +22 -0
  40. data/lib/solana/ruby/kit/offchain_messages.rb +16 -0
  41. data/lib/solana/ruby/kit/options/option.rb +132 -0
  42. data/lib/solana/ruby/kit/options.rb +5 -0
  43. data/lib/solana/ruby/kit/plugin_core.rb +58 -0
  44. data/lib/solana/ruby/kit/programs.rb +42 -0
  45. data/lib/solana/ruby/kit/promises.rb +85 -0
  46. data/lib/solana/ruby/kit/railtie.rb +18 -0
  47. data/lib/solana/ruby/kit/rpc/api/get_account_info.rb +76 -0
  48. data/lib/solana/ruby/kit/rpc/api/get_balance.rb +41 -0
  49. data/lib/solana/ruby/kit/rpc/api/get_block_height.rb +29 -0
  50. data/lib/solana/ruby/kit/rpc/api/get_epoch_info.rb +47 -0
  51. data/lib/solana/ruby/kit/rpc/api/get_latest_blockhash.rb +52 -0
  52. data/lib/solana/ruby/kit/rpc/api/get_minimum_balance_for_rent_exemption.rb +29 -0
  53. data/lib/solana/ruby/kit/rpc/api/get_multiple_accounts.rb +56 -0
  54. data/lib/solana/ruby/kit/rpc/api/get_program_accounts.rb +60 -0
  55. data/lib/solana/ruby/kit/rpc/api/get_signature_statuses.rb +56 -0
  56. data/lib/solana/ruby/kit/rpc/api/get_slot.rb +30 -0
  57. data/lib/solana/ruby/kit/rpc/api/get_token_account_balance.rb +38 -0
  58. data/lib/solana/ruby/kit/rpc/api/get_token_accounts_by_owner.rb +48 -0
  59. data/lib/solana/ruby/kit/rpc/api/get_transaction.rb +36 -0
  60. data/lib/solana/ruby/kit/rpc/api/get_vote_accounts.rb +62 -0
  61. data/lib/solana/ruby/kit/rpc/api/is_blockhash_valid.rb +41 -0
  62. data/lib/solana/ruby/kit/rpc/api/request_airdrop.rb +35 -0
  63. data/lib/solana/ruby/kit/rpc/api/send_transaction.rb +61 -0
  64. data/lib/solana/ruby/kit/rpc/api/simulate_transaction.rb +47 -0
  65. data/lib/solana/ruby/kit/rpc/client.rb +83 -0
  66. data/lib/solana/ruby/kit/rpc/transport.rb +137 -0
  67. data/lib/solana/ruby/kit/rpc.rb +13 -0
  68. data/lib/solana/ruby/kit/rpc_parsed_types/address_lookup_table.rb +33 -0
  69. data/lib/solana/ruby/kit/rpc_parsed_types/nonce_account.rb +33 -0
  70. data/lib/solana/ruby/kit/rpc_parsed_types/stake_account.rb +51 -0
  71. data/lib/solana/ruby/kit/rpc_parsed_types/token_account.rb +52 -0
  72. data/lib/solana/ruby/kit/rpc_parsed_types/vote_account.rb +38 -0
  73. data/lib/solana/ruby/kit/rpc_parsed_types.rb +16 -0
  74. data/lib/solana/ruby/kit/rpc_subscriptions/api/account_notifications.rb +29 -0
  75. data/lib/solana/ruby/kit/rpc_subscriptions/api/logs_notifications.rb +28 -0
  76. data/lib/solana/ruby/kit/rpc_subscriptions/api/program_notifications.rb +30 -0
  77. data/lib/solana/ruby/kit/rpc_subscriptions/api/root_notifications.rb +19 -0
  78. data/lib/solana/ruby/kit/rpc_subscriptions/api/signature_notifications.rb +28 -0
  79. data/lib/solana/ruby/kit/rpc_subscriptions/api/slot_notifications.rb +19 -0
  80. data/lib/solana/ruby/kit/rpc_subscriptions/autopinger.rb +42 -0
  81. data/lib/solana/ruby/kit/rpc_subscriptions/client.rb +80 -0
  82. data/lib/solana/ruby/kit/rpc_subscriptions/subscription.rb +58 -0
  83. data/lib/solana/ruby/kit/rpc_subscriptions/transport.rb +163 -0
  84. data/lib/solana/ruby/kit/rpc_subscriptions.rb +12 -0
  85. data/lib/solana/ruby/kit/rpc_types/account_info.rb +53 -0
  86. data/lib/solana/ruby/kit/rpc_types/cluster_url.rb +56 -0
  87. data/lib/solana/ruby/kit/rpc_types/commitment.rb +52 -0
  88. data/lib/solana/ruby/kit/rpc_types/lamports.rb +43 -0
  89. data/lib/solana/ruby/kit/rpc_types.rb +8 -0
  90. data/lib/solana/ruby/kit/signers/keypair_signer.rb +126 -0
  91. data/lib/solana/ruby/kit/signers.rb +5 -0
  92. data/lib/solana/ruby/kit/subscribable/async_iterable.rb +80 -0
  93. data/lib/solana/ruby/kit/subscribable/data_publisher.rb +90 -0
  94. data/lib/solana/ruby/kit/subscribable.rb +13 -0
  95. data/lib/solana/ruby/kit/sysvars/addresses.rb +19 -0
  96. data/lib/solana/ruby/kit/sysvars/clock.rb +37 -0
  97. data/lib/solana/ruby/kit/sysvars/epoch_schedule.rb +34 -0
  98. data/lib/solana/ruby/kit/sysvars/last_restart_slot.rb +22 -0
  99. data/lib/solana/ruby/kit/sysvars/rent.rb +29 -0
  100. data/lib/solana/ruby/kit/sysvars.rb +33 -0
  101. data/lib/solana/ruby/kit/transaction_confirmation.rb +159 -0
  102. data/lib/solana/ruby/kit/transaction_messages/transaction_message.rb +168 -0
  103. data/lib/solana/ruby/kit/transaction_messages.rb +5 -0
  104. data/lib/solana/ruby/kit/transactions/transaction.rb +135 -0
  105. data/lib/solana/ruby/kit/transactions.rb +5 -0
  106. data/lib/solana/ruby/kit/version.rb +10 -0
  107. data/lib/solana/ruby/kit.rb +100 -0
  108. data/solana-ruby-kit.gemspec +29 -0
  109. metadata +311 -0
@@ -0,0 +1,135 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ require_relative '../addresses/address'
5
+ require_relative '../keys/signatures'
6
+ require_relative '../errors'
7
+
8
+ module Solana::Ruby::Kit
9
+ module Transactions
10
+ extend T::Sig
11
+ # The wire-encoded bytes of a compiled transaction message.
12
+ # Mirrors TypeScript's `TransactionMessageBytes` (branded Uint8Array).
13
+ TransactionMessageBytes = T.type_alias { String } # binary String
14
+
15
+ # An ordered map of signer addresses to their Ed25519 signatures (or nil
16
+ # when the address has been reserved for signing but not yet signed).
17
+ # Mirrors TypeScript's `SignaturesMap = OrderedMap<Address, SignatureBytes | null>`.
18
+ SignaturesMap = T.type_alias { T::Hash[String, T.nilable(String)] }
19
+
20
+ # A compiled, signable Solana transaction.
21
+ # Mirrors TypeScript's `Transaction` type.
22
+ class Transaction < T::Struct
23
+ # Compiled transaction message bytes (wire format).
24
+ const :message_bytes, String # binary
25
+ # Signer address → 64-byte signature (or nil if not yet signed).
26
+ const :signatures, T::Hash[String, T.nilable(String)]
27
+ end
28
+
29
+ # Marks that every required signer has provided a signature.
30
+ # Mirrors TypeScript's `FullySignedTransaction` nominal type.
31
+ # T::Struct is final; cannot subclass Transaction, so we use a parallel struct.
32
+ class FullySignedTransaction < T::Struct
33
+ const :message_bytes, String
34
+ const :signatures, T::Hash[String, T.nilable(String)]
35
+ end
36
+
37
+ module_function
38
+
39
+ # Returns the base58-encoded signature that uniquely identifies a transaction.
40
+ # This is the fee payer's signature (first entry in the signatures map).
41
+ # Mirrors `getSignatureFromTransaction(transaction)`.
42
+ sig { params(transaction: Transaction).returns(Keys::Signature) }
43
+ def get_signature_from_transaction(transaction)
44
+ sig_bytes = transaction.signatures.values.first
45
+ Kernel.raise SolanaError.new(:SOLANA_ERROR__TRANSACTION__FEE_PAYER_SIGNATURE_MISSING) unless sig_bytes
46
+
47
+ Keys.encode_signature(Keys::SignatureBytes.new(sig_bytes))
48
+ end
49
+
50
+ # Returns true if every slot in the signatures map is filled.
51
+ # Mirrors `isFullySignedTransaction(transaction)`.
52
+ sig { params(transaction: Transaction).returns(T::Boolean) }
53
+ def fully_signed_transaction?(transaction)
54
+ transaction.signatures.values.all? { |sig| !sig.nil? }
55
+ end
56
+
57
+ # Raises SolanaError unless every signer slot is filled.
58
+ # Mirrors `assertIsFullySignedTransaction(transaction)`.
59
+ sig { params(transaction: Transaction).void }
60
+ def assert_fully_signed_transaction!(transaction)
61
+ missing = transaction.signatures.filter_map { |addr, sig| addr if sig.nil? }
62
+ return if missing.empty?
63
+
64
+ Kernel.raise SolanaError.new(
65
+ :SOLANA_ERROR__TRANSACTION__SIGNATURES_MISSING,
66
+ addresses: missing
67
+ )
68
+ end
69
+
70
+ # Signs a transaction with one or more RbNaCl::SigningKey objects.
71
+ # Only keys whose address appears in `transaction.signatures` are applied.
72
+ # Raises SolanaError if a key is not expected to sign this transaction.
73
+ #
74
+ # Mirrors `partiallySignTransaction(keyPairs, transaction)`.
75
+ # TypeScript version is async (Web Crypto); Ruby version is synchronous.
76
+ sig do
77
+ params(
78
+ signing_keys: T::Array[T.untyped], # Array<RbNaCl::SigningKey>
79
+ transaction: Transaction
80
+ ).returns(Transaction)
81
+ end
82
+ def partially_sign_transaction(signing_keys, transaction)
83
+ new_signatures = transaction.signatures.dup
84
+ unexpected = T.let([], T::Array[String])
85
+
86
+ signing_keys.each do |signing_key|
87
+ verify_key = signing_key.verify_key
88
+ addr_str = Addresses.encode_address(verify_key.to_bytes)
89
+
90
+ unless new_signatures.key?(addr_str)
91
+ unexpected << addr_str
92
+ next
93
+ end
94
+
95
+ sig_bytes = Keys.sign_bytes(signing_key, transaction.message_bytes)
96
+ existing = new_signatures[addr_str]
97
+
98
+ next if existing && existing == sig_bytes.value
99
+
100
+ new_signatures[addr_str] = sig_bytes.value
101
+ end
102
+
103
+ if unexpected.any?
104
+ Kernel.raise SolanaError.new(
105
+ :SOLANA_ERROR__TRANSACTION__ADDRESSES_CANNOT_SIGN_TRANSACTION,
106
+ expected_addresses: transaction.signatures.keys,
107
+ unexpected_addresses: unexpected
108
+ )
109
+ end
110
+
111
+ Transaction.new(
112
+ message_bytes: transaction.message_bytes,
113
+ signatures: new_signatures
114
+ )
115
+ end
116
+
117
+ # Signs a transaction and asserts it is fully signed before returning.
118
+ # Mirrors `signTransaction(keyPairs, transaction)`.
119
+ sig do
120
+ params(
121
+ signing_keys: T::Array[T.untyped],
122
+ transaction: Transaction
123
+ ).returns(FullySignedTransaction)
124
+ end
125
+ def sign_transaction(signing_keys, transaction)
126
+ signed = partially_sign_transaction(signing_keys, transaction)
127
+ assert_fully_signed_transaction!(signed)
128
+
129
+ FullySignedTransaction.new(
130
+ message_bytes: signed.message_bytes,
131
+ signatures: signed.signatures
132
+ )
133
+ end
134
+ end
135
+ end
@@ -0,0 +1,5 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ # Transaction types and signing utilities — mirrors @solana/transactions.
5
+ require_relative 'transactions/transaction'
@@ -0,0 +1,10 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ module Solana
5
+ module Ruby
6
+ module Kit
7
+ VERSION = '0.1.0'
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,100 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ require 'sorbet-runtime'
5
+ require_relative 'kit/version'
6
+ require_relative 'kit/configuration'
7
+
8
+ # ── Foundational utilities ────────────────────────────────────────────────────
9
+ require_relative 'kit/errors'
10
+ require_relative 'kit/encoding/base58'
11
+ require_relative 'kit/functional'
12
+ require_relative 'kit/options'
13
+ require_relative 'kit/fast_stable_stringify'
14
+ require_relative 'kit/promises'
15
+
16
+ # ── Cryptography: addresses & keys ───────────────────────────────────────────
17
+ require_relative 'kit/addresses'
18
+ require_relative 'kit/keys'
19
+
20
+ # ── On-chain data model ──────────────────────────────────────────────────────
21
+ require_relative 'kit/accounts'
22
+ require_relative 'kit/instructions'
23
+
24
+ # ── Transaction pipeline ─────────────────────────────────────────────────────
25
+ require_relative 'kit/transaction_messages'
26
+ require_relative 'kit/transactions'
27
+ require_relative 'kit/signers'
28
+
29
+ # ── Network / RPC ─────────────────────────────────────────────────────────────
30
+ require_relative 'kit/rpc_types'
31
+ require_relative 'kit/rpc'
32
+ require_relative 'kit/rpc_parsed_types'
33
+
34
+ # ── Codec system ─────────────────────────────────────────────────────────────
35
+ require_relative 'kit/codecs'
36
+
37
+ # ── Pub/sub + WebSocket subscriptions ────────────────────────────────────────
38
+ require_relative 'kit/subscribable'
39
+ require_relative 'kit/rpc_subscriptions'
40
+
41
+ # ── Plugin system ─────────────────────────────────────────────────────────────
42
+ require_relative 'kit/plugin_core'
43
+
44
+ # ── Higher-level helpers ──────────────────────────────────────────────────────
45
+ require_relative 'kit/offchain_messages'
46
+ require_relative 'kit/programs'
47
+ require_relative 'kit/sysvars'
48
+ require_relative 'kit/transaction_confirmation'
49
+ require_relative 'kit/instruction_plans'
50
+
51
+ # Solana::Ruby::Kit is a Ruby translation of @anza-xyz/kit — the JavaScript SDK for
52
+ # building Solana apps — into idiomatic Ruby with Sorbet static types.
53
+ #
54
+ # Translated packages:
55
+ # Solana::Ruby::Kit::Functional — pipe() (@solana/functional)
56
+ # Solana::Ruby::Kit::Options — Some/None/Option (@solana/options)
57
+ # Solana::Ruby::Kit::Addresses — address validation (@solana/addresses)
58
+ # Solana::Ruby::Kit::Keys — Ed25519 keys (@solana/keys)
59
+ # Solana::Ruby::Kit::Accounts — account structs (@solana/accounts)
60
+ # Solana::Ruby::Kit::Instructions — instruction types (@solana/instructions)
61
+ # Solana::Ruby::Kit::TransactionMessages — message builder (@solana/transaction-messages)
62
+ # Solana::Ruby::Kit::Transactions — signing + wire TX (@solana/transactions)
63
+ # Solana::Ruby::Kit::Signers — KeyPairSigner (@solana/signers)
64
+ # Solana::Ruby::Kit::RpcTypes — types + cluster URLs (@solana/rpc-types)
65
+ # Solana::Ruby::Kit::Rpc — JSON-RPC client (@solana/rpc)
66
+ # Solana::Ruby::Kit::RpcParsedTypes — jsonParsed structs (@solana/rpc-parsed-types)
67
+ # Solana::Ruby::Kit::FastStableStringify — deterministic JSON (@solana/fast-stable-stringify)
68
+ # Solana::Ruby::Kit::Promises — safe_race + with_timeout (@solana/promises)
69
+ # Solana::Ruby::Kit::Codecs — Encoder/Decoder codecs (@solana/codecs)
70
+ # Solana::Ruby::Kit::Subscribable — DataPublisher + Enum. (@solana/subscribable)
71
+ # Solana::Ruby::Kit::RpcSubscriptions — WebSocket subscriptions (@solana/rpc-subscriptions)
72
+ # Solana::Ruby::Kit::PluginCore — plugin client builder (@solana/rpc-types plugin)
73
+ # Solana::Ruby::Kit::OffchainMessages — off-chain signing (@solana/signers)
74
+ # Solana::Ruby::Kit::Programs — program error helpers (@solana/programs)
75
+ # Solana::Ruby::Kit::Sysvars — sysvar fetch/decode (@solana/sysvars)
76
+ # Solana::Ruby::Kit::TransactionConfirmation — confirmation polling (@solana/transaction-confirmation)
77
+ # Solana::Ruby::Kit::InstructionPlans — multi-tx planning (@solana/instruction-plans)
78
+
79
+ module Solana::Ruby::Kit
80
+ extend T::Sig
81
+
82
+ @configuration = T.let(Configuration.new, Configuration)
83
+
84
+ sig { returns(Configuration) }
85
+ def self.configuration
86
+ @configuration
87
+ end
88
+
89
+ sig { params(block: T.proc.params(arg0: Configuration).void).void }
90
+ def self.configure(&block)
91
+ block.call(@configuration)
92
+ end
93
+
94
+ sig { returns(Rpc::Client) }
95
+ def self.rpc_client
96
+ Rpc::Client.new(configuration.rpc_url)
97
+ end
98
+ end
99
+
100
+ require_relative 'kit/railtie' if defined?(Rails::Railtie)
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'lib/solana/ruby/kit/version'
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = 'solana-ruby-kit'
7
+ spec.version = Solana::Ruby::Kit::VERSION
8
+ spec.authors = ['Paul Zupan']
9
+ spec.summary = 'Ruby port of the Anza TypeScript SDK (@anza-xyz/kit)'
10
+ spec.license = 'MIT'
11
+ spec.required_ruby_version = '>= 3.2.0'
12
+ spec.require_paths = ['lib']
13
+
14
+ spec.files = Dir['lib/**/*.rb', 'lib/**/*.tt', 'solana-ruby-kit.gemspec']
15
+
16
+ spec.add_dependency 'openssl', '~> 3.3'
17
+ spec.add_dependency 'sorbet-runtime'
18
+ spec.add_dependency 'rbnacl'
19
+ spec.add_dependency 'websocket-client-simple'
20
+
21
+ spec.add_development_dependency 'sorbet'
22
+ spec.add_development_dependency 'drb'
23
+ spec.add_development_dependency 'sexp_processor'
24
+ spec.add_development_dependency 'parser'
25
+ spec.add_development_dependency 'tapioca'
26
+ spec.add_development_dependency 'rake'
27
+ spec.add_development_dependency 'rspec'
28
+ spec.add_development_dependency 'webmock'
29
+ end
metadata ADDED
@@ -0,0 +1,311 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: solana-ruby-kit
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Paul Zupan
8
+ bindir: bin
9
+ cert_chain: []
10
+ date: 2026-02-21 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: openssl
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: '3.3'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: '3.3'
26
+ - !ruby/object:Gem::Dependency
27
+ name: sorbet-runtime
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ - !ruby/object:Gem::Dependency
41
+ name: rbnacl
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ - !ruby/object:Gem::Dependency
55
+ name: websocket-client-simple
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ type: :runtime
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ - !ruby/object:Gem::Dependency
69
+ name: sorbet
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ type: :development
76
+ prerelease: false
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ - !ruby/object:Gem::Dependency
83
+ name: drb
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ type: :development
90
+ prerelease: false
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ - !ruby/object:Gem::Dependency
97
+ name: sexp_processor
98
+ requirement: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ type: :development
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: parser
112
+ requirement: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ type: :development
118
+ prerelease: false
119
+ version_requirements: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
124
+ - !ruby/object:Gem::Dependency
125
+ name: tapioca
126
+ requirement: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: '0'
131
+ type: :development
132
+ prerelease: false
133
+ version_requirements: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ version: '0'
138
+ - !ruby/object:Gem::Dependency
139
+ name: rake
140
+ requirement: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - ">="
143
+ - !ruby/object:Gem::Version
144
+ version: '0'
145
+ type: :development
146
+ prerelease: false
147
+ version_requirements: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - ">="
150
+ - !ruby/object:Gem::Version
151
+ version: '0'
152
+ - !ruby/object:Gem::Dependency
153
+ name: rspec
154
+ requirement: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - ">="
157
+ - !ruby/object:Gem::Version
158
+ version: '0'
159
+ type: :development
160
+ prerelease: false
161
+ version_requirements: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - ">="
164
+ - !ruby/object:Gem::Version
165
+ version: '0'
166
+ - !ruby/object:Gem::Dependency
167
+ name: webmock
168
+ requirement: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - ">="
171
+ - !ruby/object:Gem::Version
172
+ version: '0'
173
+ type: :development
174
+ prerelease: false
175
+ version_requirements: !ruby/object:Gem::Requirement
176
+ requirements:
177
+ - - ">="
178
+ - !ruby/object:Gem::Version
179
+ version: '0'
180
+ executables: []
181
+ extensions: []
182
+ extra_rdoc_files: []
183
+ files:
184
+ - lib/core_extensions/tapioca/name_patch.rb
185
+ - lib/core_extensions/tapioca/required_ancestors.rb
186
+ - lib/generators/solana/ruby/kit/install/install_generator.rb
187
+ - lib/generators/solana/ruby/kit/install/templates/solana_ruby_kit.rb.tt
188
+ - lib/solana/ruby/kit.rb
189
+ - lib/solana/ruby/kit/accounts.rb
190
+ - lib/solana/ruby/kit/accounts/account.rb
191
+ - lib/solana/ruby/kit/accounts/maybe_account.rb
192
+ - lib/solana/ruby/kit/addresses.rb
193
+ - lib/solana/ruby/kit/addresses/address.rb
194
+ - lib/solana/ruby/kit/addresses/curve.rb
195
+ - lib/solana/ruby/kit/addresses/program_derived_address.rb
196
+ - lib/solana/ruby/kit/addresses/public_key.rb
197
+ - lib/solana/ruby/kit/codecs.rb
198
+ - lib/solana/ruby/kit/codecs/bytes.rb
199
+ - lib/solana/ruby/kit/codecs/codec.rb
200
+ - lib/solana/ruby/kit/codecs/data_structures.rb
201
+ - lib/solana/ruby/kit/codecs/decoder.rb
202
+ - lib/solana/ruby/kit/codecs/encoder.rb
203
+ - lib/solana/ruby/kit/codecs/numbers.rb
204
+ - lib/solana/ruby/kit/codecs/strings.rb
205
+ - lib/solana/ruby/kit/configuration.rb
206
+ - lib/solana/ruby/kit/encoding/base58.rb
207
+ - lib/solana/ruby/kit/errors.rb
208
+ - lib/solana/ruby/kit/fast_stable_stringify.rb
209
+ - lib/solana/ruby/kit/functional.rb
210
+ - lib/solana/ruby/kit/instruction_plans.rb
211
+ - lib/solana/ruby/kit/instruction_plans/plans.rb
212
+ - lib/solana/ruby/kit/instructions.rb
213
+ - lib/solana/ruby/kit/instructions/accounts.rb
214
+ - lib/solana/ruby/kit/instructions/instruction.rb
215
+ - lib/solana/ruby/kit/instructions/roles.rb
216
+ - lib/solana/ruby/kit/keys.rb
217
+ - lib/solana/ruby/kit/keys/key_pair.rb
218
+ - lib/solana/ruby/kit/keys/private_key.rb
219
+ - lib/solana/ruby/kit/keys/public_key.rb
220
+ - lib/solana/ruby/kit/keys/signatures.rb
221
+ - lib/solana/ruby/kit/offchain_messages.rb
222
+ - lib/solana/ruby/kit/offchain_messages/codec.rb
223
+ - lib/solana/ruby/kit/offchain_messages/message.rb
224
+ - lib/solana/ruby/kit/options.rb
225
+ - lib/solana/ruby/kit/options/option.rb
226
+ - lib/solana/ruby/kit/plugin_core.rb
227
+ - lib/solana/ruby/kit/programs.rb
228
+ - lib/solana/ruby/kit/promises.rb
229
+ - lib/solana/ruby/kit/railtie.rb
230
+ - lib/solana/ruby/kit/rpc.rb
231
+ - lib/solana/ruby/kit/rpc/api/get_account_info.rb
232
+ - lib/solana/ruby/kit/rpc/api/get_balance.rb
233
+ - lib/solana/ruby/kit/rpc/api/get_block_height.rb
234
+ - lib/solana/ruby/kit/rpc/api/get_epoch_info.rb
235
+ - lib/solana/ruby/kit/rpc/api/get_latest_blockhash.rb
236
+ - lib/solana/ruby/kit/rpc/api/get_minimum_balance_for_rent_exemption.rb
237
+ - lib/solana/ruby/kit/rpc/api/get_multiple_accounts.rb
238
+ - lib/solana/ruby/kit/rpc/api/get_program_accounts.rb
239
+ - lib/solana/ruby/kit/rpc/api/get_signature_statuses.rb
240
+ - lib/solana/ruby/kit/rpc/api/get_slot.rb
241
+ - lib/solana/ruby/kit/rpc/api/get_token_account_balance.rb
242
+ - lib/solana/ruby/kit/rpc/api/get_token_accounts_by_owner.rb
243
+ - lib/solana/ruby/kit/rpc/api/get_transaction.rb
244
+ - lib/solana/ruby/kit/rpc/api/get_vote_accounts.rb
245
+ - lib/solana/ruby/kit/rpc/api/is_blockhash_valid.rb
246
+ - lib/solana/ruby/kit/rpc/api/request_airdrop.rb
247
+ - lib/solana/ruby/kit/rpc/api/send_transaction.rb
248
+ - lib/solana/ruby/kit/rpc/api/simulate_transaction.rb
249
+ - lib/solana/ruby/kit/rpc/client.rb
250
+ - lib/solana/ruby/kit/rpc/transport.rb
251
+ - lib/solana/ruby/kit/rpc_parsed_types.rb
252
+ - lib/solana/ruby/kit/rpc_parsed_types/address_lookup_table.rb
253
+ - lib/solana/ruby/kit/rpc_parsed_types/nonce_account.rb
254
+ - lib/solana/ruby/kit/rpc_parsed_types/stake_account.rb
255
+ - lib/solana/ruby/kit/rpc_parsed_types/token_account.rb
256
+ - lib/solana/ruby/kit/rpc_parsed_types/vote_account.rb
257
+ - lib/solana/ruby/kit/rpc_subscriptions.rb
258
+ - lib/solana/ruby/kit/rpc_subscriptions/api/account_notifications.rb
259
+ - lib/solana/ruby/kit/rpc_subscriptions/api/logs_notifications.rb
260
+ - lib/solana/ruby/kit/rpc_subscriptions/api/program_notifications.rb
261
+ - lib/solana/ruby/kit/rpc_subscriptions/api/root_notifications.rb
262
+ - lib/solana/ruby/kit/rpc_subscriptions/api/signature_notifications.rb
263
+ - lib/solana/ruby/kit/rpc_subscriptions/api/slot_notifications.rb
264
+ - lib/solana/ruby/kit/rpc_subscriptions/autopinger.rb
265
+ - lib/solana/ruby/kit/rpc_subscriptions/client.rb
266
+ - lib/solana/ruby/kit/rpc_subscriptions/subscription.rb
267
+ - lib/solana/ruby/kit/rpc_subscriptions/transport.rb
268
+ - lib/solana/ruby/kit/rpc_types.rb
269
+ - lib/solana/ruby/kit/rpc_types/account_info.rb
270
+ - lib/solana/ruby/kit/rpc_types/cluster_url.rb
271
+ - lib/solana/ruby/kit/rpc_types/commitment.rb
272
+ - lib/solana/ruby/kit/rpc_types/lamports.rb
273
+ - lib/solana/ruby/kit/signers.rb
274
+ - lib/solana/ruby/kit/signers/keypair_signer.rb
275
+ - lib/solana/ruby/kit/subscribable.rb
276
+ - lib/solana/ruby/kit/subscribable/async_iterable.rb
277
+ - lib/solana/ruby/kit/subscribable/data_publisher.rb
278
+ - lib/solana/ruby/kit/sysvars.rb
279
+ - lib/solana/ruby/kit/sysvars/addresses.rb
280
+ - lib/solana/ruby/kit/sysvars/clock.rb
281
+ - lib/solana/ruby/kit/sysvars/epoch_schedule.rb
282
+ - lib/solana/ruby/kit/sysvars/last_restart_slot.rb
283
+ - lib/solana/ruby/kit/sysvars/rent.rb
284
+ - lib/solana/ruby/kit/transaction_confirmation.rb
285
+ - lib/solana/ruby/kit/transaction_messages.rb
286
+ - lib/solana/ruby/kit/transaction_messages/transaction_message.rb
287
+ - lib/solana/ruby/kit/transactions.rb
288
+ - lib/solana/ruby/kit/transactions/transaction.rb
289
+ - lib/solana/ruby/kit/version.rb
290
+ - solana-ruby-kit.gemspec
291
+ licenses:
292
+ - MIT
293
+ metadata: {}
294
+ rdoc_options: []
295
+ require_paths:
296
+ - lib
297
+ required_ruby_version: !ruby/object:Gem::Requirement
298
+ requirements:
299
+ - - ">="
300
+ - !ruby/object:Gem::Version
301
+ version: 3.2.0
302
+ required_rubygems_version: !ruby/object:Gem::Requirement
303
+ requirements:
304
+ - - ">="
305
+ - !ruby/object:Gem::Version
306
+ version: '0'
307
+ requirements: []
308
+ rubygems_version: 3.6.2
309
+ specification_version: 4
310
+ summary: Ruby port of the Anza TypeScript SDK (@anza-xyz/kit)
311
+ test_files: []