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/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:string) : {bNone:boolean, value:any}=> {
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
- ser_option_string(data:string) : Uint8Array {
129
- return this.bcs.ser('Option<string>', {'some': data}).toBytes();
130
- }
131
- ser_option_u64(data:number) : Uint8Array {
132
- return this.bcs.ser('Option<u64>', {'some': data}).toBytes();
133
- }
134
- ser_option_address(data:string) : Uint8Array {
135
- return this.bcs.ser('Option<address>', {'some': data}).toBytes();
136
- }
137
- ser_vector_string(data:string[]) : Uint8Array {
138
- return this.bcs.ser('vector<string>', data).toBytes();
139
- }
140
- ser_vector_vector_u8(data:string[]) : Uint8Array {
141
- return this.bcs.ser('vector<vector<u8>>', data).toBytes();
142
- }
143
- ser_vector_u64(data:number[]) : Uint8Array {
144
- return this.bcs.ser('vector<u64>', data).toBytes();
145
- }
146
- ser_vector_u8(data:number[]) : Uint8Array {
147
- return this.bcs.ser('vector<u8>', data).toBytes();
148
- }
149
- ser_vector_address(data:number[]) : Uint8Array {
150
- return this.bcs.ser('vector<address>', data).toBytes();
151
- }
152
- ser_vector_bool(data:number[]) : Uint8Array {
153
- return this.bcs.ser('vector<bool>', data).toBytes();
154
- }
155
- ser_vector_u128(data:number[]) : Uint8Array {
156
- return this.bcs.ser('vector<u128>', data).toBytes();
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
- ser_address(data:string) : Uint8Array {
160
- return this.bcs.ser(BCS.ADDRESS, data).toBytes();
161
- }
162
- ser_bool(data:boolean) : Uint8Array {
163
- return this.bcs.ser(BCS.BOOL, data).toBytes();
164
- }
165
- ser_u8(data:number) : Uint8Array {
166
- return this.bcs.ser(BCS.U8, data).toBytes();
167
- }
168
- ser_u64(data:number) : Uint8Array {
169
- return this.bcs.ser(BCS.U64, data).toBytes();
170
- }
171
- ser_u128(data:number) : Uint8Array {
172
- return this.bcs.ser(BCS.U128, data).toBytes();
173
- }
174
- ser_u256(data:number) : Uint8Array {
175
- return this.bcs.ser(BCS.U256, data).toBytes();
176
- }
177
- ser_string(data:string) : Uint8Array {
178
- return this.bcs.ser(BCS.STRING, data).toBytes();
179
- }
180
- ser(type:TypeName | StructTypeDefinition, data:Uint8Array) {
181
- return this.bcs.ser(type, data).toBytes();
182
- }
183
- de(type:TypeName | StructTypeDefinition, data:Uint8Array) {
184
- return this.bcs.de(type, data)
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 => { if (!addr || !isValidSuiAddress(addr)) return false; return true}
243
- export const IsValidArgType = (argType: string) : boolean => { if (!argType) return false; return argType.length != 0 }
244
- export const IsValidUint = (value: number) : boolean => { return Number.isSafeInteger(value) && value != 0 }
245
- export const IsValidInt = (value: number) : boolean => { return Number.isSafeInteger(value) }
246
- export const IsValidPercent = (value: number) : boolean => { return Number.isSafeInteger(value) && value > 0 && value <= 100 }
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
- let i = type.indexOf('<');
266
- if (i > 0 && type.length > 12) {
267
- let c = type.slice(0, i);
268
- if (c === '0x2::coin::Coin' || c === '0x0000000000000000000000000000000000000000000000000000000000000002::coin::Coin') {
269
- let coin = type.slice(i+1, type.length-1); // < >>
270
- let t = coin.lastIndexOf('::');
271
- return {isCoin:true, coin:coin, token:coin.slice(t+2)}
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 { Resource } from './resource';
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().ser_option_address(reference_address)) : OptionNone(txb);
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().ser_option_address(reference_address)) : OptionNone(txb);
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().ser_option_address(option.reference_address)) :
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().ser_vector_string(array_unique(options))),
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().ser_vector_string(array_unique(options))),
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().ser_vector_string(array_unique(options)))]
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().ser_vector_string(array_unique(options)))]
369
+ txb.pure(Bcs.getInstance().ser(ValueType.TYPE_VEC_STRING, array_unique(options)))]
370
370
  })
371
371
  }
372
372