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/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, creation) {
9
- if (!IsValidDesription(creation.description)) {
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
- if (creation.input.length == 0 || creation.input.length > Guard.MAX_INPUT_LENGTH) {
13
- ERROR(Errors.InvalidParam, 'creation.input');
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
- creation?.variables?.forEach((v, k) => {
17
- if (!GuardVariableMaker.IsValidIndentifier(k))
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, 'creation.variables');
28
+ ERROR(Errors.InvalidParam, 'launch variables');
26
29
  }
27
30
  let txb = protocol.CurrentSession();
28
- let input = new Uint8Array(creation.input); // copy new uint8array to reserve!
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(creation.description, BCS.STRING), txb.pure([].slice.call(input.reverse()))],
35
+ arguments: [txb.pure(description, BCS.STRING), txb.pure([].slice.call(input.reverse()))],
33
36
  });
34
- creation?.variables?.forEach((v, k) => {
35
- 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) {
36
39
  if (!v.witness) {
37
- ERROR(Errors.InvalidParam, 'creation.variables.type');
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, 'creation.variables.type');
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.TYPE_STATIC_address],
74
- [MODULES.permission, 'is_admin', 2, [ValueType.TYPE_STATIC_address], ValueType.TYPE_STATIC_bool],
75
- [MODULES.permission, 'has_rights', 3, [ValueType.TYPE_STATIC_address, ValueType.TYPE_STATIC_u64], ValueType.TYPE_STATIC_bool],
76
- [MODULES.permission, 'contains_address', 4, [ValueType.TYPE_STATIC_address], ValueType.TYPE_STATIC_bool],
77
- [MODULES.permission, 'contains_index', 5, [ValueType.TYPE_STATIC_address, ValueType.TYPE_STATIC_u64], ValueType.TYPE_STATIC_bool],
78
- [MODULES.permission, 'contains_guard', 6, [ValueType.TYPE_STATIC_address, ValueType.TYPE_STATIC_u64], ValueType.TYPE_STATIC_bool],
79
- [MODULES.permission, 'contains_guard', 7, [ValueType.TYPE_STATIC_address, ValueType.TYPE_STATIC_u64], ValueType.TYPE_STATIC_address],
80
- [MODULES.permission, 'entity_count', 8, [], ValueType.TYPE_STATIC_u64],
81
- [MODULES.permission, 'admin_count', 9, [], ValueType.TYPE_STATIC_u64],
82
- [MODULES.repository, 'permission', 1, [], ValueType.TYPE_STATIC_address],
83
- [MODULES.repository, 'policy_contains', 2, [ValueType.TYPE_STATIC_vec_u8], ValueType.TYPE_STATIC_bool],
84
- [MODULES.repository, 'policy_has_permission_index', 3, [ValueType.TYPE_STATIC_vec_u8], ValueType.TYPE_STATIC_bool],
85
- [MODULES.repository, 'policy_permission_index', 4, [ValueType.TYPE_STATIC_vec_u8], ValueType.TYPE_STATIC_u64],
86
- [MODULES.repository, 'policy_value_type', 5, [ValueType.TYPE_STATIC_vec_u8], ValueType.TYPE_STATIC_u8],
87
- [MODULES.repository, 'contains_id', 6, [ValueType.TYPE_STATIC_address], ValueType.TYPE_STATIC_bool],
88
- [MODULES.repository, 'contains_value', 7, [ValueType.TYPE_STATIC_address, ValueType.TYPE_STATIC_vec_u8], ValueType.TYPE_STATIC_bool],
89
- [MODULES.repository, 'value_without_type', 8, [ValueType.TYPE_STATIC_address, ValueType.TYPE_STATIC_vec_u8], ValueType.TYPE_STATIC_vec_u8],
90
- [MODULES.repository, 'value', 9, [ValueType.TYPE_STATIC_address, ValueType.TYPE_STATIC_vec_u8], ValueType.TYPE_STATIC_vec_u8],
91
- [MODULES.repository, 'type', 10, [], ValueType.TYPE_STATIC_u8],
92
- [MODULES.repository, 'policy_mode', 11, [], ValueType.TYPE_STATIC_u8],
93
- [MODULES.repository, 'reference_count', 12, [], ValueType.TYPE_STATIC_u64],
94
- [MODULES.repository, 'has_reference', 13, [ValueType.TYPE_STATIC_address], ValueType.TYPE_STATIC_bool],
95
- [MODULES.machine, 'permission', 1, [], ValueType.TYPE_STATIC_address],
96
- [MODULES.machine, 'has_paused', 2, [], ValueType.TYPE_STATIC_bool],
97
- [MODULES.machine, 'has_published', 3, [], ValueType.TYPE_STATIC_bool],
98
- [MODULES.machine, 'consensus_repositories_contains', 5, [ValueType.TYPE_STATIC_address], ValueType.TYPE_STATIC_bool],
99
- [MODULES.machine, 'has_endpoint', 6, [], ValueType.TYPE_STATIC_bool],
100
- [MODULES.machine, 'endpoint', 7, [], ValueType.TYPE_STATIC_vec_u8],
101
- [MODULES.progress, 'machine', 1, [], ValueType.TYPE_STATIC_address],
102
- [MODULES.progress, 'current', 2, [], ValueType.TYPE_STATIC_vec_u8],
103
- [MODULES.progress, 'has_parent', 3, [], ValueType.TYPE_STATIC_bool],
104
- [MODULES.progress, 'parent', 4, [], ValueType.TYPE_STATIC_address],
105
- [MODULES.progress, 'has_task', 5, [], ValueType.TYPE_STATIC_bool],
106
- [MODULES.progress, 'task', 6, [], ValueType.TYPE_STATIC_address],
107
- [MODULES.progress, 'has_namedOperator', 7, [ValueType.TYPE_STATIC_vec_u8], ValueType.TYPE_STATIC_bool],
108
- [MODULES.progress, 'namedOperator_contains', 8, [ValueType.TYPE_STATIC_vec_u8, ValueType.TYPE_STATIC_address], ValueType.TYPE_STATIC_bool],
109
- [MODULES.progress, 'has_context_repository', 9, [], ValueType.TYPE_STATIC_bool],
110
- [MODULES.progress, 'context_repository', 10, [], ValueType.TYPE_STATIC_address],
111
- [MODULES.demand, 'permission', 1, [], ValueType.TYPE_STATIC_address],
112
- [MODULES.demand, 'has_time_expire', 2, [], ValueType.TYPE_STATIC_bool],
113
- [MODULES.demand, 'time_expire', 3, [], ValueType.TYPE_STATIC_u64],
114
- [MODULES.demand, 'earnest_count', 4, [], ValueType.TYPE_STATIC_u64],
115
- [MODULES.demand, 'has_guard', 5, [], ValueType.TYPE_STATIC_bool],
116
- [MODULES.demand, 'guard', 6, [], ValueType.TYPE_STATIC_address],
117
- [MODULES.demand, 'has_yes', 7, [], ValueType.TYPE_STATIC_bool],
118
- [MODULES.demand, 'yes', 8, [], ValueType.TYPE_STATIC_address],
119
- [MODULES.demand, 'presenters_count', 9, [], ValueType.TYPE_STATIC_u64],
120
- [MODULES.demand, 'has_presenter', 10, [ValueType.TYPE_STATIC_address], ValueType.TYPE_STATIC_bool],
121
- [MODULES.demand, 'persenter', 11, [ValueType.TYPE_STATIC_address], ValueType.TYPE_STATIC_address],
122
- [MODULES.order, 'amount', 1, [], ValueType.TYPE_STATIC_u64],
123
- [MODULES.order, 'payer', 2, [], ValueType.TYPE_STATIC_address],
124
- [MODULES.order, 'service', 3, [], ValueType.TYPE_STATIC_address],
125
- [MODULES.order, 'has_progress', 4, [], ValueType.TYPE_STATIC_bool],
126
- [MODULES.order, 'progress', 5, [], ValueType.TYPE_STATIC_address],
127
- [MODULES.order, 'has_requred_info', 6, [], ValueType.TYPE_STATIC_bool],
128
- [MODULES.order, 'requred_info_service_pubkey', 7, [], ValueType.TYPE_STATIC_vec_u8],
129
- [MODULES.order, 'requred_info_customer_pubkey', 8, [], ValueType.TYPE_STATIC_vec_u8],
130
- [MODULES.order, 'requred_info_info', 9, [], ValueType.TYPE_STATIC_vec_vec_u8],
131
- [MODULES.order, 'has_discount', 10, [], ValueType.TYPE_STATIC_bool],
132
- [MODULES.order, 'discount', 11, [], ValueType.TYPE_STATIC_address],
133
- [MODULES.order, 'balance', 12, [], ValueType.TYPE_STATIC_u64],
134
- [MODULES.order, 'bRefunded', 13, [], ValueType.TYPE_STATIC_u8],
135
- [MODULES.order, 'bWithdrawed', 14, [], ValueType.TYPE_STATIC_u8],
136
- [MODULES.service, 'permission', 1, [], ValueType.TYPE_STATIC_address],
137
- [MODULES.service, 'payee', 2, [], ValueType.TYPE_STATIC_address],
138
- [MODULES.service, 'has_buy_guard', 3, [], ValueType.TYPE_STATIC_bool],
139
- [MODULES.service, 'buy_guard', 4, [], ValueType.TYPE_STATIC_address],
140
- [MODULES.service, 'repository_contains', 5, [ValueType.TYPE_STATIC_address], ValueType.TYPE_STATIC_bool],
141
- [MODULES.service, 'has_withdraw_guard', 6, [ValueType.TYPE_STATIC_address], ValueType.TYPE_STATIC_bool],
142
- [MODULES.service, 'withdraw_guard_percent', 7, [ValueType.TYPE_STATIC_address], ValueType.TYPE_STATIC_u64],
143
- [MODULES.service, 'has_refund_guard', 8, [ValueType.TYPE_STATIC_address], ValueType.TYPE_STATIC_bool],
144
- [MODULES.service, 'refund_guard_percent', 9, [ValueType.TYPE_STATIC_address], ValueType.TYPE_STATIC_u64],
145
- [MODULES.service, 'has_sale', 10, [ValueType.TYPE_STATIC_vec_u8], ValueType.TYPE_STATIC_bool],
146
- [MODULES.service, 'sale_price', 11, [ValueType.TYPE_STATIC_vec_u8], ValueType.TYPE_STATIC_u64],
147
- [MODULES.service, 'sale_stock', 12, [ValueType.TYPE_STATIC_vec_u8], ValueType.TYPE_STATIC_u64],
148
- [MODULES.service, 'has_machine', 13, [], ValueType.TYPE_STATIC_bool],
149
- [MODULES.service, 'machine', 14, [], ValueType.TYPE_STATIC_address],
150
- [MODULES.service, 'bPaused', 15, [], ValueType.TYPE_STATIC_bool],
151
- [MODULES.service, 'bPublished', 16, [], ValueType.TYPE_STATIC_bool],
152
- [MODULES.service, 'has_required', 17, [], ValueType.TYPE_STATIC_bool],
153
- [MODULES.service, 'requrired_pubkey', 18, [], ValueType.TYPE_STATIC_vec_u8],
154
- [MODULES.service, 'requrired_info', 19, [], ValueType.TYPE_STATIC_vec_vec_u8],
155
- [MODULES.reward, 'permission', 1, [], ValueType.TYPE_STATIC_address],
156
- [MODULES.reward, 'rewards_count_remain', 2, [], ValueType.TYPE_STATIC_u64],
157
- [MODULES.reward, 'rewards_count_supplied', 3, [], ValueType.TYPE_STATIC_u64],
158
- [MODULES.reward, 'guard_count', 4, [], ValueType.TYPE_STATIC_u64],
159
- [MODULES.reward, 'has_guard', 5, [ValueType.TYPE_STATIC_address], ValueType.TYPE_STATIC_bool],
160
- [MODULES.reward, 'guard_portions', 6, [ValueType.TYPE_STATIC_address], ValueType.TYPE_STATIC_u64],
161
- [MODULES.reward, 'time_expire', 7, [], ValueType.TYPE_STATIC_u64],
162
- [MODULES.reward, 'has_claimed', 8, [ValueType.TYPE_STATIC_address], ValueType.TYPE_STATIC_bool],
163
- [MODULES.reward, 'claimed', 9, [ValueType.TYPE_STATIC_address], ValueType.TYPE_STATIC_u64],
164
- [MODULES.reward, 'has_claimed_count', 10, [], ValueType.TYPE_STATIC_u64],
165
- [MODULES.reward, 'is_sponsor', 11, [ValueType.TYPE_STATIC_address], ValueType.TYPE_STATIC_bool],
166
- [MODULES.reward, 'sponsor', 12, [ValueType.TYPE_STATIC_address], ValueType.TYPE_STATIC_u64],
167
- [MODULES.reward, 'sponsor_count', 13, [], ValueType.TYPE_STATIC_u64],
168
- [MODULES.reward, 'bAllowRepeatClaim', 14, [], ValueType.TYPE_STATIC_bool],
169
- [MODULES.vote, 'permission', 1, [], ValueType.TYPE_STATIC_address],
170
- [MODULES.vote, 'bOptions_locked_for_voting', 2, [], ValueType.TYPE_STATIC_bool],
171
- [MODULES.vote, 'bdeadline_locked', 3, [], ValueType.TYPE_STATIC_bool],
172
- [MODULES.vote, 'bLockedGuard', 4, [], ValueType.TYPE_STATIC_bool],
173
- [MODULES.vote, 'max_choice_count', 5, [], ValueType.TYPE_STATIC_u8],
174
- [MODULES.vote, 'deadline', 6, [], ValueType.TYPE_STATIC_u64],
175
- [MODULES.vote, 'has_reference', 7, [], ValueType.TYPE_STATIC_bool],
176
- [MODULES.vote, 'reference', 8, [], ValueType.TYPE_STATIC_address],
177
- [MODULES.vote, 'has_guard', 9, [ValueType.TYPE_STATIC_address], ValueType.TYPE_STATIC_bool],
178
- [MODULES.vote, 'guard', 10, [ValueType.TYPE_STATIC_address], ValueType.TYPE_STATIC_u64],
179
- [MODULES.vote, 'voted', 11, [ValueType.TYPE_STATIC_address], ValueType.TYPE_STATIC_bool],
180
- [MODULES.vote, 'voted_weight', 12, [ValueType.TYPE_STATIC_address], ValueType.TYPE_STATIC_u64],
181
- [MODULES.vote, 'has_agree', 13, [ValueType.TYPE_STATIC_vec_u8], ValueType.TYPE_STATIC_bool],
182
- [MODULES.vote, 'agree_has_object', 14, [ValueType.TYPE_STATIC_vec_u8], ValueType.TYPE_STATIC_bool],
183
- [MODULES.vote, 'agree_object', 15, [ValueType.TYPE_STATIC_vec_u8], ValueType.TYPE_STATIC_address],
184
- [MODULES.vote, 'agree_count', 16, [ValueType.TYPE_STATIC_vec_u8], ValueType.TYPE_STATIC_u64],
185
- [MODULES.vote, 'agree_votes', 17, [ValueType.TYPE_STATIC_vec_u8], ValueType.TYPE_STATIC_u64],
186
- [MODULES.vote, 'voted_count', 18, [], ValueType.TYPE_STATIC_u64],
187
- [MODULES.vote, 'top1_name_by_count', 19, [], ValueType.TYPE_STATIC_vec_u8],
188
- [MODULES.vote, 'top1_count', 20, [], ValueType.TYPE_STATIC_u64],
189
- [MODULES.vote, 'top1_name_by_votes', 21, [], ValueType.TYPE_STATIC_vec_u8],
190
- [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],
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, type) {
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 == 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, type, witness, value, bNeedSerialize = true) {
247
- if (!GuardVariableMaker.IsValidIndentifier(identifier))
248
- return false;
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
- return false;
253
- switch (type) {
254
- case OperatorType.TYPE_FUTURE_QUERY:
255
- case ContextType.TYPE_CONTEXT_FUTURE_ID:
256
- if (variables.has(identifier)) {
257
- let v = variables.get(identifier);
258
- if (bNeedSerialize) {
259
- v.value = value ? Bcs.getInstance().ser_address(value) : undefined;
260
- v.witness = witness ? Bcs.getInstance().ser_address(witness) : undefined;
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 (!GuardVariableMaker.IsValidIndentifier(identifier))
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 ContextType.TYPE_CONTEXT_bool:
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 true;
291
- case ContextType.TYPE_CONTEXT_address:
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 true;
296
- case ContextType.TYPE_CONTEXT_u64:
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 true;
300
- case ContextType.TYPE_CONTEXT_u8:
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 true;
304
- case ContextType.TYPE_CONTEXT_vec_u8:
305
- bNeedSerialize ? variables.set(identifier, { type: type, value: Bcs.getInstance().ser_string(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) }) :
306
277
  variables.set(identifier, { type: type, value: value });
307
- return true;
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 GuardInputMaker {
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, variable) {
311
+ add_param(type, param) {
318
312
  switch (type) {
319
- case ValueType.TYPE_STATIC_address:
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.TYPE_STATIC_bool:
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.TYPE_STATIC_u8:
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.TYPE_STATIC_u64:
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.TYPE_STATIC_vec_u8:
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.TYPE_CONTEXT_SIGNER:
349
+ case ContextType.TYPE_SIGNER:
356
350
  this.data.push(Bcs.getInstance().ser_u8(type));
357
- this.type_validator.push(ValueType.TYPE_STATIC_address);
351
+ this.type_validator.push(ValueType.TYPE_ADDRESS);
358
352
  break;
359
- case ContextType.TYPE_CONTEXT_CLOCK:
353
+ case ContextType.TYPE_CLOCK:
360
354
  this.data.push(Bcs.getInstance().ser_u8(type));
361
- this.type_validator.push(ValueType.TYPE_STATIC_u64);
355
+ this.type_validator.push(ValueType.TYPE_U64);
362
356
  break;
363
- case ContextType.TYPE_CONTEXT_bool:
364
- case ContextType.TYPE_CONTEXT_u8:
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
- var v = variable.get(param);
376
- if (v?.type == type) {
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
- ERROR(Errors.InvalidParam, 'variable');
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 query_index(module, query_name) {
407
- for (let i = 0; i < Guard.QUERIES.length; i++) {
408
- if (Guard.QUERIES[i][0] == module && Guard.QUERIES[i][1] == query_name) {
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 (!GuardVariableMaker.IsValidIndentifier(object_address_from)) {
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(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));
466
412
  this.data.push(Bcs.getInstance().ser_address(object_address_from)); // object address
467
413
  }
468
414
  else {
469
- this.data.push(Bcs.getInstance().ser_u8(OperatorType.TYPE_QUERY_FROM_CONTEXT)); // TYPE
470
- 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
+ }
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
- // console.log(this.type_validator)
429
+ return this;
476
430
  }
477
431
  add_logic(type) {
478
432
  let splice_len = 2;
479
433
  switch (type) {
480
- case OperatorType.TYPE_LOGIC_OPERATOR_U128_GREATER:
481
- case OperatorType.TYPE_LOGIC_OPERATOR_U128_GREATER_EQUAL:
482
- case OperatorType.TYPE_LOGIC_OPERATOR_U128_LESSER:
483
- case OperatorType.TYPE_LOGIC_OPERATOR_U128_LESSER_EQUAL:
484
- case OperatorType.TYPE_LOGIC_OPERATOR_U128_EQUAL:
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 (!GuardInputMaker.match_u128(this.type_validator[this.type_validator.length - 1])) {
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 (!GuardInputMaker.match_u128(this.type_validator[this.type_validator.length - 2])) {
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.TYPE_LOGIC_OPERATOR_EQUAL:
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.TYPE_LOGIC_OPERATOR_HAS_SUBSTRING:
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.TYPE_STATIC_bool) {
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.TYPE_STATIC_bool) {
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.TYPE_STATIC_bool) {
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.TYPE_STATIC_bool); // add bool to type stack
485
+ this.type_validator.push(ValueType.TYPE_BOOL); // add bool to type stack
486
+ return this;
532
487
  }
533
- make(bNot = false) {
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.TYPE_STATIC_bool) {
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
- return concatenate(Uint8Array, ...this.data);
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
- static combine(input1, input2, bAnd = true) {
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 not(input) {
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.TYPE_STATIC_u8 ||
554
- type == ValueType.TYPE_STATIC_u64 ||
555
- 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) {
556
539
  return true;
557
540
  }
558
541
  return false;