wowok 1.0.4 → 1.0.5

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/src/guard.ts CHANGED
@@ -4,7 +4,8 @@ import { BCS, getSuiMoveConfig, toHEX, fromHEX, BcsReader } from '@mysten/bcs';
4
4
  import { PROTOCOL, GuardAddress, FnCallType, Data_Type, MODULES, ContextType, OBJECTS_TYPE,
5
5
  OBJECTS_TYPE_PREFIX, Query_Param, IsValidDesription, ValueType, OperatorType} from './protocol';
6
6
  import { concatenate, array_equal, ulebDecode, array_unique } from './util';
7
- import { TransactionBlockDataBuilder } from '@mysten/sui.js/dist/cjs/builder/TransactionBlockData';
7
+ import { stringToUint8Array } from './util';
8
+
8
9
 
9
10
  export const MAX_SENSE_COUNT = 16;
10
11
 
@@ -29,7 +30,7 @@ export function launch(txb:TransactionBlock, creation:Guard_Creation) : GuardAdd
29
30
  if (!creation.senses) return false;
30
31
  let bValid = true;
31
32
  creation.senses.forEach((v) => {
32
- if (v.input.length == 0) bValid = false;
33
+ if (!v.input || v.input.length == 0) bValid = false;
33
34
  })
34
35
  if (!bValid) return false;
35
36
 
@@ -52,15 +53,21 @@ export function launch(txb:TransactionBlock, creation:Guard_Creation) : GuardAdd
52
53
  });
53
54
  }
54
55
 
55
- export function signer_guard(txb:TransactionBlock) : boolean {
56
- txb.moveCall({
56
+ export function signer_guard(txb:TransactionBlock) : GuardAddress | boolean {
57
+ return txb.moveCall({
57
58
  target: PROTOCOL.GuardFn('signer_guard') as FnCallType,
58
59
  arguments: []
59
- }); // { kind: 'Result', index: 0 }, ref to address could used by PTB
60
- return true
60
+ });
61
61
  }
62
62
 
63
- export type Sense_Cmd_Type = {
63
+ export function everyone_guard(txb:TransactionBlock) : GuardAddress | boolean {
64
+ return txb.moveCall({
65
+ target: PROTOCOL.GuardFn('everyone_guard') as FnCallType,
66
+ arguments: []
67
+ });
68
+ }
69
+
70
+ export type QUERIES_Type = {
64
71
  module:MODULES,
65
72
  name:string,
66
73
  cmd:number,
@@ -68,12 +75,18 @@ export type Sense_Cmd_Type = {
68
75
  result:Data_Type
69
76
  };
70
77
 
71
- export const Sense_Cmd:any = [ [MODULES.permission, 'creator', 1, [], ValueType.TYPE_STATIC_address],
78
+ export const QUERIES:any = [
79
+ // module, 'name', 'id', [input], output
80
+ [MODULES.permission, 'builder', 1, [], ValueType.TYPE_STATIC_address],
72
81
  [MODULES.permission, 'is_admin', 2, [ValueType.TYPE_STATIC_address], ValueType.TYPE_STATIC_bool],
73
82
  [MODULES.permission, 'has_rights', 3, [ValueType.TYPE_STATIC_address, ValueType.TYPE_STATIC_u64], ValueType.TYPE_STATIC_bool],
74
83
  [MODULES.permission, 'contains_address', 4, [ValueType.TYPE_STATIC_address], ValueType.TYPE_STATIC_bool],
75
84
  [MODULES.permission, 'contains_index', 5, [ValueType.TYPE_STATIC_address, ValueType.TYPE_STATIC_u64], ValueType.TYPE_STATIC_bool],
76
85
  [MODULES.permission, 'contains_guard', 6, [ValueType.TYPE_STATIC_address, ValueType.TYPE_STATIC_u64], ValueType.TYPE_STATIC_bool],
86
+ [MODULES.permission, 'contains_guard', 7, [ValueType.TYPE_STATIC_address, ValueType.TYPE_STATIC_u64], ValueType.TYPE_STATIC_address],
87
+ [MODULES.permission, 'entity_count', 8, [], ValueType.TYPE_STATIC_u64],
88
+ [MODULES.permission, 'admin_count', 9, [], ValueType.TYPE_STATIC_u64],
89
+
77
90
  [MODULES.repository, 'permission', 1, [], ValueType.TYPE_STATIC_address],
78
91
  [MODULES.repository, 'policy_contains', 2, [ValueType.TYPE_STATIC_vec_u8], ValueType.TYPE_STATIC_bool],
79
92
  [MODULES.repository, 'policy_has_permission_index', 3, [ValueType.TYPE_STATIC_vec_u8], ValueType.TYPE_STATIC_bool],
@@ -85,6 +98,109 @@ export const Sense_Cmd:any = [ [MODULES.permission, 'creator', 1, [], ValueType.
85
98
  [MODULES.repository, 'value', 9, [ValueType.TYPE_STATIC_address, ValueType.TYPE_STATIC_vec_u8], ValueType.TYPE_STATIC_vec_u8],
86
99
  [MODULES.repository, 'type', 10, [], ValueType.TYPE_STATIC_u8],
87
100
  [MODULES.repository, 'policy_mode', 11, [], ValueType.TYPE_STATIC_u8],
101
+
102
+ [MODULES.machine, 'permission', 1, [], ValueType.TYPE_STATIC_address],
103
+ [MODULES.machine, 'has_paused', 2, [], ValueType.TYPE_STATIC_bool],
104
+ [MODULES.machine, 'has_published', 3, [], ValueType.TYPE_STATIC_bool],
105
+ [MODULES.machine, 'consensus_repositories_contains', 5, [ValueType.TYPE_STATIC_address], ValueType.TYPE_STATIC_bool],
106
+ [MODULES.machine, 'has_endpoint', 6, [], ValueType.TYPE_STATIC_bool],
107
+ [MODULES.machine, 'endpoint', 7, [], ValueType.TYPE_STATIC_vec_u8],
108
+
109
+ [MODULES.progress, 'machine', 1, [], ValueType.TYPE_STATIC_address],
110
+ [MODULES.progress, 'current', 2, [], ValueType.TYPE_STATIC_vec_u8],
111
+ [MODULES.progress, 'has_parent', 3, [], ValueType.TYPE_STATIC_bool],
112
+ [MODULES.progress, 'parent', 4, [], ValueType.TYPE_STATIC_address],
113
+ [MODULES.progress, 'has_task', 5, [], ValueType.TYPE_STATIC_bool],
114
+ [MODULES.progress, 'task', 6, [], ValueType.TYPE_STATIC_address],
115
+ [MODULES.progress, 'has_namedOperator', 7, [ValueType.TYPE_STATIC_vec_u8], ValueType.TYPE_STATIC_bool],
116
+ [MODULES.progress, 'namedOperator_contains', 8, [ValueType.TYPE_STATIC_vec_u8, ValueType.TYPE_STATIC_address], ValueType.TYPE_STATIC_bool],
117
+ [MODULES.progress, 'has_context_repository', 9, [], ValueType.TYPE_STATIC_bool],
118
+ [MODULES.progress, 'context_repository', 10, [], ValueType.TYPE_STATIC_address],
119
+
120
+ [MODULES.demand, 'permission', 1, [], ValueType.TYPE_STATIC_address],
121
+ [MODULES.demand, 'has_time_expire', 2, [], ValueType.TYPE_STATIC_bool],
122
+ [MODULES.demand, 'time_expire', 3, [], ValueType.TYPE_STATIC_u64],
123
+ [MODULES.demand, 'earnest_count', 4, [], ValueType.TYPE_STATIC_u64],
124
+ [MODULES.demand, 'has_guard', 5, [], ValueType.TYPE_STATIC_bool],
125
+ [MODULES.demand, 'guard', 6, [], ValueType.TYPE_STATIC_address],
126
+ [MODULES.demand, 'has_yes', 7, [], ValueType.TYPE_STATIC_bool],
127
+ [MODULES.demand, 'yes', 8, [], ValueType.TYPE_STATIC_address],
128
+ [MODULES.demand, 'presenters_count', 9, [], ValueType.TYPE_STATIC_u64],
129
+ [MODULES.demand, 'has_presenter', 10, [ValueType.TYPE_STATIC_address], ValueType.TYPE_STATIC_bool],
130
+ [MODULES.demand, 'persenter', 11, [ValueType.TYPE_STATIC_address], ValueType.TYPE_STATIC_address],
131
+
132
+ [MODULES.order, 'amount', 1, [], ValueType.TYPE_STATIC_u64],
133
+ [MODULES.order, 'payer', 2, [], ValueType.TYPE_STATIC_address],
134
+ [MODULES.order, 'service', 3, [], ValueType.TYPE_STATIC_address],
135
+ [MODULES.order, 'has_progress', 4, [], ValueType.TYPE_STATIC_bool],
136
+ [MODULES.order, 'progress', 5, [], ValueType.TYPE_STATIC_address],
137
+ [MODULES.order, 'has_requred_info', 6, [], ValueType.TYPE_STATIC_bool],
138
+ [MODULES.order, 'requred_info_service_pubkey', 7, [], ValueType.TYPE_STATIC_vec_u8],
139
+ [MODULES.order, 'requred_info_customer_pubkey', 8, [], ValueType.TYPE_STATIC_vec_u8],
140
+ [MODULES.order, 'requred_info_info', 9, [], ValueType.TYPE_STATIC_vec_vec_u8],
141
+ [MODULES.order, 'has_discount', 10, [], ValueType.TYPE_STATIC_bool],
142
+ [MODULES.order, 'discount', 11, [], ValueType.TYPE_STATIC_address],
143
+ [MODULES.order, 'balance', 12, [], ValueType.TYPE_STATIC_u64],
144
+ [MODULES.order, 'bRefunded', 13, [], ValueType.TYPE_STATIC_u8],
145
+ [MODULES.order, 'bWithdrawed', 14, [], ValueType.TYPE_STATIC_u8],
146
+
147
+ [MODULES.service, 'permission', 1, [], ValueType.TYPE_STATIC_address],
148
+ [MODULES.service, 'payee', 2, [], ValueType.TYPE_STATIC_address],
149
+ [MODULES.service, 'has_buy_guard', 3, [], ValueType.TYPE_STATIC_bool],
150
+ [MODULES.service, 'buy_guard', 4, [], ValueType.TYPE_STATIC_address],
151
+ [MODULES.service, 'repository_contains', 5, [ValueType.TYPE_STATIC_address], ValueType.TYPE_STATIC_bool],
152
+ [MODULES.service, 'has_withdraw_guard', 6, [ValueType.TYPE_STATIC_address], ValueType.TYPE_STATIC_bool],
153
+ [MODULES.service, 'withdraw_guard_percent', 7, [ValueType.TYPE_STATIC_address], ValueType.TYPE_STATIC_u64],
154
+ [MODULES.service, 'has_refund_guard', 8, [ValueType.TYPE_STATIC_address], ValueType.TYPE_STATIC_bool],
155
+ [MODULES.service, 'refund_guard_percent', 9, [ValueType.TYPE_STATIC_address], ValueType.TYPE_STATIC_u64],
156
+ [MODULES.service, 'has_sale', 10, [ValueType.TYPE_STATIC_vec_u8], ValueType.TYPE_STATIC_bool],
157
+ [MODULES.service, 'sale_price', 11, [ValueType.TYPE_STATIC_vec_u8], ValueType.TYPE_STATIC_u64],
158
+ [MODULES.service, 'sale_stock', 12, [ValueType.TYPE_STATIC_vec_u8], ValueType.TYPE_STATIC_u64],
159
+ [MODULES.service, 'has_machine', 13, [], ValueType.TYPE_STATIC_bool],
160
+ [MODULES.service, 'machine', 14, [], ValueType.TYPE_STATIC_address],
161
+ [MODULES.service, 'bPaused', 15, [], ValueType.TYPE_STATIC_bool],
162
+ [MODULES.service, 'bPublished', 16, [], ValueType.TYPE_STATIC_bool],
163
+ [MODULES.service, 'has_required', 17, [], ValueType.TYPE_STATIC_bool],
164
+ [MODULES.service, 'requrired_pubkey', 18, [], ValueType.TYPE_STATIC_vec_u8],
165
+ [MODULES.service, 'requrired_info', 19, [], ValueType.TYPE_STATIC_vec_vec_u8],
166
+
167
+ [MODULES.reward, 'permission', 1, [], ValueType.TYPE_STATIC_address],
168
+ [MODULES.reward, 'rewards_count_remain', 2, [], ValueType.TYPE_STATIC_u64],
169
+ [MODULES.reward, 'rewards_count_supplied', 3, [], ValueType.TYPE_STATIC_u64],
170
+ [MODULES.reward, 'guard_count', 4, [], ValueType.TYPE_STATIC_u64],
171
+ [MODULES.reward, 'has_guard', 5, [ValueType.TYPE_STATIC_address], ValueType.TYPE_STATIC_bool],
172
+ [MODULES.reward, 'guard_portions', 6, [ValueType.TYPE_STATIC_address], ValueType.TYPE_STATIC_u64],
173
+ [MODULES.reward, 'time_expire', 7, [], ValueType.TYPE_STATIC_u64],
174
+ [MODULES.reward, 'has_claimed', 8, [ValueType.TYPE_STATIC_address], ValueType.TYPE_STATIC_bool],
175
+ [MODULES.reward, 'claimed', 9, [ValueType.TYPE_STATIC_address], ValueType.TYPE_STATIC_u64],
176
+ [MODULES.reward, 'has_claimed_count', 10, [], ValueType.TYPE_STATIC_u64],
177
+ [MODULES.reward, 'is_sponsor', 11, [ValueType.TYPE_STATIC_address], ValueType.TYPE_STATIC_bool],
178
+ [MODULES.reward, 'sponsor', 12, [ValueType.TYPE_STATIC_address], ValueType.TYPE_STATIC_u64],
179
+ [MODULES.reward, 'sponsor_count', 13, [], ValueType.TYPE_STATIC_u64],
180
+ [MODULES.reward, 'bAllowRepeatClaim', 14, [], ValueType.TYPE_STATIC_bool],
181
+
182
+ [MODULES.vote, 'permission', 1, [], ValueType.TYPE_STATIC_address],
183
+ [MODULES.vote, 'bOptions_locked_for_voting', 2, [], ValueType.TYPE_STATIC_bool],
184
+ [MODULES.vote, 'bdeadline_locked', 3, [], ValueType.TYPE_STATIC_bool],
185
+ [MODULES.vote, 'bLockedGuard', 4, [], ValueType.TYPE_STATIC_bool],
186
+ [MODULES.vote, 'max_choice_count', 5, [], ValueType.TYPE_STATIC_u8],
187
+ [MODULES.vote, 'deadline', 6, [], ValueType.TYPE_STATIC_u64],
188
+ [MODULES.vote, 'has_reference', 7, [], ValueType.TYPE_STATIC_bool],
189
+ [MODULES.vote, 'reference', 8, [], ValueType.TYPE_STATIC_address],
190
+ [MODULES.vote, 'has_guard', 9, [ValueType.TYPE_STATIC_address], ValueType.TYPE_STATIC_bool],
191
+ [MODULES.vote, 'guard', 10, [ValueType.TYPE_STATIC_address], ValueType.TYPE_STATIC_u64],
192
+ [MODULES.vote, 'voted', 11, [ValueType.TYPE_STATIC_address], ValueType.TYPE_STATIC_bool],
193
+ [MODULES.vote, 'voted_weight', 12, [ValueType.TYPE_STATIC_address], ValueType.TYPE_STATIC_u64],
194
+ [MODULES.vote, 'has_agree', 13, [ValueType.TYPE_STATIC_vec_u8], ValueType.TYPE_STATIC_bool],
195
+ [MODULES.vote, 'agree_has_object', 14, [ValueType.TYPE_STATIC_vec_u8], ValueType.TYPE_STATIC_bool],
196
+ [MODULES.vote, 'agree_object', 15, [ValueType.TYPE_STATIC_vec_u8], ValueType.TYPE_STATIC_address],
197
+ [MODULES.vote, 'agree_count', 16, [ValueType.TYPE_STATIC_vec_u8], ValueType.TYPE_STATIC_u64],
198
+ [MODULES.vote, 'agree_votes', 17, [ValueType.TYPE_STATIC_vec_u8], ValueType.TYPE_STATIC_u64],
199
+ [MODULES.vote, 'voted_count', 18, [], ValueType.TYPE_STATIC_u64],
200
+ [MODULES.vote, 'top1_name_by_count', 19, [], ValueType.TYPE_STATIC_vec_u8],
201
+ [MODULES.vote, 'top1_count', 20, [], ValueType.TYPE_STATIC_u64],
202
+ [MODULES.vote, 'top1_name_by_votes', 21, [], ValueType.TYPE_STATIC_vec_u8],
203
+ [MODULES.vote, 'top1_votes', 22, [], ValueType.TYPE_STATIC_u64],
88
204
  ]
89
205
 
90
206
  export class SenseMaker {
@@ -118,7 +234,7 @@ export class SenseMaker {
118
234
  break;
119
235
  case ValueType.TYPE_STATIC_vec_u8:
120
236
  this.data.push(bcs.ser(BCS.U8, type).toBytes());
121
- this.data.push(bcs.ser("vector<u8>", param).toBytes());
237
+ this.data.push(bcs.ser(BCS.STRING, param).toBytes());
122
238
  this.type_validator.push(type);
123
239
  // this.data[this.data.length-1].forEach((item : number) => console.log(item))
124
240
  break;
@@ -140,25 +256,36 @@ export class SenseMaker {
140
256
 
141
257
  return true;
142
258
  }
143
- add_cmd(object_address:string, sense_index:number) : boolean {
144
- if (!object_address || sense_index >= Sense_Cmd.length) { return false; }
145
- let offset = this.type_validator.length - Sense_Cmd[sense_index][3].length;
259
+ query_index(module:MODULES, query_name:string) : number {
260
+ for (let i = 0; i < QUERIES.length; i++) {
261
+ if (QUERIES[i][0] == module && QUERIES[i][1] == query_name) {
262
+ return i;
263
+ }
264
+ }
265
+ return -1;
266
+ }
267
+ // query_index: index(from 0) of array QUERIES
268
+ add_query(object_address:string, module:MODULES, query_name:string) : boolean {
269
+ let query_index = this.query_index(module, query_name);
270
+ if (!object_address || query_index == -1) { return false; }
271
+
272
+ let offset = this.type_validator.length - QUERIES[query_index][3].length;
146
273
  if (offset < 0) {
147
274
  return false;
148
275
  }
149
276
 
150
277
  let types = this.type_validator.slice(offset);
151
- if (!array_equal(types, Sense_Cmd[sense_index][3])) { // type validate
278
+ if (!array_equal(types, QUERIES[query_index][3])) { // type validate
152
279
  return false;
153
280
  }
154
281
 
155
282
  const bcs = new BCS(getSuiMoveConfig());
156
283
  this.data.push(bcs.ser(BCS.U8, OperatorType.TYPE_DYNAMIC_QUERY).toBytes()); // TYPE
157
284
  this.data.push(bcs.ser(BCS.ADDRESS, object_address).toBytes()); // object address
158
- this.data.push(bcs.ser(BCS.U8, Sense_Cmd[sense_index][2]).toBytes()); // cmd
285
+ this.data.push(bcs.ser(BCS.U8, QUERIES[query_index][2]).toBytes()); // cmd
159
286
 
160
- this.type_validator.splice(offset, Sense_Cmd[sense_index][3].length); // delete type stack
161
- this.type_validator.push(Sense_Cmd[sense_index][4]); // add the return value type to type stack
287
+ this.type_validator.splice(offset, QUERIES[query_index][3].length); // delete type stack
288
+ this.type_validator.push(QUERIES[query_index][4]); // add the return value type to type stack
162
289
  // console.log(this.type_validator)
163
290
  return true;
164
291
  }
@@ -187,10 +314,11 @@ export class SenseMaker {
187
314
  return true;
188
315
  }
189
316
 
190
- make(bNotAfterSense:boolean, binder:Guard_Sense_Binder) : boolean | Guard_Sense {
317
+ make(bNotAfterSense:boolean = false, binder:Guard_Sense_Binder = Guard_Sense_Binder.AND) : boolean | Guard_Sense {
191
318
  //console.log(this.type_validator);
192
319
  //this.data.forEach((value:Uint8Array) => console.log(value));
193
320
  if (this.type_validator.length != 1 || this.type_validator[0] != ValueType.TYPE_STATIC_bool) {
321
+ // console.log(this.type_validator)
194
322
  return false;
195
323
  } // ERROR
196
324
 
@@ -201,23 +329,33 @@ export class SenseMaker {
201
329
  }
202
330
 
203
331
  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 ) {
332
+ if (type == ValueType.TYPE_STATIC_u8 ||
333
+ type == ValueType.TYPE_STATIC_u64 ||
334
+ type == ValueType.TYPE_STATIC_u128 ) {
207
335
  return true;
208
336
  }
209
337
  return false;
210
338
  }
211
339
 
340
+ export function parse_graphql_senses(senses:any) : string[] {
341
+ let objects:string[] = [];
342
+ senses.forEach((s:any) => {
343
+ let res = parse_sense_bsc(Uint8Array.from(s.input.bytes));
344
+ if (res) {
345
+ objects = objects.concat(res as string[]);
346
+ }
347
+ });
348
+ return array_unique(objects);
349
+ }
350
+
212
351
  // parse guard senses input bytes of a guard, return [objectids] for 'query_cmd'
213
352
  export function parse_sense_bsc(chain_sense_bsc:Uint8Array) : boolean | string[] {
214
- // console.log(data);
215
- var array = [].slice.call(chain_sense_bsc.reverse());
353
+ var arr = [].slice.call(chain_sense_bsc.reverse());
216
354
  const bcs = new BCS(getSuiMoveConfig());
217
355
  var result = [];
218
356
 
219
- while (array.length > 0) {
220
- var type : unknown = array.shift() ;
357
+ while (arr.length > 0) {
358
+ var type : unknown = arr.shift() ;
221
359
  // console.log(type);
222
360
  switch (type as Data_Type) {
223
361
  case ContextType.TYPE_CONTEXT_SIGNER:
@@ -230,42 +368,45 @@ export function parse_sense_bsc(chain_sense_bsc:Uint8Array) : boolean | string[
230
368
  case OperatorType.TYPE_LOGIC_OPERATOR_U128_EQUAL:
231
369
  case OperatorType.TYPE_LOGIC_OPERATOR_EQUAL:
232
370
  case OperatorType.TYPE_LOGIC_OPERATOR_HAS_SUBSTRING:
371
+ case OperatorType.TYPE_LOGIC_ALWAYS_TRUE:
233
372
  break;
234
373
  case ValueType.TYPE_STATIC_address:
235
374
  //console.log('0x' + bcs.de(BCS.ADDRESS, Uint8Array.from(array)).toString());
236
- array.splice(0, 32);
375
+ arr.splice(0, 32);
237
376
  break;
238
377
  case ValueType.TYPE_STATIC_bool:
239
378
  case ValueType.TYPE_STATIC_u8:
240
- array.splice(0, 1);
379
+ arr.splice(0, 1);
241
380
  break;
242
381
  case ValueType.TYPE_STATIC_u64:
243
- array.splice(0, 8);
382
+ arr.splice(0, 8);
244
383
  break;
245
384
  case ValueType.TYPE_STATIC_u128:
246
- array.splice(0, 16);
385
+ arr.splice(0, 16);
247
386
  break;
248
387
  case ValueType.TYPE_STATIC_vec_u8:
249
- let {value, length} = ulebDecode(Uint8Array.from(array));
250
- array.splice(0, value+length);
388
+ let {value, length} = ulebDecode(Uint8Array.from(arr));
389
+ arr.splice(0, value+length);
251
390
  break;
252
391
  case OperatorType.TYPE_DYNAMIC_QUERY:
253
- result.push('0x' + bcs.de(BCS.ADDRESS, Uint8Array.from(array)).toString());
254
- array.splice(0, 33); // address + cmd
392
+ result.push('0x' + bcs.de(BCS.ADDRESS, Uint8Array.from(arr)).toString());
393
+ arr.splice(0, 33); // address + cmd
255
394
  break;
256
395
  default:
257
- // console.log('parse_sense_bsc:undefined');
396
+ console.error('parse_sense_bsc:undefined');
397
+ console.log(type as number)
398
+ console.log(arr)
258
399
  return false; // error
259
400
  }
260
401
  }
261
402
  return result;
262
403
  }
263
404
 
264
- const MODULE_GUARD_INDEX = 7;
265
- export const description_fn = (response:SuiObjectResponse, param:Query_Param, option:SuiObjectDataOptions) => {
405
+ export const rpc_description_fn = (response:SuiObjectResponse, param:Query_Param, option:SuiObjectDataOptions) => {
266
406
  if (!response.error) {
267
407
  let c = response?.data?.content as any;
268
- if (c.type == OBJECTS_TYPE[MODULE_GUARD_INDEX] && c.fields.id.id == param.objectid) { // GUARD OBJECT
408
+
409
+ if (OBJECTS_TYPE().find((v) => (v == c.type)) && c.fields.id.id == param.objectid) { // GUARD OBJECT
269
410
  let description = c.fields.description;
270
411
  if (!param.data.includes(description)) {
271
412
  param.data.push(description);
@@ -273,17 +414,24 @@ export const description_fn = (response:SuiObjectResponse, param:Query_Param, op
273
414
  }
274
415
  }
275
416
  }
276
- export const sense_objects_fn = (response:SuiObjectResponse, param:Query_Param, option:SuiObjectDataOptions) => {
417
+
418
+ export const rpc_sense_objects_fn = (response:SuiObjectResponse, param:Query_Param, option:SuiObjectDataOptions) => {
277
419
  if (!response.error) {
278
420
  let c = response?.data?.content as any;
279
- if (c.type == OBJECTS_TYPE[MODULE_GUARD_INDEX] && c.fields.id.id == param.objectid) { // GUARD OBJECT
421
+ let index = OBJECTS_TYPE().findIndex(v => v.includes('guard::Guard') && v == c.type);
422
+ if (index >= 0 && c.fields.id.id == param.objectid) { // GUARD OBJECT
280
423
  for (let i = 0; i < c.fields.senses.length; i ++) {
281
424
  let sense = c.fields.senses[i];
282
- if (sense.type == (OBJECTS_TYPE_PREFIX[MODULE_GUARD_INDEX] + 'Sense')) { // ...::guard::Sense
283
- let ids = parse_sense_bsc(Uint8Array.from(sense.fields.input.fields.bytes)) as string[];
284
- param.data = array_unique(param.data.concat(ids));
425
+ if (sense.type == (OBJECTS_TYPE_PREFIX()[index] + 'Sense')) { // ...::guard::Sense
426
+ let res = parse_sense_bsc(Uint8Array.from(sense.fields.input.fields.bytes));
427
+ if (res) {
428
+ let ids = res as string[];
429
+ param.data = param.data.concat(ids); // DONT array_unique senses
430
+ }
285
431
  }
286
432
  }
287
433
  }
288
434
  }
289
- }
435
+ }
436
+
437
+
package/src/index.ts CHANGED
@@ -0,0 +1,12 @@
1
+ export * from './protocol'
2
+ export {} from './demand'
3
+ export {} from './machine'
4
+ export {} from './progress'
5
+ export {} from './service'
6
+ export {} from './reward'
7
+ export {} from './uitls'
8
+ export {} from './permission'
9
+ export {} from './guard'
10
+ export {} from './repository'
11
+ export {} from './vote'
12
+ export * from './passport'
package/src/machine.ts CHANGED
@@ -3,13 +3,13 @@ import { BCS } from '@mysten/bcs';
3
3
  import { PROTOCOL, FnCallType, PermissionObject, RepositoryObject, IsValidEndpoint, OptionNone, IsValidDesription, PassportObject,
4
4
  TXB_OBJECT, MachineObject, MachineAddress, IsValidArray, IsValidAddress, IsValidName, IsValidName_AllowEmpty, GuardObject,
5
5
  IsValidInt, IsValidUint, IsValidObjects} from './protocol';
6
- import { BCS_CONVERT } from './util'
6
+ import { BCS_CONVERT, array_unique } from './util'
7
7
  import { IsValidPermissionIndex, PermissionIndexType } from './permission';
8
8
 
9
9
 
10
- export type MachineNodeObject = TransactionResult;
11
-
10
+ export type MachineNodeObject = TransactionResult | String;
12
11
  export const INITIAL_NODE_NAME = '';
12
+ export const namedOperator_ORDER_PAYER = 'order payer';
13
13
 
14
14
  export type Machine_Forward = {
15
15
  name: string; // foward name
@@ -29,7 +29,7 @@ export type Machine_Node = {
29
29
  pairs: Machine_Node_Pair[];
30
30
  }
31
31
 
32
- // 创建新的node加入到machine
32
+ // create new nodes for machine
33
33
  export function machine_add_node(txb:TransactionBlock, machine:MachineObject, permission:PermissionObject,
34
34
  nodes:Machine_Node[], passport?:PassportObject) : boolean {
35
35
  if (!IsValidObjects([machine, permission])) return false;
@@ -86,40 +86,46 @@ export function machine_add_node(txb:TransactionBlock, machine:MachineObject, pe
86
86
  new_nodes.push(n);
87
87
  }); return machine_add_node2(txb, machine, permission, new_nodes, passport)
88
88
  }
89
- // 把个人拥有的node加入到machine
89
+ // move MachineNodeObject to the machine from signer-owned MachineNode object
90
90
  export function machine_add_node2(txb:TransactionBlock, machine:MachineObject, permission:PermissionObject,
91
91
  nodes:MachineNodeObject[], passport?:PassportObject) : boolean {
92
92
  if (!IsValidObjects([machine, permission])) return false;
93
93
  if (!nodes) return false;
94
94
 
95
+ let n: TransactionResult[] = [];
96
+ array_unique(nodes).forEach((v) => {
97
+ n.push(TXB_OBJECT(txb, v));
98
+ })
99
+
95
100
  if (passport) {
96
101
  txb.moveCall({ // add node
97
102
  target:PROTOCOL.MachineFn('node_add_with_passport') as FnCallType,
98
- arguments:[passport, TXB_OBJECT(txb, machine), txb.makeMoveVec({objects:nodes}), TXB_OBJECT(txb, permission)]
103
+ arguments:[passport, TXB_OBJECT(txb, machine), txb.makeMoveVec({objects:n}), TXB_OBJECT(txb, permission)]
99
104
  });
100
105
  } else {
101
106
  txb.moveCall({ // add node
102
107
  target:PROTOCOL.MachineFn('node_add') as FnCallType,
103
- arguments:[TXB_OBJECT(txb, machine), txb.makeMoveVec({objects:nodes}), TXB_OBJECT(txb, permission)]
108
+ arguments:[TXB_OBJECT(txb, machine), txb.makeMoveVec({objects:n}), TXB_OBJECT(txb, permission)]
104
109
  });
105
110
  }
106
111
  return true
107
112
  }
108
- // machine把node移动到个人地址
109
- export function machine_remove_node(txb:TransactionBlock, machine:MachineObject, permission:TransactionResult,
110
- nodes_name:string[], passport?:PassportObject) : boolean {
113
+ // move MachineNodeObject from machine to signer-owned MachineNode object
114
+ export function machine_remove_node(txb:TransactionBlock, machine:MachineObject, permission:PermissionObject,
115
+ nodes_name:string[], bTransferMyself:boolean = false, passport?:PassportObject) : boolean {
111
116
  if (!IsValidObjects([machine, permission])) return false;
112
117
  if (!nodes_name || !IsValidArray(nodes_name, IsValidName)) return false;
113
118
 
114
119
  if (passport) {
115
120
  txb.moveCall({
116
121
  target:PROTOCOL.MachineFn('node_remove_with_passport') as FnCallType,
117
- arguments:[passport, TXB_OBJECT(txb, machine), txb.pure(BCS_CONVERT.ser_vector_string(nodes_name)), permission],
122
+ arguments:[passport, TXB_OBJECT(txb, machine), txb.pure(BCS_CONVERT.ser_vector_string(nodes_name)),
123
+ txb.pure(bTransferMyself, BCS.BOOL), TXB_OBJECT(txb, permission)],
118
124
  });
119
125
  } else {
120
126
  txb.moveCall({
121
127
  target:PROTOCOL.MachineFn('node_remove') as FnCallType,
122
- arguments:[TXB_OBJECT(txb, machine), txb.pure(BCS_CONVERT.ser_vector_string(nodes_name)), permission],
128
+ arguments:[TXB_OBJECT(txb, machine), txb.pure(BCS_CONVERT.ser_vector_string(nodes_name)), txb.pure(bTransferMyself, BCS.BOOL), TXB_OBJECT(txb, permission)],
123
129
  });
124
130
  }
125
131
  return true;
package/src/passport.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  import { SuiObjectResponse, SuiObjectDataOptions } from '@mysten/sui.js/client';
2
2
  import { TransactionBlock, TransactionResult, type TransactionObjectInput, Inputs } from '@mysten/sui.js/transactions';
3
- import { PROTOCOL, FnCallType, CLOCK_OBJECT, Query_Param, OBJECTS_TYPE, OBJECTS_TYPE_PREFIX, PassportObject} from './protocol';
3
+ import { PROTOCOL, FnCallType, CLOCK_OBJECT, Query_Param, OBJECTS_TYPE, OBJECTS_TYPE_PREFIX, PassportObject, GuardObject, TXB_OBJECT} from './protocol';
4
4
  import { parse_object_type, array_unique } from './util';
5
- import { sense_objects_fn } from './guard';
5
+ import { rpc_sense_objects_fn } from './guard';
6
6
 
7
7
  export const MAX_GUARD_COUNT = 8;
8
8
 
@@ -18,40 +18,57 @@ export const MAX_GUARD_COUNT = 8;
18
18
 
19
19
  export const passport_queries = async (guards:string[]) : Promise<Guard_Query_Object[]> => {
20
20
  let sense_objects = guards.map((value) => {
21
- return {objectid:value, callback:sense_objects_fn, data:[]} as Query_Param
21
+ return {objectid:value, callback:rpc_sense_objects_fn, data:[]} as Query_Param
22
22
  });
23
23
  await PROTOCOL.Query(sense_objects); // objects need quering in guards
24
24
  let sense_objects_result:string[] = [];
25
- sense_objects.forEach((value) => {
25
+ sense_objects.forEach((value) => { // DONT CHANGE objects sequence
26
26
  sense_objects_result = sense_objects_result.concat(value.data);
27
27
  });
28
- sense_objects_result = array_unique(sense_objects_result);
29
- console.log(sense_objects_result);
28
+ sense_objects_result = array_unique(sense_objects_result); // objects in guards
29
+ // console.log(sense_objects_result);
30
30
 
31
31
  let queries = sense_objects_result.map((value) => {
32
- return {objectid:value, callback:query_cmd_fn} as Query_Param;
32
+ return {objectid:value, callback:rpc_query_cmd_fn, data:[]} as Query_Param;
33
33
  })
34
34
  await PROTOCOL.Query(queries, {'showType':true}); // queries for passport verifing
35
- return queries.map((value) => {
36
- return value.data as Guard_Query_Object;
35
+ let res : Guard_Query_Object[] = [];
36
+ sense_objects.forEach((guard) => { // DONT CHANGE objects sequence for passport verifying
37
+ res = res.concat(guard.data.map((object:string) => {
38
+ let data = queries.filter((v) => {
39
+ return v.objectid == object
40
+ });
41
+ if (!data) {
42
+ console.error('error find data')
43
+ console.log(queries)
44
+ console.log(object)
45
+ return
46
+ }
47
+ return data[0].data
48
+ }))
37
49
  })
50
+ return res;
38
51
  }
39
- // return passport object for using
40
- export function verify(txb:TransactionBlock, passport_queries:Guard_Query_Object[]) : PassportObject | boolean {
41
- if (passport_queries.length == 0 || passport_queries.length > MAX_GUARD_COUNT) {
52
+
53
+ // return passport object used
54
+ export function verify(txb:TransactionBlock, guards:string[], passport_queries:Guard_Query_Object[]) : PassportObject | boolean {
55
+ if (!guards || passport_queries.length == 0 || passport_queries.length > MAX_GUARD_COUNT) {
42
56
  return false;
43
57
  }
44
- let guard_ids = passport_queries.map((value)=>value.id);
58
+ console.log(guards)
59
+ console.log(passport_queries)
60
+
45
61
  var passport = txb.moveCall({
46
62
  target: PROTOCOL.PassportFn('new') as FnCallType,
47
- arguments: [ txb.object(guard_ids[0]), txb.object(CLOCK_OBJECT)]
63
+ arguments: [ TXB_OBJECT(txb, guards[0]), txb.object(CLOCK_OBJECT)]
48
64
  });
49
65
 
50
66
  // add others guards, if any
51
- for (let i = 1; i < guard_ids.length; i++) {
67
+ for (let i = 1; i < guards.length; i++) {
68
+ console.log('dfdfdf')
52
69
  txb.moveCall({
53
70
  target:PROTOCOL.PassportFn('guard_add') as FnCallType,
54
- arguments:[passport, txb.object(guard_ids[i])]
71
+ arguments:[passport, TXB_OBJECT(txb, guards[i])]
55
72
  });
56
73
  }
57
74
 
@@ -84,20 +101,20 @@ export function destroy(txb:TransactionBlock, passport:PassportObject) : boolean
84
101
  }
85
102
 
86
103
  export type Guard_Query_Object = {
87
- target: FnCallType,
88
- object: TransactionObjectInput,
89
- types: string[],
90
- id: string,
104
+ target: FnCallType, // object fnCall
105
+ object: TransactionObjectInput, // object
106
+ types: string[], // object type
107
+ id: string, // object id
91
108
  }
92
109
 
93
110
  // construct Guard_Query_Object of wowok objects for passport verify
94
- export const query_cmd_fn = (response:SuiObjectResponse, param:Query_Param, option:SuiObjectDataOptions) => {
111
+ export const rpc_query_cmd_fn = (response:SuiObjectResponse, param:Query_Param, option:SuiObjectDataOptions) => {
95
112
  if (!response.error && response.data?.objectId == param.objectid && response.data?.type) {
96
- for (let k = 0; k < OBJECTS_TYPE.length; k++) {
97
- if (response?.data?.type.includes(OBJECTS_TYPE[k]) ) { // type: pack::m::Object<...>
98
- param.data = { target:OBJECTS_TYPE_PREFIX[k] + 'guard_query' as FnCallType,
113
+ for (let k = 0; k < OBJECTS_TYPE().length; k++) {
114
+ if (response?.data?.type.includes(OBJECTS_TYPE()[k]) ) { // type: pack::m::Object<...>
115
+ param.data = { target:OBJECTS_TYPE_PREFIX()[k] + 'guard_query' as FnCallType,
99
116
  object:Inputs.SharedObjectRef({
100
- objectId: param.objectid,
117
+ objectId: response.data.objectId,
101
118
  mutable: false,
102
119
  initialSharedVersion: response.data!.version,
103
120
  }) as TransactionObjectInput,
@@ -107,4 +124,24 @@ export const query_cmd_fn = (response:SuiObjectResponse, param:Query_Param, opti
107
124
  }
108
125
  }
109
126
  }
127
+ }
128
+
129
+ export const graphql_query_objects = (nodes:any) : Guard_Query_Object[] => {
130
+ let ret:Guard_Query_Object[] = [];
131
+ nodes.forEach((node:any) => {
132
+ for (let k = 0; k < OBJECTS_TYPE().length; k++) {
133
+ if (node?.asMoveObject?.contents?.type?.repr?.includes(OBJECTS_TYPE()[k]) ) { // type: pack::m::Object<...>
134
+ ret.push({ target:OBJECTS_TYPE_PREFIX()[k] + 'guard_query' as FnCallType,
135
+ object:Inputs.SharedObjectRef({
136
+ objectId: node.address,
137
+ mutable: false,
138
+ initialSharedVersion: node.version,
139
+ }) as TransactionObjectInput,
140
+ types:parse_object_type(node.asMoveObject.contents.type.repr as string),
141
+ id: node.address,
142
+ } as Guard_Query_Object);
143
+ }
144
+ }
145
+ })
146
+ return ret
110
147
  }
package/src/permission.ts CHANGED
@@ -93,9 +93,11 @@ export const IsValidUserDefinedIndex = (index:number) : boolean => {
93
93
  return index >= PermissionIndex.user_defined_start && IsValidUint(index)
94
94
  }
95
95
  export const IsValidPermissionIndex = (index:PermissionIndexType) : boolean => {
96
+ //console.log(index)
96
97
  if (Object.values(PermissionIndex).includes(index)) {
97
98
  return true
98
99
  }
100
+ //console.log(Object.keys(PermissionIndex))
99
101
  return IsValidUserDefinedIndex(index);
100
102
  }
101
103
 
@@ -139,8 +141,11 @@ export function add_entity(txb:TransactionBlock, permission:PermissionObject, en
139
141
 
140
142
  let bValid = true;
141
143
  let e = entities.forEach((v) => {
142
- if (!IsValidArray(v.permissions, IsValidPermissionIndex)) bValid = false;
143
144
  if (!IsValidAddress(v.entity_address)) bValid = false;
145
+ v.permissions.forEach((p) => {
146
+ if (!IsValidPermissionIndex(p.index)) bValid = false;
147
+ if (p?.guard && !IsValidObjects([p.guard])) bValid = false;
148
+ })
144
149
  });
145
150
  if (!bValid) return false;
146
151