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 +4 -4
- data/Gemfile.lock +1 -1
- data/lib/client/http_client.rb +27 -4
- data/lib/metadata/metadata.rb +7 -0
- data/lib/metadata/metadata_v14.rb +11 -4
- data/lib/portable_codec.rb +1 -1
- data/lib/scale_rb/version.rb +1 -1
- data/lib/scale_rb.rb +5 -7
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 0c7019e91465191e14eb99ca5b57435245b9cb533cc0b5eb7e9ee944f8485a8c
|
|
4
|
+
data.tar.gz: 8d9eb533ffb3046536f915c39271049d46b20a1417989e6844c6b3ba927bd1e3
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ef65503ad4ccc4f26490c0ff9ed0715beb312ee50ca5ca6a1f4824a924a01cd833503bbd1f80e8c510eb26d12a6f400655a0fcc5bed12a505ef15cb1e686b69d
|
|
7
|
+
data.tar.gz: cf36689a9d7bf12c104f51e39483f3db58d073423d314692f07cfba1ce49e324032c57b4fbe122b207f85ac08af60bbdb44dc8e21fde0c558bbbd05bb255d40f
|
data/Gemfile.lock
CHANGED
data/lib/client/http_client.rb
CHANGED
|
@@ -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
|
-
|
|
22
|
+
|
|
23
|
+
raise res.class.name unless res.is_a?(Net::HTTPSuccess)
|
|
20
24
|
|
|
21
25
|
result = JSON.parse(res.body)
|
|
22
|
-
|
|
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
|
-
|
|
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
|
data/lib/metadata/metadata.rb
CHANGED
|
@@ -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
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
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
|
|
data/lib/portable_codec.rb
CHANGED
|
@@ -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?
|
data/lib/scale_rb/version.rb
CHANGED
data/lib/scale_rb.rb
CHANGED
|
@@ -32,16 +32,14 @@ require 'address'
|
|
|
32
32
|
|
|
33
33
|
module ScaleRb
|
|
34
34
|
class << self
|
|
35
|
-
|
|
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.
|
|
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-
|
|
11
|
+
date: 2023-08-21 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: blake2b_rs
|