@beclab/olaresid 0.1.1 → 0.1.2
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.md +1300 -0
- package/README.md +37 -31
- package/TAG.md +589 -0
- package/dist/abi/RootResolver2ABI.d.ts +54 -0
- package/dist/abi/RootResolver2ABI.d.ts.map +1 -0
- package/dist/abi/RootResolver2ABI.js +240 -0
- package/dist/abi/RootResolver2ABI.js.map +1 -0
- package/dist/business/index.d.ts +302 -0
- package/dist/business/index.d.ts.map +1 -0
- package/dist/business/index.js +1209 -0
- package/dist/business/index.js.map +1 -0
- package/dist/business/tag-context.d.ts +219 -0
- package/dist/business/tag-context.d.ts.map +1 -0
- package/dist/business/tag-context.js +537 -0
- package/dist/business/tag-context.js.map +1 -0
- package/dist/cli.js +2085 -39
- package/dist/cli.js.map +1 -1
- package/dist/debug.d.ts.map +1 -1
- package/dist/debug.js +14 -2
- package/dist/debug.js.map +1 -1
- package/dist/index.d.ts +50 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +229 -9
- package/dist/index.js.map +1 -1
- package/dist/utils/crypto-utils.d.ts +130 -0
- package/dist/utils/crypto-utils.d.ts.map +1 -0
- package/dist/utils/crypto-utils.js +402 -0
- package/dist/utils/crypto-utils.js.map +1 -0
- package/dist/utils/error-parser.d.ts +35 -0
- package/dist/utils/error-parser.d.ts.map +1 -0
- package/dist/utils/error-parser.js +202 -0
- package/dist/utils/error-parser.js.map +1 -0
- package/dist/utils/tag-abi-codec.d.ts +69 -0
- package/dist/utils/tag-abi-codec.d.ts.map +1 -0
- package/dist/utils/tag-abi-codec.js +144 -0
- package/dist/utils/tag-abi-codec.js.map +1 -0
- package/dist/utils/tag-type-builder.d.ts +158 -0
- package/dist/utils/tag-type-builder.d.ts.map +1 -0
- package/dist/utils/tag-type-builder.js +410 -0
- package/dist/utils/tag-type-builder.js.map +1 -0
- package/examples/crypto-utilities.ts +140 -0
- package/examples/domain-context.ts +80 -0
- package/examples/generate-mnemonic.ts +149 -0
- package/examples/index.ts +1 -1
- package/examples/ip.ts +171 -0
- package/examples/legacy.ts +10 -10
- package/examples/list-wallets.ts +81 -0
- package/examples/quasar-demo/.eslintrc.js +23 -0
- package/examples/quasar-demo/.quasar/app.js +43 -0
- package/examples/quasar-demo/.quasar/client-entry.js +38 -0
- package/examples/quasar-demo/.quasar/client-prefetch.js +130 -0
- package/examples/quasar-demo/.quasar/quasar-user-options.js +16 -0
- package/examples/quasar-demo/README.md +49 -0
- package/examples/quasar-demo/index.html +11 -0
- package/examples/quasar-demo/package-lock.json +6407 -0
- package/examples/quasar-demo/package.json +36 -0
- package/examples/quasar-demo/quasar.config.js +73 -0
- package/examples/quasar-demo/src/App.vue +13 -0
- package/examples/quasar-demo/src/css/app.scss +1 -0
- package/examples/quasar-demo/src/layouts/MainLayout.vue +21 -0
- package/examples/quasar-demo/src/pages/IndexPage.vue +905 -0
- package/examples/quasar-demo/src/router/index.ts +25 -0
- package/examples/quasar-demo/src/router/routes.ts +11 -0
- package/examples/quasar-demo/tsconfig.json +28 -0
- package/examples/register-subdomain.ts +152 -0
- package/examples/rsa-keypair.ts +148 -0
- package/examples/tag-builder.ts +235 -0
- package/examples/tag-management.ts +534 -0
- package/examples/tag-nested-tuple.ts +190 -0
- package/examples/tag-simple.ts +149 -0
- package/examples/tag-tagger.ts +217 -0
- package/examples/test-nested-tuple-conversion.ts +143 -0
- package/examples/test-type-bytes-parser.ts +70 -0
- package/examples/transfer-domain.ts +197 -0
- package/examples/wallet-management.ts +196 -0
- package/package.json +24 -15
- package/src/abi/RootResolver2ABI.ts +237 -0
- package/src/business/index.ts +1490 -0
- package/src/business/tag-context.ts +713 -0
- package/src/cli.ts +2755 -39
- package/src/debug.ts +17 -2
- package/src/index.ts +300 -14
- package/src/utils/crypto-utils.ts +459 -0
- package/src/utils/error-parser.ts +225 -0
- package/src/utils/tag-abi-codec.ts +158 -0
- package/src/utils/tag-type-builder.ts +469 -0
- package/tsconfig.json +1 -1
package/src/debug.ts
CHANGED
|
@@ -18,14 +18,29 @@ class DebugLogger {
|
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
private parseConfig(): DebugConfig {
|
|
21
|
-
// Check environment
|
|
21
|
+
// Check if running in Node.js environment
|
|
22
|
+
const isNode =
|
|
23
|
+
typeof process !== 'undefined' &&
|
|
24
|
+
process.versions &&
|
|
25
|
+
process.versions.node;
|
|
26
|
+
|
|
27
|
+
// Default config for browser
|
|
28
|
+
if (!isNode) {
|
|
29
|
+
return {
|
|
30
|
+
enabled: false,
|
|
31
|
+
level: 'debug',
|
|
32
|
+
prefix: '[DID-DEBUG]'
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// Check environment variables (Node.js only)
|
|
22
37
|
const envDebug =
|
|
23
38
|
process.env.DEBUG === 'true' || process.env.DEBUG === '1';
|
|
24
39
|
const envLevel =
|
|
25
40
|
(process.env.DEBUG_LEVEL as DebugConfig['level']) || 'debug';
|
|
26
41
|
const envPrefix = process.env.DEBUG_PREFIX || '[DID-DEBUG]';
|
|
27
42
|
|
|
28
|
-
// Check command line arguments
|
|
43
|
+
// Check command line arguments (Node.js only)
|
|
29
44
|
const args = process.argv;
|
|
30
45
|
const hasDebugFlag = args.includes('--debug') || args.includes('-d');
|
|
31
46
|
const hasVerboseFlag =
|
package/src/index.ts
CHANGED
|
@@ -3,7 +3,62 @@ import DIDTag from './tag/index';
|
|
|
3
3
|
import { ethers } from 'ethers';
|
|
4
4
|
import DID_ABI from './abi/TerminusDIDABI';
|
|
5
5
|
import RootResolverABI from './abi/RootResolverABI';
|
|
6
|
+
import RootResolver2ABI from './abi/RootResolver2ABI';
|
|
6
7
|
import { debug } from './debug';
|
|
8
|
+
import { parseContractError } from './utils/error-parser';
|
|
9
|
+
|
|
10
|
+
import {
|
|
11
|
+
DomainContext,
|
|
12
|
+
DomainMetaInfo,
|
|
13
|
+
DomainInfo,
|
|
14
|
+
TagInfo,
|
|
15
|
+
TransactionResult,
|
|
16
|
+
RSAPublicKeyData,
|
|
17
|
+
DIDKeyData,
|
|
18
|
+
UserType,
|
|
19
|
+
createRsaKeyPair,
|
|
20
|
+
pemToDer,
|
|
21
|
+
derToPem,
|
|
22
|
+
ipv4ToBytes4,
|
|
23
|
+
bytes4ToIpv4,
|
|
24
|
+
generateMnemonic,
|
|
25
|
+
getEthereumAddressFromMnemonic,
|
|
26
|
+
getEVMPrivateKeyFromMnemonic,
|
|
27
|
+
getDIDFromMnemonic,
|
|
28
|
+
generateDIDKeyData,
|
|
29
|
+
deriveDIDFromMnemonic
|
|
30
|
+
} from './business';
|
|
31
|
+
import { TagContext } from './business/tag-context';
|
|
32
|
+
|
|
33
|
+
// Import Tag utilities
|
|
34
|
+
import { TagTypeBuilder } from './utils/tag-type-builder';
|
|
35
|
+
import { TagAbiCodec } from './utils/tag-abi-codec';
|
|
36
|
+
|
|
37
|
+
export type {
|
|
38
|
+
DomainInfo,
|
|
39
|
+
DomainMetaInfo,
|
|
40
|
+
TagInfo,
|
|
41
|
+
TransactionResult,
|
|
42
|
+
RSAPublicKeyData,
|
|
43
|
+
DIDKeyData
|
|
44
|
+
} from './business';
|
|
45
|
+
|
|
46
|
+
export {
|
|
47
|
+
UserType,
|
|
48
|
+
DomainContext,
|
|
49
|
+
TagContext,
|
|
50
|
+
createRsaKeyPair,
|
|
51
|
+
pemToDer,
|
|
52
|
+
derToPem,
|
|
53
|
+
ipv4ToBytes4,
|
|
54
|
+
bytes4ToIpv4,
|
|
55
|
+
generateMnemonic,
|
|
56
|
+
getEthereumAddressFromMnemonic,
|
|
57
|
+
getEVMPrivateKeyFromMnemonic,
|
|
58
|
+
getDIDFromMnemonic,
|
|
59
|
+
generateDIDKeyData,
|
|
60
|
+
deriveDIDFromMnemonic
|
|
61
|
+
} from './business';
|
|
7
62
|
|
|
8
63
|
type Domain = PackageDomain.Domain;
|
|
9
64
|
|
|
@@ -14,26 +69,117 @@ export class DIDConsole implements DIDTag.ABITypeProviderHolder {
|
|
|
14
69
|
contractDid: string;
|
|
15
70
|
contractRootResolver: string;
|
|
16
71
|
contractAbiType: string;
|
|
72
|
+
contractRootResolver2?: string;
|
|
73
|
+
supportSvcUrl?: string;
|
|
74
|
+
|
|
75
|
+
signer?: ethers.Signer;
|
|
17
76
|
|
|
18
77
|
allDomainCache: Domain[] = [];
|
|
19
78
|
treesCache: Domain[] = [];
|
|
20
79
|
|
|
80
|
+
// caching contract instances
|
|
81
|
+
private _contractDID?: ethers.Contract;
|
|
82
|
+
private _signerContractDID?: ethers.Contract;
|
|
83
|
+
private _contractRootResolver?: ethers.Contract;
|
|
84
|
+
private _signerContractRootResolver?: ethers.Contract;
|
|
85
|
+
private _contractRootResolver2?: ethers.Contract;
|
|
86
|
+
private _signerContractRootResolver2?: ethers.Contract;
|
|
87
|
+
|
|
88
|
+
private _provider?: ethers.JsonRpcProvider;
|
|
89
|
+
|
|
21
90
|
constructor(
|
|
22
91
|
rpcNode: string,
|
|
23
92
|
contractDid: string,
|
|
24
93
|
contractRootResolver: string,
|
|
25
|
-
contractAbiType: string
|
|
94
|
+
contractAbiType: string,
|
|
95
|
+
contractRootResolver2?: string,
|
|
96
|
+
supportSvcUrl?: string
|
|
26
97
|
) {
|
|
27
98
|
this.rpcNode = rpcNode;
|
|
28
99
|
this.contractDid = contractDid;
|
|
29
100
|
this.contractRootResolver = contractRootResolver;
|
|
30
101
|
this.contractAbiType = contractAbiType;
|
|
102
|
+
this.contractRootResolver2 = contractRootResolver2;
|
|
103
|
+
this.supportSvcUrl = supportSvcUrl;
|
|
31
104
|
}
|
|
32
105
|
|
|
33
|
-
getProvider = ()
|
|
106
|
+
getProvider = (): ethers.JsonRpcProvider => {
|
|
107
|
+
if (!this._provider) {
|
|
108
|
+
this._provider = new ethers.JsonRpcProvider(this.rpcNode);
|
|
109
|
+
}
|
|
110
|
+
return this._provider;
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
setSigner = async (
|
|
114
|
+
signerOrPrivateKeyOrMnemonic: ethers.Signer | string
|
|
115
|
+
) => {
|
|
116
|
+
if (typeof signerOrPrivateKeyOrMnemonic === 'string') {
|
|
117
|
+
// Check if it's a mnemonic (12-24 words) or private key (0x... hex)
|
|
118
|
+
const trimmed = signerOrPrivateKeyOrMnemonic.trim();
|
|
119
|
+
const wordCount = trimmed.split(/\s+/).length;
|
|
120
|
+
|
|
121
|
+
// If it's 12-24 words, treat it as a mnemonic
|
|
122
|
+
if (wordCount >= 12 && wordCount <= 24) {
|
|
123
|
+
// Import and use the mnemonic conversion function
|
|
124
|
+
const { getEVMPrivateKeyFromMnemonic } = await import(
|
|
125
|
+
'./utils/crypto-utils'
|
|
126
|
+
);
|
|
127
|
+
const privateKey = await getEVMPrivateKeyFromMnemonic(trimmed);
|
|
128
|
+
this.signer = new ethers.Wallet(privateKey, this.getProvider());
|
|
129
|
+
} else {
|
|
130
|
+
// Treat as private key
|
|
131
|
+
this.signer = new ethers.Wallet(
|
|
132
|
+
signerOrPrivateKeyOrMnemonic,
|
|
133
|
+
this.getProvider()
|
|
134
|
+
);
|
|
135
|
+
}
|
|
136
|
+
} else {
|
|
137
|
+
this.signer = signerOrPrivateKeyOrMnemonic;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// reset cached signer contracts
|
|
141
|
+
this._signerContractDID = undefined;
|
|
142
|
+
this._signerContractRootResolver = undefined;
|
|
143
|
+
this._signerContractRootResolver2 = undefined;
|
|
144
|
+
};
|
|
145
|
+
|
|
146
|
+
getSigner = (): ethers.Signer => {
|
|
147
|
+
if (!this.signer) {
|
|
148
|
+
throw new Error('No signer available.');
|
|
149
|
+
}
|
|
150
|
+
return this.signer;
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
clearSigner = () => {
|
|
154
|
+
this.signer = undefined;
|
|
34
155
|
|
|
35
|
-
|
|
36
|
-
|
|
156
|
+
// reset cached signer contracts
|
|
157
|
+
this._signerContractDID = undefined;
|
|
158
|
+
this._signerContractRootResolver = undefined;
|
|
159
|
+
this._signerContractRootResolver2 = undefined;
|
|
160
|
+
};
|
|
161
|
+
|
|
162
|
+
getContractDID = (): ethers.Contract => {
|
|
163
|
+
if (!this._contractDID) {
|
|
164
|
+
this._contractDID = new ethers.Contract(
|
|
165
|
+
this.contractDid,
|
|
166
|
+
DID_ABI.abi,
|
|
167
|
+
this.getProvider()
|
|
168
|
+
);
|
|
169
|
+
}
|
|
170
|
+
return this._contractDID;
|
|
171
|
+
};
|
|
172
|
+
|
|
173
|
+
getSignerContractDID = (): ethers.Contract => {
|
|
174
|
+
if (!this._signerContractDID) {
|
|
175
|
+
this._signerContractDID = new ethers.Contract(
|
|
176
|
+
this.contractDid,
|
|
177
|
+
DID_ABI.abi,
|
|
178
|
+
this.getSigner()
|
|
179
|
+
);
|
|
180
|
+
}
|
|
181
|
+
return this._signerContractDID;
|
|
182
|
+
};
|
|
37
183
|
|
|
38
184
|
getContractDIDByPrivateKey = (privateKey: string) => {
|
|
39
185
|
const wallet = new ethers.Wallet(privateKey, this.getProvider());
|
|
@@ -55,12 +201,57 @@ export class DIDConsole implements DIDTag.ABITypeProviderHolder {
|
|
|
55
201
|
await provider.getSigner()
|
|
56
202
|
);
|
|
57
203
|
|
|
58
|
-
getContractRootResolver = () =>
|
|
59
|
-
|
|
60
|
-
this.
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
204
|
+
getContractRootResolver = (): ethers.Contract => {
|
|
205
|
+
if (!this._contractRootResolver) {
|
|
206
|
+
this._contractRootResolver = new ethers.Contract(
|
|
207
|
+
this.contractRootResolver,
|
|
208
|
+
RootResolverABI.abi,
|
|
209
|
+
this.getProvider()
|
|
210
|
+
);
|
|
211
|
+
}
|
|
212
|
+
return this._contractRootResolver;
|
|
213
|
+
};
|
|
214
|
+
|
|
215
|
+
getSignerContractRootResolver = (): ethers.Contract => {
|
|
216
|
+
if (!this._signerContractRootResolver) {
|
|
217
|
+
this._signerContractRootResolver = new ethers.Contract(
|
|
218
|
+
this.contractRootResolver,
|
|
219
|
+
RootResolverABI.abi,
|
|
220
|
+
this.getSigner()
|
|
221
|
+
);
|
|
222
|
+
}
|
|
223
|
+
return this._signerContractRootResolver;
|
|
224
|
+
};
|
|
225
|
+
|
|
226
|
+
getContractRootResolver2 = (): ethers.Contract => {
|
|
227
|
+
if (!this.contractRootResolver2) {
|
|
228
|
+
throw new Error('No contractRootResolver2 provided.');
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
if (!this._contractRootResolver2) {
|
|
232
|
+
this._contractRootResolver2 = new ethers.Contract(
|
|
233
|
+
this.contractRootResolver2,
|
|
234
|
+
RootResolver2ABI.abi,
|
|
235
|
+
this.getProvider()
|
|
236
|
+
);
|
|
237
|
+
}
|
|
238
|
+
return this._contractRootResolver2;
|
|
239
|
+
};
|
|
240
|
+
|
|
241
|
+
getSignerContractRootResolver2 = (): ethers.Contract => {
|
|
242
|
+
if (!this.contractRootResolver2) {
|
|
243
|
+
throw new Error('No contractRootResolver2 provided.');
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
if (!this._signerContractRootResolver2) {
|
|
247
|
+
this._signerContractRootResolver2 = new ethers.Contract(
|
|
248
|
+
this.contractRootResolver2,
|
|
249
|
+
RootResolver2ABI.abi,
|
|
250
|
+
this.getSigner()
|
|
251
|
+
);
|
|
252
|
+
}
|
|
253
|
+
return this._signerContractRootResolver2;
|
|
254
|
+
};
|
|
64
255
|
|
|
65
256
|
getSignerContractRootResolverByProvider = async (
|
|
66
257
|
provider: ethers.JsonRpcApiProvider
|
|
@@ -252,6 +443,89 @@ export class DIDConsole implements DIDTag.ABITypeProviderHolder {
|
|
|
252
443
|
|
|
253
444
|
resolve(datas);
|
|
254
445
|
});
|
|
446
|
+
|
|
447
|
+
/**
|
|
448
|
+
* Uses a chain-style operation design pattern, returning the operation context for the specified domain
|
|
449
|
+
* For example: await console.domain('developer.olares.com').setRSAPublicKey(rsaKey);
|
|
450
|
+
*/
|
|
451
|
+
domain(name: string): DomainContext {
|
|
452
|
+
return new DomainContext(name, this);
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
/**
|
|
456
|
+
* Set the operator address (super admin)
|
|
457
|
+
* Only the contract owner can call this method
|
|
458
|
+
*/
|
|
459
|
+
async setOperator(newOperator: string): Promise<TransactionResult> {
|
|
460
|
+
try {
|
|
461
|
+
const contract = this.getSignerContractDID();
|
|
462
|
+
const tx = await contract.setOperator(newOperator);
|
|
463
|
+
const receipt = await tx.wait();
|
|
464
|
+
|
|
465
|
+
return {
|
|
466
|
+
success: true,
|
|
467
|
+
transactionHash: receipt.hash,
|
|
468
|
+
gasUsed: receipt.gasUsed,
|
|
469
|
+
blockNumber: receipt.blockNumber
|
|
470
|
+
};
|
|
471
|
+
} catch (error) {
|
|
472
|
+
const parsedError = parseContractError(error);
|
|
473
|
+
|
|
474
|
+
// Always throw network errors
|
|
475
|
+
if (parsedError.isNetworkError) {
|
|
476
|
+
throw new Error(`Network error: ${parsedError.message}`);
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
// Return friendly contract error
|
|
480
|
+
return {
|
|
481
|
+
success: false,
|
|
482
|
+
transactionHash: '',
|
|
483
|
+
error: parsedError.message
|
|
484
|
+
};
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
/**
|
|
489
|
+
* Get the current operator address (super admin)
|
|
490
|
+
* @returns The operator address
|
|
491
|
+
*/
|
|
492
|
+
async getOperator(): Promise<string> {
|
|
493
|
+
try {
|
|
494
|
+
const contract = this.getContractDID();
|
|
495
|
+
return await contract.operator();
|
|
496
|
+
} catch (error) {
|
|
497
|
+
const parsedError = parseContractError(error);
|
|
498
|
+
throw new Error(parsedError.message);
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
/**
|
|
503
|
+
* Get contract owner address
|
|
504
|
+
* @returns The contract owner address
|
|
505
|
+
*/
|
|
506
|
+
async getOwner(): Promise<string> {
|
|
507
|
+
try {
|
|
508
|
+
const contract = this.getContractDID();
|
|
509
|
+
return await contract.owner();
|
|
510
|
+
} catch (error) {
|
|
511
|
+
const parsedError = parseContractError(error);
|
|
512
|
+
throw new Error(parsedError.message);
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
/**
|
|
517
|
+
* Get total supply of domains
|
|
518
|
+
* @returns The total number of registered domains
|
|
519
|
+
*/
|
|
520
|
+
async getTotalSupply(): Promise<bigint> {
|
|
521
|
+
try {
|
|
522
|
+
const contract = this.getContractDID();
|
|
523
|
+
return await contract.totalSupply();
|
|
524
|
+
} catch (error) {
|
|
525
|
+
const parsedError = parseContractError(error);
|
|
526
|
+
throw new Error(parsedError.message);
|
|
527
|
+
}
|
|
528
|
+
}
|
|
255
529
|
}
|
|
256
530
|
|
|
257
531
|
namespace OlaresID {
|
|
@@ -259,13 +533,17 @@ namespace OlaresID {
|
|
|
259
533
|
rpcNode: string,
|
|
260
534
|
contractDid: string,
|
|
261
535
|
contractRootResolver: string,
|
|
262
|
-
contractAbiType: string
|
|
536
|
+
contractAbiType: string,
|
|
537
|
+
contractRootResolver2?: string,
|
|
538
|
+
supportSvcUrl?: string
|
|
263
539
|
): DIDConsole => {
|
|
264
540
|
return new DIDConsole(
|
|
265
541
|
rpcNode,
|
|
266
542
|
contractDid,
|
|
267
543
|
contractRootResolver,
|
|
268
|
-
contractAbiType
|
|
544
|
+
contractAbiType,
|
|
545
|
+
contractRootResolver2,
|
|
546
|
+
supportSvcUrl
|
|
269
547
|
);
|
|
270
548
|
};
|
|
271
549
|
|
|
@@ -274,7 +552,9 @@ namespace OlaresID {
|
|
|
274
552
|
'https://optimism-rpc.publicnode.com',
|
|
275
553
|
'0x5DA4Fa8E567d86e52Ef8Da860de1be8f54cae97D',
|
|
276
554
|
'0xE2EABA0979277A90511F8873ae1e8cA26B54E740',
|
|
277
|
-
'0x9ae3F16bD99294Af1784beB1a0A5C84bf2636365'
|
|
555
|
+
'0x9ae3F16bD99294Af1784beB1a0A5C84bf2636365',
|
|
556
|
+
'0x7e7961aB771cA942CE4DB6e79579e016a33Dc95B',
|
|
557
|
+
'https://api.olares.com/did/support'
|
|
278
558
|
);
|
|
279
559
|
};
|
|
280
560
|
|
|
@@ -283,7 +563,9 @@ namespace OlaresID {
|
|
|
283
563
|
'https://sepolia.optimism.io',
|
|
284
564
|
'0xe2D7c3a9013960E04d4E9F5F9B63fff37eEd97A8',
|
|
285
565
|
'0xeF727cb066Fee98F88Db84555830063b4A24ddfc',
|
|
286
|
-
'0x7386fCBae6Ad4CCE1499d9153D99bc950B589718'
|
|
566
|
+
'0x7386fCBae6Ad4CCE1499d9153D99bc950B589718',
|
|
567
|
+
'0xcbC02aa08c77a374eC0D5A0403E108b7573d96e8',
|
|
568
|
+
'https://api-test.olares.com/did/support'
|
|
287
569
|
);
|
|
288
570
|
};
|
|
289
571
|
|
|
@@ -299,4 +581,8 @@ namespace OlaresID {
|
|
|
299
581
|
}
|
|
300
582
|
|
|
301
583
|
export { debug } from './debug';
|
|
584
|
+
|
|
585
|
+
// Export Tag utilities outside namespace
|
|
586
|
+
export { TagTypeBuilder, TagAbiCodec };
|
|
587
|
+
|
|
302
588
|
export default OlaresID;
|