wowok 1.1.2 → 1.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.
- package/README.md +3 -2
- package/dist/exception.d.ts +2 -1
- package/dist/exception.d.ts.map +1 -1
- package/dist/exception.js +1 -0
- package/dist/guard.d.ts +24 -24
- package/dist/guard.d.ts.map +1 -1
- package/dist/guard.js +307 -324
- package/dist/passport.d.ts +17 -14
- package/dist/passport.d.ts.map +1 -1
- package/dist/passport.js +111 -76
- package/dist/protocol.d.ts +34 -38
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +32 -48
- package/dist/utils.d.ts +2 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +6 -0
- package/package.json +3 -2
- package/src/exception.ts +1 -0
- package/src/guard.ts +315 -335
- package/src/passport.ts +121 -82
- package/src/protocol.ts +35 -51
- package/src/utils.ts +6 -0
package/dist/guard.js
CHANGED
|
@@ -5,36 +5,39 @@ import { IsValidDesription, Bcs, IsValidInt, IsValidAddress } from './utils';
|
|
|
5
5
|
import { ERROR, Errors } from './exception';
|
|
6
6
|
export class Guard {
|
|
7
7
|
static MAX_INPUT_LENGTH = 2048;
|
|
8
|
-
static launch(protocol,
|
|
9
|
-
if (!
|
|
8
|
+
static launch(protocol, description, maker) {
|
|
9
|
+
if (!maker.IsReady()) {
|
|
10
|
+
ERROR(Errors.InvalidParam, 'launch maker');
|
|
11
|
+
}
|
|
12
|
+
if (!IsValidDesription(description)) {
|
|
10
13
|
ERROR(Errors.IsValidDesription);
|
|
11
14
|
}
|
|
12
|
-
|
|
13
|
-
|
|
15
|
+
let bcs_input = maker.get_input()[0];
|
|
16
|
+
let variables = maker.get_variable();
|
|
17
|
+
if (bcs_input.length == 0 || bcs_input.length > Guard.MAX_INPUT_LENGTH) {
|
|
18
|
+
ERROR(Errors.InvalidParam, 'launch input');
|
|
14
19
|
}
|
|
15
20
|
let bValid = true;
|
|
16
|
-
|
|
17
|
-
if (!
|
|
18
|
-
bValid = false;
|
|
19
|
-
if (!GuardVariableMaker.IsValidGuardVirableType(v.type))
|
|
21
|
+
variables?.forEach((v, k) => {
|
|
22
|
+
if (!GuardVariableHelper.IsValidIndentifier(k))
|
|
20
23
|
bValid = false;
|
|
21
24
|
if (!v.value && !v.witness)
|
|
22
25
|
bValid = false;
|
|
23
26
|
});
|
|
24
27
|
if (!bValid) {
|
|
25
|
-
ERROR(Errors.InvalidParam, '
|
|
28
|
+
ERROR(Errors.InvalidParam, 'launch variables');
|
|
26
29
|
}
|
|
27
30
|
let txb = protocol.CurrentSession();
|
|
28
|
-
let input = new Uint8Array(
|
|
31
|
+
let input = new Uint8Array(bcs_input); // copy new uint8array to reserve!
|
|
29
32
|
// reserve the bytes for guard
|
|
30
33
|
let guard = txb.moveCall({
|
|
31
34
|
target: protocol.GuardFn('new'),
|
|
32
|
-
arguments: [txb.pure(
|
|
35
|
+
arguments: [txb.pure(description, BCS.STRING), txb.pure([].slice.call(input.reverse()))],
|
|
33
36
|
});
|
|
34
|
-
|
|
35
|
-
if (v.type ==
|
|
37
|
+
variables?.forEach((v, k) => {
|
|
38
|
+
if (v.type == ContextType.TYPE_WITNESS_ID) {
|
|
36
39
|
if (!v.witness) {
|
|
37
|
-
ERROR(Errors.InvalidParam, '
|
|
40
|
+
ERROR(Errors.InvalidParam, 'variables type');
|
|
38
41
|
}
|
|
39
42
|
txb.moveCall({
|
|
40
43
|
target: protocol.GuardFn("variable_add"),
|
|
@@ -43,7 +46,7 @@ export class Guard {
|
|
|
43
46
|
}
|
|
44
47
|
else {
|
|
45
48
|
if (!v.value) {
|
|
46
|
-
ERROR(Errors.InvalidParam, '
|
|
49
|
+
ERROR(Errors.InvalidParam, 'variables type');
|
|
47
50
|
}
|
|
48
51
|
txb.moveCall({
|
|
49
52
|
target: protocol.GuardFn("variable_add"),
|
|
@@ -70,156 +73,127 @@ export class Guard {
|
|
|
70
73
|
}
|
|
71
74
|
static QUERIES = [
|
|
72
75
|
// module, 'name', 'id', [input], output
|
|
73
|
-
[MODULES.permission, 'builder', 1, [], ValueType.
|
|
74
|
-
[MODULES.permission, 'is_admin', 2, [ValueType.
|
|
75
|
-
[MODULES.permission, 'has_rights', 3, [ValueType.
|
|
76
|
-
[MODULES.permission, 'contains_address', 4, [ValueType.
|
|
77
|
-
[MODULES.permission, 'contains_index', 5, [ValueType.
|
|
78
|
-
[MODULES.permission, 'contains_guard', 6, [ValueType.
|
|
79
|
-
[MODULES.permission, 'contains_guard', 7, [ValueType.
|
|
80
|
-
[MODULES.permission, 'entity_count', 8, [], ValueType.
|
|
81
|
-
[MODULES.permission, 'admin_count', 9, [], ValueType.
|
|
82
|
-
[MODULES.repository, 'permission', 1, [], ValueType.
|
|
83
|
-
[MODULES.repository, 'policy_contains', 2, [ValueType.
|
|
84
|
-
[MODULES.repository, 'policy_has_permission_index', 3, [ValueType.
|
|
85
|
-
[MODULES.repository, 'policy_permission_index', 4, [ValueType.
|
|
86
|
-
[MODULES.repository, 'policy_value_type', 5, [ValueType.
|
|
87
|
-
[MODULES.repository, 'contains_id', 6, [ValueType.
|
|
88
|
-
[MODULES.repository, 'contains_value', 7, [ValueType.
|
|
89
|
-
[MODULES.repository, 'value_without_type', 8, [ValueType.
|
|
90
|
-
[MODULES.repository, 'value', 9, [ValueType.
|
|
91
|
-
[MODULES.repository, 'type', 10, [], ValueType.
|
|
92
|
-
[MODULES.repository, 'policy_mode', 11, [], ValueType.
|
|
93
|
-
[MODULES.repository, 'reference_count', 12, [], ValueType.
|
|
94
|
-
[MODULES.repository, 'has_reference', 13, [ValueType.
|
|
95
|
-
[MODULES.machine, 'permission', 1, [], ValueType.
|
|
96
|
-
[MODULES.machine, 'has_paused', 2, [], ValueType.
|
|
97
|
-
[MODULES.machine, 'has_published', 3, [], ValueType.
|
|
98
|
-
[MODULES.machine, 'consensus_repositories_contains', 5, [ValueType.
|
|
99
|
-
[MODULES.machine, 'has_endpoint', 6, [], ValueType.
|
|
100
|
-
[MODULES.machine, 'endpoint', 7, [], ValueType.
|
|
101
|
-
[MODULES.progress, 'machine', 1, [], ValueType.
|
|
102
|
-
[MODULES.progress, 'current', 2, [], ValueType.
|
|
103
|
-
[MODULES.progress, 'has_parent', 3, [], ValueType.
|
|
104
|
-
[MODULES.progress, 'parent', 4, [], ValueType.
|
|
105
|
-
[MODULES.progress, 'has_task', 5, [], ValueType.
|
|
106
|
-
[MODULES.progress, 'task', 6, [], ValueType.
|
|
107
|
-
[MODULES.progress, 'has_namedOperator', 7, [ValueType.
|
|
108
|
-
[MODULES.progress, 'namedOperator_contains', 8, [ValueType.
|
|
109
|
-
[MODULES.progress, 'has_context_repository', 9, [], ValueType.
|
|
110
|
-
[MODULES.progress, 'context_repository', 10, [], ValueType.
|
|
111
|
-
[MODULES.demand, 'permission', 1, [], ValueType.
|
|
112
|
-
[MODULES.demand, 'has_time_expire', 2, [], ValueType.
|
|
113
|
-
[MODULES.demand, 'time_expire', 3, [], ValueType.
|
|
114
|
-
[MODULES.demand, 'earnest_count', 4, [], ValueType.
|
|
115
|
-
[MODULES.demand, 'has_guard', 5, [], ValueType.
|
|
116
|
-
[MODULES.demand, 'guard', 6, [], ValueType.
|
|
117
|
-
[MODULES.demand, 'has_yes', 7, [], ValueType.
|
|
118
|
-
[MODULES.demand, 'yes', 8, [], ValueType.
|
|
119
|
-
[MODULES.demand, 'presenters_count', 9, [], ValueType.
|
|
120
|
-
[MODULES.demand, 'has_presenter', 10, [ValueType.
|
|
121
|
-
[MODULES.demand, 'persenter', 11, [ValueType.
|
|
122
|
-
[MODULES.order, 'amount', 1, [], ValueType.
|
|
123
|
-
[MODULES.order, 'payer', 2, [], ValueType.
|
|
124
|
-
[MODULES.order, 'service', 3, [], ValueType.
|
|
125
|
-
[MODULES.order, 'has_progress', 4, [], ValueType.
|
|
126
|
-
[MODULES.order, 'progress', 5, [], ValueType.
|
|
127
|
-
[MODULES.order, 'has_requred_info', 6, [], ValueType.
|
|
128
|
-
[MODULES.order, 'requred_info_service_pubkey', 7, [], ValueType.
|
|
129
|
-
[MODULES.order, 'requred_info_customer_pubkey', 8, [], ValueType.
|
|
130
|
-
[MODULES.order, 'requred_info_info', 9, [], ValueType.
|
|
131
|
-
[MODULES.order, 'has_discount', 10, [], ValueType.
|
|
132
|
-
[MODULES.order, 'discount', 11, [], ValueType.
|
|
133
|
-
[MODULES.order, 'balance', 12, [], ValueType.
|
|
134
|
-
[MODULES.order, 'bRefunded', 13, [], ValueType.
|
|
135
|
-
[MODULES.order, 'bWithdrawed', 14, [], ValueType.
|
|
136
|
-
[MODULES.service, 'permission', 1, [], ValueType.
|
|
137
|
-
[MODULES.service, 'payee', 2, [], ValueType.
|
|
138
|
-
[MODULES.service, 'has_buy_guard', 3, [], ValueType.
|
|
139
|
-
[MODULES.service, 'buy_guard', 4, [], ValueType.
|
|
140
|
-
[MODULES.service, 'repository_contains', 5, [ValueType.
|
|
141
|
-
[MODULES.service, 'has_withdraw_guard', 6, [ValueType.
|
|
142
|
-
[MODULES.service, 'withdraw_guard_percent', 7, [ValueType.
|
|
143
|
-
[MODULES.service, 'has_refund_guard', 8, [ValueType.
|
|
144
|
-
[MODULES.service, 'refund_guard_percent', 9, [ValueType.
|
|
145
|
-
[MODULES.service, 'has_sale', 10, [ValueType.
|
|
146
|
-
[MODULES.service, 'sale_price', 11, [ValueType.
|
|
147
|
-
[MODULES.service, 'sale_stock', 12, [ValueType.
|
|
148
|
-
[MODULES.service, 'has_machine', 13, [], ValueType.
|
|
149
|
-
[MODULES.service, 'machine', 14, [], ValueType.
|
|
150
|
-
[MODULES.service, 'bPaused', 15, [], ValueType.
|
|
151
|
-
[MODULES.service, 'bPublished', 16, [], ValueType.
|
|
152
|
-
[MODULES.service, 'has_required', 17, [], ValueType.
|
|
153
|
-
[MODULES.service, 'requrired_pubkey', 18, [], ValueType.
|
|
154
|
-
[MODULES.service, 'requrired_info', 19, [], ValueType.
|
|
155
|
-
[MODULES.reward, 'permission', 1, [], ValueType.
|
|
156
|
-
[MODULES.reward, 'rewards_count_remain', 2, [], ValueType.
|
|
157
|
-
[MODULES.reward, 'rewards_count_supplied', 3, [], ValueType.
|
|
158
|
-
[MODULES.reward, 'guard_count', 4, [], ValueType.
|
|
159
|
-
[MODULES.reward, 'has_guard', 5, [ValueType.
|
|
160
|
-
[MODULES.reward, 'guard_portions', 6, [ValueType.
|
|
161
|
-
[MODULES.reward, 'time_expire', 7, [], ValueType.
|
|
162
|
-
[MODULES.reward, 'has_claimed', 8, [ValueType.
|
|
163
|
-
[MODULES.reward, 'claimed', 9, [ValueType.
|
|
164
|
-
[MODULES.reward, 'has_claimed_count', 10, [], ValueType.
|
|
165
|
-
[MODULES.reward, 'is_sponsor', 11, [ValueType.
|
|
166
|
-
[MODULES.reward, 'sponsor', 12, [ValueType.
|
|
167
|
-
[MODULES.reward, 'sponsor_count', 13, [], ValueType.
|
|
168
|
-
[MODULES.reward, 'bAllowRepeatClaim', 14, [], ValueType.
|
|
169
|
-
[MODULES.vote, 'permission', 1, [], ValueType.
|
|
170
|
-
[MODULES.vote, 'bOptions_locked_for_voting', 2, [], ValueType.
|
|
171
|
-
[MODULES.vote, 'bdeadline_locked', 3, [], ValueType.
|
|
172
|
-
[MODULES.vote, 'bLockedGuard', 4, [], ValueType.
|
|
173
|
-
[MODULES.vote, 'max_choice_count', 5, [], ValueType.
|
|
174
|
-
[MODULES.vote, 'deadline', 6, [], ValueType.
|
|
175
|
-
[MODULES.vote, 'has_reference', 7, [], ValueType.
|
|
176
|
-
[MODULES.vote, 'reference', 8, [], ValueType.
|
|
177
|
-
[MODULES.vote, 'has_guard', 9, [ValueType.
|
|
178
|
-
[MODULES.vote, 'guard', 10, [ValueType.
|
|
179
|
-
[MODULES.vote, 'voted', 11, [ValueType.
|
|
180
|
-
[MODULES.vote, 'voted_weight', 12, [ValueType.
|
|
181
|
-
[MODULES.vote, 'has_agree', 13, [ValueType.
|
|
182
|
-
[MODULES.vote, 'agree_has_object', 14, [ValueType.
|
|
183
|
-
[MODULES.vote, 'agree_object', 15, [ValueType.
|
|
184
|
-
[MODULES.vote, 'agree_count', 16, [ValueType.
|
|
185
|
-
[MODULES.vote, 'agree_votes', 17, [ValueType.
|
|
186
|
-
[MODULES.vote, 'voted_count', 18, [], ValueType.
|
|
187
|
-
[MODULES.vote, 'top1_name_by_count', 19, [], ValueType.
|
|
188
|
-
[MODULES.vote, 'top1_count', 20, [], ValueType.
|
|
189
|
-
[MODULES.vote, 'top1_name_by_votes', 21, [], ValueType.
|
|
190
|
-
[MODULES.vote, 'top1_votes', 22, [], ValueType.
|
|
76
|
+
[MODULES.permission, 'builder', 1, [], ValueType.TYPE_ADDRESS],
|
|
77
|
+
[MODULES.permission, 'is_admin', 2, [ValueType.TYPE_ADDRESS], ValueType.TYPE_BOOL],
|
|
78
|
+
[MODULES.permission, 'has_rights', 3, [ValueType.TYPE_ADDRESS, ValueType.TYPE_U64], ValueType.TYPE_BOOL],
|
|
79
|
+
[MODULES.permission, 'contains_address', 4, [ValueType.TYPE_ADDRESS], ValueType.TYPE_BOOL],
|
|
80
|
+
[MODULES.permission, 'contains_index', 5, [ValueType.TYPE_ADDRESS, ValueType.TYPE_U64], ValueType.TYPE_BOOL],
|
|
81
|
+
[MODULES.permission, 'contains_guard', 6, [ValueType.TYPE_ADDRESS, ValueType.TYPE_U64], ValueType.TYPE_BOOL],
|
|
82
|
+
[MODULES.permission, 'contains_guard', 7, [ValueType.TYPE_ADDRESS, ValueType.TYPE_U64], ValueType.TYPE_ADDRESS],
|
|
83
|
+
[MODULES.permission, 'entity_count', 8, [], ValueType.TYPE_U64],
|
|
84
|
+
[MODULES.permission, 'admin_count', 9, [], ValueType.TYPE_U64],
|
|
85
|
+
[MODULES.repository, 'permission', 1, [], ValueType.TYPE_ADDRESS],
|
|
86
|
+
[MODULES.repository, 'policy_contains', 2, [ValueType.TYPE_VEC_U8], ValueType.TYPE_BOOL],
|
|
87
|
+
[MODULES.repository, 'policy_has_permission_index', 3, [ValueType.TYPE_VEC_U8], ValueType.TYPE_BOOL],
|
|
88
|
+
[MODULES.repository, 'policy_permission_index', 4, [ValueType.TYPE_VEC_U8], ValueType.TYPE_U64],
|
|
89
|
+
[MODULES.repository, 'policy_value_type', 5, [ValueType.TYPE_VEC_U8], ValueType.TYPE_U8],
|
|
90
|
+
[MODULES.repository, 'contains_id', 6, [ValueType.TYPE_ADDRESS], ValueType.TYPE_BOOL],
|
|
91
|
+
[MODULES.repository, 'contains_value', 7, [ValueType.TYPE_ADDRESS, ValueType.TYPE_VEC_U8], ValueType.TYPE_BOOL],
|
|
92
|
+
[MODULES.repository, 'value_without_type', 8, [ValueType.TYPE_ADDRESS, ValueType.TYPE_VEC_U8], ValueType.TYPE_VEC_U8],
|
|
93
|
+
[MODULES.repository, 'value', 9, [ValueType.TYPE_ADDRESS, ValueType.TYPE_VEC_U8], ValueType.TYPE_VEC_U8],
|
|
94
|
+
[MODULES.repository, 'type', 10, [], ValueType.TYPE_U8],
|
|
95
|
+
[MODULES.repository, 'policy_mode', 11, [], ValueType.TYPE_U8],
|
|
96
|
+
[MODULES.repository, 'reference_count', 12, [], ValueType.TYPE_U64],
|
|
97
|
+
[MODULES.repository, 'has_reference', 13, [ValueType.TYPE_ADDRESS], ValueType.TYPE_BOOL],
|
|
98
|
+
[MODULES.machine, 'permission', 1, [], ValueType.TYPE_ADDRESS],
|
|
99
|
+
[MODULES.machine, 'has_paused', 2, [], ValueType.TYPE_BOOL],
|
|
100
|
+
[MODULES.machine, 'has_published', 3, [], ValueType.TYPE_BOOL],
|
|
101
|
+
[MODULES.machine, 'consensus_repositories_contains', 5, [ValueType.TYPE_ADDRESS], ValueType.TYPE_BOOL],
|
|
102
|
+
[MODULES.machine, 'has_endpoint', 6, [], ValueType.TYPE_BOOL],
|
|
103
|
+
[MODULES.machine, 'endpoint', 7, [], ValueType.TYPE_VEC_U8],
|
|
104
|
+
[MODULES.progress, 'machine', 1, [], ValueType.TYPE_ADDRESS],
|
|
105
|
+
[MODULES.progress, 'current', 2, [], ValueType.TYPE_VEC_U8],
|
|
106
|
+
[MODULES.progress, 'has_parent', 3, [], ValueType.TYPE_BOOL],
|
|
107
|
+
[MODULES.progress, 'parent', 4, [], ValueType.TYPE_ADDRESS],
|
|
108
|
+
[MODULES.progress, 'has_task', 5, [], ValueType.TYPE_BOOL],
|
|
109
|
+
[MODULES.progress, 'task', 6, [], ValueType.TYPE_ADDRESS],
|
|
110
|
+
[MODULES.progress, 'has_namedOperator', 7, [ValueType.TYPE_VEC_U8], ValueType.TYPE_BOOL],
|
|
111
|
+
[MODULES.progress, 'namedOperator_contains', 8, [ValueType.TYPE_VEC_U8, ValueType.TYPE_ADDRESS], ValueType.TYPE_BOOL],
|
|
112
|
+
[MODULES.progress, 'has_context_repository', 9, [], ValueType.TYPE_BOOL],
|
|
113
|
+
[MODULES.progress, 'context_repository', 10, [], ValueType.TYPE_ADDRESS],
|
|
114
|
+
[MODULES.demand, 'permission', 1, [], ValueType.TYPE_ADDRESS],
|
|
115
|
+
[MODULES.demand, 'has_time_expire', 2, [], ValueType.TYPE_BOOL],
|
|
116
|
+
[MODULES.demand, 'time_expire', 3, [], ValueType.TYPE_U64],
|
|
117
|
+
[MODULES.demand, 'earnest_count', 4, [], ValueType.TYPE_U64],
|
|
118
|
+
[MODULES.demand, 'has_guard', 5, [], ValueType.TYPE_BOOL],
|
|
119
|
+
[MODULES.demand, 'guard', 6, [], ValueType.TYPE_ADDRESS],
|
|
120
|
+
[MODULES.demand, 'has_yes', 7, [], ValueType.TYPE_BOOL],
|
|
121
|
+
[MODULES.demand, 'yes', 8, [], ValueType.TYPE_ADDRESS],
|
|
122
|
+
[MODULES.demand, 'presenters_count', 9, [], ValueType.TYPE_U64],
|
|
123
|
+
[MODULES.demand, 'has_presenter', 10, [ValueType.TYPE_ADDRESS], ValueType.TYPE_BOOL],
|
|
124
|
+
[MODULES.demand, 'persenter', 11, [ValueType.TYPE_ADDRESS], ValueType.TYPE_ADDRESS],
|
|
125
|
+
[MODULES.order, 'amount', 1, [], ValueType.TYPE_U64],
|
|
126
|
+
[MODULES.order, 'payer', 2, [], ValueType.TYPE_ADDRESS],
|
|
127
|
+
[MODULES.order, 'service', 3, [], ValueType.TYPE_ADDRESS],
|
|
128
|
+
[MODULES.order, 'has_progress', 4, [], ValueType.TYPE_BOOL],
|
|
129
|
+
[MODULES.order, 'progress', 5, [], ValueType.TYPE_ADDRESS],
|
|
130
|
+
[MODULES.order, 'has_requred_info', 6, [], ValueType.TYPE_BOOL],
|
|
131
|
+
[MODULES.order, 'requred_info_service_pubkey', 7, [], ValueType.TYPE_VEC_U8],
|
|
132
|
+
[MODULES.order, 'requred_info_customer_pubkey', 8, [], ValueType.TYPE_VEC_U8],
|
|
133
|
+
[MODULES.order, 'requred_info_info', 9, [], ValueType.TYPE_VEC_VEC_U8],
|
|
134
|
+
[MODULES.order, 'has_discount', 10, [], ValueType.TYPE_BOOL],
|
|
135
|
+
[MODULES.order, 'discount', 11, [], ValueType.TYPE_ADDRESS],
|
|
136
|
+
[MODULES.order, 'balance', 12, [], ValueType.TYPE_U64],
|
|
137
|
+
[MODULES.order, 'bRefunded', 13, [], ValueType.TYPE_U8],
|
|
138
|
+
[MODULES.order, 'bWithdrawed', 14, [], ValueType.TYPE_U8],
|
|
139
|
+
[MODULES.service, 'permission', 1, [], ValueType.TYPE_ADDRESS],
|
|
140
|
+
[MODULES.service, 'payee', 2, [], ValueType.TYPE_ADDRESS],
|
|
141
|
+
[MODULES.service, 'has_buy_guard', 3, [], ValueType.TYPE_BOOL],
|
|
142
|
+
[MODULES.service, 'buy_guard', 4, [], ValueType.TYPE_ADDRESS],
|
|
143
|
+
[MODULES.service, 'repository_contains', 5, [ValueType.TYPE_ADDRESS], ValueType.TYPE_BOOL],
|
|
144
|
+
[MODULES.service, 'has_withdraw_guard', 6, [ValueType.TYPE_ADDRESS], ValueType.TYPE_BOOL],
|
|
145
|
+
[MODULES.service, 'withdraw_guard_percent', 7, [ValueType.TYPE_ADDRESS], ValueType.TYPE_U64],
|
|
146
|
+
[MODULES.service, 'has_refund_guard', 8, [ValueType.TYPE_ADDRESS], ValueType.TYPE_BOOL],
|
|
147
|
+
[MODULES.service, 'refund_guard_percent', 9, [ValueType.TYPE_ADDRESS], ValueType.TYPE_U64],
|
|
148
|
+
[MODULES.service, 'has_sale', 10, [ValueType.TYPE_VEC_U8], ValueType.TYPE_BOOL],
|
|
149
|
+
[MODULES.service, 'sale_price', 11, [ValueType.TYPE_VEC_U8], ValueType.TYPE_U64],
|
|
150
|
+
[MODULES.service, 'sale_stock', 12, [ValueType.TYPE_VEC_U8], ValueType.TYPE_U64],
|
|
151
|
+
[MODULES.service, 'has_machine', 13, [], ValueType.TYPE_BOOL],
|
|
152
|
+
[MODULES.service, 'machine', 14, [], ValueType.TYPE_ADDRESS],
|
|
153
|
+
[MODULES.service, 'bPaused', 15, [], ValueType.TYPE_BOOL],
|
|
154
|
+
[MODULES.service, 'bPublished', 16, [], ValueType.TYPE_BOOL],
|
|
155
|
+
[MODULES.service, 'has_required', 17, [], ValueType.TYPE_BOOL],
|
|
156
|
+
[MODULES.service, 'requrired_pubkey', 18, [], ValueType.TYPE_VEC_U8],
|
|
157
|
+
[MODULES.service, 'requrired_info', 19, [], ValueType.TYPE_VEC_VEC_U8],
|
|
158
|
+
[MODULES.reward, 'permission', 1, [], ValueType.TYPE_ADDRESS],
|
|
159
|
+
[MODULES.reward, 'rewards_count_remain', 2, [], ValueType.TYPE_U64],
|
|
160
|
+
[MODULES.reward, 'rewards_count_supplied', 3, [], ValueType.TYPE_U64],
|
|
161
|
+
[MODULES.reward, 'guard_count', 4, [], ValueType.TYPE_U64],
|
|
162
|
+
[MODULES.reward, 'has_guard', 5, [ValueType.TYPE_ADDRESS], ValueType.TYPE_BOOL],
|
|
163
|
+
[MODULES.reward, 'guard_portions', 6, [ValueType.TYPE_ADDRESS], ValueType.TYPE_U64],
|
|
164
|
+
[MODULES.reward, 'time_expire', 7, [], ValueType.TYPE_U64],
|
|
165
|
+
[MODULES.reward, 'has_claimed', 8, [ValueType.TYPE_ADDRESS], ValueType.TYPE_BOOL],
|
|
166
|
+
[MODULES.reward, 'claimed', 9, [ValueType.TYPE_ADDRESS], ValueType.TYPE_U64],
|
|
167
|
+
[MODULES.reward, 'has_claimed_count', 10, [], ValueType.TYPE_U64],
|
|
168
|
+
[MODULES.reward, 'is_sponsor', 11, [ValueType.TYPE_ADDRESS], ValueType.TYPE_BOOL],
|
|
169
|
+
[MODULES.reward, 'sponsor', 12, [ValueType.TYPE_ADDRESS], ValueType.TYPE_U64],
|
|
170
|
+
[MODULES.reward, 'sponsor_count', 13, [], ValueType.TYPE_U64],
|
|
171
|
+
[MODULES.reward, 'bAllowRepeatClaim', 14, [], ValueType.TYPE_BOOL],
|
|
172
|
+
[MODULES.vote, 'permission', 1, [], ValueType.TYPE_ADDRESS],
|
|
173
|
+
[MODULES.vote, 'bOptions_locked_for_voting', 2, [], ValueType.TYPE_BOOL],
|
|
174
|
+
[MODULES.vote, 'bdeadline_locked', 3, [], ValueType.TYPE_BOOL],
|
|
175
|
+
[MODULES.vote, 'bLockedGuard', 4, [], ValueType.TYPE_BOOL],
|
|
176
|
+
[MODULES.vote, 'max_choice_count', 5, [], ValueType.TYPE_U8],
|
|
177
|
+
[MODULES.vote, 'deadline', 6, [], ValueType.TYPE_U64],
|
|
178
|
+
[MODULES.vote, 'has_reference', 7, [], ValueType.TYPE_BOOL],
|
|
179
|
+
[MODULES.vote, 'reference', 8, [], ValueType.TYPE_ADDRESS],
|
|
180
|
+
[MODULES.vote, 'has_guard', 9, [ValueType.TYPE_ADDRESS], ValueType.TYPE_BOOL],
|
|
181
|
+
[MODULES.vote, 'guard', 10, [ValueType.TYPE_ADDRESS], ValueType.TYPE_U64],
|
|
182
|
+
[MODULES.vote, 'voted', 11, [ValueType.TYPE_ADDRESS], ValueType.TYPE_BOOL],
|
|
183
|
+
[MODULES.vote, 'voted_weight', 12, [ValueType.TYPE_ADDRESS], ValueType.TYPE_U64],
|
|
184
|
+
[MODULES.vote, 'has_agree', 13, [ValueType.TYPE_VEC_U8], ValueType.TYPE_BOOL],
|
|
185
|
+
[MODULES.vote, 'agree_has_object', 14, [ValueType.TYPE_VEC_U8], ValueType.TYPE_BOOL],
|
|
186
|
+
[MODULES.vote, 'agree_object', 15, [ValueType.TYPE_VEC_U8], ValueType.TYPE_ADDRESS],
|
|
187
|
+
[MODULES.vote, 'agree_count', 16, [ValueType.TYPE_VEC_U8], ValueType.TYPE_U64],
|
|
188
|
+
[MODULES.vote, 'agree_votes', 17, [ValueType.TYPE_VEC_U8], ValueType.TYPE_U64],
|
|
189
|
+
[MODULES.vote, 'voted_count', 18, [], ValueType.TYPE_U64],
|
|
190
|
+
[MODULES.vote, 'top1_name_by_count', 19, [], ValueType.TYPE_VEC_U8],
|
|
191
|
+
[MODULES.vote, 'top1_count', 20, [], ValueType.TYPE_U64],
|
|
192
|
+
[MODULES.vote, 'top1_name_by_votes', 21, [], ValueType.TYPE_VEC_U8],
|
|
193
|
+
[MODULES.vote, 'top1_votes', 22, [], ValueType.TYPE_U64],
|
|
191
194
|
];
|
|
192
195
|
}
|
|
193
|
-
|
|
194
|
-
export const graphql_query_objects = (protocol: Protocol, nodes:any) : Guard_Query_Object[] => {
|
|
195
|
-
let ret:Guard_Query_Object[] = [];
|
|
196
|
-
nodes.forEach((node:any) => {
|
|
197
|
-
for (let k = 0; k < protocol.WOWOK_OBJECTS_TYPE().length; k++) {
|
|
198
|
-
if (node?.asMoveObject?.contents?.type?.repr?.includes(protocol.WOWOK_OBJECTS_TYPE()[k]) ) { // type: pack::m::Object<...>
|
|
199
|
-
ret.push({ target:protocol.WOWOK_OBJECTS_PREFIX_TYPE()[k] + 'guard_query' as FnCallType,
|
|
200
|
-
object:Inputs.SharedObjectRef({
|
|
201
|
-
objectId: node.address,
|
|
202
|
-
mutable: false,
|
|
203
|
-
initialSharedVersion: node.version,
|
|
204
|
-
}) as TransactionObjectInput,
|
|
205
|
-
types:parse_object_type(node.asMoveObject.contents.type.repr as string),
|
|
206
|
-
id: node.address,
|
|
207
|
-
} as Guard_Query_Object);
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
})
|
|
211
|
-
return ret
|
|
212
|
-
} */
|
|
213
|
-
export class GuardVariableMaker {
|
|
214
|
-
static IsValidGuardVirableType = (type) => {
|
|
215
|
-
if (type == OperatorType.TYPE_FUTURE_QUERY || type == ContextType.TYPE_CONTEXT_FUTURE_ID || type == OperatorType.TYPE_QUERY_FROM_CONTEXT ||
|
|
216
|
-
type == ContextType.TYPE_CONTEXT_bool || type == ContextType.TYPE_CONTEXT_address || type == ContextType.TYPE_CONTEXT_u64 ||
|
|
217
|
-
type == ContextType.TYPE_CONTEXT_u8 || type == ContextType.TYPE_CONTEXT_vec_u8) {
|
|
218
|
-
return true;
|
|
219
|
-
}
|
|
220
|
-
;
|
|
221
|
-
return false;
|
|
222
|
-
};
|
|
196
|
+
export class GuardVariableHelper {
|
|
223
197
|
static IsValidIndentifier = (identifier) => {
|
|
224
198
|
if (!IsValidInt(identifier) || identifier > 255)
|
|
225
199
|
return false;
|
|
@@ -232,119 +206,139 @@ export class GuardVariableMaker {
|
|
|
232
206
|
return v.value;
|
|
233
207
|
}
|
|
234
208
|
}
|
|
235
|
-
return false;
|
|
236
209
|
}
|
|
237
|
-
static get_variable_witness(variables, identifier
|
|
210
|
+
static get_variable_witness(variables, identifier) {
|
|
238
211
|
if (variables.has(identifier)) {
|
|
239
212
|
let v = variables.get(identifier);
|
|
240
|
-
if (v?.witness && v.type ==
|
|
213
|
+
if (v?.witness && v.type == ContextType.TYPE_WITNESS_ID) {
|
|
241
214
|
return v.witness;
|
|
242
215
|
}
|
|
243
216
|
}
|
|
244
|
-
return false;
|
|
245
217
|
}
|
|
246
|
-
static add_future_variable(variables, identifier,
|
|
247
|
-
if (!
|
|
248
|
-
|
|
249
|
-
if (!GuardVariableMaker.IsValidGuardVirableType(type))
|
|
250
|
-
return false;
|
|
218
|
+
static add_future_variable(variables, identifier, witness, value, bNeedSerialize = true) {
|
|
219
|
+
if (!GuardVariableHelper.IsValidIndentifier(identifier))
|
|
220
|
+
ERROR(Errors.IsValidIndentifier, 'add_future_variable');
|
|
251
221
|
if (!witness && !value)
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
}
|
|
262
|
-
else {
|
|
263
|
-
v.value = value ? value : undefined;
|
|
264
|
-
v.witness = witness ? witness : undefined;
|
|
265
|
-
}
|
|
266
|
-
}
|
|
267
|
-
else {
|
|
268
|
-
if (bNeedSerialize) {
|
|
269
|
-
variables.set(identifier, { type: type, value: value ? Bcs.getInstance().ser_address(value) : undefined, witness: witness ? Bcs.getInstance().ser_address(witness) : undefined });
|
|
270
|
-
}
|
|
271
|
-
else {
|
|
272
|
-
variables.set(identifier, { type: type, value: value ? value : undefined, witness: witness ? witness : undefined });
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
return true;
|
|
222
|
+
ERROR(Errors.InvalidParam, 'both witness and value invalid');
|
|
223
|
+
let v = variables.get(identifier);
|
|
224
|
+
if (!v || v.type == ContextType.TYPE_WITNESS_ID) {
|
|
225
|
+
if (bNeedSerialize) {
|
|
226
|
+
variables.set(identifier, { type: ContextType.TYPE_WITNESS_ID, value: value ? Bcs.getInstance().ser_address(value) : undefined, witness: witness ? Bcs.getInstance().ser_address(witness) : undefined });
|
|
227
|
+
}
|
|
228
|
+
else {
|
|
229
|
+
variables.set(identifier, { type: ContextType.TYPE_WITNESS_ID, value: value ? value : undefined, witness: witness ? witness : undefined });
|
|
230
|
+
}
|
|
276
231
|
}
|
|
277
|
-
return false;
|
|
278
232
|
}
|
|
279
233
|
static add_variable(variables, identifier, type, value, bNeedSerialize = true) {
|
|
280
|
-
if (!
|
|
281
|
-
return false;
|
|
282
|
-
if (!GuardVariableMaker.IsValidGuardVirableType(type))
|
|
234
|
+
if (!GuardVariableHelper.IsValidIndentifier(identifier))
|
|
283
235
|
return false;
|
|
284
236
|
if (!value)
|
|
285
237
|
return false;
|
|
286
238
|
switch (type) {
|
|
287
|
-
case
|
|
239
|
+
case ValueType.TYPE_BOOL:
|
|
288
240
|
bNeedSerialize ? variables.set(identifier, { type: type, value: Bcs.getInstance().ser_bool(value) }) :
|
|
289
241
|
variables.set(identifier, { type: type, value: value });
|
|
290
|
-
return
|
|
291
|
-
case
|
|
292
|
-
case OperatorType.TYPE_QUERY_FROM_CONTEXT:
|
|
242
|
+
return;
|
|
243
|
+
case ValueType.TYPE_ADDRESS:
|
|
293
244
|
bNeedSerialize ? variables.set(identifier, { type: type, value: Bcs.getInstance().ser_address(value) }) :
|
|
294
245
|
variables.set(identifier, { type: type, value: value });
|
|
295
|
-
return
|
|
296
|
-
case
|
|
246
|
+
return;
|
|
247
|
+
case ValueType.TYPE_U64:
|
|
297
248
|
bNeedSerialize ? variables.set(identifier, { type: type, value: Bcs.getInstance().ser_u64(value) }) :
|
|
298
249
|
variables.set(identifier, { type: type, value: value });
|
|
299
|
-
return
|
|
300
|
-
case
|
|
250
|
+
return;
|
|
251
|
+
case ValueType.TYPE_U8:
|
|
301
252
|
bNeedSerialize ? variables.set(identifier, { type: type, value: Bcs.getInstance().ser_u8(value) }) :
|
|
302
253
|
variables.set(identifier, { type: type, value: value });
|
|
303
|
-
return
|
|
304
|
-
case
|
|
305
|
-
|
|
254
|
+
return;
|
|
255
|
+
case ValueType.TYPE_VEC_U8:
|
|
256
|
+
if (typeof (value) === 'string') {
|
|
257
|
+
variables.set(identifier, { type: type, value: Bcs.getInstance().ser_string(value) });
|
|
258
|
+
}
|
|
259
|
+
else {
|
|
260
|
+
variables.set(identifier, { type: type, value: value });
|
|
261
|
+
}
|
|
262
|
+
return;
|
|
263
|
+
case ValueType.TYPE_U128:
|
|
264
|
+
bNeedSerialize ? variables.set(identifier, { type: type, value: Bcs.getInstance().ser_u128(value) }) :
|
|
265
|
+
variables.set(identifier, { type: type, value: value });
|
|
266
|
+
return;
|
|
267
|
+
case ValueType.TYPE_U256:
|
|
268
|
+
bNeedSerialize ? variables.set(identifier, { type: type, value: Bcs.getInstance().ser_u256(value) }) :
|
|
269
|
+
variables.set(identifier, { type: type, value: value });
|
|
270
|
+
return;
|
|
271
|
+
case ValueType.TYPE_VEC_U64:
|
|
272
|
+
bNeedSerialize ? variables.set(identifier, { type: type, value: Bcs.getInstance().ser_vector_u64(value) }) :
|
|
273
|
+
variables.set(identifier, { type: type, value: value });
|
|
274
|
+
return;
|
|
275
|
+
case ValueType.TYPE_VEC_VEC_U8:
|
|
276
|
+
bNeedSerialize ? variables.set(identifier, { type: type, value: Bcs.getInstance().ser_vector_vector_u8(value) }) :
|
|
306
277
|
variables.set(identifier, { type: type, value: value });
|
|
307
|
-
return
|
|
278
|
+
return;
|
|
279
|
+
default:
|
|
280
|
+
if (bNeedSerialize) {
|
|
281
|
+
ERROR(Errors.Fail, 'ValueType serialize not impl yet');
|
|
282
|
+
}
|
|
283
|
+
variables.set(identifier, { type: type, value: value });
|
|
308
284
|
}
|
|
309
|
-
return false;
|
|
310
285
|
}
|
|
311
286
|
}
|
|
312
|
-
export class
|
|
287
|
+
export class GuardMaker {
|
|
313
288
|
data = [];
|
|
314
289
|
type_validator = [];
|
|
290
|
+
variable = new Map();
|
|
291
|
+
static index = 0;
|
|
292
|
+
static get_index() {
|
|
293
|
+
if (GuardMaker.index == 256) {
|
|
294
|
+
GuardMaker.index = 0;
|
|
295
|
+
}
|
|
296
|
+
return GuardMaker.index++;
|
|
297
|
+
}
|
|
315
298
|
constructor() { }
|
|
299
|
+
add_variable(type, value, bNeedSerialize = true) {
|
|
300
|
+
let identifier = GuardMaker.get_index();
|
|
301
|
+
if (type == ContextType.TYPE_WITNESS_ID) {
|
|
302
|
+
// add witness to variable
|
|
303
|
+
GuardVariableHelper.add_future_variable(this.variable, identifier, value, undefined, bNeedSerialize);
|
|
304
|
+
}
|
|
305
|
+
else {
|
|
306
|
+
GuardVariableHelper.add_variable(this.variable, identifier, type, value, bNeedSerialize);
|
|
307
|
+
}
|
|
308
|
+
return identifier;
|
|
309
|
+
}
|
|
316
310
|
// serialize const & data
|
|
317
|
-
add_param(type, param
|
|
311
|
+
add_param(type, param) {
|
|
318
312
|
switch (type) {
|
|
319
|
-
case ValueType.
|
|
313
|
+
case ValueType.TYPE_ADDRESS:
|
|
320
314
|
if (!param)
|
|
321
315
|
ERROR(Errors.InvalidParam, 'param');
|
|
322
316
|
this.data.push(Bcs.getInstance().ser_u8(type));
|
|
323
317
|
this.data.push(Bcs.getInstance().ser_address(param));
|
|
324
318
|
this.type_validator.push(type);
|
|
325
319
|
break;
|
|
326
|
-
case ValueType.
|
|
320
|
+
case ValueType.TYPE_BOOL:
|
|
327
321
|
if (!param)
|
|
328
322
|
ERROR(Errors.InvalidParam, 'param');
|
|
329
323
|
this.data.push(Bcs.getInstance().ser_u8(type));
|
|
330
324
|
this.data.push(Bcs.getInstance().ser_bool(param));
|
|
331
325
|
this.type_validator.push(type);
|
|
332
326
|
break;
|
|
333
|
-
case ValueType.
|
|
327
|
+
case ValueType.TYPE_U8:
|
|
334
328
|
if (!param)
|
|
335
329
|
ERROR(Errors.InvalidParam, 'param');
|
|
336
330
|
this.data.push(Bcs.getInstance().ser_u8(type));
|
|
337
331
|
this.data.push(Bcs.getInstance().ser_u8(param));
|
|
338
332
|
this.type_validator.push(type);
|
|
339
333
|
break;
|
|
340
|
-
case ValueType.
|
|
334
|
+
case ValueType.TYPE_U64:
|
|
341
335
|
if (!param)
|
|
342
336
|
ERROR(Errors.InvalidParam, 'param');
|
|
343
337
|
this.data.push(Bcs.getInstance().ser_u8(type));
|
|
344
338
|
this.data.push(Bcs.getInstance().ser_u64(param));
|
|
345
339
|
this.type_validator.push(type);
|
|
346
340
|
break;
|
|
347
|
-
case ValueType.
|
|
341
|
+
case ValueType.TYPE_VEC_U8:
|
|
348
342
|
if (!param)
|
|
349
343
|
ERROR(Errors.InvalidParam, 'param');
|
|
350
344
|
this.data.push(Bcs.getInstance().ser_u8(type));
|
|
@@ -352,99 +346,49 @@ export class GuardInputMaker {
|
|
|
352
346
|
this.type_validator.push(type);
|
|
353
347
|
// this.data[this.data.length-1].forEach((item : number) => console.log(item))
|
|
354
348
|
break;
|
|
355
|
-
case ContextType.
|
|
349
|
+
case ContextType.TYPE_SIGNER:
|
|
356
350
|
this.data.push(Bcs.getInstance().ser_u8(type));
|
|
357
|
-
this.type_validator.push(ValueType.
|
|
351
|
+
this.type_validator.push(ValueType.TYPE_ADDRESS);
|
|
358
352
|
break;
|
|
359
|
-
case ContextType.
|
|
353
|
+
case ContextType.TYPE_CLOCK:
|
|
360
354
|
this.data.push(Bcs.getInstance().ser_u8(type));
|
|
361
|
-
this.type_validator.push(ValueType.
|
|
355
|
+
this.type_validator.push(ValueType.TYPE_U64);
|
|
362
356
|
break;
|
|
363
|
-
case ContextType.
|
|
364
|
-
|
|
365
|
-
case ContextType.TYPE_CONTEXT_u64:
|
|
366
|
-
case ContextType.TYPE_CONTEXT_vec_u8:
|
|
367
|
-
case ContextType.TYPE_CONTEXT_address:
|
|
368
|
-
case ContextType.TYPE_CONTEXT_FUTURE_ID:
|
|
369
|
-
if (!variable || !param) {
|
|
370
|
-
ERROR(Errors.InvalidParam, 'variable or param');
|
|
371
|
-
}
|
|
372
|
-
if (typeof (param) != 'number' || !IsValidInt(param) || param > 255) {
|
|
357
|
+
case ContextType.TYPE_WITNESS_ID:
|
|
358
|
+
if (!param)
|
|
373
359
|
ERROR(Errors.InvalidParam, 'param');
|
|
360
|
+
this.data.push(Bcs.getInstance().ser_u8(type));
|
|
361
|
+
this.data.push(Bcs.getInstance().ser_address(param));
|
|
362
|
+
this.type_validator.push(ValueType.TYPE_ADDRESS);
|
|
363
|
+
break;
|
|
364
|
+
case ContextType.TYPE_VARIABLE:
|
|
365
|
+
if (!param) {
|
|
366
|
+
ERROR(Errors.InvalidParam, 'param invalid');
|
|
374
367
|
}
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
this.data.push(Bcs.getInstance().ser_u8(type));
|
|
378
|
-
this.data.push(Bcs.getInstance().ser_u8(param));
|
|
379
|
-
if (type == ContextType.TYPE_CONTEXT_bool) {
|
|
380
|
-
this.type_validator.push(ValueType.TYPE_STATIC_bool);
|
|
381
|
-
}
|
|
382
|
-
else if (type == ContextType.TYPE_CONTEXT_u8) {
|
|
383
|
-
this.type_validator.push(ValueType.TYPE_STATIC_u8);
|
|
384
|
-
}
|
|
385
|
-
else if (type == ContextType.TYPE_CONTEXT_u64) {
|
|
386
|
-
this.type_validator.push(ValueType.TYPE_STATIC_u64);
|
|
387
|
-
}
|
|
388
|
-
else if (type == ContextType.TYPE_CONTEXT_vec_u8) {
|
|
389
|
-
this.type_validator.push(ValueType.TYPE_STATIC_vec_u8);
|
|
390
|
-
}
|
|
391
|
-
else if (type == ContextType.TYPE_CONTEXT_address) {
|
|
392
|
-
this.type_validator.push(ValueType.TYPE_STATIC_address);
|
|
393
|
-
}
|
|
394
|
-
else if (type == ContextType.TYPE_CONTEXT_FUTURE_ID) {
|
|
395
|
-
this.type_validator.push(ValueType.TYPE_STATIC_address);
|
|
396
|
-
}
|
|
397
|
-
break;
|
|
368
|
+
if (typeof (param) != 'number' || !IsValidInt(param) || param > 255) {
|
|
369
|
+
ERROR(Errors.InvalidParam, 'add_param param');
|
|
398
370
|
}
|
|
399
|
-
;
|
|
400
|
-
|
|
371
|
+
var v = this.variable.get(param);
|
|
372
|
+
if (!v)
|
|
373
|
+
ERROR(Errors.Fail, 'identifier not in variable');
|
|
374
|
+
this.type_validator.push(v.type);
|
|
375
|
+
this.data.push(Bcs.getInstance().ser_u8(type));
|
|
376
|
+
this.data.push(Bcs.getInstance().ser_u8(param));
|
|
377
|
+
break;
|
|
401
378
|
default:
|
|
402
|
-
ERROR(Errors.InvalidParam, 'type');
|
|
379
|
+
ERROR(Errors.InvalidParam, 'add_param type');
|
|
403
380
|
}
|
|
404
381
|
;
|
|
382
|
+
return this;
|
|
405
383
|
}
|
|
406
|
-
static
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
return i;
|
|
410
|
-
}
|
|
411
|
-
}
|
|
412
|
-
return -1;
|
|
413
|
-
}
|
|
414
|
-
add_future_query(identifier, module, query_name, variable) {
|
|
415
|
-
let query_index = GuardInputMaker.query_index(module, query_name);
|
|
416
|
-
if (!GuardVariableMaker.IsValidIndentifier(identifier) || query_index == -1) {
|
|
417
|
-
ERROR(Errors.InvalidParam, 'identifier or query_name');
|
|
418
|
-
}
|
|
419
|
-
if (module != MODULES.order && module != MODULES.progress) {
|
|
420
|
-
ERROR(Errors.InvalidParam, 'module');
|
|
421
|
-
}
|
|
422
|
-
if (!variable || variable.get(identifier)?.type != OperatorType.TYPE_FUTURE_QUERY) {
|
|
423
|
-
ERROR(Errors.InvalidParam, 'variable');
|
|
424
|
-
}
|
|
425
|
-
let offset = this.type_validator.length - Guard.QUERIES[query_index][3].length;
|
|
426
|
-
if (offset < 0) {
|
|
427
|
-
ERROR(Errors.InvalidParam, 'query_name');
|
|
428
|
-
}
|
|
429
|
-
let types = this.type_validator.slice(offset);
|
|
430
|
-
if (!array_equal(types, Guard.QUERIES[query_index][3])) { // type validate
|
|
431
|
-
ERROR(Errors.Fail, 'array_equal');
|
|
432
|
-
}
|
|
433
|
-
this.data.push(Bcs.getInstance().ser_u8(OperatorType.TYPE_FUTURE_QUERY)); // TYPE
|
|
434
|
-
this.data.push(Bcs.getInstance().ser_u8(identifier)); // variable identifier
|
|
435
|
-
this.data.push(Bcs.getInstance().ser_u8(Guard.QUERIES[query_index][2])); // cmd
|
|
436
|
-
this.type_validator.splice(offset, Guard.QUERIES[query_index][3].length); // delete type stack
|
|
437
|
-
this.type_validator.push(Guard.QUERIES[query_index][4]); // add the return value type to type stack
|
|
438
|
-
// console.log(this.type_validator)
|
|
439
|
-
}
|
|
440
|
-
// object_address_from: string for static address; number as identifier for variable
|
|
441
|
-
add_query(module, query_name, object_address_from) {
|
|
442
|
-
let query_index = GuardInputMaker.query_index(module, query_name); // query_index: index(from 0) of array Guard.QUERIES
|
|
384
|
+
// object_address_from: string for static address; number as identifier invariable
|
|
385
|
+
add_query(module, query_name, object_address_from, bWitness = false) {
|
|
386
|
+
let query_index = Guard.QUERIES.findIndex((q) => { return q[0] == module && q[1] == query_name; });
|
|
443
387
|
if (query_index == -1) {
|
|
444
388
|
ERROR(Errors.InvalidParam, 'query_name');
|
|
445
389
|
}
|
|
446
390
|
if (typeof (object_address_from) == 'number') {
|
|
447
|
-
if (!
|
|
391
|
+
if (!GuardVariableHelper.IsValidIndentifier(object_address_from)) {
|
|
448
392
|
ERROR(Errors.InvalidParam, 'object_address_from');
|
|
449
393
|
}
|
|
450
394
|
}
|
|
@@ -461,43 +405,53 @@ export class GuardInputMaker {
|
|
|
461
405
|
if (!array_equal(types, Guard.QUERIES[query_index][3])) { // type validate
|
|
462
406
|
ERROR(Errors.Fail, 'array_equal');
|
|
463
407
|
}
|
|
408
|
+
this.data.push(Bcs.getInstance().ser_u8(OperatorType.TYPE_QUERY)); // QUERY TYPE
|
|
464
409
|
if (typeof (object_address_from) == 'string') {
|
|
465
|
-
this.data.push(Bcs.getInstance().ser_u8(
|
|
410
|
+
bWitness ? this.data.push(Bcs.getInstance().ser_u8(ContextType.TYPE_WITNESS_ID)) :
|
|
411
|
+
this.data.push(Bcs.getInstance().ser_u8(ValueType.TYPE_ADDRESS));
|
|
466
412
|
this.data.push(Bcs.getInstance().ser_address(object_address_from)); // object address
|
|
467
413
|
}
|
|
468
414
|
else {
|
|
469
|
-
this.
|
|
470
|
-
|
|
415
|
+
let v = this.variable.get(object_address_from);
|
|
416
|
+
if (!v)
|
|
417
|
+
ERROR(Errors.Fail, 'object_address_from not in variable');
|
|
418
|
+
if ((bWitness && v?.type == ContextType.TYPE_WITNESS_ID) || (!bWitness && v?.type == ValueType.TYPE_ADDRESS)) {
|
|
419
|
+
this.data.push(Bcs.getInstance().ser_u8(ContextType.TYPE_VARIABLE));
|
|
420
|
+
this.data.push(Bcs.getInstance().ser_u8(object_address_from)); // object identifer in variables
|
|
421
|
+
}
|
|
422
|
+
else {
|
|
423
|
+
ERROR(Errors.Fail, 'type bWitness not match');
|
|
424
|
+
}
|
|
471
425
|
}
|
|
472
426
|
this.data.push(Bcs.getInstance().ser_u8(Guard.QUERIES[query_index][2])); // cmd
|
|
473
427
|
this.type_validator.splice(offset, Guard.QUERIES[query_index][3].length); // delete type stack
|
|
474
428
|
this.type_validator.push(Guard.QUERIES[query_index][4]); // add the return value type to type stack
|
|
475
|
-
|
|
429
|
+
return this;
|
|
476
430
|
}
|
|
477
431
|
add_logic(type) {
|
|
478
432
|
let splice_len = 2;
|
|
479
433
|
switch (type) {
|
|
480
|
-
case OperatorType.
|
|
481
|
-
case OperatorType.
|
|
482
|
-
case OperatorType.
|
|
483
|
-
case OperatorType.
|
|
484
|
-
case OperatorType.
|
|
434
|
+
case OperatorType.TYPE_LOGIC_AS_U256_GREATER:
|
|
435
|
+
case OperatorType.TYPE_LOGIC_AS_U256_GREATER_EQUAL:
|
|
436
|
+
case OperatorType.TYPE_LOGIC_AS_U256_LESSER:
|
|
437
|
+
case OperatorType.TYPE_LOGIC_AS_U256_LESSER_EQUAL:
|
|
438
|
+
case OperatorType.TYPE_LOGIC_AS_U256_EQUAL:
|
|
485
439
|
if (this.type_validator.length < splice_len) {
|
|
486
440
|
ERROR(Errors.Fail, 'type_validator.length');
|
|
487
441
|
}
|
|
488
|
-
if (!
|
|
442
|
+
if (!GuardMaker.match_u128(this.type_validator[this.type_validator.length - 1])) {
|
|
489
443
|
ERROR(Errors.Fail, 'type_validator check');
|
|
490
444
|
}
|
|
491
|
-
if (!
|
|
445
|
+
if (!GuardMaker.match_u128(this.type_validator[this.type_validator.length - 2])) {
|
|
492
446
|
ERROR(Errors.Fail, 'type_validator check');
|
|
493
447
|
}
|
|
494
448
|
break;
|
|
495
|
-
case OperatorType.
|
|
449
|
+
case OperatorType.TYPE_LOGIC_EQUAL:
|
|
496
450
|
if (this.type_validator.length < splice_len) {
|
|
497
451
|
ERROR(Errors.Fail, 'type_validator.length');
|
|
498
452
|
}
|
|
499
453
|
break;
|
|
500
|
-
case OperatorType.
|
|
454
|
+
case OperatorType.TYPE_LOGIC_HAS_SUBSTRING:
|
|
501
455
|
if (this.type_validator.length < splice_len) {
|
|
502
456
|
ERROR(Errors.Fail, 'type_validator.length');
|
|
503
457
|
}
|
|
@@ -507,7 +461,7 @@ export class GuardInputMaker {
|
|
|
507
461
|
if (this.type_validator.length < splice_len) {
|
|
508
462
|
ERROR(Errors.Fail, 'type_validator.length');
|
|
509
463
|
}
|
|
510
|
-
if (this.type_validator[this.type_validator.length - 1] != ValueType.
|
|
464
|
+
if (this.type_validator[this.type_validator.length - 1] != ValueType.TYPE_BOOL) {
|
|
511
465
|
ERROR(Errors.Fail, 'type_validator check');
|
|
512
466
|
}
|
|
513
467
|
break;
|
|
@@ -516,10 +470,10 @@ export class GuardInputMaker {
|
|
|
516
470
|
if (this.type_validator.length < splice_len) {
|
|
517
471
|
ERROR(Errors.Fail, 'type_validator.length');
|
|
518
472
|
}
|
|
519
|
-
if (this.type_validator[this.type_validator.length - 1] != ValueType.
|
|
473
|
+
if (this.type_validator[this.type_validator.length - 1] != ValueType.TYPE_BOOL) {
|
|
520
474
|
ERROR(Errors.Fail, 'type_validator check');
|
|
521
475
|
}
|
|
522
|
-
if (this.type_validator[this.type_validator.length - 2] != ValueType.
|
|
476
|
+
if (this.type_validator[this.type_validator.length - 2] != ValueType.TYPE_BOOL) {
|
|
523
477
|
ERROR(Errors.Fail, 'type_validator check');
|
|
524
478
|
}
|
|
525
479
|
break;
|
|
@@ -528,31 +482,60 @@ export class GuardInputMaker {
|
|
|
528
482
|
}
|
|
529
483
|
this.data.push(Bcs.getInstance().ser_u8(type)); // TYPE
|
|
530
484
|
this.type_validator.splice(this.type_validator.length - splice_len); // delete type stack
|
|
531
|
-
this.type_validator.push(ValueType.
|
|
485
|
+
this.type_validator.push(ValueType.TYPE_BOOL); // add bool to type stack
|
|
486
|
+
return this;
|
|
532
487
|
}
|
|
533
|
-
|
|
488
|
+
build(bNot = false) {
|
|
534
489
|
//console.log(this.type_validator);
|
|
535
490
|
//this.data.forEach((value:Uint8Array) => console.log(value));
|
|
536
|
-
if (this.type_validator.length != 1 || this.type_validator[0] != ValueType.
|
|
537
|
-
console.log(this.type_validator);
|
|
491
|
+
if (this.type_validator.length != 1 || this.type_validator[0] != ValueType.TYPE_BOOL) {
|
|
538
492
|
ERROR(Errors.Fail, 'type_validator check');
|
|
539
493
|
} // ERROR
|
|
540
494
|
if (bNot) {
|
|
541
495
|
this.add_logic(OperatorType.TYPE_LOGIC_NOT);
|
|
542
496
|
}
|
|
543
|
-
|
|
497
|
+
this.data.push(concatenate(Uint8Array, ...this.data));
|
|
498
|
+
this.data.splice(0, this.data.length - 1);
|
|
499
|
+
return this;
|
|
500
|
+
}
|
|
501
|
+
IsReady() {
|
|
502
|
+
return this.type_validator.length == 1 && this.type_validator[0] == ValueType.TYPE_BOOL && this.data.length == 1;
|
|
503
|
+
}
|
|
504
|
+
combine(otherBuilt, bAnd = true, bCombinVariable = false) {
|
|
505
|
+
if (!otherBuilt.IsReady() || !this.IsReady()) {
|
|
506
|
+
ERROR(Errors.Fail, 'both should built yet');
|
|
507
|
+
}
|
|
508
|
+
;
|
|
509
|
+
let maker = new GuardMaker();
|
|
510
|
+
this.variable.forEach((v, k) => {
|
|
511
|
+
maker.variable.set(k, { type: v.type, value: v.value, witness: v.witness });
|
|
512
|
+
});
|
|
513
|
+
otherBuilt.variable.forEach((v, k) => {
|
|
514
|
+
if (maker.variable.has(k) && !bCombinVariable) {
|
|
515
|
+
ERROR(Errors.Fail, 'variable identifier exist');
|
|
516
|
+
}
|
|
517
|
+
maker.variable.set(k, { type: v.type, value: v.value, witness: v.witness });
|
|
518
|
+
});
|
|
519
|
+
let op = bAnd ? OperatorType.TYPE_LOGIC_AND : OperatorType.TYPE_LOGIC_OR;
|
|
520
|
+
maker.data.push(concatenate(Uint8Array, ...this.data, ...otherBuilt.data, Bcs.getInstance().ser_u8(op)));
|
|
521
|
+
this.data.splice(0, this.data.length - 1);
|
|
522
|
+
maker.type_validator = this.type_validator;
|
|
523
|
+
return maker;
|
|
544
524
|
}
|
|
545
|
-
|
|
525
|
+
get_variable() { return this.variable; }
|
|
526
|
+
get_input() { return this.data; }
|
|
527
|
+
static input_combine(input1, input2, bAnd = true) {
|
|
546
528
|
let op = bAnd ? OperatorType.TYPE_LOGIC_AND : OperatorType.TYPE_LOGIC_OR;
|
|
547
529
|
return concatenate(Uint8Array, input1, input2, Bcs.getInstance().ser_u8(op));
|
|
548
530
|
}
|
|
549
|
-
static
|
|
531
|
+
static input_not(input) {
|
|
550
532
|
return concatenate(Uint8Array, input, Bcs.getInstance().ser_u8(OperatorType.TYPE_LOGIC_NOT));
|
|
551
533
|
}
|
|
552
534
|
static match_u128(type) {
|
|
553
|
-
if (type == ValueType.
|
|
554
|
-
type == ValueType.
|
|
555
|
-
type == ValueType.
|
|
535
|
+
if (type == ValueType.TYPE_U8 ||
|
|
536
|
+
type == ValueType.TYPE_U64 ||
|
|
537
|
+
type == ValueType.TYPE_U128 ||
|
|
538
|
+
type == ValueType.TYPE_U256) {
|
|
556
539
|
return true;
|
|
557
540
|
}
|
|
558
541
|
return false;
|