solana-ruby 0.1.1 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/solana-ruby/client.rb +150 -131
- data/lib/solana-ruby/keypair.rb +1 -1
- data/lib/solana-ruby/utils.rb +1 -1
- data/lib/solana-ruby/version.rb +2 -2
- data/lib/solana-ruby.rb +1 -1
- metadata +7 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 610330d9aad4553f79f8d9101c8e1180491a6a59a8f8451f23d149cf3590222f
|
4
|
+
data.tar.gz: c797a3326c255ff331fb5f112a65839eb20ca941fd4120728263b84555baa0af
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7cd1980321c6947394ac1e9456d4312395670977d3774195ce93d6b0faa8c44377185aad3aad0b8d5706fa82a0e58ea0ca6fcea79b28ecdd43c1593702900913
|
7
|
+
data.tar.gz: 1b389ab381b782be91396fd0f8aea16ae9bf094ecff2f3dce366e9674fee6a50779d44a1d900206dd556ddc46a4ff99178409311fe76646c4d2aa5ebcc04c764
|
data/lib/solana-ruby/client.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
|
-
require 'faraday'
|
2
1
|
require 'faye/websocket'
|
2
|
+
require 'httpx'
|
3
3
|
require 'json'
|
4
4
|
require 'thread'
|
5
5
|
|
6
6
|
require_relative 'utils'
|
7
7
|
|
8
|
-
module
|
8
|
+
module Solana
|
9
9
|
##
|
10
10
|
# Client class for interacting with the Solana JSON RPC API over HTTP and WS.
|
11
11
|
class Client
|
@@ -13,15 +13,9 @@ module SolanaRB
|
|
13
13
|
# Initializes a new Client.
|
14
14
|
#
|
15
15
|
# @param [String, nil] api_key Optional API key for authentication.
|
16
|
-
def initialize(api_endpoint =
|
16
|
+
def initialize(api_endpoint = Solana::Utils::MAINNET, api_key = nil)
|
17
17
|
@api_key = api_key
|
18
18
|
@api_endpoint = api_endpoint
|
19
|
-
# @api_ws = WebSocket::Handshake::Client.new(url: @api_endpoint::WS)
|
20
|
-
@api_http = Faraday.new(url: @api_endpoint::HTTP) do |faraday|
|
21
|
-
faraday.request :json
|
22
|
-
faraday.response :json, content_type: 'application/json'
|
23
|
-
faraday.adapter Faraday.default_adapter
|
24
|
-
end
|
25
19
|
end
|
26
20
|
|
27
21
|
##
|
@@ -30,8 +24,8 @@ module SolanaRB
|
|
30
24
|
# @param [String] pubkey The public key of the account.
|
31
25
|
# @param [Hash] options Optional parameters for the request.
|
32
26
|
# @return [Hash] The account information.
|
33
|
-
def get_account_info(pubkey, options = {})
|
34
|
-
request_http('getAccountInfo', [pubkey, options])
|
27
|
+
def get_account_info(pubkey, options = {}, &block)
|
28
|
+
request_http('getAccountInfo', [pubkey, options], &block)
|
35
29
|
end
|
36
30
|
|
37
31
|
##
|
@@ -40,8 +34,8 @@ module SolanaRB
|
|
40
34
|
# @param [String] pubkey The public key of the account.
|
41
35
|
# @param [Hash] options Optional parameters for the request.
|
42
36
|
# @return [Integer] The balance in lamports.
|
43
|
-
def get_balance(pubkey, options = {})
|
44
|
-
request_http('getBalance', [pubkey, options])
|
37
|
+
def get_balance(pubkey, options = {}, &block)
|
38
|
+
request_http('getBalance', [pubkey, options], &block)
|
45
39
|
end
|
46
40
|
|
47
41
|
##
|
@@ -50,8 +44,8 @@ module SolanaRB
|
|
50
44
|
# @param [Integer] slot_number The slot number of the block.
|
51
45
|
# @param [Hash] options Optional parameters for the request.
|
52
46
|
# @return [Hash] The block information.
|
53
|
-
def get_block(slot_number, options = {})
|
54
|
-
request_http('getBlock', [slot_number, options])
|
47
|
+
def get_block(slot_number, options = {}, &block)
|
48
|
+
request_http('getBlock', [slot_number, options], &block)
|
55
49
|
end
|
56
50
|
|
57
51
|
##
|
@@ -60,8 +54,8 @@ module SolanaRB
|
|
60
54
|
# @param [Integer] slot_number The slot number of the block.
|
61
55
|
# @param [Hash] options Optional parameters for the request.
|
62
56
|
# @return [Hash] The block commitment information.
|
63
|
-
def get_block_commitment(slot_number, options = {})
|
64
|
-
request_http('getBlockCommitment', [slot_number, options])
|
57
|
+
def get_block_commitment(slot_number, options = {}, &block)
|
58
|
+
request_http('getBlockCommitment', [slot_number, options], &block)
|
65
59
|
end
|
66
60
|
|
67
61
|
##
|
@@ -69,8 +63,8 @@ module SolanaRB
|
|
69
63
|
#
|
70
64
|
# @param [Hash] options Optional parameters for the request.
|
71
65
|
# @return [Integer] The current block height.
|
72
|
-
def get_block_height(options = {})
|
73
|
-
request_http('getBlockHeight', [options])
|
66
|
+
def get_block_height(options = {}, &block)
|
67
|
+
request_http('getBlockHeight', [options], &block)
|
74
68
|
end
|
75
69
|
|
76
70
|
##
|
@@ -78,8 +72,8 @@ module SolanaRB
|
|
78
72
|
#
|
79
73
|
# @param [Hash] options Optional parameters for the request.
|
80
74
|
# @return [Hash] The block production information.
|
81
|
-
def get_block_production(options = {})
|
82
|
-
request_http('getBlockProduction', [options])
|
75
|
+
def get_block_production(options = {}, &block)
|
76
|
+
request_http('getBlockProduction', [options], &block)
|
83
77
|
end
|
84
78
|
|
85
79
|
##
|
@@ -88,8 +82,8 @@ module SolanaRB
|
|
88
82
|
# @param [Integer] slot_number The slot number of the block.
|
89
83
|
# @param [Hash] options Optional parameters for the request.
|
90
84
|
# @return [Integer] The estimated production time in seconds.
|
91
|
-
def get_block_time(slot_number, options = {})
|
92
|
-
request_http('getBlockTime', [slot_number, options])
|
85
|
+
def get_block_time(slot_number, options = {}, &block)
|
86
|
+
request_http('getBlockTime', [slot_number, options], &block)
|
93
87
|
end
|
94
88
|
|
95
89
|
##
|
@@ -99,8 +93,8 @@ module SolanaRB
|
|
99
93
|
# @param [Integer] end_slot The end slot number.
|
100
94
|
# @param [Hash] options Optional parameters for the request.
|
101
95
|
# @return [Array<Integer>] The list of confirmed blocks.
|
102
|
-
def get_blocks(start_slot, end_slot, options = {})
|
103
|
-
request_http('getBlocks', [start_slot, end_slot, options])
|
96
|
+
def get_blocks(start_slot, end_slot, options = {}, &block)
|
97
|
+
request_http('getBlocks', [start_slot, end_slot, options], &block)
|
104
98
|
end
|
105
99
|
|
106
100
|
##
|
@@ -110,8 +104,8 @@ module SolanaRB
|
|
110
104
|
# @param [Integer] limit The maximum number of blocks to return.
|
111
105
|
# @param [Hash] options Optional parameters for the request.
|
112
106
|
# @return [Array<Integer>] The list of confirmed blocks.
|
113
|
-
def get_blocks_with_limit(start_slot, limit, options = {})
|
114
|
-
request_http('getBlocksWithLimit', [start_slot, limit, options])
|
107
|
+
def get_blocks_with_limit(start_slot, limit, options = {}, &block)
|
108
|
+
request_http('getBlocksWithLimit', [start_slot, limit, options], &block)
|
115
109
|
end
|
116
110
|
|
117
111
|
##
|
@@ -119,8 +113,8 @@ module SolanaRB
|
|
119
113
|
#
|
120
114
|
# @param [Hash] options Optional parameters for the request.
|
121
115
|
# @return [Array<Hash>] The list of cluster nodes.
|
122
|
-
def get_cluster_nodes(options = {})
|
123
|
-
request_http('getClusterNodes', [options])
|
116
|
+
def get_cluster_nodes(options = {}, &block)
|
117
|
+
request_http('getClusterNodes', [options], &block)
|
124
118
|
end
|
125
119
|
|
126
120
|
##
|
@@ -128,8 +122,8 @@ module SolanaRB
|
|
128
122
|
#
|
129
123
|
# @param [Hash] options Optional parameters for the request.
|
130
124
|
# @return [Hash] The epoch information.
|
131
|
-
def get_epoch_info(options = {})
|
132
|
-
request_http('getEpochInfo', [options])
|
125
|
+
def get_epoch_info(options = {}, &block)
|
126
|
+
request_http('getEpochInfo', [options], &block)
|
133
127
|
end
|
134
128
|
|
135
129
|
##
|
@@ -137,8 +131,8 @@ module SolanaRB
|
|
137
131
|
#
|
138
132
|
# @param [Hash] options Optional parameters for the request.
|
139
133
|
# @return [Hash] The epoch schedule.
|
140
|
-
def get_epoch_schedule(options = {})
|
141
|
-
request_http('getEpochSchedule', [options])
|
134
|
+
def get_epoch_schedule(options = {}, &block)
|
135
|
+
request_http('getEpochSchedule', [options], &block)
|
142
136
|
end
|
143
137
|
|
144
138
|
##
|
@@ -147,8 +141,8 @@ module SolanaRB
|
|
147
141
|
# @param [String] message The message for which the fee is to be calculated.
|
148
142
|
# @param [Hash] options Optional parameters for the request.
|
149
143
|
# @return [Integer] The fee for the message.
|
150
|
-
def get_fee_for_message(message, options = {})
|
151
|
-
request_http('getFeeForMessage', [message, options])
|
144
|
+
def get_fee_for_message(message, options = {}, &block)
|
145
|
+
request_http('getFeeForMessage', [message, options], &block)
|
152
146
|
end
|
153
147
|
|
154
148
|
##
|
@@ -156,8 +150,8 @@ module SolanaRB
|
|
156
150
|
#
|
157
151
|
# @param [Hash] options Optional parameters for the request.
|
158
152
|
# @return [Integer] The slot of the first available block.
|
159
|
-
def get_first_available_block(options = {})
|
160
|
-
request_http('getFirstAvailableBlock', [options])
|
153
|
+
def get_first_available_block(options = {}, &block)
|
154
|
+
request_http('getFirstAvailableBlock', [options], &block)
|
161
155
|
end
|
162
156
|
|
163
157
|
##
|
@@ -165,8 +159,8 @@ module SolanaRB
|
|
165
159
|
#
|
166
160
|
# @param [Hash] options Optional parameters for the request.
|
167
161
|
# @return [String] The genesis hash.
|
168
|
-
def get_genesis_hash(options = {})
|
169
|
-
request_http('getGenesisHash', [options])
|
162
|
+
def get_genesis_hash(options = {}, &block)
|
163
|
+
request_http('getGenesisHash', [options], &block)
|
170
164
|
end
|
171
165
|
|
172
166
|
##
|
@@ -174,8 +168,8 @@ module SolanaRB
|
|
174
168
|
#
|
175
169
|
# @param [Hash] options Optional parameters for the request.
|
176
170
|
# @return [String] The health status of the node.
|
177
|
-
def get_health(options = {})
|
178
|
-
request_http('getHealth', [options])
|
171
|
+
def get_health(options = {}, &block)
|
172
|
+
request_http('getHealth', [options], &block)
|
179
173
|
end
|
180
174
|
|
181
175
|
##
|
@@ -183,8 +177,8 @@ module SolanaRB
|
|
183
177
|
#
|
184
178
|
# @param [Hash] options Optional parameters for the request.
|
185
179
|
# @return [Integer] The highest snapshot slot.
|
186
|
-
def get_highest_snapshot_slot(options = {})
|
187
|
-
request_http('getHighestSnapshotSlot', [options])
|
180
|
+
def get_highest_snapshot_slot(options = {}, &block)
|
181
|
+
request_http('getHighestSnapshotSlot', [options], &block)
|
188
182
|
end
|
189
183
|
|
190
184
|
##
|
@@ -192,8 +186,8 @@ module SolanaRB
|
|
192
186
|
#
|
193
187
|
# @param [Hash] options Optional parameters for the request.
|
194
188
|
# @return [Hash] The identity information of the node.
|
195
|
-
def get_identity(options = {})
|
196
|
-
request_http('getIdentity', [options])
|
189
|
+
def get_identity(options = {}, &block)
|
190
|
+
request_http('getIdentity', [options], &block)
|
197
191
|
end
|
198
192
|
|
199
193
|
##
|
@@ -201,8 +195,8 @@ module SolanaRB
|
|
201
195
|
#
|
202
196
|
# @param [Hash] options Optional parameters for the request.
|
203
197
|
# @return [Hash] The inflation governor settings.
|
204
|
-
def get_inflation_governor(options = {})
|
205
|
-
request_http('getInflationGovernor', [options])
|
198
|
+
def get_inflation_governor(options = {}, &block)
|
199
|
+
request_http('getInflationGovernor', [options], &block)
|
206
200
|
end
|
207
201
|
|
208
202
|
##
|
@@ -210,8 +204,8 @@ module SolanaRB
|
|
210
204
|
#
|
211
205
|
# @param [Hash] options Optional parameters for the request.
|
212
206
|
# @return [Hash] The inflation rate.
|
213
|
-
def get_inflation_rate(options = {})
|
214
|
-
request_http('getInflationRate', [options])
|
207
|
+
def get_inflation_rate(options = {}, &block)
|
208
|
+
request_http('getInflationRate', [options], &block)
|
215
209
|
end
|
216
210
|
|
217
211
|
##
|
@@ -220,8 +214,8 @@ module SolanaRB
|
|
220
214
|
# @param [Array<String>] addresses The list of addresses.
|
221
215
|
# @param [Hash] options Optional parameters for the request.
|
222
216
|
# @return [Array<Hash>] The inflation rewards for the addresses.
|
223
|
-
def get_inflation_reward(addresses, options = {})
|
224
|
-
request_http('getInflationReward', [addresses, options])
|
217
|
+
def get_inflation_reward(addresses, options = {}, &block)
|
218
|
+
request_http('getInflationReward', [addresses, options], &block)
|
225
219
|
end
|
226
220
|
|
227
221
|
##
|
@@ -229,8 +223,8 @@ module SolanaRB
|
|
229
223
|
#
|
230
224
|
# @param [Hash] options Optional parameters for the request.
|
231
225
|
# @return [Array<Hash>] The largest accounts.
|
232
|
-
def get_largest_accounts(options = {})
|
233
|
-
request_http('getLargestAccounts', [options])
|
226
|
+
def get_largest_accounts(options = {}, &block)
|
227
|
+
request_http('getLargestAccounts', [options], &block)
|
234
228
|
end
|
235
229
|
|
236
230
|
##
|
@@ -238,8 +232,8 @@ module SolanaRB
|
|
238
232
|
#
|
239
233
|
# @param [Hash] options Optional parameters for the request.
|
240
234
|
# @return [Hash] The latest blockhash.
|
241
|
-
def get_latest_blockhash(options = {})
|
242
|
-
request_http('getLatestBlockhash', [options])
|
235
|
+
def get_latest_blockhash(options = {}, &block)
|
236
|
+
request_http('getLatestBlockhash', [options], &block)
|
243
237
|
end
|
244
238
|
|
245
239
|
##
|
@@ -247,8 +241,8 @@ module SolanaRB
|
|
247
241
|
#
|
248
242
|
# @param [Hash] options Optional parameters for the request.
|
249
243
|
# @return [Hash] The leader schedule.
|
250
|
-
def get_leader_schedule(options = {})
|
251
|
-
request_http('getLeaderSchedule', [options])
|
244
|
+
def get_leader_schedule(options = {}, &block)
|
245
|
+
request_http('getLeaderSchedule', [options], &block)
|
252
246
|
end
|
253
247
|
|
254
248
|
##
|
@@ -256,8 +250,8 @@ module SolanaRB
|
|
256
250
|
#
|
257
251
|
# @param [Hash] options Optional parameters for the request.
|
258
252
|
# @return [Integer] The maximum retransmit slot.
|
259
|
-
def get_max_retransmit_slot(options = {})
|
260
|
-
request_http('getMaxRetransmitSlot', [options])
|
253
|
+
def get_max_retransmit_slot(options = {}, &block)
|
254
|
+
request_http('getMaxRetransmitSlot', [options], &block)
|
261
255
|
end
|
262
256
|
|
263
257
|
##
|
@@ -265,8 +259,8 @@ module SolanaRB
|
|
265
259
|
#
|
266
260
|
# @param [Hash] options Optional parameters for the request.
|
267
261
|
# @return [Integer] The maximum shred insert slot.
|
268
|
-
def get_max_shred_insert_slot(options = {})
|
269
|
-
request_http('getMaxShredInsertSlot', [options])
|
262
|
+
def get_max_shred_insert_slot(options = {}, &block)
|
263
|
+
request_http('getMaxShredInsertSlot', [options], &block)
|
270
264
|
end
|
271
265
|
|
272
266
|
##
|
@@ -275,8 +269,8 @@ module SolanaRB
|
|
275
269
|
# @param [Integer] data_length The length of the data in bytes.
|
276
270
|
# @param [Hash] options Optional parameters for the request.
|
277
271
|
# @return [Integer] The minimum balance for rent exemption.
|
278
|
-
def get_minimum_balance_for_rent_exemption(data_length, options = {})
|
279
|
-
request_http('getMinimumBalanceForRentExemption', [data_length, options])
|
272
|
+
def get_minimum_balance_for_rent_exemption(data_length, options = {}, &block)
|
273
|
+
request_http('getMinimumBalanceForRentExemption', [data_length, options], &block)
|
280
274
|
end
|
281
275
|
|
282
276
|
##
|
@@ -285,8 +279,8 @@ module SolanaRB
|
|
285
279
|
# @param [Array<String>] pubkeys The list of public keys.
|
286
280
|
# @param [Hash] options Optional parameters for the request.
|
287
281
|
# @return [Array<Hash>] The information for the accounts.
|
288
|
-
def get_multiple_accounts(pubkeys, options = {})
|
289
|
-
request_http('getMultipleAccounts', [pubkeys, options])
|
282
|
+
def get_multiple_accounts(pubkeys, options = {}, &block)
|
283
|
+
request_http('getMultipleAccounts', [pubkeys, options], &block)
|
290
284
|
end
|
291
285
|
|
292
286
|
##
|
@@ -295,8 +289,8 @@ module SolanaRB
|
|
295
289
|
# @param [String] pubkey The public key of the program.
|
296
290
|
# @param [Hash] options Optional parameters for the request.
|
297
291
|
# @return [Array<Hash>] The information for the program accounts.
|
298
|
-
def get_program_accounts(pubkey, options = {})
|
299
|
-
request_http('getProgramAccounts', [pubkey, options])
|
292
|
+
def get_program_accounts(pubkey, options = {}, &block)
|
293
|
+
request_http('getProgramAccounts', [pubkey, options], &block)
|
300
294
|
end
|
301
295
|
|
302
296
|
##
|
@@ -304,8 +298,8 @@ module SolanaRB
|
|
304
298
|
#
|
305
299
|
# @param [Hash] options Optional parameters for the request.
|
306
300
|
# @return [Array<Hash>] The recent performance samples.
|
307
|
-
def get_recent_performance_samples(options = {})
|
308
|
-
request_http('getRecentPerformanceSamples', [options])
|
301
|
+
def get_recent_performance_samples(options = {}, &block)
|
302
|
+
request_http('getRecentPerformanceSamples', [options], &block)
|
309
303
|
end
|
310
304
|
|
311
305
|
##
|
@@ -313,8 +307,8 @@ module SolanaRB
|
|
313
307
|
#
|
314
308
|
# @param [Hash] options Optional parameters for the request.
|
315
309
|
# @return [Hash] The recent prioritization fees.
|
316
|
-
def get_recent_prioritization_fees(options = {})
|
317
|
-
request_http('getRecentPrioritizationFees', [options])
|
310
|
+
def get_recent_prioritization_fees(options = {}, &block)
|
311
|
+
request_http('getRecentPrioritizationFees', [options], &block)
|
318
312
|
end
|
319
313
|
|
320
314
|
##
|
@@ -323,8 +317,8 @@ module SolanaRB
|
|
323
317
|
# @param [Array<String>] signatures The list of transaction signatures.
|
324
318
|
# @param [Hash] options Optional parameters for the request.
|
325
319
|
# @return [Array<Hash>] The status of the transaction signatures.
|
326
|
-
def get_signature_statuses(signatures, options = {})
|
327
|
-
request_http('getSignatureStatuses', [signatures, options])
|
320
|
+
def get_signature_statuses(signatures, options = {}, &block)
|
321
|
+
request_http('getSignatureStatuses', [signatures, options], &block)
|
328
322
|
end
|
329
323
|
|
330
324
|
##
|
@@ -333,8 +327,8 @@ module SolanaRB
|
|
333
327
|
# @param [String] address The address for which to retrieve signatures.
|
334
328
|
# @param [Hash] options Optional parameters for the request.
|
335
329
|
# @return [Array<Hash>] The signatures for the address.
|
336
|
-
def get_signatures_for_address(address, options = {})
|
337
|
-
request_http('getSignaturesForAddress', [address, options])
|
330
|
+
def get_signatures_for_address(address, options = {}, &block)
|
331
|
+
request_http('getSignaturesForAddress', [address, options], &block)
|
338
332
|
end
|
339
333
|
|
340
334
|
##
|
@@ -342,8 +336,8 @@ module SolanaRB
|
|
342
336
|
#
|
343
337
|
# @param [Hash] options Optional parameters for the request.
|
344
338
|
# @return [Integer] The current slot.
|
345
|
-
def get_slot(options = {})
|
346
|
-
request_http('getSlot', [options])
|
339
|
+
def get_slot(options = {}, &block)
|
340
|
+
request_http('getSlot', [options], &block)
|
347
341
|
end
|
348
342
|
|
349
343
|
##
|
@@ -351,8 +345,8 @@ module SolanaRB
|
|
351
345
|
#
|
352
346
|
# @param [Hash] options Optional parameters for the request.
|
353
347
|
# @return [String] The current slot leader.
|
354
|
-
def get_slot_leader(options = {})
|
355
|
-
request_http('getSlotLeader', [options])
|
348
|
+
def get_slot_leader(options = {}, &block)
|
349
|
+
request_http('getSlotLeader', [options], &block)
|
356
350
|
end
|
357
351
|
|
358
352
|
##
|
@@ -362,8 +356,8 @@ module SolanaRB
|
|
362
356
|
# @param [Integer] limit The maximum number of leaders to return.
|
363
357
|
# @param [Hash] options Optional parameters for the request.
|
364
358
|
# @return [Array<String>] The slot leaders.
|
365
|
-
def get_slot_leaders(start_slot, limit, options = {})
|
366
|
-
request_http('getSlotLeaders', [start_slot, limit, options])
|
359
|
+
def get_slot_leaders(start_slot, limit, options = {}, &block)
|
360
|
+
request_http('getSlotLeaders', [start_slot, limit, options], &block)
|
367
361
|
end
|
368
362
|
|
369
363
|
##
|
@@ -372,8 +366,8 @@ module SolanaRB
|
|
372
366
|
# @param [String] pubkey The public key of the stake account.
|
373
367
|
# @param [Hash] options Optional parameters for the request.
|
374
368
|
# @return [Hash] The stake activation information.
|
375
|
-
def get_stake_activation(pubkey, options = {})
|
376
|
-
request_http('getStakeActivation', [pubkey, options])
|
369
|
+
def get_stake_activation(pubkey, options = {}, &block)
|
370
|
+
request_http('getStakeActivation', [pubkey, options], &block)
|
377
371
|
end
|
378
372
|
|
379
373
|
##
|
@@ -381,8 +375,8 @@ module SolanaRB
|
|
381
375
|
#
|
382
376
|
# @param [Hash] options Optional parameters for the request.
|
383
377
|
# @return [Integer] The minimum delegation.
|
384
|
-
def get_stake_minimum_delegation(options = {})
|
385
|
-
request_http('getStakeMinimumDelegation', [options])
|
378
|
+
def get_stake_minimum_delegation(options = {}, &block)
|
379
|
+
request_http('getStakeMinimumDelegation', [options], &block)
|
386
380
|
end
|
387
381
|
|
388
382
|
##
|
@@ -390,8 +384,8 @@ module SolanaRB
|
|
390
384
|
#
|
391
385
|
# @param [Hash] options Optional parameters for the request.
|
392
386
|
# @return [Hash] The supply information.
|
393
|
-
def get_supply(options = {})
|
394
|
-
request_http('getSupply', [options])
|
387
|
+
def get_supply(options = {}, &block)
|
388
|
+
request_http('getSupply', [options], &block)
|
395
389
|
end
|
396
390
|
|
397
391
|
##
|
@@ -400,8 +394,8 @@ module SolanaRB
|
|
400
394
|
# @param [String] pubkey The public key of the token account.
|
401
395
|
# @param [Hash] options Optional parameters for the request.
|
402
396
|
# @return [Hash] The token balance.
|
403
|
-
def get_token_account_balance(pubkey, options = {})
|
404
|
-
request_http('getTokenAccountBalance', [pubkey, options])
|
397
|
+
def get_token_account_balance(pubkey, options = {}, &block)
|
398
|
+
request_http('getTokenAccountBalance', [pubkey, options], &block)
|
405
399
|
end
|
406
400
|
|
407
401
|
##
|
@@ -411,8 +405,8 @@ module SolanaRB
|
|
411
405
|
# @param [Hash] opts Additional options for the request.
|
412
406
|
# @param [Hash] options Optional parameters for the request.
|
413
407
|
# @return [Array<Hash>] The token accounts by delegate.
|
414
|
-
def get_token_accounts_by_delegate(delegate, opts = {}, options = {})
|
415
|
-
request_http('getTokenAccountsByDelegate', [delegate, opts, options])
|
408
|
+
def get_token_accounts_by_delegate(delegate, opts = {}, options = {}, &block)
|
409
|
+
request_http('getTokenAccountsByDelegate', [delegate, opts, options], &block)
|
416
410
|
end
|
417
411
|
|
418
412
|
##
|
@@ -422,8 +416,8 @@ module SolanaRB
|
|
422
416
|
# @param [Hash] opts Additional options for the request.
|
423
417
|
# @param [Hash] options Optional parameters for the request.
|
424
418
|
# @return [Array<Hash>] The token accounts by owner.
|
425
|
-
def get_token_accounts_by_owner(owner, opts = {}, options = {})
|
426
|
-
request_http('getTokenAccountsByOwner', [owner, opts, options])
|
419
|
+
def get_token_accounts_by_owner(owner, opts = {}, options = {}, &block)
|
420
|
+
request_http('getTokenAccountsByOwner', [owner, opts, options], &block)
|
427
421
|
end
|
428
422
|
|
429
423
|
##
|
@@ -432,8 +426,8 @@ module SolanaRB
|
|
432
426
|
# @param [String] pubkey The public key of the token.
|
433
427
|
# @param [Hash] options Optional parameters for the request.
|
434
428
|
# @return [Array<Hash>] The largest accounts for the token.
|
435
|
-
def get_token_largest_accounts(pubkey, options = {})
|
436
|
-
request_http('getTokenLargestAccounts', [pubkey, options])
|
429
|
+
def get_token_largest_accounts(pubkey, options = {}, &block)
|
430
|
+
request_http('getTokenLargestAccounts', [pubkey, options], &block)
|
437
431
|
end
|
438
432
|
|
439
433
|
##
|
@@ -442,8 +436,8 @@ module SolanaRB
|
|
442
436
|
# @param [String] pubkey The public key of the token.
|
443
437
|
# @param [Hash] options Optional parameters for the request.
|
444
438
|
# @return [Hash] The token supply.
|
445
|
-
def get_token_supply(pubkey, options = {})
|
446
|
-
request_http('getTokenSupply', [pubkey, options])
|
439
|
+
def get_token_supply(pubkey, options = {}, &block)
|
440
|
+
request_http('getTokenSupply', [pubkey, options], &block)
|
447
441
|
end
|
448
442
|
|
449
443
|
##
|
@@ -452,8 +446,8 @@ module SolanaRB
|
|
452
446
|
# @param [String] signature The transaction signature.
|
453
447
|
# @param [Hash] options Optional parameters for the request.
|
454
448
|
# @return [Hash] The transaction details.
|
455
|
-
def get_transaction(signature, options = {})
|
456
|
-
request_http('getTransaction', [signature, options])
|
449
|
+
def get_transaction(signature, options = {}, &block)
|
450
|
+
request_http('getTransaction', [signature, options], &block)
|
457
451
|
end
|
458
452
|
|
459
453
|
##
|
@@ -461,16 +455,16 @@ module SolanaRB
|
|
461
455
|
#
|
462
456
|
# @param [Hash] options Optional parameters for the request.
|
463
457
|
# @return [Integer] The total number of transactions.
|
464
|
-
def get_transaction_count(options = {})
|
465
|
-
request_http('getTransactionCount', [options])
|
458
|
+
def get_transaction_count(options = {}, &block)
|
459
|
+
request_http('getTransactionCount', [options], &block)
|
466
460
|
end
|
467
461
|
|
468
462
|
##
|
469
463
|
# Retrieves the current version of the Solana software.
|
470
464
|
#
|
471
465
|
# @return [Hash] The current version information.
|
472
|
-
def get_version
|
473
|
-
request_http('getVersion')
|
466
|
+
def get_version(&block)
|
467
|
+
request_http('getVersion', &block)
|
474
468
|
end
|
475
469
|
|
476
470
|
##
|
@@ -478,8 +472,8 @@ module SolanaRB
|
|
478
472
|
#
|
479
473
|
# @param [Hash] options Optional parameters for the request.
|
480
474
|
# @return [Hash] The list of vote accounts.
|
481
|
-
def get_vote_accounts(options = {})
|
482
|
-
request_http('getVoteAccounts', [options])
|
475
|
+
def get_vote_accounts(options = {}, &block)
|
476
|
+
request_http('getVoteAccounts', [options], &block)
|
483
477
|
end
|
484
478
|
|
485
479
|
##
|
@@ -488,8 +482,8 @@ module SolanaRB
|
|
488
482
|
# @param [String] blockhash The blockhash to check.
|
489
483
|
# @param [Hash] options Optional parameters for the request.
|
490
484
|
# @return [Boolean] Whether the blockhash is valid.
|
491
|
-
def is_blockhash_valid(blockhash, options = {})
|
492
|
-
request_http('isBlockhashValid', [blockhash, options])
|
485
|
+
def is_blockhash_valid(blockhash, options = {}, &block)
|
486
|
+
request_http('isBlockhashValid', [blockhash, options], &block)
|
493
487
|
end
|
494
488
|
|
495
489
|
##
|
@@ -497,8 +491,8 @@ module SolanaRB
|
|
497
491
|
#
|
498
492
|
# @param [Hash] options Optional parameters for the request.
|
499
493
|
# @return [Integer] The minimum ledger slot.
|
500
|
-
def minimum_ledger_slot(options = {})
|
501
|
-
request_http('minimumLedgerSlot', [options])
|
494
|
+
def minimum_ledger_slot(options = {}, &block)
|
495
|
+
request_http('minimumLedgerSlot', [options], &block)
|
502
496
|
end
|
503
497
|
|
504
498
|
##
|
@@ -508,8 +502,8 @@ module SolanaRB
|
|
508
502
|
# @param [Integer] lamports The amount of lamports to airdrop.
|
509
503
|
# @param [Hash] options Optional parameters for the request.
|
510
504
|
# @return [Hash] The airdrop request response.
|
511
|
-
def request_airdrop(pubkey, lamports, options = {})
|
512
|
-
request_http('requestAirdrop', [pubkey, lamports, options])
|
505
|
+
def request_airdrop(pubkey, lamports, options = {}, &block)
|
506
|
+
request_http('requestAirdrop', [pubkey, lamports, options], &block)
|
513
507
|
end
|
514
508
|
|
515
509
|
##
|
@@ -517,8 +511,8 @@ module SolanaRB
|
|
517
511
|
#
|
518
512
|
# @param [Hash] transaction The transaction to send.
|
519
513
|
# @return [Hash] The response from the send transaction request.
|
520
|
-
def send_transaction(transaction)
|
521
|
-
request_http('sendTransaction', [transaction.to_json])
|
514
|
+
def send_transaction(transaction, &block)
|
515
|
+
request_http('sendTransaction', [transaction.to_json], &block)
|
522
516
|
end
|
523
517
|
|
524
518
|
##
|
@@ -527,8 +521,8 @@ module SolanaRB
|
|
527
521
|
# @param [Hash] transaction The transaction to simulate.
|
528
522
|
# @param [Hash] options Optional parameters for the request.
|
529
523
|
# @return [Hash] The simulation response.
|
530
|
-
def simulate_transaction(transaction, options = {})
|
531
|
-
request_http('simulateTransaction', [transaction.to_json, options])
|
524
|
+
def simulate_transaction(transaction, options = {}, &block)
|
525
|
+
request_http('simulateTransaction', [transaction.to_json, options], &block)
|
532
526
|
end
|
533
527
|
|
534
528
|
##
|
@@ -693,13 +687,19 @@ module SolanaRB
|
|
693
687
|
request_ws('voteUnsubscribe', [subscription_id], &block)
|
694
688
|
end
|
695
689
|
|
690
|
+
private
|
696
691
|
##
|
697
|
-
# Sends a JSON-RPC request to the Solana API.
|
692
|
+
# Sends a JSON-RPC request to the Solana API over HTTP.
|
693
|
+
#
|
694
|
+
# This method constructs a JSON-RPC request and sends it to the Solana API endpoint using HTTP.
|
695
|
+
# It then handles the response asynchronously.
|
698
696
|
#
|
699
697
|
# @param [String] method The RPC method to call.
|
700
698
|
# @param [Array] params The parameters for the RPC method.
|
701
|
-
# @
|
702
|
-
|
699
|
+
# @yield [Object] The parsed response from the API.
|
700
|
+
# @return [Object, nil] The parsed response from the API if no block is given, otherwise nil.
|
701
|
+
# @raise [RuntimeError] If the request fails (non-success response).
|
702
|
+
def request_http(method, params = nil, &block)
|
703
703
|
body = {
|
704
704
|
jsonrpc: '2.0',
|
705
705
|
method: method,
|
@@ -707,36 +707,49 @@ module SolanaRB
|
|
707
707
|
}
|
708
708
|
body[:params] = params if params
|
709
709
|
|
710
|
-
|
711
|
-
|
712
|
-
|
710
|
+
HTTPX.post(@api_endpoint::HTTP, json: body).then do |response|
|
711
|
+
handle_response_http(response, &block)
|
712
|
+
rescue => e
|
713
|
+
puts "HTTP request failed: #{e}"
|
713
714
|
end
|
714
|
-
|
715
|
-
handle_response_http(response)
|
716
715
|
end
|
717
716
|
|
718
717
|
##
|
719
718
|
# Handles the API response, checking for success and parsing the result.
|
720
719
|
#
|
721
|
-
#
|
722
|
-
#
|
720
|
+
# This method processes the HTTP response from the Solana API, checking if the request was successful.
|
721
|
+
# If successful, it parses the JSON response and yields the result to the provided block.
|
722
|
+
#
|
723
|
+
# @param [HTTPX::Response] response The HTTP response object.
|
724
|
+
# @yield [Object] The parsed result from the API response.
|
723
725
|
# @return [Object] The parsed result from the API response.
|
724
|
-
|
725
|
-
|
726
|
-
|
726
|
+
# @raise [RuntimeError] If the request fails (non-success response).
|
727
|
+
def handle_response_http(response, &block)
|
728
|
+
if response.status == 200
|
729
|
+
result = JSON.parse(response.body)
|
730
|
+
if block_given?
|
731
|
+
yield result
|
732
|
+
else
|
733
|
+
result
|
734
|
+
end
|
727
735
|
else
|
728
|
-
raise "Request failed
|
736
|
+
raise "Request failed"
|
729
737
|
end
|
730
738
|
end
|
731
739
|
|
732
740
|
##
|
733
741
|
# Sends a JSON-RPC request to the Solana API over WebSocket.
|
734
742
|
#
|
743
|
+
# This method constructs a JSON-RPC request and sends it to the Solana API endpoint using WebSocket.
|
744
|
+
# It then handles the response asynchronously, providing the result to the provided block or returning it via a queue.
|
745
|
+
#
|
735
746
|
# @param [String] method The RPC method to call.
|
736
747
|
# @param [Array] params The parameters for the RPC method.
|
737
748
|
# @yield [Object] The parsed response from the API.
|
738
|
-
|
749
|
+
# @return [Object, nil] The parsed response from the API if no block is given, otherwise nil.
|
750
|
+
# @raise [RuntimeError] If the WebSocket connection fails or an error occurs during communication.
|
739
751
|
def request_ws(method, params = nil, &block)
|
752
|
+
result_queue = Queue.new
|
740
753
|
EM.run do
|
741
754
|
ws = Faye::WebSocket::Client.new(@api_endpoint::WS)
|
742
755
|
|
@@ -753,7 +766,11 @@ module SolanaRB
|
|
753
766
|
|
754
767
|
ws.on :message do |event|
|
755
768
|
response = JSON.parse(event.data)
|
756
|
-
|
769
|
+
if block_given?
|
770
|
+
yield response['result']
|
771
|
+
else
|
772
|
+
result_queue.push(response['result'])
|
773
|
+
end
|
757
774
|
ws.close
|
758
775
|
end
|
759
776
|
|
@@ -764,10 +781,12 @@ module SolanaRB
|
|
764
781
|
|
765
782
|
ws.on :error do |event|
|
766
783
|
puts "WebSocket error: #{event.message}"
|
784
|
+
result_queue.push(nil)
|
767
785
|
ws = nil
|
768
786
|
EM.stop
|
769
787
|
end
|
770
788
|
end
|
789
|
+
result_queue.pop unless block_given?
|
771
790
|
end
|
772
791
|
end
|
773
792
|
end
|
data/lib/solana-ruby/keypair.rb
CHANGED
data/lib/solana-ruby/utils.rb
CHANGED
data/lib/solana-ruby/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
module
|
2
|
-
VERSION = '0.1.
|
1
|
+
module Solana
|
2
|
+
VERSION = '0.1.3'.freeze
|
3
3
|
end
|
data/lib/solana-ruby.rb
CHANGED
metadata
CHANGED
@@ -1,43 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: solana-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Fabrice Renard
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-07-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: httpx
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: '1.2'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: '1.2'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: faye-websocket
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 0.11.3
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 0.11.3
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: csv
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|