@hyperlane-xyz/registry 1.0.6 → 1.1.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/README.md +3 -16
- package/dist/chainAddresses.d.ts +36 -0
- package/dist/chainAddresses.js +38 -2
- package/dist/chainMetadata.js +64 -0
- package/dist/chains/blast/addresses.d.ts +18 -0
- package/dist/chains/blast/addresses.js +18 -0
- package/dist/chains/blast/addresses.json +18 -0
- package/dist/chains/blast/addresses.yaml +16 -0
- package/dist/chains/blast/index.d.ts +2 -0
- package/dist/chains/blast/index.js +2 -0
- package/dist/chains/blast/logo.svg +1 -0
- package/dist/chains/blast/metadata.d.ts +2 -0
- package/dist/chains/blast/metadata.js +32 -0
- package/dist/chains/blast/metadata.json +32 -0
- package/dist/chains/blast/metadata.yaml +23 -0
- package/dist/chains/ethereum/addresses.js +1 -1
- package/dist/chains/ethereum/addresses.json +1 -1
- package/dist/chains/ethereum/addresses.yaml +1 -1
- package/dist/chains/mantapacific/addresses.js +1 -1
- package/dist/chains/mantapacific/addresses.json +1 -1
- package/dist/chains/mantapacific/addresses.yaml +1 -1
- package/dist/chains/mode/addresses.d.ts +18 -0
- package/dist/chains/mode/addresses.js +18 -0
- package/dist/chains/mode/addresses.json +18 -0
- package/dist/chains/mode/addresses.yaml +16 -0
- package/dist/chains/mode/index.d.ts +2 -0
- package/dist/chains/mode/index.js +2 -0
- package/dist/chains/mode/logo.svg +1 -0
- package/dist/chains/mode/metadata.d.ts +2 -0
- package/dist/chains/mode/metadata.js +32 -0
- package/dist/chains/mode/metadata.json +32 -0
- package/dist/chains/mode/metadata.yaml +22 -0
- package/dist/chains/schema.json +16 -1
- package/dist/consts.d.ts +3 -1
- package/dist/consts.js +3 -1
- package/dist/coreChainAddresses.js +2 -2
- package/dist/index.d.ts +6 -1
- package/dist/index.js +6 -1
- package/dist/registry/BaseRegistry.d.ts +12 -6
- package/dist/registry/BaseRegistry.js +16 -3
- package/dist/registry/GithubRegistry.d.ts +4 -2
- package/dist/registry/GithubRegistry.js +25 -23
- package/dist/registry/IRegistry.d.ts +6 -4
- package/dist/registry/LocalRegistry.d.ts +2 -2
- package/dist/registry/LocalRegistry.js +14 -5
- package/dist/registry/warp-utils.d.ts +3 -0
- package/dist/registry/warp-utils.js +22 -0
- package/dist/utils.d.ts +1 -0
- package/dist/utils.js +10 -0
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Hyperlane Registry
|
|
2
2
|
|
|
3
|
-
A collection of configs, artifacts, and schemas for Hyperlane.
|
|
3
|
+
A collection of configs, artifacts, and schemas for Hyperlane. See the [documentation](https://docs.hyperlane.xyz/docs/reference/registries) for more information.
|
|
4
4
|
|
|
5
5
|
## Contents
|
|
6
6
|
|
|
@@ -11,8 +11,6 @@ Structured as a folder for each chain. Each folder should contain a `metadata.ya
|
|
|
11
11
|
|
|
12
12
|
### Deployments
|
|
13
13
|
|
|
14
|
-
**WORK IN PROGRESS: Note, the shape and contents of the deployments folders are subject to change**
|
|
15
|
-
|
|
16
14
|
#### Core
|
|
17
15
|
|
|
18
16
|
Configs and artifacts for [Hyperlane Core Contract](https://docs.hyperlane.xyz/docs/deploy/deploy-hyperlane) deployments.
|
|
@@ -21,17 +19,6 @@ Configs and artifacts for [Hyperlane Core Contract](https://docs.hyperlane.xyz/d
|
|
|
21
19
|
|
|
22
20
|
Address artifacts for [Warp Route](https://docs.hyperlane.xyz/docs/deploy/deploy-warp-route) token deployments.
|
|
23
21
|
|
|
24
|
-
##
|
|
25
|
-
|
|
26
|
-
### Via the NPM package
|
|
27
|
-
|
|
28
|
-
```sh
|
|
29
|
-
# With npm
|
|
30
|
-
npm install @hyperlane-xyz/registry
|
|
31
|
-
# Or with yarn
|
|
32
|
-
yarn add @hyperlane-xyz/registry
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
### Via SDK utilities
|
|
22
|
+
## Contributing
|
|
36
23
|
|
|
37
|
-
|
|
24
|
+
This registry is maintained by the core Hyperlane team but community members are encouraged to add chain and deployment information here! See the [Contribution Guide](./CONTRIBUTING.md) for more information.
|
package/dist/chainAddresses.d.ts
CHANGED
|
@@ -105,6 +105,24 @@ export declare const chainAddresses: {
|
|
|
105
105
|
timelockController: string;
|
|
106
106
|
validatorAnnounce: string;
|
|
107
107
|
};
|
|
108
|
+
blast: {
|
|
109
|
+
domainRoutingIsmFactory: string;
|
|
110
|
+
fallbackRoutingHook: string;
|
|
111
|
+
interchainGasPaymaster: string;
|
|
112
|
+
interchainSecurityModule: string;
|
|
113
|
+
mailbox: string;
|
|
114
|
+
merkleTreeHook: string;
|
|
115
|
+
pausableHook: string;
|
|
116
|
+
protocolFee: string;
|
|
117
|
+
proxyAdmin: string;
|
|
118
|
+
staticAggregationHookFactory: string;
|
|
119
|
+
staticAggregationIsmFactory: string;
|
|
120
|
+
staticMerkleRootMultisigIsmFactory: string;
|
|
121
|
+
staticMessageIdMultisigIsmFactory: string;
|
|
122
|
+
storageGasOracle: string;
|
|
123
|
+
testRecipient: string;
|
|
124
|
+
validatorAnnounce: string;
|
|
125
|
+
};
|
|
108
126
|
bsc: {
|
|
109
127
|
aggregationHook: string;
|
|
110
128
|
domainRoutingIsmFactory: string;
|
|
@@ -290,6 +308,24 @@ export declare const chainAddresses: {
|
|
|
290
308
|
timelockController: string;
|
|
291
309
|
validatorAnnounce: string;
|
|
292
310
|
};
|
|
311
|
+
mode: {
|
|
312
|
+
domainRoutingIsmFactory: string;
|
|
313
|
+
fallbackRoutingHook: string;
|
|
314
|
+
interchainGasPaymaster: string;
|
|
315
|
+
interchainSecurityModule: string;
|
|
316
|
+
mailbox: string;
|
|
317
|
+
merkleTreeHook: string;
|
|
318
|
+
pausableHook: string;
|
|
319
|
+
protocolFee: string;
|
|
320
|
+
proxyAdmin: string;
|
|
321
|
+
staticAggregationHookFactory: string;
|
|
322
|
+
staticAggregationIsmFactory: string;
|
|
323
|
+
staticMerkleRootMultisigIsmFactory: string;
|
|
324
|
+
staticMessageIdMultisigIsmFactory: string;
|
|
325
|
+
storageGasOracle: string;
|
|
326
|
+
testRecipient: string;
|
|
327
|
+
validatorAnnounce: string;
|
|
328
|
+
};
|
|
293
329
|
moonbeam: {
|
|
294
330
|
aggregationHook: string;
|
|
295
331
|
domainRoutingIsmFactory: string;
|
package/dist/chainAddresses.js
CHANGED
|
@@ -105,6 +105,24 @@ export const chainAddresses = {
|
|
|
105
105
|
"timelockController": "0x0000000000000000000000000000000000000000",
|
|
106
106
|
"validatorAnnounce": "0x182E8d7c5F1B06201b102123FC7dF0EaeB445a7B"
|
|
107
107
|
},
|
|
108
|
+
"blast": {
|
|
109
|
+
"domainRoutingIsmFactory": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7",
|
|
110
|
+
"fallbackRoutingHook": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa",
|
|
111
|
+
"interchainGasPaymaster": "0xB3fCcD379ad66CED0c91028520C64226611A48c9",
|
|
112
|
+
"interchainSecurityModule": "0x0986f6D82A47045788b0ce8EF68f6C0D77726854",
|
|
113
|
+
"mailbox": "0x3a867fCfFeC2B790970eeBDC9023E75B0a172aa7",
|
|
114
|
+
"merkleTreeHook": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465",
|
|
115
|
+
"pausableHook": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0",
|
|
116
|
+
"protocolFee": "0x12582c7B0f43c6A667CBaA7fA8b112F7fb1E69F0",
|
|
117
|
+
"proxyAdmin": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D",
|
|
118
|
+
"staticAggregationHookFactory": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1",
|
|
119
|
+
"staticAggregationIsmFactory": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004",
|
|
120
|
+
"staticMerkleRootMultisigIsmFactory": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6",
|
|
121
|
+
"staticMessageIdMultisigIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908",
|
|
122
|
+
"storageGasOracle": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0",
|
|
123
|
+
"testRecipient": "0x17E216fBb22dF4ef8A6640ae9Cb147C92710ac84",
|
|
124
|
+
"validatorAnnounce": "0xFC62DeF1f08793aBf0E67f69257c6be258194F72"
|
|
125
|
+
},
|
|
108
126
|
"bsc": {
|
|
109
127
|
"aggregationHook": "0x402Fc106576462a892355d69ACF03D46A888ae88",
|
|
110
128
|
"domainRoutingIsmFactory": "0xe6Af5720d34213C805C08e2470aea979e3F72F75",
|
|
@@ -181,7 +199,7 @@ export const chainAddresses = {
|
|
|
181
199
|
"interchainAccountIsm": "0x609707355a53d2aAb6366f48E2b607C599D26B29",
|
|
182
200
|
"interchainAccountRouter": "0x8dBae9B1616c46A20591fE0006Bf015E28ca5cC9",
|
|
183
201
|
"interchainGasPaymaster": "0x9e6B1022bE9BBF5aFd152483DAD9b88911bC8611",
|
|
184
|
-
"interchainSecurityModule": "
|
|
202
|
+
"interchainSecurityModule": "0xB42b88243F749F47697F01Ae1cbBCA9d4763902a",
|
|
185
203
|
"mailbox": "0xc005dc82818d67AF737725bD4bf75435d065D239",
|
|
186
204
|
"merkleTreeHook": "0x48e6c30B97748d1e2e03bf3e9FbE3890ca5f8CCA",
|
|
187
205
|
"pausableHook": "0x3A66Dc852e56d3748838b3C27CF381105b83705b",
|
|
@@ -274,7 +292,7 @@ export const chainAddresses = {
|
|
|
274
292
|
"interchainAccountIsm": "0xA34ceDf9068C5deE726C67A4e1DCfCc2D6E2A7fD",
|
|
275
293
|
"interchainAccountRouter": "0x0f6fF770Eda6Ba1433C39cCf47d4059b254224Aa",
|
|
276
294
|
"interchainGasPaymaster": "0x0D63128D887159d63De29497dfa45AFc7C699AE4",
|
|
277
|
-
"interchainSecurityModule": "
|
|
295
|
+
"interchainSecurityModule": "0xEda7cCD2A8CF717dc997D0002e363e4D10bF5c0d",
|
|
278
296
|
"mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E",
|
|
279
297
|
"merkleTreeHook": "0x149db7afD694722747035d5AEC7007ccb6F8f112",
|
|
280
298
|
"pausableHook": "0x7556a0E61d577D921Cba8Fca0d7D6299d36E607E",
|
|
@@ -290,6 +308,24 @@ export const chainAddresses = {
|
|
|
290
308
|
"timelockController": "0x0000000000000000000000000000000000000000",
|
|
291
309
|
"validatorAnnounce": "0x2fa5F5C96419C222cDbCeC797D696e6cE428A7A9"
|
|
292
310
|
},
|
|
311
|
+
"mode": {
|
|
312
|
+
"domainRoutingIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908",
|
|
313
|
+
"fallbackRoutingHook": "0x8F1E22d309baa69D398a03cc88E9b46037e988AA",
|
|
314
|
+
"interchainGasPaymaster": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d",
|
|
315
|
+
"interchainSecurityModule": "0x8dfE6790DbB2Ecc1bEdb0eECfc1Ff467Ae5d8C89",
|
|
316
|
+
"mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7",
|
|
317
|
+
"merkleTreeHook": "0xE2ee936bEa8e42671c400aC96dE198E06F2bA2A6",
|
|
318
|
+
"pausableHook": "0xA1ac41d8A663fd317cc3BD94C7de92dC4BA4a882",
|
|
319
|
+
"protocolFee": "0xea820f9BCFD5E16a0dd42071EB61A29874Ad81A4",
|
|
320
|
+
"proxyAdmin": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004",
|
|
321
|
+
"staticAggregationHookFactory": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6",
|
|
322
|
+
"staticAggregationIsmFactory": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A",
|
|
323
|
+
"staticMerkleRootMultisigIsmFactory": "0x2C1FAbEcd7bFBdEBF27CcdB67baADB38b6Df90fC",
|
|
324
|
+
"staticMessageIdMultisigIsmFactory": "0x8b83fefd896fAa52057798f6426E9f0B080FCCcE",
|
|
325
|
+
"storageGasOracle": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465",
|
|
326
|
+
"testRecipient": "0x12582c7B0f43c6A667CBaA7fA8b112F7fb1E69F0",
|
|
327
|
+
"validatorAnnounce": "0x48083C69f5a42c6B69ABbAd48AE195BD36770ee2"
|
|
328
|
+
},
|
|
293
329
|
"moonbeam": {
|
|
294
330
|
"aggregationHook": "0x23cca255aE83F57F39EAf9D14fB9FdaDF22D5863",
|
|
295
331
|
"domainRoutingIsmFactory": "0x8061Af3A459093540d17823D651BC5E2A92669a7",
|
package/dist/chainMetadata.js
CHANGED
|
@@ -179,6 +179,38 @@ export const chainMetadata = {
|
|
|
179
179
|
}
|
|
180
180
|
]
|
|
181
181
|
},
|
|
182
|
+
"blast": {
|
|
183
|
+
"blockExplorers": [
|
|
184
|
+
{
|
|
185
|
+
"apiUrl": "https://api.routescan.io/v2/network/mainnet/evm/81457/etherscan/api",
|
|
186
|
+
"family": "routescan",
|
|
187
|
+
"name": "Blast Explorer",
|
|
188
|
+
"url": "https://blastexplorer.io"
|
|
189
|
+
}
|
|
190
|
+
],
|
|
191
|
+
"blocks": {
|
|
192
|
+
"confirmations": 1,
|
|
193
|
+
"estimateBlockTime": 2,
|
|
194
|
+
"reorgPeriod": 1
|
|
195
|
+
},
|
|
196
|
+
"chainId": 81457,
|
|
197
|
+
"displayName": "Blast",
|
|
198
|
+
"domainId": 81457,
|
|
199
|
+
"gasCurrencyCoinGeckoId": "ethereum",
|
|
200
|
+
"name": "blast",
|
|
201
|
+
"nativeToken": {
|
|
202
|
+
"decimals": 18,
|
|
203
|
+
"name": "Ether",
|
|
204
|
+
"symbol": "ETH"
|
|
205
|
+
},
|
|
206
|
+
"protocol": "ethereum",
|
|
207
|
+
"rpcUrls": [
|
|
208
|
+
{
|
|
209
|
+
"http": "https://rpc.blast.io"
|
|
210
|
+
}
|
|
211
|
+
],
|
|
212
|
+
"technicalStack": "other"
|
|
213
|
+
},
|
|
182
214
|
"bsc": {
|
|
183
215
|
"blockExplorers": [
|
|
184
216
|
{
|
|
@@ -555,6 +587,38 @@ export const chainMetadata = {
|
|
|
555
587
|
}
|
|
556
588
|
]
|
|
557
589
|
},
|
|
590
|
+
"mode": {
|
|
591
|
+
"blockExplorers": [
|
|
592
|
+
{
|
|
593
|
+
"apiUrl": "https://explorer.mode.network/api",
|
|
594
|
+
"family": "blockscout",
|
|
595
|
+
"name": "Mode Explorer",
|
|
596
|
+
"url": "https://explorer.mode.network"
|
|
597
|
+
}
|
|
598
|
+
],
|
|
599
|
+
"blocks": {
|
|
600
|
+
"confirmations": 1,
|
|
601
|
+
"estimateBlockTime": 2,
|
|
602
|
+
"reorgPeriod": 1
|
|
603
|
+
},
|
|
604
|
+
"chainId": 34443,
|
|
605
|
+
"displayName": "Mode",
|
|
606
|
+
"domainId": 34443,
|
|
607
|
+
"gasCurrencyCoinGeckoId": "ethereum",
|
|
608
|
+
"name": "mode",
|
|
609
|
+
"nativeToken": {
|
|
610
|
+
"decimals": 18,
|
|
611
|
+
"name": "Ether",
|
|
612
|
+
"symbol": "ETH"
|
|
613
|
+
},
|
|
614
|
+
"protocol": "ethereum",
|
|
615
|
+
"rpcUrls": [
|
|
616
|
+
{
|
|
617
|
+
"http": "https://mainnet.mode.network"
|
|
618
|
+
}
|
|
619
|
+
],
|
|
620
|
+
"technicalStack": "other"
|
|
621
|
+
},
|
|
558
622
|
"moonbeam": {
|
|
559
623
|
"blockExplorers": [
|
|
560
624
|
{
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export declare const addresses: {
|
|
2
|
+
domainRoutingIsmFactory: string;
|
|
3
|
+
fallbackRoutingHook: string;
|
|
4
|
+
interchainGasPaymaster: string;
|
|
5
|
+
interchainSecurityModule: string;
|
|
6
|
+
mailbox: string;
|
|
7
|
+
merkleTreeHook: string;
|
|
8
|
+
pausableHook: string;
|
|
9
|
+
protocolFee: string;
|
|
10
|
+
proxyAdmin: string;
|
|
11
|
+
staticAggregationHookFactory: string;
|
|
12
|
+
staticAggregationIsmFactory: string;
|
|
13
|
+
staticMerkleRootMultisigIsmFactory: string;
|
|
14
|
+
staticMessageIdMultisigIsmFactory: string;
|
|
15
|
+
storageGasOracle: string;
|
|
16
|
+
testRecipient: string;
|
|
17
|
+
validatorAnnounce: string;
|
|
18
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export const addresses = {
|
|
2
|
+
"domainRoutingIsmFactory": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7",
|
|
3
|
+
"fallbackRoutingHook": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa",
|
|
4
|
+
"interchainGasPaymaster": "0xB3fCcD379ad66CED0c91028520C64226611A48c9",
|
|
5
|
+
"interchainSecurityModule": "0x0986f6D82A47045788b0ce8EF68f6C0D77726854",
|
|
6
|
+
"mailbox": "0x3a867fCfFeC2B790970eeBDC9023E75B0a172aa7",
|
|
7
|
+
"merkleTreeHook": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465",
|
|
8
|
+
"pausableHook": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0",
|
|
9
|
+
"protocolFee": "0x12582c7B0f43c6A667CBaA7fA8b112F7fb1E69F0",
|
|
10
|
+
"proxyAdmin": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D",
|
|
11
|
+
"staticAggregationHookFactory": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1",
|
|
12
|
+
"staticAggregationIsmFactory": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004",
|
|
13
|
+
"staticMerkleRootMultisigIsmFactory": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6",
|
|
14
|
+
"staticMessageIdMultisigIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908",
|
|
15
|
+
"storageGasOracle": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0",
|
|
16
|
+
"testRecipient": "0x17E216fBb22dF4ef8A6640ae9Cb147C92710ac84",
|
|
17
|
+
"validatorAnnounce": "0xFC62DeF1f08793aBf0E67f69257c6be258194F72"
|
|
18
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"domainRoutingIsmFactory": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7",
|
|
3
|
+
"fallbackRoutingHook": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa",
|
|
4
|
+
"interchainGasPaymaster": "0xB3fCcD379ad66CED0c91028520C64226611A48c9",
|
|
5
|
+
"interchainSecurityModule": "0x0986f6D82A47045788b0ce8EF68f6C0D77726854",
|
|
6
|
+
"mailbox": "0x3a867fCfFeC2B790970eeBDC9023E75B0a172aa7",
|
|
7
|
+
"merkleTreeHook": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465",
|
|
8
|
+
"pausableHook": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0",
|
|
9
|
+
"protocolFee": "0x12582c7B0f43c6A667CBaA7fA8b112F7fb1E69F0",
|
|
10
|
+
"proxyAdmin": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D",
|
|
11
|
+
"staticAggregationHookFactory": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1",
|
|
12
|
+
"staticAggregationIsmFactory": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004",
|
|
13
|
+
"staticMerkleRootMultisigIsmFactory": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6",
|
|
14
|
+
"staticMessageIdMultisigIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908",
|
|
15
|
+
"storageGasOracle": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0",
|
|
16
|
+
"testRecipient": "0x17E216fBb22dF4ef8A6640ae9Cb147C92710ac84",
|
|
17
|
+
"validatorAnnounce": "0xFC62DeF1f08793aBf0E67f69257c6be258194F72"
|
|
18
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
domainRoutingIsmFactory: "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7"
|
|
2
|
+
fallbackRoutingHook: "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa"
|
|
3
|
+
interchainGasPaymaster: "0xB3fCcD379ad66CED0c91028520C64226611A48c9"
|
|
4
|
+
interchainSecurityModule: "0x0986f6D82A47045788b0ce8EF68f6C0D77726854"
|
|
5
|
+
mailbox: "0x3a867fCfFeC2B790970eeBDC9023E75B0a172aa7"
|
|
6
|
+
merkleTreeHook: "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465"
|
|
7
|
+
pausableHook: "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0"
|
|
8
|
+
protocolFee: "0x12582c7B0f43c6A667CBaA7fA8b112F7fb1E69F0"
|
|
9
|
+
proxyAdmin: "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D"
|
|
10
|
+
staticAggregationHookFactory: "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1"
|
|
11
|
+
staticAggregationIsmFactory: "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004"
|
|
12
|
+
staticMerkleRootMultisigIsmFactory: "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6"
|
|
13
|
+
staticMessageIdMultisigIsmFactory: "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908"
|
|
14
|
+
storageGasOracle: "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0"
|
|
15
|
+
testRecipient: "0x17E216fBb22dF4ef8A6640ae9Cb147C92710ac84"
|
|
16
|
+
validatorAnnounce: "0xFC62DeF1f08793aBf0E67f69257c6be258194F72"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="14.6 46.1 185.8 122.8"><path fill="#FCFC03" d="m161 106.4 29.3-14.6 10.1-31-20.2-14.7H45.7L14.6 69.2h158.1l-8.4 26h-63.4l-6.1 19h63.4l-17.8 54.7 29.7-14.7 10.6-32.8-19.9-14.6.2-.4Z"/><path fill="#FCFC03" d="m59.3 145.4 18.3-57-20.3-15.2-30.5 95.7h113.6l7.6-23.5H59.3Z"/></svg>
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export const metadata = {
|
|
2
|
+
"blockExplorers": [
|
|
3
|
+
{
|
|
4
|
+
"apiUrl": "https://api.routescan.io/v2/network/mainnet/evm/81457/etherscan/api",
|
|
5
|
+
"family": "routescan",
|
|
6
|
+
"name": "Blast Explorer",
|
|
7
|
+
"url": "https://blastexplorer.io"
|
|
8
|
+
}
|
|
9
|
+
],
|
|
10
|
+
"blocks": {
|
|
11
|
+
"confirmations": 1,
|
|
12
|
+
"estimateBlockTime": 2,
|
|
13
|
+
"reorgPeriod": 1
|
|
14
|
+
},
|
|
15
|
+
"chainId": 81457,
|
|
16
|
+
"displayName": "Blast",
|
|
17
|
+
"domainId": 81457,
|
|
18
|
+
"gasCurrencyCoinGeckoId": "ethereum",
|
|
19
|
+
"name": "blast",
|
|
20
|
+
"nativeToken": {
|
|
21
|
+
"decimals": 18,
|
|
22
|
+
"name": "Ether",
|
|
23
|
+
"symbol": "ETH"
|
|
24
|
+
},
|
|
25
|
+
"protocol": "ethereum",
|
|
26
|
+
"rpcUrls": [
|
|
27
|
+
{
|
|
28
|
+
"http": "https://rpc.blast.io"
|
|
29
|
+
}
|
|
30
|
+
],
|
|
31
|
+
"technicalStack": "other"
|
|
32
|
+
};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"blockExplorers": [
|
|
3
|
+
{
|
|
4
|
+
"apiUrl": "https://api.routescan.io/v2/network/mainnet/evm/81457/etherscan/api",
|
|
5
|
+
"family": "routescan",
|
|
6
|
+
"name": "Blast Explorer",
|
|
7
|
+
"url": "https://blastexplorer.io"
|
|
8
|
+
}
|
|
9
|
+
],
|
|
10
|
+
"blocks": {
|
|
11
|
+
"confirmations": 1,
|
|
12
|
+
"estimateBlockTime": 2,
|
|
13
|
+
"reorgPeriod": 1
|
|
14
|
+
},
|
|
15
|
+
"chainId": 81457,
|
|
16
|
+
"displayName": "Blast",
|
|
17
|
+
"domainId": 81457,
|
|
18
|
+
"gasCurrencyCoinGeckoId": "ethereum",
|
|
19
|
+
"name": "blast",
|
|
20
|
+
"nativeToken": {
|
|
21
|
+
"decimals": 18,
|
|
22
|
+
"name": "Ether",
|
|
23
|
+
"symbol": "ETH"
|
|
24
|
+
},
|
|
25
|
+
"protocol": "ethereum",
|
|
26
|
+
"rpcUrls": [
|
|
27
|
+
{
|
|
28
|
+
"http": "https://rpc.blast.io"
|
|
29
|
+
}
|
|
30
|
+
],
|
|
31
|
+
"technicalStack": "other"
|
|
32
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
blockExplorers:
|
|
3
|
+
- apiUrl: https://api.routescan.io/v2/network/mainnet/evm/81457/etherscan/api
|
|
4
|
+
family: routescan
|
|
5
|
+
name: Blast Explorer
|
|
6
|
+
url: https://blastexplorer.io
|
|
7
|
+
blocks:
|
|
8
|
+
confirmations: 1
|
|
9
|
+
estimateBlockTime: 2
|
|
10
|
+
reorgPeriod: 1
|
|
11
|
+
chainId: 81457
|
|
12
|
+
displayName: Blast
|
|
13
|
+
domainId: 81457
|
|
14
|
+
gasCurrencyCoinGeckoId: ethereum
|
|
15
|
+
name: blast
|
|
16
|
+
nativeToken:
|
|
17
|
+
decimals: 18
|
|
18
|
+
name: Ether
|
|
19
|
+
symbol: ETH
|
|
20
|
+
protocol: ethereum
|
|
21
|
+
rpcUrls:
|
|
22
|
+
- http: https://rpc.blast.io
|
|
23
|
+
technicalStack: other
|
|
@@ -5,7 +5,7 @@ export const addresses = {
|
|
|
5
5
|
"interchainAccountIsm": "0x609707355a53d2aAb6366f48E2b607C599D26B29",
|
|
6
6
|
"interchainAccountRouter": "0x8dBae9B1616c46A20591fE0006Bf015E28ca5cC9",
|
|
7
7
|
"interchainGasPaymaster": "0x9e6B1022bE9BBF5aFd152483DAD9b88911bC8611",
|
|
8
|
-
"interchainSecurityModule": "
|
|
8
|
+
"interchainSecurityModule": "0xB42b88243F749F47697F01Ae1cbBCA9d4763902a",
|
|
9
9
|
"mailbox": "0xc005dc82818d67AF737725bD4bf75435d065D239",
|
|
10
10
|
"merkleTreeHook": "0x48e6c30B97748d1e2e03bf3e9FbE3890ca5f8CCA",
|
|
11
11
|
"pausableHook": "0x3A66Dc852e56d3748838b3C27CF381105b83705b",
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"interchainAccountIsm": "0x609707355a53d2aAb6366f48E2b607C599D26B29",
|
|
6
6
|
"interchainAccountRouter": "0x8dBae9B1616c46A20591fE0006Bf015E28ca5cC9",
|
|
7
7
|
"interchainGasPaymaster": "0x9e6B1022bE9BBF5aFd152483DAD9b88911bC8611",
|
|
8
|
-
"interchainSecurityModule": "
|
|
8
|
+
"interchainSecurityModule": "0xB42b88243F749F47697F01Ae1cbBCA9d4763902a",
|
|
9
9
|
"mailbox": "0xc005dc82818d67AF737725bD4bf75435d065D239",
|
|
10
10
|
"merkleTreeHook": "0x48e6c30B97748d1e2e03bf3e9FbE3890ca5f8CCA",
|
|
11
11
|
"pausableHook": "0x3A66Dc852e56d3748838b3C27CF381105b83705b",
|
|
@@ -4,7 +4,7 @@ fallbackRoutingHook: "0x571f1435613381208477ac5d6974310d88AC7cB7"
|
|
|
4
4
|
interchainAccountIsm: "0x609707355a53d2aAb6366f48E2b607C599D26B29"
|
|
5
5
|
interchainAccountRouter: "0x8dBae9B1616c46A20591fE0006Bf015E28ca5cC9"
|
|
6
6
|
interchainGasPaymaster: "0x9e6B1022bE9BBF5aFd152483DAD9b88911bC8611"
|
|
7
|
-
interchainSecurityModule: "
|
|
7
|
+
interchainSecurityModule: "0xB42b88243F749F47697F01Ae1cbBCA9d4763902a"
|
|
8
8
|
mailbox: "0xc005dc82818d67AF737725bD4bf75435d065D239"
|
|
9
9
|
merkleTreeHook: "0x48e6c30B97748d1e2e03bf3e9FbE3890ca5f8CCA"
|
|
10
10
|
pausableHook: "0x3A66Dc852e56d3748838b3C27CF381105b83705b"
|
|
@@ -6,7 +6,7 @@ export const addresses = {
|
|
|
6
6
|
"interchainAccountIsm": "0xA34ceDf9068C5deE726C67A4e1DCfCc2D6E2A7fD",
|
|
7
7
|
"interchainAccountRouter": "0x0f6fF770Eda6Ba1433C39cCf47d4059b254224Aa",
|
|
8
8
|
"interchainGasPaymaster": "0x0D63128D887159d63De29497dfa45AFc7C699AE4",
|
|
9
|
-
"interchainSecurityModule": "
|
|
9
|
+
"interchainSecurityModule": "0xEda7cCD2A8CF717dc997D0002e363e4D10bF5c0d",
|
|
10
10
|
"mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E",
|
|
11
11
|
"merkleTreeHook": "0x149db7afD694722747035d5AEC7007ccb6F8f112",
|
|
12
12
|
"pausableHook": "0x7556a0E61d577D921Cba8Fca0d7D6299d36E607E",
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"interchainAccountIsm": "0xA34ceDf9068C5deE726C67A4e1DCfCc2D6E2A7fD",
|
|
7
7
|
"interchainAccountRouter": "0x0f6fF770Eda6Ba1433C39cCf47d4059b254224Aa",
|
|
8
8
|
"interchainGasPaymaster": "0x0D63128D887159d63De29497dfa45AFc7C699AE4",
|
|
9
|
-
"interchainSecurityModule": "
|
|
9
|
+
"interchainSecurityModule": "0xEda7cCD2A8CF717dc997D0002e363e4D10bF5c0d",
|
|
10
10
|
"mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E",
|
|
11
11
|
"merkleTreeHook": "0x149db7afD694722747035d5AEC7007ccb6F8f112",
|
|
12
12
|
"pausableHook": "0x7556a0E61d577D921Cba8Fca0d7D6299d36E607E",
|
|
@@ -5,7 +5,7 @@ fallbackRoutingHook: "0xD1E267d2d7876e97E217BfE61c34AB50FEF52807"
|
|
|
5
5
|
interchainAccountIsm: "0xA34ceDf9068C5deE726C67A4e1DCfCc2D6E2A7fD"
|
|
6
6
|
interchainAccountRouter: "0x0f6fF770Eda6Ba1433C39cCf47d4059b254224Aa"
|
|
7
7
|
interchainGasPaymaster: "0x0D63128D887159d63De29497dfa45AFc7C699AE4"
|
|
8
|
-
interchainSecurityModule: "
|
|
8
|
+
interchainSecurityModule: "0xEda7cCD2A8CF717dc997D0002e363e4D10bF5c0d"
|
|
9
9
|
mailbox: "0x3a464f746D23Ab22155710f44dB16dcA53e0775E"
|
|
10
10
|
merkleTreeHook: "0x149db7afD694722747035d5AEC7007ccb6F8f112"
|
|
11
11
|
pausableHook: "0x7556a0E61d577D921Cba8Fca0d7D6299d36E607E"
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export declare const addresses: {
|
|
2
|
+
domainRoutingIsmFactory: string;
|
|
3
|
+
fallbackRoutingHook: string;
|
|
4
|
+
interchainGasPaymaster: string;
|
|
5
|
+
interchainSecurityModule: string;
|
|
6
|
+
mailbox: string;
|
|
7
|
+
merkleTreeHook: string;
|
|
8
|
+
pausableHook: string;
|
|
9
|
+
protocolFee: string;
|
|
10
|
+
proxyAdmin: string;
|
|
11
|
+
staticAggregationHookFactory: string;
|
|
12
|
+
staticAggregationIsmFactory: string;
|
|
13
|
+
staticMerkleRootMultisigIsmFactory: string;
|
|
14
|
+
staticMessageIdMultisigIsmFactory: string;
|
|
15
|
+
storageGasOracle: string;
|
|
16
|
+
testRecipient: string;
|
|
17
|
+
validatorAnnounce: string;
|
|
18
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export const addresses = {
|
|
2
|
+
"domainRoutingIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908",
|
|
3
|
+
"fallbackRoutingHook": "0x8F1E22d309baa69D398a03cc88E9b46037e988AA",
|
|
4
|
+
"interchainGasPaymaster": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d",
|
|
5
|
+
"interchainSecurityModule": "0x8dfE6790DbB2Ecc1bEdb0eECfc1Ff467Ae5d8C89",
|
|
6
|
+
"mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7",
|
|
7
|
+
"merkleTreeHook": "0xE2ee936bEa8e42671c400aC96dE198E06F2bA2A6",
|
|
8
|
+
"pausableHook": "0xA1ac41d8A663fd317cc3BD94C7de92dC4BA4a882",
|
|
9
|
+
"protocolFee": "0xea820f9BCFD5E16a0dd42071EB61A29874Ad81A4",
|
|
10
|
+
"proxyAdmin": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004",
|
|
11
|
+
"staticAggregationHookFactory": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6",
|
|
12
|
+
"staticAggregationIsmFactory": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A",
|
|
13
|
+
"staticMerkleRootMultisigIsmFactory": "0x2C1FAbEcd7bFBdEBF27CcdB67baADB38b6Df90fC",
|
|
14
|
+
"staticMessageIdMultisigIsmFactory": "0x8b83fefd896fAa52057798f6426E9f0B080FCCcE",
|
|
15
|
+
"storageGasOracle": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465",
|
|
16
|
+
"testRecipient": "0x12582c7B0f43c6A667CBaA7fA8b112F7fb1E69F0",
|
|
17
|
+
"validatorAnnounce": "0x48083C69f5a42c6B69ABbAd48AE195BD36770ee2"
|
|
18
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"domainRoutingIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908",
|
|
3
|
+
"fallbackRoutingHook": "0x8F1E22d309baa69D398a03cc88E9b46037e988AA",
|
|
4
|
+
"interchainGasPaymaster": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d",
|
|
5
|
+
"interchainSecurityModule": "0x8dfE6790DbB2Ecc1bEdb0eECfc1Ff467Ae5d8C89",
|
|
6
|
+
"mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7",
|
|
7
|
+
"merkleTreeHook": "0xE2ee936bEa8e42671c400aC96dE198E06F2bA2A6",
|
|
8
|
+
"pausableHook": "0xA1ac41d8A663fd317cc3BD94C7de92dC4BA4a882",
|
|
9
|
+
"protocolFee": "0xea820f9BCFD5E16a0dd42071EB61A29874Ad81A4",
|
|
10
|
+
"proxyAdmin": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004",
|
|
11
|
+
"staticAggregationHookFactory": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6",
|
|
12
|
+
"staticAggregationIsmFactory": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A",
|
|
13
|
+
"staticMerkleRootMultisigIsmFactory": "0x2C1FAbEcd7bFBdEBF27CcdB67baADB38b6Df90fC",
|
|
14
|
+
"staticMessageIdMultisigIsmFactory": "0x8b83fefd896fAa52057798f6426E9f0B080FCCcE",
|
|
15
|
+
"storageGasOracle": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465",
|
|
16
|
+
"testRecipient": "0x12582c7B0f43c6A667CBaA7fA8b112F7fb1E69F0",
|
|
17
|
+
"validatorAnnounce": "0x48083C69f5a42c6B69ABbAd48AE195BD36770ee2"
|
|
18
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
domainRoutingIsmFactory: "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908"
|
|
2
|
+
fallbackRoutingHook: "0x8F1E22d309baa69D398a03cc88E9b46037e988AA"
|
|
3
|
+
interchainGasPaymaster: "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d"
|
|
4
|
+
interchainSecurityModule: "0x8dfE6790DbB2Ecc1bEdb0eECfc1Ff467Ae5d8C89"
|
|
5
|
+
mailbox: "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7"
|
|
6
|
+
merkleTreeHook: "0xE2ee936bEa8e42671c400aC96dE198E06F2bA2A6"
|
|
7
|
+
pausableHook: "0xA1ac41d8A663fd317cc3BD94C7de92dC4BA4a882"
|
|
8
|
+
protocolFee: "0xea820f9BCFD5E16a0dd42071EB61A29874Ad81A4"
|
|
9
|
+
proxyAdmin: "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004"
|
|
10
|
+
staticAggregationHookFactory: "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6"
|
|
11
|
+
staticAggregationIsmFactory: "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A"
|
|
12
|
+
staticMerkleRootMultisigIsmFactory: "0x2C1FAbEcd7bFBdEBF27CcdB67baADB38b6Df90fC"
|
|
13
|
+
staticMessageIdMultisigIsmFactory: "0x8b83fefd896fAa52057798f6426E9f0B080FCCcE"
|
|
14
|
+
storageGasOracle: "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465"
|
|
15
|
+
testRecipient: "0x12582c7B0f43c6A667CBaA7fA8b112F7fb1E69F0"
|
|
16
|
+
validatorAnnounce: "0x48083C69f5a42c6B69ABbAd48AE195BD36770ee2"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="enable-background:new 0 0 1000 1000" viewBox="216.2 247.6 568.5 503.2"><path d="M784.2 750.7H673.3V500l44.4-143-31.5-11.2-143.8 404.9H458L314.1 345.8 282.7 357l44.4 143v250.8H216.2V247.6h165.1l102.4 288v84.6h33.5v-84.6l102.4-288h165.1v503.1h-.5z" style="fill:#dffe00"/></svg>
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export const metadata = {
|
|
2
|
+
"blockExplorers": [
|
|
3
|
+
{
|
|
4
|
+
"apiUrl": "https://explorer.mode.network/api",
|
|
5
|
+
"family": "blockscout",
|
|
6
|
+
"name": "Mode Explorer",
|
|
7
|
+
"url": "https://explorer.mode.network"
|
|
8
|
+
}
|
|
9
|
+
],
|
|
10
|
+
"blocks": {
|
|
11
|
+
"confirmations": 1,
|
|
12
|
+
"estimateBlockTime": 2,
|
|
13
|
+
"reorgPeriod": 1
|
|
14
|
+
},
|
|
15
|
+
"chainId": 34443,
|
|
16
|
+
"displayName": "Mode",
|
|
17
|
+
"domainId": 34443,
|
|
18
|
+
"gasCurrencyCoinGeckoId": "ethereum",
|
|
19
|
+
"name": "mode",
|
|
20
|
+
"nativeToken": {
|
|
21
|
+
"decimals": 18,
|
|
22
|
+
"name": "Ether",
|
|
23
|
+
"symbol": "ETH"
|
|
24
|
+
},
|
|
25
|
+
"protocol": "ethereum",
|
|
26
|
+
"rpcUrls": [
|
|
27
|
+
{
|
|
28
|
+
"http": "https://mainnet.mode.network"
|
|
29
|
+
}
|
|
30
|
+
],
|
|
31
|
+
"technicalStack": "other"
|
|
32
|
+
};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"blockExplorers": [
|
|
3
|
+
{
|
|
4
|
+
"apiUrl": "https://explorer.mode.network/api",
|
|
5
|
+
"family": "blockscout",
|
|
6
|
+
"name": "Mode Explorer",
|
|
7
|
+
"url": "https://explorer.mode.network"
|
|
8
|
+
}
|
|
9
|
+
],
|
|
10
|
+
"blocks": {
|
|
11
|
+
"confirmations": 1,
|
|
12
|
+
"estimateBlockTime": 2,
|
|
13
|
+
"reorgPeriod": 1
|
|
14
|
+
},
|
|
15
|
+
"chainId": 34443,
|
|
16
|
+
"displayName": "Mode",
|
|
17
|
+
"domainId": 34443,
|
|
18
|
+
"gasCurrencyCoinGeckoId": "ethereum",
|
|
19
|
+
"name": "mode",
|
|
20
|
+
"nativeToken": {
|
|
21
|
+
"decimals": 18,
|
|
22
|
+
"name": "Ether",
|
|
23
|
+
"symbol": "ETH"
|
|
24
|
+
},
|
|
25
|
+
"protocol": "ethereum",
|
|
26
|
+
"rpcUrls": [
|
|
27
|
+
{
|
|
28
|
+
"http": "https://mainnet.mode.network"
|
|
29
|
+
}
|
|
30
|
+
],
|
|
31
|
+
"technicalStack": "other"
|
|
32
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
blockExplorers:
|
|
2
|
+
- apiUrl: https://explorer.mode.network/api
|
|
3
|
+
family: blockscout
|
|
4
|
+
name: Mode Explorer
|
|
5
|
+
url: https://explorer.mode.network
|
|
6
|
+
blocks:
|
|
7
|
+
confirmations: 1
|
|
8
|
+
estimateBlockTime: 2
|
|
9
|
+
reorgPeriod: 1
|
|
10
|
+
chainId: 34443
|
|
11
|
+
displayName: Mode
|
|
12
|
+
domainId: 34443
|
|
13
|
+
gasCurrencyCoinGeckoId: ethereum
|
|
14
|
+
name: mode
|
|
15
|
+
nativeToken:
|
|
16
|
+
decimals: 18
|
|
17
|
+
name: Ether
|
|
18
|
+
symbol: ETH
|
|
19
|
+
protocol: ethereum
|
|
20
|
+
rpcUrls:
|
|
21
|
+
- http: https://mainnet.mode.network
|
|
22
|
+
technicalStack: other
|
package/dist/chains/schema.json
CHANGED
|
@@ -14,7 +14,6 @@
|
|
|
14
14
|
"enum": [
|
|
15
15
|
"ethereum",
|
|
16
16
|
"sealevel",
|
|
17
|
-
"fuel",
|
|
18
17
|
"cosmos"
|
|
19
18
|
],
|
|
20
19
|
"description": "The type of protocol used by this chain. See ProtocolType for valid values."
|
|
@@ -91,6 +90,11 @@
|
|
|
91
90
|
"format": "uri",
|
|
92
91
|
"description": "The HTTP URL of the RPC endpoint (preferably HTTPS)."
|
|
93
92
|
},
|
|
93
|
+
"concurrency": {
|
|
94
|
+
"type": "integer",
|
|
95
|
+
"exclusiveMinimum": 0,
|
|
96
|
+
"description": "Maximum number of concurrent RPC requests."
|
|
97
|
+
},
|
|
94
98
|
"webSocket": {
|
|
95
99
|
"type": "string",
|
|
96
100
|
"description": "The WSS URL if the endpoint also supports websockets."
|
|
@@ -254,6 +258,17 @@
|
|
|
254
258
|
"isTestnet": {
|
|
255
259
|
"type": "boolean",
|
|
256
260
|
"description": "Whether the chain is considered a testnet or a mainnet."
|
|
261
|
+
},
|
|
262
|
+
"index": {
|
|
263
|
+
"type": "object",
|
|
264
|
+
"properties": {
|
|
265
|
+
"from": {
|
|
266
|
+
"type": "number",
|
|
267
|
+
"description": "The block to start any indexing from."
|
|
268
|
+
}
|
|
269
|
+
},
|
|
270
|
+
"additionalProperties": false,
|
|
271
|
+
"description": "Indexing settings for the chain."
|
|
257
272
|
}
|
|
258
273
|
},
|
|
259
274
|
"required": [
|
package/dist/consts.d.ts
CHANGED
|
@@ -1 +1,3 @@
|
|
|
1
|
-
export declare const
|
|
1
|
+
export declare const SCHEMA_REF = "# yaml-language-server: $schema=../schema.json";
|
|
2
|
+
export declare const DEFAULT_GITHUB_REGISTRY = "https://github.com/hyperlane-xyz/hyperlane-registry";
|
|
3
|
+
export declare const GITHUB_FETCH_CONCURRENCY_LIMIT = 5;
|
package/dist/consts.js
CHANGED
|
@@ -1 +1,3 @@
|
|
|
1
|
-
export const
|
|
1
|
+
export const SCHEMA_REF = '# yaml-language-server: $schema=../schema.json';
|
|
2
|
+
export const DEFAULT_GITHUB_REGISTRY = 'https://github.com/hyperlane-xyz/hyperlane-registry';
|
|
3
|
+
export const GITHUB_FETCH_CONCURRENCY_LIMIT = 5;
|
|
@@ -119,7 +119,7 @@ export const coreChainAddresses = {
|
|
|
119
119
|
"interchainAccountIsm": "0x609707355a53d2aAb6366f48E2b607C599D26B29",
|
|
120
120
|
"interchainAccountRouter": "0x8dBae9B1616c46A20591fE0006Bf015E28ca5cC9",
|
|
121
121
|
"interchainGasPaymaster": "0x9e6B1022bE9BBF5aFd152483DAD9b88911bC8611",
|
|
122
|
-
"interchainSecurityModule": "
|
|
122
|
+
"interchainSecurityModule": "0xB42b88243F749F47697F01Ae1cbBCA9d4763902a",
|
|
123
123
|
"mailbox": "0xc005dc82818d67AF737725bD4bf75435d065D239",
|
|
124
124
|
"merkleTreeHook": "0x48e6c30B97748d1e2e03bf3e9FbE3890ca5f8CCA",
|
|
125
125
|
"pausableHook": "0x3A66Dc852e56d3748838b3C27CF381105b83705b",
|
|
@@ -143,7 +143,7 @@ export const coreChainAddresses = {
|
|
|
143
143
|
"interchainAccountIsm": "0xA34ceDf9068C5deE726C67A4e1DCfCc2D6E2A7fD",
|
|
144
144
|
"interchainAccountRouter": "0x0f6fF770Eda6Ba1433C39cCf47d4059b254224Aa",
|
|
145
145
|
"interchainGasPaymaster": "0x0D63128D887159d63De29497dfa45AFc7C699AE4",
|
|
146
|
-
"interchainSecurityModule": "
|
|
146
|
+
"interchainSecurityModule": "0xEda7cCD2A8CF717dc997D0002e363e4D10bF5c0d",
|
|
147
147
|
"mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E",
|
|
148
148
|
"merkleTreeHook": "0x149db7afD694722747035d5AEC7007ccb6F8f112",
|
|
149
149
|
"pausableHook": "0x7556a0E61d577D921Cba8Fca0d7D6299d36E607E",
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { CoreChain, CoreChainName, CoreChains, CoreMainnets, CoreTestnets } from './core/chains.js';
|
|
2
|
-
export {
|
|
2
|
+
export { DEFAULT_GITHUB_REGISTRY } from './consts.js';
|
|
3
|
+
export { BaseRegistry, CHAIN_FILE_REGEX } from './registry/BaseRegistry.js';
|
|
3
4
|
export { GithubRegistry, GithubRegistryOptions } from './registry/GithubRegistry.js';
|
|
4
5
|
export { ChainFiles, IRegistry, RegistryContent, RegistryType } from './registry/IRegistry.js';
|
|
5
6
|
export { ChainAddresses, ChainAddressesSchema } from './types.js';
|
|
@@ -17,6 +18,8 @@ export { metadata as avalanche } from './chains/avalanche/metadata.js';
|
|
|
17
18
|
export { addresses as avalancheAddresses } from './chains/avalanche/addresses.js';
|
|
18
19
|
export { metadata as base } from './chains/base/metadata.js';
|
|
19
20
|
export { addresses as baseAddresses } from './chains/base/addresses.js';
|
|
21
|
+
export { metadata as blast } from './chains/blast/metadata.js';
|
|
22
|
+
export { addresses as blastAddresses } from './chains/blast/addresses.js';
|
|
20
23
|
export { metadata as bsc } from './chains/bsc/metadata.js';
|
|
21
24
|
export { addresses as bscAddresses } from './chains/bsc/addresses.js';
|
|
22
25
|
export { metadata as bsctestnet } from './chains/bsctestnet/metadata.js';
|
|
@@ -36,6 +39,8 @@ export { addresses as inevmAddresses } from './chains/inevm/addresses.js';
|
|
|
36
39
|
export { metadata as injective } from './chains/injective/metadata.js';
|
|
37
40
|
export { metadata as mantapacific } from './chains/mantapacific/metadata.js';
|
|
38
41
|
export { addresses as mantapacificAddresses } from './chains/mantapacific/addresses.js';
|
|
42
|
+
export { metadata as mode } from './chains/mode/metadata.js';
|
|
43
|
+
export { addresses as modeAddresses } from './chains/mode/addresses.js';
|
|
39
44
|
export { metadata as moonbeam } from './chains/moonbeam/metadata.js';
|
|
40
45
|
export { addresses as moonbeamAddresses } from './chains/moonbeam/addresses.js';
|
|
41
46
|
export { metadata as nautilus } from './chains/nautilus/metadata.js';
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { CoreChain, CoreChains, CoreMainnets, CoreTestnets } from './core/chains.js';
|
|
2
|
-
export {
|
|
2
|
+
export { DEFAULT_GITHUB_REGISTRY } from './consts.js';
|
|
3
|
+
export { BaseRegistry, CHAIN_FILE_REGEX } from './registry/BaseRegistry.js';
|
|
3
4
|
export { GithubRegistry } from './registry/GithubRegistry.js';
|
|
4
5
|
export { RegistryType } from './registry/IRegistry.js';
|
|
5
6
|
export { ChainAddressesSchema } from './types.js';
|
|
@@ -17,6 +18,8 @@ export { metadata as avalanche } from './chains/avalanche/metadata.js';
|
|
|
17
18
|
export { addresses as avalancheAddresses } from './chains/avalanche/addresses.js';
|
|
18
19
|
export { metadata as base } from './chains/base/metadata.js';
|
|
19
20
|
export { addresses as baseAddresses } from './chains/base/addresses.js';
|
|
21
|
+
export { metadata as blast } from './chains/blast/metadata.js';
|
|
22
|
+
export { addresses as blastAddresses } from './chains/blast/addresses.js';
|
|
20
23
|
export { metadata as bsc } from './chains/bsc/metadata.js';
|
|
21
24
|
export { addresses as bscAddresses } from './chains/bsc/addresses.js';
|
|
22
25
|
export { metadata as bsctestnet } from './chains/bsctestnet/metadata.js';
|
|
@@ -36,6 +39,8 @@ export { addresses as inevmAddresses } from './chains/inevm/addresses.js';
|
|
|
36
39
|
export { metadata as injective } from './chains/injective/metadata.js';
|
|
37
40
|
export { metadata as mantapacific } from './chains/mantapacific/metadata.js';
|
|
38
41
|
export { addresses as mantapacificAddresses } from './chains/mantapacific/addresses.js';
|
|
42
|
+
export { metadata as mode } from './chains/mode/metadata.js';
|
|
43
|
+
export { addresses as modeAddresses } from './chains/mode/addresses.js';
|
|
39
44
|
export { metadata as moonbeam } from './chains/moonbeam/metadata.js';
|
|
40
45
|
export { addresses as moonbeamAddresses } from './chains/moonbeam/addresses.js';
|
|
41
46
|
export { metadata as nautilus } from './chains/nautilus/metadata.js';
|
|
@@ -1,34 +1,40 @@
|
|
|
1
1
|
import type { Logger } from 'pino';
|
|
2
|
-
import type { ChainMap, ChainMetadata, ChainName } from '@hyperlane-xyz/sdk';
|
|
2
|
+
import type { ChainMap, ChainMetadata, ChainName, WarpCoreConfig } from '@hyperlane-xyz/sdk';
|
|
3
3
|
import type { ChainAddresses, MaybePromise } from '../types.js';
|
|
4
4
|
import type { IRegistry, RegistryContent, RegistryType } from './IRegistry.js';
|
|
5
5
|
export declare const CHAIN_FILE_REGEX: RegExp;
|
|
6
6
|
export declare abstract class BaseRegistry implements IRegistry {
|
|
7
7
|
abstract type: RegistryType;
|
|
8
|
+
readonly uri: string;
|
|
8
9
|
protected readonly logger: Logger;
|
|
9
10
|
protected listContentCache?: RegistryContent;
|
|
10
11
|
protected metadataCache?: ChainMap<ChainMetadata>;
|
|
11
12
|
protected addressCache?: ChainMap<ChainAddresses>;
|
|
12
|
-
constructor({ logger }: {
|
|
13
|
+
constructor({ uri, logger }: {
|
|
14
|
+
uri: string;
|
|
13
15
|
logger?: Logger;
|
|
14
16
|
});
|
|
15
17
|
protected getChainsPath(): string;
|
|
16
|
-
protected
|
|
18
|
+
protected getWarpArtifactsPaths({ tokens }: WarpCoreConfig): {
|
|
19
|
+
configPath: string;
|
|
20
|
+
addressesPath: string;
|
|
21
|
+
};
|
|
17
22
|
abstract listRegistryContent(): MaybePromise<RegistryContent>;
|
|
18
23
|
abstract getChains(): MaybePromise<Array<ChainName>>;
|
|
19
24
|
abstract getMetadata(): MaybePromise<ChainMap<ChainMetadata>>;
|
|
20
25
|
abstract getChainMetadata(chainName: ChainName): MaybePromise<ChainMetadata | null>;
|
|
21
26
|
abstract getAddresses(): MaybePromise<ChainMap<ChainAddresses>>;
|
|
22
27
|
abstract getChainAddresses(chainName: ChainName): MaybePromise<ChainAddresses | null>;
|
|
23
|
-
abstract addChain(
|
|
28
|
+
abstract addChain(chain: {
|
|
24
29
|
chainName: ChainName;
|
|
25
30
|
metadata?: ChainMetadata;
|
|
26
31
|
addresses?: ChainAddresses;
|
|
27
32
|
}): MaybePromise<void>;
|
|
28
|
-
abstract updateChain(
|
|
33
|
+
abstract updateChain(chain: {
|
|
29
34
|
chainName: ChainName;
|
|
30
35
|
metadata?: ChainMetadata;
|
|
31
36
|
addresses?: ChainAddresses;
|
|
32
37
|
}): MaybePromise<void>;
|
|
33
|
-
abstract removeChain(
|
|
38
|
+
abstract removeChain(chain: ChainName): MaybePromise<void>;
|
|
39
|
+
abstract addWarpRoute(config: WarpCoreConfig): MaybePromise<void>;
|
|
34
40
|
}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
export const CHAIN_FILE_REGEX = /chains\/([a-z0-9]+)\/([a-z]+)\.yaml/;
|
|
2
2
|
export class BaseRegistry {
|
|
3
|
+
uri;
|
|
3
4
|
logger;
|
|
4
5
|
// Caches
|
|
5
6
|
listContentCache;
|
|
6
7
|
metadataCache;
|
|
7
8
|
addressCache;
|
|
8
|
-
constructor({ logger }) {
|
|
9
|
+
constructor({ uri, logger }) {
|
|
10
|
+
this.uri = uri;
|
|
9
11
|
// @ts-ignore forcing in to avoid a @hyperlane-xyz/utils
|
|
10
12
|
// dependency here, which could bloat consumer bundles
|
|
11
13
|
// unnecessarily (e.g. they just want metadata)
|
|
@@ -14,7 +16,18 @@ export class BaseRegistry {
|
|
|
14
16
|
getChainsPath() {
|
|
15
17
|
return 'chains';
|
|
16
18
|
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
+
getWarpArtifactsPaths({ tokens }) {
|
|
20
|
+
if (!tokens.length)
|
|
21
|
+
throw new Error('No tokens provided in config');
|
|
22
|
+
const symbols = new Set(tokens.map((token) => token.symbol.toUpperCase()));
|
|
23
|
+
if (symbols.size !== 1)
|
|
24
|
+
throw new Error('Only one token symbol per warp config is supported for now');
|
|
25
|
+
const symbol = symbols.values().next().value;
|
|
26
|
+
const chains = tokens
|
|
27
|
+
.map((token) => token.chainName)
|
|
28
|
+
.sort()
|
|
29
|
+
.join('-');
|
|
30
|
+
const basePath = `deployments/warp_routes/${symbol}/${chains}`;
|
|
31
|
+
return { configPath: `${basePath}-config.yaml`, addressesPath: `${basePath}-addresses.yaml` };
|
|
19
32
|
}
|
|
20
33
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { Logger } from 'pino';
|
|
2
|
-
import {
|
|
2
|
+
import type { ChainMap, ChainMetadata, ChainName, WarpCoreConfig } from '@hyperlane-xyz/sdk';
|
|
3
3
|
import { ChainAddresses } from '../types.js';
|
|
4
4
|
import { BaseRegistry } from './BaseRegistry.js';
|
|
5
|
-
import { RegistryType, type IRegistry, type RegistryContent } from './IRegistry.js';
|
|
5
|
+
import { RegistryType, type ChainFiles, type IRegistry, type RegistryContent } from './IRegistry.js';
|
|
6
6
|
export interface GithubRegistryOptions {
|
|
7
7
|
uri?: string;
|
|
8
8
|
branch?: string;
|
|
@@ -33,6 +33,8 @@ export declare class GithubRegistry extends BaseRegistry implements IRegistry {
|
|
|
33
33
|
addresses?: ChainAddresses;
|
|
34
34
|
}): Promise<void>;
|
|
35
35
|
removeChain(_chains: ChainName): Promise<void>;
|
|
36
|
+
addWarpRoute(_config: WarpCoreConfig): Promise<void>;
|
|
36
37
|
protected getRawContentUrl(path: string): string;
|
|
38
|
+
protected fetchChainFiles<T>(fileName: keyof ChainFiles): Promise<ChainMap<T>>;
|
|
37
39
|
protected fetch(url: string): Promise<Response>;
|
|
38
40
|
}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { parse as yamlParse } from 'yaml';
|
|
2
|
+
import { DEFAULT_GITHUB_REGISTRY, GITHUB_FETCH_CONCURRENCY_LIMIT } from '../consts.js';
|
|
2
3
|
import { ChainAddressesSchema } from '../types.js';
|
|
4
|
+
import { concurrentMap } from '../utils.js';
|
|
3
5
|
import { BaseRegistry, CHAIN_FILE_REGEX } from './BaseRegistry.js';
|
|
4
6
|
import { RegistryType, } from './IRegistry.js';
|
|
5
|
-
const DEFAULT_REGISTRY = 'https://github.com/hyperlane-xyz/hyperlane-registry';
|
|
6
7
|
export class GithubRegistry extends BaseRegistry {
|
|
7
8
|
type = RegistryType.Github;
|
|
8
9
|
url;
|
|
@@ -10,8 +11,8 @@ export class GithubRegistry extends BaseRegistry {
|
|
|
10
11
|
repoOwner;
|
|
11
12
|
repoName;
|
|
12
13
|
constructor(options = {}) {
|
|
13
|
-
super({ logger: options.logger });
|
|
14
|
-
this.url = new URL(
|
|
14
|
+
super({ uri: options.uri ?? DEFAULT_GITHUB_REGISTRY, logger: options.logger });
|
|
15
|
+
this.url = new URL(this.uri);
|
|
15
16
|
this.branch = options.branch ?? 'main';
|
|
16
17
|
const pathSegments = this.url.pathname.split('/');
|
|
17
18
|
if (pathSegments.length < 2)
|
|
@@ -48,16 +49,7 @@ export class GithubRegistry extends BaseRegistry {
|
|
|
48
49
|
async getMetadata() {
|
|
49
50
|
if (this.metadataCache)
|
|
50
51
|
return this.metadataCache;
|
|
51
|
-
const chainMetadata =
|
|
52
|
-
const repoContents = await this.listRegistryContent();
|
|
53
|
-
// TODO use concurrentMap here when utils package is updated
|
|
54
|
-
for (const [chainName, chainFiles] of Object.entries(repoContents.chains)) {
|
|
55
|
-
if (!chainFiles.metadata)
|
|
56
|
-
continue;
|
|
57
|
-
const response = await this.fetch(chainFiles.metadata);
|
|
58
|
-
const data = await response.text();
|
|
59
|
-
chainMetadata[chainName] = yamlParse(data);
|
|
60
|
-
}
|
|
52
|
+
const chainMetadata = await this.fetchChainFiles('metadata');
|
|
61
53
|
return (this.metadataCache = chainMetadata);
|
|
62
54
|
}
|
|
63
55
|
async getChainMetadata(chainName) {
|
|
@@ -71,16 +63,7 @@ export class GithubRegistry extends BaseRegistry {
|
|
|
71
63
|
async getAddresses() {
|
|
72
64
|
if (this.addressCache)
|
|
73
65
|
return this.addressCache;
|
|
74
|
-
const chainAddresses =
|
|
75
|
-
const repoContents = await this.listRegistryContent();
|
|
76
|
-
// TODO use concurrentMap here when utils package is updated
|
|
77
|
-
for (const [chainName, chainFiles] of Object.entries(repoContents.chains)) {
|
|
78
|
-
if (!chainFiles.addresses)
|
|
79
|
-
continue;
|
|
80
|
-
const response = await this.fetch(chainFiles.addresses);
|
|
81
|
-
const data = await response.text();
|
|
82
|
-
chainAddresses[chainName] = ChainAddressesSchema.parse(yamlParse(data));
|
|
83
|
-
}
|
|
66
|
+
const chainAddresses = await this.fetchChainFiles('addresses');
|
|
84
67
|
return (this.addressCache = chainAddresses);
|
|
85
68
|
}
|
|
86
69
|
async getChainAddresses(chainName) {
|
|
@@ -100,9 +83,28 @@ export class GithubRegistry extends BaseRegistry {
|
|
|
100
83
|
async removeChain(_chains) {
|
|
101
84
|
throw new Error('TODO: Implement');
|
|
102
85
|
}
|
|
86
|
+
async addWarpRoute(_config) {
|
|
87
|
+
throw new Error('TODO: Implement');
|
|
88
|
+
}
|
|
103
89
|
getRawContentUrl(path) {
|
|
104
90
|
return `https://raw.githubusercontent.com/${this.repoOwner}/${this.repoName}/${this.branch}/${path}`;
|
|
105
91
|
}
|
|
92
|
+
async fetchChainFiles(fileName) {
|
|
93
|
+
const repoContents = await this.listRegistryContent();
|
|
94
|
+
const chainNames = Object.keys(repoContents.chains);
|
|
95
|
+
const fileUrls = chainNames.reduce((acc, chainName) => {
|
|
96
|
+
const fileUrl = repoContents.chains[chainName][fileName];
|
|
97
|
+
if (fileUrl)
|
|
98
|
+
acc[chainName] = fileUrl;
|
|
99
|
+
return acc;
|
|
100
|
+
}, {});
|
|
101
|
+
const results = await concurrentMap(GITHUB_FETCH_CONCURRENCY_LIMIT, Object.entries(fileUrls), async ([chainName, fileUrl]) => {
|
|
102
|
+
const response = await this.fetch(fileUrl);
|
|
103
|
+
const data = await response.text();
|
|
104
|
+
return [chainName, yamlParse(data)];
|
|
105
|
+
});
|
|
106
|
+
return Object.fromEntries(results);
|
|
107
|
+
}
|
|
106
108
|
async fetch(url) {
|
|
107
109
|
this.logger.debug(`Fetching from github: ${url}`);
|
|
108
110
|
const response = await fetch(url);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ChainMap, ChainMetadata, ChainName } from '@hyperlane-xyz/sdk';
|
|
1
|
+
import type { ChainMap, ChainMetadata, ChainName, WarpCoreConfig } from '@hyperlane-xyz/sdk';
|
|
2
2
|
import type { ChainAddresses, MaybePromise } from '../types.js';
|
|
3
3
|
export interface ChainFiles {
|
|
4
4
|
metadata?: string;
|
|
@@ -14,21 +14,23 @@ export declare enum RegistryType {
|
|
|
14
14
|
}
|
|
15
15
|
export interface IRegistry {
|
|
16
16
|
type: RegistryType;
|
|
17
|
+
uri: string;
|
|
17
18
|
listRegistryContent(): MaybePromise<RegistryContent>;
|
|
18
19
|
getChains(): MaybePromise<Array<ChainName>>;
|
|
19
20
|
getMetadata(): MaybePromise<ChainMap<ChainMetadata>>;
|
|
20
21
|
getChainMetadata(chainName: ChainName): MaybePromise<ChainMetadata | null>;
|
|
21
22
|
getAddresses(): MaybePromise<ChainMap<ChainAddresses>>;
|
|
22
23
|
getChainAddresses(chainName: ChainName): MaybePromise<ChainAddresses | null>;
|
|
23
|
-
addChain(
|
|
24
|
+
addChain(chain: {
|
|
24
25
|
chainName: ChainName;
|
|
25
26
|
metadata?: ChainMetadata;
|
|
26
27
|
addresses?: ChainAddresses;
|
|
27
28
|
}): MaybePromise<void>;
|
|
28
|
-
updateChain(
|
|
29
|
+
updateChain(chain: {
|
|
29
30
|
chainName: ChainName;
|
|
30
31
|
metadata?: ChainMetadata;
|
|
31
32
|
addresses?: ChainAddresses;
|
|
32
33
|
}): MaybePromise<void>;
|
|
33
|
-
removeChain(
|
|
34
|
+
removeChain(chain: ChainName): MaybePromise<void>;
|
|
35
|
+
addWarpRoute(config: WarpCoreConfig): MaybePromise<void>;
|
|
34
36
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Logger } from 'pino';
|
|
2
|
-
import type { ChainMap, ChainMetadata, ChainName } from '@hyperlane-xyz/sdk';
|
|
2
|
+
import type { ChainMap, ChainMetadata, ChainName, WarpCoreConfig } from '@hyperlane-xyz/sdk';
|
|
3
3
|
import { ChainAddresses } from '../types.js';
|
|
4
4
|
import { BaseRegistry } from './BaseRegistry.js';
|
|
5
5
|
import { RegistryType, type ChainFiles, type IRegistry, type RegistryContent } from './IRegistry.js';
|
|
@@ -9,7 +9,6 @@ export interface LocalRegistryOptions {
|
|
|
9
9
|
}
|
|
10
10
|
export declare class LocalRegistry extends BaseRegistry implements IRegistry {
|
|
11
11
|
readonly type = RegistryType.Local;
|
|
12
|
-
readonly uri: string;
|
|
13
12
|
constructor(options: LocalRegistryOptions);
|
|
14
13
|
listRegistryContent(): RegistryContent;
|
|
15
14
|
getChains(): Array<ChainName>;
|
|
@@ -29,6 +28,7 @@ export declare class LocalRegistry extends BaseRegistry implements IRegistry {
|
|
|
29
28
|
}): void;
|
|
30
29
|
removeChain(chainName: ChainName): void;
|
|
31
30
|
protected listFiles(dirPath: string): string[];
|
|
31
|
+
addWarpRoute(config: WarpCoreConfig): void;
|
|
32
32
|
protected createOrUpdateChain(chain: {
|
|
33
33
|
chainName: ChainName;
|
|
34
34
|
metadata?: ChainMetadata;
|
|
@@ -1,17 +1,16 @@
|
|
|
1
1
|
import fs from 'fs';
|
|
2
2
|
import path from 'path';
|
|
3
3
|
import { parse as yamlParse } from 'yaml';
|
|
4
|
-
import {
|
|
4
|
+
import { SCHEMA_REF } from '../consts.js';
|
|
5
5
|
import { ChainAddressesSchema } from '../types.js';
|
|
6
6
|
import { toYamlString } from '../utils.js';
|
|
7
7
|
import { BaseRegistry, CHAIN_FILE_REGEX } from './BaseRegistry.js';
|
|
8
8
|
import { RegistryType, } from './IRegistry.js';
|
|
9
|
+
import { warpConfigToWarpAddresses } from './warp-utils.js';
|
|
9
10
|
export class LocalRegistry extends BaseRegistry {
|
|
10
11
|
type = RegistryType.Local;
|
|
11
|
-
uri;
|
|
12
12
|
constructor(options) {
|
|
13
|
-
super(
|
|
14
|
-
this.uri = options.uri;
|
|
13
|
+
super(options);
|
|
15
14
|
}
|
|
16
15
|
listRegistryContent() {
|
|
17
16
|
if (this.listContentCache)
|
|
@@ -97,6 +96,8 @@ export class LocalRegistry extends BaseRegistry {
|
|
|
97
96
|
delete this.addressCache[chainName];
|
|
98
97
|
}
|
|
99
98
|
listFiles(dirPath) {
|
|
99
|
+
if (!fs.existsSync(dirPath))
|
|
100
|
+
return [];
|
|
100
101
|
const entries = fs.readdirSync(dirPath, { withFileTypes: true });
|
|
101
102
|
const filePaths = entries.map((entry) => {
|
|
102
103
|
const fullPath = path.join(dirPath, entry.name);
|
|
@@ -104,6 +105,14 @@ export class LocalRegistry extends BaseRegistry {
|
|
|
104
105
|
});
|
|
105
106
|
return filePaths.flat();
|
|
106
107
|
}
|
|
108
|
+
addWarpRoute(config) {
|
|
109
|
+
let { configPath, addressesPath } = this.getWarpArtifactsPaths(config);
|
|
110
|
+
configPath = path.join(this.uri, configPath);
|
|
111
|
+
this.createFile({ filePath: configPath, data: toYamlString(config, SCHEMA_REF) });
|
|
112
|
+
addressesPath = path.join(this.uri, addressesPath);
|
|
113
|
+
const addresses = warpConfigToWarpAddresses(config);
|
|
114
|
+
this.createFile({ filePath: addressesPath, data: toYamlString(addresses) });
|
|
115
|
+
}
|
|
107
116
|
createOrUpdateChain(chain) {
|
|
108
117
|
if (!chain.metadata && !chain.addresses)
|
|
109
118
|
throw new Error(`Chain ${chain.chainName} must have metadata or addresses, preferably both`);
|
|
@@ -112,7 +121,7 @@ export class LocalRegistry extends BaseRegistry {
|
|
|
112
121
|
this.logger.debug(`Chain ${chain.chainName} not found in registry, adding it now`);
|
|
113
122
|
}
|
|
114
123
|
if (chain.metadata) {
|
|
115
|
-
this.createChainFile(chain.chainName, 'metadata', chain.metadata, this.getMetadata(),
|
|
124
|
+
this.createChainFile(chain.chainName, 'metadata', chain.metadata, this.getMetadata(), SCHEMA_REF);
|
|
116
125
|
}
|
|
117
126
|
if (chain.addresses) {
|
|
118
127
|
this.createChainFile(chain.chainName, 'addresses', chain.addresses, this.getAddresses());
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export function warpConfigToWarpAddresses(config) {
|
|
2
|
+
return config.tokens.reduce((acc, token) => {
|
|
3
|
+
const addressKey = getWarpAddressKey(token.standard);
|
|
4
|
+
if (!addressKey || !token.addressOrDenom)
|
|
5
|
+
return acc;
|
|
6
|
+
acc[token.chainName] = {
|
|
7
|
+
[addressKey]: token.addressOrDenom,
|
|
8
|
+
};
|
|
9
|
+
return acc;
|
|
10
|
+
}, {});
|
|
11
|
+
}
|
|
12
|
+
function getWarpAddressKey(standard) {
|
|
13
|
+
const standardValue = standard.toLowerCase();
|
|
14
|
+
if (standardValue.includes('collateral'))
|
|
15
|
+
return 'collateral';
|
|
16
|
+
if (standardValue.includes('synthetic'))
|
|
17
|
+
return 'synthetic';
|
|
18
|
+
if (standardValue.includes('native'))
|
|
19
|
+
return 'native';
|
|
20
|
+
else
|
|
21
|
+
return null;
|
|
22
|
+
}
|
package/dist/utils.d.ts
CHANGED
package/dist/utils.js
CHANGED
|
@@ -3,3 +3,13 @@ export function toYamlString(data, prefix) {
|
|
|
3
3
|
const yamlString = stringify(data);
|
|
4
4
|
return prefix ? `${prefix}\n${yamlString}` : yamlString;
|
|
5
5
|
}
|
|
6
|
+
export async function concurrentMap(concurrency, xs, mapFn) {
|
|
7
|
+
let res = [];
|
|
8
|
+
for (let i = 0; i < xs.length; i += concurrency) {
|
|
9
|
+
const remaining = xs.length - i;
|
|
10
|
+
const sliceSize = Math.min(remaining, concurrency);
|
|
11
|
+
const slice = xs.slice(i, i + sliceSize);
|
|
12
|
+
res = res.concat(await Promise.all(slice.map((elem, index) => mapFn(elem, i + index))));
|
|
13
|
+
}
|
|
14
|
+
return res;
|
|
15
|
+
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hyperlane-xyz/registry",
|
|
3
3
|
"description": "A collection of configs, artifacts, and schemas for Hyperlane",
|
|
4
|
-
"version": "1.0
|
|
4
|
+
"version": "1.1.0",
|
|
5
5
|
"dependencies": {
|
|
6
6
|
"yaml": "^2",
|
|
7
7
|
"zod": "^3.21.2"
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"devDependencies": {
|
|
10
10
|
"@changesets/cli": "^2.26.2",
|
|
11
11
|
"@eslint/js": "^9.1.1",
|
|
12
|
-
"@hyperlane-xyz/sdk": "3.
|
|
12
|
+
"@hyperlane-xyz/sdk": "3.11.1",
|
|
13
13
|
"@types/mocha": "^10.0.1",
|
|
14
14
|
"@types/node": "^16.9.1",
|
|
15
15
|
"@typescript-eslint/parser": "^7.7.0",
|