wowok 1.2.3 → 1.2.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/dist/exception.d.ts +2 -1
- package/dist/exception.d.ts.map +1 -1
- package/dist/exception.js +1 -0
- package/dist/guard.d.ts.map +1 -1
- package/dist/guard.js +26 -25
- package/dist/machine.js +7 -6
- package/dist/passport.d.ts.map +1 -1
- package/dist/passport.js +30 -28
- package/dist/permission.d.ts +3 -3
- package/dist/permission.d.ts.map +1 -1
- package/dist/permission.js +5 -4
- package/dist/progress.d.ts.map +1 -1
- package/dist/progress.js +3 -12
- package/dist/protocol.d.ts +6 -2
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +13 -6
- package/dist/repository.d.ts.map +1 -1
- package/dist/repository.js +5 -15
- package/dist/service.d.ts +10 -7
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +48 -42
- package/dist/utils.d.ts +12 -24
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +164 -67
- package/dist/vote.js +8 -7
- package/package.json +1 -1
- package/src/exception.ts +1 -0
- package/src/guard.ts +26 -25
- package/src/machine.ts +7 -7
- package/src/passport.ts +30 -27
- package/src/permission.ts +5 -6
- package/src/progress.ts +4 -12
- package/src/protocol.ts +13 -6
- package/src/repository.ts +5 -14
- package/src/service.ts +51 -41
- package/src/utils.ts +166 -69
- package/src/vote.ts +8 -8
package/src/utils.ts
CHANGED
|
@@ -2,10 +2,10 @@ import { bcs, BCS, toHEX, fromHEX, getSuiMoveConfig, TypeName, StructTypeDefinit
|
|
|
2
2
|
import { TransactionBlock, Inputs, TransactionResult, TransactionArgument } from '@mysten/sui.js/transactions';
|
|
3
3
|
import { ERROR, Errors } from './exception';
|
|
4
4
|
import { isValidSuiAddress, isValidSuiObjectId } from '@mysten/sui.js/utils'
|
|
5
|
-
|
|
5
|
+
import { ValueType } from './protocol'
|
|
6
6
|
|
|
7
7
|
export const OPTION_NONE = 0;
|
|
8
|
-
export const readOption = (arr: number[], de:
|
|
8
|
+
export const readOption = (arr: number[], de:ValueType) : {bNone:boolean, value:any}=> {
|
|
9
9
|
let o = arr.splice(0, 1);
|
|
10
10
|
if (o[0] == 1) { // true
|
|
11
11
|
return {bNone:false, value:Bcs.getInstance().de(de, Uint8Array.from(arr))};
|
|
@@ -17,6 +17,21 @@ export const readOption = (arr: number[], de:string) : {bNone:boolean, value:any
|
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
+
export const readOptionString = (arr: number[]) : {bNone:boolean, value:any}=> {
|
|
21
|
+
let o = arr.splice(0, 1);
|
|
22
|
+
if (o[0] == 1) { // true
|
|
23
|
+
let r = ulebDecode(Uint8Array.from(arr));
|
|
24
|
+
let value = Bcs.getInstance().de(ValueType.TYPE_STRING, Uint8Array.from(arr));
|
|
25
|
+
arr.splice(0, r.value+r.length);
|
|
26
|
+
return {bNone:false, value:value};
|
|
27
|
+
} else if (o[0] == 0) {
|
|
28
|
+
return {bNone:true, value:OPTION_NONE};
|
|
29
|
+
} else {
|
|
30
|
+
ERROR(Errors.Fail, 'readOption: option invalid')
|
|
31
|
+
return {bNone:true, value:OPTION_NONE}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
20
35
|
export const ulebDecode = (arr: Uint8Array) : {value: number, length: number} => {
|
|
21
36
|
let total = 0;
|
|
22
37
|
let shift = 0;
|
|
@@ -125,63 +140,107 @@ export class Bcs {
|
|
|
125
140
|
};
|
|
126
141
|
return Bcs._instance;
|
|
127
142
|
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
143
|
+
ser(type:ValueType, data:Uint8Array | any) : Uint8Array {
|
|
144
|
+
switch(type) {
|
|
145
|
+
case ValueType.TYPE_BOOL:
|
|
146
|
+
return this.bcs.ser(BCS.BOOL, data).toBytes();
|
|
147
|
+
case ValueType.TYPE_ADDRESS:
|
|
148
|
+
return this.bcs.ser(BCS.ADDRESS, data).toBytes();
|
|
149
|
+
case ValueType.TYPE_U64:
|
|
150
|
+
return this.bcs.ser(BCS.U64, data).toBytes();
|
|
151
|
+
case ValueType.TYPE_U8:
|
|
152
|
+
return this.bcs.ser(BCS.U8, data).toBytes();
|
|
153
|
+
case ValueType.TYPE_VEC_U8:
|
|
154
|
+
return this.bcs.ser('vector<u8>', data).toBytes();
|
|
155
|
+
case ValueType.TYPE_U128:
|
|
156
|
+
return this.bcs.ser(BCS.U128, data).toBytes();
|
|
157
|
+
case ValueType.TYPE_VEC_ADDRESS:
|
|
158
|
+
return this.bcs.ser('vector<address>', data).toBytes();
|
|
159
|
+
case ValueType.TYPE_VEC_BOOL:
|
|
160
|
+
return this.bcs.ser('vector<bool>', data).toBytes();
|
|
161
|
+
case ValueType.TYPE_VEC_VEC_U8:
|
|
162
|
+
return this.bcs.ser('vector<vector<u8>>', data).toBytes();
|
|
163
|
+
case ValueType.TYPE_VEC_U64:
|
|
164
|
+
return this.bcs.ser('vector<u64>', data).toBytes();
|
|
165
|
+
case ValueType.TYPE_VEC_U128:
|
|
166
|
+
return this.bcs.ser('vector<u128>', data).toBytes();
|
|
167
|
+
case ValueType.TYPE_OPTION_ADDRESS:
|
|
168
|
+
return this.bcs.ser('Option<address>', {'some': data}).toBytes();
|
|
169
|
+
case ValueType.TYPE_OPTION_BOOL:
|
|
170
|
+
return this.bcs.ser('Option<bool>', {'some': data}).toBytes();
|
|
171
|
+
case ValueType.TYPE_OPTION_U8:
|
|
172
|
+
return this.bcs.ser('Option<u8>', {'some': data}).toBytes();
|
|
173
|
+
case ValueType.TYPE_OPTION_U64:
|
|
174
|
+
return this.bcs.ser('Option<u64>', {'some': data}).toBytes();
|
|
175
|
+
case ValueType.TYPE_OPTION_U128:
|
|
176
|
+
return this.bcs.ser('Option<u128>', {'some': data}).toBytes();
|
|
177
|
+
case ValueType.TYPE_OPTION_U256:
|
|
178
|
+
return this.bcs.ser('Option<u256>', {'some': data}).toBytes();
|
|
179
|
+
case ValueType.TYPE_OPTION_STRING:
|
|
180
|
+
return this.bcs.ser('Option<string>', {'some': data}).toBytes();
|
|
181
|
+
case ValueType.TYPE_VEC_U256:
|
|
182
|
+
return this.bcs.ser('vector<u256>', data).toBytes();
|
|
183
|
+
case ValueType.TYPE_U256:
|
|
184
|
+
return this.bcs.ser(BCS.U256, data).toBytes();
|
|
185
|
+
case ValueType.TYPE_STRING:
|
|
186
|
+
return this.bcs.ser(BCS.STRING, data).toBytes();
|
|
187
|
+
case ValueType.TYPE_VEC_STRING:
|
|
188
|
+
return this.bcs.ser('vector<string>', data).toBytes();
|
|
189
|
+
default:
|
|
190
|
+
ERROR(Errors.bcsTypeInvalid, 'ser');
|
|
191
|
+
}
|
|
192
|
+
return new Uint8Array();
|
|
157
193
|
}
|
|
158
194
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
195
|
+
de(type:ValueType, data:Uint8Array | any) : any {
|
|
196
|
+
switch(type) {
|
|
197
|
+
case ValueType.TYPE_BOOL:
|
|
198
|
+
return this.bcs.de(BCS.BOOL, data);
|
|
199
|
+
case ValueType.TYPE_ADDRESS:
|
|
200
|
+
return this.bcs.de(BCS.ADDRESS, data);
|
|
201
|
+
case ValueType.TYPE_U64:
|
|
202
|
+
return this.bcs.de(BCS.U64, data);
|
|
203
|
+
case ValueType.TYPE_U8:
|
|
204
|
+
return this.bcs.de(BCS.U8, data);
|
|
205
|
+
case ValueType.TYPE_VEC_U8:
|
|
206
|
+
return this.bcs.de('vector<u8>', data);
|
|
207
|
+
case ValueType.TYPE_U128:
|
|
208
|
+
return this.bcs.de(BCS.U128, data);
|
|
209
|
+
case ValueType.TYPE_VEC_ADDRESS:
|
|
210
|
+
return this.bcs.de('vector<address>', data);
|
|
211
|
+
case ValueType.TYPE_VEC_BOOL:
|
|
212
|
+
return this.bcs.de('vector<bool>', data);
|
|
213
|
+
case ValueType.TYPE_VEC_VEC_U8:
|
|
214
|
+
return this.bcs.de('vector<vector<u8>>', data);
|
|
215
|
+
case ValueType.TYPE_VEC_U64:
|
|
216
|
+
return this.bcs.de('vector<u64>', data);
|
|
217
|
+
case ValueType.TYPE_VEC_U128:
|
|
218
|
+
return this.bcs.de('vector<u128>', data);
|
|
219
|
+
case ValueType.TYPE_OPTION_ADDRESS:
|
|
220
|
+
return this.bcs.de('Option<address>', data);
|
|
221
|
+
case ValueType.TYPE_OPTION_BOOL:
|
|
222
|
+
return this.bcs.de('Option<bool>', data);
|
|
223
|
+
case ValueType.TYPE_OPTION_U8:
|
|
224
|
+
return this.bcs.de('Option<u8>', data);
|
|
225
|
+
case ValueType.TYPE_OPTION_U64:
|
|
226
|
+
return this.bcs.de('Option<u64>', data);
|
|
227
|
+
case ValueType.TYPE_OPTION_U128:
|
|
228
|
+
return this.bcs.de('Option<u128>', data);
|
|
229
|
+
case ValueType.TYPE_OPTION_U256:
|
|
230
|
+
return this.bcs.de('Option<u256>', data);
|
|
231
|
+
case ValueType.TYPE_OPTION_STRING:
|
|
232
|
+
return this.bcs.de('Option<string>', data);
|
|
233
|
+
case ValueType.TYPE_VEC_U256:
|
|
234
|
+
return this.bcs.de('vector<u256>', data);
|
|
235
|
+
case ValueType.TYPE_STRING:
|
|
236
|
+
return this.bcs.de(BCS.STRING, data);
|
|
237
|
+
case ValueType.TYPE_VEC_STRING:
|
|
238
|
+
return this.bcs.de('vector<string>', data);
|
|
239
|
+
case ValueType.TYPE_U256:
|
|
240
|
+
return this.bcs.de(BCS.U256, data);
|
|
241
|
+
default:
|
|
242
|
+
ERROR(Errors.bcsTypeInvalid, 'de');
|
|
243
|
+
}
|
|
185
244
|
}
|
|
186
245
|
}
|
|
187
246
|
|
|
@@ -239,11 +298,44 @@ export const IsValidDesription = (description:string) : boolean => { return desc
|
|
|
239
298
|
export const IsValidName = (name:string) : boolean => { if(!name) return false; return name.length <= MAX_NAME_LENGTH && name.length != 0 }
|
|
240
299
|
export const IsValidName_AllowEmpty = (name:string) : boolean => { return name.length <= MAX_NAME_LENGTH }
|
|
241
300
|
export const IsValidEndpoint = (endpoint:string) : boolean => { if (!endpoint) return false; return endpoint.length <= MAX_ENDPOINT_LENGTH }
|
|
242
|
-
export const IsValidAddress = (addr:string) : boolean => {
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
301
|
+
export const IsValidAddress = (addr:string) : boolean => {
|
|
302
|
+
if (!addr || !isValidSuiAddress(addr)) {
|
|
303
|
+
return false;
|
|
304
|
+
}
|
|
305
|
+
return true
|
|
306
|
+
}
|
|
307
|
+
export const IsValidArgType = (argType: string) : boolean => {
|
|
308
|
+
if (!argType || argType.length === 0) {
|
|
309
|
+
return false;
|
|
310
|
+
}
|
|
311
|
+
let arr = argType.split('::');
|
|
312
|
+
if (arr.length !== 3) {
|
|
313
|
+
return false;
|
|
314
|
+
}
|
|
315
|
+
if (!IsValidAddress(arr[0]) || arr[1].length === 0 || arr[2].length === 0) {
|
|
316
|
+
return false;
|
|
317
|
+
}
|
|
318
|
+
return true;
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
export const IsValidUint = (value: number | string) : boolean => {
|
|
322
|
+
if (typeof(value) === 'string') {
|
|
323
|
+
value = parseInt(value as string);
|
|
324
|
+
}
|
|
325
|
+
return Number.isSafeInteger(value) && value > 0
|
|
326
|
+
}
|
|
327
|
+
export const IsValidInt = (value: number | string) : boolean => {
|
|
328
|
+
if (typeof(value) === 'string') {
|
|
329
|
+
value = parseInt(value as string);
|
|
330
|
+
}
|
|
331
|
+
return Number.isSafeInteger(value)
|
|
332
|
+
}
|
|
333
|
+
export const IsValidPercent = (value: number | string) : boolean => {
|
|
334
|
+
if (typeof(value) === 'string') {
|
|
335
|
+
value = parseInt(value as string);
|
|
336
|
+
}
|
|
337
|
+
return Number.isSafeInteger(value) && value > 0 && value <= 100
|
|
338
|
+
}
|
|
247
339
|
export const IsValidArray = (arr: any[], validFunc:any) : boolean => {
|
|
248
340
|
let bValid = true;
|
|
249
341
|
arr.forEach((v) => {
|
|
@@ -262,13 +354,18 @@ export type ArgType = {
|
|
|
262
354
|
token: string;
|
|
263
355
|
}
|
|
264
356
|
export const ParseType = (type:string) : ArgType => {
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
let
|
|
268
|
-
if (
|
|
269
|
-
let coin = type.slice(i+
|
|
270
|
-
|
|
271
|
-
|
|
357
|
+
if (type) {
|
|
358
|
+
const COIN = '0x0000000000000000000000000000000000000000000000000000000000000002::coin::Coin<';
|
|
359
|
+
let i = type.indexOf(COIN);
|
|
360
|
+
if (i > 0) {
|
|
361
|
+
let coin = type.slice(i+COIN.length, type.length-1);
|
|
362
|
+
if (coin.indexOf('<') === -1) {
|
|
363
|
+
while (coin[coin.length-1] == '>') {
|
|
364
|
+
coin = coin.slice(0, -1);
|
|
365
|
+
};
|
|
366
|
+
let t = coin.lastIndexOf('::');
|
|
367
|
+
return {isCoin:true, coin:coin, token:coin.slice(t+2)}
|
|
368
|
+
}
|
|
272
369
|
}
|
|
273
370
|
}
|
|
274
371
|
return {isCoin:false, coin:'', token:''}
|
package/src/vote.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { BCS } from '@mysten/bcs';
|
|
|
2
2
|
import { FnCallType, PassportObject, PermissionObject, GuardObject, VoteAddress, Protocol, TxbObject} from './protocol';
|
|
3
3
|
import { IsValidDesription, IsValidUint, IsValidAddress, OptionNone, Bcs, array_unique, IsValidArray, IsValidName } from './utils';
|
|
4
4
|
import { ERROR, Errors } from './exception';
|
|
5
|
-
import {
|
|
5
|
+
import { ValueType } from './protocol';
|
|
6
6
|
|
|
7
7
|
export const MAX_AGREES_COUNT = 200;
|
|
8
8
|
export const MAX_CHOICE_COUNT = 200;
|
|
@@ -51,7 +51,7 @@ export class Vote {
|
|
|
51
51
|
|
|
52
52
|
let v = new Vote(protocol, permission);
|
|
53
53
|
let txb = protocol.CurrentSession();
|
|
54
|
-
let reference = reference_address? txb.pure(Bcs.getInstance().
|
|
54
|
+
let reference = reference_address? txb.pure(Bcs.getInstance().ser(ValueType.TYPE_OPTION_ADDRESS, reference_address)) : OptionNone(txb);
|
|
55
55
|
let choice_count = max_choice_count ? max_choice_count : 1;
|
|
56
56
|
|
|
57
57
|
if (passport) {
|
|
@@ -112,7 +112,7 @@ export class Vote {
|
|
|
112
112
|
}
|
|
113
113
|
|
|
114
114
|
let txb = this.protocol.CurrentSession();
|
|
115
|
-
let reference = reference_address? txb.pure(Bcs.getInstance().
|
|
115
|
+
let reference = reference_address? txb.pure(Bcs.getInstance().ser(ValueType.TYPE_OPTION_ADDRESS, reference_address)) : OptionNone(txb);
|
|
116
116
|
if (passport) {
|
|
117
117
|
txb.moveCall({
|
|
118
118
|
target:this.protocol.VoteFn('reference_set_with_passport') as FnCallType,
|
|
@@ -207,7 +207,7 @@ export class Vote {
|
|
|
207
207
|
let txb = this.protocol.CurrentSession();
|
|
208
208
|
options.forEach((option) => {
|
|
209
209
|
let reference = option?.reference_address ?
|
|
210
|
-
txb.pure(Bcs.getInstance().
|
|
210
|
+
txb.pure(Bcs.getInstance().ser(ValueType.TYPE_OPTION_ADDRESS, option.reference_address)) :
|
|
211
211
|
OptionNone(txb);
|
|
212
212
|
|
|
213
213
|
if (passport) {
|
|
@@ -244,7 +244,7 @@ export class Vote {
|
|
|
244
244
|
txb.moveCall({
|
|
245
245
|
target:this.protocol.VoteFn('agrees_remove_with_passport') as FnCallType,
|
|
246
246
|
arguments:[passport, Protocol.TXB_OBJECT(txb, this.object),
|
|
247
|
-
txb.pure(Bcs.getInstance().
|
|
247
|
+
txb.pure(Bcs.getInstance().ser(ValueType.TYPE_VEC_STRING, array_unique(options))),
|
|
248
248
|
Protocol.TXB_OBJECT(txb, this.permission)]
|
|
249
249
|
})
|
|
250
250
|
}
|
|
@@ -258,7 +258,7 @@ export class Vote {
|
|
|
258
258
|
txb.moveCall({
|
|
259
259
|
target:this.protocol.VoteFn('agrees_remove') as FnCallType,
|
|
260
260
|
arguments:[Protocol.TXB_OBJECT(txb, this.object),
|
|
261
|
-
txb.pure(Bcs.getInstance().
|
|
261
|
+
txb.pure(Bcs.getInstance().ser(ValueType.TYPE_VEC_STRING, array_unique(options))),
|
|
262
262
|
Protocol.TXB_OBJECT(txb, this.permission)]
|
|
263
263
|
})
|
|
264
264
|
}
|
|
@@ -360,13 +360,13 @@ export class Vote {
|
|
|
360
360
|
txb.moveCall({
|
|
361
361
|
target:this.protocol.VoteFn('with_passport') as FnCallType,
|
|
362
362
|
arguments:[passport, Protocol.TXB_OBJECT(txb, this.object),
|
|
363
|
-
txb.pure(Bcs.getInstance().
|
|
363
|
+
txb.pure(Bcs.getInstance().ser(ValueType.TYPE_VEC_STRING, array_unique(options)))]
|
|
364
364
|
})
|
|
365
365
|
} else {
|
|
366
366
|
txb.moveCall({
|
|
367
367
|
target:this.protocol.VoteFn('this.object') as FnCallType,
|
|
368
368
|
arguments:[Protocol.TXB_OBJECT(txb, this.object),
|
|
369
|
-
txb.pure(Bcs.getInstance().
|
|
369
|
+
txb.pure(Bcs.getInstance().ser(ValueType.TYPE_VEC_STRING, array_unique(options)))]
|
|
370
370
|
})
|
|
371
371
|
}
|
|
372
372
|
|