solana-ruby 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 1a89b4b3a79a083057806945963669aab8ca3b312223ea7c1e13a41a26c0063b
4
+ data.tar.gz: 824eaaa7913f9b499bc6514f1d5fec3d48f3692f399a3205d069425ea32b328c
5
+ SHA512:
6
+ metadata.gz: 8317d94e7781fb218a31c73a2270daf7ccf5d782f4ec565e89c90994abf871827593a25cec9cb0c83e4bab9bc42a7fc30029c9b289785e3499d81f2c7549a8b9
7
+ data.tar.gz: e50e55dd5237008503167a603959cad90877ee88c1d43a434924d64db59688783de6445b3f8eb42e14575e2006a0dfc2635d324db6319683c7bf3494f1d701f7
@@ -0,0 +1,250 @@
1
+ require 'httparty'
2
+ require 'json'
3
+
4
+ module SolanaRB
5
+ class Client
6
+ include HTTParty
7
+ base_uri 'https://api.mainnet-beta.solana.com'
8
+
9
+ def initialize(api_key = nil)
10
+ @api_key = api_key
11
+ end
12
+
13
+ def get_account_info(pubkey, options = {})
14
+ request('getAccountInfo', [pubkey, options])
15
+ end
16
+
17
+ def get_balance(pubkey, options = {})
18
+ request('getBalance', [pubkey, options])
19
+ end
20
+
21
+ def get_block(slot_number, options = {})
22
+ request('getBlock', [slot_number, options])
23
+ end
24
+
25
+ def get_block_commitment(slot_number, options = {})
26
+ request('getBlockCommitment', [slot_number, options])
27
+ end
28
+
29
+ def get_block_height(options = {})
30
+ request('getBlockHeight', [options])
31
+ end
32
+
33
+ def get_block_production(options = {})
34
+ request('getBlockProduction', [options])
35
+ end
36
+
37
+ def get_block_time(slot_number, options = {})
38
+ request('getBlockTime', [slot_number, options])
39
+ end
40
+
41
+ def get_blocks(start_slot, end_slot, options = {})
42
+ request('getBlocks', [start_slot, end_slot, options])
43
+ end
44
+
45
+ def get_blocks_with_limit(start_slot, limit, options = {})
46
+ request('getBlocksWithLimit', [start_slot, limit, options])
47
+ end
48
+
49
+ def get_cluster_nodes(options = {})
50
+ request('getClusterNodes', [options])
51
+ end
52
+
53
+ def get_epoch_info(options = {})
54
+ request('getEpochInfo', [options])
55
+ end
56
+
57
+ def get_epoch_schedule(options = {})
58
+ request('getEpochSchedule', [options])
59
+ end
60
+
61
+ def get_fee_for_message(message, options = {})
62
+ request('getFeeForMessage', [message, options])
63
+ end
64
+
65
+ def get_first_available_block(options = {})
66
+ request('getFirstAvailableBlock', [options])
67
+ end
68
+
69
+ def get_genesis_hash(options = {})
70
+ request('getGenesisHash', [options])
71
+ end
72
+
73
+ def get_health(options = {})
74
+ request('getHealth', [options])
75
+ end
76
+
77
+ def get_highest_snapshot_slot(options = {})
78
+ request('getHighestSnapshotSlot', [options])
79
+ end
80
+
81
+ def get_identity(options = {})
82
+ request('getIdentity', [options])
83
+ end
84
+
85
+ def get_inflation_governor(options = {})
86
+ request('getInflationGovernor', [options])
87
+ end
88
+
89
+ def get_inflation_rate(options = {})
90
+ request('getInflationRate', [options])
91
+ end
92
+
93
+ def get_inflation_reward(addresses, options = {})
94
+ request('getInflationReward', [addresses, options])
95
+ end
96
+
97
+ def get_largest_accounts(options = {})
98
+ request('getLargestAccounts', [options])
99
+ end
100
+
101
+ def get_latest_blockhash(options = {})
102
+ request('getLatestBlockhash', [options])
103
+ end
104
+
105
+ def get_leader_schedule(options = {})
106
+ request('getLeaderSchedule', [options])
107
+ end
108
+
109
+ def get_max_retransmit_slot(options = {})
110
+ request('getMaxRetransmitSlot', [options])
111
+ end
112
+
113
+ def get_max_shred_insert_slot(options = {})
114
+ request('getMaxShredInsertSlot', [options])
115
+ end
116
+
117
+ def get_minimum_balance_for_rent_exemption(data_length, options = {})
118
+ request('getMinimumBalanceForRentExemption', [data_length, options])
119
+ end
120
+
121
+ def get_multiple_accounts(pubkeys, options = {})
122
+ request('getMultipleAccounts', [pubkeys, options])
123
+ end
124
+
125
+ def get_program_accounts(pubkey, options = {})
126
+ request('getProgramAccounts', [pubkey, options])
127
+ end
128
+
129
+ def get_recent_performance_samples(options = {})
130
+ request('getRecentPerformanceSamples', [options])
131
+ end
132
+
133
+ def get_recent_prioritization_fees(options = {})
134
+ request('getRecentPrioritizationFees', [options])
135
+ end
136
+
137
+ def get_signature_statuses(signatures, options = {})
138
+ request('getSignatureStatuses', [signatures, options])
139
+ end
140
+
141
+ def get_signatures_for_address(address, options = {})
142
+ request('getSignaturesForAddress', [address, options])
143
+ end
144
+
145
+ def get_slot(options = {})
146
+ request('getSlot', [options])
147
+ end
148
+
149
+ def get_slot_leader(options = {})
150
+ request('getSlotLeader', [options])
151
+ end
152
+
153
+ def get_slot_leaders(start_slot, limit, options = {})
154
+ request('getSlotLeaders', [start_slot, limit, options])
155
+ end
156
+
157
+ def get_stake_activation(pubkey, options = {})
158
+ request('getStakeActivation', [pubkey, options])
159
+ end
160
+
161
+ def get_stake_minimum_delegation(options = {})
162
+ request('getStakeMinimumDelegation', [options])
163
+ end
164
+
165
+ def get_supply(options = {})
166
+ request('getSupply', [options])
167
+ end
168
+
169
+ def get_token_account_balance(pubkey, options = {})
170
+ request('getTokenAccountBalance', [pubkey, options])
171
+ end
172
+
173
+ def get_token_accounts_by_delegate(delegate, opts = {}, options = {})
174
+ request('getTokenAccountsByDelegate', [delegate, opts, options])
175
+ end
176
+
177
+ def get_token_accounts_by_owner(owner, opts = {}, options = {})
178
+ request('getTokenAccountsByOwner', [owner, opts, options])
179
+ end
180
+
181
+ def get_token_largest_accounts(pubkey, options = {})
182
+ request('getTokenLargestAccounts', [pubkey, options])
183
+ end
184
+
185
+ def get_token_supply(pubkey, options = {})
186
+ request('getTokenSupply', [pubkey, options])
187
+ end
188
+
189
+ def get_transaction(signature, options = {})
190
+ request('getTransaction', [signature, options])
191
+ end
192
+
193
+ def get_transaction_count(options = {})
194
+ request('getTransactionCount', [options])
195
+ end
196
+
197
+ def get_version(options = {})
198
+ request('getVersion', [options])
199
+ end
200
+
201
+ def get_vote_accounts(options = {})
202
+ request('getVoteAccounts', [options])
203
+ end
204
+
205
+ def is_blockhash_valid(blockhash, options = {})
206
+ request('isBlockhashValid', [blockhash, options])
207
+ end
208
+
209
+ def minimum_ledger_slot(options = {})
210
+ request('minimumLedgerSlot', [options])
211
+ end
212
+
213
+ def request_airdrop(pubkey, lamports, options = {})
214
+ request('requestAirdrop', [pubkey, lamports, options])
215
+ end
216
+
217
+ def send_transaction(transaction, options = {})
218
+ request('sendTransaction', [transaction, options])
219
+ end
220
+
221
+ def simulate_transaction(transaction, options = {})
222
+ request('simulateTransaction', [transaction, options])
223
+ end
224
+
225
+ private
226
+
227
+ def request(method, params = [])
228
+ options = {
229
+ headers: { 'Content-Type' => 'application/json' },
230
+ body: {
231
+ jsonrpc: '2.0',
232
+ method: method,
233
+ params: params,
234
+ id: 1
235
+ }.to_json
236
+ }
237
+
238
+ response = self.class.post('/', options)
239
+ handle_response(response)
240
+ end
241
+
242
+ def handle_response(response)
243
+ if response.success?
244
+ response.parsed_response['result']
245
+ else
246
+ raise "Request failed: #{response.code} #{response.message}"
247
+ end
248
+ end
249
+ end
250
+ end
@@ -0,0 +1,3 @@
1
+ module SolanaRB
2
+ VERSION = '0.1.0'.freeze
3
+ end
@@ -0,0 +1,5 @@
1
+ require_relative 'solana-ruby/version'
2
+ require_relative 'solana-ruby/client'
3
+
4
+ module SolanaRB
5
+ end
metadata ADDED
@@ -0,0 +1,102 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: solana-ruby
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Fabrice Renard
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2024-06-23 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: httparty
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.18.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.18.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: csv
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3.1'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '3.1'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.10'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.10'
55
+ - !ruby/object:Gem::Dependency
56
+ name: webmock
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '3.14'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3.14'
69
+ description: Provides an easy-to-use interface for interacting with the Solana blockchain.
70
+ email:
71
+ - fabrice.renard12@outlook.com
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - lib/solana-ruby.rb
77
+ - lib/solana-ruby/client.rb
78
+ - lib/solana-ruby/version.rb
79
+ homepage: https://github.com/fabricerenard12/solana-ruby
80
+ licenses:
81
+ - MIT
82
+ metadata: {}
83
+ post_install_message:
84
+ rdoc_options: []
85
+ require_paths:
86
+ - lib
87
+ required_ruby_version: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ version: '3.0'
92
+ required_rubygems_version: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ requirements: []
98
+ rubygems_version: 3.5.9
99
+ signing_key:
100
+ specification_version: 4
101
+ summary: A Ruby wrapper for the Solana blockchain API
102
+ test_files: []