epistery 1.4.0 → 1.4.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/README.md +37 -40
- package/dist/chains/Chain.d.ts +7 -0
- package/dist/chains/Chain.d.ts.map +1 -1
- package/dist/chains/Chain.js +8 -1
- package/dist/chains/Chain.js.map +1 -1
- package/dist/chains/EthereumChain.d.ts +14 -0
- package/dist/chains/EthereumChain.d.ts.map +1 -1
- package/dist/chains/EthereumChain.js +14 -0
- package/dist/chains/EthereumChain.js.map +1 -1
- package/dist/chains/JapanOpenChain.d.ts +7 -0
- package/dist/chains/JapanOpenChain.d.ts.map +1 -1
- package/dist/chains/JapanOpenChain.js +7 -0
- package/dist/chains/JapanOpenChain.js.map +1 -1
- package/dist/chains/PolygonChain.d.ts +14 -0
- package/dist/chains/PolygonChain.d.ts.map +1 -1
- package/dist/chains/PolygonChain.js +14 -0
- package/dist/chains/PolygonChain.js.map +1 -1
- package/dist/chains/index.d.ts +1 -1
- package/dist/chains/index.d.ts.map +1 -1
- package/dist/chains/index.js +2 -1
- package/dist/chains/index.js.map +1 -1
- package/dist/chains/registry.d.ts +20 -5
- package/dist/chains/registry.d.ts.map +1 -1
- package/dist/chains/registry.js +35 -5
- package/dist/chains/registry.js.map +1 -1
- package/index.mjs +2 -2
- package/package.json +1 -1
- package/src/chains/Chain.ts +9 -1
- package/src/chains/EthereumChain.ts +14 -0
- package/src/chains/JapanOpenChain.ts +7 -0
- package/src/chains/PolygonChain.ts +14 -0
- package/src/chains/index.ts +1 -1
- package/src/chains/registry.ts +36 -6
package/README.md
CHANGED
|
@@ -201,38 +201,28 @@ url=https://rootz.digital/api/v0
|
|
|
201
201
|
[cli]
|
|
202
202
|
default_domain=localhost
|
|
203
203
|
|
|
204
|
-
#
|
|
205
|
-
[default
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
204
|
+
# Which chain the claim-page dropdown selects by default.
|
|
205
|
+
[default]
|
|
206
|
+
defaultChainId=137
|
|
207
|
+
|
|
208
|
+
# Private RPC overrides, keyed by chainId. Only needed when the chain's
|
|
209
|
+
# built-in public RPC isn't sufficient (rate-limited, needs an API key).
|
|
210
|
+
# Everything else — name, public RPC, currency, fee policy — lives in
|
|
211
|
+
# the chain classes (src/chains/) and doesn't need to be configured.
|
|
212
|
+
|
|
213
|
+
[default.rpc.137]
|
|
214
|
+
privateRpc=https://polygon-mainnet.infura.io/v3/YOUR_KEY
|
|
215
|
+
|
|
216
|
+
[default.rpc.1]
|
|
217
|
+
privateRpc=https://mainnet.infura.io/v3/YOUR_KEY
|
|
218
|
+
```
|
|
209
219
|
|
|
210
|
-
|
|
211
|
-
# epistery-host uses this to populate the network selection dropdown
|
|
212
|
-
# and to inject private (API-key) RPCs for server-side calls.
|
|
220
|
+
Legacy single-provider format is also supported:
|
|
213
221
|
|
|
214
|
-
|
|
222
|
+
```ini
|
|
223
|
+
[default.provider]
|
|
215
224
|
chainId=137
|
|
216
|
-
|
|
217
|
-
publicRpc=https://polygon-rpc.com
|
|
218
|
-
privateRpc=https://polygon-mainnet.g.alchemy.com/v2/YOUR_KEY
|
|
219
|
-
nativeCurrencyName=POL
|
|
220
|
-
nativeCurrencySymbol=POL
|
|
221
|
-
nativeCurrencyDecimals=18
|
|
222
|
-
|
|
223
|
-
[[default.providers]]
|
|
224
|
-
chainId=81
|
|
225
|
-
name=Japan Open Chain
|
|
226
|
-
publicRpc=https://rpc-2.japanopenchain.org:8545
|
|
227
|
-
nativeCurrencyName=JOC
|
|
228
|
-
nativeCurrencySymbol=JOC
|
|
229
|
-
nativeCurrencyDecimals=18
|
|
230
|
-
|
|
231
|
-
# Optional per-chain policy overrides (defaults are in code):
|
|
232
|
-
[default.providers.policy]
|
|
233
|
-
minPriorityFeeGwei=25
|
|
234
|
-
maxFeeMultiplier=2
|
|
235
|
-
gasLimitMultiplier=1.3
|
|
225
|
+
privateRpc=https://polygon-mainnet.infura.io/v3/YOUR_KEY
|
|
236
226
|
```
|
|
237
227
|
|
|
238
228
|
### Domain Config (`~/.epistery/mydomain.com/config.ini`)
|
|
@@ -334,22 +324,26 @@ See [Architecture.md](Architecture.md) for detailed architecture documentation.
|
|
|
334
324
|
|
|
335
325
|
### Chain Support
|
|
336
326
|
|
|
337
|
-
Each EVM chain epistery talks to is represented by a `Chain` object that owns the JSON-RPC provider, fee policy,
|
|
327
|
+
Each EVM chain epistery talks to is represented by a `Chain` object that owns the JSON-RPC provider, fee policy, gas estimation strategy, and default public RPC. No configuration is needed to use a built-in chain — every detail is in the class itself.
|
|
338
328
|
|
|
339
|
-
| Chain | ID | Fee Model |
|
|
340
|
-
|
|
341
|
-
| Polygon Mainnet | 137 | EIP-1559
|
|
342
|
-
| Polygon Amoy | 80002 | EIP-1559
|
|
343
|
-
| Ethereum Mainnet | 1 | Standard EIP-1559 |
|
|
344
|
-
| Sepolia Testnet | 11155111 | Standard EIP-1559 |
|
|
345
|
-
| Japan Open Chain | 81 | Legacy gasPrice
|
|
329
|
+
| Chain | ID | Fee Model | Default RPC |
|
|
330
|
+
|-------|----|-----------|-------------|
|
|
331
|
+
| Polygon Mainnet | 137 | EIP-1559, 25 gwei priority floor | polygon-rpc.com |
|
|
332
|
+
| Polygon Amoy | 80002 | EIP-1559, 25 gwei priority floor | rpc-amoy.polygon.technology |
|
|
333
|
+
| Ethereum Mainnet | 1 | Standard EIP-1559 | eth.llamarpc.com |
|
|
334
|
+
| Sepolia Testnet | 11155111 | Standard EIP-1559 | eth-sepolia.public.blastapi.io |
|
|
335
|
+
| Japan Open Chain | 81 | Legacy gasPrice, 30 gwei floor | rpc-2.japanopenchain.org |
|
|
346
336
|
|
|
347
|
-
Use `chainFor()` to get a chain instance from
|
|
337
|
+
Use `chainFor()` to get a chain instance. Only `chainId` is required — everything else comes from the chain class defaults:
|
|
348
338
|
|
|
349
339
|
```javascript
|
|
350
|
-
import { chainFor } from 'epistery';
|
|
340
|
+
import { chainFor, registeredChains } from 'epistery';
|
|
351
341
|
|
|
352
|
-
|
|
342
|
+
// Minimal — chain class supplies name, RPC, currency, fee policy
|
|
343
|
+
const chain = chainFor({ chainId: 137 });
|
|
344
|
+
|
|
345
|
+
// Or with an override — privateRpc for server-side calls with an API key
|
|
346
|
+
const chain = chainFor({ chainId: 137, privateRpc: 'https://polygon-mainnet.infura.io/v3/KEY' });
|
|
353
347
|
|
|
354
348
|
// Provider with explicit network info (no "could not detect network" errors)
|
|
355
349
|
const wallet = ethers.Wallet.fromMnemonic(mnemonic).connect(chain.provider);
|
|
@@ -359,6 +353,9 @@ const feeData = await chain.getFeeData();
|
|
|
359
353
|
// → Polygon: { maxPriorityFeePerGas: 25 gwei, maxFeePerGas: 50 gwei }
|
|
360
354
|
// → JOC: { gasPrice: 30 gwei }
|
|
361
355
|
// → Ethereum: { maxPriorityFeePerGas: <network>, maxFeePerGas: <network> }
|
|
356
|
+
|
|
357
|
+
// Get the full built-in chain list (for UI dropdowns, etc.)
|
|
358
|
+
const chains = registeredChains();
|
|
362
359
|
```
|
|
363
360
|
|
|
364
361
|
Adding a new chain is a single file — extend `Chain`, override the fee hooks that differ, and call `registerChain()`. No edits to existing code. See [src/chains/README.md](src/chains/README.md) for details.
|
package/dist/chains/Chain.d.ts
CHANGED
|
@@ -46,6 +46,13 @@ export interface ChainConfig extends ProviderConfig {
|
|
|
46
46
|
* - domain config storage
|
|
47
47
|
*/
|
|
48
48
|
export declare class Chain {
|
|
49
|
+
/**
|
|
50
|
+
* Subclasses override `defaults` to carry the canonical network details.
|
|
51
|
+
* `chainFor({chainId: 137})` merges caller config on top of these defaults
|
|
52
|
+
* so only the chainId is required — name, public RPC, currency etc. are
|
|
53
|
+
* all built in.
|
|
54
|
+
*/
|
|
55
|
+
static defaults: Partial<ChainConfig>;
|
|
49
56
|
readonly chainId: number;
|
|
50
57
|
readonly name: string;
|
|
51
58
|
readonly rpc: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Chain.d.ts","sourceRoot":"","sources":["../../src/chains/Chain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC;IAChC,oBAAoB,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC;CAC7B;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAE1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;GAIG;AACH,MAAM,WAAW,WAAY,SAAQ,cAAc;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,KAAK;IAChB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IACtE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAE7B,OAAO,CAAC,SAAS,CAAiD;gBAEtD,MAAM,EAAE,WAAW;IAgB/B;;;;;OAKG;IACH,IAAI,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,eAAe,CAQ/C;IAED,2EAA2E;IAC3E,eAAe,IAAI,OAAO;IAI1B;;;;OAIG;IACG,UAAU,IAAI,OAAO,CAAC,YAAY,CAAC;IAczC;;;;;;OAMG;IACG,WAAW,CACf,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,kBAAkB,GAC7C,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;IAQ5B;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,YAAY,CAAC,CAAC,SAAS,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC;IAmChF;;;OAGG;IACH,MAAM,CAAC,iBAAiB,CAAC,CAAC,EAAE,GAAG,GAAG,OAAO;IAgBzC,wCAAwC;IACxC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,SAAS;CAG5C"}
|
|
1
|
+
{"version":3,"file":"Chain.d.ts","sourceRoot":"","sources":["../../src/chains/Chain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC;IAChC,oBAAoB,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC;CAC7B;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAE1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;GAIG;AACH,MAAM,WAAW,WAAY,SAAQ,cAAc;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,KAAK;IAChB;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,WAAW,CAAC,CAAM;IAE3C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IACtE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAE7B,OAAO,CAAC,SAAS,CAAiD;gBAEtD,MAAM,EAAE,WAAW;IAgB/B;;;;;OAKG;IACH,IAAI,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,eAAe,CAQ/C;IAED,2EAA2E;IAC3E,eAAe,IAAI,OAAO;IAI1B;;;;OAIG;IACG,UAAU,IAAI,OAAO,CAAC,YAAY,CAAC;IAczC;;;;;;OAMG;IACG,WAAW,CACf,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,kBAAkB,GAC7C,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;IAQ5B;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,YAAY,CAAC,CAAC,SAAS,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC;IAmChF;;;OAGG;IACH,MAAM,CAAC,iBAAiB,CAAC,CAAC,EAAE,GAAG,GAAG,OAAO;IAgBzC,wCAAwC;IACxC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,SAAS;CAG5C"}
|
package/dist/chains/Chain.js
CHANGED
|
@@ -24,7 +24,7 @@ class Chain {
|
|
|
24
24
|
throw new Error(`Chain config missing chainId: ${JSON.stringify(config)}`);
|
|
25
25
|
}
|
|
26
26
|
this.chainId = Number(config.chainId);
|
|
27
|
-
this.name = config.name;
|
|
27
|
+
this.name = config.name || '';
|
|
28
28
|
this.rpc = config.privateRpc || config.rpc;
|
|
29
29
|
this.publicRpc = config.publicRpc || config.rpc;
|
|
30
30
|
this.currency = {
|
|
@@ -172,4 +172,11 @@ class Chain {
|
|
|
172
172
|
}
|
|
173
173
|
}
|
|
174
174
|
exports.Chain = Chain;
|
|
175
|
+
/**
|
|
176
|
+
* Subclasses override `defaults` to carry the canonical network details.
|
|
177
|
+
* `chainFor({chainId: 137})` merges caller config on top of these defaults
|
|
178
|
+
* so only the chainId is required — name, public RPC, currency etc. are
|
|
179
|
+
* all built in.
|
|
180
|
+
*/
|
|
181
|
+
Chain.defaults = {};
|
|
175
182
|
//# sourceMappingURL=Chain.js.map
|
package/dist/chains/Chain.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Chain.js","sourceRoot":"","sources":["../../src/chains/Chain.ts"],"names":[],"mappings":";;;AAAA,mCAAgC;AAuChC;;;;;;;;;;;;;;GAcG;AACH,MAAa,KAAK;
|
|
1
|
+
{"version":3,"file":"Chain.js","sourceRoot":"","sources":["../../src/chains/Chain.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,11 +8,25 @@ import { Chain } from './Chain';
|
|
|
8
8
|
*/
|
|
9
9
|
export declare class EthereumChain extends Chain {
|
|
10
10
|
static chainId: number;
|
|
11
|
+
static defaults: {
|
|
12
|
+
name: string;
|
|
13
|
+
rpc: string;
|
|
14
|
+
nativeCurrencyName: string;
|
|
15
|
+
nativeCurrencySymbol: string;
|
|
16
|
+
nativeCurrencyDecimals: number;
|
|
17
|
+
};
|
|
11
18
|
}
|
|
12
19
|
/**
|
|
13
20
|
* Sepolia testnet (chainId 11155111). Same behavior as Ethereum mainnet.
|
|
14
21
|
*/
|
|
15
22
|
export declare class SepoliaChain extends Chain {
|
|
16
23
|
static chainId: number;
|
|
24
|
+
static defaults: {
|
|
25
|
+
name: string;
|
|
26
|
+
rpc: string;
|
|
27
|
+
nativeCurrencyName: string;
|
|
28
|
+
nativeCurrencySymbol: string;
|
|
29
|
+
nativeCurrencyDecimals: number;
|
|
30
|
+
};
|
|
17
31
|
}
|
|
18
32
|
//# sourceMappingURL=EthereumChain.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EthereumChain.d.ts","sourceRoot":"","sources":["../../src/chains/EthereumChain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAGhC;;;;;;GAMG;AACH,qBAAa,aAAc,SAAQ,KAAK;IACtC,MAAM,CAAC,OAAO,SAAK;
|
|
1
|
+
{"version":3,"file":"EthereumChain.d.ts","sourceRoot":"","sources":["../../src/chains/EthereumChain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAGhC;;;;;;GAMG;AACH,qBAAa,aAAc,SAAQ,KAAK;IACtC,MAAM,CAAC,OAAO,SAAK;IACnB,MAAM,CAAC,QAAQ;;;;;;MAMb;CACH;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,KAAK;IACrC,MAAM,CAAC,OAAO,SAAY;IAC1B,MAAM,CAAC,QAAQ;;;;;;MAMb;CACH"}
|
|
@@ -14,6 +14,13 @@ class EthereumChain extends Chain_1.Chain {
|
|
|
14
14
|
}
|
|
15
15
|
exports.EthereumChain = EthereumChain;
|
|
16
16
|
EthereumChain.chainId = 1;
|
|
17
|
+
EthereumChain.defaults = {
|
|
18
|
+
name: 'Ethereum Mainnet',
|
|
19
|
+
rpc: 'https://eth.llamarpc.com',
|
|
20
|
+
nativeCurrencyName: 'Ether',
|
|
21
|
+
nativeCurrencySymbol: 'ETH',
|
|
22
|
+
nativeCurrencyDecimals: 18,
|
|
23
|
+
};
|
|
17
24
|
/**
|
|
18
25
|
* Sepolia testnet (chainId 11155111). Same behavior as Ethereum mainnet.
|
|
19
26
|
*/
|
|
@@ -21,6 +28,13 @@ class SepoliaChain extends Chain_1.Chain {
|
|
|
21
28
|
}
|
|
22
29
|
exports.SepoliaChain = SepoliaChain;
|
|
23
30
|
SepoliaChain.chainId = 11155111;
|
|
31
|
+
SepoliaChain.defaults = {
|
|
32
|
+
name: 'Sepolia Testnet',
|
|
33
|
+
rpc: 'https://eth-sepolia.public.blastapi.io',
|
|
34
|
+
nativeCurrencyName: 'Ether',
|
|
35
|
+
nativeCurrencySymbol: 'ETH',
|
|
36
|
+
nativeCurrencyDecimals: 18,
|
|
37
|
+
};
|
|
24
38
|
(0, registry_1.registerChain)(EthereumChain.chainId, EthereumChain);
|
|
25
39
|
(0, registry_1.registerChain)(SepoliaChain.chainId, SepoliaChain);
|
|
26
40
|
//# sourceMappingURL=EthereumChain.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EthereumChain.js","sourceRoot":"","sources":["../../src/chains/EthereumChain.ts"],"names":[],"mappings":";;;AAAA,mCAAgC;AAChC,yCAA2C;AAE3C;;;;;;GAMG;AACH,MAAa,aAAc,SAAQ,aAAK;;AAAxC,
|
|
1
|
+
{"version":3,"file":"EthereumChain.js","sourceRoot":"","sources":["../../src/chains/EthereumChain.ts"],"names":[],"mappings":";;;AAAA,mCAAgC;AAChC,yCAA2C;AAE3C;;;;;;GAMG;AACH,MAAa,aAAc,SAAQ,aAAK;;AAAxC,sCASC;AARQ,qBAAO,GAAG,CAAC,CAAC;AACZ,sBAAQ,GAAG;IAChB,IAAI,EAAE,kBAAkB;IACxB,GAAG,EAAE,0BAA0B;IAC/B,kBAAkB,EAAE,OAAO;IAC3B,oBAAoB,EAAE,KAAK;IAC3B,sBAAsB,EAAE,EAAE;CAC3B,CAAC;AAGJ;;GAEG;AACH,MAAa,YAAa,SAAQ,aAAK;;AAAvC,oCASC;AARQ,oBAAO,GAAG,QAAQ,CAAC;AACnB,qBAAQ,GAAG;IAChB,IAAI,EAAE,iBAAiB;IACvB,GAAG,EAAE,wCAAwC;IAC7C,kBAAkB,EAAE,OAAO;IAC3B,oBAAoB,EAAE,KAAK;IAC3B,sBAAsB,EAAE,EAAE;CAC3B,CAAC;AAGJ,IAAA,wBAAa,EAAC,aAAa,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;AACpD,IAAA,wBAAa,EAAC,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC"}
|
|
@@ -14,6 +14,13 @@ import { Chain, ChainFeeData } from './Chain';
|
|
|
14
14
|
*/
|
|
15
15
|
export declare class JapanOpenChain extends Chain {
|
|
16
16
|
static chainId: number;
|
|
17
|
+
static defaults: {
|
|
18
|
+
name: string;
|
|
19
|
+
rpc: string;
|
|
20
|
+
nativeCurrencyName: string;
|
|
21
|
+
nativeCurrencySymbol: string;
|
|
22
|
+
nativeCurrencyDecimals: number;
|
|
23
|
+
};
|
|
17
24
|
supportsEIP1559(): boolean;
|
|
18
25
|
protected minGasPrice(): ethers.BigNumber;
|
|
19
26
|
getFeeData(): Promise<ChainFeeData>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JapanOpenChain.d.ts","sourceRoot":"","sources":["../../src/chains/JapanOpenChain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAG9C;;;;;;;;;;;GAWG;AACH,qBAAa,cAAe,SAAQ,KAAK;IACvC,MAAM,CAAC,OAAO,SAAM;
|
|
1
|
+
{"version":3,"file":"JapanOpenChain.d.ts","sourceRoot":"","sources":["../../src/chains/JapanOpenChain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAG9C;;;;;;;;;;;GAWG;AACH,qBAAa,cAAe,SAAQ,KAAK;IACvC,MAAM,CAAC,OAAO,SAAM;IACpB,MAAM,CAAC,QAAQ;;;;;;MAMb;IAEF,eAAe,IAAI,OAAO;IAI1B,SAAS,CAAC,WAAW,IAAI,MAAM,CAAC,SAAS;IAInC,UAAU,IAAI,OAAO,CAAC,YAAY,CAAC;CAO1C"}
|
|
@@ -32,5 +32,12 @@ class JapanOpenChain extends Chain_1.Chain {
|
|
|
32
32
|
}
|
|
33
33
|
exports.JapanOpenChain = JapanOpenChain;
|
|
34
34
|
JapanOpenChain.chainId = 81;
|
|
35
|
+
JapanOpenChain.defaults = {
|
|
36
|
+
name: 'Japan Open Chain',
|
|
37
|
+
rpc: 'https://rpc-2.japanopenchain.org:8545',
|
|
38
|
+
nativeCurrencyName: 'JOC',
|
|
39
|
+
nativeCurrencySymbol: 'JOC',
|
|
40
|
+
nativeCurrencyDecimals: 18,
|
|
41
|
+
};
|
|
35
42
|
(0, registry_1.registerChain)(JapanOpenChain.chainId, JapanOpenChain);
|
|
36
43
|
//# sourceMappingURL=JapanOpenChain.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JapanOpenChain.js","sourceRoot":"","sources":["../../src/chains/JapanOpenChain.ts"],"names":[],"mappings":";;;AACA,mCAA8C;AAC9C,yCAA2C;AAE3C;;;;;;;;;;;GAWG;AACH,MAAa,cAAe,SAAQ,aAAK;
|
|
1
|
+
{"version":3,"file":"JapanOpenChain.js","sourceRoot":"","sources":["../../src/chains/JapanOpenChain.ts"],"names":[],"mappings":";;;AACA,mCAA8C;AAC9C,yCAA2C;AAE3C;;;;;;;;;;;GAWG;AACH,MAAa,cAAe,SAAQ,aAAK;IAUvC,eAAe;QACb,OAAO,KAAK,CAAC;IACf,CAAC;IAES,WAAW;QACnB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;QAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACjC,MAAM,YAAY,GAAG,EAAE,CAAC,QAAQ,IAAI,KAAK,CAAC;QAC1C,MAAM,QAAQ,GAAG,YAAY,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC;QAC/D,OAAO,EAAE,QAAQ,EAAE,CAAC;IACtB,CAAC;;AAxBH,wCAyBC;AAxBQ,sBAAO,GAAG,EAAE,CAAC;AACb,uBAAQ,GAAG;IAChB,IAAI,EAAE,kBAAkB;IACxB,GAAG,EAAE,uCAAuC;IAC5C,kBAAkB,EAAE,KAAK;IACzB,oBAAoB,EAAE,KAAK;IAC3B,sBAAsB,EAAE,EAAE;CAC3B,CAAC;AAmBJ,IAAA,wBAAa,EAAC,cAAc,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC"}
|
|
@@ -15,6 +15,13 @@ import { Chain, ChainFeeData } from './Chain';
|
|
|
15
15
|
*/
|
|
16
16
|
export declare class PolygonChain extends Chain {
|
|
17
17
|
static chainId: number;
|
|
18
|
+
static defaults: {
|
|
19
|
+
name: string;
|
|
20
|
+
rpc: string;
|
|
21
|
+
nativeCurrencyName: string;
|
|
22
|
+
nativeCurrencySymbol: string;
|
|
23
|
+
nativeCurrencyDecimals: number;
|
|
24
|
+
};
|
|
18
25
|
protected minPriorityFee(): ethers.BigNumber;
|
|
19
26
|
getFeeData(): Promise<ChainFeeData>;
|
|
20
27
|
}
|
|
@@ -27,5 +34,12 @@ export declare class PolygonChain extends Chain {
|
|
|
27
34
|
*/
|
|
28
35
|
export declare class AmoyChain extends PolygonChain {
|
|
29
36
|
static chainId: number;
|
|
37
|
+
static defaults: {
|
|
38
|
+
name: string;
|
|
39
|
+
rpc: string;
|
|
40
|
+
nativeCurrencyName: string;
|
|
41
|
+
nativeCurrencySymbol: string;
|
|
42
|
+
nativeCurrencyDecimals: number;
|
|
43
|
+
};
|
|
30
44
|
}
|
|
31
45
|
//# sourceMappingURL=PolygonChain.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PolygonChain.d.ts","sourceRoot":"","sources":["../../src/chains/PolygonChain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAG9C;;;;;;;;;;;;GAYG;AACH,qBAAa,YAAa,SAAQ,KAAK;IACrC,MAAM,CAAC,OAAO,SAAO;
|
|
1
|
+
{"version":3,"file":"PolygonChain.d.ts","sourceRoot":"","sources":["../../src/chains/PolygonChain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAG9C;;;;;;;;;;;;GAYG;AACH,qBAAa,YAAa,SAAQ,KAAK;IACrC,MAAM,CAAC,OAAO,SAAO;IACrB,MAAM,CAAC,QAAQ;;;;;;MAMb;IAEF,SAAS,CAAC,cAAc,IAAI,MAAM,CAAC,SAAS;IAItC,UAAU,IAAI,OAAO,CAAC,YAAY,CAAC;CAc1C;AAED;;;;;;GAMG;AACH,qBAAa,SAAU,SAAQ,YAAY;IACzC,MAAM,CAAC,OAAO,SAAS;IACvB,MAAM,CAAC,QAAQ;;;;;;MAMb;CACH"}
|
|
@@ -34,6 +34,13 @@ class PolygonChain extends Chain_1.Chain {
|
|
|
34
34
|
}
|
|
35
35
|
exports.PolygonChain = PolygonChain;
|
|
36
36
|
PolygonChain.chainId = 137;
|
|
37
|
+
PolygonChain.defaults = {
|
|
38
|
+
name: 'Polygon Mainnet',
|
|
39
|
+
rpc: 'https://polygon-rpc.com',
|
|
40
|
+
nativeCurrencyName: 'POL',
|
|
41
|
+
nativeCurrencySymbol: 'POL',
|
|
42
|
+
nativeCurrencyDecimals: 18,
|
|
43
|
+
};
|
|
37
44
|
/**
|
|
38
45
|
* Polygon Amoy testnet (chainId 80002).
|
|
39
46
|
*
|
|
@@ -45,6 +52,13 @@ class AmoyChain extends PolygonChain {
|
|
|
45
52
|
}
|
|
46
53
|
exports.AmoyChain = AmoyChain;
|
|
47
54
|
AmoyChain.chainId = 80002;
|
|
55
|
+
AmoyChain.defaults = {
|
|
56
|
+
name: 'Polygon Amoy Testnet',
|
|
57
|
+
rpc: 'https://rpc-amoy.polygon.technology',
|
|
58
|
+
nativeCurrencyName: 'POL',
|
|
59
|
+
nativeCurrencySymbol: 'POL',
|
|
60
|
+
nativeCurrencyDecimals: 18,
|
|
61
|
+
};
|
|
48
62
|
(0, registry_1.registerChain)(PolygonChain.chainId, PolygonChain);
|
|
49
63
|
(0, registry_1.registerChain)(AmoyChain.chainId, AmoyChain);
|
|
50
64
|
//# sourceMappingURL=PolygonChain.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PolygonChain.js","sourceRoot":"","sources":["../../src/chains/PolygonChain.ts"],"names":[],"mappings":";;;AACA,mCAA8C;AAC9C,yCAA2C;AAE3C;;;;;;;;;;;;GAYG;AACH,MAAa,YAAa,SAAQ,aAAK;
|
|
1
|
+
{"version":3,"file":"PolygonChain.js","sourceRoot":"","sources":["../../src/chains/PolygonChain.ts"],"names":[],"mappings":";;;AACA,mCAA8C;AAC9C,yCAA2C;AAE3C;;;;;;;;;;;;GAYG;AACH,MAAa,YAAa,SAAQ,aAAK;IAU3B,cAAc;QACtB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;QAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAEpC,MAAM,eAAe,GAAG,EAAE,CAAC,oBAAoB,IAAI,KAAK,CAAC;QACzD,MAAM,oBAAoB,GAAG,eAAe,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC;QAEjF,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,IAAI,CAAC,CAAC;QACrD,MAAM,SAAS,GAAG,oBAAoB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACvD,MAAM,UAAU,GAAG,EAAE,CAAC,YAAY,IAAI,SAAS,CAAC;QAChD,MAAM,YAAY,GAAG,UAAU,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;QAEvE,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,CAAC;IAChD,CAAC;;AA3BH,oCA4BC;AA3BQ,oBAAO,GAAG,GAAG,CAAC;AACd,qBAAQ,GAAG;IAChB,IAAI,EAAE,iBAAiB;IACvB,GAAG,EAAE,yBAAyB;IAC9B,kBAAkB,EAAE,KAAK;IACzB,oBAAoB,EAAE,KAAK;IAC3B,sBAAsB,EAAE,EAAE;CAC3B,CAAC;AAsBJ;;;;;;GAMG;AACH,MAAa,SAAU,SAAQ,YAAY;;AAA3C,8BASC;AARQ,iBAAO,GAAG,KAAK,CAAC;AAChB,kBAAQ,GAAG;IAChB,IAAI,EAAE,sBAAsB;IAC5B,GAAG,EAAE,qCAAqC;IAC1C,kBAAkB,EAAE,KAAK;IACzB,oBAAoB,EAAE,KAAK;IAC3B,sBAAsB,EAAE,EAAE;CAC3B,CAAC;AAGJ,IAAA,wBAAa,EAAC,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;AAClD,IAAA,wBAAa,EAAC,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC"}
|
package/dist/chains/index.d.ts
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* happens exactly once.
|
|
16
16
|
*/
|
|
17
17
|
export { Chain, ChainConfig, ChainFeeData, ChainPolicy } from './Chain';
|
|
18
|
-
export { chainFor, registerChain, hasRegisteredChain, registeredChainIds } from './registry';
|
|
18
|
+
export { chainFor, registerChain, hasRegisteredChain, registeredChainIds, registeredChains } from './registry';
|
|
19
19
|
export { PolygonChain, AmoyChain } from './PolygonChain';
|
|
20
20
|
export { EthereumChain, SepoliaChain } from './EthereumChain';
|
|
21
21
|
export { JapanOpenChain } from './JapanOpenChain';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/chains/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/chains/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAK/G,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC"}
|
package/dist/chains/index.js
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
* happens exactly once.
|
|
17
17
|
*/
|
|
18
18
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
-
exports.JapanOpenChain = exports.SepoliaChain = exports.EthereumChain = exports.AmoyChain = exports.PolygonChain = exports.registeredChainIds = exports.hasRegisteredChain = exports.registerChain = exports.chainFor = exports.Chain = void 0;
|
|
19
|
+
exports.JapanOpenChain = exports.SepoliaChain = exports.EthereumChain = exports.AmoyChain = exports.PolygonChain = exports.registeredChains = exports.registeredChainIds = exports.hasRegisteredChain = exports.registerChain = exports.chainFor = exports.Chain = void 0;
|
|
20
20
|
// Public API
|
|
21
21
|
var Chain_1 = require("./Chain");
|
|
22
22
|
Object.defineProperty(exports, "Chain", { enumerable: true, get: function () { return Chain_1.Chain; } });
|
|
@@ -25,6 +25,7 @@ Object.defineProperty(exports, "chainFor", { enumerable: true, get: function ()
|
|
|
25
25
|
Object.defineProperty(exports, "registerChain", { enumerable: true, get: function () { return registry_1.registerChain; } });
|
|
26
26
|
Object.defineProperty(exports, "hasRegisteredChain", { enumerable: true, get: function () { return registry_1.hasRegisteredChain; } });
|
|
27
27
|
Object.defineProperty(exports, "registeredChainIds", { enumerable: true, get: function () { return registry_1.registeredChainIds; } });
|
|
28
|
+
Object.defineProperty(exports, "registeredChains", { enumerable: true, get: function () { return registry_1.registeredChains; } });
|
|
28
29
|
// Built-in chains — imported for their registerChain() side effect.
|
|
29
30
|
// Re-exported so callers that want a concrete subclass (e.g. for instanceof
|
|
30
31
|
// checks or to subclass it themselves) can import from the barrel.
|
package/dist/chains/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/chains/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;AAEH,aAAa;AACb,iCAAwE;AAA/D,8FAAA,KAAK,OAAA;AACd,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/chains/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;AAEH,aAAa;AACb,iCAAwE;AAA/D,8FAAA,KAAK,OAAA;AACd,uCAA+G;AAAtG,oGAAA,QAAQ,OAAA;AAAE,yGAAA,aAAa,OAAA;AAAE,8GAAA,kBAAkB,OAAA;AAAE,8GAAA,kBAAkB,OAAA;AAAE,4GAAA,gBAAgB,OAAA;AAE1F,oEAAoE;AACpE,4EAA4E;AAC5E,mEAAmE;AACnE,+CAAyD;AAAhD,4GAAA,YAAY,OAAA;AAAE,yGAAA,SAAS,OAAA;AAChC,iDAA8D;AAArD,8GAAA,aAAa,OAAA;AAAE,6GAAA,YAAY,OAAA;AACpC,mDAAkD;AAAzC,gHAAA,cAAc,OAAA"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { Chain, ChainConfig } from './Chain';
|
|
2
|
-
type ChainCtor = new (config: ChainConfig) => Chain
|
|
2
|
+
type ChainCtor = (new (config: ChainConfig) => Chain) & {
|
|
3
|
+
defaults: Partial<ChainConfig>;
|
|
4
|
+
};
|
|
3
5
|
/**
|
|
4
6
|
* Register a Chain subclass for a given chainId. Overwrites any existing
|
|
5
7
|
* entry — last write wins, so a downstream app can override a built-in if it
|
|
@@ -7,12 +9,25 @@ type ChainCtor = new (config: ChainConfig) => Chain;
|
|
|
7
9
|
*/
|
|
8
10
|
export declare function registerChain(chainId: number, ctor: ChainCtor): void;
|
|
9
11
|
/**
|
|
10
|
-
* Get a Chain instance for the given provider config.
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
12
|
+
* Get a Chain instance for the given provider config. The caller's config
|
|
13
|
+
* is merged ON TOP of the subclass's built-in defaults, so only chainId is
|
|
14
|
+
* strictly required — everything else (name, rpc, currency) comes from the
|
|
15
|
+
* chain class if not explicitly overridden.
|
|
16
|
+
*
|
|
17
|
+
* This means a host installation only needs to set `privateRpc` in
|
|
18
|
+
* `~/.epistery/config.ini` for chains where the public RPC is insufficient;
|
|
19
|
+
* all other details live in the chain class.
|
|
20
|
+
*
|
|
21
|
+
* If no subclass is registered for the chainId, returns a generic Chain —
|
|
22
|
+
* which uses pure EIP-1559 with no floors and the standard estimateGas.
|
|
14
23
|
*/
|
|
15
24
|
export declare function chainFor(config: ChainConfig): Chain;
|
|
25
|
+
/**
|
|
26
|
+
* Return the built-in chain list — one entry per registered chain, using
|
|
27
|
+
* each subclass's defaults. This is the authoritative network list for
|
|
28
|
+
* UI dropdowns. No root config needed.
|
|
29
|
+
*/
|
|
30
|
+
export declare function registeredChains(): ChainConfig[];
|
|
16
31
|
/** Visible for tests / debug. Returns true if a chainId has a registered subclass. */
|
|
17
32
|
export declare function hasRegisteredChain(chainId: number): boolean;
|
|
18
33
|
/** Visible for tests / debug. Returns the list of registered chainIds. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/chains/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE7C,KAAK,SAAS,GAAG,KAAK,MAAM,EAAE,WAAW,KAAK,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/chains/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE7C,KAAK,SAAS,GAAG,CAAC,KAAK,MAAM,EAAE,WAAW,KAAK,KAAK,CAAC,GAAG;IAAE,QAAQ,EAAE,OAAO,CAAC,WAAW,CAAC,CAAA;CAAE,CAAC;AAmB3F;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI,CAEpE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,KAAK,CAanD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,WAAW,EAAE,CAShD;AAED,sFAAsF;AACtF,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED,0EAA0E;AAC1E,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAE7C"}
|
package/dist/chains/registry.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.registerChain = registerChain;
|
|
4
4
|
exports.chainFor = chainFor;
|
|
5
|
+
exports.registeredChains = registeredChains;
|
|
5
6
|
exports.hasRegisteredChain = hasRegisteredChain;
|
|
6
7
|
exports.registeredChainIds = registeredChainIds;
|
|
7
8
|
const Chain_1 = require("./Chain");
|
|
@@ -30,17 +31,46 @@ function registerChain(chainId, ctor) {
|
|
|
30
31
|
REGISTRY.set(Number(chainId), ctor);
|
|
31
32
|
}
|
|
32
33
|
/**
|
|
33
|
-
* Get a Chain instance for the given provider config.
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
34
|
+
* Get a Chain instance for the given provider config. The caller's config
|
|
35
|
+
* is merged ON TOP of the subclass's built-in defaults, so only chainId is
|
|
36
|
+
* strictly required — everything else (name, rpc, currency) comes from the
|
|
37
|
+
* chain class if not explicitly overridden.
|
|
38
|
+
*
|
|
39
|
+
* This means a host installation only needs to set `privateRpc` in
|
|
40
|
+
* `~/.epistery/config.ini` for chains where the public RPC is insufficient;
|
|
41
|
+
* all other details live in the chain class.
|
|
42
|
+
*
|
|
43
|
+
* If no subclass is registered for the chainId, returns a generic Chain —
|
|
44
|
+
* which uses pure EIP-1559 with no floors and the standard estimateGas.
|
|
37
45
|
*/
|
|
38
46
|
function chainFor(config) {
|
|
39
47
|
if (config.chainId == null) {
|
|
40
48
|
throw new Error(`chainFor: provider config missing chainId: ${JSON.stringify(config)}`);
|
|
41
49
|
}
|
|
42
50
|
const Ctor = REGISTRY.get(Number(config.chainId)) || Chain_1.Chain;
|
|
43
|
-
|
|
51
|
+
// Subclass defaults fill in anything the caller didn't specify.
|
|
52
|
+
const merged = { ...Ctor.defaults, ...config };
|
|
53
|
+
// If caller provided only `rpc` but chain has a default public RPC,
|
|
54
|
+
// preserve the public one for UI display.
|
|
55
|
+
if (!config.publicRpc && Ctor.defaults.rpc) {
|
|
56
|
+
merged.publicRpc = Ctor.defaults.rpc;
|
|
57
|
+
}
|
|
58
|
+
return new Ctor(merged);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Return the built-in chain list — one entry per registered chain, using
|
|
62
|
+
* each subclass's defaults. This is the authoritative network list for
|
|
63
|
+
* UI dropdowns. No root config needed.
|
|
64
|
+
*/
|
|
65
|
+
function registeredChains() {
|
|
66
|
+
const chains = [];
|
|
67
|
+
for (const [chainId, Ctor] of REGISTRY) {
|
|
68
|
+
chains.push({
|
|
69
|
+
...Ctor.defaults,
|
|
70
|
+
chainId,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
return chains;
|
|
44
74
|
}
|
|
45
75
|
/** Visible for tests / debug. Returns true if a chainId has a registered subclass. */
|
|
46
76
|
function hasRegisteredChain(chainId) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/chains/registry.ts"],"names":[],"mappings":";;AA0BA,sCAEC;
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/chains/registry.ts"],"names":[],"mappings":";;AA0BA,sCAEC;AAeD,4BAaC;AAOD,4CASC;AAGD,gDAEC;AAGD,gDAEC;AAlFD,mCAA6C;AAI7C;;;;;;;;;;;;;;GAcG;AACH,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAqB,CAAC;AAE9C;;;;GAIG;AACH,SAAgB,aAAa,CAAC,OAAe,EAAE,IAAe;IAC5D,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;AACtC,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAgB,QAAQ,CAAC,MAAmB;IAC1C,IAAI,MAAM,CAAC,OAAO,IAAI,IAAI,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,8CAA8C,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC1F,CAAC;IACD,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,aAAK,CAAC;IAC3D,gEAAgE;IAChE,MAAM,MAAM,GAAgB,EAAE,GAAI,IAAI,CAAC,QAAwB,EAAE,GAAG,MAAM,EAAE,CAAC;IAC7E,oEAAoE;IACpE,0CAA0C;IAC1C,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;QAC3C,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;IACvC,CAAC;IACD,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;AAC1B,CAAC;AAED;;;;GAIG;AACH,SAAgB,gBAAgB;IAC9B,MAAM,MAAM,GAAkB,EAAE,CAAC;IACjC,KAAK,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,QAAQ,EAAE,CAAC;QACvC,MAAM,CAAC,IAAI,CAAC;YACV,GAAI,IAAI,CAAC,QAAwB;YACjC,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,sFAAsF;AACtF,SAAgB,kBAAkB,CAAC,OAAe;IAChD,OAAO,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;AACvC,CAAC;AAED,0EAA0E;AAC1E,SAAgB,kBAAkB;IAChC,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;AACrC,CAAC"}
|
package/index.mjs
CHANGED
|
@@ -5,7 +5,7 @@ import { fileURLToPath } from "url";
|
|
|
5
5
|
import { Epistery } from "./dist/epistery.js";
|
|
6
6
|
import { Utils } from "./dist/utils/Utils.js";
|
|
7
7
|
import { Config } from "./dist/utils/Config.js";
|
|
8
|
-
import { chainFor, registerChain, Chain } from "./dist/chains/index.js";
|
|
8
|
+
import { chainFor, registerChain, registeredChains, Chain } from "./dist/chains/index.js";
|
|
9
9
|
import createRoutes from "./routes/index.mjs";
|
|
10
10
|
|
|
11
11
|
const __filename = fileURLToPath(import.meta.url);
|
|
@@ -627,4 +627,4 @@ class EpisteryAttach {
|
|
|
627
627
|
}
|
|
628
628
|
}
|
|
629
629
|
|
|
630
|
-
export { EpisteryAttach as Epistery, Config, chainFor, registerChain, Chain };
|
|
630
|
+
export { EpisteryAttach as Epistery, Config, chainFor, registerChain, registeredChains, Chain };
|
package/package.json
CHANGED
package/src/chains/Chain.ts
CHANGED
|
@@ -53,6 +53,14 @@ export interface ChainConfig extends ProviderConfig {
|
|
|
53
53
|
* - domain config storage
|
|
54
54
|
*/
|
|
55
55
|
export class Chain {
|
|
56
|
+
/**
|
|
57
|
+
* Subclasses override `defaults` to carry the canonical network details.
|
|
58
|
+
* `chainFor({chainId: 137})` merges caller config on top of these defaults
|
|
59
|
+
* so only the chainId is required — name, public RPC, currency etc. are
|
|
60
|
+
* all built in.
|
|
61
|
+
*/
|
|
62
|
+
static defaults: Partial<ChainConfig> = {};
|
|
63
|
+
|
|
56
64
|
readonly chainId: number;
|
|
57
65
|
readonly name: string;
|
|
58
66
|
readonly rpc: string; // private/server-side RPC (with API key if any)
|
|
@@ -67,7 +75,7 @@ export class Chain {
|
|
|
67
75
|
throw new Error(`Chain config missing chainId: ${JSON.stringify(config)}`);
|
|
68
76
|
}
|
|
69
77
|
this.chainId = Number(config.chainId);
|
|
70
|
-
this.name = config.name;
|
|
78
|
+
this.name = config.name || '';
|
|
71
79
|
this.rpc = config.privateRpc || config.rpc;
|
|
72
80
|
this.publicRpc = config.publicRpc || config.rpc;
|
|
73
81
|
this.currency = {
|
|
@@ -10,6 +10,13 @@ import { registerChain } from './registry';
|
|
|
10
10
|
*/
|
|
11
11
|
export class EthereumChain extends Chain {
|
|
12
12
|
static chainId = 1;
|
|
13
|
+
static defaults = {
|
|
14
|
+
name: 'Ethereum Mainnet',
|
|
15
|
+
rpc: 'https://eth.llamarpc.com',
|
|
16
|
+
nativeCurrencyName: 'Ether',
|
|
17
|
+
nativeCurrencySymbol: 'ETH',
|
|
18
|
+
nativeCurrencyDecimals: 18,
|
|
19
|
+
};
|
|
13
20
|
}
|
|
14
21
|
|
|
15
22
|
/**
|
|
@@ -17,6 +24,13 @@ export class EthereumChain extends Chain {
|
|
|
17
24
|
*/
|
|
18
25
|
export class SepoliaChain extends Chain {
|
|
19
26
|
static chainId = 11155111;
|
|
27
|
+
static defaults = {
|
|
28
|
+
name: 'Sepolia Testnet',
|
|
29
|
+
rpc: 'https://eth-sepolia.public.blastapi.io',
|
|
30
|
+
nativeCurrencyName: 'Ether',
|
|
31
|
+
nativeCurrencySymbol: 'ETH',
|
|
32
|
+
nativeCurrencyDecimals: 18,
|
|
33
|
+
};
|
|
20
34
|
}
|
|
21
35
|
|
|
22
36
|
registerChain(EthereumChain.chainId, EthereumChain);
|
|
@@ -16,6 +16,13 @@ import { registerChain } from './registry';
|
|
|
16
16
|
*/
|
|
17
17
|
export class JapanOpenChain extends Chain {
|
|
18
18
|
static chainId = 81;
|
|
19
|
+
static defaults = {
|
|
20
|
+
name: 'Japan Open Chain',
|
|
21
|
+
rpc: 'https://rpc-2.japanopenchain.org:8545',
|
|
22
|
+
nativeCurrencyName: 'JOC',
|
|
23
|
+
nativeCurrencySymbol: 'JOC',
|
|
24
|
+
nativeCurrencyDecimals: 18,
|
|
25
|
+
};
|
|
19
26
|
|
|
20
27
|
supportsEIP1559(): boolean {
|
|
21
28
|
return false;
|
|
@@ -17,6 +17,13 @@ import { registerChain } from './registry';
|
|
|
17
17
|
*/
|
|
18
18
|
export class PolygonChain extends Chain {
|
|
19
19
|
static chainId = 137;
|
|
20
|
+
static defaults = {
|
|
21
|
+
name: 'Polygon Mainnet',
|
|
22
|
+
rpc: 'https://polygon-rpc.com',
|
|
23
|
+
nativeCurrencyName: 'POL',
|
|
24
|
+
nativeCurrencySymbol: 'POL',
|
|
25
|
+
nativeCurrencyDecimals: 18,
|
|
26
|
+
};
|
|
20
27
|
|
|
21
28
|
protected minPriorityFee(): ethers.BigNumber {
|
|
22
29
|
return this.gwei(this.policy.minPriorityFeeGwei ?? 25);
|
|
@@ -47,6 +54,13 @@ export class PolygonChain extends Chain {
|
|
|
47
54
|
*/
|
|
48
55
|
export class AmoyChain extends PolygonChain {
|
|
49
56
|
static chainId = 80002;
|
|
57
|
+
static defaults = {
|
|
58
|
+
name: 'Polygon Amoy Testnet',
|
|
59
|
+
rpc: 'https://rpc-amoy.polygon.technology',
|
|
60
|
+
nativeCurrencyName: 'POL',
|
|
61
|
+
nativeCurrencySymbol: 'POL',
|
|
62
|
+
nativeCurrencyDecimals: 18,
|
|
63
|
+
};
|
|
50
64
|
}
|
|
51
65
|
|
|
52
66
|
registerChain(PolygonChain.chainId, PolygonChain);
|
package/src/chains/index.ts
CHANGED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
|
|
18
18
|
// Public API
|
|
19
19
|
export { Chain, ChainConfig, ChainFeeData, ChainPolicy } from './Chain';
|
|
20
|
-
export { chainFor, registerChain, hasRegisteredChain, registeredChainIds } from './registry';
|
|
20
|
+
export { chainFor, registerChain, hasRegisteredChain, registeredChainIds, registeredChains } from './registry';
|
|
21
21
|
|
|
22
22
|
// Built-in chains — imported for their registerChain() side effect.
|
|
23
23
|
// Re-exported so callers that want a concrete subclass (e.g. for instanceof
|
package/src/chains/registry.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Chain, ChainConfig } from './Chain';
|
|
2
2
|
|
|
3
|
-
type ChainCtor = new (config: ChainConfig) => Chain;
|
|
3
|
+
type ChainCtor = (new (config: ChainConfig) => Chain) & { defaults: Partial<ChainConfig> };
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Registry of chainId → Chain subclass.
|
|
@@ -29,17 +29,47 @@ export function registerChain(chainId: number, ctor: ChainCtor): void {
|
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
/**
|
|
32
|
-
* Get a Chain instance for the given provider config.
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
32
|
+
* Get a Chain instance for the given provider config. The caller's config
|
|
33
|
+
* is merged ON TOP of the subclass's built-in defaults, so only chainId is
|
|
34
|
+
* strictly required — everything else (name, rpc, currency) comes from the
|
|
35
|
+
* chain class if not explicitly overridden.
|
|
36
|
+
*
|
|
37
|
+
* This means a host installation only needs to set `privateRpc` in
|
|
38
|
+
* `~/.epistery/config.ini` for chains where the public RPC is insufficient;
|
|
39
|
+
* all other details live in the chain class.
|
|
40
|
+
*
|
|
41
|
+
* If no subclass is registered for the chainId, returns a generic Chain —
|
|
42
|
+
* which uses pure EIP-1559 with no floors and the standard estimateGas.
|
|
36
43
|
*/
|
|
37
44
|
export function chainFor(config: ChainConfig): Chain {
|
|
38
45
|
if (config.chainId == null) {
|
|
39
46
|
throw new Error(`chainFor: provider config missing chainId: ${JSON.stringify(config)}`);
|
|
40
47
|
}
|
|
41
48
|
const Ctor = REGISTRY.get(Number(config.chainId)) || Chain;
|
|
42
|
-
|
|
49
|
+
// Subclass defaults fill in anything the caller didn't specify.
|
|
50
|
+
const merged: ChainConfig = { ...(Ctor.defaults as ChainConfig), ...config };
|
|
51
|
+
// If caller provided only `rpc` but chain has a default public RPC,
|
|
52
|
+
// preserve the public one for UI display.
|
|
53
|
+
if (!config.publicRpc && Ctor.defaults.rpc) {
|
|
54
|
+
merged.publicRpc = Ctor.defaults.rpc;
|
|
55
|
+
}
|
|
56
|
+
return new Ctor(merged);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Return the built-in chain list — one entry per registered chain, using
|
|
61
|
+
* each subclass's defaults. This is the authoritative network list for
|
|
62
|
+
* UI dropdowns. No root config needed.
|
|
63
|
+
*/
|
|
64
|
+
export function registeredChains(): ChainConfig[] {
|
|
65
|
+
const chains: ChainConfig[] = [];
|
|
66
|
+
for (const [chainId, Ctor] of REGISTRY) {
|
|
67
|
+
chains.push({
|
|
68
|
+
...(Ctor.defaults as ChainConfig),
|
|
69
|
+
chainId,
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
return chains;
|
|
43
73
|
}
|
|
44
74
|
|
|
45
75
|
/** Visible for tests / debug. Returns true if a chainId has a registered subclass. */
|