@beclab/olaresid 0.1.1
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/LICENSE.md +49 -0
- package/README.md +93 -0
- package/dist/abi/ABITypeABI.d.ts +88 -0
- package/dist/abi/ABITypeABI.d.ts.map +1 -0
- package/dist/abi/ABITypeABI.js +382 -0
- package/dist/abi/ABITypeABI.js.map +1 -0
- package/dist/abi/RegistryABI.d.ts +77 -0
- package/dist/abi/RegistryABI.d.ts.map +1 -0
- package/dist/abi/RegistryABI.js +462 -0
- package/dist/abi/RegistryABI.js.map +1 -0
- package/dist/abi/RootResolverABI.d.ts +78 -0
- package/dist/abi/RootResolverABI.d.ts.map +1 -0
- package/dist/abi/RootResolverABI.js +372 -0
- package/dist/abi/RootResolverABI.js.map +1 -0
- package/dist/abi/TerminusDIDABI.d.ts +80 -0
- package/dist/abi/TerminusDIDABI.d.ts.map +1 -0
- package/dist/abi/TerminusDIDABI.js +1877 -0
- package/dist/abi/TerminusDIDABI.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +199 -0
- package/dist/cli.js.map +1 -0
- package/dist/debug.d.ts +46 -0
- package/dist/debug.d.ts.map +1 -0
- package/dist/debug.js +129 -0
- package/dist/debug.js.map +1 -0
- package/dist/domain/index.d.ts +59 -0
- package/dist/domain/index.d.ts.map +1 -0
- package/dist/domain/index.js +431 -0
- package/dist/domain/index.js.map +1 -0
- package/dist/index.d.ts +193 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +166 -0
- package/dist/index.js.map +1 -0
- package/dist/tag/address.d.ts +11 -0
- package/dist/tag/address.d.ts.map +1 -0
- package/dist/tag/address.js +44 -0
- package/dist/tag/address.js.map +1 -0
- package/dist/tag/array.d.ts +14 -0
- package/dist/tag/array.d.ts.map +1 -0
- package/dist/tag/array.js +72 -0
- package/dist/tag/array.js.map +1 -0
- package/dist/tag/bool.d.ts +11 -0
- package/dist/tag/bool.d.ts.map +1 -0
- package/dist/tag/bool.js +43 -0
- package/dist/tag/bool.js.map +1 -0
- package/dist/tag/bytes.d.ts +11 -0
- package/dist/tag/bytes.d.ts.map +1 -0
- package/dist/tag/bytes.js +37 -0
- package/dist/tag/bytes.js.map +1 -0
- package/dist/tag/flarray.d.ts +15 -0
- package/dist/tag/flarray.d.ts.map +1 -0
- package/dist/tag/flarray.js +81 -0
- package/dist/tag/flarray.js.map +1 -0
- package/dist/tag/flbytes.d.ts +11 -0
- package/dist/tag/flbytes.d.ts.map +1 -0
- package/dist/tag/flbytes.js +47 -0
- package/dist/tag/flbytes.js.map +1 -0
- package/dist/tag/index.d.ts +32 -0
- package/dist/tag/index.d.ts.map +1 -0
- package/dist/tag/index.js +121 -0
- package/dist/tag/index.js.map +1 -0
- package/dist/tag/int.d.ts +12 -0
- package/dist/tag/int.d.ts.map +1 -0
- package/dist/tag/int.js +49 -0
- package/dist/tag/int.js.map +1 -0
- package/dist/tag/string.d.ts +11 -0
- package/dist/tag/string.d.ts.map +1 -0
- package/dist/tag/string.js +37 -0
- package/dist/tag/string.js.map +1 -0
- package/dist/tag/tag.d.ts +67 -0
- package/dist/tag/tag.d.ts.map +1 -0
- package/dist/tag/tag.js +157 -0
- package/dist/tag/tag.js.map +1 -0
- package/dist/tag/tuple.d.ts +17 -0
- package/dist/tag/tuple.d.ts.map +1 -0
- package/dist/tag/tuple.js +162 -0
- package/dist/tag/tuple.js.map +1 -0
- package/dist/tag/uint.d.ts +12 -0
- package/dist/tag/uint.d.ts.map +1 -0
- package/dist/tag/uint.js +49 -0
- package/dist/tag/uint.js.map +1 -0
- package/dist/test/did.d.ts +2 -0
- package/dist/test/did.d.ts.map +1 -0
- package/dist/test/did.js +177 -0
- package/dist/test/did.js.map +1 -0
- package/examples/index.ts +15 -0
- package/examples/legacy.ts +33 -0
- package/package.json +50 -0
- package/project.json +6 -0
- package/src/abi/ABITypeABI.ts +379 -0
- package/src/abi/RegistryABI.ts +459 -0
- package/src/abi/RootResolverABI.ts +369 -0
- package/src/abi/TerminusDIDABI.ts +1874 -0
- package/src/cli.ts +230 -0
- package/src/debug.ts +170 -0
- package/src/domain/index.ts +659 -0
- package/src/index.ts +302 -0
- package/src/tag/address.ts +48 -0
- package/src/tag/array.ts +80 -0
- package/src/tag/bool.ts +43 -0
- package/src/tag/bytes.ts +38 -0
- package/src/tag/flarray.ts +99 -0
- package/src/tag/flbytes.ts +48 -0
- package/src/tag/index.ts +170 -0
- package/src/tag/int.ts +51 -0
- package/src/tag/string.ts +38 -0
- package/src/tag/tag.ts +229 -0
- package/src/tag/tuple.ts +193 -0
- package/src/tag/uint.ts +51 -0
- package/src/test/did.ts +346 -0
- package/tsconfig.json +9 -0
package/src/index.ts
ADDED
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
import { PackageDomain } from './domain/index';
|
|
2
|
+
import DIDTag from './tag/index';
|
|
3
|
+
import { ethers } from 'ethers';
|
|
4
|
+
import DID_ABI from './abi/TerminusDIDABI';
|
|
5
|
+
import RootResolverABI from './abi/RootResolverABI';
|
|
6
|
+
import { debug } from './debug';
|
|
7
|
+
|
|
8
|
+
type Domain = PackageDomain.Domain;
|
|
9
|
+
|
|
10
|
+
type StoreDomain = PackageDomain.DomainData;
|
|
11
|
+
|
|
12
|
+
export class DIDConsole implements DIDTag.ABITypeProviderHolder {
|
|
13
|
+
rpcNode: string;
|
|
14
|
+
contractDid: string;
|
|
15
|
+
contractRootResolver: string;
|
|
16
|
+
contractAbiType: string;
|
|
17
|
+
|
|
18
|
+
allDomainCache: Domain[] = [];
|
|
19
|
+
treesCache: Domain[] = [];
|
|
20
|
+
|
|
21
|
+
constructor(
|
|
22
|
+
rpcNode: string,
|
|
23
|
+
contractDid: string,
|
|
24
|
+
contractRootResolver: string,
|
|
25
|
+
contractAbiType: string
|
|
26
|
+
) {
|
|
27
|
+
this.rpcNode = rpcNode;
|
|
28
|
+
this.contractDid = contractDid;
|
|
29
|
+
this.contractRootResolver = contractRootResolver;
|
|
30
|
+
this.contractAbiType = contractAbiType;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
getProvider = () => new ethers.JsonRpcProvider(this.rpcNode);
|
|
34
|
+
|
|
35
|
+
getContractDID = () =>
|
|
36
|
+
new ethers.Contract(this.contractDid, DID_ABI.abi, this.getProvider());
|
|
37
|
+
|
|
38
|
+
getContractDIDByPrivateKey = (privateKey: string) => {
|
|
39
|
+
const wallet = new ethers.Wallet(privateKey, this.getProvider());
|
|
40
|
+
|
|
41
|
+
const contract = new ethers.Contract(
|
|
42
|
+
this.contractDid,
|
|
43
|
+
DID_ABI.abi,
|
|
44
|
+
wallet
|
|
45
|
+
);
|
|
46
|
+
return contract;
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
getSignerContractDIDByProvider = async (
|
|
50
|
+
provider: ethers.JsonRpcApiProvider
|
|
51
|
+
) =>
|
|
52
|
+
new ethers.Contract(
|
|
53
|
+
this.contractDid,
|
|
54
|
+
DID_ABI.abi,
|
|
55
|
+
await provider.getSigner()
|
|
56
|
+
);
|
|
57
|
+
|
|
58
|
+
getContractRootResolver = () =>
|
|
59
|
+
new ethers.Contract(
|
|
60
|
+
this.contractRootResolver,
|
|
61
|
+
RootResolverABI.abi,
|
|
62
|
+
this.getProvider()
|
|
63
|
+
);
|
|
64
|
+
|
|
65
|
+
getSignerContractRootResolverByProvider = async (
|
|
66
|
+
provider: ethers.JsonRpcApiProvider
|
|
67
|
+
) =>
|
|
68
|
+
new ethers.Contract(
|
|
69
|
+
this.contractRootResolver,
|
|
70
|
+
RootResolverABI.abi,
|
|
71
|
+
await provider.getSigner()
|
|
72
|
+
);
|
|
73
|
+
|
|
74
|
+
fetchAll = () =>
|
|
75
|
+
new Promise<Domain[]>(async (resolve, reject) => {
|
|
76
|
+
debug.group('fetchAll');
|
|
77
|
+
const contract = await this.getContractDID();
|
|
78
|
+
const size = await contract.totalSupply();
|
|
79
|
+
debug.info('fetchAll--->domain size', size);
|
|
80
|
+
|
|
81
|
+
let arr: Domain[] = [];
|
|
82
|
+
for (let index = 0; index < size; index++) {
|
|
83
|
+
const domain = await PackageDomain.syncByIndex(index, contract);
|
|
84
|
+
debug.debug('fetchAll--->synced domain', domain);
|
|
85
|
+
debug.info(
|
|
86
|
+
`fetchAll--->${((index / parseInt(size)) * 100).toFixed(
|
|
87
|
+
0
|
|
88
|
+
)}%`
|
|
89
|
+
);
|
|
90
|
+
arr.push(domain);
|
|
91
|
+
}
|
|
92
|
+
this.allDomainCache = arr;
|
|
93
|
+
this.treesCache = PackageDomain.buildTree(this.allDomainCache);
|
|
94
|
+
|
|
95
|
+
debug.groupEnd();
|
|
96
|
+
resolve(this.treesCache);
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
fetchDomain = (name: string) =>
|
|
100
|
+
new Promise<Domain | undefined>(async (resolve, reject) => {
|
|
101
|
+
debug.group('fetchDomain');
|
|
102
|
+
const hasCache = this.allDomainCache.length > 0;
|
|
103
|
+
debug.info('fetchDomain--->hasCache', hasCache);
|
|
104
|
+
|
|
105
|
+
if (hasCache) {
|
|
106
|
+
const domain = PackageDomain.findASubtree(
|
|
107
|
+
name,
|
|
108
|
+
this.allDomainCache
|
|
109
|
+
);
|
|
110
|
+
|
|
111
|
+
debug.groupEnd();
|
|
112
|
+
resolve(domain);
|
|
113
|
+
} else {
|
|
114
|
+
const domain = await PackageDomain.syncByName(
|
|
115
|
+
name,
|
|
116
|
+
await this.getContractDID()
|
|
117
|
+
);
|
|
118
|
+
|
|
119
|
+
debug.groupEnd();
|
|
120
|
+
resolve(domain);
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
updateDomain = (name: string) =>
|
|
125
|
+
new Promise<Domain>(async (resolve, reject) => {
|
|
126
|
+
const domain = await PackageDomain.syncByName(
|
|
127
|
+
name,
|
|
128
|
+
await this.getContractDID()
|
|
129
|
+
);
|
|
130
|
+
|
|
131
|
+
if (domain == undefined) {
|
|
132
|
+
reject('not found domain');
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
const [oldDomain] = this.allDomainCache.filter(
|
|
137
|
+
(d) => d.name == domain.name
|
|
138
|
+
);
|
|
139
|
+
|
|
140
|
+
if (oldDomain != undefined) {
|
|
141
|
+
for (const tagNew of domain.tags) {
|
|
142
|
+
for (const tagOld of oldDomain.tags) {
|
|
143
|
+
if (tagNew.name == tagOld.name) {
|
|
144
|
+
if (
|
|
145
|
+
tagNew.valueFormated == undefined &&
|
|
146
|
+
tagOld.valueFormated != undefined
|
|
147
|
+
) {
|
|
148
|
+
tagNew.valueFormated = tagOld.valueFormated;
|
|
149
|
+
}
|
|
150
|
+
if (
|
|
151
|
+
tagNew.valueSource == undefined &&
|
|
152
|
+
tagOld.valueSource != undefined
|
|
153
|
+
) {
|
|
154
|
+
tagNew.valueSource = tagOld.valueSource;
|
|
155
|
+
}
|
|
156
|
+
if (
|
|
157
|
+
tagNew.definition == undefined &&
|
|
158
|
+
tagOld.definition != undefined
|
|
159
|
+
) {
|
|
160
|
+
tagNew.definition = tagOld.definition;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
this.allDomainCache = this.allDomainCache.filter(
|
|
168
|
+
(d) => d.name != domain.name
|
|
169
|
+
);
|
|
170
|
+
this.allDomainCache.push(domain);
|
|
171
|
+
|
|
172
|
+
this.treesCache = PackageDomain.buildTree(this.allDomainCache);
|
|
173
|
+
|
|
174
|
+
resolve(domain);
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
updateDomainById = (id: string) =>
|
|
178
|
+
new Promise<Domain>(async (resolve, reject) => {
|
|
179
|
+
const domain = await PackageDomain.syncById(
|
|
180
|
+
id,
|
|
181
|
+
await this.getContractDID()
|
|
182
|
+
);
|
|
183
|
+
|
|
184
|
+
if (domain == undefined) {
|
|
185
|
+
reject('not found domain');
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
const [oldDomain] = this.allDomainCache.filter(
|
|
190
|
+
(d) => d.name == domain.name
|
|
191
|
+
);
|
|
192
|
+
for (const tagNew of domain.tags) {
|
|
193
|
+
for (const tagOld of oldDomain.tags) {
|
|
194
|
+
if (tagNew.name == tagOld.name) {
|
|
195
|
+
if (
|
|
196
|
+
tagNew.valueFormated == undefined &&
|
|
197
|
+
tagOld.valueFormated != undefined
|
|
198
|
+
) {
|
|
199
|
+
tagNew.valueFormated = tagOld.valueFormated;
|
|
200
|
+
}
|
|
201
|
+
if (
|
|
202
|
+
tagNew.valueSource == undefined &&
|
|
203
|
+
tagOld.valueSource != undefined
|
|
204
|
+
) {
|
|
205
|
+
tagNew.valueSource = tagOld.valueSource;
|
|
206
|
+
}
|
|
207
|
+
if (
|
|
208
|
+
tagNew.definition == undefined &&
|
|
209
|
+
tagOld.definition != undefined
|
|
210
|
+
) {
|
|
211
|
+
tagNew.definition = tagOld.definition;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
this.allDomainCache = this.allDomainCache.filter(
|
|
218
|
+
(d) => d.name != domain.name
|
|
219
|
+
);
|
|
220
|
+
this.allDomainCache.push(domain);
|
|
221
|
+
|
|
222
|
+
this.treesCache = PackageDomain.buildTree(this.allDomainCache);
|
|
223
|
+
|
|
224
|
+
resolve(domain);
|
|
225
|
+
});
|
|
226
|
+
|
|
227
|
+
formatData = (doamin: Domain) =>
|
|
228
|
+
new Promise<StoreDomain>((resolve, reject) => {
|
|
229
|
+
resolve(doamin);
|
|
230
|
+
});
|
|
231
|
+
|
|
232
|
+
formatDatas = (doamins: Domain[]) =>
|
|
233
|
+
new Promise<StoreDomain[]>((resolve, reject) => {
|
|
234
|
+
resolve(doamins);
|
|
235
|
+
});
|
|
236
|
+
|
|
237
|
+
loadData = (data: StoreDomain) =>
|
|
238
|
+
new Promise<Domain>((resolve, reject) => {
|
|
239
|
+
resolve(data);
|
|
240
|
+
});
|
|
241
|
+
|
|
242
|
+
loadDatas = (datas: StoreDomain[]) =>
|
|
243
|
+
new Promise<Domain[]>((resolve, reject) => {
|
|
244
|
+
this.treesCache = datas;
|
|
245
|
+
let arr = [];
|
|
246
|
+
arr.push(...this.treesCache);
|
|
247
|
+
for (const StoreDomain of this.treesCache) {
|
|
248
|
+
arr.push(...PackageDomain.getAllSubdoamin(StoreDomain));
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
this.allDomainCache = arr;
|
|
252
|
+
|
|
253
|
+
resolve(datas);
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
namespace OlaresID {
|
|
258
|
+
export const createConsole = (
|
|
259
|
+
rpcNode: string,
|
|
260
|
+
contractDid: string,
|
|
261
|
+
contractRootResolver: string,
|
|
262
|
+
contractAbiType: string
|
|
263
|
+
): DIDConsole => {
|
|
264
|
+
return new DIDConsole(
|
|
265
|
+
rpcNode,
|
|
266
|
+
contractDid,
|
|
267
|
+
contractRootResolver,
|
|
268
|
+
contractAbiType
|
|
269
|
+
);
|
|
270
|
+
};
|
|
271
|
+
|
|
272
|
+
export const createMainnet = (): DIDConsole => {
|
|
273
|
+
return createConsole(
|
|
274
|
+
'https://optimism-rpc.publicnode.com',
|
|
275
|
+
'0x5DA4Fa8E567d86e52Ef8Da860de1be8f54cae97D',
|
|
276
|
+
'0xE2EABA0979277A90511F8873ae1e8cA26B54E740',
|
|
277
|
+
'0x9ae3F16bD99294Af1784beB1a0A5C84bf2636365'
|
|
278
|
+
);
|
|
279
|
+
};
|
|
280
|
+
|
|
281
|
+
export const createTestnet = (): DIDConsole => {
|
|
282
|
+
return createConsole(
|
|
283
|
+
'https://sepolia.optimism.io',
|
|
284
|
+
'0xe2D7c3a9013960E04d4E9F5F9B63fff37eEd97A8',
|
|
285
|
+
'0xeF727cb066Fee98F88Db84555830063b4A24ddfc',
|
|
286
|
+
'0x7386fCBae6Ad4CCE1499d9153D99bc950B589718'
|
|
287
|
+
);
|
|
288
|
+
};
|
|
289
|
+
|
|
290
|
+
export import Domain = PackageDomain;
|
|
291
|
+
|
|
292
|
+
export import Tag = DIDTag;
|
|
293
|
+
|
|
294
|
+
export type StoreDomain = PackageDomain.DomainData;
|
|
295
|
+
|
|
296
|
+
export const ABI_DID = DID_ABI;
|
|
297
|
+
|
|
298
|
+
export const ABI_ROOT_RESOLVER = RootResolverABI;
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
export { debug } from './debug';
|
|
302
|
+
export default OlaresID;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { Tag, TagBase, ProviderHolder } from './tag';
|
|
2
|
+
import { ethers } from 'ethers';
|
|
3
|
+
import ABITypeABI from '../abi/ABITypeABI';
|
|
4
|
+
|
|
5
|
+
function isEthereumAddress(address: string): boolean {
|
|
6
|
+
const ethereumAddressRegex = /^(0x)?[0-9a-fA-F]{40}$/;
|
|
7
|
+
return ethereumAddressRegex.test(address);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export class Address extends TagBase {
|
|
11
|
+
name: string = 'address';
|
|
12
|
+
|
|
13
|
+
formatType(typeBytes: any, index: number): number {
|
|
14
|
+
this.name = 'address';
|
|
15
|
+
return index + 2;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
getAbiTypeString(): string {
|
|
19
|
+
return 'address';
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
getAbiType = (providerHolder: ProviderHolder) =>
|
|
23
|
+
new Promise<void>(async (resolve, reject) => {
|
|
24
|
+
const c = new ethers.Contract(
|
|
25
|
+
providerHolder.contractAbiType,
|
|
26
|
+
ABITypeABI.abi,
|
|
27
|
+
providerHolder.getProvider()
|
|
28
|
+
);
|
|
29
|
+
|
|
30
|
+
const resp = await c.addressT();
|
|
31
|
+
// console.log('getAbiType', 'Address', resp);
|
|
32
|
+
resolve(resp);
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
getParamTypes(): string {
|
|
36
|
+
return 'address';
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
getParameters(data: any) {
|
|
40
|
+
if (!isEthereumAddress(data)) {
|
|
41
|
+
throw new Error(`${data} is not ethereum address`);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
return data;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export default Address;
|
package/src/tag/array.ts
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { Tag, TagBase, Box, ProviderHolder } from './tag';
|
|
2
|
+
import { ethers } from 'ethers';
|
|
3
|
+
import ABITypeABI from '../abi/ABITypeABI';
|
|
4
|
+
export class Array extends Box {
|
|
5
|
+
setBuliderType(type: TagBase) {
|
|
6
|
+
this.boxData.arrayTag = type;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
formatType(typeBytes: any, index: number): number {
|
|
10
|
+
let { cursor, tag } = this.formatChild(typeBytes, index + 2);
|
|
11
|
+
if (tag == undefined) {
|
|
12
|
+
throw new Error('formatType error in array');
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
this.boxData = {
|
|
16
|
+
arrayTag: tag
|
|
17
|
+
};
|
|
18
|
+
return cursor;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
getAbiTypeString(): string {
|
|
22
|
+
return `${this.boxData.arrayTag.getAbiTypeString()}[]`;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
setFieldNames(names: string[] | string[][], index: number): number {
|
|
26
|
+
if (this.boxData.arrayTag instanceof Box) {
|
|
27
|
+
return (this.boxData.arrayTag as Box).setFieldNames(names, index);
|
|
28
|
+
}
|
|
29
|
+
return index;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
doHydration(d: any) {
|
|
33
|
+
let arr: any[] = [];
|
|
34
|
+
for (const item of d) {
|
|
35
|
+
arr.push(this.boxData.arrayTag.doHydration(item));
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
return arr;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
getAbiType = (providerHolder: ProviderHolder) =>
|
|
42
|
+
new Promise<void>(async (resolve, reject) => {
|
|
43
|
+
const c = new ethers.Contract(
|
|
44
|
+
providerHolder.contractAbiType,
|
|
45
|
+
ABITypeABI.abi,
|
|
46
|
+
providerHolder.getProvider()
|
|
47
|
+
);
|
|
48
|
+
|
|
49
|
+
const arrAbi = await this.boxData.arrayTag.getAbiType(
|
|
50
|
+
providerHolder
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
const resp = await c.arrayT(arrAbi);
|
|
54
|
+
// console.log('getAbiType', 'array', resp);
|
|
55
|
+
resolve(resp);
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
getFieldName(): string[][] {
|
|
59
|
+
if (this.boxData.arrayTag instanceof Box) {
|
|
60
|
+
return this.boxData.arrayTag.getFieldName();
|
|
61
|
+
} else {
|
|
62
|
+
return [];
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
getParamTypes(): string {
|
|
67
|
+
return `${this.boxData.arrayTag.getAbiTypeString()}[]`;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
getParameters(data: any) {
|
|
71
|
+
let arr = [];
|
|
72
|
+
for (const item of data) {
|
|
73
|
+
const value = this.boxData.arrayTag.getParameters(item);
|
|
74
|
+
arr.push(value);
|
|
75
|
+
}
|
|
76
|
+
return arr;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export default Array;
|
package/src/tag/bool.ts
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { Tag, TagBase, ProviderHolder } from './tag';
|
|
2
|
+
import { ethers } from 'ethers';
|
|
3
|
+
import ABITypeABI from '../abi/ABITypeABI';
|
|
4
|
+
export class Bool extends TagBase {
|
|
5
|
+
name: string = 'bool';
|
|
6
|
+
|
|
7
|
+
formatType(typeBytes: any, index: number): number {
|
|
8
|
+
this.name = 'bool';
|
|
9
|
+
return index + 2;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
getAbiTypeString(): string {
|
|
13
|
+
return 'bool';
|
|
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.boolT();
|
|
25
|
+
// console.log('getAbiType', 'Bool', resp);
|
|
26
|
+
resolve(resp);
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
getParamTypes(): string {
|
|
30
|
+
return 'bool';
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
getParameters(data: any) {
|
|
34
|
+
// console.log('data', data);
|
|
35
|
+
if (data == true || data == false) {
|
|
36
|
+
return data;
|
|
37
|
+
} else {
|
|
38
|
+
throw new Error(`${data} is not a boolean`);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export default Bool;
|
package/src/tag/bytes.ts
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { Tag, TagBase, ProviderHolder } from './tag';
|
|
2
|
+
import { ethers } from 'ethers';
|
|
3
|
+
import ABITypeABI from '../abi/ABITypeABI';
|
|
4
|
+
export class Bytes extends TagBase {
|
|
5
|
+
name: string = 'bytes';
|
|
6
|
+
|
|
7
|
+
formatType(typeBytes: any, index: number): number {
|
|
8
|
+
this.name = 'bytes';
|
|
9
|
+
return index + 2;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
getAbiTypeString(): string {
|
|
13
|
+
return 'bytes';
|
|
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.bytesT();
|
|
25
|
+
// console.log('getAbiType', 'bytes', resp);
|
|
26
|
+
resolve(resp);
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
getParamTypes(): string {
|
|
30
|
+
return 'bytes';
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
getParameters(data: any) {
|
|
34
|
+
return data;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export default Bytes;
|
|
@@ -0,0 +1,99 @@
|
|
|
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;
|
|
@@ -0,0 +1,48 @@
|
|
|
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;
|