ic_agent 0.1.1 → 0.1.3
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/ic_agent/ast/assembler.rb +4 -26
- data/lib/ic_agent/ast/did_grammar.treetop +8 -4
- data/lib/ic_agent/ast/did_grammar_v2.treetop +159 -0
- data/lib/ic_agent/ast/nested_type_grammar.treetop +118 -0
- data/lib/ic_agent/ast/nodes/named_nodes.rb +24 -57
- data/lib/ic_agent/ast/nodes/statement_nodes.rb +224 -0
- data/lib/ic_agent/ast/record_parser.treetop +22 -0
- data/lib/ic_agent/ast/statement_parser.rb +101 -0
- data/lib/ic_agent/ast/variant_parser.treetop +21 -0
- data/lib/ic_agent/canister.rb +13 -11
- data/lib/ic_agent/common/cycles_wallet.rb +1 -4
- data/lib/ic_agent/common/management.rb +130 -6
- data/lib/ic_agent/version.rb +1 -1
- data/lib/ic_agent.rb +2 -0
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8f6dd5be4d1dbd760c09b92da6efa53590adf43cad43c6ef495ccb704deccf1a
|
4
|
+
data.tar.gz: d28f144bd132dbb0dca0a13f7f12f8749595b1055f70801ffa8dc117cc113bb0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b332d5369452f62130204a09c92d24a96029a054c7e02f92ddbaed137167b7f7eccf6e7458b76e6bf4a56da43a540ae937435dae5bd5a2329f680e100f80d53f
|
7
|
+
data.tar.gz: d7ff9b8954dc25684ef50da692aeea12e000b7e146a40c803aec70bfb6ffc4e5f0348984af230fd55cb71ab7b69f1c91634d9fdd7b7f47d471d9b6efac321098
|
data/Gemfile.lock
CHANGED
@@ -153,32 +153,10 @@ module IcAgent
|
|
153
153
|
end
|
154
154
|
|
155
155
|
def self.get_params_refer_values(type_str)
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
_, item_value = get_record_key_value(item, ' : ', key_index)
|
161
|
-
value_arr << item_value.split(' ')
|
162
|
-
key_index += 1
|
163
|
-
end
|
164
|
-
|
165
|
-
replaced_hash.each_key do |key|
|
166
|
-
item_arr = replaced_hash[key].strip.split(';')
|
167
|
-
item_arr.each do |item|
|
168
|
-
multi_item_arr = item.strip.split(':')
|
169
|
-
if multi_item_arr.size > 1
|
170
|
-
item_value_arr = multi_item_arr[1].strip.split(' ').collect { |v| v.strip.gsub(';', '') }
|
171
|
-
item_value_arr.delete('{')
|
172
|
-
item_value_arr.delete('}')
|
173
|
-
item_value_arr.delete('{}')
|
174
|
-
value_arr << item_value_arr
|
175
|
-
else
|
176
|
-
value_arr << multi_item_arr[1].strip
|
177
|
-
end
|
178
|
-
end
|
179
|
-
value_arr.delete(key)
|
180
|
-
end
|
181
|
-
value_arr.flatten.uniq - IcAgent::Candid::ALL_TYPES - replaced_hash.keys
|
156
|
+
parser = IcAgent::Ast::StatementParser.new
|
157
|
+
parser.parse(type_str)
|
158
|
+
refer_type = parser.source_tree.content[:refer_type]
|
159
|
+
refer_type
|
182
160
|
end
|
183
161
|
|
184
162
|
def self.recover_type(type_str, multi_types)
|
@@ -6,7 +6,7 @@ grammar DIDGrammar
|
|
6
6
|
|
7
7
|
rule base_type
|
8
8
|
'bool' / 'text' / 'null' / 'reserved' / 'empty' / 'principal' / 'nat8' / 'nat16' / 'nat32' / 'nat64' / 'int8' / 'int16' / 'int32' / 'int64' / 'float32' / 'float64' /
|
9
|
-
'opt' / 'vec' / 'record' / 'variant' / 'service' / 'func' / 'nat' / 'int' / blob
|
9
|
+
'opt' / 'vec' / 'record' / 'variant' / 'service' / 'func' / 'nat' / 'int' / 'blob'
|
10
10
|
end
|
11
11
|
|
12
12
|
rule base_type_single
|
@@ -90,15 +90,19 @@ grammar DIDGrammar
|
|
90
90
|
end
|
91
91
|
|
92
92
|
rule service_item
|
93
|
-
space? service_method_name space? ":" space? "(" service_method_params? ")" space? "->" space? "(" service_method_return_type ")" space? method_query? ';' end_of_line? <IcAgent::Ast::Nodes::IcServiceItem>
|
93
|
+
space? service_method_name space? ":" space? "(" service_method_params? ")" space? "->" space? "(" service_method_return_type? ")" space? method_query? ';' end_of_line? <IcAgent::Ast::Nodes::IcServiceItem>
|
94
94
|
end
|
95
95
|
|
96
96
|
rule service_method_params
|
97
|
-
|
97
|
+
source_coding (", " source_coding)* <IcAgent::Ast::Nodes::IcServiceMethodParams>
|
98
98
|
end
|
99
99
|
|
100
100
|
rule service_method_return_type
|
101
|
-
|
101
|
+
source_coding (", " source_coding)* <IcAgent::Ast::Nodes::IcServiceMethodReturn>
|
102
|
+
end
|
103
|
+
|
104
|
+
rule source_coding
|
105
|
+
[a-zA-Z0-9_{}:;\n ]*
|
102
106
|
end
|
103
107
|
|
104
108
|
rule method_query
|
@@ -0,0 +1,159 @@
|
|
1
|
+
grammar DIDGrammar
|
2
|
+
|
3
|
+
rule body
|
4
|
+
( type_declaration / service_declaration / comment / end_of_line )* <IcAgent::Ast::Nodes::DIDFile>
|
5
|
+
end
|
6
|
+
|
7
|
+
rule base_type
|
8
|
+
'bool' / 'text' / 'null' / 'reserved' / 'empty' / 'principal' / 'nat8' / 'nat16' / 'nat32' / 'nat64' / 'int8' / 'int16' / 'int32' / 'int64' / 'float32' / 'float64' /
|
9
|
+
'opt' / 'vec' / 'record' / 'variant' / 'service' / 'func' / 'nat' / 'int' / blob
|
10
|
+
end
|
11
|
+
|
12
|
+
rule base_type_single
|
13
|
+
'bool' / 'text' / 'null' / 'reserved' / 'empty' / 'principal' / 'nat8' / 'nat16' / 'nat32' / 'nat64' / 'int8' / 'int16' / 'int32' / 'int64' / 'float32' / 'float64' / 'nat' / 'int' / 'blob'
|
14
|
+
end
|
15
|
+
|
16
|
+
rule base_type_base
|
17
|
+
base_type_single+ <IcAgent::Ast::Nodes::BaseTypeSingle>
|
18
|
+
end
|
19
|
+
|
20
|
+
rule base_type_code
|
21
|
+
[a-zA-Z0-9_]+ <IcAgent::Ast::Nodes::BaseTypeOther>
|
22
|
+
end
|
23
|
+
|
24
|
+
rule base_type_key
|
25
|
+
[a-zA-Z0-9_]+ <IcAgent::Ast::Nodes::BaseTypeKey>
|
26
|
+
end
|
27
|
+
|
28
|
+
rule base_type_vec
|
29
|
+
'vec' space ic_all_type <IcAgent::Ast::Nodes::BaseTypeVec>
|
30
|
+
end
|
31
|
+
|
32
|
+
rule base_type_opt
|
33
|
+
'opt' space ic_all_type <IcAgent::Ast::Nodes::BaseTypeOpt>
|
34
|
+
end
|
35
|
+
|
36
|
+
rule base_type_record
|
37
|
+
'record' space '{' space_and_line ic_base_content space_and_line '}' <IcAgent::Ast::Nodes::BaseTypeRecord>
|
38
|
+
end
|
39
|
+
|
40
|
+
rule base_type_record_null
|
41
|
+
'record {}' <IcAgent::Ast::Nodes::BaseTypeRecord>
|
42
|
+
end
|
43
|
+
|
44
|
+
rule base_type_variant
|
45
|
+
'variant' space '{' space_and_line ic_base_content space_and_line '}' <IcAgent::Ast::Nodes::BaseTypeVariant>
|
46
|
+
end
|
47
|
+
|
48
|
+
rule base_type_func
|
49
|
+
'func' space? "(" service_method_params? ")" space? "->" space? "(" service_method_return_type ")" space? method_query? <IcAgent::Ast::Nodes::BaseTypeFunc>
|
50
|
+
end
|
51
|
+
|
52
|
+
rule ic_all_type
|
53
|
+
base_type_base / base_type_vec / base_type_record / base_type_record_null / base_type_variant / base_type_opt / base_type_func / base_type_code
|
54
|
+
end
|
55
|
+
|
56
|
+
rule ic_base_content
|
57
|
+
(ic_base_type)+ <IcAgent::Ast::Nodes::BaseTypeContent>
|
58
|
+
end
|
59
|
+
|
60
|
+
rule ic_base_type
|
61
|
+
space? base_type_key space? (':' space ic_all_type)* optional_semicolon <IcAgent::Ast::Nodes::BaseTypeChild>
|
62
|
+
end
|
63
|
+
|
64
|
+
rule type_declaration
|
65
|
+
'type' space_and_line type_name space_and_line '=' space_and_line ic_all_type ';' end_of_line <IcAgent::Ast::Nodes::TypeDeclaration>
|
66
|
+
end
|
67
|
+
|
68
|
+
rule type_name
|
69
|
+
[a-zA-Z0-9_]+ <IcAgent::Ast::Nodes::TypeName>
|
70
|
+
end
|
71
|
+
|
72
|
+
rule comment
|
73
|
+
space? '//' space? rest_of_line <IcAgent::Ast::Nodes::Comment>
|
74
|
+
end
|
75
|
+
|
76
|
+
rule service_declaration
|
77
|
+
"service" space ":" space service_name* "{" end_of_line service_methods "}" <IcAgent::Ast::Nodes::Service>
|
78
|
+
end
|
79
|
+
|
80
|
+
rule service_name
|
81
|
+
"(" ic_service_name ")" space? "->" space?
|
82
|
+
end
|
83
|
+
|
84
|
+
rule ic_service_name
|
85
|
+
[a-zA-Z0-9_]* <IcAgent::Ast::Nodes::IcServiceName>
|
86
|
+
end
|
87
|
+
|
88
|
+
rule service_methods
|
89
|
+
(service_item)+ <IcAgent::Ast::Nodes::IcServiceMethods>
|
90
|
+
end
|
91
|
+
|
92
|
+
rule service_item
|
93
|
+
space? service_method_name space? ":" space? "(" service_method_params? ")" space? "->" space? "(" service_method_return_type ")" space? method_query? ';' end_of_line? <IcAgent::Ast::Nodes::IcServiceItem>
|
94
|
+
end
|
95
|
+
|
96
|
+
rule service_method_params
|
97
|
+
param_element (", " param_element)* <IcAgent::Ast::Nodes::IcServiceMethodParams>
|
98
|
+
end
|
99
|
+
|
100
|
+
rule service_method_return_type
|
101
|
+
[a-zA-Z0-9_{}: ]* <IcAgent::Ast::Nodes::IcServiceMethodReturn>
|
102
|
+
end
|
103
|
+
|
104
|
+
rule method_query
|
105
|
+
[a-zA-Z0-9_]* <IcAgent::Ast::Nodes::IcServiceMethodQuery>
|
106
|
+
end
|
107
|
+
|
108
|
+
rule words
|
109
|
+
[a-zA-Z_] [a-zA-Z0-9_]*
|
110
|
+
end
|
111
|
+
|
112
|
+
rule param_element
|
113
|
+
[a-zA-Z0-9_ ]+
|
114
|
+
end
|
115
|
+
|
116
|
+
rule service_method_name
|
117
|
+
[a-zA-Z0-9_]* <IcAgent::Ast::Nodes::IcServiceMethodName>
|
118
|
+
end
|
119
|
+
|
120
|
+
rule string_without_spaces
|
121
|
+
[\S]* <IcAgent::Ast::Nodes::StringLiteral>
|
122
|
+
end
|
123
|
+
|
124
|
+
rule rest_of_line
|
125
|
+
[^\n]* <IcAgent::Ast::Nodes::StringLiteral>
|
126
|
+
end
|
127
|
+
|
128
|
+
rule end_of_line
|
129
|
+
[\n]+
|
130
|
+
end
|
131
|
+
|
132
|
+
rule block_record
|
133
|
+
'{}'
|
134
|
+
end
|
135
|
+
|
136
|
+
rule has_end_of_line
|
137
|
+
[\n]*
|
138
|
+
end
|
139
|
+
|
140
|
+
rule splite_code
|
141
|
+
' : '
|
142
|
+
end
|
143
|
+
|
144
|
+
rule space_and_line
|
145
|
+
[\s\n]*
|
146
|
+
end
|
147
|
+
|
148
|
+
rule space
|
149
|
+
[\s]+
|
150
|
+
end
|
151
|
+
|
152
|
+
rule start_space
|
153
|
+
[^\s]+
|
154
|
+
end
|
155
|
+
|
156
|
+
rule optional_semicolon
|
157
|
+
[;]*
|
158
|
+
end
|
159
|
+
end
|
@@ -0,0 +1,118 @@
|
|
1
|
+
grammar TypeGrammar
|
2
|
+
rule statement_block
|
3
|
+
ic_all_type optional_semicolon <IcAgent::Ast::Nodes::StatementBlock>
|
4
|
+
end
|
5
|
+
|
6
|
+
rule ic_all_type
|
7
|
+
(ic_type_def)+ <IcAgent::Ast::Nodes::IcTypeDef>
|
8
|
+
end
|
9
|
+
|
10
|
+
rule ic_type_def
|
11
|
+
base_type_base / base_type_vec / base_type_record / base_type_record_null / base_type_variant / base_type_opt / base_type_func / base_type_code
|
12
|
+
end
|
13
|
+
|
14
|
+
rule record_statement_content
|
15
|
+
(ic_base_type_pair / ic_base_type_value)* <IcAgent::Ast::Nodes::StatementContent>
|
16
|
+
end
|
17
|
+
|
18
|
+
rule variant_statement_content
|
19
|
+
(ic_base_type_pair / ic_base_type_key)* <IcAgent::Ast::Nodes::StatementContent>
|
20
|
+
end
|
21
|
+
|
22
|
+
rule base_type
|
23
|
+
'bool' / 'text' / 'null' / 'reserved' / 'empty' / 'principal' / 'nat8' / 'nat16' / 'nat32' / 'nat64' / 'int8' / 'int16' / 'int32' / 'int64' / 'float32' / 'float64' /
|
24
|
+
'opt' / 'vec' / 'record' / 'variant' / 'service' / 'func' / 'nat' / 'int' / 'blob'
|
25
|
+
end
|
26
|
+
|
27
|
+
rule base_type_single
|
28
|
+
'bool' / 'text' / 'null' / 'reserved' / 'empty' / 'principal' / 'nat8' / 'nat16' / 'nat32' / 'nat64' / 'int8' / 'int16' / 'int32' / 'int64' / 'float32' / 'float64' / 'nat' / 'int' / 'blob'
|
29
|
+
end
|
30
|
+
|
31
|
+
rule ic_base_type_pair
|
32
|
+
space? base_type_key space? ':' space? base_type_value ';'? <IcAgent::Ast::Nodes::IcBaseTypeChild>
|
33
|
+
end
|
34
|
+
|
35
|
+
rule ic_base_type_key
|
36
|
+
space? base_type_key space? ';'? <IcAgent::Ast::Nodes::IcBaseTypeChild>
|
37
|
+
end
|
38
|
+
|
39
|
+
rule ic_base_type_value
|
40
|
+
base_type_value space? ';'? <IcAgent::Ast::Nodes::IcBaseTypeChild>
|
41
|
+
end
|
42
|
+
|
43
|
+
rule base_type_base
|
44
|
+
base_type_single+ <IcAgent::Ast::Nodes::IcBaseTypeSingle>
|
45
|
+
end
|
46
|
+
|
47
|
+
rule base_type_code
|
48
|
+
[a-zA-Z0-9_]+ <IcAgent::Ast::Nodes::IcBaseTypeOther>
|
49
|
+
end
|
50
|
+
|
51
|
+
rule base_type_key
|
52
|
+
[a-zA-Z0-9_]+ <IcAgent::Ast::Nodes::IcBaseTypeKey>
|
53
|
+
end
|
54
|
+
|
55
|
+
rule base_type_value
|
56
|
+
space? ic_all_type <IcAgent::Ast::Nodes::IcBaseTypeValue>
|
57
|
+
end
|
58
|
+
|
59
|
+
rule base_type_vec
|
60
|
+
'vec' space ic_all_type <IcAgent::Ast::Nodes::IcBaseTypeVec>
|
61
|
+
end
|
62
|
+
|
63
|
+
rule base_type_opt
|
64
|
+
'opt' space ic_all_type <IcAgent::Ast::Nodes::IcBaseTypeOpt>
|
65
|
+
end
|
66
|
+
|
67
|
+
rule base_type_record
|
68
|
+
'record' space '{' space_and_line? record_statement_content space_and_line? '}' <IcAgent::Ast::Nodes::IcBaseTypeRecord>
|
69
|
+
end
|
70
|
+
|
71
|
+
rule base_type_record_null
|
72
|
+
'record {}' <IcAgent::Ast::Nodes::IcBaseTypeRecord>
|
73
|
+
end
|
74
|
+
|
75
|
+
rule base_type_variant
|
76
|
+
'variant' space '{' space_and_line variant_statement_content space_and_line '}' <IcAgent::Ast::Nodes::IcBaseTypeVariant>
|
77
|
+
end
|
78
|
+
|
79
|
+
rule base_type_func
|
80
|
+
'func' space? "(" service_method_params? ")" space? "->" space? "(" service_method_return_type ")" space? method_query? <IcAgent::Ast::Nodes::IcBaseTypeFunc>
|
81
|
+
end
|
82
|
+
|
83
|
+
rule service_method_params
|
84
|
+
source_coding / refer_coding
|
85
|
+
end
|
86
|
+
|
87
|
+
rule service_method_return_type
|
88
|
+
[a-zA-Z0-9_{}:;\n ]* <IcAgent::Ast::Nodes::IcServiceMethodReturn>
|
89
|
+
end
|
90
|
+
|
91
|
+
rule refer_coding
|
92
|
+
param_element (", " param_element)* <IcAgent::Ast::Nodes::IcServiceMethodParams>
|
93
|
+
end
|
94
|
+
|
95
|
+
rule source_coding
|
96
|
+
[a-zA-Z0-9_{}:;\n ]* <IcAgent::Ast::Nodes::IcServiceMethodParams>
|
97
|
+
end
|
98
|
+
|
99
|
+
rule param_element
|
100
|
+
[a-zA-Z0-9_ ]+
|
101
|
+
end
|
102
|
+
|
103
|
+
rule method_query
|
104
|
+
[a-zA-Z0-9]* <IcAgent::Ast::Nodes::IcServiceMethodQuery>
|
105
|
+
end
|
106
|
+
|
107
|
+
rule space_and_line
|
108
|
+
[\s\n]*
|
109
|
+
end
|
110
|
+
|
111
|
+
rule space
|
112
|
+
[\s]+
|
113
|
+
end
|
114
|
+
|
115
|
+
rule optional_semicolon
|
116
|
+
[;]*
|
117
|
+
end
|
118
|
+
end
|
@@ -19,6 +19,10 @@ module IcAgent
|
|
19
19
|
def elements_to_s
|
20
20
|
elements.map(&:to_s).join("\n")
|
21
21
|
end
|
22
|
+
|
23
|
+
def source_content
|
24
|
+
self.text_value.strip
|
25
|
+
end
|
22
26
|
end
|
23
27
|
|
24
28
|
class Instruction < NamedNode
|
@@ -57,11 +61,11 @@ module IcAgent
|
|
57
61
|
end
|
58
62
|
|
59
63
|
def type_param_name
|
60
|
-
elements[0].
|
64
|
+
elements[0].source_content
|
61
65
|
end
|
62
66
|
|
63
67
|
def type_param_content
|
64
|
-
elements[1].
|
68
|
+
elements[1].source_content.gsub("\n", '').gsub(';}', '}')
|
65
69
|
end
|
66
70
|
|
67
71
|
def type_root_opt_code
|
@@ -84,59 +88,12 @@ module IcAgent
|
|
84
88
|
names
|
85
89
|
end
|
86
90
|
|
87
|
-
def
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
modified_str = ele.text_value.gsub("\n", '').gsub(/record\s*{[^{}]*}/) do |match|
|
94
|
-
rad_id = rand(100000..999999)
|
95
|
-
type_name = "record_#{rad_id}"
|
96
|
-
replaced_hash[type_name] = match
|
97
|
-
type_name
|
98
|
-
end
|
99
|
-
modified_str = modified_str.gsub(/variant\s*{[^{}]*}/) do |match|
|
100
|
-
rad_id = rand(100000..999999)
|
101
|
-
type_name = "variant_#{rad_id}"
|
102
|
-
replaced_hash[type_name] = match
|
103
|
-
type_name
|
104
|
-
end
|
105
|
-
replaced_hash.each_key do |key|
|
106
|
-
item_arr = replaced_hash[key].strip.split(';')
|
107
|
-
item_arr.each do |item|
|
108
|
-
multi_item_arr = item.strip.split(':')
|
109
|
-
if multi_item_arr.size > 1
|
110
|
-
item_value_arr = multi_item_arr[1].strip.split(' ').collect { |v| v.strip.gsub(';', '') }
|
111
|
-
item_value_arr.delete('{')
|
112
|
-
item_value_arr.delete('}')
|
113
|
-
item_value_arr.delete('{}')
|
114
|
-
values << item_value_arr
|
115
|
-
else
|
116
|
-
values << []
|
117
|
-
end
|
118
|
-
end
|
119
|
-
end
|
120
|
-
|
121
|
-
# get root type value
|
122
|
-
item_arr = modified_str.strip.split(':')
|
123
|
-
if item_arr.size > 1
|
124
|
-
item_value_arr = item_arr[1].strip.split(' ').collect { |v| v.strip.gsub(';', '') }
|
125
|
-
item_value_arr.delete('{')
|
126
|
-
item_value_arr.delete('}')
|
127
|
-
item_value_arr.delete('{}')
|
128
|
-
item_value_arr -= replaced_hash.keys
|
129
|
-
values << item_value_arr
|
130
|
-
else
|
131
|
-
values << []
|
132
|
-
end
|
133
|
-
end
|
134
|
-
values
|
135
|
-
end
|
136
|
-
|
137
|
-
def type_child_refer_items
|
138
|
-
child_args = type_child_item_values.flatten - IcAgent::Candid::ALL_TYPES
|
139
|
-
child_args.uniq
|
91
|
+
def type_refer_items
|
92
|
+
source_string = self.type_param_content
|
93
|
+
parser = IcAgent::Ast::StatementParser.new
|
94
|
+
parser.parse(source_string)
|
95
|
+
refer_type = parser.source_tree.content[:refer_type]
|
96
|
+
refer_type
|
140
97
|
end
|
141
98
|
|
142
99
|
def to_s
|
@@ -148,7 +105,7 @@ module IcAgent
|
|
148
105
|
'type_param_name' => type_param_name,
|
149
106
|
'type_root_opt_code' => type_root_opt_code,
|
150
107
|
'type_child_item_keys' => type_child_item_keys,
|
151
|
-
'type_child_item_values' =>
|
108
|
+
'type_child_item_values' => type_refer_items
|
152
109
|
}
|
153
110
|
end
|
154
111
|
end
|
@@ -349,7 +306,7 @@ module IcAgent
|
|
349
306
|
def to_obj
|
350
307
|
obj = {}
|
351
308
|
elements.each do |element|
|
352
|
-
obj[element.title.to_s] = element.text_value
|
309
|
+
obj[element.title.to_s] = element.text_value.gsub("\n", '')
|
353
310
|
end
|
354
311
|
obj
|
355
312
|
end
|
@@ -404,6 +361,16 @@ module IcAgent
|
|
404
361
|
elements_to_s
|
405
362
|
end
|
406
363
|
end
|
364
|
+
|
365
|
+
class BaseTypeContent < NamedNode
|
366
|
+
def title
|
367
|
+
:ic_service_method_query
|
368
|
+
end
|
369
|
+
|
370
|
+
def to_s
|
371
|
+
elements_to_s
|
372
|
+
end
|
373
|
+
end
|
407
374
|
end
|
408
375
|
end
|
409
376
|
end
|
@@ -0,0 +1,224 @@
|
|
1
|
+
require 'treetop'
|
2
|
+
|
3
|
+
module IcAgent
|
4
|
+
module Ast
|
5
|
+
module Nodes
|
6
|
+
class StatementNode < Treetop::Runtime::SyntaxNode
|
7
|
+
attr_accessor :child_count, :depth
|
8
|
+
|
9
|
+
def title
|
10
|
+
:named_node
|
11
|
+
end
|
12
|
+
|
13
|
+
def to_array
|
14
|
+
[title] + elements.map(&:to_array)
|
15
|
+
end
|
16
|
+
|
17
|
+
def to_s
|
18
|
+
"#{title.to_s.upcase} #{elements_to_s}"
|
19
|
+
end
|
20
|
+
|
21
|
+
def elements_to_s
|
22
|
+
elements.map(&:to_s).join("\n")
|
23
|
+
end
|
24
|
+
|
25
|
+
def add_child
|
26
|
+
@child_count ||= 0 + 1
|
27
|
+
end
|
28
|
+
|
29
|
+
def source_content
|
30
|
+
self.text_value.strip
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
class IcBaseType < StatementNode
|
35
|
+
def title
|
36
|
+
:base_type
|
37
|
+
end
|
38
|
+
|
39
|
+
def to_s
|
40
|
+
elements_to_s
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
class IcBaseTypeSingle < StatementNode
|
45
|
+
def title
|
46
|
+
:base_type_single
|
47
|
+
end
|
48
|
+
|
49
|
+
def to_s
|
50
|
+
elements_to_s
|
51
|
+
end
|
52
|
+
|
53
|
+
def opt_code
|
54
|
+
'single'
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
class IcBaseTypeRecord < StatementNode
|
59
|
+
def title
|
60
|
+
:base_type_record
|
61
|
+
end
|
62
|
+
|
63
|
+
def to_s
|
64
|
+
elements_to_s
|
65
|
+
end
|
66
|
+
|
67
|
+
def opt_code
|
68
|
+
'record'
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
class IcBaseTypeKey < StatementNode
|
73
|
+
def title
|
74
|
+
:base_type_key
|
75
|
+
end
|
76
|
+
|
77
|
+
def to_s
|
78
|
+
elements_to_s
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
class IcBaseTypeValue < StatementNode
|
83
|
+
def title
|
84
|
+
:base_type_value
|
85
|
+
end
|
86
|
+
|
87
|
+
def to_s
|
88
|
+
elements_to_s
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
class IcTypeDef < StatementNode
|
93
|
+
def title
|
94
|
+
:base_type_def
|
95
|
+
end
|
96
|
+
|
97
|
+
def to_s
|
98
|
+
elements_to_s
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
class IcBaseTypeVariant < StatementNode
|
103
|
+
def title
|
104
|
+
:base_type_variant
|
105
|
+
end
|
106
|
+
|
107
|
+
def to_s
|
108
|
+
elements_to_s
|
109
|
+
end
|
110
|
+
|
111
|
+
def opt_code
|
112
|
+
'variant'
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
class IcBaseTypeFunc < StatementNode
|
117
|
+
def title
|
118
|
+
:base_type_func
|
119
|
+
end
|
120
|
+
|
121
|
+
def to_s
|
122
|
+
elements_to_s
|
123
|
+
end
|
124
|
+
|
125
|
+
def opt_code
|
126
|
+
'func'
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
class IcBaseTypeOpt < StatementNode
|
131
|
+
def title
|
132
|
+
:base_type_opt
|
133
|
+
end
|
134
|
+
|
135
|
+
def to_s
|
136
|
+
elements_to_s
|
137
|
+
end
|
138
|
+
|
139
|
+
def opt_code
|
140
|
+
'opt'
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
class IcBaseTypeVec < StatementNode
|
145
|
+
def title
|
146
|
+
:base_type_vec
|
147
|
+
end
|
148
|
+
|
149
|
+
def to_s
|
150
|
+
elements_to_s
|
151
|
+
end
|
152
|
+
|
153
|
+
def opt_code
|
154
|
+
'vec'
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
class IcBaseTypeOther < StatementNode
|
159
|
+
def title
|
160
|
+
:base_type_other
|
161
|
+
end
|
162
|
+
|
163
|
+
def to_s
|
164
|
+
elements_to_s
|
165
|
+
end
|
166
|
+
|
167
|
+
def opt_code
|
168
|
+
text_value
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
class IcBaseTypeContent < StatementNode
|
173
|
+
def title
|
174
|
+
:base_type_content
|
175
|
+
end
|
176
|
+
|
177
|
+
def to_s
|
178
|
+
elements_to_s
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
182
|
+
class IcBaseTypeChild < StatementNode
|
183
|
+
def title
|
184
|
+
:base_type_child
|
185
|
+
end
|
186
|
+
|
187
|
+
def to_s
|
188
|
+
elements_to_s
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
192
|
+
class IcTypeName < StatementNode
|
193
|
+
def title
|
194
|
+
:type_name
|
195
|
+
end
|
196
|
+
|
197
|
+
def to_s
|
198
|
+
elements_to_s
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
202
|
+
class StatementBlock < StatementNode
|
203
|
+
def title
|
204
|
+
:statement_block
|
205
|
+
end
|
206
|
+
|
207
|
+
def to_s
|
208
|
+
elements_to_s
|
209
|
+
end
|
210
|
+
end
|
211
|
+
|
212
|
+
class StatementContent < StatementNode
|
213
|
+
def title
|
214
|
+
:statement_content
|
215
|
+
end
|
216
|
+
|
217
|
+
def to_s
|
218
|
+
elements_to_s
|
219
|
+
end
|
220
|
+
end
|
221
|
+
end
|
222
|
+
end
|
223
|
+
end
|
224
|
+
|
@@ -0,0 +1,22 @@
|
|
1
|
+
grammar RecordParser
|
2
|
+
# record { key1: text; key2: 42; value1; value2; }
|
3
|
+
rule record
|
4
|
+
'record' space '{' space? (pair / value)* space? '}' <IcAgent::Ast::Nodes::IcBaseTypeRecord>
|
5
|
+
end
|
6
|
+
|
7
|
+
rule pair
|
8
|
+
space? identifier space? ':' space? identifier ';' <IcAgent::Ast::Nodes::IcBaseTypeChild>
|
9
|
+
end
|
10
|
+
|
11
|
+
rule value
|
12
|
+
space? identifier ';' <IcAgent::Ast::Nodes::IcBaseTypeChild>
|
13
|
+
end
|
14
|
+
|
15
|
+
rule identifier
|
16
|
+
[a-zA-Z0-9_]*
|
17
|
+
end
|
18
|
+
|
19
|
+
rule space
|
20
|
+
[\s]+
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,101 @@
|
|
1
|
+
require 'treetop'
|
2
|
+
|
3
|
+
module IcAgent
|
4
|
+
module Ast
|
5
|
+
class StatementParser
|
6
|
+
attr_accessor :parser, :tree, :source_tree
|
7
|
+
|
8
|
+
REFER_TYPE_CLASS = ['IcAgent::Ast::Nodes::IcBaseTypeRecord',
|
9
|
+
'IcAgent::Ast::Nodes::IcBaseTypeVariant',
|
10
|
+
'IcAgent::Ast::Nodes::IcBaseTypeVec',
|
11
|
+
'IcAgent::Ast::Nodes::IcBaseTypeOpt']
|
12
|
+
|
13
|
+
TREE_TYPE_CLASS = ['IcAgent::Ast::Nodes::IcBaseTypeRecord',
|
14
|
+
'IcAgent::Ast::Nodes::IcBaseTypeVariant',
|
15
|
+
'IcAgent::Ast::Nodes::IcBaseTypeVec',
|
16
|
+
'IcAgent::Ast::Nodes::IcBaseTypeFunc',
|
17
|
+
'IcAgent::Ast::Nodes::IcBaseTypeOpt',
|
18
|
+
'IcAgent::Ast::Nodes::IcBaseTypeSingle',
|
19
|
+
'IcAgent::Ast::Nodes::IcBaseTypeOther']
|
20
|
+
|
21
|
+
REFER_TYPE_KEYS = ['record', 'variant']
|
22
|
+
|
23
|
+
def initialize
|
24
|
+
Treetop.load(File.expand_path(File.join(File.dirname(__FILE__), 'nested_type_grammar.treetop')))
|
25
|
+
@parser = TypeGrammarParser.new
|
26
|
+
end
|
27
|
+
|
28
|
+
def parse(data, return_type = :string)
|
29
|
+
tree = @parser.parse(data)
|
30
|
+
raise Exception, "Parse error at offset: #{@parser.index} #{@parser.failure_reason}" if tree.nil?
|
31
|
+
|
32
|
+
# this edits the tree in place
|
33
|
+
clean_tree(tree)
|
34
|
+
|
35
|
+
# generate soure tree
|
36
|
+
gen_source_tree(tree)
|
37
|
+
@tree = tree
|
38
|
+
tree
|
39
|
+
end
|
40
|
+
|
41
|
+
def clean_tree(root_node)
|
42
|
+
return if root_node.elements.nil?
|
43
|
+
|
44
|
+
root_node.elements.delete_if { |node| node.class.name == 'Treetop::Runtime::SyntaxNode' and node.parent.class.name != 'IcAgent::Ast::Nodes::IcBaseTypeValue' and node.parent.class.name != "IcAgent::Ast::Nodes::IcTypeDef" }
|
45
|
+
root_node.elements.each { |node| self.clean_tree(node) }
|
46
|
+
end
|
47
|
+
|
48
|
+
# @param [Object] root_node
|
49
|
+
# @param [nil] tree_root_node
|
50
|
+
# @param [nil] tree_current_node
|
51
|
+
def gen_source_tree(root_node, tree_root_node = nil, tree_current_node = nil)
|
52
|
+
return if root_node.elements.nil?
|
53
|
+
|
54
|
+
tree_root_node = tree_root_node.nil? ? Tree::TreeNode.new('root', { 'total_child': 0, 'ic_type': nil, 'refer_type': [], 'prototype': root_node.source_content, 'content': root_node.source_content }) : tree_root_node
|
55
|
+
tree_current_node = tree_current_node.nil? ? tree_root_node : tree_current_node
|
56
|
+
|
57
|
+
root_node.elements.each do |node|
|
58
|
+
if TREE_TYPE_CLASS.include?(node.class.name) && node.source_content != tree_root_node.content[:prototype]
|
59
|
+
|
60
|
+
id = tree_root_node.content[:total_child] + 1
|
61
|
+
new_tree_node = Tree::TreeNode.new("node_#{id}", { 'total_child': 0, 'ic_type': nil, 'prototype': root_node.source_content, 'content': root_node.source_content })
|
62
|
+
tree_current_node << new_tree_node
|
63
|
+
tree_root_node.content[:total_child] = id
|
64
|
+
|
65
|
+
# set refer_type
|
66
|
+
unless Regexp.union(REFER_TYPE_KEYS) === root_node.source_content
|
67
|
+
# func type content
|
68
|
+
if root_node.source_content.index('->')
|
69
|
+
param_arr = []
|
70
|
+
temp_param_arr = root_node.source_content.strip.split(' ').collect { |v| v.strip.gsub(';', '') }
|
71
|
+
temp_param_arr.delete_if {|v| !v.index('(') && !v.index(')') }
|
72
|
+
temp_param_arr.each {|v| param_arr = param_arr + v.sub('(', '').sub(')', '').split(',')}
|
73
|
+
else
|
74
|
+
param_arr = root_node.source_content.strip.split(' ').collect { |v| v.strip.gsub(';', '') }
|
75
|
+
param_arr = param_arr - IcAgent::Candid::ALL_TYPES
|
76
|
+
end
|
77
|
+
tree_root_node.content[:refer_type] = (tree_root_node.content[:refer_type] + param_arr).uniq
|
78
|
+
end
|
79
|
+
|
80
|
+
self.source_tree = tree_root_node
|
81
|
+
self.gen_source_tree(node, tree_root_node, new_tree_node)
|
82
|
+
else
|
83
|
+
self.gen_source_tree(node, tree_root_node, tree_current_node)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
self.source_tree = tree_root_node
|
88
|
+
end
|
89
|
+
|
90
|
+
def ic_statement_root
|
91
|
+
tree.elements[0]
|
92
|
+
end
|
93
|
+
|
94
|
+
def ic_statement_childs
|
95
|
+
if tree.elements[0] && tree.elements[0].elements[0].elements[0]
|
96
|
+
tree.elements[0].elements[0].elements[0].elements
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
grammar VariantParser
|
2
|
+
rule variant
|
3
|
+
'variant' space? '{' space? (pair / key)* space? '}' <IcAgent::Ast::Nodes::IcBaseTypeVariant>
|
4
|
+
end
|
5
|
+
|
6
|
+
rule pair
|
7
|
+
space? identifier space? ':' space? identifier ';' <IcAgent::Ast::Nodes::IcBaseTypeChild>
|
8
|
+
end
|
9
|
+
|
10
|
+
rule key
|
11
|
+
space? identifier ';' <IcAgent::Ast::Nodes::IcBaseTypeChild>
|
12
|
+
end
|
13
|
+
|
14
|
+
rule identifier
|
15
|
+
[a-zA-Z0-9_]*
|
16
|
+
end
|
17
|
+
|
18
|
+
rule space
|
19
|
+
[\s]+
|
20
|
+
end
|
21
|
+
end
|
data/lib/ic_agent/canister.rb
CHANGED
@@ -33,9 +33,14 @@ module IcAgent
|
|
33
33
|
args_arr.each do |arg|
|
34
34
|
args_type_arrs << get_param_to_ic_type(parser, arg)
|
35
35
|
end
|
36
|
-
ret_type = get_param_to_ic_type(parser, rets)
|
37
36
|
|
38
|
-
|
37
|
+
rets_arr = rets.nil? ? [] : rets.split(',').map(&:strip)
|
38
|
+
rets_type_arr = []
|
39
|
+
rets_arr.each do |ret|
|
40
|
+
rets_type_arr << get_param_to_ic_type(parser, ret)
|
41
|
+
end
|
42
|
+
|
43
|
+
add_caniter_method(method_name, args, args_type_arrs, rets_type_arr, anno)
|
39
44
|
end
|
40
45
|
end
|
41
46
|
|
@@ -69,7 +74,7 @@ module IcAgent
|
|
69
74
|
def build_param_tree(parser, type_name, current_node = nil, tree_root_node = nil)
|
70
75
|
if current_node.nil?
|
71
76
|
root_type = parser.ic_type_by_name(type_name)
|
72
|
-
refer_nodes = root_type.
|
77
|
+
refer_nodes = root_type.type_refer_items.nil? ? [] : root_type.type_refer_items
|
73
78
|
root_node = Tree::TreeNode.new(type_name,
|
74
79
|
{ 'total_child': refer_nodes.size,
|
75
80
|
'all_child': refer_nodes,
|
@@ -119,7 +124,7 @@ module IcAgent
|
|
119
124
|
else
|
120
125
|
# non self refer
|
121
126
|
child_type = parser.ic_type_by_name(refer_node)
|
122
|
-
child_refer_nodes = child_type.
|
127
|
+
child_refer_nodes = child_type.type_refer_items
|
123
128
|
if child_refer_nodes.size == 0
|
124
129
|
# set ic type
|
125
130
|
ic_type = IcAgent::Ast::Assembler.build_type(child_type.type_param_content)
|
@@ -183,14 +188,11 @@ module IcAgent
|
|
183
188
|
refer_type.empty? ? nil : refer_type[0]
|
184
189
|
end
|
185
190
|
|
186
|
-
def only_refer_type?(param)
|
187
|
-
refer_types = IcAgent::Ast::Assembler.get_params_refer_values(param)
|
188
|
-
param.index(' ').nil? && refer_types.size == 1
|
189
|
-
end
|
190
|
-
|
191
191
|
def get_param_to_ic_type(parser, param)
|
192
192
|
ic_refer_types = {}
|
193
193
|
refer_types = IcAgent::Ast::Assembler.get_params_refer_values(param)
|
194
|
+
# param self is refer_values
|
195
|
+
refer_types << param unless param.index(' ') || IcAgent::Candid::ALL_TYPES.any?(param)
|
194
196
|
refer_types.each do |refer_code|
|
195
197
|
ic_refer_types[refer_code] = build_param_tree(parser, refer_code, nil, nil).content[:ic_type]
|
196
198
|
end
|
@@ -235,14 +237,14 @@ module IcAgent
|
|
235
237
|
new_root_text
|
236
238
|
end
|
237
239
|
|
238
|
-
def add_caniter_method(method_name, type_args, args_types,
|
240
|
+
def add_caniter_method(method_name, type_args, args_types, rets_types, anno = nil)
|
239
241
|
self.class.class_eval do
|
240
242
|
define_method(method_name) do |*args|
|
241
243
|
init_method_name = method_name
|
242
244
|
init_method_args = type_args.nil? ? [] : type_args.split(',').map(&:strip)
|
243
245
|
init_method_anno = anno
|
244
246
|
init_method_types = args_types
|
245
|
-
init_method_ret_type =
|
247
|
+
init_method_ret_type = rets_types
|
246
248
|
|
247
249
|
if init_method_args.length != args.length
|
248
250
|
raise ArgumentError, 'Arguments length not match'
|
@@ -228,7 +228,7 @@ module IcAgent
|
|
228
228
|
wallet_balance128: () -> (record { amount: nat }) query;
|
229
229
|
wallet_send: (record { canister: principal; amount: nat64 }) -> (WalletResult);
|
230
230
|
wallet_send128: (record { canister: principal; amount: nat }) -> (WalletResult);
|
231
|
-
wallet_receive: (opt ReceiveOptions) -> ();
|
231
|
+
wallet_receive: (opt ReceiveOptions) -> ();
|
232
232
|
wallet_create_canister: (CreateCanisterArgs) -> (WalletResultCreate);
|
233
233
|
wallet_create_canister128: (CreateCanisterArgs128) -> (WalletResultCreate);
|
234
234
|
wallet_create_wallet: (CreateCanisterArgs) -> (WalletResultCreate);
|
@@ -248,9 +248,7 @@ module IcAgent
|
|
248
248
|
args: blob;
|
249
249
|
cycles: nat;
|
250
250
|
}) -> (WalletResultCall);
|
251
|
-
add_address: (address: AddressEntry) -> ();
|
252
251
|
list_addresses: () -> (vec AddressEntry) query;
|
253
|
-
remove_address: (address: principal) -> (WalletResult);
|
254
252
|
get_events: (opt record { from: opt nat32; to: opt nat32; }) -> (vec Event) query;
|
255
253
|
get_events128: (opt record { from: opt nat32; to: opt nat32; }) -> (vec Event128) query;
|
256
254
|
get_chart: (opt record { count: opt nat32; precision: opt nat64; } ) -> (vec record { nat64; nat64; }) query;
|
@@ -258,7 +256,6 @@ module IcAgent
|
|
258
256
|
get_managed_canister_events: (record { canister: principal; from: opt nat32; to: opt nat32; }) -> (opt vec ManagedCanisterEvent) query;
|
259
257
|
get_managed_canister_events128: (record { canister: principal; from: opt nat32; to: opt nat32; }) -> (opt vec ManagedCanisterEvent128) query;
|
260
258
|
set_short_name: (principal, opt text) -> (opt ManagedCanisterInfo);
|
261
|
-
http_request: (request: HttpRequest) -> (HttpResponse) query;
|
262
259
|
}
|
263
260
|
DIDL_DOC
|
264
261
|
|
@@ -4,7 +4,6 @@ module IcAgent
|
|
4
4
|
CANISTER_ID = 'aaaaa-aa'
|
5
5
|
DID_FILE = <<~DIDL_DOC
|
6
6
|
type canister_id = principal;
|
7
|
-
type user_id = principal;
|
8
7
|
type wasm_module = blob;
|
9
8
|
|
10
9
|
type canister_settings = record {
|
@@ -21,21 +20,117 @@ module IcAgent
|
|
21
20
|
freezing_threshold : nat;
|
22
21
|
};
|
23
22
|
|
24
|
-
|
23
|
+
type change_origin = variant {
|
24
|
+
from_user : record {
|
25
|
+
user_id : principal;
|
26
|
+
};
|
27
|
+
from_canister : record {
|
28
|
+
canister_id : principal;
|
29
|
+
canister_version : opt nat64;
|
30
|
+
};
|
31
|
+
};
|
32
|
+
|
33
|
+
type change_details = variant {
|
34
|
+
creation : record {
|
35
|
+
controllers : vec principal;
|
36
|
+
};
|
37
|
+
code_uninstall;
|
38
|
+
code_deployment : record {
|
39
|
+
mode : variant {install; reinstall; upgrade};
|
40
|
+
module_hash : blob;
|
41
|
+
};
|
42
|
+
controllers_change : record {
|
43
|
+
controllers : vec principal;
|
44
|
+
};
|
45
|
+
};
|
46
|
+
|
47
|
+
type change = record {
|
48
|
+
timestamp_nanos : nat64;
|
49
|
+
canister_version : nat64;
|
50
|
+
origin : change_origin;
|
51
|
+
details : change_details;
|
52
|
+
};
|
53
|
+
|
54
|
+
type http_header = record { name: text; value: text };
|
55
|
+
|
56
|
+
type ecdsa_curve = variant { secp256k1; };
|
57
|
+
|
58
|
+
type satoshi = nat64;
|
59
|
+
|
60
|
+
type bitcoin_network = variant {
|
61
|
+
mainnet;
|
62
|
+
testnet;
|
63
|
+
};
|
64
|
+
|
65
|
+
type bitcoin_address = text;
|
66
|
+
|
67
|
+
type block_hash = blob;
|
68
|
+
|
69
|
+
type outpoint = record {
|
70
|
+
txid : blob;
|
71
|
+
vout : nat32
|
72
|
+
};
|
73
|
+
|
74
|
+
type utxo = record {
|
75
|
+
outpoint: outpoint;
|
76
|
+
value: satoshi;
|
77
|
+
height: nat32;
|
78
|
+
};
|
79
|
+
|
80
|
+
type get_utxos_request = record {
|
81
|
+
address : bitcoin_address;
|
82
|
+
network: bitcoin_network;
|
83
|
+
filter: opt variant {
|
84
|
+
min_confirmations: nat32;
|
85
|
+
page: blob;
|
86
|
+
};
|
87
|
+
};
|
88
|
+
|
89
|
+
type get_current_fee_percentiles_request = record {
|
90
|
+
network: bitcoin_network;
|
91
|
+
};
|
92
|
+
|
93
|
+
type get_utxos_response = record {
|
94
|
+
utxos: vec utxo;
|
95
|
+
tip_block_hash: block_hash;
|
96
|
+
tip_height: nat32;
|
97
|
+
next_page: opt blob;
|
98
|
+
};
|
99
|
+
|
100
|
+
type get_balance_request = record {
|
101
|
+
address : bitcoin_address;
|
102
|
+
network: bitcoin_network;
|
103
|
+
min_confirmations: opt nat32;
|
104
|
+
};
|
105
|
+
|
106
|
+
type send_transaction_request = record {
|
107
|
+
transaction: blob;
|
108
|
+
network: bitcoin_network;
|
109
|
+
};
|
110
|
+
|
111
|
+
type millisatoshi_per_byte = nat64;
|
112
|
+
|
113
|
+
service : {
|
25
114
|
create_canister : (record {
|
26
|
-
settings : opt canister_settings
|
115
|
+
settings : opt canister_settings;
|
116
|
+
sender_canister_version : opt nat64;
|
27
117
|
}) -> (record {canister_id : canister_id});
|
28
118
|
update_settings : (record {
|
29
119
|
canister_id : principal;
|
30
|
-
settings : canister_settings
|
120
|
+
settings : canister_settings;
|
121
|
+
sender_canister_version : opt nat64;
|
31
122
|
}) -> ();
|
32
123
|
install_code : (record {
|
33
124
|
mode : variant {install; reinstall; upgrade};
|
34
125
|
canister_id : canister_id;
|
35
126
|
wasm_module : wasm_module;
|
36
127
|
arg : blob;
|
128
|
+
sender_canister_version : opt nat64;
|
129
|
+
}) -> ();
|
130
|
+
uninstall_code : (record {
|
131
|
+
canister_id : canister_id;
|
132
|
+
sender_canister_version : opt nat64;
|
37
133
|
}) -> ();
|
38
|
-
uninstall_code : (record {canister_id : canister_id}) -> ();
|
39
134
|
start_canister : (record {canister_id : canister_id}) -> ();
|
40
135
|
stop_canister : (record {canister_id : canister_id}) -> ();
|
41
136
|
canister_status : (record {canister_id : canister_id}) -> (record {
|
@@ -44,12 +139,41 @@ module IcAgent
|
|
44
139
|
module_hash: opt blob;
|
45
140
|
memory_size: nat;
|
46
141
|
cycles: nat;
|
142
|
+
idle_cycles_burned_per_day: nat;
|
143
|
+
});
|
144
|
+
canister_info : (record {
|
145
|
+
canister_id : canister_id;
|
146
|
+
num_requested_changes : opt nat64;
|
147
|
+
}) -> (record {
|
148
|
+
total_num_changes : nat64;
|
149
|
+
recent_changes : vec change;
|
150
|
+
module_hash : opt blob;
|
151
|
+
controllers : vec principal;
|
47
152
|
});
|
48
153
|
delete_canister : (record {canister_id : canister_id}) -> ();
|
49
154
|
deposit_cycles : (record {canister_id : canister_id}) -> ();
|
155
|
+
raw_rand : () -> (blob);
|
156
|
+
|
157
|
+
ecdsa_public_key : (record {
|
158
|
+
canister_id : opt canister_id;
|
159
|
+
derivation_path : vec blob;
|
160
|
+
key_id : record { curve: ecdsa_curve; name: text };
|
161
|
+
}) -> (record { public_key : blob; chain_code : blob; });
|
162
|
+
sign_with_ecdsa : (record {
|
163
|
+
message_hash : blob;
|
164
|
+
derivation_path : vec blob;
|
165
|
+
key_id : record { curve: ecdsa_curve; name: text };
|
166
|
+
}) -> (record { signature : blob });
|
167
|
+
|
168
|
+
bitcoin_get_balance: (get_balance_request) -> (satoshi);
|
169
|
+
bitcoin_get_utxos: (get_utxos_request) -> (get_utxos_response);
|
170
|
+
bitcoin_send_transaction: (send_transaction_request) -> ();
|
171
|
+
bitcoin_get_current_fee_percentiles: (get_current_fee_percentiles_request) -> (vec millisatoshi_per_byte);
|
172
|
+
|
50
173
|
provisional_create_canister_with_cycles : (record {
|
51
174
|
amount: opt nat;
|
52
|
-
settings : opt canister_settings
|
175
|
+
settings : opt canister_settings;
|
176
|
+
specified_id: opt canister_id;
|
53
177
|
}) -> (record {canister_id : canister_id});
|
54
178
|
provisional_top_up_canister :
|
55
179
|
(record { canister_id: canister_id; amount: nat }) -> ();
|
data/lib/ic_agent/version.rb
CHANGED
data/lib/ic_agent.rb
CHANGED
@@ -14,8 +14,10 @@ require_relative 'ic_agent/system_state'
|
|
14
14
|
require_relative 'ic_agent/canister'
|
15
15
|
|
16
16
|
require_relative 'ic_agent/ast/nodes/named_nodes'
|
17
|
+
require_relative 'ic_agent/ast/nodes/statement_nodes'
|
17
18
|
require_relative 'ic_agent/ast/nodes/string_literal'
|
18
19
|
require_relative 'ic_agent/ast/parser'
|
20
|
+
require_relative 'ic_agent/ast/statement_parser'
|
19
21
|
require_relative 'ic_agent/ast/writer'
|
20
22
|
require_relative 'ic_agent/ast/assembler'
|
21
23
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ic_agent
|
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
|
- Terry.Tu
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-06-
|
11
|
+
date: 2023-06-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: base32
|
@@ -241,9 +241,15 @@ files:
|
|
241
241
|
- lib/ic_agent/ast/assembler.rb
|
242
242
|
- lib/ic_agent/ast/did_grammar.treetop
|
243
243
|
- lib/ic_agent/ast/did_grammar_v1.treetop
|
244
|
+
- lib/ic_agent/ast/did_grammar_v2.treetop
|
245
|
+
- lib/ic_agent/ast/nested_type_grammar.treetop
|
244
246
|
- lib/ic_agent/ast/nodes/named_nodes.rb
|
247
|
+
- lib/ic_agent/ast/nodes/statement_nodes.rb
|
245
248
|
- lib/ic_agent/ast/nodes/string_literal.rb
|
246
249
|
- lib/ic_agent/ast/parser.rb
|
250
|
+
- lib/ic_agent/ast/record_parser.treetop
|
251
|
+
- lib/ic_agent/ast/statement_parser.rb
|
252
|
+
- lib/ic_agent/ast/variant_parser.treetop
|
247
253
|
- lib/ic_agent/ast/writer.rb
|
248
254
|
- lib/ic_agent/candid.rb
|
249
255
|
- lib/ic_agent/canister.rb
|