@beclab/olaresid 0.1.12 → 0.2.0
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/CLI-TREE.md +107 -0
- package/CLI.md +122 -1329
- package/README.md +30 -12
- package/SDK-TREE.md +151 -0
- package/TAG.md +95 -41
- package/config.json +6 -4
- package/dist/abi/TerminusDIDQueryABI.d.ts +397 -0
- package/dist/abi/TerminusDIDQueryABI.d.ts.map +1 -0
- package/dist/abi/TerminusDIDQueryABI.js +519 -0
- package/dist/abi/TerminusDIDQueryABI.js.map +1 -0
- package/dist/business/index.d.ts +1 -1
- package/dist/business/index.d.ts.map +1 -1
- package/dist/business/index.js +11 -24
- package/dist/business/index.js.map +1 -1
- package/dist/business/tag-context.d.ts +1 -0
- package/dist/business/tag-context.d.ts.map +1 -1
- package/dist/business/tag-context.js +13 -7
- package/dist/business/tag-context.js.map +1 -1
- package/dist/cli.js +238 -107
- package/dist/cli.js.map +1 -1
- package/dist/config/index.d.ts +16 -4
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +28 -14
- package/dist/config/index.js.map +1 -1
- package/dist/domain/core.d.ts +65 -0
- package/dist/domain/core.d.ts.map +1 -0
- package/dist/domain/core.js +317 -0
- package/dist/domain/core.js.map +1 -0
- package/dist/domain/index.d.ts +104 -57
- package/dist/domain/index.d.ts.map +1 -1
- package/dist/domain/index.js +188 -428
- package/dist/domain/index.js.map +1 -1
- package/dist/domain/types.d.ts +56 -0
- package/dist/domain/types.d.ts.map +1 -0
- package/dist/domain/types.js +3 -0
- package/dist/domain/types.js.map +1 -0
- package/dist/index.d.ts +81 -24
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +153 -143
- package/dist/index.js.map +1 -1
- package/dist/utils/crypto-utils.d.ts +124 -0
- package/dist/utils/crypto-utils.d.ts.map +1 -1
- package/dist/utils/crypto-utils.js +156 -8
- package/dist/utils/crypto-utils.js.map +1 -1
- package/dist/utils/error-parser.d.ts.map +1 -1
- package/dist/utils/error-parser.js +2 -1
- package/dist/utils/error-parser.js.map +1 -1
- package/dist/utils/event-parser.d.ts +161 -0
- package/dist/utils/event-parser.d.ts.map +1 -0
- package/dist/utils/event-parser.js +140 -0
- package/dist/utils/event-parser.js.map +1 -0
- package/dist/utils/tag-type-builder.d.ts +43 -0
- package/dist/utils/tag-type-builder.d.ts.map +1 -1
- package/dist/utils/tag-type-builder.js +122 -0
- package/dist/utils/tag-type-builder.js.map +1 -1
- package/dist/utils/tag-type-parser.d.ts +70 -0
- package/dist/utils/tag-type-parser.d.ts.map +1 -0
- package/dist/utils/tag-type-parser.js +190 -0
- package/dist/utils/tag-type-parser.js.map +1 -0
- package/examples/create-with-rpc-demo.ts +142 -0
- package/examples/fetch-all-flat-demo.ts +159 -0
- package/examples/fetch-by-indices-demo.ts +235 -0
- package/examples/fetch-domain-demo.ts +137 -0
- package/examples/fetch-domains-demo.ts +221 -0
- package/examples/frontend-demo/index.html +2 -2
- package/examples/frontend-demo/package-lock.json +4 -1
- package/examples/index.ts +3 -5
- package/jest.config.js +25 -0
- package/package.json +6 -2
- package/src/abi/TerminusDIDQueryABI.ts +516 -0
- package/src/business/index.ts +10 -33
- package/src/business/tag-context.ts +35 -7
- package/src/cli.ts +344 -121
- package/src/config/index.ts +34 -19
- package/src/domain/core.ts +382 -0
- package/src/domain/index.ts +271 -641
- package/src/domain/types.ts +59 -0
- package/src/index.ts +222 -207
- package/src/utils/crypto-utils.ts +239 -2
- package/src/utils/error-parser.ts +2 -1
- package/src/utils/event-parser.ts +353 -0
- package/src/utils/tag-type-builder.ts +138 -0
- package/src/utils/tag-type-parser.ts +246 -0
- package/tests/unit/crypto-utils.test.ts +338 -0
- package/tests/unit/ed25519-jwk.test.ts +201 -0
- package/tests/unit/event-parser.test.ts +690 -0
- package/tests/unit/generate-mnemonic.test.ts +268 -0
- package/tests/unit/olares-id-format.test.ts +321 -0
- package/tests/unit/tag-type-parser.test.ts +802 -0
- package/tests/unit/tag-types.test.ts +821 -0
- package/tsconfig.json +3 -2
- package/dist/abi/ABITypeABI.d.ts +0 -88
- package/dist/abi/ABITypeABI.d.ts.map +0 -1
- package/dist/abi/ABITypeABI.js +0 -382
- package/dist/abi/ABITypeABI.js.map +0 -1
- package/dist/abi/RegistryABI.d.ts +0 -77
- package/dist/abi/RegistryABI.d.ts.map +0 -1
- package/dist/abi/RegistryABI.js +0 -462
- package/dist/abi/RegistryABI.js.map +0 -1
- package/dist/tag/address.d.ts +0 -11
- package/dist/tag/address.d.ts.map +0 -1
- package/dist/tag/address.js +0 -44
- package/dist/tag/address.js.map +0 -1
- package/dist/tag/array.d.ts +0 -14
- package/dist/tag/array.d.ts.map +0 -1
- package/dist/tag/array.js +0 -72
- package/dist/tag/array.js.map +0 -1
- package/dist/tag/bool.d.ts +0 -11
- package/dist/tag/bool.d.ts.map +0 -1
- package/dist/tag/bool.js +0 -43
- package/dist/tag/bool.js.map +0 -1
- package/dist/tag/bytes.d.ts +0 -11
- package/dist/tag/bytes.d.ts.map +0 -1
- package/dist/tag/bytes.js +0 -37
- package/dist/tag/bytes.js.map +0 -1
- package/dist/tag/flarray.d.ts +0 -15
- package/dist/tag/flarray.d.ts.map +0 -1
- package/dist/tag/flarray.js +0 -81
- package/dist/tag/flarray.js.map +0 -1
- package/dist/tag/flbytes.d.ts +0 -11
- package/dist/tag/flbytes.d.ts.map +0 -1
- package/dist/tag/flbytes.js +0 -47
- package/dist/tag/flbytes.js.map +0 -1
- package/dist/tag/index.d.ts +0 -32
- package/dist/tag/index.d.ts.map +0 -1
- package/dist/tag/index.js +0 -121
- package/dist/tag/index.js.map +0 -1
- package/dist/tag/int.d.ts +0 -12
- package/dist/tag/int.d.ts.map +0 -1
- package/dist/tag/int.js +0 -49
- package/dist/tag/int.js.map +0 -1
- package/dist/tag/string.d.ts +0 -11
- package/dist/tag/string.d.ts.map +0 -1
- package/dist/tag/string.js +0 -37
- package/dist/tag/string.js.map +0 -1
- package/dist/tag/tag.d.ts +0 -67
- package/dist/tag/tag.d.ts.map +0 -1
- package/dist/tag/tag.js +0 -157
- package/dist/tag/tag.js.map +0 -1
- package/dist/tag/tuple.d.ts +0 -17
- package/dist/tag/tuple.d.ts.map +0 -1
- package/dist/tag/tuple.js +0 -162
- package/dist/tag/tuple.js.map +0 -1
- package/dist/tag/uint.d.ts +0 -12
- package/dist/tag/uint.d.ts.map +0 -1
- package/dist/tag/uint.js +0 -49
- package/dist/tag/uint.js.map +0 -1
- package/dist/test/did.d.ts +0 -2
- package/dist/test/did.d.ts.map +0 -1
- package/dist/test/did.js +0 -177
- package/dist/test/did.js.map +0 -1
- package/dist/utils/tag-abi-codec.d.ts +0 -69
- package/dist/utils/tag-abi-codec.d.ts.map +0 -1
- package/dist/utils/tag-abi-codec.js +0 -144
- package/dist/utils/tag-abi-codec.js.map +0 -1
- package/examples/crypto-utilities.ts +0 -140
- package/examples/ed25519-jwk.ts +0 -73
- package/examples/generate-mnemonic.ts +0 -149
- package/examples/legacy.ts +0 -33
- package/examples/olares-id-format.ts +0 -197
- package/examples/tag-builder.ts +0 -235
- package/examples/tag-nested-tuple.ts +0 -190
- package/examples/tag-simple.ts +0 -149
- package/examples/tag-tagger.ts +0 -217
- package/examples/test-nested-tuple-conversion.ts +0 -143
- package/examples/test-type-bytes-parser.ts +0 -70
- package/src/abi/ABITypeABI.ts +0 -379
- package/src/abi/RegistryABI.ts +0 -459
- package/src/tag/address.ts +0 -48
- package/src/tag/array.ts +0 -80
- package/src/tag/bool.ts +0 -43
- package/src/tag/bytes.ts +0 -38
- package/src/tag/flarray.ts +0 -99
- package/src/tag/flbytes.ts +0 -48
- package/src/tag/index.ts +0 -170
- package/src/tag/int.ts +0 -51
- package/src/tag/string.ts +0 -38
- package/src/tag/tag.ts +0 -229
- package/src/tag/tuple.ts +0 -193
- package/src/tag/uint.ts +0 -51
- package/src/test/did.ts +0 -346
- package/src/utils/tag-abi-codec.ts +0 -158
package/src/tag/flarray.ts
DELETED
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
import { Tag, TagBase, Box, read2Byte, ProviderHolder } from './tag';
|
|
2
|
-
import { ethers } from 'ethers';
|
|
3
|
-
import ABITypeABI from '../abi/ABITypeABI';
|
|
4
|
-
export class FixedLengthArray extends Box {
|
|
5
|
-
setBuliderType(type: TagBase) {
|
|
6
|
-
this.boxData.arrayTag = type;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
formatType(typeBytes: any, index: number): number {
|
|
10
|
-
let la = read2Byte(typeBytes, index + 2);
|
|
11
|
-
let length = parseInt(la, 16);
|
|
12
|
-
|
|
13
|
-
let { cursor, tag } = this.formatChild(typeBytes, index + 6);
|
|
14
|
-
if (tag == undefined) {
|
|
15
|
-
throw new Error('formatType error in array');
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
this.boxData = {
|
|
19
|
-
arrayTag: tag,
|
|
20
|
-
length: length
|
|
21
|
-
};
|
|
22
|
-
return cursor;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
getAbiTypeString(): string {
|
|
26
|
-
return `${this.boxData.arrayTag.getAbiTypeString()}[${
|
|
27
|
-
this.boxData.length
|
|
28
|
-
}]`;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
setFieldNames(names: string[] | string[][], index: number): number {
|
|
32
|
-
if (this.boxData.arrayTag instanceof Box) {
|
|
33
|
-
return (this.boxData.arrayTag as Box).setFieldNames(names, index);
|
|
34
|
-
}
|
|
35
|
-
return index;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
doHydration(d: any) {
|
|
39
|
-
let arr: any[] = [];
|
|
40
|
-
for (const item of d) {
|
|
41
|
-
arr.push(this.boxData.arrayTag.doHydration(item));
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
return arr;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
setSize = (size: number) => {
|
|
48
|
-
this.boxData.length = size;
|
|
49
|
-
};
|
|
50
|
-
|
|
51
|
-
getAbiType = (providerHolder: ProviderHolder) =>
|
|
52
|
-
new Promise<void>(async (resolve, reject) => {
|
|
53
|
-
const c = new ethers.Contract(
|
|
54
|
-
providerHolder.contractAbiType,
|
|
55
|
-
ABITypeABI.abiHaveCount,
|
|
56
|
-
providerHolder.getProvider()
|
|
57
|
-
);
|
|
58
|
-
|
|
59
|
-
const arrAbi = await this.boxData.arrayTag.getAbiType(
|
|
60
|
-
providerHolder
|
|
61
|
-
);
|
|
62
|
-
|
|
63
|
-
const resp = await c.arrayT(arrAbi, this.boxData.length);
|
|
64
|
-
// console.log('getAbiType', 'Address', resp);
|
|
65
|
-
resolve(resp);
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
getFieldName(): string[][] {
|
|
69
|
-
if (this.boxData.arrayTag instanceof Box) {
|
|
70
|
-
return this.boxData.arrayTag.getFieldName();
|
|
71
|
-
} else {
|
|
72
|
-
return [];
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
getParamTypes(): string {
|
|
77
|
-
return `${this.boxData.arrayTag.getAbiTypeString()}[${
|
|
78
|
-
this.boxData.length
|
|
79
|
-
}]`;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
getParameters(data: any) {
|
|
83
|
-
if (data.length != this.boxData.length) {
|
|
84
|
-
throw new Error(
|
|
85
|
-
`${this.fieldName} muse be length ${this.boxData.length}, but input data is length ${data.length}`
|
|
86
|
-
);
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
const arr = [];
|
|
90
|
-
for (const item of data) {
|
|
91
|
-
const value = this.boxData.arrayTag.getParameters(item);
|
|
92
|
-
arr.push(value);
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
return arr;
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
export default FixedLengthArray;
|
package/src/tag/flbytes.ts
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { Tag, TagBase, readByte, ProviderHolder } from './tag';
|
|
2
|
-
import { ethers } from 'ethers';
|
|
3
|
-
import ABITypeABI from '../abi/ABITypeABI';
|
|
4
|
-
export class FixedLengthBytes extends TagBase {
|
|
5
|
-
// length: number = 0
|
|
6
|
-
formatType(typeBytes: any, index: number): number {
|
|
7
|
-
let b = readByte(typeBytes, index + 2);
|
|
8
|
-
let length = parseInt(b, 16);
|
|
9
|
-
if (length < 1 || length > 32) {
|
|
10
|
-
throw new Error(`input is not a valid bytes type`);
|
|
11
|
-
}
|
|
12
|
-
this.boxData = {
|
|
13
|
-
length: length
|
|
14
|
-
};
|
|
15
|
-
return index + 4;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
getAbiTypeString(): string {
|
|
19
|
-
return `bytes${this.boxData.length}`;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
setSize = (size: number) => {
|
|
23
|
-
this.boxData.length = size;
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
getAbiType = (providerHolder: ProviderHolder) =>
|
|
27
|
-
new Promise<void>(async (resolve, reject) => {
|
|
28
|
-
const c = new ethers.Contract(
|
|
29
|
-
providerHolder.contractAbiType,
|
|
30
|
-
ABITypeABI.abiHaveCount,
|
|
31
|
-
providerHolder.getProvider()
|
|
32
|
-
);
|
|
33
|
-
|
|
34
|
-
const resp = await c.bytesT(this.boxData.length);
|
|
35
|
-
// console.log('getAbiType', 'uint', resp);
|
|
36
|
-
resolve(resp);
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
getParamTypes(): string {
|
|
40
|
-
return `bytes${this.boxData.length}`;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
getParameters(data: any) {
|
|
44
|
-
return data;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
export default FixedLengthBytes;
|
package/src/tag/index.ts
DELETED
|
@@ -1,170 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
Tag,
|
|
3
|
-
TagType,
|
|
4
|
-
TagBase,
|
|
5
|
-
readByte,
|
|
6
|
-
parserHolder,
|
|
7
|
-
read2Byte,
|
|
8
|
-
Box,
|
|
9
|
-
ProviderHolder
|
|
10
|
-
} from './tag';
|
|
11
|
-
import { Int } from './int';
|
|
12
|
-
import Uint from './uint';
|
|
13
|
-
import Bool from './bool';
|
|
14
|
-
import Array from './array';
|
|
15
|
-
import String from './string';
|
|
16
|
-
import FixedLengthArray from './flarray';
|
|
17
|
-
import Tuple from './tuple';
|
|
18
|
-
import Address from './address';
|
|
19
|
-
import FixedLengthBytes from './flbytes';
|
|
20
|
-
import Bytes from './bytes';
|
|
21
|
-
import { AbiCoder, ethers } from 'ethers';
|
|
22
|
-
|
|
23
|
-
const isHex = (hex: string) => {
|
|
24
|
-
return (
|
|
25
|
-
typeof hex === 'string' &&
|
|
26
|
-
hex.length % 2 === 0 &&
|
|
27
|
-
!isNaN(Number('0x' + hex))
|
|
28
|
-
);
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
const formatType = (typeBytes: string): Tag => {
|
|
32
|
-
if (typeBytes.startsWith('0x')) {
|
|
33
|
-
typeBytes = typeBytes.substring(2);
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
if (!isHex(typeBytes)) {
|
|
37
|
-
throw new Error('input is not a valid hex string');
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
let { cursor, tag } = parse(typeBytes, 0);
|
|
41
|
-
|
|
42
|
-
if (cursor !== typeBytes.length) {
|
|
43
|
-
throw new Error(`input is not a valid typeBytes`);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
if (tag == undefined) {
|
|
47
|
-
throw new Error(`format type error, please check version`);
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
return tag;
|
|
51
|
-
};
|
|
52
|
-
|
|
53
|
-
const encode = (tag: Tag, data: any) => {
|
|
54
|
-
const paramTypes = [];
|
|
55
|
-
const parameters = [];
|
|
56
|
-
|
|
57
|
-
paramTypes.push(tag.getParamTypes());
|
|
58
|
-
parameters.push(tag.getParameters(data));
|
|
59
|
-
|
|
60
|
-
const coder = new AbiCoder();
|
|
61
|
-
|
|
62
|
-
// console.log('paramTypes', paramTypes);
|
|
63
|
-
// console.dir(parameters, { depth: null });
|
|
64
|
-
|
|
65
|
-
return coder.encode(paramTypes, parameters);
|
|
66
|
-
};
|
|
67
|
-
|
|
68
|
-
// {cursor: number, tag: Tag}
|
|
69
|
-
const parse = (
|
|
70
|
-
typeBytes: string,
|
|
71
|
-
index: number
|
|
72
|
-
): { cursor: number; tag: Tag | undefined } => {
|
|
73
|
-
let cursor = 0;
|
|
74
|
-
let tag: Tag | undefined = undefined;
|
|
75
|
-
|
|
76
|
-
let typeFlag = readByte(typeBytes, index);
|
|
77
|
-
switch (typeFlag) {
|
|
78
|
-
case TagType.INT:
|
|
79
|
-
tag = new Int(typeBytes, index, false);
|
|
80
|
-
break;
|
|
81
|
-
case TagType.UINT:
|
|
82
|
-
tag = new Uint(typeBytes, index, false);
|
|
83
|
-
break;
|
|
84
|
-
case TagType.BOOL:
|
|
85
|
-
tag = new Bool(typeBytes, index, false);
|
|
86
|
-
break;
|
|
87
|
-
case TagType.STRING:
|
|
88
|
-
tag = new String(typeBytes, index, false);
|
|
89
|
-
break;
|
|
90
|
-
case TagType.ARRAY:
|
|
91
|
-
tag = new Array(typeBytes, index, false);
|
|
92
|
-
break;
|
|
93
|
-
case TagType.FL_ARRAY:
|
|
94
|
-
tag = new FixedLengthArray(typeBytes, index, false);
|
|
95
|
-
break;
|
|
96
|
-
case TagType.TUPLE:
|
|
97
|
-
tag = new Tuple(typeBytes, index, false);
|
|
98
|
-
break;
|
|
99
|
-
case TagType.ADDRESS:
|
|
100
|
-
tag = new Address(typeBytes, index, false);
|
|
101
|
-
break;
|
|
102
|
-
case TagType.FL_BYTES:
|
|
103
|
-
tag = new FixedLengthBytes(typeBytes, index, false);
|
|
104
|
-
break;
|
|
105
|
-
case TagType.BYTES:
|
|
106
|
-
tag = new Bytes(typeBytes, index, false);
|
|
107
|
-
break;
|
|
108
|
-
default:
|
|
109
|
-
break;
|
|
110
|
-
}
|
|
111
|
-
if (tag != undefined && tag.cursor != undefined) {
|
|
112
|
-
// // console.log('cursor', tag)
|
|
113
|
-
cursor = tag.cursor;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
return {
|
|
117
|
-
cursor,
|
|
118
|
-
tag
|
|
119
|
-
};
|
|
120
|
-
};
|
|
121
|
-
|
|
122
|
-
parserHolder.setParser(parse);
|
|
123
|
-
|
|
124
|
-
namespace DIDTag {
|
|
125
|
-
export type TagParser = Tag;
|
|
126
|
-
|
|
127
|
-
export type TagParserType = TagType;
|
|
128
|
-
|
|
129
|
-
export type TagParserBase = TagBase;
|
|
130
|
-
|
|
131
|
-
export type TagParserBox = Box;
|
|
132
|
-
|
|
133
|
-
export type ABITypeProviderHolder = ProviderHolder;
|
|
134
|
-
|
|
135
|
-
isHex;
|
|
136
|
-
|
|
137
|
-
readByte;
|
|
138
|
-
|
|
139
|
-
read2Byte;
|
|
140
|
-
|
|
141
|
-
export const doFormatType = (typeBytes: string): TagParser => {
|
|
142
|
-
return formatType(typeBytes);
|
|
143
|
-
};
|
|
144
|
-
|
|
145
|
-
export const doEncode = (tag: TagParser, data: any) => {
|
|
146
|
-
return encode(tag, data);
|
|
147
|
-
};
|
|
148
|
-
|
|
149
|
-
export const TagValueTypeInt = Int;
|
|
150
|
-
|
|
151
|
-
export const TagValueTypeUint = Uint;
|
|
152
|
-
|
|
153
|
-
export const TagValueTypeBool = Bool;
|
|
154
|
-
|
|
155
|
-
export const TagValueTypeArray = Array;
|
|
156
|
-
|
|
157
|
-
export const TagValueTypeString = String;
|
|
158
|
-
|
|
159
|
-
export const TagValueTypeFlarray = FixedLengthArray;
|
|
160
|
-
|
|
161
|
-
export const TagValueTypeTuple = Tuple;
|
|
162
|
-
|
|
163
|
-
export const TagValueTypeAddress = Address;
|
|
164
|
-
|
|
165
|
-
export const TagValueTypeFlbytes = FixedLengthBytes;
|
|
166
|
-
|
|
167
|
-
export const TagValueTypeBytes = Bytes;
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
export default DIDTag;
|
package/src/tag/int.ts
DELETED
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { Tag, TagBase, ProviderHolder } from './tag';
|
|
2
|
-
import { ethers } from 'ethers';
|
|
3
|
-
import ABITypeABI from '../abi/ABITypeABI';
|
|
4
|
-
export class Int extends TagBase {
|
|
5
|
-
formatType(typeBytes: any, index: number): number {
|
|
6
|
-
let bit = parseInt(typeBytes, 16);
|
|
7
|
-
bit = bit * 2 * 2 * 2;
|
|
8
|
-
if (bit < 8 || bit % 8 !== 0 || bit > 256) {
|
|
9
|
-
throw new Error(`input is not a valid int type`);
|
|
10
|
-
}
|
|
11
|
-
this.boxData = {
|
|
12
|
-
length: bit
|
|
13
|
-
};
|
|
14
|
-
return index + 4;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
getAbiTypeString(): string {
|
|
18
|
-
return `int${this.boxData.length}`;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
setSize = (size: number) => {
|
|
22
|
-
this.boxData.size = size;
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
getAbiType = (providerHolder: ProviderHolder) =>
|
|
26
|
-
new Promise<void>(async (resolve, reject) => {
|
|
27
|
-
const c = new ethers.Contract(
|
|
28
|
-
providerHolder.contractAbiType,
|
|
29
|
-
ABITypeABI.abi,
|
|
30
|
-
providerHolder.getProvider()
|
|
31
|
-
);
|
|
32
|
-
|
|
33
|
-
const resp = await c.intT(this.boxData.size);
|
|
34
|
-
// console.log('getAbiType', 'int', resp);
|
|
35
|
-
resolve(resp);
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
getParamTypes(): string {
|
|
39
|
-
return `int${this.boxData.length}`;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
getParameters(data: any) {
|
|
43
|
-
return data;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
doHydration(d: any) {
|
|
47
|
-
return (d as BigInt).toString();
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
export default Int;
|
package/src/tag/string.ts
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { Tag, TagBase, ProviderHolder } from './tag';
|
|
2
|
-
import { ethers } from 'ethers';
|
|
3
|
-
import ABITypeABI from '../abi/ABITypeABI';
|
|
4
|
-
export class String extends TagBase {
|
|
5
|
-
name: string = 'string';
|
|
6
|
-
|
|
7
|
-
formatType(typeBytes: any, index: number): number {
|
|
8
|
-
this.name = 'string';
|
|
9
|
-
return index + 2;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
getAbiTypeString(): string {
|
|
13
|
-
return 'string';
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
getAbiType = (providerHolder: ProviderHolder) =>
|
|
17
|
-
new Promise<void>(async (resolve, reject) => {
|
|
18
|
-
const c = new ethers.Contract(
|
|
19
|
-
providerHolder.contractAbiType,
|
|
20
|
-
ABITypeABI.abi,
|
|
21
|
-
providerHolder.getProvider()
|
|
22
|
-
);
|
|
23
|
-
|
|
24
|
-
const resp = await c.stringT();
|
|
25
|
-
// console.log('getAbiType', 'string', resp);
|
|
26
|
-
resolve(resp);
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
getParamTypes(): string {
|
|
30
|
-
return 'string';
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
getParameters(data: any) {
|
|
34
|
-
return data;
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
export default String;
|
package/src/tag/tag.ts
DELETED
|
@@ -1,229 +0,0 @@
|
|
|
1
|
-
import { ethers } from 'ethers';
|
|
2
|
-
|
|
3
|
-
export enum TagType {
|
|
4
|
-
INT = '00',
|
|
5
|
-
UINT = '01',
|
|
6
|
-
BOOL = '02',
|
|
7
|
-
STRING = '03',
|
|
8
|
-
ARRAY = '04',
|
|
9
|
-
FL_ARRAY = '05',
|
|
10
|
-
TUPLE = '06',
|
|
11
|
-
ADDRESS = '07',
|
|
12
|
-
FL_BYTES = '08',
|
|
13
|
-
BYTES = '09'
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export const needLength = (type: TagType) => {
|
|
17
|
-
return type == TagType.INT;
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
export const read2Byte = (hex: string, index: number) => {
|
|
21
|
-
return hex.substring(index, index + 4);
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
export const readByte = (hex: string, index: number) => {
|
|
25
|
-
return hex.substring(index, index + 2);
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
export interface ProviderHolder {
|
|
29
|
-
contractAbiType: string;
|
|
30
|
-
getProvider(): ethers.JsonRpcProvider;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
export interface Tag {
|
|
34
|
-
formatType(typeBytes: any, index: number | undefined): number;
|
|
35
|
-
|
|
36
|
-
parseValue(data: any): any;
|
|
37
|
-
|
|
38
|
-
getParamTypes(): string;
|
|
39
|
-
|
|
40
|
-
getParameters(data: any): any;
|
|
41
|
-
|
|
42
|
-
cursor: number | undefined;
|
|
43
|
-
|
|
44
|
-
type: TagType | undefined;
|
|
45
|
-
|
|
46
|
-
boxData: any;
|
|
47
|
-
|
|
48
|
-
fieldName: string | undefined;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
export type Parse = (
|
|
52
|
-
typeBytes: string,
|
|
53
|
-
index: number
|
|
54
|
-
) => { cursor: number; tag: Tag | undefined };
|
|
55
|
-
export class ParserHolder {
|
|
56
|
-
parse: Parse | undefined = undefined;
|
|
57
|
-
|
|
58
|
-
setParser = (parse: Parse) => {
|
|
59
|
-
this.parse = parse;
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
export const parserHolder = new ParserHolder();
|
|
64
|
-
|
|
65
|
-
export abstract class TagBase implements Tag {
|
|
66
|
-
type: TagType | undefined;
|
|
67
|
-
cursor: number | undefined;
|
|
68
|
-
boxData: any;
|
|
69
|
-
fieldName: string | undefined;
|
|
70
|
-
|
|
71
|
-
abstract getAbiType(providerHolder: ProviderHolder): Promise<any>;
|
|
72
|
-
|
|
73
|
-
abstract getParamTypes(): string;
|
|
74
|
-
|
|
75
|
-
abstract getParameters(data: any): any; // 包装类负责解析对应字段,并验证字段是否存在, 基础类型负责验证数据格式正确性
|
|
76
|
-
|
|
77
|
-
getFieldNames = (): string[][] => {
|
|
78
|
-
if (this instanceof Box) {
|
|
79
|
-
let a: string[][] = this.getFieldName();
|
|
80
|
-
return a;
|
|
81
|
-
} else {
|
|
82
|
-
let a: string[][] = [];
|
|
83
|
-
return a;
|
|
84
|
-
}
|
|
85
|
-
};
|
|
86
|
-
|
|
87
|
-
typeName = (): string => {
|
|
88
|
-
switch (this.type) {
|
|
89
|
-
case TagType.INT:
|
|
90
|
-
return `int${this.boxData.length}`;
|
|
91
|
-
case TagType.UINT:
|
|
92
|
-
return `uint${this.boxData.length}`;
|
|
93
|
-
case TagType.BOOL:
|
|
94
|
-
return `bool`;
|
|
95
|
-
case TagType.STRING:
|
|
96
|
-
return 'string';
|
|
97
|
-
case TagType.ARRAY:
|
|
98
|
-
return `array<${this.boxData.arrayTag.typeName()}>`;
|
|
99
|
-
case TagType.FL_ARRAY:
|
|
100
|
-
return `array<${this.boxData.arrayTag.typeName()}>(${
|
|
101
|
-
this.boxData.length
|
|
102
|
-
})`;
|
|
103
|
-
case TagType.TUPLE:
|
|
104
|
-
return 'tuple';
|
|
105
|
-
case TagType.ADDRESS:
|
|
106
|
-
return 'address';
|
|
107
|
-
case TagType.FL_BYTES:
|
|
108
|
-
return `bytes${this.boxData.length}`;
|
|
109
|
-
case TagType.BYTES:
|
|
110
|
-
return 'bytes';
|
|
111
|
-
default:
|
|
112
|
-
return 'error';
|
|
113
|
-
}
|
|
114
|
-
};
|
|
115
|
-
|
|
116
|
-
constructor(
|
|
117
|
-
typeBytes: string | undefined,
|
|
118
|
-
index: number | undefined,
|
|
119
|
-
builder: boolean
|
|
120
|
-
) {
|
|
121
|
-
this.boxData = {};
|
|
122
|
-
|
|
123
|
-
if (builder) {
|
|
124
|
-
} else {
|
|
125
|
-
if (typeBytes == undefined || index == undefined) {
|
|
126
|
-
throw new Error(
|
|
127
|
-
"constructor value error, typeBytes and index can't be undefined"
|
|
128
|
-
);
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
let typeFlag = readByte(typeBytes, index);
|
|
132
|
-
|
|
133
|
-
switch (typeFlag) {
|
|
134
|
-
case TagType.INT:
|
|
135
|
-
this.type = TagType.INT;
|
|
136
|
-
this.cursor = this.formatType(
|
|
137
|
-
readByte(typeBytes, index + 2),
|
|
138
|
-
index
|
|
139
|
-
);
|
|
140
|
-
break;
|
|
141
|
-
case TagType.UINT:
|
|
142
|
-
this.type = TagType.UINT;
|
|
143
|
-
this.cursor = this.formatType(
|
|
144
|
-
readByte(typeBytes, index + 2),
|
|
145
|
-
index
|
|
146
|
-
);
|
|
147
|
-
break;
|
|
148
|
-
case TagType.BOOL:
|
|
149
|
-
this.type = TagType.BOOL;
|
|
150
|
-
this.cursor = this.formatType(typeBytes, index);
|
|
151
|
-
break;
|
|
152
|
-
case TagType.STRING:
|
|
153
|
-
this.type = TagType.STRING;
|
|
154
|
-
this.cursor = this.formatType(typeBytes, index);
|
|
155
|
-
break;
|
|
156
|
-
case TagType.ARRAY:
|
|
157
|
-
this.type = TagType.ARRAY;
|
|
158
|
-
this.cursor = this.formatType(typeBytes, index);
|
|
159
|
-
break;
|
|
160
|
-
case TagType.FL_ARRAY:
|
|
161
|
-
this.type = TagType.FL_ARRAY;
|
|
162
|
-
this.cursor = this.formatType(typeBytes, index);
|
|
163
|
-
break;
|
|
164
|
-
case TagType.TUPLE:
|
|
165
|
-
this.type = TagType.TUPLE;
|
|
166
|
-
this.cursor = this.formatType(typeBytes, index);
|
|
167
|
-
break;
|
|
168
|
-
case TagType.ADDRESS:
|
|
169
|
-
this.type = TagType.ADDRESS;
|
|
170
|
-
this.cursor = this.formatType(typeBytes, index);
|
|
171
|
-
break;
|
|
172
|
-
case TagType.FL_BYTES:
|
|
173
|
-
this.type = TagType.FL_BYTES;
|
|
174
|
-
this.cursor = this.formatType(typeBytes, index);
|
|
175
|
-
break;
|
|
176
|
-
case TagType.BYTES:
|
|
177
|
-
this.type = TagType.BYTES;
|
|
178
|
-
this.cursor = this.formatType(typeBytes, index);
|
|
179
|
-
break;
|
|
180
|
-
|
|
181
|
-
default:
|
|
182
|
-
throw new Error('formatType error');
|
|
183
|
-
break;
|
|
184
|
-
}
|
|
185
|
-
// // console.log('cursor', this)
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
abstract formatType(typeBytes: any, index: number | undefined): number;
|
|
190
|
-
|
|
191
|
-
parseValue(data: any) {
|
|
192
|
-
let abiCoder = new ethers.AbiCoder();
|
|
193
|
-
|
|
194
|
-
// // console.log('AbiTypeString', this.getAbiTypeString());
|
|
195
|
-
// // console.dir(this, { depth: null });
|
|
196
|
-
return abiCoder.decode([this.getAbiTypeString()], data, false);
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
hydration(data: any) {
|
|
200
|
-
let d = this.parseValue(data);
|
|
201
|
-
|
|
202
|
-
return this.doHydration(d[0]);
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
doHydration(d: any) {
|
|
206
|
-
return d;
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
abstract getAbiTypeString(): string;
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
export abstract class Box extends TagBase {
|
|
213
|
-
abstract formatType(typeBytes: any, index: number | undefined): number;
|
|
214
|
-
|
|
215
|
-
abstract setFieldNames(names: string[] | string[][], index: number): number;
|
|
216
|
-
|
|
217
|
-
formatChild(
|
|
218
|
-
typeBytes: any,
|
|
219
|
-
index: number
|
|
220
|
-
): { cursor: number; tag: Tag | undefined } {
|
|
221
|
-
if (!parserHolder.parse) throw new Error('not found parse');
|
|
222
|
-
|
|
223
|
-
return parserHolder.parse(typeBytes, index);
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
abstract getFieldName(): string[][];
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
export default Tag;
|