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