wowok 1.0.6 → 1.0.7
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/dist/guard.js +39 -12
- package/dist/index.js +122 -2
- package/dist/machine.js +8 -8
- package/dist/passport.js +20 -12
- package/dist/permission.js +5 -5
- package/dist/progress.js +5 -5
- package/dist/protocol.js +7 -5
- package/dist/repository.js +5 -5
- package/dist/reward.js +5 -5
- package/dist/service.js +88 -52
- package/dist/utils.js +158 -0
- package/dist/vote.js +10 -10
- package/package.json +20 -4
- package/src/guard.ts +32 -7
- package/src/index.ts +1 -0
- package/src/passport.ts +17 -7
- package/src/protocol.ts +5 -3
- package/src/service.ts +62 -36
package/dist/vote.js
CHANGED
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.change_permission = exports.agree = exports.vote_lock_guard = exports.vote_expand_deadline = exports.vote_lock_deadline = exports.vote_open_voting = exports.vote_set_max_choice_count = exports.vote_remove_option = exports.vote_add_option = exports.vote_remove_guard = exports.vote_add_guard = exports.vote_set_reference = exports.vote_set_description = exports.destroy = exports.launch = exports.vote = exports.MAX_CHOICE_COUNT = exports.MAX_AGREES_COUNT = void 0;
|
|
4
4
|
const bcs_1 = require("@mysten/bcs");
|
|
5
5
|
const protocol_1 = require("./protocol");
|
|
6
|
-
const
|
|
6
|
+
const utils_1 = require("./utils");
|
|
7
7
|
exports.MAX_AGREES_COUNT = 200;
|
|
8
8
|
exports.MAX_CHOICE_COUNT = 200;
|
|
9
9
|
function vote(txb, permission, description, minutes_duration, max_choice_count, reference_address, passport) {
|
|
@@ -19,7 +19,7 @@ function vote(txb, permission, description, minutes_duration, max_choice_count,
|
|
|
19
19
|
return false;
|
|
20
20
|
if (reference_address && !(0, protocol_1.IsValidAddress)(reference_address))
|
|
21
21
|
return false;
|
|
22
|
-
let reference = reference_address ? txb.pure(
|
|
22
|
+
let reference = reference_address ? txb.pure(utils_1.BCS_CONVERT.ser_option_address(reference_address)) : (0, protocol_1.OptionNone)(txb);
|
|
23
23
|
let choice_count = max_choice_count ? max_choice_count : 1;
|
|
24
24
|
if (passport) {
|
|
25
25
|
return txb.moveCall({
|
|
@@ -81,7 +81,7 @@ function vote_set_reference(txb, vote, permission, reference_address, passport)
|
|
|
81
81
|
return false;
|
|
82
82
|
if (reference_address && !(0, protocol_1.IsValidAddress)(reference_address))
|
|
83
83
|
return false;
|
|
84
|
-
let reference = reference_address ? txb.pure(
|
|
84
|
+
let reference = reference_address ? txb.pure(utils_1.BCS_CONVERT.ser_option_address(reference_address)) : (0, protocol_1.OptionNone)(txb);
|
|
85
85
|
if (passport) {
|
|
86
86
|
txb.moveCall({
|
|
87
87
|
target: protocol_1.PROTOCOL.VoteFn('reference_set_with_passport'),
|
|
@@ -134,7 +134,7 @@ function vote_remove_guard(txb, vote, permission, guard_address, removeall, pass
|
|
|
134
134
|
else {
|
|
135
135
|
txb.moveCall({
|
|
136
136
|
target: protocol_1.PROTOCOL.VoteFn('guard_remove_with_passport'),
|
|
137
|
-
arguments: [passport, (0, protocol_1.TXB_OBJECT)(txb, vote), txb.pure((0,
|
|
137
|
+
arguments: [passport, (0, protocol_1.TXB_OBJECT)(txb, vote), txb.pure((0, utils_1.array_unique)(guard_address), 'vector<address>'), (0, protocol_1.TXB_OBJECT)(txb, permission)]
|
|
138
138
|
});
|
|
139
139
|
}
|
|
140
140
|
}
|
|
@@ -148,7 +148,7 @@ function vote_remove_guard(txb, vote, permission, guard_address, removeall, pass
|
|
|
148
148
|
else {
|
|
149
149
|
txb.moveCall({
|
|
150
150
|
target: protocol_1.PROTOCOL.VoteFn('guard_remove'),
|
|
151
|
-
arguments: [(0, protocol_1.TXB_OBJECT)(txb, vote), txb.pure((0,
|
|
151
|
+
arguments: [(0, protocol_1.TXB_OBJECT)(txb, vote), txb.pure((0, utils_1.array_unique)(guard_address), 'vector<address>'), (0, protocol_1.TXB_OBJECT)(txb, permission)]
|
|
152
152
|
});
|
|
153
153
|
}
|
|
154
154
|
}
|
|
@@ -170,7 +170,7 @@ function vote_add_option(txb, vote, permission, options, passport) {
|
|
|
170
170
|
if (!bValid)
|
|
171
171
|
return false;
|
|
172
172
|
options.forEach((option) => {
|
|
173
|
-
let reference = option?.reference_address ? txb.pure(
|
|
173
|
+
let reference = option?.reference_address ? txb.pure(utils_1.BCS_CONVERT.ser_option_address(option.reference_address)) : (0, protocol_1.OptionNone)(txb);
|
|
174
174
|
if (passport) {
|
|
175
175
|
txb.moveCall({
|
|
176
176
|
target: protocol_1.PROTOCOL.VoteFn('agrees_add_with_passport'),
|
|
@@ -204,7 +204,7 @@ function vote_remove_option(txb, vote, permission, options, removeall, passport)
|
|
|
204
204
|
else {
|
|
205
205
|
txb.moveCall({
|
|
206
206
|
target: protocol_1.PROTOCOL.VoteFn('agrees_remove_with_passport'),
|
|
207
|
-
arguments: [passport, (0, protocol_1.TXB_OBJECT)(txb, vote), txb.pure(
|
|
207
|
+
arguments: [passport, (0, protocol_1.TXB_OBJECT)(txb, vote), txb.pure(utils_1.BCS_CONVERT.ser_vector_string((0, utils_1.array_unique)(options))), (0, protocol_1.TXB_OBJECT)(txb, permission)]
|
|
208
208
|
});
|
|
209
209
|
}
|
|
210
210
|
}
|
|
@@ -218,7 +218,7 @@ function vote_remove_option(txb, vote, permission, options, removeall, passport)
|
|
|
218
218
|
else {
|
|
219
219
|
txb.moveCall({
|
|
220
220
|
target: protocol_1.PROTOCOL.VoteFn('agrees_remove'),
|
|
221
|
-
arguments: [(0, protocol_1.TXB_OBJECT)(txb, vote), txb.pure(
|
|
221
|
+
arguments: [(0, protocol_1.TXB_OBJECT)(txb, vote), txb.pure(utils_1.BCS_CONVERT.ser_vector_string((0, utils_1.array_unique)(options))), (0, protocol_1.TXB_OBJECT)(txb, permission)]
|
|
222
222
|
});
|
|
223
223
|
}
|
|
224
224
|
}
|
|
@@ -327,13 +327,13 @@ function agree(txb, vote, options, passport) {
|
|
|
327
327
|
if (passport) {
|
|
328
328
|
txb.moveCall({
|
|
329
329
|
target: protocol_1.PROTOCOL.VoteFn('vote_with_passport'),
|
|
330
|
-
arguments: [passport, (0, protocol_1.TXB_OBJECT)(txb, vote), txb.pure(
|
|
330
|
+
arguments: [passport, (0, protocol_1.TXB_OBJECT)(txb, vote), txb.pure(utils_1.BCS_CONVERT.ser_vector_string((0, utils_1.array_unique)(options)))]
|
|
331
331
|
});
|
|
332
332
|
}
|
|
333
333
|
else {
|
|
334
334
|
txb.moveCall({
|
|
335
335
|
target: protocol_1.PROTOCOL.VoteFn('vote'),
|
|
336
|
-
arguments: [(0, protocol_1.TXB_OBJECT)(txb, vote), txb.pure(
|
|
336
|
+
arguments: [(0, protocol_1.TXB_OBJECT)(txb, vote), txb.pure(utils_1.BCS_CONVERT.ser_vector_string((0, utils_1.array_unique)(options)))]
|
|
337
337
|
});
|
|
338
338
|
}
|
|
339
339
|
return true;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "wowok",
|
|
3
|
-
"version": "1.0.
|
|
4
|
-
"description": "AI-oriented web3 collaboration protocol, driving innovaion and making it more likely to happen
|
|
3
|
+
"version": "1.0.7",
|
|
4
|
+
"description": "AI-oriented web3 collaboration protocol, driving innovaion and making it more likely to happen",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"module": "node",
|
|
@@ -13,9 +13,25 @@
|
|
|
13
13
|
"web3",
|
|
14
14
|
"AI",
|
|
15
15
|
"wowok",
|
|
16
|
-
"sui"
|
|
16
|
+
"sui",
|
|
17
|
+
"collaboration",
|
|
18
|
+
"protocol",
|
|
19
|
+
"WOW",
|
|
20
|
+
"permission",
|
|
21
|
+
"guard",
|
|
22
|
+
"service",
|
|
23
|
+
"order",
|
|
24
|
+
"machine",
|
|
25
|
+
"progress",
|
|
26
|
+
"passport",
|
|
27
|
+
"demand",
|
|
28
|
+
"reward",
|
|
29
|
+
"discount",
|
|
30
|
+
"mark",
|
|
31
|
+
"message",
|
|
32
|
+
"vote"
|
|
17
33
|
],
|
|
18
|
-
"author": "
|
|
34
|
+
"author": "wowok",
|
|
19
35
|
"license": "Apache License",
|
|
20
36
|
"dependencies": {
|
|
21
37
|
"@mysten/bcs": "^0.11.1",
|
package/src/guard.ts
CHANGED
|
@@ -242,12 +242,13 @@ export class SenseMaker {
|
|
|
242
242
|
this.data.push(bcs.ser(BCS.U8, type).toBytes());
|
|
243
243
|
this.type_validator.push(ValueType.TYPE_STATIC_address);
|
|
244
244
|
break;
|
|
245
|
-
case ContextType.
|
|
245
|
+
case ContextType.TYPE_CONTEXT_CLOCK:
|
|
246
246
|
this.data.push(bcs.ser(BCS.U8, type).toBytes());
|
|
247
247
|
this.type_validator.push(ValueType.TYPE_STATIC_u64);
|
|
248
248
|
break;
|
|
249
|
-
case ContextType.
|
|
249
|
+
case ContextType.TYPE_CONTEXT_FUTURE_ID:
|
|
250
250
|
this.data.push(bcs.ser(BCS.U8, type).toBytes());
|
|
251
|
+
this.data.push(bcs.ser(BCS.ADDRESS, param).toBytes());
|
|
251
252
|
this.type_validator.push(ValueType.TYPE_STATIC_address);
|
|
252
253
|
break;
|
|
253
254
|
default:
|
|
@@ -265,9 +266,13 @@ export class SenseMaker {
|
|
|
265
266
|
return -1;
|
|
266
267
|
}
|
|
267
268
|
// query_index: index(from 0) of array QUERIES
|
|
268
|
-
|
|
269
|
+
// TYPE_FUTURE_ORDER_DYNAMIC_QUERY: object_address: service/machine id; module:order/progress
|
|
270
|
+
add_query(type:OperatorType, object_address:string, module:MODULES, query_name:string) : boolean {
|
|
269
271
|
let query_index = this.query_index(module, query_name);
|
|
270
272
|
if (!object_address || query_index == -1) { return false; }
|
|
273
|
+
// if future type , object_address must be SERVICE OR MACHINE address
|
|
274
|
+
if (type == OperatorType.TYPE_FUTURE_ORDER_DYNAMIC_QUERY && module != MODULES.order) return false;
|
|
275
|
+
if (type == OperatorType.TYPE_FUTURE_PROGRESS_DYNAMIC_QUERY && module != MODULES.progress) return false;
|
|
271
276
|
|
|
272
277
|
let offset = this.type_validator.length - QUERIES[query_index][3].length;
|
|
273
278
|
if (offset < 0) {
|
|
@@ -280,7 +285,7 @@ export class SenseMaker {
|
|
|
280
285
|
}
|
|
281
286
|
|
|
282
287
|
const bcs = new BCS(getSuiMoveConfig());
|
|
283
|
-
this.data.push(bcs.ser(BCS.U8,
|
|
288
|
+
this.data.push(bcs.ser(BCS.U8, type).toBytes()); // TYPE
|
|
284
289
|
this.data.push(bcs.ser(BCS.ADDRESS, object_address).toBytes()); // object address
|
|
285
290
|
this.data.push(bcs.ser(BCS.U8, QUERIES[query_index][2]).toBytes()); // cmd
|
|
286
291
|
|
|
@@ -349,7 +354,7 @@ export function parse_graphql_senses(senses:any) : string[] {
|
|
|
349
354
|
}
|
|
350
355
|
|
|
351
356
|
// parse guard senses input bytes of a guard, return [objectids] for 'query_cmd'
|
|
352
|
-
export function parse_sense_bsc(chain_sense_bsc:Uint8Array) : boolean | string[] {
|
|
357
|
+
export function parse_sense_bsc(chain_sense_bsc:Uint8Array, future_order?:string[], future_progress?:string[]) : boolean | string[] {
|
|
353
358
|
var arr = [].slice.call(chain_sense_bsc.reverse());
|
|
354
359
|
const bcs = new BCS(getSuiMoveConfig());
|
|
355
360
|
var result = [];
|
|
@@ -359,8 +364,7 @@ export function parse_sense_bsc(chain_sense_bsc:Uint8Array) : boolean | string[
|
|
|
359
364
|
// console.log(type);
|
|
360
365
|
switch (type as Data_Type) {
|
|
361
366
|
case ContextType.TYPE_CONTEXT_SIGNER:
|
|
362
|
-
case ContextType.
|
|
363
|
-
case ContextType.TYPE_CONTEXT_CURRENT_PROGRESS:
|
|
367
|
+
case ContextType.TYPE_CONTEXT_CLOCK:
|
|
364
368
|
case OperatorType.TYPE_LOGIC_OPERATOR_U128_GREATER:
|
|
365
369
|
case OperatorType.TYPE_LOGIC_OPERATOR_U128_GREATER_EQUAL:
|
|
366
370
|
case OperatorType.TYPE_LOGIC_OPERATOR_U128_LESSER:
|
|
@@ -370,6 +374,9 @@ export function parse_sense_bsc(chain_sense_bsc:Uint8Array) : boolean | string[
|
|
|
370
374
|
case OperatorType.TYPE_LOGIC_OPERATOR_HAS_SUBSTRING:
|
|
371
375
|
case OperatorType.TYPE_LOGIC_ALWAYS_TRUE:
|
|
372
376
|
break;
|
|
377
|
+
case ContextType.TYPE_CONTEXT_FUTURE_ID: // MACHINE-ID
|
|
378
|
+
arr.splice(0, 32);
|
|
379
|
+
break;
|
|
373
380
|
case ValueType.TYPE_STATIC_address:
|
|
374
381
|
//console.log('0x' + bcs.de(BCS.ADDRESS, Uint8Array.from(array)).toString());
|
|
375
382
|
arr.splice(0, 32);
|
|
@@ -392,6 +399,24 @@ export function parse_sense_bsc(chain_sense_bsc:Uint8Array) : boolean | string[
|
|
|
392
399
|
result.push('0x' + bcs.de(BCS.ADDRESS, Uint8Array.from(arr)).toString());
|
|
393
400
|
arr.splice(0, 33); // address + cmd
|
|
394
401
|
break;
|
|
402
|
+
case OperatorType.TYPE_FUTURE_PROGRESS_DYNAMIC_QUERY: // SERVICE-ID
|
|
403
|
+
if (!future_progress) {
|
|
404
|
+
console.error('OperatorType.TYPE_FUTURE_PROGRESS_DYNAMIC_QUERY need object');
|
|
405
|
+
console.log(arr)
|
|
406
|
+
return false; // error
|
|
407
|
+
}
|
|
408
|
+
result.push(future_progress!.shift() as string) // real query object
|
|
409
|
+
arr.splice(0, 33)
|
|
410
|
+
break;
|
|
411
|
+
case OperatorType.TYPE_FUTURE_ORDER_DYNAMIC_QUERY: //
|
|
412
|
+
if (!future_order) {
|
|
413
|
+
console.error('OperatorType.TYPE_FUTURE_ORDER_DYNAMIC_QUERY need object');
|
|
414
|
+
console.log(arr)
|
|
415
|
+
return false; // error
|
|
416
|
+
}
|
|
417
|
+
result.push(future_order!.shift() as string)
|
|
418
|
+
arr.splice(0, 33)
|
|
419
|
+
break;
|
|
395
420
|
default:
|
|
396
421
|
console.error('parse_sense_bsc:undefined');
|
|
397
422
|
console.log(type as number)
|
package/src/index.ts
CHANGED
package/src/passport.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
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, GuardObject, TXB_OBJECT} from './protocol';
|
|
3
|
+
import { PROTOCOL, FnCallType, CLOCK_OBJECT, Query_Param, OBJECTS_TYPE, OBJECTS_TYPE_PREFIX, PassportObject, GuardObject, TXB_OBJECT, ContextType, IsValidAddress} from './protocol';
|
|
4
4
|
import { parse_object_type, array_unique } from './utils';
|
|
5
5
|
import { rpc_sense_objects_fn } from './guard';
|
|
6
|
+
import { BCS } from '@mysten/bcs';
|
|
6
7
|
|
|
7
8
|
export const MAX_GUARD_COUNT = 8;
|
|
8
9
|
|
|
@@ -26,7 +27,6 @@ export const passport_queries = async (guards:string[]) : Promise<Guard_Query_Ob
|
|
|
26
27
|
sense_objects_result = sense_objects_result.concat(value.data);
|
|
27
28
|
});
|
|
28
29
|
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
32
|
return {objectid:value, callback:rpc_query_cmd_fn, data:[]} as Query_Param;
|
|
@@ -58,7 +58,7 @@ export function verify(txb:TransactionBlock, guards:string[], passport_queries:G
|
|
|
58
58
|
|
|
59
59
|
var passport = txb.moveCall({
|
|
60
60
|
target: PROTOCOL.PassportFn('new') as FnCallType,
|
|
61
|
-
arguments: [ TXB_OBJECT(txb, guards[0])
|
|
61
|
+
arguments: [ TXB_OBJECT(txb, guards[0])]
|
|
62
62
|
});
|
|
63
63
|
|
|
64
64
|
// add others guards, if any
|
|
@@ -71,24 +71,34 @@ export function verify(txb:TransactionBlock, guards:string[], passport_queries:G
|
|
|
71
71
|
|
|
72
72
|
// rules: 'verify' & 'query' in turns;'verify' at final end.
|
|
73
73
|
for (let i = 0; i < passport_queries.length; i++) {
|
|
74
|
-
txb.moveCall({
|
|
74
|
+
let res = txb.moveCall({
|
|
75
75
|
target: PROTOCOL.PassportFn('passport_verify') as FnCallType,
|
|
76
|
-
arguments: [ passport ]
|
|
76
|
+
arguments: [ passport, txb.object(CLOCK_OBJECT), ]
|
|
77
77
|
});
|
|
78
78
|
txb.moveCall({
|
|
79
79
|
target: passport_queries[i].target as FnCallType,
|
|
80
|
-
arguments: [ txb.object(passport_queries[i].object), passport ],
|
|
80
|
+
arguments: [ txb.object(passport_queries[i].object), passport, res ],
|
|
81
81
|
typeArguments: passport_queries[i].types,
|
|
82
82
|
})
|
|
83
83
|
}
|
|
84
84
|
txb.moveCall({
|
|
85
85
|
target: PROTOCOL.PassportFn('passport_verify') as FnCallType,
|
|
86
|
-
arguments: [ passport ]
|
|
86
|
+
arguments: [ passport, txb.object(CLOCK_OBJECT) ]
|
|
87
87
|
});
|
|
88
88
|
|
|
89
89
|
return passport;
|
|
90
90
|
}
|
|
91
91
|
|
|
92
|
+
export function add_context_address(txb:TransactionBlock, passport:PassportObject, type:ContextType, value:string, witness:string) : Boolean {
|
|
93
|
+
if (!IsValidAddress(value) || !IsValidAddress(witness)) return false;
|
|
94
|
+
|
|
95
|
+
txb.moveCall({
|
|
96
|
+
target: PROTOCOL.PassportFn('context_add_address') as FnCallType,
|
|
97
|
+
arguments: [ passport, txb.pure(type, BCS.U8), txb.pure(value, BCS.ADDRESS), txb.pure(witness, BCS.ADDRESS)]
|
|
98
|
+
});
|
|
99
|
+
return true
|
|
100
|
+
}
|
|
101
|
+
|
|
92
102
|
export function destroy(txb:TransactionBlock, passport:PassportObject) : boolean {
|
|
93
103
|
txb.moveCall({
|
|
94
104
|
target: PROTOCOL.PassportFn('destroy') as FnCallType,
|
package/src/protocol.ts
CHANGED
|
@@ -113,6 +113,8 @@ export enum ValueType {
|
|
|
113
113
|
|
|
114
114
|
export enum OperatorType {
|
|
115
115
|
TYPE_DYNAMIC_QUERY = 1, // query wowok object
|
|
116
|
+
TYPE_FUTURE_ORDER_DYNAMIC_QUERY = 2,
|
|
117
|
+
TYPE_FUTURE_PROGRESS_DYNAMIC_QUERY = 3,
|
|
116
118
|
TYPE_LOGIC_OPERATOR_U128_GREATER = 11,
|
|
117
119
|
TYPE_LOGIC_OPERATOR_U128_GREATER_EQUAL = 12,
|
|
118
120
|
TYPE_LOGIC_OPERATOR_U128_LESSER = 13,
|
|
@@ -125,8 +127,8 @@ export enum OperatorType {
|
|
|
125
127
|
|
|
126
128
|
export enum ContextType {
|
|
127
129
|
TYPE_CONTEXT_SIGNER = 60,
|
|
128
|
-
|
|
129
|
-
|
|
130
|
+
TYPE_CONTEXT_CLOCK = 61,
|
|
131
|
+
TYPE_CONTEXT_FUTURE_ID = 62, // TYPE + MACHINE-ID or SERVICE-ID
|
|
130
132
|
}
|
|
131
133
|
|
|
132
134
|
export type Data_Type = ValueType | OperatorType | ContextType;
|
|
@@ -159,7 +161,7 @@ export class Protocol {
|
|
|
159
161
|
case ENTRYPOINT.devnet:
|
|
160
162
|
break;
|
|
161
163
|
case ENTRYPOINT.testnet:
|
|
162
|
-
this.package = "
|
|
164
|
+
this.package = "0x0e4c1b57d596cda9a26a36567c79d94dffc8419e5be7ecf659ce4a7242abaeff";
|
|
163
165
|
this.everyone_guard = "0x78a41fcc4f566360839613f6b917fb101ae015e56b43143f496f265b6422fddc";
|
|
164
166
|
this.graphql = 'https://sui-testnet.mystenlabs.com/graphql';
|
|
165
167
|
break;
|
package/src/service.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { TransactionBlock, type TransactionResult } from '@mysten/sui.js/transactions';
|
|
2
|
-
import { BCS } from '@mysten/bcs';
|
|
2
|
+
import { bcs, BCS, toHEX, fromHEX, getSuiMoveConfig } from '@mysten/bcs';
|
|
3
3
|
import { BCS_CONVERT, array_unique } from './utils'
|
|
4
4
|
import { CLOCK_OBJECT, FnCallType, GuardObject, PROTOCOL, PassportObject, PermissionObject,
|
|
5
5
|
RepositoryObject, MachineObject, ServiceAddress, ServiceObject, IsValidObjects, IsValidArgType, IsValidDesription,
|
|
@@ -72,7 +72,7 @@ export function service_set_description(pay_type:string, txb:TransactionBlock, s
|
|
|
72
72
|
return true
|
|
73
73
|
}
|
|
74
74
|
export function service_set_price(pay_type:string, txb:TransactionBlock, service:ServiceObject, permission:PermissionObject,
|
|
75
|
-
item:string, price:number, passport?:PassportObject) : boolean {
|
|
75
|
+
item:string, price:number, bNotFoundAssert:boolean=true, passport?:PassportObject) : boolean {
|
|
76
76
|
if (!IsValidObjects([service, permission])) return false;
|
|
77
77
|
if (!IsValidArgType(pay_type)) return false;
|
|
78
78
|
if (!IsValidInt(price) || !IsValidName(item)) return false;
|
|
@@ -80,20 +80,22 @@ export function service_set_price(pay_type:string, txb:TransactionBlock, service
|
|
|
80
80
|
if (passport) {
|
|
81
81
|
txb.moveCall({
|
|
82
82
|
target:PROTOCOL.ServiceFn('price_set_with_passport') as FnCallType,
|
|
83
|
-
arguments:[passport, TXB_OBJECT(txb, service), txb.pure(item), txb.pure(price, BCS.U64),
|
|
83
|
+
arguments:[passport, TXB_OBJECT(txb, service), txb.pure(item), txb.pure(price, BCS.U64),
|
|
84
|
+
txb.pure(bNotFoundAssert, BCS.BOOL), TXB_OBJECT(txb, permission)],
|
|
84
85
|
typeArguments:[pay_type]
|
|
85
86
|
})
|
|
86
87
|
} else {
|
|
87
88
|
txb.moveCall({
|
|
88
89
|
target:PROTOCOL.ServiceFn('price_set') as FnCallType,
|
|
89
|
-
arguments:[TXB_OBJECT(txb, service), txb.pure(item), txb.pure(price, BCS.U64),
|
|
90
|
+
arguments:[TXB_OBJECT(txb, service), txb.pure(item), txb.pure(price, BCS.U64),
|
|
91
|
+
txb.pure(bNotFoundAssert, BCS.BOOL), TXB_OBJECT(txb, permission)],
|
|
90
92
|
typeArguments:[pay_type]
|
|
91
93
|
})
|
|
92
94
|
}
|
|
93
95
|
return true
|
|
94
96
|
}
|
|
95
97
|
export function service_set_stock(pay_type:string, txb:TransactionBlock, service:ServiceObject, permission:PermissionObject,
|
|
96
|
-
item:string, stock:number, passport?:PassportObject) : boolean {
|
|
98
|
+
item:string, stock:number, bNotFoundAssert:boolean=true, passport?:PassportObject) : boolean {
|
|
97
99
|
if (!IsValidObjects([service, permission])) return false;
|
|
98
100
|
if (!IsValidArgType(pay_type)) return false;
|
|
99
101
|
if (!IsValidName(item) || !IsValidInt(stock)) return false;
|
|
@@ -101,53 +103,59 @@ export function service_set_stock(pay_type:string, txb:TransactionBlock, service
|
|
|
101
103
|
if (passport) {
|
|
102
104
|
txb.moveCall({
|
|
103
105
|
target:PROTOCOL.ServiceFn('stock_set_with_passport') as FnCallType,
|
|
104
|
-
arguments:[passport, TXB_OBJECT(txb, service), txb.pure(item), txb.pure(stock, BCS.U64),
|
|
106
|
+
arguments:[passport, TXB_OBJECT(txb, service), txb.pure(item), txb.pure(stock, BCS.U64),
|
|
107
|
+
txb.pure(bNotFoundAssert, BCS.BOOL), TXB_OBJECT(txb, permission)],
|
|
105
108
|
typeArguments:[pay_type]
|
|
106
109
|
})
|
|
107
110
|
} else {
|
|
108
111
|
txb.moveCall({
|
|
109
112
|
target:PROTOCOL.ServiceFn('stock_set') as FnCallType,
|
|
110
|
-
arguments:[TXB_OBJECT(txb, service), txb.pure(item), txb.pure(stock, BCS.U64),
|
|
113
|
+
arguments:[TXB_OBJECT(txb, service), txb.pure(item), txb.pure(stock, BCS.U64),
|
|
114
|
+
txb.pure(bNotFoundAssert, BCS.BOOL), TXB_OBJECT(txb, permission)],
|
|
111
115
|
typeArguments:[pay_type]
|
|
112
116
|
})
|
|
113
117
|
}
|
|
114
118
|
return true
|
|
115
119
|
}
|
|
116
120
|
export function service_add_stock(pay_type:string, txb:TransactionBlock, service:ServiceObject, permission:PermissionObject,
|
|
117
|
-
item:string, stock_add:number, passport?:PassportObject) : boolean {
|
|
121
|
+
item:string, stock_add:number, bNotFoundAssert:boolean=true, passport?:PassportObject) : boolean {
|
|
118
122
|
if (!IsValidObjects([service, permission])) return false;
|
|
119
123
|
if (!IsValidArgType(pay_type)) return false;
|
|
120
124
|
if (!IsValidName(item) || !IsValidUint(stock_add)) return false;
|
|
121
125
|
if (passport) {
|
|
122
126
|
txb.moveCall({
|
|
123
127
|
target:PROTOCOL.ServiceFn('stock_add_with_passport') as FnCallType,
|
|
124
|
-
arguments:[passport, TXB_OBJECT(txb, service), txb.pure(item), txb.pure(stock_add, BCS.U64),
|
|
128
|
+
arguments:[passport, TXB_OBJECT(txb, service), txb.pure(item), txb.pure(stock_add, BCS.U64),
|
|
129
|
+
txb.pure(bNotFoundAssert, BCS.BOOL), TXB_OBJECT(txb, permission)],
|
|
125
130
|
typeArguments:[pay_type]
|
|
126
131
|
})
|
|
127
132
|
} else {
|
|
128
133
|
txb.moveCall({
|
|
129
134
|
target:PROTOCOL.ServiceFn('stock_add') as FnCallType,
|
|
130
|
-
arguments:[TXB_OBJECT(txb, service), txb.pure(item), txb.pure(stock_add, BCS.U64),
|
|
135
|
+
arguments:[TXB_OBJECT(txb, service), txb.pure(item), txb.pure(stock_add, BCS.U64),
|
|
136
|
+
txb.pure(bNotFoundAssert, BCS.BOOL), TXB_OBJECT(txb, permission)],
|
|
131
137
|
typeArguments:[pay_type]
|
|
132
138
|
})
|
|
133
139
|
}
|
|
134
140
|
return true
|
|
135
141
|
}
|
|
136
142
|
export function service_reduce_stock(pay_type:string, txb:TransactionBlock, service:ServiceObject, permission:PermissionObject,
|
|
137
|
-
item:string, stock_reduce:number, passport?:PassportObject) : boolean {
|
|
143
|
+
item:string, stock_reduce:number, bNotFoundAssert:boolean=true, passport?:PassportObject) : boolean {
|
|
138
144
|
if (!IsValidObjects([service, permission])) return false;
|
|
139
145
|
if (!IsValidArgType(pay_type)) return false;
|
|
140
146
|
if (!IsValidName(item) || !IsValidUint(stock_reduce)) return false;
|
|
141
147
|
if (passport) {
|
|
142
148
|
txb.moveCall({
|
|
143
149
|
target:PROTOCOL.ServiceFn('stock_reduce_with_passport') as FnCallType,
|
|
144
|
-
arguments:[passport, TXB_OBJECT(txb, service), txb.pure(item), txb.pure(stock_reduce, BCS.U64),
|
|
150
|
+
arguments:[passport, TXB_OBJECT(txb, service), txb.pure(item), txb.pure(stock_reduce, BCS.U64),
|
|
151
|
+
txb.pure(bNotFoundAssert, BCS.BOOL), TXB_OBJECT(txb, permission)],
|
|
145
152
|
typeArguments:[pay_type]
|
|
146
153
|
})
|
|
147
154
|
} else {
|
|
148
155
|
txb.moveCall({
|
|
149
156
|
target:PROTOCOL.ServiceFn('stock_reduce') as FnCallType,
|
|
150
|
-
arguments:[TXB_OBJECT(txb, service), txb.pure(item), txb.pure(stock_reduce, BCS.U64),
|
|
157
|
+
arguments:[TXB_OBJECT(txb, service), txb.pure(item), txb.pure(stock_reduce, BCS.U64),
|
|
158
|
+
txb.pure(bNotFoundAssert, BCS.BOOL), TXB_OBJECT(txb, permission)],
|
|
151
159
|
typeArguments:[pay_type]
|
|
152
160
|
})
|
|
153
161
|
}
|
|
@@ -372,30 +380,44 @@ export type Service_Sale = {
|
|
|
372
380
|
stock:number;
|
|
373
381
|
}
|
|
374
382
|
|
|
375
|
-
export function
|
|
376
|
-
|
|
377
|
-
if (!IsValidObjects([service, permission])) return false;
|
|
378
|
-
if (!IsValidArgType(pay_type)) return false;
|
|
379
|
-
let bValid = true;
|
|
383
|
+
export function is_valid_sale(sales:Service_Sale[]) : boolean {
|
|
384
|
+
let bValid = true; let names:string[] = [];
|
|
380
385
|
sales.forEach((v) => {
|
|
381
386
|
if (!IsValidName(v.item)) bValid = false;
|
|
382
387
|
if (!IsValidInt(v.price)) bValid = false;
|
|
383
|
-
if (!
|
|
388
|
+
if (!IsValidUint(v.stock)) bValid = false;
|
|
389
|
+
if (names.includes(v.item)) bValid = false;
|
|
390
|
+
names.push(v.item)
|
|
384
391
|
})
|
|
392
|
+
return bValid
|
|
393
|
+
}
|
|
394
|
+
export function service_add_sale(pay_type:string, txb:TransactionBlock, service:ServiceObject,
|
|
395
|
+
permission:PermissionObject, sales:Service_Sale[], passport?:PassportObject) : boolean {
|
|
396
|
+
if (!IsValidObjects([service, permission])) return false;
|
|
397
|
+
if (!IsValidArgType(pay_type)) return false;
|
|
398
|
+
if (!sales) return false;
|
|
399
|
+
let bValid = is_valid_sale(sales);
|
|
385
400
|
if (!bValid) return false;
|
|
401
|
+
|
|
402
|
+
let names: string[] = []; let price: number[] = []; let stock: number[] = [];
|
|
403
|
+
sales.forEach((s) => {
|
|
404
|
+
names.push(s.item); price.push(s.price); stock.push(s.stock);
|
|
405
|
+
})
|
|
386
406
|
|
|
387
407
|
if (passport) {
|
|
388
|
-
|
|
408
|
+
txb.moveCall({
|
|
389
409
|
target:PROTOCOL.ServiceFn('sales_add_with_passport') as FnCallType,
|
|
390
|
-
arguments:[passport, TXB_OBJECT(txb, service), txb.pure(
|
|
410
|
+
arguments:[passport, TXB_OBJECT(txb, service), txb.pure(BCS_CONVERT.ser_vector_string(names)),
|
|
411
|
+
txb.pure(BCS_CONVERT.ser_vector_u64(price)), txb.pure(BCS_CONVERT.ser_vector_u64(stock)), TXB_OBJECT(txb, permission)],
|
|
391
412
|
typeArguments:[pay_type]
|
|
392
|
-
})
|
|
413
|
+
})
|
|
393
414
|
} else {
|
|
394
|
-
|
|
415
|
+
txb.moveCall({
|
|
395
416
|
target:PROTOCOL.ServiceFn('sales_add') as FnCallType,
|
|
396
|
-
arguments:[TXB_OBJECT(txb, service), txb.pure(
|
|
417
|
+
arguments:[TXB_OBJECT(txb, service), txb.pure(BCS_CONVERT.ser_vector_string(names)),
|
|
418
|
+
txb.pure(BCS_CONVERT.ser_vector_u64(price)), txb.pure(BCS_CONVERT.ser_vector_u64(stock)), TXB_OBJECT(txb, permission)],
|
|
397
419
|
typeArguments:[pay_type]
|
|
398
|
-
})
|
|
420
|
+
})
|
|
399
421
|
}
|
|
400
422
|
return true
|
|
401
423
|
}
|
|
@@ -803,6 +825,7 @@ export function customer_refund(pay_type:string, txb:TransactionBlock, service:S
|
|
|
803
825
|
}
|
|
804
826
|
export type Service_Buy = {
|
|
805
827
|
item: string;
|
|
828
|
+
max_price: number;
|
|
806
829
|
count: number;
|
|
807
830
|
}
|
|
808
831
|
|
|
@@ -828,42 +851,45 @@ export function buy(pay_type:string, txb:TransactionBlock, service:ServiceObject
|
|
|
828
851
|
if (!IsValidArgType(pay_type)) return false;
|
|
829
852
|
if (!buy_items) return false;
|
|
830
853
|
|
|
831
|
-
let bValid = true;
|
|
854
|
+
let bValid = true; let names:string[] = [];
|
|
832
855
|
buy_items.forEach((v) => {
|
|
833
856
|
if (!IsValidName(v.item)) bValid = false;
|
|
857
|
+
if (!IsValidInt(v.max_price)) bValid = false;
|
|
834
858
|
if (!IsValidUint(v.count)) bValid = false;
|
|
859
|
+
if (names.includes(v.item)) bValid = false;
|
|
860
|
+
names.push(v.item)
|
|
835
861
|
})
|
|
836
862
|
if (!bValid) return false;
|
|
837
863
|
|
|
838
|
-
let
|
|
839
|
-
buy_items.forEach((
|
|
864
|
+
let name:string[] = []; let price:number[] = []; let stock:number[] = []; let order;
|
|
865
|
+
buy_items.forEach((b) => { name.push(b.item); price.push(b.max_price); stock.push(b.count)})
|
|
840
866
|
|
|
841
867
|
if (passport) {
|
|
842
868
|
if (discount) {
|
|
843
869
|
order = txb.moveCall({
|
|
844
870
|
target:PROTOCOL.ServiceFn('dicount_buy_with_passport') as FnCallType,
|
|
845
|
-
arguments: [passport, TXB_OBJECT(txb, service), txb.pure(BCS_CONVERT.ser_vector_string(
|
|
846
|
-
txb.pure(BCS_CONVERT.ser_vector_u64(
|
|
871
|
+
arguments: [passport, TXB_OBJECT(txb, service), txb.pure(BCS_CONVERT.ser_vector_string(name)), txb.pure(BCS_CONVERT.ser_vector_u64(price)),
|
|
872
|
+
txb.pure(BCS_CONVERT.ser_vector_u64(stock)), TXB_OBJECT(txb, coin), TXB_OBJECT(txb, discount), txb.object(CLOCK_OBJECT)],
|
|
847
873
|
typeArguments:[pay_type]
|
|
848
874
|
})} else {
|
|
849
875
|
order = txb.moveCall({
|
|
850
876
|
target:PROTOCOL.ServiceFn('buy_with_passport') as FnCallType,
|
|
851
|
-
arguments: [passport, TXB_OBJECT(txb, service), txb.pure(BCS_CONVERT.ser_vector_string(
|
|
852
|
-
txb.pure(BCS_CONVERT.ser_vector_u64(
|
|
877
|
+
arguments: [passport, TXB_OBJECT(txb, service), txb.pure(BCS_CONVERT.ser_vector_string(name)), txb.pure(BCS_CONVERT.ser_vector_u64(price)),
|
|
878
|
+
txb.pure(BCS_CONVERT.ser_vector_u64(stock)), TXB_OBJECT(txb, coin)],
|
|
853
879
|
typeArguments:[pay_type]
|
|
854
880
|
})}
|
|
855
881
|
} else {
|
|
856
882
|
if (discount) {
|
|
857
883
|
order = txb.moveCall({
|
|
858
884
|
target:PROTOCOL.ServiceFn('disoucnt_buy') as FnCallType,
|
|
859
|
-
arguments: [TXB_OBJECT(txb, service), txb.pure(BCS_CONVERT.ser_vector_string(
|
|
860
|
-
txb.pure(BCS_CONVERT.ser_vector_u64(
|
|
885
|
+
arguments: [TXB_OBJECT(txb, service), txb.pure(BCS_CONVERT.ser_vector_string(name)), txb.pure(BCS_CONVERT.ser_vector_u64(price)),
|
|
886
|
+
txb.pure(BCS_CONVERT.ser_vector_u64(stock)), TXB_OBJECT(txb, coin), TXB_OBJECT(txb, discount), txb.object(CLOCK_OBJECT)],
|
|
861
887
|
typeArguments:[pay_type]
|
|
862
888
|
})} else {
|
|
863
889
|
order = txb.moveCall({
|
|
864
890
|
target:PROTOCOL.ServiceFn('buy') as FnCallType,
|
|
865
|
-
arguments: [TXB_OBJECT(txb, service), txb.pure(BCS_CONVERT.ser_vector_string(
|
|
866
|
-
txb.pure(BCS_CONVERT.ser_vector_u64(
|
|
891
|
+
arguments: [TXB_OBJECT(txb, service), txb.pure(BCS_CONVERT.ser_vector_string(name)), txb.pure(BCS_CONVERT.ser_vector_u64(price)),
|
|
892
|
+
txb.pure(BCS_CONVERT.ser_vector_u64(stock)), TXB_OBJECT(txb, coin)],
|
|
867
893
|
typeArguments:[pay_type]
|
|
868
894
|
})}
|
|
869
895
|
}
|