wowok 1.0.3 → 1.0.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/LICENSE +201 -0
- package/README.md +17 -0
- package/dist/demand.js +91 -30
- package/dist/guard.js +79 -73
- package/dist/machine.js +130 -65
- package/dist/passport.js +14 -5
- package/dist/permission.js +111 -49
- package/dist/progress.js +74 -30
- package/dist/protocol.js +84 -52
- package/dist/repository.js +138 -50
- package/dist/reward.js +134 -28
- package/dist/service.js +457 -161
- package/dist/util.js +16 -1
- package/dist/vote.js +134 -56
- package/package.json +4 -5
- package/src/address.graphql +0 -0
- package/src/demand.ts +96 -52
- package/src/guard.ts +88 -82
- package/src/machine.ts +126 -81
- package/src/object.graphql +30 -0
- package/src/passport.ts +7 -7
- package/src/permission.ts +110 -59
- package/src/progress.ts +89 -58
- package/src/protocol.ts +80 -33
- package/src/repository.ts +146 -70
- package/src/reward.ts +131 -45
- package/src/service.ts +433 -209
- package/src/util.ts +16 -1
- package/src/vote.ts +141 -74
package/src/demand.ts
CHANGED
|
@@ -1,173 +1,217 @@
|
|
|
1
|
-
import { SuiClient, getFullnodeUrl, SuiObjectResponse } from '@mysten/sui.js/client';
|
|
2
1
|
import { TransactionBlock, Inputs, type TransactionResult } from '@mysten/sui.js/transactions';
|
|
3
2
|
import { BCS } from '@mysten/bcs';
|
|
4
|
-
import { CLOCK_OBJECT, FnCallType, PROTOCOL,
|
|
5
|
-
|
|
6
|
-
import { verify, PassportObject} from './passport'
|
|
7
|
-
import { PermissionIndex, PermissionObject } from './permission'
|
|
8
|
-
import { ServiceObject } from './service'
|
|
9
|
-
|
|
10
|
-
export type DemandAddress = TransactionResult;
|
|
11
|
-
export type DemandObject = TransactionResult;
|
|
3
|
+
import { CLOCK_OBJECT, FnCallType, IsValidDesription, PROTOCOL, PassportObject, PermissionObject, IsValidArgType, GuardObject,
|
|
4
|
+
DemandAddress, DemandObject, TXB_OBJECT, IsValidUint, IsValidAddress, TxbObject, IsValidObjects, ServiceObject } from './protocol';
|
|
12
5
|
|
|
13
6
|
export const MAX_EARNEST_COUNT = 200;
|
|
14
7
|
export const MAX_PRESENTERS_COUNT = 200;
|
|
15
8
|
|
|
16
|
-
|
|
9
|
+
|
|
10
|
+
export function demand(earnest_type:string, txb:TransactionBlock, permission:PermissionObject, description:string,
|
|
11
|
+
earnest:TransactionResult, passport?:PassportObject) : DemandObject | boolean {
|
|
12
|
+
if (!IsValidObjects([permission, earnest])) return false;
|
|
13
|
+
if (!IsValidDesription(description) || !IsValidArgType(earnest_type)) return false;
|
|
14
|
+
|
|
17
15
|
if (passport) {
|
|
18
16
|
return txb.moveCall({
|
|
19
17
|
target:PROTOCOL.DemandFn('new_with_passport') as FnCallType,
|
|
20
|
-
arguments:[passport, txb.pure(
|
|
18
|
+
arguments:[passport, txb.pure(description), earnest, TXB_OBJECT(txb, permission)],
|
|
21
19
|
typeArguments:[earnest_type],
|
|
22
20
|
})
|
|
23
21
|
} else {
|
|
24
22
|
return txb.moveCall({
|
|
25
23
|
target:PROTOCOL.DemandFn('new') as FnCallType,
|
|
26
|
-
arguments:[txb.pure(
|
|
24
|
+
arguments:[txb.pure(description), earnest, TXB_OBJECT(txb, permission)],
|
|
27
25
|
typeArguments:[earnest_type],
|
|
28
26
|
})
|
|
29
27
|
}
|
|
30
28
|
}
|
|
31
29
|
|
|
32
|
-
export function launch(earnest_type:string, txb:TransactionBlock, demand:DemandObject) : DemandAddress {
|
|
30
|
+
export function launch(earnest_type:string, txb:TransactionBlock, demand:DemandObject) : DemandAddress | boolean {
|
|
31
|
+
if (!IsValidObjects([demand])) return false;
|
|
32
|
+
if (!IsValidArgType(earnest_type)) return false;
|
|
33
33
|
return txb.moveCall({
|
|
34
34
|
target:PROTOCOL.DemandFn('create') as FnCallType,
|
|
35
|
-
arguments:[demand],
|
|
35
|
+
arguments:[TXB_OBJECT(txb, demand)],
|
|
36
36
|
typeArguments:[earnest_type],
|
|
37
37
|
})
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
export function destroy(earnest_type:string, txb:TransactionBlock, demand:DemandObject) {
|
|
41
|
-
return
|
|
40
|
+
export function destroy(earnest_type:string, txb:TransactionBlock, demand:DemandObject) : boolean {
|
|
41
|
+
if (!IsValidObjects([demand])) return false;
|
|
42
|
+
if (!IsValidArgType(earnest_type)) return false;
|
|
43
|
+
txb.moveCall({
|
|
42
44
|
target:PROTOCOL.DemandFn('destroy') as FnCallType,
|
|
43
|
-
arguments: [demand],
|
|
45
|
+
arguments: [TXB_OBJECT(txb, demand)],
|
|
44
46
|
typeArguments:[earnest_type]
|
|
45
|
-
})
|
|
47
|
+
})
|
|
48
|
+
return true
|
|
46
49
|
}
|
|
47
|
-
export function demand_refund(earnest_type:string, txb:TransactionBlock, demand:DemandObject, permission:
|
|
50
|
+
export function demand_refund(earnest_type:string, txb:TransactionBlock, demand:DemandObject, permission:PermissionObject,
|
|
51
|
+
passport?:PassportObject) : boolean {
|
|
52
|
+
if (!IsValidObjects([demand, permission])) return false;
|
|
53
|
+
if (!IsValidArgType(earnest_type)) return false;
|
|
54
|
+
|
|
48
55
|
if (passport) {
|
|
49
56
|
txb.moveCall({
|
|
50
57
|
target:PROTOCOL.DemandFn('refund_with_passport') as FnCallType,
|
|
51
|
-
arguments:[passport, demand, txb.object(CLOCK_OBJECT), permission],
|
|
58
|
+
arguments:[passport, TXB_OBJECT(txb, demand), txb.object(CLOCK_OBJECT), TXB_OBJECT(txb, permission)],
|
|
52
59
|
typeArguments:[earnest_type],
|
|
53
60
|
})
|
|
54
61
|
} else {
|
|
55
62
|
txb.moveCall({
|
|
56
63
|
target:PROTOCOL.DemandFn('refund') as FnCallType,
|
|
57
|
-
arguments:[demand, txb.object(CLOCK_OBJECT), permission],
|
|
64
|
+
arguments:[TXB_OBJECT(txb, demand), txb.object(CLOCK_OBJECT), TXB_OBJECT(txb, permission)],
|
|
58
65
|
typeArguments:[earnest_type],
|
|
59
66
|
})
|
|
60
67
|
}
|
|
68
|
+
return true
|
|
61
69
|
}
|
|
62
70
|
|
|
63
|
-
export function demand_expand_time(earnest_type:string, txb:TransactionBlock, demand:DemandObject, permission:
|
|
64
|
-
minutes_duration:number, passport?:PassportObject) {
|
|
71
|
+
export function demand_expand_time(earnest_type:string, txb:TransactionBlock, demand:DemandObject, permission:PermissionObject,
|
|
72
|
+
minutes_duration:number, passport?:PassportObject) : boolean {
|
|
73
|
+
if (!IsValidObjects([demand, permission])) return false;
|
|
74
|
+
if (!IsValidArgType(earnest_type)) return false;
|
|
75
|
+
if (!IsValidUint(minutes_duration)) return false;
|
|
76
|
+
|
|
65
77
|
if (passport) {
|
|
66
|
-
|
|
78
|
+
txb.moveCall({
|
|
67
79
|
target:PROTOCOL.DemandFn('time_expand_with_passport') as FnCallType,
|
|
68
|
-
arguments:[passport, demand, txb.pure(minutes_duration, BCS.U64), txb.object(CLOCK_OBJECT), permission],
|
|
80
|
+
arguments:[passport, TXB_OBJECT(txb, demand), txb.pure(minutes_duration, BCS.U64), txb.object(CLOCK_OBJECT), TXB_OBJECT(txb, permission)],
|
|
69
81
|
typeArguments:[earnest_type],
|
|
70
82
|
})
|
|
71
83
|
} else {
|
|
72
|
-
|
|
84
|
+
txb.moveCall({
|
|
73
85
|
target:PROTOCOL.DemandFn('time_expand') as FnCallType,
|
|
74
|
-
arguments:[demand, txb.pure(minutes_duration, BCS.U64), txb.object(CLOCK_OBJECT), permission],
|
|
86
|
+
arguments:[TXB_OBJECT(txb, demand), txb.pure(minutes_duration, BCS.U64), txb.object(CLOCK_OBJECT), TXB_OBJECT(txb, permission)],
|
|
75
87
|
typeArguments:[earnest_type],
|
|
76
88
|
})
|
|
77
89
|
}
|
|
90
|
+
return true
|
|
78
91
|
}
|
|
79
92
|
|
|
80
|
-
export function demand_set_guard(earnest_type:string, txb:TransactionBlock, demand:DemandObject, permission:
|
|
93
|
+
export function demand_set_guard(earnest_type:string, txb:TransactionBlock, demand:DemandObject, permission:PermissionObject,
|
|
94
|
+
guard?:GuardObject, passport?:PassportObject) : boolean {
|
|
95
|
+
if (!IsValidObjects([demand, permission])) return false;
|
|
96
|
+
if (!IsValidArgType(earnest_type)) return false;
|
|
97
|
+
|
|
81
98
|
if (passport) {
|
|
82
99
|
if (guard) {
|
|
83
|
-
|
|
100
|
+
txb.moveCall({
|
|
84
101
|
target:PROTOCOL.DemandFn('guard_set_with_passport') as FnCallType,
|
|
85
|
-
arguments:[passport, demand, guard, permission],
|
|
102
|
+
arguments:[passport, TXB_OBJECT(txb, demand), TXB_OBJECT(txb, guard), TXB_OBJECT(txb, permission)],
|
|
86
103
|
typeArguments:[earnest_type],
|
|
87
104
|
})
|
|
88
105
|
} else {
|
|
89
|
-
|
|
106
|
+
txb.moveCall({
|
|
90
107
|
target:PROTOCOL.DemandFn('guard_none_with_passport') as FnCallType,
|
|
91
|
-
arguments:[passport, demand, permission],
|
|
108
|
+
arguments:[passport, TXB_OBJECT(txb, demand), TXB_OBJECT(txb, permission)],
|
|
92
109
|
typeArguments:[earnest_type],
|
|
93
110
|
})
|
|
94
111
|
}
|
|
95
112
|
} else {
|
|
96
113
|
if (guard) {
|
|
97
|
-
|
|
114
|
+
txb.moveCall({
|
|
98
115
|
target:PROTOCOL.DemandFn('guard_set') as FnCallType,
|
|
99
|
-
arguments:[demand, guard, permission],
|
|
116
|
+
arguments:[TXB_OBJECT(txb, demand), TXB_OBJECT(txb, guard), TXB_OBJECT(txb, permission)],
|
|
100
117
|
typeArguments:[earnest_type],
|
|
101
118
|
})
|
|
102
119
|
} else {
|
|
103
|
-
|
|
120
|
+
txb.moveCall({
|
|
104
121
|
target:PROTOCOL.DemandFn('guard_none') as FnCallType,
|
|
105
|
-
arguments:[demand, permission],
|
|
122
|
+
arguments:[TXB_OBJECT(txb, demand), TXB_OBJECT(txb, permission)],
|
|
106
123
|
typeArguments:[earnest_type],
|
|
107
124
|
})
|
|
108
125
|
}
|
|
109
126
|
}
|
|
127
|
+
return true
|
|
110
128
|
}
|
|
111
129
|
|
|
112
|
-
export function demand_set_description(earnest_type:string, txb:TransactionBlock, demand:DemandObject,
|
|
130
|
+
export function demand_set_description(earnest_type:string, txb:TransactionBlock, demand:DemandObject,
|
|
131
|
+
permission:PermissionObject, description:string, passport?:PassportObject) : boolean {
|
|
132
|
+
if (!IsValidObjects([demand, permission])) return false;
|
|
133
|
+
if (!IsValidArgType(earnest_type)) return false;
|
|
134
|
+
if (!IsValidDesription(description)) return false;
|
|
135
|
+
|
|
113
136
|
if (passport) {
|
|
114
137
|
txb.moveCall({
|
|
115
138
|
target:PROTOCOL.DemandFn('description_set_with_passport') as FnCallType,
|
|
116
|
-
arguments:[passport, demand, txb.pure(
|
|
139
|
+
arguments:[passport, TXB_OBJECT(txb, demand), txb.pure(description), TXB_OBJECT(txb, permission)],
|
|
117
140
|
typeArguments:[earnest_type],
|
|
118
141
|
})
|
|
119
142
|
} else {
|
|
120
143
|
txb.moveCall({
|
|
121
144
|
target:PROTOCOL.DemandFn('description_set') as FnCallType,
|
|
122
|
-
arguments:[demand, txb.pure(
|
|
145
|
+
arguments:[TXB_OBJECT(txb, demand), txb.pure(description), TXB_OBJECT(txb, permission)],
|
|
123
146
|
typeArguments:[earnest_type],
|
|
124
147
|
})
|
|
125
148
|
}
|
|
149
|
+
return true
|
|
126
150
|
}
|
|
127
151
|
|
|
128
|
-
export function demand_yes(earnest_type:string, txb:TransactionBlock, demand:DemandObject, permission:
|
|
152
|
+
export function demand_yes(earnest_type:string, txb:TransactionBlock, demand:DemandObject, permission:PermissionObject,
|
|
153
|
+
service:string, passport?:PassportObject) : boolean {
|
|
154
|
+
if (!IsValidObjects([demand, permission])) return false;
|
|
155
|
+
if (!IsValidArgType(earnest_type)) return false;
|
|
156
|
+
if (!IsValidAddress(service)) return false;
|
|
157
|
+
|
|
129
158
|
if (passport) {
|
|
130
159
|
txb.moveCall({
|
|
131
160
|
target:PROTOCOL.DemandFn('yes_with_passport') as FnCallType,
|
|
132
|
-
arguments:[passport, demand, txb.pure(service, BCS.ADDRESS), permission],
|
|
161
|
+
arguments:[passport, TXB_OBJECT(txb, demand), txb.pure(service, BCS.ADDRESS), TXB_OBJECT(txb, permission)],
|
|
133
162
|
typeArguments:[earnest_type],
|
|
134
163
|
})
|
|
135
164
|
} else {
|
|
136
165
|
txb.moveCall({
|
|
137
166
|
target:PROTOCOL.DemandFn('yes') as FnCallType,
|
|
138
|
-
arguments:[demand, txb.pure(service, BCS.ADDRESS), permission],
|
|
167
|
+
arguments:[TXB_OBJECT(txb, demand), txb.pure(service, BCS.ADDRESS), TXB_OBJECT(txb, permission)],
|
|
139
168
|
typeArguments:[earnest_type],
|
|
140
169
|
})
|
|
141
170
|
}
|
|
171
|
+
return true
|
|
142
172
|
}
|
|
143
173
|
|
|
144
|
-
export function deposit(earnest_type:string, txb:TransactionBlock, demand:DemandObject, earnest:
|
|
145
|
-
return
|
|
174
|
+
export function deposit(earnest_type:string, txb:TransactionBlock, demand:DemandObject, earnest:TxbObject) : boolean {
|
|
175
|
+
if (!IsValidObjects([demand, earnest])) return false;
|
|
176
|
+
if (!IsValidArgType(earnest_type)) return false;
|
|
177
|
+
txb.moveCall({
|
|
146
178
|
target:PROTOCOL.DemandFn('deposit') as FnCallType,
|
|
147
|
-
arguments:[demand, earnest],
|
|
179
|
+
arguments:[TXB_OBJECT(txb, demand), TXB_OBJECT(txb, earnest)],
|
|
148
180
|
typeArguments:[earnest_type],
|
|
149
181
|
})
|
|
182
|
+
return true
|
|
150
183
|
}
|
|
151
184
|
|
|
152
|
-
export function present(earnest_type:string, service_type:string, txb:TransactionBlock, demand:DemandObject,
|
|
185
|
+
export function present(earnest_type:string, service_type:string, txb:TransactionBlock, demand:DemandObject,
|
|
186
|
+
service:ServiceObject, tips:string, passport?:PassportObject) : boolean {
|
|
187
|
+
if (!IsValidObjects([demand, service])) return false;
|
|
188
|
+
if (!IsValidArgType(earnest_type)) return false;
|
|
189
|
+
if (!IsValidDesription(tips)) return false;
|
|
190
|
+
|
|
153
191
|
if (passport) {
|
|
154
|
-
|
|
192
|
+
txb.moveCall({
|
|
155
193
|
target:PROTOCOL.DemandFn('present_with_passport') as FnCallType,
|
|
156
|
-
arguments:[passport, demand, service, txb.pure(
|
|
194
|
+
arguments:[passport, TXB_OBJECT(txb, demand), TXB_OBJECT(txb, service), txb.pure(tips), ],
|
|
157
195
|
typeArguments:[earnest_type, service_type],
|
|
158
196
|
})
|
|
159
197
|
} else {
|
|
160
|
-
|
|
198
|
+
txb.moveCall({
|
|
161
199
|
target:PROTOCOL.DemandFn('present') as FnCallType,
|
|
162
|
-
arguments:[demand, service, txb.pure(
|
|
200
|
+
arguments:[TXB_OBJECT(txb, demand), TXB_OBJECT(txb, service), txb.pure(tips), ],
|
|
163
201
|
typeArguments:[earnest_type, service_type],
|
|
164
202
|
})
|
|
165
203
|
}
|
|
204
|
+
return true
|
|
166
205
|
}
|
|
167
|
-
export function change_permission(earnest_type:string, txb:TransactionBlock, demand:DemandObject,
|
|
206
|
+
export function change_permission(earnest_type:string, txb:TransactionBlock, demand:DemandObject,
|
|
207
|
+
old_permission:PermissionObject, new_permission:PermissionObject) : boolean {
|
|
208
|
+
if (!IsValidObjects([demand, old_permission, new_permission])) return false;
|
|
209
|
+
if (!IsValidArgType(earnest_type)) return false;
|
|
210
|
+
|
|
168
211
|
txb.moveCall({
|
|
169
212
|
target:PROTOCOL.DemandFn('permission_set') as FnCallType,
|
|
170
|
-
arguments: [demand, old_permission, new_permission],
|
|
213
|
+
arguments: [TXB_OBJECT(txb, demand), TXB_OBJECT(txb, old_permission), TXB_OBJECT(txb, new_permission)],
|
|
171
214
|
typeArguments:[earnest_type]
|
|
172
215
|
})
|
|
216
|
+
return true
|
|
173
217
|
}
|
package/src/guard.ts
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
import { SuiObjectResponse, SuiObjectDataOptions, SuiParsedData } from '@mysten/sui.js/client';
|
|
2
2
|
import { TransactionBlock, Inputs, type TransactionResult } from '@mysten/sui.js/transactions';
|
|
3
3
|
import { BCS, getSuiMoveConfig, toHEX, fromHEX, BcsReader } from '@mysten/bcs';
|
|
4
|
-
import { PROTOCOL, GuardAddress, FnCallType, Data_Type, MODULES,
|
|
4
|
+
import { PROTOCOL, GuardAddress, FnCallType, Data_Type, MODULES, ContextType, OBJECTS_TYPE,
|
|
5
|
+
OBJECTS_TYPE_PREFIX, Query_Param, IsValidDesription, ValueType, OperatorType} from './protocol';
|
|
5
6
|
import { concatenate, array_equal, ulebDecode, array_unique } from './util';
|
|
6
7
|
import { TransactionBlockDataBuilder } from '@mysten/sui.js/dist/cjs/builder/TransactionBlockData';
|
|
7
8
|
|
|
9
|
+
export const MAX_SENSE_COUNT = 16;
|
|
10
|
+
|
|
8
11
|
export enum Guard_Sense_Binder {
|
|
9
|
-
AND =
|
|
10
|
-
OR =
|
|
12
|
+
AND = 0, // first sense of guard always AND; for combining other guards
|
|
13
|
+
OR = 1,
|
|
11
14
|
}
|
|
12
15
|
|
|
13
16
|
export type Guard_Sense = {
|
|
@@ -21,15 +24,23 @@ export type Guard_Creation = {
|
|
|
21
24
|
senses: Guard_Sense[];
|
|
22
25
|
}
|
|
23
26
|
|
|
24
|
-
export function launch(txb:TransactionBlock, creation:Guard_Creation) : GuardAddress {
|
|
25
|
-
|
|
27
|
+
export function launch(txb:TransactionBlock, creation:Guard_Creation) : GuardAddress | boolean {
|
|
28
|
+
if (!IsValidDesription(creation.description)) return false;
|
|
29
|
+
if (!creation.senses) return false;
|
|
30
|
+
let bValid = true;
|
|
31
|
+
creation.senses.forEach((v) => {
|
|
32
|
+
if (v.input.length == 0) bValid = false;
|
|
33
|
+
})
|
|
34
|
+
if (!bValid) return false;
|
|
35
|
+
|
|
36
|
+
let guard = txb.moveCall({
|
|
26
37
|
target: PROTOCOL.GuardFn('new') as FnCallType,
|
|
27
|
-
arguments: [
|
|
38
|
+
arguments: [txb.pure(creation.description , BCS.STRING)],
|
|
28
39
|
});
|
|
29
|
-
creation
|
|
40
|
+
creation.senses.forEach((sense: Guard_Sense) => {
|
|
30
41
|
txb.moveCall({
|
|
31
42
|
target: PROTOCOL.GuardFn('sense_add') as FnCallType,
|
|
32
|
-
arguments:[
|
|
43
|
+
arguments:[guard, txb.pure([].slice.call(sense.input)),
|
|
33
44
|
txb.pure(sense.notAfterSense, BCS.BOOL),
|
|
34
45
|
txb.pure(sense.binder, BCS.U8),
|
|
35
46
|
]
|
|
@@ -41,18 +52,12 @@ export function launch(txb:TransactionBlock, creation:Guard_Creation) : GuardAdd
|
|
|
41
52
|
});
|
|
42
53
|
}
|
|
43
54
|
|
|
44
|
-
export function signer_guard(txb:TransactionBlock) {
|
|
55
|
+
export function signer_guard(txb:TransactionBlock) : boolean {
|
|
45
56
|
txb.moveCall({
|
|
46
57
|
target: PROTOCOL.GuardFn('signer_guard') as FnCallType,
|
|
47
58
|
arguments: []
|
|
48
59
|
}); // { kind: 'Result', index: 0 }, ref to address could used by PTB
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
export function query_description(txb:TransactionBlock, guard:GuardObject) {
|
|
52
|
-
txb.moveCall({
|
|
53
|
-
target: PROTOCOL.GuardFn('description') as FnCallType,
|
|
54
|
-
arguments:[guard]
|
|
55
|
-
})
|
|
60
|
+
return true
|
|
56
61
|
}
|
|
57
62
|
|
|
58
63
|
export type Sense_Cmd_Type = {
|
|
@@ -63,23 +68,23 @@ export type Sense_Cmd_Type = {
|
|
|
63
68
|
result:Data_Type
|
|
64
69
|
};
|
|
65
70
|
|
|
66
|
-
export const Sense_Cmd:any = [
|
|
67
|
-
[MODULES.permission, 'is_admin', 2, [
|
|
68
|
-
[MODULES.permission, 'has_rights', 3, [
|
|
69
|
-
[MODULES.permission, 'contains_address', 4, [
|
|
70
|
-
[MODULES.permission, 'contains_index', 5, [
|
|
71
|
-
[MODULES.permission, 'contains_guard', 6, [
|
|
72
|
-
[MODULES.repository, 'permission', 1, [],
|
|
73
|
-
[MODULES.repository, 'policy_contains', 2, [
|
|
74
|
-
[MODULES.repository, 'policy_has_permission_index', 3, [
|
|
75
|
-
[MODULES.repository, 'policy_permission_index', 4, [
|
|
76
|
-
[MODULES.repository, 'policy_value_type', 5, [
|
|
77
|
-
[MODULES.repository, 'contains_id', 6, [
|
|
78
|
-
[MODULES.repository, 'contains_value', 7, [
|
|
79
|
-
[MODULES.repository, 'value_without_type', 8, [
|
|
80
|
-
[MODULES.repository, 'value', 9, [
|
|
81
|
-
[MODULES.repository, 'type', 10, [],
|
|
82
|
-
[MODULES.repository, 'policy_mode', 11, [],
|
|
71
|
+
export const Sense_Cmd:any = [ [MODULES.permission, 'creator', 1, [], ValueType.TYPE_STATIC_address],
|
|
72
|
+
[MODULES.permission, 'is_admin', 2, [ValueType.TYPE_STATIC_address], ValueType.TYPE_STATIC_bool],
|
|
73
|
+
[MODULES.permission, 'has_rights', 3, [ValueType.TYPE_STATIC_address, ValueType.TYPE_STATIC_u64], ValueType.TYPE_STATIC_bool],
|
|
74
|
+
[MODULES.permission, 'contains_address', 4, [ValueType.TYPE_STATIC_address], ValueType.TYPE_STATIC_bool],
|
|
75
|
+
[MODULES.permission, 'contains_index', 5, [ValueType.TYPE_STATIC_address, ValueType.TYPE_STATIC_u64], ValueType.TYPE_STATIC_bool],
|
|
76
|
+
[MODULES.permission, 'contains_guard', 6, [ValueType.TYPE_STATIC_address, ValueType.TYPE_STATIC_u64], ValueType.TYPE_STATIC_bool],
|
|
77
|
+
[MODULES.repository, 'permission', 1, [], ValueType.TYPE_STATIC_address],
|
|
78
|
+
[MODULES.repository, 'policy_contains', 2, [ValueType.TYPE_STATIC_vec_u8], ValueType.TYPE_STATIC_bool],
|
|
79
|
+
[MODULES.repository, 'policy_has_permission_index', 3, [ValueType.TYPE_STATIC_vec_u8], ValueType.TYPE_STATIC_bool],
|
|
80
|
+
[MODULES.repository, 'policy_permission_index', 4, [ValueType.TYPE_STATIC_vec_u8], ValueType.TYPE_STATIC_u64],
|
|
81
|
+
[MODULES.repository, 'policy_value_type', 5, [ValueType.TYPE_STATIC_vec_u8], ValueType.TYPE_STATIC_u8],
|
|
82
|
+
[MODULES.repository, 'contains_id', 6, [ValueType.TYPE_STATIC_address], ValueType.TYPE_STATIC_bool],
|
|
83
|
+
[MODULES.repository, 'contains_value', 7, [ValueType.TYPE_STATIC_address, ValueType.TYPE_STATIC_vec_u8], ValueType.TYPE_STATIC_bool],
|
|
84
|
+
[MODULES.repository, 'value_without_type', 8, [ValueType.TYPE_STATIC_address, ValueType.TYPE_STATIC_vec_u8], ValueType.TYPE_STATIC_vec_u8],
|
|
85
|
+
[MODULES.repository, 'value', 9, [ValueType.TYPE_STATIC_address, ValueType.TYPE_STATIC_vec_u8], ValueType.TYPE_STATIC_vec_u8],
|
|
86
|
+
[MODULES.repository, 'type', 10, [], ValueType.TYPE_STATIC_u8],
|
|
87
|
+
[MODULES.repository, 'policy_mode', 11, [], ValueType.TYPE_STATIC_u8],
|
|
83
88
|
]
|
|
84
89
|
|
|
85
90
|
export class SenseMaker {
|
|
@@ -88,46 +93,46 @@ export class SenseMaker {
|
|
|
88
93
|
|
|
89
94
|
constructor() { }
|
|
90
95
|
// serialize const & data
|
|
91
|
-
add_param(type:
|
|
96
|
+
add_param(type:ValueType | ContextType, param?:any) : boolean {
|
|
92
97
|
const bcs = new BCS(getSuiMoveConfig());
|
|
93
98
|
switch(type) {
|
|
94
|
-
case
|
|
99
|
+
case ValueType.TYPE_STATIC_address:
|
|
95
100
|
this.data.push(bcs.ser(BCS.U8, type).toBytes());
|
|
96
101
|
this.data.push(bcs.ser(BCS.ADDRESS, param).toBytes());
|
|
97
102
|
this.type_validator.push(type);
|
|
98
103
|
break;
|
|
99
|
-
case
|
|
104
|
+
case ValueType.TYPE_STATIC_bool:
|
|
100
105
|
this.data.push(bcs.ser(BCS.U8, type).toBytes());
|
|
101
106
|
this.data.push(bcs.ser(BCS.BOOL, param).toBytes());
|
|
102
107
|
this.type_validator.push(type);
|
|
103
108
|
break;
|
|
104
|
-
case
|
|
109
|
+
case ValueType.TYPE_STATIC_u8:
|
|
105
110
|
this.data.push(bcs.ser(BCS.U8, type).toBytes());
|
|
106
111
|
this.data.push(bcs.ser(BCS.U8, param).toBytes());
|
|
107
112
|
this.type_validator.push(type);
|
|
108
113
|
break;
|
|
109
|
-
case
|
|
114
|
+
case ValueType.TYPE_STATIC_u64:
|
|
110
115
|
this.data.push(bcs.ser(BCS.U8, type).toBytes());
|
|
111
116
|
this.data.push(bcs.ser(BCS.U64, param).toBytes());
|
|
112
117
|
this.type_validator.push(type);
|
|
113
118
|
break;
|
|
114
|
-
case
|
|
119
|
+
case ValueType.TYPE_STATIC_vec_u8:
|
|
115
120
|
this.data.push(bcs.ser(BCS.U8, type).toBytes());
|
|
116
121
|
this.data.push(bcs.ser("vector<u8>", param).toBytes());
|
|
117
122
|
this.type_validator.push(type);
|
|
118
123
|
// this.data[this.data.length-1].forEach((item : number) => console.log(item))
|
|
119
124
|
break;
|
|
120
|
-
case
|
|
125
|
+
case ContextType.TYPE_CONTEXT_SIGNER:
|
|
121
126
|
this.data.push(bcs.ser(BCS.U8, type).toBytes());
|
|
122
|
-
this.type_validator.push(
|
|
127
|
+
this.type_validator.push(ValueType.TYPE_STATIC_address);
|
|
123
128
|
break;
|
|
124
|
-
case
|
|
129
|
+
case ContextType.TYPE_CONTEXT_CURRENT_CLOCK:
|
|
125
130
|
this.data.push(bcs.ser(BCS.U8, type).toBytes());
|
|
126
|
-
this.type_validator.push(
|
|
131
|
+
this.type_validator.push(ValueType.TYPE_STATIC_u64);
|
|
127
132
|
break;
|
|
128
|
-
case
|
|
133
|
+
case ContextType.TYPE_CONTEXT_CURRENT_PROGRESS:
|
|
129
134
|
this.data.push(bcs.ser(BCS.U8, type).toBytes());
|
|
130
|
-
this.type_validator.push(
|
|
135
|
+
this.type_validator.push(ValueType.TYPE_STATIC_address);
|
|
131
136
|
break;
|
|
132
137
|
default:
|
|
133
138
|
return false;
|
|
@@ -148,7 +153,7 @@ export class SenseMaker {
|
|
|
148
153
|
}
|
|
149
154
|
|
|
150
155
|
const bcs = new BCS(getSuiMoveConfig());
|
|
151
|
-
this.data.push(bcs.ser(BCS.U8,
|
|
156
|
+
this.data.push(bcs.ser(BCS.U8, OperatorType.TYPE_DYNAMIC_QUERY).toBytes()); // TYPE
|
|
152
157
|
this.data.push(bcs.ser(BCS.ADDRESS, object_address).toBytes()); // object address
|
|
153
158
|
this.data.push(bcs.ser(BCS.U8, Sense_Cmd[sense_index][2]).toBytes()); // cmd
|
|
154
159
|
|
|
@@ -157,19 +162,19 @@ export class SenseMaker {
|
|
|
157
162
|
// console.log(this.type_validator)
|
|
158
163
|
return true;
|
|
159
164
|
}
|
|
160
|
-
add_logic(type:
|
|
165
|
+
add_logic(type:OperatorType) : boolean {
|
|
161
166
|
switch (type) {
|
|
162
|
-
case
|
|
163
|
-
case
|
|
164
|
-
case
|
|
165
|
-
case
|
|
166
|
-
case
|
|
167
|
+
case OperatorType.TYPE_LOGIC_OPERATOR_U128_GREATER:
|
|
168
|
+
case OperatorType.TYPE_LOGIC_OPERATOR_U128_GREATER_EQUAL:
|
|
169
|
+
case OperatorType.TYPE_LOGIC_OPERATOR_U128_LESSER:
|
|
170
|
+
case OperatorType.TYPE_LOGIC_OPERATOR_U128_LESSER_EQUAL:
|
|
171
|
+
case OperatorType.TYPE_LOGIC_OPERATOR_U128_EQUAL:
|
|
167
172
|
if (this.type_validator.length < 2) { return false; }
|
|
168
173
|
if (!match_u128(this.type_validator[this.type_validator.length - 1])) { return false; }
|
|
169
174
|
if (!match_u128(this.type_validator[this.type_validator.length - 2])) { return false; }
|
|
170
175
|
break;
|
|
171
|
-
case
|
|
172
|
-
case
|
|
176
|
+
case OperatorType.TYPE_LOGIC_OPERATOR_EQUAL:
|
|
177
|
+
case OperatorType.TYPE_LOGIC_OPERATOR_HAS_SUBSTRING:
|
|
173
178
|
if (this.type_validator.length < 2) { return false; }
|
|
174
179
|
break;
|
|
175
180
|
default:
|
|
@@ -178,15 +183,15 @@ export class SenseMaker {
|
|
|
178
183
|
const bcs = new BCS(getSuiMoveConfig());
|
|
179
184
|
this.data.push(bcs.ser(BCS.U8, type).toBytes()); // TYPE
|
|
180
185
|
this.type_validator.splice(this.type_validator.length - 2); // delete type stack
|
|
181
|
-
this.type_validator.push(
|
|
186
|
+
this.type_validator.push(ValueType.TYPE_STATIC_bool); // add bool to type stack
|
|
182
187
|
return true;
|
|
183
188
|
}
|
|
184
189
|
|
|
185
|
-
make(bNotAfterSense:boolean, binder:Guard_Sense_Binder) :
|
|
190
|
+
make(bNotAfterSense:boolean, binder:Guard_Sense_Binder) : boolean | Guard_Sense {
|
|
186
191
|
//console.log(this.type_validator);
|
|
187
192
|
//this.data.forEach((value:Uint8Array) => console.log(value));
|
|
188
|
-
if (this.type_validator.length != 1 || this.type_validator[0] !=
|
|
189
|
-
return
|
|
193
|
+
if (this.type_validator.length != 1 || this.type_validator[0] != ValueType.TYPE_STATIC_bool) {
|
|
194
|
+
return false;
|
|
190
195
|
} // ERROR
|
|
191
196
|
|
|
192
197
|
let input = concatenate(Uint8Array, ...this.data) as Uint8Array;
|
|
@@ -195,61 +200,62 @@ export class SenseMaker {
|
|
|
195
200
|
}
|
|
196
201
|
}
|
|
197
202
|
|
|
198
|
-
function match_u128(type:
|
|
199
|
-
if (type ==
|
|
200
|
-
type ==
|
|
201
|
-
type ==
|
|
203
|
+
function match_u128(type:number) : boolean {
|
|
204
|
+
if (type == ValueType.TYPE_STATIC_option_u8 ||
|
|
205
|
+
type == ValueType.TYPE_STATIC_option_u64 ||
|
|
206
|
+
type == ValueType.TYPE_STATIC_option_u128 ) {
|
|
202
207
|
return true;
|
|
203
208
|
}
|
|
204
209
|
return false;
|
|
205
210
|
}
|
|
206
211
|
|
|
207
212
|
// parse guard senses input bytes of a guard, return [objectids] for 'query_cmd'
|
|
208
|
-
export function parse_sense_bsc(chain_sense_bsc:Uint8Array) :
|
|
213
|
+
export function parse_sense_bsc(chain_sense_bsc:Uint8Array) : boolean | string[] {
|
|
209
214
|
// console.log(data);
|
|
210
215
|
var array = [].slice.call(chain_sense_bsc.reverse());
|
|
211
216
|
const bcs = new BCS(getSuiMoveConfig());
|
|
212
217
|
var result = [];
|
|
218
|
+
|
|
213
219
|
while (array.length > 0) {
|
|
214
220
|
var type : unknown = array.shift() ;
|
|
215
221
|
// console.log(type);
|
|
216
|
-
switch (type as Data_Type) {
|
|
217
|
-
case
|
|
218
|
-
case
|
|
219
|
-
case
|
|
220
|
-
case
|
|
221
|
-
case
|
|
222
|
-
case
|
|
223
|
-
case
|
|
224
|
-
case
|
|
225
|
-
case
|
|
226
|
-
case
|
|
222
|
+
switch (type as Data_Type) {
|
|
223
|
+
case ContextType.TYPE_CONTEXT_SIGNER:
|
|
224
|
+
case ContextType.TYPE_CONTEXT_CURRENT_CLOCK:
|
|
225
|
+
case ContextType.TYPE_CONTEXT_CURRENT_PROGRESS:
|
|
226
|
+
case OperatorType.TYPE_LOGIC_OPERATOR_U128_GREATER:
|
|
227
|
+
case OperatorType.TYPE_LOGIC_OPERATOR_U128_GREATER_EQUAL:
|
|
228
|
+
case OperatorType.TYPE_LOGIC_OPERATOR_U128_LESSER:
|
|
229
|
+
case OperatorType.TYPE_LOGIC_OPERATOR_U128_LESSER_EQUAL:
|
|
230
|
+
case OperatorType.TYPE_LOGIC_OPERATOR_U128_EQUAL:
|
|
231
|
+
case OperatorType.TYPE_LOGIC_OPERATOR_EQUAL:
|
|
232
|
+
case OperatorType.TYPE_LOGIC_OPERATOR_HAS_SUBSTRING:
|
|
227
233
|
break;
|
|
228
|
-
case
|
|
234
|
+
case ValueType.TYPE_STATIC_address:
|
|
229
235
|
//console.log('0x' + bcs.de(BCS.ADDRESS, Uint8Array.from(array)).toString());
|
|
230
236
|
array.splice(0, 32);
|
|
231
237
|
break;
|
|
232
|
-
case
|
|
233
|
-
case
|
|
238
|
+
case ValueType.TYPE_STATIC_bool:
|
|
239
|
+
case ValueType.TYPE_STATIC_u8:
|
|
234
240
|
array.splice(0, 1);
|
|
235
241
|
break;
|
|
236
|
-
case
|
|
242
|
+
case ValueType.TYPE_STATIC_u64:
|
|
237
243
|
array.splice(0, 8);
|
|
238
244
|
break;
|
|
239
|
-
case
|
|
245
|
+
case ValueType.TYPE_STATIC_u128:
|
|
240
246
|
array.splice(0, 16);
|
|
241
247
|
break;
|
|
242
|
-
case
|
|
248
|
+
case ValueType.TYPE_STATIC_vec_u8:
|
|
243
249
|
let {value, length} = ulebDecode(Uint8Array.from(array));
|
|
244
250
|
array.splice(0, value+length);
|
|
245
251
|
break;
|
|
246
|
-
case
|
|
252
|
+
case OperatorType.TYPE_DYNAMIC_QUERY:
|
|
247
253
|
result.push('0x' + bcs.de(BCS.ADDRESS, Uint8Array.from(array)).toString());
|
|
248
254
|
array.splice(0, 33); // address + cmd
|
|
249
255
|
break;
|
|
250
256
|
default:
|
|
251
257
|
// console.log('parse_sense_bsc:undefined');
|
|
252
|
-
return
|
|
258
|
+
return false; // error
|
|
253
259
|
}
|
|
254
260
|
}
|
|
255
261
|
return result;
|