wowok 1.7.13 → 1.7.16
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/arbitration.d.ts.map +1 -1
- package/dist/arbitration.js +21 -32
- package/dist/arbitration.js.map +1 -1
- package/dist/entity.d.ts +1 -0
- package/dist/entity.d.ts.map +1 -1
- package/dist/entity.js +12 -6
- package/dist/entity.js.map +1 -1
- package/dist/exception.d.ts +2 -1
- package/dist/exception.d.ts.map +1 -1
- package/dist/exception.js +1 -0
- package/dist/exception.js.map +1 -1
- package/dist/guard.d.ts.map +1 -1
- package/dist/guard.js +8 -4
- package/dist/guard.js.map +1 -1
- package/dist/payment.d.ts +2 -2
- package/dist/payment.d.ts.map +1 -1
- package/dist/payment.js +2 -2
- package/dist/payment.js.map +1 -1
- package/dist/protocol.d.ts +21 -19
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +211 -58
- package/dist/protocol.js.map +1 -1
- package/dist/service.d.ts +2 -2
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +5 -6
- package/dist/service.js.map +1 -1
- package/package.json +5 -2
- package/src/arbitration.ts +0 -551
- package/src/demand.ts +0 -300
- package/src/entity.ts +0 -171
- package/src/exception.ts +0 -37
- package/src/guard.ts +0 -810
- package/src/index.ts +0 -40
- package/src/machine.ts +0 -542
- package/src/passport.ts +0 -777
- package/src/payment.ts +0 -94
- package/src/permission.ts +0 -550
- package/src/progress.ts +0 -367
- package/src/protocol.ts +0 -549
- package/src/repository.ts +0 -680
- package/src/resource.ts +0 -155
- package/src/service.ts +0 -1349
- package/src/treasury.ts +0 -425
- package/src/utils.ts +0 -660
- package/src/wowok.ts +0 -70
- package/tsconfig.json +0 -30
- package/tsconfig.tsbuildinfo +0 -1
- package/webpack.config.cjs +0 -23
package/src/utils.ts
DELETED
|
@@ -1,660 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
import { SuiObjectResponse, DynamicFieldPage } from '@mysten/sui/client';
|
|
3
|
-
import { ERROR, Errors } from './exception.js';
|
|
4
|
-
import { isValidSuiAddress, normalizeSuiAddress} from '@mysten/sui/utils'
|
|
5
|
-
import { RepositoryValueType, ValueType, Protocol, ContextType, OperatorType } from './protocol.js'
|
|
6
|
-
import { bcs } from '@mysten/sui/bcs';
|
|
7
|
-
|
|
8
|
-
export const MAX_U8 = BigInt('255');
|
|
9
|
-
export const MAX_U64 = BigInt('18446744073709551615');
|
|
10
|
-
export const MAX_U128 = BigInt('340282366920938463463374607431768211455');
|
|
11
|
-
export const MAX_U256 = BigInt('115792089237316195423570985008687907853269984665640564039457584007913129639935');
|
|
12
|
-
|
|
13
|
-
export const OPTION_NONE = 0;
|
|
14
|
-
|
|
15
|
-
export const ValueTypeConvert = (type:ValueType | null | undefined) : RepositoryValueType | number => {
|
|
16
|
-
if (type === ValueType.TYPE_U8 || type === ValueType.TYPE_U64 || type === ValueType.TYPE_U128 ||
|
|
17
|
-
type === ValueType.TYPE_U256) {
|
|
18
|
-
return RepositoryValueType.PositiveNumber
|
|
19
|
-
} else if (type === ValueType.TYPE_VEC_U8 || type === ValueType.TYPE_VEC_U64 || type === ValueType.TYPE_VEC_U128 ||
|
|
20
|
-
type === ValueType.TYPE_VEC_U256|| type === ValueType.TYPE_VEC_BOOL) {
|
|
21
|
-
return RepositoryValueType.PositiveNumber_Vec
|
|
22
|
-
} else if (type === ValueType.TYPE_ADDRESS) {
|
|
23
|
-
return RepositoryValueType.Address
|
|
24
|
-
} else if (type === ValueType.TYPE_VEC_ADDRESS) {
|
|
25
|
-
return RepositoryValueType.Address_Vec
|
|
26
|
-
} else if (type === ValueType.TYPE_STRING) {
|
|
27
|
-
return RepositoryValueType.String
|
|
28
|
-
} else if (type === ValueType.TYPE_VEC_STRING) {
|
|
29
|
-
return RepositoryValueType.String_Vec
|
|
30
|
-
} else if (type === ValueType.TYPE_BOOL) {
|
|
31
|
-
return RepositoryValueType.Bool
|
|
32
|
-
}
|
|
33
|
-
return -1;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
export const readOption = (arr: number[], de:ValueType) : {bNone:boolean, value:any} => {
|
|
37
|
-
let o = arr.splice(0, 1);
|
|
38
|
-
if (o[0] == 1) { // true
|
|
39
|
-
return {bNone:false, value:Bcs.getInstance().de(de, Uint8Array.from(arr))};
|
|
40
|
-
} else if (o[0] == 0) {
|
|
41
|
-
return {bNone:true, value:OPTION_NONE};
|
|
42
|
-
} else {
|
|
43
|
-
ERROR(Errors.Fail, 'readOption: option invalid')
|
|
44
|
-
return {bNone:true, value:OPTION_NONE}
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
export const readOptionString = (arr: number[]) : {bNone:boolean, value:any}=> {
|
|
49
|
-
let o = arr.splice(0, 1);
|
|
50
|
-
if (o[0] == 1) { // true
|
|
51
|
-
let r = ulebDecode(Uint8Array.from(arr));
|
|
52
|
-
let value = Bcs.getInstance().de(ValueType.TYPE_STRING, Uint8Array.from(arr));
|
|
53
|
-
arr.splice(0, r.value+r.length);
|
|
54
|
-
return {bNone:false, value:value};
|
|
55
|
-
} else if (o[0] == 0) {
|
|
56
|
-
return {bNone:true, value:OPTION_NONE};
|
|
57
|
-
} else {
|
|
58
|
-
ERROR(Errors.Fail, 'readOption: option invalid')
|
|
59
|
-
return {bNone:true, value:OPTION_NONE}
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
export const ulebDecode = (arr: Uint8Array) : {value: number, length: number} => {
|
|
64
|
-
let total = 0;
|
|
65
|
-
let shift = 0;
|
|
66
|
-
let len = 0;
|
|
67
|
-
|
|
68
|
-
// eslint-disable-next-line no-constant-condition
|
|
69
|
-
while (true) {
|
|
70
|
-
let byte = arr[len];
|
|
71
|
-
len += 1;
|
|
72
|
-
total |= (byte & 0x7f) << shift;
|
|
73
|
-
if ((byte & 0x80) === 0) {
|
|
74
|
-
break;
|
|
75
|
-
}
|
|
76
|
-
shift += 7;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
return {
|
|
80
|
-
value: total,
|
|
81
|
-
length: len,
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
export const readVec = (arr: any[], cb:(arr:any[], i:number, length:number) => any) : any[] => {
|
|
86
|
-
let r = ulebDecode(Uint8Array.from(arr));
|
|
87
|
-
arr.splice(0, r.length) ;
|
|
88
|
-
|
|
89
|
-
let result = [];
|
|
90
|
-
for (let i = 0; i < r.value; i++) {
|
|
91
|
-
result.push(cb(arr, i, r.value));
|
|
92
|
-
}
|
|
93
|
-
return result;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
export const cb_U8 = (arr:any[], i:number, length:number) : any => {
|
|
97
|
-
return arr.shift();
|
|
98
|
-
}
|
|
99
|
-
export const cb_U64 = (arr:any[], i:number, length:number) : any => {
|
|
100
|
-
return arr.splice(0, 8);
|
|
101
|
-
}
|
|
102
|
-
export const cb_U128 = (arr:any[], i:number, length:number) : any => {
|
|
103
|
-
return arr.splice(0, 16);
|
|
104
|
-
}
|
|
105
|
-
export const cb_U256 = (arr:any[], i:number, length:number) : any => {
|
|
106
|
-
return arr.splice(0, 32);
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
export const concatenate = (resultConstructor:any, ...arrays:any[]) => {
|
|
110
|
-
let totalLength = 0;
|
|
111
|
-
for (const arr of arrays) {
|
|
112
|
-
totalLength += arr.length;
|
|
113
|
-
}
|
|
114
|
-
const result = new resultConstructor(totalLength);
|
|
115
|
-
let offset = 0;
|
|
116
|
-
for (const arr of arrays) {
|
|
117
|
-
result.set(arr, offset);
|
|
118
|
-
offset += arr.length;
|
|
119
|
-
}
|
|
120
|
-
return result;
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
export function deepCopy<T>(obj: T): T {
|
|
124
|
-
if (obj === null || typeof obj !== 'object') {
|
|
125
|
-
return obj;
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
const copy: any = Array.isArray(obj) ? [] : {};
|
|
129
|
-
for (const key in obj) {
|
|
130
|
-
if (obj.hasOwnProperty(key)) {
|
|
131
|
-
copy[key] = deepCopy(obj[key]);
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
return copy;
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
export const parseObjectType = (chain_type:string | null | undefined, header:string='payment::Payment<') : string => {
|
|
138
|
-
if (chain_type) {
|
|
139
|
-
const i = chain_type.indexOf(header);
|
|
140
|
-
if (i > 0) {
|
|
141
|
-
let r = chain_type.slice(i + header.length, chain_type.length-1);
|
|
142
|
-
return r
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
return '';
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
export const array_equal = (arr1: any[], arr2: any[]) => {
|
|
149
|
-
if (arr1.length !== arr2.length) {
|
|
150
|
-
return false;
|
|
151
|
-
}
|
|
152
|
-
return !arr1.some((item) => !arr2.includes(item));
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
export const array_unique = (arr:any[]) : any[] => {
|
|
156
|
-
var newArr = [];
|
|
157
|
-
for(var i = 0; i < arr.length; i++) {
|
|
158
|
-
if(newArr.indexOf(arr[i]) == -1) {
|
|
159
|
-
newArr.push(arr[i]);
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
return newArr;
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
export function capitalize (s:string) : string {
|
|
166
|
-
return s && s[0].toUpperCase() + s.slice(1)
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
// for: "0xsdjfkskf<0x2::sui::coin<xxx>, 0xfdfff<>>"
|
|
170
|
-
export function parse_object_type(object_data:string) : string[] {
|
|
171
|
-
var object_type : string[] = [];
|
|
172
|
-
let type_pos = object_data.indexOf('<');
|
|
173
|
-
if (type_pos >= 0) {
|
|
174
|
-
let t = object_data.slice((type_pos+1), object_data.length-1);
|
|
175
|
-
object_type = t.split(',');
|
|
176
|
-
}
|
|
177
|
-
return object_type;
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
export class Bcs {
|
|
181
|
-
private static _instance : any;
|
|
182
|
-
|
|
183
|
-
private VecMapStruct = bcs.struct('VecMap', {
|
|
184
|
-
contents: bcs.vector(bcs.tuple([bcs.string(), bcs.string()])),
|
|
185
|
-
});
|
|
186
|
-
|
|
187
|
-
private EntStruct = bcs.struct('EntStruct', {
|
|
188
|
-
description: bcs.string(),
|
|
189
|
-
info: this.VecMapStruct,
|
|
190
|
-
resource: bcs.option(bcs.Address),
|
|
191
|
-
like: bcs.u32(),
|
|
192
|
-
dislike: bcs.u32(),
|
|
193
|
-
});
|
|
194
|
-
private TagStruct = bcs.struct('TagStruct', {
|
|
195
|
-
nick: bcs.string(),
|
|
196
|
-
tags: bcs.vector(bcs.string()),
|
|
197
|
-
})
|
|
198
|
-
private Guards = bcs.struct('Guards', {
|
|
199
|
-
address: bcs.option(bcs.Address),
|
|
200
|
-
})
|
|
201
|
-
private Perm = bcs.struct('Perm', {
|
|
202
|
-
index: bcs.u64(),
|
|
203
|
-
guard: bcs.option(bcs.Address)
|
|
204
|
-
})
|
|
205
|
-
private Perms = bcs.struct('Perms', {
|
|
206
|
-
perms: bcs.vector(this.Perm),
|
|
207
|
-
})
|
|
208
|
-
|
|
209
|
-
private constructor() { }
|
|
210
|
-
static getInstance() : Bcs {
|
|
211
|
-
if (!Bcs._instance) {
|
|
212
|
-
Bcs._instance = new Bcs();
|
|
213
|
-
};
|
|
214
|
-
return Bcs._instance;
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
ser_option_u32(data:Uint8Array | any) : Uint8Array {
|
|
218
|
-
return bcs.option(bcs.u32()).serialize(data).toBytes();
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
ser(type:ValueType | ContextType, data:Uint8Array | any) : Uint8Array {
|
|
222
|
-
switch(type) {
|
|
223
|
-
case ValueType.TYPE_BOOL:
|
|
224
|
-
return bcs.bool().serialize(data).toBytes();
|
|
225
|
-
case ValueType.TYPE_ADDRESS:
|
|
226
|
-
return bcs.Address.serialize(data).toBytes();
|
|
227
|
-
case ValueType.TYPE_U64:
|
|
228
|
-
return bcs.u64().serialize(data).toBytes();
|
|
229
|
-
case ValueType.TYPE_U8:
|
|
230
|
-
return bcs.u8().serialize(data).toBytes();
|
|
231
|
-
case ValueType.TYPE_VEC_U8:
|
|
232
|
-
return bcs.vector(bcs.u8()).serialize(data).toBytes();
|
|
233
|
-
case ValueType.TYPE_U128:
|
|
234
|
-
return bcs.u128().serialize(data).toBytes();
|
|
235
|
-
case ValueType.TYPE_VEC_ADDRESS:
|
|
236
|
-
return bcs.vector(bcs.Address).serialize(data).toBytes();
|
|
237
|
-
case ValueType.TYPE_VEC_BOOL:
|
|
238
|
-
return bcs.vector(bcs.bool()).serialize(data).toBytes();
|
|
239
|
-
case ValueType.TYPE_VEC_VEC_U8:
|
|
240
|
-
return bcs.vector(bcs.vector(bcs.u8())).serialize(data).toBytes();
|
|
241
|
-
case ValueType.TYPE_VEC_U64:
|
|
242
|
-
return bcs.vector(bcs.u64()).serialize(data).toBytes();
|
|
243
|
-
case ValueType.TYPE_VEC_U128:
|
|
244
|
-
return bcs.vector(bcs.u128()).serialize(data).toBytes();
|
|
245
|
-
case ValueType.TYPE_OPTION_ADDRESS:
|
|
246
|
-
return bcs.option(bcs.Address).serialize(data).toBytes();
|
|
247
|
-
case ValueType.TYPE_OPTION_BOOL:
|
|
248
|
-
return bcs.option(bcs.bool()).serialize(data).toBytes();
|
|
249
|
-
case ValueType.TYPE_OPTION_U8:
|
|
250
|
-
return bcs.option(bcs.u8()).serialize(data).toBytes();
|
|
251
|
-
case ValueType.TYPE_OPTION_U64:
|
|
252
|
-
return bcs.option(bcs.u64()).serialize(data).toBytes();
|
|
253
|
-
case ValueType.TYPE_OPTION_U128:
|
|
254
|
-
return bcs.option(bcs.u128()).serialize(data).toBytes();
|
|
255
|
-
case ValueType.TYPE_OPTION_U256:
|
|
256
|
-
return bcs.option(bcs.u256()).serialize(data).toBytes();
|
|
257
|
-
case ValueType.TYPE_OPTION_STRING:
|
|
258
|
-
return bcs.option(bcs.string()).serialize(data).toBytes();
|
|
259
|
-
case ValueType.TYPE_VEC_U256:
|
|
260
|
-
return bcs.vector(bcs.u256()).serialize(data).toBytes();
|
|
261
|
-
case ValueType.TYPE_U256:
|
|
262
|
-
return bcs.u256().serialize(data).toBytes();
|
|
263
|
-
case ValueType.TYPE_STRING:
|
|
264
|
-
return bcs.string().serialize(data).toBytes();
|
|
265
|
-
case ValueType.TYPE_VEC_STRING:
|
|
266
|
-
return bcs.vector(bcs.string()).serialize(data).toBytes();
|
|
267
|
-
default:
|
|
268
|
-
ERROR(Errors.bcsTypeInvalid, 'ser');
|
|
269
|
-
}
|
|
270
|
-
return new Uint8Array();
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
de(type:ValueType, data:Uint8Array | any) : any {
|
|
274
|
-
switch(type) {
|
|
275
|
-
case ValueType.TYPE_BOOL:
|
|
276
|
-
return bcs.bool().parse(data);
|
|
277
|
-
case ValueType.TYPE_ADDRESS:
|
|
278
|
-
return bcs.Address.parse(data);
|
|
279
|
-
case ValueType.TYPE_U64:
|
|
280
|
-
return bcs.u64().parse(data);
|
|
281
|
-
case ValueType.TYPE_U8:
|
|
282
|
-
return bcs.u8().parse(data);
|
|
283
|
-
case ValueType.TYPE_VEC_U8:
|
|
284
|
-
return bcs.vector(bcs.u8()).parse(data);
|
|
285
|
-
case ValueType.TYPE_U128:
|
|
286
|
-
return bcs.u128().parse(data);
|
|
287
|
-
case ValueType.TYPE_VEC_ADDRESS:
|
|
288
|
-
return bcs.vector(bcs.Address).parse(data);
|
|
289
|
-
case ValueType.TYPE_VEC_BOOL:
|
|
290
|
-
return bcs.vector(bcs.bool()).parse(data);
|
|
291
|
-
case ValueType.TYPE_VEC_VEC_U8:
|
|
292
|
-
return bcs.vector(bcs.vector(bcs.u8())).parse(data);
|
|
293
|
-
case ValueType.TYPE_VEC_U64:
|
|
294
|
-
return bcs.vector(bcs.u64()).parse(data);
|
|
295
|
-
case ValueType.TYPE_VEC_U128:
|
|
296
|
-
return bcs.vector(bcs.u128()).parse(data);
|
|
297
|
-
case ValueType.TYPE_OPTION_ADDRESS:
|
|
298
|
-
return bcs.option(bcs.Address).parse(data);
|
|
299
|
-
case ValueType.TYPE_OPTION_BOOL:
|
|
300
|
-
return bcs.option(bcs.bool()).parse(data);
|
|
301
|
-
case ValueType.TYPE_OPTION_U8:
|
|
302
|
-
return bcs.option(bcs.u8()).parse(data);
|
|
303
|
-
case ValueType.TYPE_OPTION_U64:
|
|
304
|
-
return bcs.option(bcs.u64()).parse(data);
|
|
305
|
-
case ValueType.TYPE_OPTION_U128:
|
|
306
|
-
return bcs.option(bcs.u128()).parse(data);
|
|
307
|
-
case ValueType.TYPE_OPTION_U256:
|
|
308
|
-
return bcs.option(bcs.u256()).parse(data);
|
|
309
|
-
case ValueType.TYPE_OPTION_STRING:
|
|
310
|
-
return bcs.option(bcs.string()).parse(data);
|
|
311
|
-
case ValueType.TYPE_VEC_U256:
|
|
312
|
-
return bcs.vector(bcs.u256()).parse(data);
|
|
313
|
-
case ValueType.TYPE_STRING:
|
|
314
|
-
return bcs.string().parse(data);
|
|
315
|
-
case ValueType.TYPE_VEC_STRING:
|
|
316
|
-
return bcs.vector(bcs.string()).parse(data);
|
|
317
|
-
case ValueType.TYPE_U256:
|
|
318
|
-
return bcs.u256().parse(data);
|
|
319
|
-
default:
|
|
320
|
-
ERROR(Errors.bcsTypeInvalid, 'de');
|
|
321
|
-
}
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
de_ent(data:Uint8Array | undefined) : any | undefined {
|
|
325
|
-
if (!data || data.length < 2) return undefined
|
|
326
|
-
const struct_vec = bcs.vector(bcs.u8()).parse(data);
|
|
327
|
-
return this.EntStruct.parse(Uint8Array.from(struct_vec))
|
|
328
|
-
}
|
|
329
|
-
|
|
330
|
-
de_tags(data:Uint8Array | undefined) : any | undefined {
|
|
331
|
-
if (!data || data.length === 0) return undefined;
|
|
332
|
-
const struct_vec = bcs.vector(bcs.u8()).parse(data);
|
|
333
|
-
return this.TagStruct.parse(Uint8Array.from(struct_vec));
|
|
334
|
-
}
|
|
335
|
-
de_perms(data:Uint8Array | undefined) : any | undefined {
|
|
336
|
-
if (!data || data.length < 1) return undefined
|
|
337
|
-
const r = this.Perms.parse(data);
|
|
338
|
-
return r.perms.map((v:any) => { //@ none, some
|
|
339
|
-
return {index: v?.index, guard:v?.guard ?? undefined }
|
|
340
|
-
})
|
|
341
|
-
}
|
|
342
|
-
}
|
|
343
|
-
|
|
344
|
-
export function stringToUint8Array(str:string) {
|
|
345
|
-
const encoder = new TextEncoder();
|
|
346
|
-
const view = encoder.encode(str);
|
|
347
|
-
return new Uint8Array(view.buffer);
|
|
348
|
-
}
|
|
349
|
-
|
|
350
|
-
export function numToUint8Array(num:number) : Uint8Array {
|
|
351
|
-
if (!num) return new Uint8Array(0)
|
|
352
|
-
const a = [];
|
|
353
|
-
a.unshift(num & 255)
|
|
354
|
-
while (num >= 256) {
|
|
355
|
-
num = num >>> 8
|
|
356
|
-
a.unshift(num & 255)
|
|
357
|
-
}
|
|
358
|
-
return new Uint8Array(a)
|
|
359
|
-
}
|
|
360
|
-
|
|
361
|
-
export const isArr = (origin: any): boolean => {
|
|
362
|
-
let str = '[object Array]'
|
|
363
|
-
return Object.prototype.toString.call(origin) == str ? true : false
|
|
364
|
-
}
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
export const deepClone = <T>(origin: T, target?: Record<string, any> | T ): T => {
|
|
368
|
-
let tar = target || {}
|
|
369
|
-
|
|
370
|
-
for (const key in origin) {
|
|
371
|
-
if (Object.prototype.hasOwnProperty.call(origin, key)) {
|
|
372
|
-
if (typeof origin[key] === 'object' && origin[key] !== null) {
|
|
373
|
-
tar[key] = isArr(origin[key]) ? [] : {}
|
|
374
|
-
deepClone(origin[key], tar[key])
|
|
375
|
-
} else {
|
|
376
|
-
tar[key] = origin[key]
|
|
377
|
-
}
|
|
378
|
-
}
|
|
379
|
-
}
|
|
380
|
-
|
|
381
|
-
return tar as T
|
|
382
|
-
}
|
|
383
|
-
|
|
384
|
-
export const MAX_DESCRIPTION_LENGTH = 4000;
|
|
385
|
-
export const MAX_LOCATION_LENGTH = 256;
|
|
386
|
-
export const MAX_NAME_LENGTH = 64;
|
|
387
|
-
export const MAX_ENDPOINT_LENGTH = 1024;
|
|
388
|
-
// export const OptionNone = (txb:TransactionBlock) : TransactionArgument => { return txb.pure([], BCS.U8) };
|
|
389
|
-
export const IsValidStringLength = (str: string, max_len:number) : boolean => {
|
|
390
|
-
return Bcs.getInstance().ser(ValueType.TYPE_STRING, str).length <= max_len
|
|
391
|
-
}
|
|
392
|
-
export const IsValidDesription = (description:string) : boolean => {
|
|
393
|
-
return IsValidStringLength(description, MAX_DESCRIPTION_LENGTH)
|
|
394
|
-
}
|
|
395
|
-
export const IsValidLocation = (location:string) : boolean => {
|
|
396
|
-
return IsValidStringLength(location, MAX_LOCATION_LENGTH)
|
|
397
|
-
}
|
|
398
|
-
export const IsValidName = (name?:string) : boolean => {
|
|
399
|
-
if(!name || name.length === 0) {
|
|
400
|
-
return false;
|
|
401
|
-
}
|
|
402
|
-
return IsValidStringLength(name, MAX_NAME_LENGTH)
|
|
403
|
-
}
|
|
404
|
-
|
|
405
|
-
export const IsValidName_AllowEmpty = (name:string) : boolean => { return IsValidStringLength(name, MAX_NAME_LENGTH)}
|
|
406
|
-
export const IsValidEndpoint = (endpoint:string) : boolean => {
|
|
407
|
-
return (endpoint.length > 0 && endpoint.length <= MAX_ENDPOINT_LENGTH && isValidHttpUrl(endpoint)) ;
|
|
408
|
-
}
|
|
409
|
-
export const IsValidAddress = (addr:string | undefined | null) : boolean => {
|
|
410
|
-
if (!addr || !isValidSuiAddress(addr)) {
|
|
411
|
-
return false;
|
|
412
|
-
}
|
|
413
|
-
return true
|
|
414
|
-
}
|
|
415
|
-
export const IsValidCoinType = (coin_type?:string | null) : boolean => {
|
|
416
|
-
if (!coin_type) {
|
|
417
|
-
return false;
|
|
418
|
-
}
|
|
419
|
-
return coin_type.startsWith('0x2::coin::Coin') || coin_type.startsWith('0x0000000000000000000000000000000000000000000000000000000000000002')
|
|
420
|
-
}
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
export const getUTCDayStartByDivision = (interval=86400000): number => { // 1 day default
|
|
424
|
-
const now = Date.now();
|
|
425
|
-
return Math.floor(now / interval) * interval;
|
|
426
|
-
}
|
|
427
|
-
|
|
428
|
-
export const IsValidBigint = (value:string | number | undefined | bigint, max:bigint=MAX_U256, min?:bigint) : boolean => {
|
|
429
|
-
if (value === '' || value === undefined) return false;
|
|
430
|
-
try {
|
|
431
|
-
const v = BigInt(value);
|
|
432
|
-
if (v <= max) {
|
|
433
|
-
if (min !== undefined) {
|
|
434
|
-
return v >= min;
|
|
435
|
-
}
|
|
436
|
-
return true
|
|
437
|
-
}
|
|
438
|
-
} catch (e) {
|
|
439
|
-
}; return false
|
|
440
|
-
}
|
|
441
|
-
|
|
442
|
-
export const IsValidU8 = (value:string | number | undefined | bigint, min=0) : boolean => {
|
|
443
|
-
return IsValidBigint(value, MAX_U8, BigInt(min))
|
|
444
|
-
}
|
|
445
|
-
export const IsValidU64 = (value:string | number | undefined | bigint, min=0) : boolean => {
|
|
446
|
-
return IsValidBigint(value, MAX_U64, BigInt(min))
|
|
447
|
-
}
|
|
448
|
-
export const IsValidU128 = (value:string | number | undefined | bigint, min=0) : boolean => {
|
|
449
|
-
return IsValidBigint(value, MAX_U128, BigInt(min))
|
|
450
|
-
}
|
|
451
|
-
export const IsValidU256 = (value:string | number | undefined | bigint, min=0) : boolean => {
|
|
452
|
-
return IsValidBigint(value, MAX_U256, BigInt(min))
|
|
453
|
-
}
|
|
454
|
-
|
|
455
|
-
export const IsValidTokenType = (argType?: string) : boolean => {
|
|
456
|
-
if (!argType || argType.length === 0) {
|
|
457
|
-
return false;
|
|
458
|
-
}
|
|
459
|
-
let arr = argType.split('::');
|
|
460
|
-
if (arr.length !== 3) {
|
|
461
|
-
return false;
|
|
462
|
-
}
|
|
463
|
-
if ((!IsValidAddress(arr[0]) && arr[0] != '0x2') || arr[1].length === 0 || arr[2].length === 0) {
|
|
464
|
-
return false;
|
|
465
|
-
}
|
|
466
|
-
return true;
|
|
467
|
-
}
|
|
468
|
-
export const IsValidArgType = (argType?: string) : boolean => {
|
|
469
|
-
if (!argType || argType.length === 0) {
|
|
470
|
-
return false;
|
|
471
|
-
}
|
|
472
|
-
let arr = argType.split('::');
|
|
473
|
-
if (arr.length < 3) {
|
|
474
|
-
return false;
|
|
475
|
-
}
|
|
476
|
-
return true;
|
|
477
|
-
}
|
|
478
|
-
export const IsValidInt = (value: number | string) : boolean => {
|
|
479
|
-
if (typeof(value) === 'string') {
|
|
480
|
-
value = parseInt(value as string);
|
|
481
|
-
}
|
|
482
|
-
return Number.isSafeInteger(value)
|
|
483
|
-
}
|
|
484
|
-
export const IsValidPercent = (value: number | string | bigint) : boolean => {
|
|
485
|
-
return IsValidBigint(value, BigInt(100), BigInt(0))
|
|
486
|
-
}
|
|
487
|
-
|
|
488
|
-
export const IsValidArray = (arr: any, validFunc:any) : boolean => {
|
|
489
|
-
for (let i = 0; i < arr.length; i++) {
|
|
490
|
-
if (!validFunc(arr[i])) {
|
|
491
|
-
return false
|
|
492
|
-
}
|
|
493
|
-
}
|
|
494
|
-
return true
|
|
495
|
-
}
|
|
496
|
-
|
|
497
|
-
export const ResolveU64 = (value:bigint) : bigint => {
|
|
498
|
-
const max = MAX_U64;
|
|
499
|
-
if (value > max) {
|
|
500
|
-
return max;
|
|
501
|
-
} else {
|
|
502
|
-
return value
|
|
503
|
-
}
|
|
504
|
-
}
|
|
505
|
-
|
|
506
|
-
function removeTrailingZeros(numberString: string): string {
|
|
507
|
-
const trimmedString = numberString.trim();
|
|
508
|
-
const decimalIndex = trimmedString.indexOf('.');
|
|
509
|
-
|
|
510
|
-
if (decimalIndex !== -1) {
|
|
511
|
-
let endIndex = trimmedString.length - 1;
|
|
512
|
-
|
|
513
|
-
while (trimmedString[endIndex] === '0') {
|
|
514
|
-
endIndex--;
|
|
515
|
-
}
|
|
516
|
-
|
|
517
|
-
if (trimmedString[endIndex] === '.') {
|
|
518
|
-
endIndex--;
|
|
519
|
-
}
|
|
520
|
-
|
|
521
|
-
return trimmedString.slice(0, endIndex + 1);
|
|
522
|
-
}
|
|
523
|
-
|
|
524
|
-
return trimmedString;
|
|
525
|
-
}
|
|
526
|
-
|
|
527
|
-
export const ResolveBalance = (balance:string, decimals:number) : string => {
|
|
528
|
-
if (!balance) return ''
|
|
529
|
-
if (balance === '0') return '0'
|
|
530
|
-
if (decimals <= 0) return balance;
|
|
531
|
-
var pos = decimals - balance.length;
|
|
532
|
-
if (pos === 0) {
|
|
533
|
-
return removeTrailingZeros('.' + (balance));
|
|
534
|
-
} else if (pos < 0) {
|
|
535
|
-
let start = balance.slice(0, Math.abs(pos));
|
|
536
|
-
let end = balance.slice(Math.abs(pos));
|
|
537
|
-
return removeTrailingZeros(start + '.' + end);
|
|
538
|
-
} else {
|
|
539
|
-
return removeTrailingZeros('.' + balance.padStart(decimals, '0'));
|
|
540
|
-
}
|
|
541
|
-
}
|
|
542
|
-
|
|
543
|
-
export type ArgType = {
|
|
544
|
-
isCoin: boolean;
|
|
545
|
-
coin: string;
|
|
546
|
-
token: string;
|
|
547
|
-
}
|
|
548
|
-
export const ParseType = (type:string) : ArgType => {
|
|
549
|
-
if (type) {
|
|
550
|
-
const COIN = '0x2::coin::Coin<';
|
|
551
|
-
let i = type.indexOf(COIN);
|
|
552
|
-
if (i >= 0) {
|
|
553
|
-
let coin = type.slice(i+COIN.length, type.length-1);
|
|
554
|
-
if (coin.indexOf('<') === -1) {
|
|
555
|
-
while (coin[coin.length-1] == '>') {
|
|
556
|
-
coin = coin.slice(0, -1);
|
|
557
|
-
};
|
|
558
|
-
let t = coin.lastIndexOf('::');
|
|
559
|
-
return {isCoin:true, coin:coin, token:coin.slice(t+2)}
|
|
560
|
-
}
|
|
561
|
-
}
|
|
562
|
-
}
|
|
563
|
-
return {isCoin:false, coin:'', token:''}
|
|
564
|
-
}
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
export function insertAtHead(array:Uint8Array, value:number) {
|
|
568
|
-
const newLength = array.length + 1;
|
|
569
|
-
const newArray = new Uint8Array(newLength);
|
|
570
|
-
newArray.set([value], 0);
|
|
571
|
-
newArray.set(array, 1);
|
|
572
|
-
return newArray;
|
|
573
|
-
}
|
|
574
|
-
|
|
575
|
-
export function toFixed(x:number) {
|
|
576
|
-
let res = '';
|
|
577
|
-
if (Math.abs(x) < 1.0) {
|
|
578
|
-
var e = parseInt(x.toString().split('e-')[1]);
|
|
579
|
-
if (e) {
|
|
580
|
-
x *= Math.pow(10,e-1);
|
|
581
|
-
res = '0.' + (new Array(e)).join('0') + x.toString().substring(2);
|
|
582
|
-
}
|
|
583
|
-
} else {
|
|
584
|
-
var e = parseInt(x.toString().split('+')[1]);
|
|
585
|
-
if (e > 20) {
|
|
586
|
-
e -= 20;
|
|
587
|
-
x /= Math.pow(10,e);
|
|
588
|
-
res = x + (new Array(e+1)).join('0');
|
|
589
|
-
}
|
|
590
|
-
}
|
|
591
|
-
return res;
|
|
592
|
-
}
|
|
593
|
-
|
|
594
|
-
export function isValidHttpUrl(url:string) : boolean {
|
|
595
|
-
let r:any;
|
|
596
|
-
try {
|
|
597
|
-
r = new URL(url);
|
|
598
|
-
} catch (_) {
|
|
599
|
-
return false;
|
|
600
|
-
}
|
|
601
|
-
|
|
602
|
-
return r.protocol === "http:" || r.protocol === "https:" || r.protocol === 'ipfs:';
|
|
603
|
-
}
|
|
604
|
-
|
|
605
|
-
export interface query_object_param {
|
|
606
|
-
id:string;
|
|
607
|
-
onBegin?:(id:string)=>void;
|
|
608
|
-
onObjectRes?:(id:string, res:SuiObjectResponse)=>void;
|
|
609
|
-
onDynamicRes?:(id:string, res:DynamicFieldPage)=>void;
|
|
610
|
-
onFieldsRes?:(id:string, fields_res:SuiObjectResponse[])=>void;
|
|
611
|
-
onObjectErr?:(id:string, err:any)=>void;
|
|
612
|
-
onDynamicErr?:(id:string, err:any)=>void;
|
|
613
|
-
onFieldsErr?:(id:string, err:any)=>void;
|
|
614
|
-
}
|
|
615
|
-
|
|
616
|
-
export const uint2address = (value: number | bigint | string) : string => {
|
|
617
|
-
return normalizeSuiAddress(value.toString(16));
|
|
618
|
-
}
|
|
619
|
-
|
|
620
|
-
export const query_object = (param:query_object_param) => {
|
|
621
|
-
if (param.id) {
|
|
622
|
-
if(param?.onBegin) param.onBegin(param.id);
|
|
623
|
-
Protocol.Client().getObject({id:param.id, options:{showContent:true, showType:true, showOwner:true}}).then((res) => {
|
|
624
|
-
if (res.error) {
|
|
625
|
-
if(param?.onObjectErr) param.onObjectErr(param.id, res.error);
|
|
626
|
-
} else {
|
|
627
|
-
if(param?.onObjectRes) param.onObjectRes(param.id, res);
|
|
628
|
-
}
|
|
629
|
-
}).catch((err) => {
|
|
630
|
-
//console.log(err)
|
|
631
|
-
if (param?.onObjectErr) param.onObjectErr(param.id, err);
|
|
632
|
-
});
|
|
633
|
-
|
|
634
|
-
Protocol.Client().getDynamicFields({parentId:param.id}).then((res) => {
|
|
635
|
-
if (param?.onDynamicRes) param.onDynamicRes(param.id, res);
|
|
636
|
-
|
|
637
|
-
if (res.data.length > 0) {
|
|
638
|
-
Protocol.Client().multiGetObjects({ids:res.data.map(v => v.objectId), options:{showContent:true}}).then((fields) => {
|
|
639
|
-
if (param?.onFieldsRes) param.onFieldsRes(param.id, fields);
|
|
640
|
-
}).catch((err) => {
|
|
641
|
-
//console.log(err)
|
|
642
|
-
if (param?.onFieldsErr) param.onFieldsErr(param.id, err);
|
|
643
|
-
})
|
|
644
|
-
}
|
|
645
|
-
}).catch((err) => {
|
|
646
|
-
//console.log(err)
|
|
647
|
-
if (param?.onDynamicErr) param.onDynamicErr(param.id, err);
|
|
648
|
-
})
|
|
649
|
-
}
|
|
650
|
-
}
|
|
651
|
-
|
|
652
|
-
export const FirstLetterUppercase = (str:string|undefined|null) : string => {
|
|
653
|
-
if (!str) return '';
|
|
654
|
-
return str.substring(0, 1).toUpperCase() + str.substring(1);
|
|
655
|
-
}
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
export function hasDuplicates<T>(array: T[]): boolean {
|
|
659
|
-
return array.some((item, index) => array.findIndex(i => i === item) !== index);
|
|
660
|
-
}
|