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.
Files changed (54) hide show
  1. package/README.md +1 -1
  2. package/dist/demand.d.ts +2 -3
  3. package/dist/demand.d.ts.map +1 -1
  4. package/dist/demand.js +19 -11
  5. package/dist/exception.d.ts +2 -1
  6. package/dist/exception.d.ts.map +1 -1
  7. package/dist/exception.js +1 -0
  8. package/dist/graphql.d.ts +2 -0
  9. package/dist/graphql.d.ts.map +1 -1
  10. package/dist/graphql.js +19 -0
  11. package/dist/guard.d.ts +18 -23
  12. package/dist/guard.d.ts.map +1 -1
  13. package/dist/guard.js +220 -199
  14. package/dist/index.d.ts +1 -0
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +1 -0
  17. package/dist/machine.d.ts +6 -6
  18. package/dist/machine.d.ts.map +1 -1
  19. package/dist/machine.js +7 -7
  20. package/dist/passport.d.ts +34 -22
  21. package/dist/passport.d.ts.map +1 -1
  22. package/dist/passport.js +124 -214
  23. package/dist/permission.d.ts +3 -0
  24. package/dist/permission.d.ts.map +1 -1
  25. package/dist/permission.js +5 -2
  26. package/dist/progress.js +3 -3
  27. package/dist/protocol.d.ts +11 -5
  28. package/dist/protocol.d.ts.map +1 -1
  29. package/dist/protocol.js +30 -6
  30. package/dist/repository.d.ts +2 -0
  31. package/dist/repository.d.ts.map +1 -1
  32. package/dist/repository.js +73 -5
  33. package/dist/service.d.ts +3 -3
  34. package/dist/service.d.ts.map +1 -1
  35. package/dist/service.js +115 -116
  36. package/dist/utils.d.ts +10 -2
  37. package/dist/utils.d.ts.map +1 -1
  38. package/dist/utils.js +39 -1
  39. package/dist/vote.js +8 -8
  40. package/package.json +1 -1
  41. package/src/exception.ts +1 -0
  42. package/src/graphql.ts +20 -0
  43. package/src/guard.ts +208 -192
  44. package/src/index.ts +1 -0
  45. package/src/machine.ts +10 -10
  46. package/src/passport.ts +139 -251
  47. package/src/permission.ts +5 -2
  48. package/src/progress.ts +3 -3
  49. package/src/protocol.ts +26 -5
  50. package/src/repository.ts +73 -5
  51. package/src/service.ts +25 -25
  52. package/src/utils.ts +44 -4
  53. package/src/vote.ts +8 -8
  54. 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 { TransactionBlock, type TransactionObjectInput, Inputs } from '@mysten/sui.js/transactions';
3
- import { FnCallType, Query_Param, PassportObject, GuardObject, Protocol, ContextType, OperatorType, Data_Type,
4
- ValueType, MODULES,
5
- } from './protocol';
6
- import { parse_object_type, array_unique, BCS_CONVERT, ulebDecode } from './utils';
7
- import { VariableType, Guard, Guard_Vriable} from './guard';
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
- export type GUARD_QUERIES_TYPE = {
19
- module:MODULES,
20
- name:string,
21
- cmd:number,
22
- params:Data_Type[],
23
- result:Data_Type
24
- };
25
-
26
- // de sense bsc => FutureValueRequest
27
- export type FutureValueRequest = {
28
- guardid: string;
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
- type: ContextType | OperatorType,
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
- // from guards: get objects to fill FUTURE value by singer
37
- static guard_futures = async (protocol:Protocol, guards:string[]) : Promise<FutureValueRequest[]> => {
38
- let futrue_objects = guards.map((value) => {
39
- return {objectid:value, callback:GuardParser.rpc_sense_objects_fn, parser:GuardParser.parse_futures, data:[]} as Query_Param
40
- });
41
- await protocol.Query(futrue_objects); // future objects
42
- let future_objects_result:FutureValueRequest[] = [];
43
- futrue_objects.forEach((futrue) => {
44
- futrue.data.forEach((f:FutureValueRequest) => {
45
- if (future_objects_result.findIndex((v)=>{ return v.guardid == f.guardid && v.identifier == f.identifier}) == -1) {
46
- future_objects_result.push(f);
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
- // parse guard futures into result, WITH future variable READY.
55
- static parse_futures(result:FutureValueRequest[], guardid: string, chain_sense_bsc:Uint8Array, variable?:VariableType) : boolean {
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: // MACHINE-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
- console.error('parse_sense_bsc:undefined');
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
- // from guards: get objects to 'guard_query' on chain , with future variables had filled.
124
- // passport verify for some guards, MUST be in ONE pxb:
125
- // 0. construct Guard_Query_Objects(passport_quries) from queries for guards of objects
126
- // 1. create passport
127
- // 2. add all guards / guards future variables
128
- // 3. verify passport
129
- // 4. ops using passport(guard set on object)
130
- // 5. ops using passport(guard set on object)
131
- // 6. destroy passport
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
- return {objectid:value, callback:GuardParser.rpc_sense_objects_fn, parser:GuardParser.parse_sense_bsc, data:[], variables:futures?v:undefined} as Query_Param
141
- });
142
-
143
- await protocol.Query(sense_objects); // objects need quering in guards
144
- let sense_objects_result:string[] = [];
145
- sense_objects.forEach((value) => { // DONT CHANGE objects sequence
146
- sense_objects_result = sense_objects_result.concat(value.data);
147
- });
148
- sense_objects_result = array_unique(sense_objects_result); // objects in guards
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
- return data[0].data
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
- // callback to parse guard's object-queries into Guard_Query_Object[]
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
- // construct Guard_Query_Object of wowok objects for passport verify
289
- static rpc_query_cmd_fn = (protocol:Protocol, response:SuiObjectResponse, param:Query_Param, option:SuiObjectDataOptions) => {
290
- if (!response.error && response.data?.objectId == param.objectid && response.data?.type) {
291
- for (let k = 0; k < protocol.WOWOK_OBJECTS_TYPE().length; k++) {
292
- if (response?.data?.type.includes(protocol.WOWOK_OBJECTS_TYPE()[k]) ) { // type: pack::m::Object<...>
293
- param.data = { target:protocol.WOWOK_OBJECTS_PREFIX_TYPE()[k] + 'guard_query' as FnCallType,
294
- object:Inputs.SharedObjectRef({
295
- objectId: response.data.objectId,
296
- mutable: false,
297
- initialSharedVersion: response.data!.version,
298
- }) as TransactionObjectInput,
299
- types:parse_object_type(response?.data?.type as string),
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[], guard_queries:Guard_Query_Object[], future_values?:FutureValueRequest[]) {
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
- type futureResultItem = {
339
- identifier:number[],
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:protocol.PassportFn('futures_set') as FnCallType,
356
- arguments:[this.passport, txb.pure(BCS_CONVERT.ser_address(k)), txb.pure(BCS_CONVERT.ser_vector_u8(v.identifier)),
357
- txb.pure(v.real_address, 'vector<address>')]
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
- for (let i = 0; i < guard_queries.length; i++) {
363
- let res = txb.moveCall({
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: guard_queries[i].target as FnCallType,
369
- arguments: [ txb.object(guard_queries[i].object), this.passport, res ],
370
- typeArguments: guard_queries[i].types,
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, BCS_CONVERT} from './utils';
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(BCS_CONVERT.ser_vector_u64(array_unique(index)))]
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 { BCS_CONVERT, array_unique,IsValidName, IsValidAddress, IsValidArray, OptionNone, IsValidInt } from './utils'
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(BCS_CONVERT.ser_option_address(deliverables_address)) : OptionNone(txb)
248
- let sub = sub_id? txb.pure(BCS_CONVERT.ser_option_address(sub_id)) : OptionNone(txb)
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, signer_address:string) {
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 = "0x142a896540e7bb2858ca8a3ec6194511e409a7d81225abddf84ae58fd4764735";
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 {