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