scale_rb 0.1.8 → 0.1.10

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 241f9857282220d19480bed1cf2a1bcaeacd0948963a65455ee1c57b708ed4d6
4
- data.tar.gz: 8ab8fad9f853c7f3d1d57bf9f283b2fbe16a6d17bb2f1221b84ff3a78feff34c
3
+ metadata.gz: 0c7019e91465191e14eb99ca5b57435245b9cb533cc0b5eb7e9ee944f8485a8c
4
+ data.tar.gz: 8d9eb533ffb3046536f915c39271049d46b20a1417989e6844c6b3ba927bd1e3
5
5
  SHA512:
6
- metadata.gz: b712d5a8dc5a9c6c90580467f81939b843e876bc4bbf7f6b53bccbeb12a411e8104acffdfd3419ad70d760c4f375862c09de1b6964c5e4ecf8a92cdc4efdfdb2
7
- data.tar.gz: 2b9cb6bb007b0dbff88839e3e811628241290de7383e1f85cfc68ba7a7936ea85d0a479d54035854d18e3cf79685aba1bf8f7f0d7b519ab4089cd75048f0262a
6
+ metadata.gz: ef65503ad4ccc4f26490c0ff9ed0715beb312ee50ca5ca6a1f4824a924a01cd833503bbd1f80e8c510eb26d12a6f400655a0fcc5bed12a505ef15cb1e686b69d
7
+ data.tar.gz: cf36689a9d7bf12c104f51e39483f3db58d073423d314692f07cfba1ce49e324032c57b4fbe122b207f85ac08af60bbdb44dc8e21fde0c558bbbd05bb255d40f
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- scale_rb (0.1.8)
4
+ scale_rb (0.1.10)
5
5
  base58
6
6
  blake2b_rs (~> 0.1.4)
7
7
  xxhash
@@ -4,24 +4,34 @@ require 'uri'
4
4
  require 'net/http'
5
5
  require 'json'
6
6
 
7
+ # TODO: method_name = cmd.gsub(/([a-z\d])([A-Z])/, '\1_\2').downcase
7
8
  module ScaleRb
8
9
  module HttpClient
9
10
  extend RpcRequestBuilder
10
11
 
11
12
  class << self
12
13
  def request(url, body)
14
+ ScaleRb.logger.debug "url: #{url}"
15
+ ScaleRb.logger.debug "body: #{body}"
13
16
  uri = URI(url)
14
17
  req = Net::HTTP::Post.new(uri, 'Content-Type' => 'application/json')
15
18
  req.body = body
16
19
  http = Net::HTTP.new(uri.host, uri.port)
17
20
  http.use_ssl = true if uri.instance_of? URI::HTTPS
18
21
  res = http.request(req)
19
- # puts res unless res.is_a?(Net::HTTPSuccess)
22
+
23
+ raise res.class.name unless res.is_a?(Net::HTTPSuccess)
20
24
 
21
25
  result = JSON.parse(res.body)
22
- raise result['error'] if result['error']
26
+ ScaleRb.logger.debug result
27
+ raise result['error']['message'] if result['error']
23
28
 
24
29
  result['result']
30
+ rescue StandardError => e
31
+ ScaleRb.logger.error e.message
32
+ ScaleRb.logger.error 'retry...'
33
+ sleep 2
34
+ request(url, body)
25
35
  end
26
36
 
27
37
  def json_rpc_call(url, method, *params)
@@ -34,7 +44,20 @@ module ScaleRb
34
44
  end
35
45
 
36
46
  def method_missing(method, *args)
37
- json_rpc_call(args[0], method, *args[1..])
47
+ ScaleRb.logger.debug "#{method}(#{args.join(', ')})"
48
+ # check if the first argument is a url
49
+ url_regex = %r{^https?://}
50
+ raise 'url format is not correct' unless args[0].match?(url_regex)
51
+
52
+ url = args[0]
53
+ raise NoMethodError, "undefined rpc method `#{method}'" unless rpc_methods(url).include?(method.to_s)
54
+
55
+ json_rpc_call(url, method, *args[1..])
56
+ end
57
+
58
+ def rpc_methods(url)
59
+ result = json_rpc_call(url, 'rpc_methods', [])
60
+ result['methods']
38
61
  end
39
62
 
40
63
  def get_metadata(url, at = nil)
@@ -157,4 +180,4 @@ module ScaleRb
157
180
  end
158
181
  end
159
182
  end
160
- end
183
+ end
@@ -49,6 +49,13 @@ module Metadata
49
49
  Metadata.const_get("Metadata#{version.upcase}").get_calls_type_id(pallet_name, metadata)
50
50
  end
51
51
 
52
+ def get_call_type(pallet_name, call_name, metadata)
53
+ version = metadata._get(:metadata).keys.first
54
+ raise ScaleRb::NotImplemented, metadata._get(:metadata).keys.first unless %w[v9 v10 v11 v12 v13 v14].include?(version.to_s)
55
+
56
+ Metadata.const_get("Metadata#{version.upcase}").get_call_type(pallet_name, call_name, metadata)
57
+ end
58
+
52
59
  # call examples:
53
60
  # {:pallet_name=>"Deposit", :call_name=>"Claim", :call=>["claim", []]}
54
61
  # {:pallet_name=>"Balances", :call_name=>"Transfer", :call=>[{:transfer=>{:dest=>[10, 18, 135, 151, 117, 120, 248, 136, 189, 193, 199, 98, 119, 129, 175, 28, 192, 0, 230, 171], :value=>11000000000000000000}}, []]}
@@ -28,6 +28,12 @@ module Metadata
28
28
  end
29
29
  end
30
30
 
31
+ def get_calls_type_id(pallet_name, metadata)
32
+ pallet = get_module(pallet_name, metadata)
33
+ raise "Pallet `#{pallet_name}` not found" if pallet.nil?
34
+ pallet._get(:calls)._get(:type)
35
+ end
36
+
31
37
  def get_calls_type(pallet_name, metadata)
32
38
  type_id = get_calls_type_id(pallet_name, metadata)
33
39
  metadata._get(:metadata)._get(:v14)._get(:lookup)._get(:types).find do |type|
@@ -35,10 +41,11 @@ module Metadata
35
41
  end
36
42
  end
37
43
 
38
- def get_calls_type_id(pallet_name, metadata)
39
- pallet = get_module(pallet_name, metadata)
40
- raise "Pallet `#{pallet_name}` not found" if pallet.nil?
41
- pallet._get(:calls)._get(:type)
44
+ def get_call_type(pallet_name, call_name, metadata)
45
+ calls_type = get_calls_type(pallet_name, metadata)
46
+ calls_type._get(:type)._get(:def)._get(:variant)._get(:variants).find do |variant|
47
+ variant._get(:name).downcase == call_name.downcase
48
+ end
42
49
  end
43
50
  end
44
51
 
@@ -112,7 +112,7 @@ module PortableCodec
112
112
  def decode_variant(variant_type, bytes, registry)
113
113
  variants = variant_type._get(:variants)
114
114
 
115
- index = bytes[0]
115
+ index = bytes[0].to_i # TODO: check
116
116
  item = variants.find { |v| v._get(:index) == index } # item is an composite
117
117
 
118
118
  raise VariantIndexOutOfRange, "type: #{variant_type}, index: #{index}, bytes: #{bytes}" if item.nil?
@@ -1,3 +1,3 @@
1
1
  module ScaleRb
2
- VERSION = '0.1.8'
2
+ VERSION = '0.1.10'
3
3
  end
data/lib/scale_rb.rb CHANGED
@@ -32,16 +32,14 @@ require 'address'
32
32
 
33
33
  module ScaleRb
34
34
  class << self
35
- attr_writer :logger
36
-
37
- def logger
38
- @logger ||= Logger.new($stdout)
39
- @logger.level = Logger::INFO
40
- @logger
41
- end
35
+ attr_accessor :logger
42
36
 
43
37
  def debug(key, value)
44
38
  logger.debug "#{key.rjust(15)}: #{value}"
45
39
  end
46
40
  end
47
41
  end
42
+
43
+ logger = Logger.new($stdout)
44
+ logger.level = Logger::INFO
45
+ ScaleRb.logger = logger
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: scale_rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.8
4
+ version: 0.1.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aki Wu
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-04-05 00:00:00.000000000 Z
11
+ date: 2023-08-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: blake2b_rs