eth 0.5.10 → 0.5.12

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.
data/lib/eth/abi/type.rb CHANGED
@@ -71,7 +71,15 @@ module Eth
71
71
  # @return [Eth::Abi::Type] a parsed Type object.
72
72
  # @raise [ParseError] if it fails to parse the type.
73
73
  def parse(type, components = nil, component_name = nil)
74
- return type if type.is_a?(Type)
74
+ if type.is_a?(Type)
75
+ @base_type = type.base_type
76
+ @sub_type = type.sub_type
77
+ @dimensions = type.dimensions
78
+ @components = type.components
79
+ @name = type.name
80
+ return
81
+ end
82
+
75
83
  _, base_type, sub_type, dimension = /([a-z]*)([0-9]*x?[0-9]*)((\[[0-9]*\])*)/.match(type).to_a
76
84
 
77
85
  # type dimension can only be numeric
@@ -86,7 +94,7 @@ module Eth
86
94
  @base_type = base_type
87
95
  @sub_type = sub_type
88
96
  @dimensions = dims.map { |x| x[1...-1].to_i }
89
- @components = components.map { |component| Eth::Abi::Type.parse(component["type"], component.dig("components"), component.dig("name")) } unless components.nil?
97
+ @components = components.map { |component| Abi::Type.parse(component["type"], component.dig("components"), component.dig("name")) } unless components.nil?
90
98
  @name = component_name
91
99
  end
92
100
 
data/lib/eth/abi.rb CHANGED
@@ -16,9 +16,6 @@
16
16
 
17
17
  require "konstructor"
18
18
 
19
- require "eth/abi/event"
20
- require "eth/abi/type"
21
-
22
19
  # Provides the {Eth} module.
23
20
  module Eth
24
21
 
@@ -56,110 +53,15 @@ module Eth
56
53
  # encode types and arguments
57
54
  args.each_with_index do |arg, i|
58
55
  if parsed_types[i].dynamic?
59
- head += encode_type Type.size_type, head_size + tail.size
60
- tail += encode_type parsed_types[i], arg
56
+ head += Abi::Encoder.type(Type.size_type, head_size + tail.size)
57
+ tail += Abi::Encoder.type(parsed_types[i], arg)
61
58
  else
62
- head += encode_type parsed_types[i], arg
59
+ head += Abi::Encoder.type(parsed_types[i], arg)
63
60
  end
64
61
  end
65
62
 
66
63
  # return the encoded ABI blob
67
- return "#{head}#{tail}"
68
- end
69
-
70
- # Encodes a specific value, either static or dynamic.
71
- #
72
- # @param type [Eth::Abi::Type] type to be encoded.
73
- # @param arg [String|Number] value to be encoded.
74
- # @return [String] the encoded type.
75
- # @raise [EncodingError] if value does not match type.
76
- def encode_type(type, arg)
77
- if %w(string bytes).include? type.base_type and type.sub_type.empty? and type.dimensions.empty?
78
- raise EncodingError, "Argument must be a String" unless arg.instance_of? String
79
-
80
- # encodes strings and bytes
81
- size = encode_type Type.size_type, arg.size
82
- padding = Constant::BYTE_ZERO * (Util.ceil32(arg.size) - arg.size)
83
- return "#{size}#{arg}#{padding}"
84
- elsif type.base_type == "tuple" && type.dimensions.size == 1 && type.dimensions[0] != 0
85
- result = ""
86
- result += encode_struct_offsets(type.nested_sub, arg)
87
- result += arg.map { |x| encode_type(type.nested_sub, x) }.join
88
- result
89
- elsif type.dynamic? && arg.is_a?(Array)
90
-
91
- # encodes dynamic-sized arrays
92
- head, tail = "", ""
93
- head += encode_type(Type.size_type, arg.size)
94
- nested_sub = type.nested_sub
95
- nested_sub_size = type.nested_sub.size
96
-
97
- # calculate offsets
98
- if %w(string bytes).include?(type.base_type) && type.sub_type.empty?
99
- offset = 0
100
- arg.size.times do |i|
101
- if i == 0
102
- offset = arg.size * 32
103
- else
104
- number_of_words = ((arg[i - 1].size + 32 - 1) / 32).floor
105
- total_bytes_length = number_of_words * 32
106
- offset += total_bytes_length + 32
107
- end
108
-
109
- head += encode_type(Type.size_type, offset)
110
- end
111
- elsif nested_sub.base_type == "tuple" && nested_sub.dynamic?
112
- head += encode_struct_offsets(nested_sub, arg)
113
- end
114
-
115
- arg.size.times do |i|
116
- head += encode_type nested_sub, arg[i]
117
- end
118
- return "#{head}#{tail}"
119
- else
120
- if type.dimensions.empty?
121
-
122
- # encode a primitive type
123
- return encode_primitive_type type, arg
124
- else
125
-
126
- # encode static-size arrays
127
- return arg.map { |x| encode_type(type.nested_sub, x) }.join
128
- end
129
- end
130
- end
131
-
132
- # Encodes primitive types.
133
- #
134
- # @param type [Eth::Abi::Type] type to be encoded.
135
- # @param arg [String|Number] value to be encoded.
136
- # @return [String] the encoded primitive type.
137
- # @raise [EncodingError] if value does not match type.
138
- # @raise [ValueOutOfBounds] if value is out of bounds for type.
139
- # @raise [EncodingError] if encoding fails for type.
140
- def encode_primitive_type(type, arg)
141
- case type.base_type
142
- when "uint"
143
- return encode_uint arg, type
144
- when "bool"
145
- return encode_bool arg
146
- when "int"
147
- return encode_int arg, type
148
- when "ureal", "ufixed"
149
- return encode_ufixed arg, type
150
- when "real", "fixed"
151
- return encode_fixed arg, type
152
- when "string", "bytes"
153
- return encode_bytes arg, type
154
- when "tuple"
155
- return encode_tuple arg, type
156
- when "hash"
157
- return encode_hash arg, type
158
- when "address"
159
- return encode_address arg
160
- else
161
- raise EncodingError, "Unhandled type: #{type.base_type} #{type.sub_type}"
162
- end
64
+ "#{head}#{tail}"
163
65
  end
164
66
 
165
67
  # Decodes Application Binary Interface (ABI) data. It accepts multiple
@@ -216,289 +118,12 @@ module Eth
216
118
  end
217
119
 
218
120
  # return the decoded ABI types and data
219
- return parsed_types.zip(outputs).map { |(type, out)| decode_type(type, out) }
220
- end
221
-
222
- # Decodes a specific value, either static or dynamic.
223
- #
224
- # @param type [Eth::Abi::Type] type to be decoded.
225
- # @param arg [String] encoded type data string.
226
- # @return [String] the decoded data for the type.
227
- # @raise [DecodingError] if decoding fails for type.
228
- def decode_type(type, arg)
229
- if %w(string bytes).include?(type.base_type) and type.sub_type.empty?
230
- l = Util.deserialize_big_endian_to_int arg[0, 32]
231
- data = arg[32..-1]
232
- raise DecodingError, "Wrong data size for string/bytes object" unless data.size == Util.ceil32(l)
233
-
234
- # decoded strings and bytes
235
- return data[0, l]
236
- elsif type.dynamic?
237
- l = Util.deserialize_big_endian_to_int arg[0, 32]
238
- nested_sub = type.nested_sub
239
-
240
- # ref https://github.com/ethereum/tests/issues/691
241
- raise NotImplementedError, "Decoding dynamic arrays with nested dynamic sub-types is not implemented for ABI." if nested_sub.dynamic?
242
-
243
- # decoded dynamic-sized arrays
244
- return (0...l).map { |i| decode_type(nested_sub, arg[32 + nested_sub.size * i, nested_sub.size]) }
245
- elsif !type.dimensions.empty?
246
- l = type.dimensions.last[0]
247
- nested_sub = type.nested_sub
248
-
249
- # decoded static-size arrays
250
- return (0...l).map { |i| decode_type(nested_sub, arg[nested_sub.size * i, nested_sub.size]) }
251
- else
252
-
253
- # decoded primitive types
254
- return decode_primitive_type type, arg
255
- end
256
- end
257
-
258
- # Decodes primitive types.
259
- #
260
- # @param type [Eth::Abi::Type] type to be decoded.
261
- # @param data [String] encoded primitive type data string.
262
- # @return [String] the decoded data for the type.
263
- # @raise [DecodingError] if decoding fails for type.
264
- def decode_primitive_type(type, data)
265
- case type.base_type
266
- when "address"
267
-
268
- # decoded address with 0x-prefix
269
- return "0x#{Util.bin_to_hex data[12..-1]}"
270
- when "string", "bytes"
271
- if type.sub_type.empty?
272
- size = Util.deserialize_big_endian_to_int data[0, 32]
273
-
274
- # decoded dynamic-sized array
275
- return data[32..-1][0, size]
276
- else
277
-
278
- # decoded static-sized array
279
- return data[0, type.sub_type.to_i]
280
- end
281
- when "hash"
282
-
283
- # decoded hash
284
- return data[(32 - type.sub_type.to_i), type.sub_type.to_i]
285
- when "uint"
286
-
287
- # decoded unsigned integer
288
- return Util.deserialize_big_endian_to_int data
289
- when "int"
290
- u = Util.deserialize_big_endian_to_int data
291
- i = u >= 2 ** (type.sub_type.to_i - 1) ? (u - 2 ** type.sub_type.to_i) : u
292
-
293
- # decoded integer
294
- return i
295
- when "ureal", "ufixed"
296
- high, low = type.sub_type.split("x").map(&:to_i)
297
-
298
- # decoded unsigned fixed point numeric
299
- return Util.deserialize_big_endian_to_int(data) * 1.0 / 2 ** low
300
- when "real", "fixed"
301
- high, low = type.sub_type.split("x").map(&:to_i)
302
- u = Util.deserialize_big_endian_to_int data
303
- i = u >= 2 ** (high + low - 1) ? (u - 2 ** (high + low)) : u
304
-
305
- # decoded fixed point numeric
306
- return i * 1.0 / 2 ** low
307
- when "bool"
308
-
309
- # decoded boolean
310
- return data[-1] == Constant::BYTE_ONE
311
- else
312
- raise DecodingError, "Unknown primitive type: #{type.base_type}"
313
- end
314
- end
315
-
316
- # Build event signature string from ABI interface.
317
- #
318
- # @param interface [Hash] ABI event interface.
319
- # @return [String] interface signature string.
320
- def signature(interface)
321
- name = interface.fetch("name")
322
- inputs = interface.fetch("inputs", [])
323
- types = inputs.map { |i| i.fetch("type") }
324
- "#{name}(#{types.join(",")})"
325
- end
326
-
327
- private
328
-
329
- # Properly encodes unsigned integers.
330
- def encode_uint(arg, type)
331
- raise ArgumentError, "Don't know how to handle this input." unless arg.is_a? Numeric
332
- raise ValueOutOfBounds, "Number out of range: #{arg}" if arg > Constant::UINT_MAX or arg < Constant::UINT_MIN
333
- real_size = type.sub_type.to_i
334
- i = arg.to_i
335
- raise ValueOutOfBounds, arg unless i >= 0 and i < 2 ** real_size
336
- return Util.zpad_int i
337
- end
338
-
339
- # Properly encodes signed integers.
340
- def encode_int(arg, type)
341
- raise ArgumentError, "Don't know how to handle this input." unless arg.is_a? Numeric
342
- raise ValueOutOfBounds, "Number out of range: #{arg}" if arg > Constant::INT_MAX or arg < Constant::INT_MIN
343
- real_size = type.sub_type.to_i
344
- i = arg.to_i
345
- raise ValueOutOfBounds, arg unless i >= -2 ** (real_size - 1) and i < 2 ** (real_size - 1)
346
- return Util.zpad_int(i % 2 ** type.sub_type.to_i)
347
- end
348
-
349
- # Properly encodes booleans.
350
- def encode_bool(arg)
351
- raise EncodingError, "Argument is not bool: #{arg}" unless arg.instance_of? TrueClass or arg.instance_of? FalseClass
352
- return Util.zpad_int(arg ? 1 : 0)
353
- end
354
-
355
- # Properly encodes unsigned fixed-point numbers.
356
- def encode_ufixed(arg, type)
357
- raise ArgumentError, "Don't know how to handle this input." unless arg.is_a? Numeric
358
- high, low = type.sub_type.split("x").map(&:to_i)
359
- raise ValueOutOfBounds, arg unless arg >= 0 and arg < 2 ** high
360
- return Util.zpad_int((arg * 2 ** low).to_i)
361
- end
362
-
363
- # Properly encodes signed fixed-point numbers.
364
- def encode_fixed(arg, type)
365
- raise ArgumentError, "Don't know how to handle this input." unless arg.is_a? Numeric
366
- high, low = type.sub_type.split("x").map(&:to_i)
367
- raise ValueOutOfBounds, arg unless arg >= -2 ** (high - 1) and arg < 2 ** (high - 1)
368
- i = (arg * 2 ** low).to_i
369
- return Util.zpad_int(i % 2 ** (high + low))
370
- end
371
-
372
- # Properly encodes byte-strings.
373
- def encode_bytes(arg, type)
374
- raise EncodingError, "Expecting String: #{arg}" unless arg.instance_of? String
375
- arg = handle_hex_string arg, type
376
-
377
- if type.sub_type.empty?
378
- size = Util.zpad_int arg.size
379
- padding = Constant::BYTE_ZERO * (Util.ceil32(arg.size) - arg.size)
380
-
381
- # variable length string/bytes
382
- return "#{size}#{arg}#{padding}"
383
- else
384
- raise ValueOutOfBounds, arg unless arg.size <= type.sub_type.to_i
385
- padding = Constant::BYTE_ZERO * (32 - arg.size)
386
-
387
- # fixed length string/bytes
388
- return "#{arg}#{padding}"
389
- end
390
- end
391
-
392
- # Properly encodes tuples.
393
- def encode_tuple(arg, type)
394
- raise EncodingError, "Expecting Hash: #{arg}" unless arg.instance_of? Hash
395
- raise EncodingError, "Expecting #{type.components.size} elements: #{arg}" unless arg.size == type.components.size
396
-
397
- static_size = 0
398
- type.components.each_with_index do |component, i|
399
- if type.components[i].dynamic?
400
- static_size += 32
401
- else
402
- static_size += Util.ceil32(type.components[i].size || 0)
403
- end
404
- end
405
-
406
- dynamic_offset = static_size
407
- offsets_and_static_values = []
408
- dynamic_values = []
409
-
410
- type.components.each_with_index do |component, i|
411
- component_type = type.components[i]
412
- if component_type.dynamic?
413
- offsets_and_static_values << encode_type(Type.size_type, dynamic_offset)
414
- dynamic_value = encode_type(component_type, arg.is_a?(Array) ? arg[i] : arg[component_type.name])
415
- dynamic_values << dynamic_value
416
- dynamic_offset += dynamic_value.size
417
- else
418
- offsets_and_static_values << encode_type(component_type, arg.is_a?(Array) ? arg[i] : arg[component_type.name])
419
- end
420
- end
421
-
422
- offsets_and_static_values.join + dynamic_values.join
423
- end
424
-
425
- # Properly encode struct offsets.
426
- def encode_struct_offsets(type, arg)
427
- result = ""
428
- offset = arg.size
429
- tails_encoding = arg.map { |a| encode_type(type, a) }
430
- arg.size.times do |i|
431
- if i == 0
432
- offset *= 32
433
- else
434
- offset += tails_encoding[i - 1].size
435
- end
436
- offset_string = encode_type(Type.size_type, offset)
437
- result += offset_string
438
- end
439
- result
440
- end
441
-
442
- # Properly encodes hash-strings.
443
- def encode_hash(arg, type)
444
- size = type.sub_type.to_i
445
- raise EncodingError, "Argument too long: #{arg}" unless size > 0 and size <= 32
446
- if arg.is_a? Integer
447
-
448
- # hash from integer
449
- return Util.zpad_int arg
450
- elsif arg.size == size
451
-
452
- # hash from encoded hash
453
- return Util.zpad arg, 32
454
- elsif arg.size == size * 2
455
-
456
- # hash from hexa-decimal hash
457
- return Util.zpad_hex arg
458
- else
459
- raise EncodingError, "Could not parse hash: #{arg}"
460
- end
461
- end
462
-
463
- # Properly encodes addresses.
464
- def encode_address(arg)
465
- if arg.is_a? Integer
466
-
467
- # address from integer
468
- return Util.zpad_int arg
469
- elsif arg.size == 20
470
-
471
- # address from encoded address
472
- return Util.zpad arg, 32
473
- elsif arg.size == 40
474
-
475
- # address from hexa-decimal address with 0x prefix
476
- return Util.zpad_hex arg
477
- elsif arg.size == 42 and arg[0, 2] == "0x"
478
-
479
- # address from hexa-decimal address
480
- return Util.zpad_hex arg[2..-1]
481
- else
482
- raise EncodingError, "Could not parse address: #{arg}"
483
- end
484
- end
485
-
486
- # The ABI encoder needs to be able to determine between a hex `"123"`
487
- # and a binary `"123"` string.
488
- def handle_hex_string(arg, type)
489
- if Util.prefixed? arg or
490
- (arg.size === type.sub_type.to_i * 2 and Util.hex? arg)
491
-
492
- # There is no way telling whether a string is hex or binary with certainty
493
- # in Ruby. Therefore, we assume a `0x` prefix to indicate a hex string.
494
- # Additionally, if the string size is exactly the double of the expected
495
- # binary size, we can assume a hex value.
496
- return Util.hex_to_bin arg
497
- else
498
-
499
- # Everything else will be assumed binary or raw string.
500
- return arg.b
501
- end
121
+ parsed_types.zip(outputs).map { |(type, out)| Abi::Decoder.type(type, out) }
502
122
  end
503
123
  end
504
124
  end
125
+
126
+ require "eth/abi/decoder"
127
+ require "eth/abi/encoder"
128
+ require "eth/abi/event"
129
+ require "eth/abi/type"
data/lib/eth/api.rb CHANGED
@@ -18,31 +18,31 @@ module Eth
18
18
  # Provides the `Eth::Api` module grouping known RPC commands.
19
19
  module Api
20
20
 
21
- # Implements the available RPC-APIs provided by Geth version 1.10.15.
21
+ # Implements the available RPC-APIs provided by Geth version 1.10.26.
22
22
  COMMANDS = [
23
+ "account_ecRecover",
24
+ "account_new",
25
+ "account_signData",
26
+ "account_signTransaction",
27
+ "account_signTypedData",
23
28
  "admin_addPeer",
24
29
  "admin_addTrustedPeer",
25
- "admin_clearHistory",
26
30
  "admin_datadir",
27
31
  "admin_exportChain",
28
- "admin_getDatadir",
29
- "admin_getNodeInfo",
30
- "admin_getPeers",
31
32
  "admin_importChain",
32
33
  "admin_nodeInfo",
34
+ "admin_peerEvents",
33
35
  "admin_peers",
34
36
  "admin_removePeer",
35
37
  "admin_removeTrustedPeer",
36
- "admin_sleep",
37
- "admin_sleepBlocks",
38
38
  "admin_startHTTP",
39
- "admin_startRPC",
40
39
  "admin_startWS",
41
40
  "admin_stopHTTP",
42
- "admin_stopRPC",
43
41
  "admin_stopWS",
42
+ "clef_deriveAccount",
43
+ "clef_listWallets",
44
+ "clef_openWallet",
44
45
  "clique_discard",
45
- "clique_getProposals",
46
46
  "clique_getSigner",
47
47
  "clique_getSigners",
48
48
  "clique_getSignersAtHash",
@@ -51,12 +51,19 @@ module Eth
51
51
  "clique_proposals",
52
52
  "clique_propose",
53
53
  "clique_status",
54
+ "db_getHex",
55
+ "db_getString",
56
+ "db_putHex",
57
+ "db_putString",
54
58
  "debug_accountRange",
55
59
  "debug_backtraceAt",
56
60
  "debug_blockProfile",
57
61
  "debug_chaindbCompact",
58
62
  "debug_chaindbProperty",
59
63
  "debug_cpuProfile",
64
+ "debug_dbAncient",
65
+ "debug_dbAncients",
66
+ "debug_dbGet",
60
67
  "debug_dumpBlock",
61
68
  "debug_freeOSMemory",
62
69
  "debug_freezeClient",
@@ -67,6 +74,10 @@ module Eth
67
74
  "debug_getHeaderRlp",
68
75
  "debug_getModifiedAccountsByHash",
69
76
  "debug_getModifiedAccountsByNumber",
77
+ "debug_getRawBlock",
78
+ "debug_getRawHeader",
79
+ "debug_getRawReceipts",
80
+ "debug_getRawTransaction",
70
81
  "debug_goTrace",
71
82
  "debug_intermediateRoots",
72
83
  "debug_memStats",
@@ -86,13 +97,14 @@ module Eth
86
97
  "debug_stopCPUProfile",
87
98
  "debug_stopGoTrace",
88
99
  "debug_storageRangeAt",
89
- "debug_testSignCliqueBlock",
100
+ "debug_subscribe",
90
101
  "debug_traceBadBlock",
91
102
  "debug_traceBlock",
92
103
  "debug_traceBlockByHash",
93
104
  "debug_traceBlockByNumber",
94
105
  "debug_traceBlockFromFile",
95
106
  "debug_traceCall",
107
+ "debug_traceChain",
96
108
  "debug_traceTransaction",
97
109
  "debug_verbosity",
98
110
  "debug_vmodule",
@@ -103,79 +115,48 @@ module Eth
103
115
  "eth_blockNumber",
104
116
  "eth_call",
105
117
  "eth_chainId",
106
- "eth_coinbase",
107
- "eth_compile",
108
- "eth_contract",
118
+ "eth_compileLLL",
119
+ "eth_compileSerpent",
120
+ "eth_compileSolidity",
109
121
  "eth_createAccessList",
110
- "eth_defaultAccount",
111
- "eth_defaultBlock",
112
122
  "eth_estimateGas",
113
123
  "eth_feeHistory",
114
- "eth_fillTransaction",
115
- "eth_filter",
116
124
  "eth_gasPrice",
117
- "eth_getAccounts",
118
125
  "eth_getBalance",
119
- "eth_getBlock",
120
126
  "eth_getBlockByHash",
121
127
  "eth_getBlockByNumber",
122
- "eth_getBlockNumber",
123
- "eth_getBlockTransactionCount",
124
128
  "eth_getBlockTransactionCountByHash",
125
129
  "eth_getBlockTransactionCountByNumber",
126
- "eth_getBlockUncleCount",
127
130
  "eth_getCode",
128
- "eth_getCoinbase",
129
131
  "eth_getCompilers",
130
132
  "eth_getFilterChanges",
131
133
  "eth_getFilterLogs",
132
- "eth_getGasPrice",
133
- "eth_getHashrate",
134
- "eth_getHeaderByHash",
135
- "eth_getHeaderByNumber",
136
134
  "eth_getLogs",
137
- "eth_getMaxPriorityFeePerGas",
138
- "eth_getMining",
139
- "eth_getPendingTransactions",
140
135
  "eth_getProof",
141
- "eth_getProtocolVersion",
142
- "eth_getRawTransaction",
143
- "eth_getRawTransactionFromBlock",
144
136
  "eth_getStorageAt",
145
- "eth_getSyncing",
146
- "eth_getTransaction",
147
137
  "eth_getTransactionByBlockHashAndIndex",
148
138
  "eth_getTransactionByBlockNumberAndIndex",
149
139
  "eth_getTransactionByHash",
150
140
  "eth_getTransactionCount",
151
- "eth_getTransactionFromBlock",
152
141
  "eth_getTransactionReceipt",
153
- "eth_getUncle",
142
+ "eth_getUncleByBlockHashAndIndex",
143
+ "eth_getUncleByBlockNumberAndIndex",
154
144
  "eth_getUncleCountByBlockHash",
155
145
  "eth_getUncleCountByBlockNumber",
156
146
  "eth_getWork",
157
147
  "eth_hashrate",
158
- "eth_iban",
159
- "eth_icapNamereg",
160
- "eth_isSyncing",
161
148
  "eth_maxPriorityFeePerGas",
162
149
  "eth_mining",
163
- "eth_namereg",
164
150
  "eth_newBlockFilter",
165
151
  "eth_newFilter",
166
152
  "eth_newPendingTransactionFilter",
167
- "eth_pendingTransactions",
168
153
  "eth_protocolVersion",
169
- "eth_resend",
170
- "eth_sendIBANTransaction",
171
154
  "eth_sendRawTransaction",
172
155
  "eth_sendTransaction",
173
156
  "eth_sign",
174
157
  "eth_signTransaction",
175
158
  "eth_submitHashrate",
176
- "eth_submitTransaction",
177
159
  "eth_submitWork",
178
- "eth_subscribe",
179
160
  "eth_syncing",
180
161
  "eth_uninstallFilter",
181
162
  "eth_unsubscribe",
@@ -193,14 +174,17 @@ module Eth
193
174
  "miner_setExtra",
194
175
  "miner_setGasLimit",
195
176
  "miner_setGasPrice",
177
+ "miner_setRecommitInterval",
196
178
  "miner_start",
197
179
  "miner_stop",
180
+ "net_listening",
181
+ "net_peerCount",
182
+ "net_version",
198
183
  "personal_deriveAccount",
199
184
  "personal_ecRecover",
200
- "personal_getListAccounts",
201
- "personal_getListWallets",
202
185
  "personal_importRawKey",
203
186
  "personal_initializeWallet",
187
+ "personal_initializeWallets",
204
188
  "personal_listAccounts",
205
189
  "personal_listWallets",
206
190
  "personal_lockAccount",
@@ -211,13 +195,22 @@ module Eth
211
195
  "personal_signTransaction",
212
196
  "personal_unlockAccount",
213
197
  "personal_unpair",
198
+ "shh_addToGroup",
199
+ "shh_getFilterChanges",
200
+ "shh_getMessages",
201
+ "shh_hasIdentity",
202
+ "shh_newFilter",
203
+ "shh_newGroup",
204
+ "shh_newIdentity",
205
+ "shh_post",
206
+ "shh_uninstallFilter",
207
+ "shh_version",
214
208
  "txpool_content",
215
209
  "txpool_contentFrom",
216
- "txpool_getContent",
217
- "txpool_getInspect",
218
- "txpool_getStatus",
219
210
  "txpool_inspect",
220
211
  "txpool_status",
212
+ "web3_clientVersion",
213
+ "web3_sha3",
221
214
  ]
222
215
  end
223
216
  end
data/lib/eth/chain.rb CHANGED
@@ -104,6 +104,15 @@ module Eth
104
104
  # Chain ID for the geth private network preset.
105
105
  PRIVATE_GETH = 1337.freeze
106
106
 
107
+ # Chain ID for Moonbase
108
+ MOONBASE = 1287.freeze
109
+
110
+ # Chain ID for Moonriver
111
+ MOONRIVER = 1285.freeze
112
+
113
+ # Chain ID for Moonbeam
114
+ MOONBEAM = 1284.freeze
115
+
107
116
  # Indicates wether the given `v` indicates a legacy chain value
108
117
  # used by ledger wallets without EIP-155 replay protection.
109
118
  #