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