wowok 1.1.0 → 1.1.2
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 +1 -1
- package/dist/demand.d.ts +2 -3
- package/dist/demand.d.ts.map +1 -1
- package/dist/demand.js +19 -11
- package/dist/exception.d.ts +2 -1
- package/dist/exception.d.ts.map +1 -1
- package/dist/exception.js +1 -0
- package/dist/graphql.d.ts +2 -0
- package/dist/graphql.d.ts.map +1 -1
- package/dist/graphql.js +19 -0
- package/dist/guard.d.ts +18 -23
- package/dist/guard.d.ts.map +1 -1
- package/dist/guard.js +220 -199
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/machine.d.ts +6 -6
- package/dist/machine.d.ts.map +1 -1
- package/dist/machine.js +7 -7
- package/dist/passport.d.ts +34 -22
- package/dist/passport.d.ts.map +1 -1
- package/dist/passport.js +124 -214
- package/dist/permission.d.ts +3 -0
- package/dist/permission.d.ts.map +1 -1
- package/dist/permission.js +5 -2
- package/dist/progress.js +3 -3
- package/dist/protocol.d.ts +11 -5
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +30 -6
- package/dist/repository.d.ts +2 -0
- package/dist/repository.d.ts.map +1 -1
- package/dist/repository.js +73 -5
- package/dist/service.d.ts +3 -3
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +115 -116
- package/dist/utils.d.ts +10 -2
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +39 -1
- package/dist/vote.js +8 -8
- package/package.json +1 -1
- package/src/exception.ts +1 -0
- package/src/graphql.ts +20 -0
- package/src/guard.ts +208 -192
- package/src/index.ts +1 -0
- package/src/machine.ts +10 -10
- package/src/passport.ts +139 -251
- package/src/permission.ts +5 -2
- package/src/progress.ts +3 -3
- package/src/protocol.ts +26 -5
- package/src/repository.ts +73 -5
- package/src/service.ts +25 -25
- package/src/utils.ts +44 -4
- package/src/vote.ts +8 -8
- package/tsconfig.json +3 -2
package/src/passport.ts
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { SuiObjectResponse, SuiObjectDataOptions } from '@mysten/sui.js/client';
|
|
2
|
-
import {
|
|
3
|
-
import { FnCallType, Query_Param,
|
|
4
|
-
ValueType, MODULES
|
|
5
|
-
} from './
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import { bcs, BCS, toHEX, fromHEX, getSuiMoveConfig, TypeName, StructTypeDefinition } from '@mysten/bcs';
|
|
2
|
+
import { type TransactionObjectInput, Inputs } from '@mysten/sui.js/transactions';
|
|
3
|
+
import { FnCallType, Query_Param, GuardObject, Protocol, ContextType, OperatorType, Data_Type,
|
|
4
|
+
ValueType, MODULES } from './protocol';
|
|
5
|
+
import { parse_object_type, array_unique, Bcs, ulebDecode, IsValidAddress, IsValidArray } from './utils';
|
|
6
|
+
import { VariableType, Guard, Guard_Vriable, GuardVariableMaker } from './guard';
|
|
7
|
+
import { BCS } from '@mysten/bcs';
|
|
9
8
|
import { ERROR, Errors } from './exception';
|
|
10
9
|
|
|
11
10
|
export type Guard_Query_Object = {
|
|
@@ -15,45 +14,72 @@ export type Guard_Query_Object = {
|
|
|
15
14
|
id: string, // object id
|
|
16
15
|
}
|
|
17
16
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
//
|
|
27
|
-
|
|
28
|
-
|
|
17
|
+
interface FutrueInfo {
|
|
18
|
+
identifier: number;
|
|
19
|
+
type: number;
|
|
20
|
+
witness: string;
|
|
21
|
+
futrue?: string;
|
|
22
|
+
}
|
|
23
|
+
interface GuardInfo {
|
|
24
|
+
id: string;
|
|
25
|
+
query_list: (string | {identifier:number, type:number, witness:string})[]; // object or future object query
|
|
26
|
+
futrue_list: FutrueInfo[];
|
|
27
|
+
}
|
|
28
|
+
interface FutrueFill {
|
|
29
|
+
guard: string;
|
|
29
30
|
identifier: number;
|
|
30
|
-
|
|
31
|
-
witness: string,
|
|
32
|
-
value: string, // future object address
|
|
31
|
+
future: string;
|
|
33
32
|
}
|
|
34
33
|
|
|
34
|
+
interface PassportQuery {
|
|
35
|
+
query: Guard_Query_Object[];
|
|
36
|
+
witness: Guard_Query_Object[];
|
|
37
|
+
}
|
|
35
38
|
export class GuardParser {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
39
|
+
protected guard_list: GuardInfo[] = [];
|
|
40
|
+
protected protocol: Protocol;
|
|
41
|
+
private constructor(protocol: Protocol) { this.protocol = protocol }
|
|
42
|
+
guardlist = () => { return this.guard_list }
|
|
43
|
+
|
|
44
|
+
static CreateAsync = async (protocol: Protocol, guards: string[]) => {
|
|
45
|
+
if (!IsValidArray(guards, IsValidAddress)) {
|
|
46
|
+
ERROR(Errors.IsValidArray, 'guards');
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
let guard_list = array_unique(guards);
|
|
50
|
+
const me = new GuardParser(protocol);
|
|
51
|
+
|
|
52
|
+
let res = await protocol.Query_Raw(guards);
|
|
53
|
+
res.forEach((r) => {
|
|
54
|
+
let c = r.data?.content as any;
|
|
55
|
+
if (!c) return;
|
|
56
|
+
|
|
57
|
+
let index = protocol.WOWOK_OBJECTS_TYPE().findIndex(v => v.includes('guard::Guard') && v == c.type);
|
|
58
|
+
if (index == -1) return;
|
|
59
|
+
|
|
60
|
+
let info:GuardInfo = {id: c.fields.id.id, query_list:[], futrue_list:[]};
|
|
61
|
+
me.parse_future(info, c.fields.variables);
|
|
62
|
+
if (c.fields.input.type == (protocol.Package() + '::bcs::BCS')) {
|
|
63
|
+
me.parse_bcs(info, Uint8Array.from(c.fields.input.fields.bytes));
|
|
64
|
+
}
|
|
65
|
+
me.guard_list.push(info);
|
|
66
|
+
})
|
|
67
|
+
return me
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
private parse_future = (info:GuardInfo, variables:any) => {
|
|
71
|
+
variables.forEach((v:any) => {
|
|
72
|
+
if (v.type == (this.protocol.Package() + '::guard::Variable')) {
|
|
73
|
+
if (v.fields.type == OperatorType.TYPE_FUTURE_QUERY || v.fields.type == ContextType.TYPE_CONTEXT_FUTURE_ID) {
|
|
74
|
+
info.futrue_list.push({identifier:v.fields.identifier, type:v.fields.type,
|
|
75
|
+
witness:'0x' + Bcs.getInstance().de(BCS.ADDRESS, Uint8Array.from(v.fields.value))});
|
|
47
76
|
}
|
|
48
|
-
}
|
|
77
|
+
}
|
|
49
78
|
});
|
|
50
|
-
|
|
51
|
-
return future_objects_result
|
|
52
79
|
}
|
|
53
80
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
var arr = [].slice.call(chain_sense_bsc.reverse());
|
|
81
|
+
private parse_bcs = (info:GuardInfo, chain_bytes: Uint8Array) => {
|
|
82
|
+
var arr = [].slice.call(chain_bytes.reverse());
|
|
57
83
|
while (arr.length > 0) {
|
|
58
84
|
var type : unknown = arr.shift() ;
|
|
59
85
|
// console.log(type);
|
|
@@ -68,19 +94,19 @@ export class GuardParser {
|
|
|
68
94
|
case OperatorType.TYPE_LOGIC_OPERATOR_EQUAL:
|
|
69
95
|
case OperatorType.TYPE_LOGIC_OPERATOR_HAS_SUBSTRING:
|
|
70
96
|
case OperatorType.TYPE_LOGIC_ALWAYS_TRUE:
|
|
97
|
+
case OperatorType.TYPE_LOGIC_NOT:
|
|
98
|
+
case OperatorType.TYPE_LOGIC_AND:
|
|
99
|
+
case OperatorType.TYPE_LOGIC_OR:
|
|
71
100
|
break;
|
|
72
|
-
case ContextType.TYPE_CONTEXT_FUTURE_ID:
|
|
101
|
+
case ContextType.TYPE_CONTEXT_FUTURE_ID:
|
|
73
102
|
case OperatorType.TYPE_FUTURE_QUERY:
|
|
74
103
|
var identifer = arr.splice(0, 1);
|
|
104
|
+
let i = info.futrue_list.find(f => f.identifier == identifer[0]) ;
|
|
105
|
+
if (!i) { ERROR(Errors.Fail, 'futrue_list not found')}
|
|
75
106
|
if (type == OperatorType.TYPE_FUTURE_QUERY) {
|
|
107
|
+
info.query_list.push({identifier:identifer[0], type:type as number, witness:i!.witness}); // query list item
|
|
76
108
|
arr.splice(0, 1); // cmd
|
|
77
109
|
}
|
|
78
|
-
if (!variable || variable?.get(identifer[0])?.type != type) return false;
|
|
79
|
-
|
|
80
|
-
let witness = Guard.get_variable_witness(variable, identifer[0], type as OperatorType) ;
|
|
81
|
-
if (!witness) return false;
|
|
82
|
-
result.push({guardid:guardid, identifier:identifer[0], type:type, value:'',
|
|
83
|
-
witness:'0x' + BCS_CONVERT.de(BCS.ADDRESS, Uint8Array.from(witness as Uint8Array))} as FutureValueRequest);
|
|
84
110
|
break;
|
|
85
111
|
case ContextType.TYPE_CONTEXT_address:
|
|
86
112
|
case ContextType.TYPE_CONTEXT_bool:
|
|
@@ -108,198 +134,73 @@ export class GuardParser {
|
|
|
108
134
|
arr.splice(0, value+length);
|
|
109
135
|
break;
|
|
110
136
|
case OperatorType.TYPE_QUERY:
|
|
137
|
+
info.query_list.push('0x' + Bcs.getInstance().de(BCS.ADDRESS, Uint8Array.from(arr)).toString());
|
|
111
138
|
arr.splice(0, 33); // address + cmd
|
|
112
139
|
break;
|
|
113
140
|
default:
|
|
114
|
-
|
|
115
|
-
console.log(type as number)
|
|
116
|
-
console.log(arr)
|
|
117
|
-
return false; // error
|
|
141
|
+
ERROR(Errors.Fail, 'parse_bcs types')
|
|
118
142
|
}
|
|
119
143
|
}
|
|
120
|
-
return true;
|
|
121
144
|
}
|
|
122
145
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
static guard_queries = async (protocol:Protocol, guards:string[], futures?:FutureValueRequest[]) : Promise<Guard_Query_Object[]> => {
|
|
133
|
-
let sense_objects = guards.map((value) => {
|
|
134
|
-
let v:VariableType = new Map();
|
|
135
|
-
futures?.forEach((f) => {
|
|
136
|
-
if (f.guardid == value) {
|
|
137
|
-
Guard.add_future_variable(v, f.identifier, f.type, f.witness.slice(0), f?.value?f.value.slice(0):undefined, true);
|
|
138
|
-
}
|
|
146
|
+
done = async (fill?:FutrueFill[]) : Promise<PassportQuery>=> {
|
|
147
|
+
let objects: string[] = [];
|
|
148
|
+
this.guard_list.forEach((g) => {
|
|
149
|
+
g.futrue_list.forEach((f) => {
|
|
150
|
+
let r = fill?.find(i => i.identifier == f.identifier && g.id == i.guard);
|
|
151
|
+
if (!r && !f.futrue) { ERROR(Errors.InvalidParam, 'fill') }
|
|
152
|
+
|
|
153
|
+
if (r) f.futrue = r!.future;
|
|
154
|
+
objects.push(f.futrue!);
|
|
139
155
|
})
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
let queries = sense_objects_result.map((value) => {
|
|
151
|
-
return {objectid:value, callback:GuardParser.rpc_query_cmd_fn, data:[]} as Query_Param;
|
|
152
|
-
})
|
|
153
|
-
|
|
154
|
-
await protocol.Query(queries, {'showType':true}); // queries for passport verifing
|
|
155
|
-
let res : Guard_Query_Object[] = [];
|
|
156
|
-
sense_objects.forEach((guard) => { // DONT CHANGE objects sequence for passport verifying
|
|
157
|
-
res = res.concat(guard.data.map((object:string) => {
|
|
158
|
-
let data = queries.filter((v) => {
|
|
159
|
-
return v.objectid == object
|
|
160
|
-
});
|
|
161
|
-
if (!data) {
|
|
162
|
-
console.error('error find data')
|
|
163
|
-
console.log(queries)
|
|
164
|
-
console.log(object)
|
|
165
|
-
return
|
|
156
|
+
g.query_list = g.query_list.map((q) => {
|
|
157
|
+
if (typeof(q) === "string") {
|
|
158
|
+
objects.push(q)
|
|
159
|
+
return q
|
|
160
|
+
} else {
|
|
161
|
+
let r = g.futrue_list.find(f => f.identifier == q.identifier && f.type == q.type && f.witness == q.witness);
|
|
162
|
+
if (!r || !r.futrue) { ERROR(Errors.Fail, 'query witness not match')}
|
|
163
|
+
objects.push(r!.futrue!);
|
|
164
|
+
return r!.futrue!
|
|
166
165
|
}
|
|
167
|
-
|
|
168
|
-
}))
|
|
166
|
+
})
|
|
169
167
|
})
|
|
170
|
-
return res;
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
// parse guard senses input bytes of a guard, return [objectids] for 'query_cmd'
|
|
174
|
-
static parse_sense_bsc(result:string[], guardid: string, chain_sense_bsc:Uint8Array, variable?:VariableType) : boolean {
|
|
175
|
-
var arr = [].slice.call(chain_sense_bsc.reverse());
|
|
176
|
-
|
|
177
|
-
while (arr.length > 0) {
|
|
178
|
-
var type : unknown = arr.shift() ;
|
|
179
|
-
// console.log(type);
|
|
180
|
-
switch (type as Data_Type) {
|
|
181
|
-
case ContextType.TYPE_CONTEXT_SIGNER:
|
|
182
|
-
case ContextType.TYPE_CONTEXT_CLOCK:
|
|
183
|
-
case OperatorType.TYPE_LOGIC_OPERATOR_U128_GREATER:
|
|
184
|
-
case OperatorType.TYPE_LOGIC_OPERATOR_U128_GREATER_EQUAL:
|
|
185
|
-
case OperatorType.TYPE_LOGIC_OPERATOR_U128_LESSER:
|
|
186
|
-
case OperatorType.TYPE_LOGIC_OPERATOR_U128_LESSER_EQUAL:
|
|
187
|
-
case OperatorType.TYPE_LOGIC_OPERATOR_U128_EQUAL:
|
|
188
|
-
case OperatorType.TYPE_LOGIC_OPERATOR_EQUAL:
|
|
189
|
-
case OperatorType.TYPE_LOGIC_OPERATOR_HAS_SUBSTRING:
|
|
190
|
-
case OperatorType.TYPE_LOGIC_ALWAYS_TRUE:
|
|
191
|
-
break;
|
|
192
|
-
case ContextType.TYPE_CONTEXT_FUTURE_ID: // MACHINE-ID
|
|
193
|
-
var v = arr.splice(0, 1);
|
|
194
|
-
if (!variable || variable?.get(v[0])?.type != type) return false;
|
|
195
|
-
break;
|
|
196
|
-
case ContextType.TYPE_CONTEXT_address:
|
|
197
|
-
case ContextType.TYPE_CONTEXT_bool:
|
|
198
|
-
case ContextType.TYPE_CONTEXT_u8:
|
|
199
|
-
case ContextType.TYPE_CONTEXT_u64:
|
|
200
|
-
case ContextType.TYPE_CONTEXT_vec_u8:
|
|
201
|
-
arr.splice(0, 1); // identifier
|
|
202
|
-
break;
|
|
203
|
-
case ValueType.TYPE_STATIC_address:
|
|
204
|
-
//console.log('0x' + bcs.de(BCS.ADDRESS, Uint8Array.from(array)).toString());
|
|
205
|
-
arr.splice(0, 32);
|
|
206
|
-
break;
|
|
207
|
-
case ValueType.TYPE_STATIC_bool:
|
|
208
|
-
case ValueType.TYPE_STATIC_u8:
|
|
209
|
-
arr.splice(0, 1);
|
|
210
|
-
break;
|
|
211
|
-
case ValueType.TYPE_STATIC_u64:
|
|
212
|
-
arr.splice(0, 8);
|
|
213
|
-
break;
|
|
214
|
-
case ValueType.TYPE_STATIC_u128:
|
|
215
|
-
arr.splice(0, 16);
|
|
216
|
-
break;
|
|
217
|
-
case ValueType.TYPE_STATIC_vec_u8:
|
|
218
|
-
let {value, length} = ulebDecode(Uint8Array.from(arr));
|
|
219
|
-
arr.splice(0, value+length);
|
|
220
|
-
break;
|
|
221
|
-
case OperatorType.TYPE_QUERY:
|
|
222
|
-
result.push('0x' + BCS_CONVERT.de(BCS.ADDRESS, Uint8Array.from(arr)).toString());
|
|
223
|
-
arr.splice(0, 33); // address + cmd
|
|
224
|
-
break;
|
|
225
|
-
case OperatorType.TYPE_QUERY_FROM_CONTEXT:
|
|
226
|
-
case OperatorType.TYPE_FUTURE_QUERY:
|
|
227
|
-
var identifer = arr.splice(0, 1);
|
|
228
|
-
if (variable) {
|
|
229
|
-
let v = Guard.get_variable_value(variable, identifer[0], type as OperatorType) ;
|
|
230
|
-
if (v) {
|
|
231
|
-
result.push('0x' + BCS_CONVERT.de(BCS.ADDRESS, Uint8Array.from(v as Uint8Array)).toString());
|
|
232
|
-
arr.splice(0, 1); // splice cmd
|
|
233
|
-
break;
|
|
234
|
-
}
|
|
235
|
-
}; return false
|
|
236
|
-
default:
|
|
237
|
-
console.error('parse_sense_bsc:undefined');
|
|
238
|
-
console.log(type as number)
|
|
239
|
-
console.log(arr)
|
|
240
|
-
return false; // error
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
return true;
|
|
244
|
-
}
|
|
245
168
|
|
|
169
|
+
// objects info
|
|
170
|
+
let res = await this.protocol.Query_Raw(array_unique(objects), {showType:true});
|
|
171
|
+
let query: Guard_Query_Object[] = [];
|
|
172
|
+
let witness: Guard_Query_Object[] = [];
|
|
173
|
+
this.guard_list.forEach(g => {
|
|
174
|
+
g.query_list.forEach(q => {
|
|
175
|
+
let r = res.find(r => r.data?.objectId == q as string);
|
|
176
|
+
if (!r) { ERROR(Errors.Fail, 'query object not match')}
|
|
177
|
+
let object = this.object_query(r!.data);
|
|
178
|
+
if (!object) { ERROR(Errors.Fail, 'object fail')}
|
|
179
|
+
query.push(object!);
|
|
180
|
+
})
|
|
181
|
+
g.futrue_list.forEach(f => {
|
|
182
|
+
let r = res.find(r => r.data?.objectId == f.futrue!);
|
|
183
|
+
if (!r) { ERROR(Errors.Fail, 'query future not match')}
|
|
184
|
+
let object = this.object_query(r!.data, 'witness');
|
|
185
|
+
witness.push(object!)
|
|
186
|
+
})
|
|
187
|
+
})
|
|
246
188
|
|
|
247
|
-
|
|
248
|
-
static rpc_sense_objects_fn = (protocol:Protocol, response:SuiObjectResponse, param:Query_Param, option:SuiObjectDataOptions) => {
|
|
249
|
-
if (!response.error) {
|
|
250
|
-
let c = response?.data?.content as any;
|
|
251
|
-
let index = protocol.WOWOK_OBJECTS_TYPE().findIndex(v => v.includes('guard::Guard') && v == c.type);
|
|
252
|
-
if (index >= 0 && c.fields.id.id == param.objectid) { // GUARD OBJECT
|
|
253
|
-
if (!param?.variables) {
|
|
254
|
-
let v = new Map<number, Guard_Vriable>();
|
|
255
|
-
for (let i = 0; i < c.fields.variables.length; i ++) {
|
|
256
|
-
let variable = c.fields.variables[i]; let bret ;
|
|
257
|
-
if (variable.type == (protocol.WOWOK_OBJECTS_PREFIX_TYPE()[index] + 'Variable')) { // ...::guard::Variable
|
|
258
|
-
if (variable.fields.type == OperatorType.TYPE_FUTURE_QUERY || variable.fields.type == ContextType.TYPE_CONTEXT_FUTURE_ID) {
|
|
259
|
-
bret = Guard.add_future_variable(v, variable.fields.identifier, variable.fields.type,
|
|
260
|
-
variable.fields?.value?Uint8Array.from(variable.fields.value):undefined, undefined, false);
|
|
261
|
-
} else {
|
|
262
|
-
bret = Guard.add_variable(v, variable.fields.identifier, variable.fields.type,
|
|
263
|
-
variable.fields?.value?Uint8Array.from(variable.fields.value):undefined, false);
|
|
264
|
-
}
|
|
265
|
-
if (!bret) {
|
|
266
|
-
console.log('rpc_sense_objects_fn add_variable error');
|
|
267
|
-
console.log(variable);
|
|
268
|
-
return ;
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
param.variables = v;
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
for (let i = 0; i < c.fields.senses.length; i ++) {
|
|
276
|
-
let sense = c.fields.senses[i];
|
|
277
|
-
if (sense.type == (protocol.WOWOK_OBJECTS_PREFIX_TYPE()[index] + 'Sense')) { // ...::guard::Sense
|
|
278
|
-
let result : any[] = [];
|
|
279
|
-
if (param?.parser && param.parser(result, param.objectid, Uint8Array.from(sense.fields.input.fields.bytes), param.variables)) {
|
|
280
|
-
param.data = param.data.concat(result); // DONT array_unique senses
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
}
|
|
189
|
+
return {query:query, witness:witness} as PassportQuery;
|
|
286
190
|
}
|
|
287
191
|
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
id: param.objectid,
|
|
301
|
-
} as Guard_Query_Object;
|
|
302
|
-
}
|
|
192
|
+
private object_query = (data: any, method:string='guard_query') : Guard_Query_Object | undefined=> {
|
|
193
|
+
for (let k = 0; k < this.protocol.WOWOK_OBJECTS_TYPE().length; k++) {
|
|
194
|
+
if (data.type.includes(this.protocol.WOWOK_OBJECTS_TYPE()[k]) ) { // type: pack::m::Object<...>
|
|
195
|
+
return { target:this.protocol.WOWOK_OBJECTS_PREFIX_TYPE()[k] + method as FnCallType,
|
|
196
|
+
object:Inputs.SharedObjectRef({
|
|
197
|
+
objectId: data.objectId,
|
|
198
|
+
mutable: false,
|
|
199
|
+
initialSharedVersion: data.version,
|
|
200
|
+
}) as TransactionObjectInput,
|
|
201
|
+
types:parse_object_type(data.type as string),
|
|
202
|
+
id: data.objectId,
|
|
203
|
+
} as Guard_Query_Object;
|
|
303
204
|
}
|
|
304
205
|
}
|
|
305
206
|
}
|
|
@@ -312,7 +213,7 @@ export class Passport {
|
|
|
312
213
|
|
|
313
214
|
get_object () { return this.passport }
|
|
314
215
|
// return passport object used
|
|
315
|
-
constructor (protocol:Protocol, guards:GuardObject[],
|
|
216
|
+
constructor (protocol:Protocol, guards:GuardObject[], query?:PassportQuery) {
|
|
316
217
|
if (!guards || guards.length > Passport.MAX_GUARD_COUNT) {
|
|
317
218
|
ERROR(Errors.InvalidParam, 'guards' )
|
|
318
219
|
}
|
|
@@ -334,42 +235,29 @@ export class Passport {
|
|
|
334
235
|
arguments:[this.passport, Protocol.TXB_OBJECT(txb, guard)]
|
|
335
236
|
});
|
|
336
237
|
})
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
real_address: string[],
|
|
341
|
-
}
|
|
342
|
-
|
|
343
|
-
let result = new Map<string, futureResultItem>();
|
|
344
|
-
future_values?.forEach((v) => {
|
|
345
|
-
if (result.has(v.guardid)) {
|
|
346
|
-
result.get(v.guardid)?.identifier.push(v.identifier);
|
|
347
|
-
result.get(v.guardid)?.real_address.push(v.value!);
|
|
348
|
-
} else {
|
|
349
|
-
result.set(v.guardid, {identifier:[v.identifier], real_address:[v.value!]})
|
|
350
|
-
}
|
|
351
|
-
})
|
|
352
|
-
|
|
353
|
-
result.forEach((v, k) => {
|
|
238
|
+
|
|
239
|
+
// witness
|
|
240
|
+
query?.witness.forEach((w) => {
|
|
354
241
|
txb.moveCall({
|
|
355
|
-
target:
|
|
356
|
-
arguments:[this.passport, txb.
|
|
357
|
-
|
|
242
|
+
target: w.target as FnCallType,
|
|
243
|
+
arguments: [this.passport, txb.object(w.object)],
|
|
244
|
+
typeArguments: w.types,
|
|
358
245
|
})
|
|
359
246
|
})
|
|
360
247
|
|
|
361
248
|
// rules: 'verify' & 'query' in turns;'verify' at final end.
|
|
362
|
-
|
|
363
|
-
let
|
|
249
|
+
query?.query.forEach((q) => {
|
|
250
|
+
let [type, address] = txb.moveCall({
|
|
364
251
|
target: protocol.PassportFn('passport_verify') as FnCallType,
|
|
365
|
-
arguments: [ this.passport, txb.object(Protocol.CLOCK_OBJECT)
|
|
252
|
+
arguments: [ this.passport, txb.object(Protocol.CLOCK_OBJECT)]
|
|
366
253
|
});
|
|
367
254
|
txb.moveCall({
|
|
368
|
-
target:
|
|
369
|
-
arguments: [ txb.object(
|
|
370
|
-
typeArguments:
|
|
255
|
+
target: q.target as FnCallType,
|
|
256
|
+
arguments: [ txb.object(q.object), this.passport, type, address ],
|
|
257
|
+
typeArguments: q.types,
|
|
371
258
|
})
|
|
372
|
-
}
|
|
259
|
+
})
|
|
260
|
+
|
|
373
261
|
txb.moveCall({
|
|
374
262
|
target: protocol.PassportFn('passport_verify') as FnCallType,
|
|
375
263
|
arguments: [ this.passport, txb.object(Protocol.CLOCK_OBJECT) ]
|
package/src/permission.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { BCS } from '@mysten/bcs';
|
|
2
2
|
import { FnCallType, TxbObject, PermissionObject, PermissionAddress, GuardObject, Protocol} from './protocol';
|
|
3
|
-
import { array_unique, IsValidAddress, IsValidArray, IsValidDesription, IsValidUint,
|
|
3
|
+
import { array_unique, IsValidAddress, IsValidArray, IsValidDesription, IsValidUint, Bcs} from './utils';
|
|
4
4
|
import { ERROR, Errors } from './exception';
|
|
5
5
|
|
|
6
6
|
export enum PermissionIndex {
|
|
@@ -11,6 +11,9 @@ export enum PermissionIndex {
|
|
|
11
11
|
repository_remove_policies = 104,
|
|
12
12
|
repository_set_policy_description = 105,
|
|
13
13
|
repository_set_policy_permission = 106,
|
|
14
|
+
repository_reference_add = 107,
|
|
15
|
+
repository_reference_remove = 108,
|
|
16
|
+
repository_reference_removeall = 108,
|
|
14
17
|
vote = 150,
|
|
15
18
|
vote_set_description = 151,
|
|
16
19
|
vote_set_reference = 152,
|
|
@@ -232,7 +235,7 @@ export class Permission {
|
|
|
232
235
|
txb.moveCall({
|
|
233
236
|
target:this.protocol.PermissionFn('remove_index') as FnCallType,
|
|
234
237
|
arguments:[Protocol.TXB_OBJECT(txb, this.object), txb.pure(entity_address, BCS.ADDRESS),
|
|
235
|
-
txb.pure(
|
|
238
|
+
txb.pure(Bcs.getInstance().ser_vector_u64(array_unique(index)))]
|
|
236
239
|
})
|
|
237
240
|
}
|
|
238
241
|
remove_entity(entity_address:string[]) {
|
package/src/progress.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { BCS } from '@mysten/bcs';
|
|
|
2
2
|
import { FnCallType, PermissionObject, RepositoryObject, PassportObject, MachineObject,
|
|
3
3
|
ProgressObject, ProgressAddress, Protocol,
|
|
4
4
|
TxbObject} from './protocol';
|
|
5
|
-
import {
|
|
5
|
+
import { Bcs, array_unique,IsValidName, IsValidAddress, IsValidArray, OptionNone, IsValidInt } from './utils'
|
|
6
6
|
import { ERROR, Errors } from './exception';
|
|
7
7
|
|
|
8
8
|
export type ProgressNext = {
|
|
@@ -244,8 +244,8 @@ export class Progress {
|
|
|
244
244
|
}
|
|
245
245
|
|
|
246
246
|
let txb = this.protocol.CurrentSession();
|
|
247
|
-
let diliverable = deliverables_address? txb.pure(
|
|
248
|
-
let sub = sub_id? txb.pure(
|
|
247
|
+
let diliverable = deliverables_address? txb.pure(Bcs.getInstance().ser_option_address(deliverables_address)) : OptionNone(txb)
|
|
248
|
+
let sub = sub_id? txb.pure(Bcs.getInstance().ser_option_address(sub_id)) : OptionNone(txb)
|
|
249
249
|
|
|
250
250
|
if (passport) {
|
|
251
251
|
txb.moveCall({
|
package/src/protocol.ts
CHANGED
|
@@ -67,7 +67,10 @@ export enum OperatorType {
|
|
|
67
67
|
TYPE_LOGIC_OPERATOR_EQUAL = 16, // TYPE&DATA(vector<u8>) MUST BE EQUAL
|
|
68
68
|
TYPE_LOGIC_OPERATOR_HAS_SUBSTRING = 17, // SUBSTRING
|
|
69
69
|
TYPE_LOGIC_ALWAYS_TRUE = 18, // aways true
|
|
70
|
-
|
|
70
|
+
TYPE_LOGIC_NOT = 19, // NOT
|
|
71
|
+
TYPE_LOGIC_AND = 20, // AND
|
|
72
|
+
TYPE_LOGIC_OR = 21, // OR
|
|
73
|
+
}
|
|
71
74
|
|
|
72
75
|
export enum ContextType {
|
|
73
76
|
TYPE_CONTEXT_SIGNER = 60,
|
|
@@ -128,8 +131,7 @@ export class Protocol {
|
|
|
128
131
|
protected graphql = '';
|
|
129
132
|
protected txb: TransactionBlock | undefined;
|
|
130
133
|
|
|
131
|
-
constructor(network:ENTRYPOINT
|
|
132
|
-
this.signer = signer_address;
|
|
134
|
+
constructor(network:ENTRYPOINT=ENTRYPOINT.testnet) {
|
|
133
135
|
this.UseNetwork(network);
|
|
134
136
|
this.NewSession();
|
|
135
137
|
}
|
|
@@ -143,7 +145,7 @@ export class Protocol {
|
|
|
143
145
|
case ENTRYPOINT.devnet:
|
|
144
146
|
break;
|
|
145
147
|
case ENTRYPOINT.testnet:
|
|
146
|
-
this.package = "
|
|
148
|
+
this.package = "0xfca45168861085e920aa6e0dd0391b8dbe439fb4725004fe4e0fa5792870bae8";
|
|
147
149
|
this.everyone_guard = "0x78a41fcc4f566360839613f6b917fb101ae015e56b43143f496f265b6422fddc";
|
|
148
150
|
this.graphql = 'https://sui-testnet.mystenlabs.com/graphql';
|
|
149
151
|
break;
|
|
@@ -183,7 +185,6 @@ export class Protocol {
|
|
|
183
185
|
ServiceFn = (fn: any) => { return `${this.package}::${MODULES.service}::${fn}`};
|
|
184
186
|
WowokFn = (fn: any) => { return `${this.package}::${MODULES.wowok}::${fn}`};
|
|
185
187
|
|
|
186
|
-
|
|
187
188
|
Query = async (objects: Query_Param[], options:SuiObjectDataOptions={showContent:true}) : Promise<SuiObjectResponse[]> => {
|
|
188
189
|
const client = new SuiClient({ url: this.NetworkUrl() });
|
|
189
190
|
const ids = objects.map((value) => value.objectid);
|
|
@@ -196,6 +197,11 @@ export class Protocol {
|
|
|
196
197
|
}
|
|
197
198
|
return res;
|
|
198
199
|
}
|
|
200
|
+
Query_Raw = async (objects: string[], options:SuiObjectDataOptions={showContent:true}) : Promise<SuiObjectResponse[]> => {
|
|
201
|
+
const client = new SuiClient({ url: this.NetworkUrl() });
|
|
202
|
+
return await client.call('sui_multiGetObjects', [objects, options]) as SuiObjectResponse[];
|
|
203
|
+
}
|
|
204
|
+
|
|
199
205
|
NewSession = () : TransactionBlock => {
|
|
200
206
|
this.txb = new TransactionBlock();
|
|
201
207
|
return this.txb
|
|
@@ -246,6 +252,21 @@ export class Protocol {
|
|
|
246
252
|
{ let i = this.package + '::' + key + '::'; return i + capitalize(key); })
|
|
247
253
|
WOWOK_OBJECTS_PREFIX_TYPE = () => (Object.keys(MODULES) as Array<keyof typeof MODULES>).map((key) =>
|
|
248
254
|
{ return this.package + '::' + key + '::'; })
|
|
255
|
+
object_name_from_type_repr = (type_repr:string) : string => {
|
|
256
|
+
let i = type_repr.indexOf('::');
|
|
257
|
+
if (i > 0 && type_repr.slice(0, i) === this.package) {
|
|
258
|
+
i = type_repr.indexOf('<');
|
|
259
|
+
if (i > 0) {
|
|
260
|
+
type_repr = type_repr.slice(0, i);
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
let n = type_repr.lastIndexOf('::');
|
|
264
|
+
if (n > 0) {
|
|
265
|
+
return type_repr.slice(n+2);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
return ''
|
|
269
|
+
}
|
|
249
270
|
}
|
|
250
271
|
|
|
251
272
|
export class RpcResultParser {
|