@eternl/network-id 0.46.0 → 0.48.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.
Files changed (59) hide show
  1. package/README.md +38 -0
  2. package/dist/{GenesisStore-CqCs2Yin.mjs → GenesisStore-BZQk-5ZY.mjs} +46 -1
  3. package/dist/GenesisStore-BZQk-5ZY.mjs.map +1 -0
  4. package/dist/{GenesisStore-DGnbeDqM.cjs → GenesisStore-r52jj7kC.cjs} +46 -1
  5. package/dist/GenesisStore-r52jj7kC.cjs.map +1 -0
  6. package/dist/{NetworkId-B9JhuswJ.d.cts → NetworkId-BzB9yQuF.d.cts} +4 -2
  7. package/dist/NetworkId-BzB9yQuF.d.cts.map +1 -0
  8. package/dist/{NetworkId-B9JhuswJ.d.mts → NetworkId-BzB9yQuF.d.mts} +4 -2
  9. package/dist/NetworkId-BzB9yQuF.d.mts.map +1 -0
  10. package/dist/{chain-DRRhGMxp.d.mts → chain-0Mtrt2zw.d.mts} +2 -2
  11. package/dist/chain-0Mtrt2zw.d.mts.map +1 -0
  12. package/dist/{chain-DbsXl5Uh.d.cts → chain-TJS85jZZ.d.cts} +2 -2
  13. package/dist/chain-TJS85jZZ.d.cts.map +1 -0
  14. package/dist/chain.cjs +3 -7
  15. package/dist/chain.cjs.map +1 -1
  16. package/dist/chain.d.cts +1 -1
  17. package/dist/chain.d.mts +1 -1
  18. package/dist/chain.mjs +3 -7
  19. package/dist/chain.mjs.map +1 -1
  20. package/dist/index.cjs +2 -1
  21. package/dist/index.d.cts +3 -3
  22. package/dist/index.d.mts +3 -3
  23. package/dist/index.mjs +3 -3
  24. package/dist/network/GenesisStore.cjs +1 -1
  25. package/dist/network/GenesisStore.d.cts +1 -1
  26. package/dist/network/GenesisStore.d.mts +1 -1
  27. package/dist/network/GenesisStore.mjs +1 -1
  28. package/dist/network/musashi-2026w42/profile.cjs +21 -0
  29. package/dist/network/musashi-2026w42/profile.cjs.map +1 -0
  30. package/dist/network/musashi-2026w42/profile.d.cts +18 -0
  31. package/dist/network/musashi-2026w42/profile.d.cts.map +1 -0
  32. package/dist/network/musashi-2026w42/profile.d.mts +18 -0
  33. package/dist/network/musashi-2026w42/profile.d.mts.map +1 -0
  34. package/dist/network/musashi-2026w42/profile.mjs +20 -0
  35. package/dist/network/musashi-2026w42/profile.mjs.map +1 -0
  36. package/dist/timeline.cjs +58 -0
  37. package/dist/timeline.cjs.map +1 -0
  38. package/dist/timeline.d.cts +19 -0
  39. package/dist/timeline.d.cts.map +1 -0
  40. package/dist/timeline.d.mts +19 -0
  41. package/dist/timeline.d.mts.map +1 -0
  42. package/dist/timeline.mjs +57 -0
  43. package/dist/timeline.mjs.map +1 -0
  44. package/dist/types/IChainTip.d.cts +1 -1
  45. package/dist/types/IChainTip.d.mts +1 -1
  46. package/dist/types/NetworkId.cjs +14 -1
  47. package/dist/types/NetworkId.cjs.map +1 -1
  48. package/dist/types/NetworkId.d.cts +2 -2
  49. package/dist/types/NetworkId.d.mts +2 -2
  50. package/dist/types/NetworkId.mjs +14 -2
  51. package/dist/types/NetworkId.mjs.map +1 -1
  52. package/llms.txt +1 -0
  53. package/package.json +7 -2
  54. package/dist/GenesisStore-CqCs2Yin.mjs.map +0 -1
  55. package/dist/GenesisStore-DGnbeDqM.cjs.map +0 -1
  56. package/dist/NetworkId-B9JhuswJ.d.cts.map +0 -1
  57. package/dist/NetworkId-B9JhuswJ.d.mts.map +0 -1
  58. package/dist/chain-DRRhGMxp.d.mts.map +0 -1
  59. package/dist/chain-DbsXl5Uh.d.cts.map +0 -1
package/README.md CHANGED
@@ -27,6 +27,43 @@ if (isSupportedNetworkId(id)) {
27
27
  }
28
28
  ```
29
29
 
30
+ ## Caller-supplied slot timelines
31
+
32
+ `@eternl/network-id/timeline` provides `createSlotTimeline` for a caller's explicit
33
+ era boundaries. It snapshots and freezes the supplied data, checks continuity,
34
+ and rejects unsafe integers. It does not register networks or select endpoints.
35
+
36
+ ```ts
37
+ import { createSlotTimeline } from '@eternl/network-id/timeline'
38
+
39
+ const timeline = createSlotTimeline([
40
+ { firstSlot: 0, startTimeMs: Date.UTC(2026, 0, 1), slotLengthMs: 1000 }
41
+ ])
42
+ const time = timeline.timestampAtSlot(42)
43
+ const firstSlot = timeline.slotAtOrAfter(time + 1) // 43
44
+ ```
45
+
46
+ Times are nonnegative Unix milliseconds. `slotAtOrAfter` clamps timestamps before
47
+ genesis to slot zero; it rounds up, so the inclusive last slot in `[start, end)`
48
+ is `slotAtOrAfter(end) - 1`. Results beyond the safe integer range throw.
49
+ The timeline utility does not change registered-network helpers or select frontend networks.
50
+
51
+ ## Musashi development network
52
+
53
+ `NETWORK_ID.MUSASHI_2026W42` identifies the prototype testnet with magic 164,
54
+ testnet address discriminator 0, and genesis at 2026-10-18T00:00:00Z. Slots last
55
+ one second and epochs contain 21,600 slots. `isDevelopmentNetwork(id)` marks
56
+ this network for explicit opt-in by development consumers. It is a distinct
57
+ wallet/cache namespace and must not be represented as preprod.
58
+
59
+ `@eternl/network-id/network/musashi-2026w42/profile` exports the immutable
60
+ `MUSASHI_2026W42` genesis pins, codec profile and slot timeline. The metadata
61
+ contains no public API, explorer or faucet URLs. A reset requires a new network
62
+ identifier. See [profile provenance](src/network/musashi-2026w42/README.md).
63
+
64
+ This package remains public (`BUSL-1.1`); frontend development enablement belongs
65
+ to the private `@eternl/network-feature` package and the consuming application.
66
+
30
67
  ## Exports
31
68
 
32
69
  - `NETWORK_ID`
@@ -42,6 +79,7 @@ if (isSupportedNetworkId(id)) {
42
79
  - `getNetworkId`
43
80
  - `getNetworkDecimals`
44
81
  - `isTestnetNetwork`
82
+ - `isDevelopmentNetwork`
45
83
  - `isCustomNetwork`
46
84
  - `getNetworkCurrencyCode`
47
85
  - `getNetworkCurrencySymbol`
@@ -343,6 +343,51 @@ const GenesisStore = {
343
343
  }
344
344
  }
345
345
  },
346
+ "musashi-2026w42": {
347
+ shelley: {
348
+ activeSlotsCoeff: .05,
349
+ epochLength: 21600,
350
+ maxKESEvolutions: 62,
351
+ maxLovelaceSupply: 0x9fdf42f6e48000,
352
+ networkId: "Testnet",
353
+ networkMagic: 164,
354
+ securityParam: 108,
355
+ slotLength: 1,
356
+ slotsPerKESPeriod: 129600,
357
+ systemStart: "2026-10-18T00:00:00Z",
358
+ updateQuorum: 3
359
+ },
360
+ byron: {
361
+ startTime: 1792281600,
362
+ blockVersionData: {
363
+ "heavyDelThd": "300000000000",
364
+ "maxBlockSize": "2000000",
365
+ "maxHeaderSize": "2000000",
366
+ "maxProposalSize": "700",
367
+ "maxTxSize": "4096",
368
+ "mpcThd": "20000000000000",
369
+ "scriptVersion": 0,
370
+ "slotDuration": "20000",
371
+ "softforkRule": {
372
+ "initThd": "900000000000000",
373
+ "minThd": "600000000000000",
374
+ "thdDecrement": "50000000000000"
375
+ },
376
+ "txFeePolicy": {
377
+ "multiplier": "43946000000",
378
+ "summand": "155381000000000"
379
+ },
380
+ "unlockStakeEpoch": "18446744073709551615",
381
+ "updateImplicit": "10000",
382
+ "updateProposalThd": "100000000000000",
383
+ "updateVoteThd": "1000000000000"
384
+ },
385
+ protocolConsts: {
386
+ "k": 108,
387
+ "protocolMagic": 164
388
+ }
389
+ }
390
+ },
346
391
  afvt: {
347
392
  shelley: {
348
393
  activeSlotsCoeff: .25,
@@ -615,4 +660,4 @@ const GenesisStore = {
615
660
  //#endregion
616
661
  export { GenesisStore as t };
617
662
 
618
- //# sourceMappingURL=GenesisStore-CqCs2Yin.mjs.map
663
+ //# sourceMappingURL=GenesisStore-BZQk-5ZY.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GenesisStore-BZQk-5ZY.mjs","names":["mainnetShelley","mainnetByron","guildShelley","guildByron","sanchoShelley","sanchoByron","preprodShelley","preprodByron","previewShelley","previewByron","musashiShelley","musashiByron","afvtShelley","afvtByron","afvmShelley","afvmByron","afptShelley","afptByron","afpmShelley","afpmByron"],"sources":["../src/network/afpm/byron.json","../src/network/afpm/shelley.json","../src/network/afpt/byron.json","../src/network/afpt/shelley.json","../src/network/afvm/byron.json","../src/network/afvm/shelley.json","../src/network/afvt/byron.json","../src/network/afvt/shelley.json","../src/network/guild/byron.json","../src/network/guild/shelley.json","../src/network/mainnet/byron.json","../src/network/mainnet/shelley.json","../src/network/musashi-2026w42/byron.json","../src/network/musashi-2026w42/shelley.json","../src/network/preprod/byron.json","../src/network/preprod/shelley.json","../src/network/preview/byron.json","../src/network/preview/shelley.json","../src/network/sancho/byron.json","../src/network/sancho/shelley.json","../src/network/GenesisStore.ts"],"sourcesContent":["","","","","","","","","","","","","","","","","","","","","import { type NetworkId } from '../index'\nimport afpmByron from './afpm/byron.json'\nimport afpmShelley from './afpm/shelley.json'\nimport afptByron from './afpt/byron.json'\nimport afptShelley from './afpt/shelley.json'\nimport afvmByron from './afvm/byron.json'\nimport afvmShelley from './afvm/shelley.json'\nimport afvtByron from './afvt/byron.json'\nimport afvtShelley from './afvt/shelley.json'\nimport guildByron from './guild/byron.json'\nimport guildShelley from './guild/shelley.json'\nimport { type IGenesisStore } from './IGenesisStore'\nimport mainnetByron from './mainnet/byron.json'\nimport mainnetShelley from './mainnet/shelley.json'\nimport musashiByron from './musashi-2026w42/byron.json'\nimport musashiShelley from './musashi-2026w42/shelley.json'\nimport preprodByron from './preprod/byron.json'\nimport preprodShelley from './preprod/shelley.json'\nimport previewByron from './preview/byron.json'\nimport previewShelley from './preview/shelley.json'\nimport sanchoByron from './sancho/byron.json'\nimport sanchoShelley from './sancho/shelley.json'\n\nexport const GenesisStore: Record<NetworkId, IGenesisStore> = {\n\n mainnet: {\n\n shelley: mainnetShelley,\n byron: mainnetByron\n },\n\n guild: {\n\n shelley: guildShelley,\n byron: guildByron\n },\n\n sancho: {\n\n shelley: sanchoShelley,\n byron: sanchoByron\n },\n\n preprod: {\n\n shelley: preprodShelley,\n byron: preprodByron\n },\n\n preview: {\n\n shelley: previewShelley,\n byron: previewByron\n },\n\n 'musashi-2026w42': {\n\n shelley: musashiShelley,\n byron: musashiByron\n },\n\n afvt: {\n\n shelley: afvtShelley,\n byron: afvtByron\n },\n\n afvm: {\n\n shelley: afvmShelley,\n byron: afvmByron\n },\n\n afpt: {\n\n shelley: afptShelley,\n byron: afptByron\n },\n\n afpm: {\n\n shelley: afpmShelley,\n byron: afpmByron\n },\n}\n"],"mappings":";;AoBuBA,MAAa,eAAiD;CAE5D,SAA4B;EAE1B,SAA0BA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAAA;EAC1B,OAA0BC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAAA;CAC5B;CAEA,OAA4B;EAE1B,SAA0BC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAAA;EAC1B,OAA0BC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAAA;CAC5B;CAEA,QAA4B;EAE1B,SAA0BC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAAA;EAC1B,OAA0BC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAAA;CAC5B;CAEA,SAA4B;EAE1B,SAA0BC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAAA;EAC1B,OAA0BC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAAA;CAC5B;CAEA,SAA4B;EAE1B,SAA0BC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAAA;EAC1B,OAA0BC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAAA;CAC5B;CAEA,mBAA6B;EAE3B,SAA0BC;;;;;;;;;;;;EAAAA;EAC1B,OAA0BC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAAA;CAC5B;CAEA,MAA4B;EAE1B,SAA0BC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAAA;EAC1B,OAA0BC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAAA;CAC5B;CAEA,MAA4B;EAE1B,SAA0BC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAAA;EAC1B,OAA0BC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAAA;CAC5B;CAEA,MAA4B;EAE1B,SAA0BC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAAA;EAC1B,OAA0BC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAAA;CAC5B;CAEA,MAA4B;EAE1B,SAA0BC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAAA;EAC1B,OAA0BC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAAA;CAC5B;AACF"}
@@ -343,6 +343,51 @@ const GenesisStore = {
343
343
  }
344
344
  }
345
345
  },
346
+ "musashi-2026w42": {
347
+ shelley: {
348
+ activeSlotsCoeff: .05,
349
+ epochLength: 21600,
350
+ maxKESEvolutions: 62,
351
+ maxLovelaceSupply: 0x9fdf42f6e48000,
352
+ networkId: "Testnet",
353
+ networkMagic: 164,
354
+ securityParam: 108,
355
+ slotLength: 1,
356
+ slotsPerKESPeriod: 129600,
357
+ systemStart: "2026-10-18T00:00:00Z",
358
+ updateQuorum: 3
359
+ },
360
+ byron: {
361
+ startTime: 1792281600,
362
+ blockVersionData: {
363
+ "heavyDelThd": "300000000000",
364
+ "maxBlockSize": "2000000",
365
+ "maxHeaderSize": "2000000",
366
+ "maxProposalSize": "700",
367
+ "maxTxSize": "4096",
368
+ "mpcThd": "20000000000000",
369
+ "scriptVersion": 0,
370
+ "slotDuration": "20000",
371
+ "softforkRule": {
372
+ "initThd": "900000000000000",
373
+ "minThd": "600000000000000",
374
+ "thdDecrement": "50000000000000"
375
+ },
376
+ "txFeePolicy": {
377
+ "multiplier": "43946000000",
378
+ "summand": "155381000000000"
379
+ },
380
+ "unlockStakeEpoch": "18446744073709551615",
381
+ "updateImplicit": "10000",
382
+ "updateProposalThd": "100000000000000",
383
+ "updateVoteThd": "1000000000000"
384
+ },
385
+ protocolConsts: {
386
+ "k": 108,
387
+ "protocolMagic": 164
388
+ }
389
+ }
390
+ },
346
391
  afvt: {
347
392
  shelley: {
348
393
  activeSlotsCoeff: .25,
@@ -620,4 +665,4 @@ Object.defineProperty(exports, "GenesisStore", {
620
665
  }
621
666
  });
622
667
 
623
- //# sourceMappingURL=GenesisStore-DGnbeDqM.cjs.map
668
+ //# sourceMappingURL=GenesisStore-r52jj7kC.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GenesisStore-r52jj7kC.cjs","names":["mainnetShelley","mainnetByron","guildShelley","guildByron","sanchoShelley","sanchoByron","preprodShelley","preprodByron","previewShelley","previewByron","musashiShelley","musashiByron","afvtShelley","afvtByron","afvmShelley","afvmByron","afptShelley","afptByron","afpmShelley","afpmByron"],"sources":["../src/network/afpm/byron.json","../src/network/afpm/shelley.json","../src/network/afpt/byron.json","../src/network/afpt/shelley.json","../src/network/afvm/byron.json","../src/network/afvm/shelley.json","../src/network/afvt/byron.json","../src/network/afvt/shelley.json","../src/network/guild/byron.json","../src/network/guild/shelley.json","../src/network/mainnet/byron.json","../src/network/mainnet/shelley.json","../src/network/musashi-2026w42/byron.json","../src/network/musashi-2026w42/shelley.json","../src/network/preprod/byron.json","../src/network/preprod/shelley.json","../src/network/preview/byron.json","../src/network/preview/shelley.json","../src/network/sancho/byron.json","../src/network/sancho/shelley.json","../src/network/GenesisStore.ts"],"sourcesContent":["","","","","","","","","","","","","","","","","","","","","import { type NetworkId } from '../index'\nimport afpmByron from './afpm/byron.json'\nimport afpmShelley from './afpm/shelley.json'\nimport afptByron from './afpt/byron.json'\nimport afptShelley from './afpt/shelley.json'\nimport afvmByron from './afvm/byron.json'\nimport afvmShelley from './afvm/shelley.json'\nimport afvtByron from './afvt/byron.json'\nimport afvtShelley from './afvt/shelley.json'\nimport guildByron from './guild/byron.json'\nimport guildShelley from './guild/shelley.json'\nimport { type IGenesisStore } from './IGenesisStore'\nimport mainnetByron from './mainnet/byron.json'\nimport mainnetShelley from './mainnet/shelley.json'\nimport musashiByron from './musashi-2026w42/byron.json'\nimport musashiShelley from './musashi-2026w42/shelley.json'\nimport preprodByron from './preprod/byron.json'\nimport preprodShelley from './preprod/shelley.json'\nimport previewByron from './preview/byron.json'\nimport previewShelley from './preview/shelley.json'\nimport sanchoByron from './sancho/byron.json'\nimport sanchoShelley from './sancho/shelley.json'\n\nexport const GenesisStore: Record<NetworkId, IGenesisStore> = {\n\n mainnet: {\n\n shelley: mainnetShelley,\n byron: mainnetByron\n },\n\n guild: {\n\n shelley: guildShelley,\n byron: guildByron\n },\n\n sancho: {\n\n shelley: sanchoShelley,\n byron: sanchoByron\n },\n\n preprod: {\n\n shelley: preprodShelley,\n byron: preprodByron\n },\n\n preview: {\n\n shelley: previewShelley,\n byron: previewByron\n },\n\n 'musashi-2026w42': {\n\n shelley: musashiShelley,\n byron: musashiByron\n },\n\n afvt: {\n\n shelley: afvtShelley,\n byron: afvtByron\n },\n\n afvm: {\n\n shelley: afvmShelley,\n byron: afvmByron\n },\n\n afpt: {\n\n shelley: afptShelley,\n byron: afptByron\n },\n\n afpm: {\n\n shelley: afpmShelley,\n byron: afpmByron\n },\n}\n"],"mappings":";;AoBuBA,MAAa,eAAiD;CAE5D,SAA4B;EAE1B,SAA0BA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAAA;EAC1B,OAA0BC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAAA;CAC5B;CAEA,OAA4B;EAE1B,SAA0BC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAAA;EAC1B,OAA0BC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAAA;CAC5B;CAEA,QAA4B;EAE1B,SAA0BC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAAA;EAC1B,OAA0BC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAAA;CAC5B;CAEA,SAA4B;EAE1B,SAA0BC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAAA;EAC1B,OAA0BC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAAA;CAC5B;CAEA,SAA4B;EAE1B,SAA0BC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAAA;EAC1B,OAA0BC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAAA;CAC5B;CAEA,mBAA6B;EAE3B,SAA0BC;;;;;;;;;;;;EAAAA;EAC1B,OAA0BC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAAA;CAC5B;CAEA,MAA4B;EAE1B,SAA0BC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAAA;EAC1B,OAA0BC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAAA;CAC5B;CAEA,MAA4B;EAE1B,SAA0BC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAAA;EAC1B,OAA0BC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAAA;CAC5B;CAEA,MAA4B;EAE1B,SAA0BC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAAA;EAC1B,OAA0BC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAAA;CAC5B;CAEA,MAA4B;EAE1B,SAA0BC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAAA;EAC1B,OAA0BC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAAA;CAC5B;AACF"}
@@ -5,6 +5,7 @@ declare const NETWORK_ID: {
5
5
  readonly SANCHO: 'sancho';
6
6
  readonly PREPROD: 'preprod';
7
7
  readonly PREVIEW: 'preview';
8
+ readonly MUSASHI_2026W42: 'musashi-2026w42';
8
9
  readonly AFVT: 'afvt';
9
10
  readonly AFVM: 'afvm';
10
11
  readonly AFPT: 'afpt';
@@ -26,6 +27,7 @@ declare const isTestnetNetwork: (networkId: NetworkId) => boolean;
26
27
  declare const isCustomNetwork: (networkId: NetworkId) => boolean;
27
28
  declare const getNetworkCurrencyCode: (id: NetworkId) => string;
28
29
  declare const getNetworkCurrencySymbol: (id: NetworkId) => string;
30
+ declare const isDevelopmentNetwork: (id: string) => boolean;
29
31
  //#endregion
30
- export { networkStakeAddressPrefix as _, getNetworkDecimals as a, isSupportedNetworkId as c, networkCurrencyCode as d, networkCurrencySymbol as f, networkShelleyTransitionEpoch as g, networkIdx as h, getNetworkCurrencySymbol as i, isTestnetNetwork as l, networkIdList as m, NetworkId as n, getNetworkId as o, networkGroups as p, getNetworkCurrencyCode as r, isCustomNetwork as s, NETWORK_ID as t, networkAddressPrefix as u };
31
- //# sourceMappingURL=NetworkId-B9JhuswJ.d.cts.map
32
+ export { networkShelleyTransitionEpoch as _, getNetworkDecimals as a, isDevelopmentNetwork as c, networkAddressPrefix as d, networkCurrencyCode as f, networkIdx as g, networkIdList as h, getNetworkCurrencySymbol as i, isSupportedNetworkId as l, networkGroups as m, NetworkId as n, getNetworkId as o, networkCurrencySymbol as p, getNetworkCurrencyCode as r, isCustomNetwork as s, NETWORK_ID as t, isTestnetNetwork as u, networkStakeAddressPrefix as v };
33
+ //# sourceMappingURL=NetworkId-BzB9yQuF.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NetworkId-BzB9yQuF.d.cts","names":[],"sources":["../src/types/NetworkId.ts"],"mappings":";cAAa;WAEX;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;KAGU,mBAA2B,wBAAwB;cAElD,eAAoB;cAapB,YAAY,OAAO;cAcnB,eAAe,eAAe;cAM9B,+BAA+B,OAAO;cActC,sBAAsB,OAAO;cAc7B,2BAA2B,OAAO;cAclC,qBAAqB,OAAO;cAc5B,uBAAuB,OAAO;cAc9B,uBAAoB,uBAA6B,MAAM;cAEvD,eAAY;cAmBZ,qBAAkB,IAAc;cAShC,mBAAgB,WAAuB;cAmBvC,kBAAe,WAAwB;cAEvC,yBAAsB,IAAU;cAChC,2BAAwB,IAAQ;cAGhC,uBAAoB"}
@@ -5,6 +5,7 @@ declare const NETWORK_ID: {
5
5
  readonly SANCHO: 'sancho';
6
6
  readonly PREPROD: 'preprod';
7
7
  readonly PREVIEW: 'preview';
8
+ readonly MUSASHI_2026W42: 'musashi-2026w42';
8
9
  readonly AFVT: 'afvt';
9
10
  readonly AFVM: 'afvm';
10
11
  readonly AFPT: 'afpt';
@@ -26,6 +27,7 @@ declare const isTestnetNetwork: (networkId: NetworkId) => boolean;
26
27
  declare const isCustomNetwork: (networkId: NetworkId) => boolean;
27
28
  declare const getNetworkCurrencyCode: (id: NetworkId) => string;
28
29
  declare const getNetworkCurrencySymbol: (id: NetworkId) => string;
30
+ declare const isDevelopmentNetwork: (id: string) => boolean;
29
31
  //#endregion
30
- export { networkStakeAddressPrefix as _, getNetworkDecimals as a, isSupportedNetworkId as c, networkCurrencyCode as d, networkCurrencySymbol as f, networkShelleyTransitionEpoch as g, networkIdx as h, getNetworkCurrencySymbol as i, isTestnetNetwork as l, networkIdList as m, NetworkId as n, getNetworkId as o, networkGroups as p, getNetworkCurrencyCode as r, isCustomNetwork as s, NETWORK_ID as t, networkAddressPrefix as u };
31
- //# sourceMappingURL=NetworkId-B9JhuswJ.d.mts.map
32
+ export { networkShelleyTransitionEpoch as _, getNetworkDecimals as a, isDevelopmentNetwork as c, networkAddressPrefix as d, networkCurrencyCode as f, networkIdx as g, networkIdList as h, getNetworkCurrencySymbol as i, isSupportedNetworkId as l, networkGroups as m, NetworkId as n, getNetworkId as o, networkCurrencySymbol as p, getNetworkCurrencyCode as r, isCustomNetwork as s, NETWORK_ID as t, isTestnetNetwork as u, networkStakeAddressPrefix as v };
33
+ //# sourceMappingURL=NetworkId-BzB9yQuF.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NetworkId-BzB9yQuF.d.mts","names":[],"sources":["../src/types/NetworkId.ts"],"mappings":";cAAa;WAEX;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;KAGU,mBAA2B,wBAAwB;cAElD,eAAoB;cAapB,YAAY,OAAO;cAcnB,eAAe,eAAe;cAM9B,+BAA+B,OAAO;cActC,sBAAsB,OAAO;cAc7B,2BAA2B,OAAO;cAclC,qBAAqB,OAAO;cAc5B,uBAAuB,OAAO;cAc9B,uBAAoB,uBAA6B,MAAM;cAEvD,eAAY;cAmBZ,qBAAkB,IAAc;cAShC,mBAAgB,WAAuB;cAmBvC,kBAAe,WAAwB;cAEvC,yBAAsB,IAAU;cAChC,2BAAwB,IAAQ;cAGhC,uBAAoB"}
@@ -1,6 +1,6 @@
1
1
  import { a as IShelley, n as IByron, r as IGenesisStore } from "./IGenesisStore-DsIpICQ8.mjs";
2
2
  import { t as DateId } from "./DateId-DpLkO3y9.mjs";
3
- import { n as NetworkId } from "./NetworkId-B9JhuswJ.mjs";
3
+ import { n as NetworkId } from "./NetworkId-BzB9yQuF.mjs";
4
4
  //#region src/network/GenesisStore.d.ts
5
5
  declare const GenesisStore: Record<NetworkId, IGenesisStore>;
6
6
  //#endregion
@@ -44,4 +44,4 @@ declare const getDateIdFromTimestamp: (timeStamp: number, userSelectedTimezone:
44
44
  declare const getSlotFromDateId: (networkId: NetworkId, dateId: Pick<DateId, 'year' | 'month' | 'day' | 'timezone'>, calcEnd?: boolean) => number;
45
45
  //#endregion
46
46
  export { getTimestampFromSlot as _, getCalculatedSlotFromBlockTime as a, createIChainTip as b, getEpochFromSlot as c, getGenesis as d, getLastSlotOfEpoch as f, getSlotFromDateId as g, getShelley as h, getCalculatedEpochSlot as i, getEpochLength as l, getNumEpochBlocks as m, getCalculatedChainTip as n, getDateIdFromSlot as o, getNetworkMagic as p, getCalculatedEpoch as r, getDateIdFromTimestamp as s, getByron as t, getEpochStart as u, updateChainTip as v, GenesisStore as x, IChainTip as y };
47
- //# sourceMappingURL=chain-DRRhGMxp.d.mts.map
47
+ //# sourceMappingURL=chain-0Mtrt2zw.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chain-0Mtrt2zw.d.mts","names":[],"sources":["../src/network/GenesisStore.ts","../src/types/IChainTip.ts","../src/chain.ts"],"mappings":";;;;cAuBa,cAAc,OAAO,WAAW;;;UCrB5B;EAEf,WAA4B;EAC5B,SAA4B;EAE5B;EACA;EAEA;EACA;EACA;EACA;EAEA;EACA;EACA;;cAGW,kBAAe,WAAe,qBAAmB;;;cCIjD,aAAU,WAAqB,cAAY;cAC3C,WAAQ,WAAuB,cAAY;cAC3C,aAAU,WAAqB,cAAY;cAC3C,kBAAe,WAAgB;cAC/B,iBAAc,WAAiB;cAC/B,oBAAiB,WAAc;cAuB/B,wBAAqB,WAAe;cAiBpC,uBAAoB,WAAe,WAAS;cAc5C,mBAAgB,WAAe,WAAS;cAcxC,iCAA8B,WAAe,WAAS;cAmBtD,yBAAsB,WAAe;cAWrC,qBAAkB,IAAQ;cAmB1B,qBAAkB,IAAQ,WAAS;cAenC,gBAAa,IAAW,WAAS;EAE5C;EACA;;cA4BW,iBAAc,IAAU,WAAS,UAAY,WAAS,MAAQ,cAAY;cAoB1E,oBAAiB,WAAe,WAAS,gBAAgB,iCAAiC;cAO1F,yBAAsB,mBAAqB,iCAAiC;cAsC5E,oBAAiB,WACjB,WAAS,QACZ,KAAK,gDAA8C"}
@@ -1,6 +1,6 @@
1
1
  import { a as IShelley, n as IByron, r as IGenesisStore } from "./IGenesisStore-DsIpICQ8.cjs";
2
2
  import { t as DateId } from "./DateId-DpLkO3y9.cjs";
3
- import { n as NetworkId } from "./NetworkId-B9JhuswJ.cjs";
3
+ import { n as NetworkId } from "./NetworkId-BzB9yQuF.cjs";
4
4
  //#region src/network/GenesisStore.d.ts
5
5
  declare const GenesisStore: Record<NetworkId, IGenesisStore>;
6
6
  //#endregion
@@ -44,4 +44,4 @@ declare const getDateIdFromTimestamp: (timeStamp: number, userSelectedTimezone:
44
44
  declare const getSlotFromDateId: (networkId: NetworkId, dateId: Pick<DateId, 'year' | 'month' | 'day' | 'timezone'>, calcEnd?: boolean) => number;
45
45
  //#endregion
46
46
  export { getTimestampFromSlot as _, getCalculatedSlotFromBlockTime as a, createIChainTip as b, getEpochFromSlot as c, getGenesis as d, getLastSlotOfEpoch as f, getSlotFromDateId as g, getShelley as h, getCalculatedEpochSlot as i, getEpochLength as l, getNumEpochBlocks as m, getCalculatedChainTip as n, getDateIdFromSlot as o, getNetworkMagic as p, getCalculatedEpoch as r, getDateIdFromTimestamp as s, getByron as t, getEpochStart as u, updateChainTip as v, GenesisStore as x, IChainTip as y };
47
- //# sourceMappingURL=chain-DbsXl5Uh.d.cts.map
47
+ //# sourceMappingURL=chain-TJS85jZZ.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chain-TJS85jZZ.d.cts","names":[],"sources":["../src/network/GenesisStore.ts","../src/types/IChainTip.ts","../src/chain.ts"],"mappings":";;;;cAuBa,cAAc,OAAO,WAAW;;;UCrB5B;EAEf,WAA4B;EAC5B,SAA4B;EAE5B;EACA;EAEA;EACA;EACA;EACA;EAEA;EACA;EACA;;cAGW,kBAAe,WAAe,qBAAmB;;;cCIjD,aAAU,WAAqB,cAAY;cAC3C,WAAQ,WAAuB,cAAY;cAC3C,aAAU,WAAqB,cAAY;cAC3C,kBAAe,WAAgB;cAC/B,iBAAc,WAAiB;cAC/B,oBAAiB,WAAc;cAuB/B,wBAAqB,WAAe;cAiBpC,uBAAoB,WAAe,WAAS;cAc5C,mBAAgB,WAAe,WAAS;cAcxC,iCAA8B,WAAe,WAAS;cAmBtD,yBAAsB,WAAe;cAWrC,qBAAkB,IAAQ;cAmB1B,qBAAkB,IAAQ,WAAS;cAenC,gBAAa,IAAW,WAAS;EAE5C;EACA;;cA4BW,iBAAc,IAAU,WAAS,UAAY,WAAS,MAAQ,cAAY;cAoB1E,oBAAiB,WAAe,WAAS,gBAAgB,iCAAiC;cAO1F,yBAAsB,mBAAqB,iCAAiC;cAsC5E,oBAAiB,WACjB,WAAS,QACZ,KAAK,gDAA8C"}
package/dist/chain.cjs CHANGED
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_GenesisStore = require("./GenesisStore-DGnbeDqM.cjs");
2
+ const require_GenesisStore = require("./GenesisStore-r52jj7kC.cjs");
3
3
  const require_types_NetworkId = require("./types/NetworkId.cjs");
4
4
  let _eternl_tools = require("@eternl/tools");
5
5
  //#region src/chain.ts
@@ -42,14 +42,10 @@ const getTimestampFromSlot = (networkId, slotNo) => {
42
42
  return (common.byronEndTime + (slotNo - common.byronSlots) * shelley.slotLength) * 1e3;
43
43
  };
44
44
  const getEpochFromSlot = (networkId, slotNo) => {
45
- const byron = getByron(networkId);
46
45
  const shelley = getShelley(networkId);
47
46
  const common = getCommonData(networkId);
48
- let timeSec = 0;
49
- if (slotNo < common.byronSlots) timeSec = byron.startTime + slotNo * parseInt(byron.blockVersionData.slotDuration);
50
- else timeSec = common.byronEndTime + (slotNo - common.byronSlots) * shelley.slotLength;
51
- if (timeSec < common.byronEndTime) return Math.floor((timeSec - byron.startTime) * 1e3 / parseInt(byron.blockVersionData.slotDuration) / common.byronEpochLength);
52
- return common.shelleyTransEpoch + Math.floor((timeSec - common.byronEndTime) / shelley.slotLength / shelley.epochLength);
47
+ if (slotNo < common.byronSlots) return Math.floor(slotNo / common.byronEpochLength);
48
+ return common.shelleyTransEpoch + Math.floor((slotNo - common.byronSlots) / shelley.epochLength);
53
49
  };
54
50
  const getCalculatedSlotFromBlockTime = (networkId, timestamp) => {
55
51
  const dateTimeSec = Math.floor(new Date(timestamp).getTime() / 1e3);
@@ -1 +1 @@
1
- {"version":3,"file":"chain.cjs","names":["GenesisStore","now","networkShelleyTransitionEpoch","changeTimezone"],"sources":["../src/chain.ts"],"sourcesContent":["import {\n changeTimezone,\n now,\n} from '@eternl/tools'\n\nimport { GenesisStore } from './network/GenesisStore'\nimport {\n type IByron,\n type IGenesisStore,\n type IShelley,\n} from './network/IGenesisStore'\nimport { type DateId } from './types/DateId'\nimport { type IChainTip } from './types/IChainTip'\nimport {\n type NetworkId,\n networkShelleyTransitionEpoch,\n} from './types/NetworkId'\n\n// Cache for storing calculated DateId results\nconst dateIdCache = new Map<string, DateId>()\n\n// Cache for Intl.DateTimeFormat instances (these are expensive to create)\nconst formatterCache = new Map<string, Intl.DateTimeFormat>()\n\nexport const getGenesis = (networkId: NetworkId): IGenesisStore => GenesisStore[networkId]\nexport const getByron = (networkId: NetworkId): IByron => GenesisStore[networkId].byron\nexport const getShelley = (networkId: NetworkId): IShelley => GenesisStore[networkId].shelley\nexport const getNetworkMagic = (networkId: NetworkId): number => GenesisStore[networkId].shelley.networkMagic\nexport const getEpochLength = (networkId: NetworkId): number => GenesisStore[networkId].shelley.epochLength\nexport const getNumEpochBlocks= (networkId: NetworkId): number => getEpochLength(networkId) * GenesisStore[networkId].shelley.activeSlotsCoeff\n\nconst getCommonData = (networkId: NetworkId): any => {\n\n const byron = getByron(networkId)\n\n const currentTimeSec = Math.floor(now() / 1000)\n const shelleyTransEpoch = networkShelleyTransitionEpoch[networkId]\n const byronEpochLength = byron.protocolConsts.k * 10\n const byronSlots = shelleyTransEpoch * byronEpochLength\n const byronSlotLength = byron.blockVersionData.slotDuration\n const byronEndTime = byron.startTime + Math.floor((shelleyTransEpoch * byronEpochLength * parseInt(byronSlotLength)) / 1000)\n\n return {\n currentTimeSec,\n shelleyTransEpoch,\n byronEpochLength,\n byronSlots,\n byronSlotLength,\n byronEndTime\n }\n}\n\nexport const getCalculatedChainTip = (networkId: NetworkId): number => {\n\n const byron = getByron(networkId)\n const shelley = getShelley(networkId)\n const common = getCommonData(networkId)\n\n if (common.currentTimeSec < common.byronEndTime) {\n\n return Math.floor(\n (common.currentTimeSec - byron.startTime) * 1000) /\n parseInt(byron.blockVersionData.slotDuration)\n }\n\n return common.byronSlots + Math.floor(\n (common.currentTimeSec - common.byronEndTime) / shelley.slotLength)\n}\n\nexport const getTimestampFromSlot = (networkId: NetworkId, slotNo: number): number => {\n\n const byron = getByron(networkId)\n const shelley = getShelley(networkId)\n const common = getCommonData(networkId)\n\n if (slotNo < common.byronSlots) {\n\n return (byron.startTime * 1000 + (slotNo * parseInt(byron.blockVersionData.slotDuration)))\n }\n\n return (common.byronEndTime + (slotNo - common.byronSlots) * shelley.slotLength) * 1000\n}\n\nexport const getEpochFromSlot = (networkId: NetworkId, slotNo: number): number => {\n\n const byron = getByron(networkId)\n const shelley = getShelley(networkId)\n const common = getCommonData(networkId)\n\n let timeSec = 0\n\n if (slotNo < common.byronSlots) {\n\n timeSec = (byron.startTime + (slotNo * parseInt(byron.blockVersionData.slotDuration)))\n\n } else {\n\n timeSec = (common.byronEndTime + (slotNo - common.byronSlots) * shelley.slotLength)\n }\n\n if (timeSec < common.byronEndTime) {\n\n return Math.floor(\n (((timeSec - byron.startTime) * 1000) /\n parseInt(byron.blockVersionData.slotDuration)\n ) / common.byronEpochLength)\n }\n\n return common.shelleyTransEpoch + Math.floor(\n (timeSec - common.byronEndTime) / shelley.slotLength / shelley.epochLength)\n}\n\nexport const getCalculatedSlotFromBlockTime = (networkId: NetworkId, timestamp: any): number => {\n\n const dateTimeSec = Math.floor((new Date(timestamp)).getTime() / 1000)\n\n const byron = getByron(networkId)\n const shelley = getShelley(networkId)\n const common = getCommonData(networkId)\n\n if (dateTimeSec < common.byronEndTime) {\n\n return Math.floor(\n (dateTimeSec - byron.startTime) * 1000) /\n parseInt(byron.blockVersionData.slotDuration)\n }\n\n return common.byronSlots + Math.floor(\n (dateTimeSec - common.byronEndTime) / shelley.slotLength)\n}\n\nexport const getCalculatedEpochSlot = (networkId: NetworkId): number => {\n\n const shelley = getShelley(networkId)\n const common = getCommonData(networkId)\n\n const tip = getCalculatedChainTip(networkId) - common.byronSlots - (\n (getCalculatedEpoch(networkId) - common.shelleyTransEpoch) * shelley.epochLength)\n\n return Math.floor(tip)\n}\n\nexport const getCalculatedEpoch = (id: NetworkId): number => {\n\n const byron = getByron(id)\n const shelley = getShelley(id)\n\n const common = getCommonData(id)\n\n if (common.currentTimeSec < common.byronEndTime) {\n\n return Math.floor(\n (((common.currentTimeSec - byron.startTime) * 1000) /\n parseInt(byron.blockVersionData.slotDuration)\n ) / common.byronEpochLength)\n }\n\n return common.shelleyTransEpoch + Math.floor(\n (common.currentTimeSec - common.byronEndTime) / shelley.slotLength / shelley.epochLength)\n}\n\nexport const getLastSlotOfEpoch = (id: NetworkId, epochNo: number): number => {\n\n const shelley = getShelley(id)\n\n const common = getCommonData(id)\n\n if (epochNo <= common.shelleyTransEpoch) {\n\n return common.byronEpochLength * epochNo\n }\n\n return (common.byronEpochLength * (common.shelleyTransEpoch - 1)) +\n ((epochNo - common.shelleyTransEpoch + 1) * shelley.epochLength)\n}\n\nexport const getEpochStart = (id: NetworkId, epochNo: number): {\n\n slotNumber: number,\n timestamp: number\n\n} => {\n\n const common = getCommonData(id)\n\n if (epochNo >= common.shelleyTransEpoch) {\n\n const shelley = getShelley(id)\n\n const shelleySlots = (epochNo - common.shelleyTransEpoch) * shelley.epochLength\n\n const slotNumber = common.byronSlots + shelleySlots + 1\n const timestamp = (common.byronEndTime + shelleySlots + 1) * 1000\n\n return { slotNumber, timestamp }\n\n } else {\n\n const byron = getByron(id)\n\n const slotNumber = epochNo * common.byronEpochLength\n const timestamp = (byron.startTime + slotNumber * parseInt(common.byronSlotLength) / 1000) * 1000\n\n return { slotNumber, timestamp }\n }\n}\n\nexport const updateChainTip = (id: NetworkId, chainTip: IChainTip, data: IChainTip): IChainTip => {\n\n const shelley = getShelley(id)\n\n const calcTip = getCalculatedChainTip(id)\n\n chainTip.blockNo = data.blockNo\n chainTip.slotNo = data.slotNo\n\n chainTip.epochNo = data.epochNo\n chainTip.epochSlot = data.epochSlot\n chainTip.epochSlots = shelley.epochLength\n chainTip.epochPercent = parseFloat(((chainTip.epochSlot / chainTip.epochSlots) * 100).toFixed(2))\n chainTip.syncProgress = Math.round((chainTip.slotNo / calcTip) * 10000) / 100\n\n chainTip.onTip = (calcTip - chainTip.slotNo) < 300 // 5 minutes without a block\n\n return chainTip\n}\n\nexport const getDateIdFromSlot = (networkId: NetworkId, slotNo: number, userSelectedTimezone: string): DateId => {\n\n const timeStamp = getTimestampFromSlot(networkId, slotNo)\n\n return getDateIdFromTimestamp(timeStamp, userSelectedTimezone)\n}\n\nexport const getDateIdFromTimestamp = (timeStamp: number, userSelectedTimezone: string): DateId => {\n\n const cacheKey = `${timeStamp}_${userSelectedTimezone}`\n\n const cachedResult = dateIdCache.get(cacheKey)\n\n if (cachedResult) { return cachedResult }\n\n let formatter = formatterCache.get(userSelectedTimezone)\n\n if (!formatter) {\n\n formatter = Intl.DateTimeFormat('de-DE', {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n timeZone: userSelectedTimezone,\n })\n\n formatterCache.set(userSelectedTimezone, formatter)\n }\n\n const date = new Date(timeStamp)\n const dateArray = formatter.formatToParts(date)\n\n const result: DateId = {\n\n year: parseInt(dateArray[4]!.value),\n month: parseInt(dateArray[2]!.value),\n day: parseInt(dateArray[0]!.value),\n timezone: userSelectedTimezone\n }\n\n dateIdCache.set(cacheKey, result)\n\n return result\n}\n\nexport const getSlotFromDateId = (\n networkId: NetworkId,\n dateId: Pick<DateId, 'year' | 'month' | 'day' | 'timezone'>,\n calcEnd: boolean = false\n): number => {\n\n const year = dateId.year // e.g. 2023\n const month = dateId.month - 1 // date months start at 0\n\n let date\n\n if (dateId.day === 0 && dateId.month === 0) {\n\n if (calcEnd) {\n\n // up to 31st Dec 23:59:59, it's slot based, which is 1 slot = 1 second\n date = new Date((new Date(year + 1, 0, 1, 0, 0, 0)).getTime() - 1000)\n\n } else {\n\n // from 1st Jan 00:00:00\n date = new Date((new Date(year, 0, 1, 0, 0, 0)).getTime())\n }\n\n } else if (dateId.day === 0) {\n\n if (calcEnd) {\n\n // up to last day of month 23:59:59, it's slot based, which is 1 slot = 1 second\n date = new Date((new Date(year, month + 1, 1, 0, 0, 0)).getTime() - 1000)\n\n } else {\n\n // from 1st day of month 00:00:00\n date = new Date((new Date(year, month, 1, 0, 0, 0)).getTime())\n }\n\n } else {\n\n if (calcEnd) {\n\n // up to 23:59:59\n date = new Date((new Date(year, month, dateId.day, 0, 0, 0)).getTime() + (86400 - 1) * 1000)\n\n } else {\n\n // from 00:00:00\n date = new Date((new Date(year, month, dateId.day, 0, 0, 0)).getTime())\n }\n }\n\n date = changeTimezone(date, dateId.timezone)\n\n return getCalculatedSlotFromBlockTime(networkId, date.getTime())\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"chain.cjs","names":["GenesisStore","now","networkShelleyTransitionEpoch","changeTimezone"],"sources":["../src/chain.ts"],"sourcesContent":["import {\n changeTimezone,\n now,\n} from '@eternl/tools'\n\nimport { GenesisStore } from './network/GenesisStore'\nimport {\n type IByron,\n type IGenesisStore,\n type IShelley,\n} from './network/IGenesisStore'\nimport { type DateId } from './types/DateId'\nimport { type IChainTip } from './types/IChainTip'\nimport {\n type NetworkId,\n networkShelleyTransitionEpoch,\n} from './types/NetworkId'\n\n// Cache for storing calculated DateId results\nconst dateIdCache = new Map<string, DateId>()\n\n// Cache for Intl.DateTimeFormat instances (these are expensive to create)\nconst formatterCache = new Map<string, Intl.DateTimeFormat>()\n\nexport const getGenesis = (networkId: NetworkId): IGenesisStore => GenesisStore[networkId]\nexport const getByron = (networkId: NetworkId): IByron => GenesisStore[networkId].byron\nexport const getShelley = (networkId: NetworkId): IShelley => GenesisStore[networkId].shelley\nexport const getNetworkMagic = (networkId: NetworkId): number => GenesisStore[networkId].shelley.networkMagic\nexport const getEpochLength = (networkId: NetworkId): number => GenesisStore[networkId].shelley.epochLength\nexport const getNumEpochBlocks= (networkId: NetworkId): number => getEpochLength(networkId) * GenesisStore[networkId].shelley.activeSlotsCoeff\n\nconst getCommonData = (networkId: NetworkId): any => {\n\n const byron = getByron(networkId)\n\n const currentTimeSec = Math.floor(now() / 1000)\n const shelleyTransEpoch = networkShelleyTransitionEpoch[networkId]\n const byronEpochLength = byron.protocolConsts.k * 10\n const byronSlots = shelleyTransEpoch * byronEpochLength\n const byronSlotLength = byron.blockVersionData.slotDuration\n const byronEndTime = byron.startTime + Math.floor((shelleyTransEpoch * byronEpochLength * parseInt(byronSlotLength)) / 1000)\n\n return {\n currentTimeSec,\n shelleyTransEpoch,\n byronEpochLength,\n byronSlots,\n byronSlotLength,\n byronEndTime\n }\n}\n\nexport const getCalculatedChainTip = (networkId: NetworkId): number => {\n\n const byron = getByron(networkId)\n const shelley = getShelley(networkId)\n const common = getCommonData(networkId)\n\n if (common.currentTimeSec < common.byronEndTime) {\n\n return Math.floor(\n (common.currentTimeSec - byron.startTime) * 1000) /\n parseInt(byron.blockVersionData.slotDuration)\n }\n\n return common.byronSlots + Math.floor(\n (common.currentTimeSec - common.byronEndTime) / shelley.slotLength)\n}\n\nexport const getTimestampFromSlot = (networkId: NetworkId, slotNo: number): number => {\n\n const byron = getByron(networkId)\n const shelley = getShelley(networkId)\n const common = getCommonData(networkId)\n\n if (slotNo < common.byronSlots) {\n\n return (byron.startTime * 1000 + (slotNo * parseInt(byron.blockVersionData.slotDuration)))\n }\n\n return (common.byronEndTime + (slotNo - common.byronSlots) * shelley.slotLength) * 1000\n}\n\nexport const getEpochFromSlot = (networkId: NetworkId, slotNo: number): number => {\n\n const shelley = getShelley(networkId)\n const common = getCommonData(networkId)\n\n if (slotNo < common.byronSlots) {\n\n return Math.floor(slotNo / common.byronEpochLength)\n }\n\n return common.shelleyTransEpoch + Math.floor(\n (slotNo - common.byronSlots) / shelley.epochLength)\n}\n\nexport const getCalculatedSlotFromBlockTime = (networkId: NetworkId, timestamp: any): number => {\n\n const dateTimeSec = Math.floor((new Date(timestamp)).getTime() / 1000)\n\n const byron = getByron(networkId)\n const shelley = getShelley(networkId)\n const common = getCommonData(networkId)\n\n if (dateTimeSec < common.byronEndTime) {\n\n return Math.floor(\n (dateTimeSec - byron.startTime) * 1000) /\n parseInt(byron.blockVersionData.slotDuration)\n }\n\n return common.byronSlots + Math.floor(\n (dateTimeSec - common.byronEndTime) / shelley.slotLength)\n}\n\nexport const getCalculatedEpochSlot = (networkId: NetworkId): number => {\n\n const shelley = getShelley(networkId)\n const common = getCommonData(networkId)\n\n const tip = getCalculatedChainTip(networkId) - common.byronSlots - (\n (getCalculatedEpoch(networkId) - common.shelleyTransEpoch) * shelley.epochLength)\n\n return Math.floor(tip)\n}\n\nexport const getCalculatedEpoch = (id: NetworkId): number => {\n\n const byron = getByron(id)\n const shelley = getShelley(id)\n\n const common = getCommonData(id)\n\n if (common.currentTimeSec < common.byronEndTime) {\n\n return Math.floor(\n (((common.currentTimeSec - byron.startTime) * 1000) /\n parseInt(byron.blockVersionData.slotDuration)\n ) / common.byronEpochLength)\n }\n\n return common.shelleyTransEpoch + Math.floor(\n (common.currentTimeSec - common.byronEndTime) / shelley.slotLength / shelley.epochLength)\n}\n\nexport const getLastSlotOfEpoch = (id: NetworkId, epochNo: number): number => {\n\n const shelley = getShelley(id)\n\n const common = getCommonData(id)\n\n if (epochNo <= common.shelleyTransEpoch) {\n\n return common.byronEpochLength * epochNo\n }\n\n return (common.byronEpochLength * (common.shelleyTransEpoch - 1)) +\n ((epochNo - common.shelleyTransEpoch + 1) * shelley.epochLength)\n}\n\nexport const getEpochStart = (id: NetworkId, epochNo: number): {\n\n slotNumber: number,\n timestamp: number\n\n} => {\n\n const common = getCommonData(id)\n\n if (epochNo >= common.shelleyTransEpoch) {\n\n const shelley = getShelley(id)\n\n const shelleySlots = (epochNo - common.shelleyTransEpoch) * shelley.epochLength\n\n const slotNumber = common.byronSlots + shelleySlots + 1\n const timestamp = (common.byronEndTime + shelleySlots + 1) * 1000\n\n return { slotNumber, timestamp }\n\n } else {\n\n const byron = getByron(id)\n\n const slotNumber = epochNo * common.byronEpochLength\n const timestamp = (byron.startTime + slotNumber * parseInt(common.byronSlotLength) / 1000) * 1000\n\n return { slotNumber, timestamp }\n }\n}\n\nexport const updateChainTip = (id: NetworkId, chainTip: IChainTip, data: IChainTip): IChainTip => {\n\n const shelley = getShelley(id)\n\n const calcTip = getCalculatedChainTip(id)\n\n chainTip.blockNo = data.blockNo\n chainTip.slotNo = data.slotNo\n\n chainTip.epochNo = data.epochNo\n chainTip.epochSlot = data.epochSlot\n chainTip.epochSlots = shelley.epochLength\n chainTip.epochPercent = parseFloat(((chainTip.epochSlot / chainTip.epochSlots) * 100).toFixed(2))\n chainTip.syncProgress = Math.round((chainTip.slotNo / calcTip) * 10000) / 100\n\n chainTip.onTip = (calcTip - chainTip.slotNo) < 300 // 5 minutes without a block\n\n return chainTip\n}\n\nexport const getDateIdFromSlot = (networkId: NetworkId, slotNo: number, userSelectedTimezone: string): DateId => {\n\n const timeStamp = getTimestampFromSlot(networkId, slotNo)\n\n return getDateIdFromTimestamp(timeStamp, userSelectedTimezone)\n}\n\nexport const getDateIdFromTimestamp = (timeStamp: number, userSelectedTimezone: string): DateId => {\n\n const cacheKey = `${timeStamp}_${userSelectedTimezone}`\n\n const cachedResult = dateIdCache.get(cacheKey)\n\n if (cachedResult) { return cachedResult }\n\n let formatter = formatterCache.get(userSelectedTimezone)\n\n if (!formatter) {\n\n formatter = Intl.DateTimeFormat('de-DE', {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n timeZone: userSelectedTimezone,\n })\n\n formatterCache.set(userSelectedTimezone, formatter)\n }\n\n const date = new Date(timeStamp)\n const dateArray = formatter.formatToParts(date)\n\n const result: DateId = {\n\n year: parseInt(dateArray[4]!.value),\n month: parseInt(dateArray[2]!.value),\n day: parseInt(dateArray[0]!.value),\n timezone: userSelectedTimezone\n }\n\n dateIdCache.set(cacheKey, result)\n\n return result\n}\n\nexport const getSlotFromDateId = (\n networkId: NetworkId,\n dateId: Pick<DateId, 'year' | 'month' | 'day' | 'timezone'>,\n calcEnd: boolean = false\n): number => {\n\n const year = dateId.year // e.g. 2023\n const month = dateId.month - 1 // date months start at 0\n\n let date\n\n if (dateId.day === 0 && dateId.month === 0) {\n\n if (calcEnd) {\n\n // up to 31st Dec 23:59:59, it's slot based, which is 1 slot = 1 second\n date = new Date((new Date(year + 1, 0, 1, 0, 0, 0)).getTime() - 1000)\n\n } else {\n\n // from 1st Jan 00:00:00\n date = new Date((new Date(year, 0, 1, 0, 0, 0)).getTime())\n }\n\n } else if (dateId.day === 0) {\n\n if (calcEnd) {\n\n // up to last day of month 23:59:59, it's slot based, which is 1 slot = 1 second\n date = new Date((new Date(year, month + 1, 1, 0, 0, 0)).getTime() - 1000)\n\n } else {\n\n // from 1st day of month 00:00:00\n date = new Date((new Date(year, month, 1, 0, 0, 0)).getTime())\n }\n\n } else {\n\n if (calcEnd) {\n\n // up to 23:59:59\n date = new Date((new Date(year, month, dateId.day, 0, 0, 0)).getTime() + (86400 - 1) * 1000)\n\n } else {\n\n // from 00:00:00\n date = new Date((new Date(year, month, dateId.day, 0, 0, 0)).getTime())\n }\n }\n\n date = changeTimezone(date, dateId.timezone)\n\n return getCalculatedSlotFromBlockTime(networkId, date.getTime())\n}\n"],"mappings":"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"}
package/dist/chain.d.cts CHANGED
@@ -1,2 +1,2 @@
1
- import { _ as getTimestampFromSlot, a as getCalculatedSlotFromBlockTime, c as getEpochFromSlot, d as getGenesis, f as getLastSlotOfEpoch, g as getSlotFromDateId, h as getShelley, i as getCalculatedEpochSlot, l as getEpochLength, m as getNumEpochBlocks, n as getCalculatedChainTip, o as getDateIdFromSlot, p as getNetworkMagic, r as getCalculatedEpoch, s as getDateIdFromTimestamp, t as getByron, u as getEpochStart, v as updateChainTip } from "./chain-DbsXl5Uh.cjs";
1
+ import { _ as getTimestampFromSlot, a as getCalculatedSlotFromBlockTime, c as getEpochFromSlot, d as getGenesis, f as getLastSlotOfEpoch, g as getSlotFromDateId, h as getShelley, i as getCalculatedEpochSlot, l as getEpochLength, m as getNumEpochBlocks, n as getCalculatedChainTip, o as getDateIdFromSlot, p as getNetworkMagic, r as getCalculatedEpoch, s as getDateIdFromTimestamp, t as getByron, u as getEpochStart, v as updateChainTip } from "./chain-TJS85jZZ.cjs";
2
2
  export { getByron, getCalculatedChainTip, getCalculatedEpoch, getCalculatedEpochSlot, getCalculatedSlotFromBlockTime, getDateIdFromSlot, getDateIdFromTimestamp, getEpochFromSlot, getEpochLength, getEpochStart, getGenesis, getLastSlotOfEpoch, getNetworkMagic, getNumEpochBlocks, getShelley, getSlotFromDateId, getTimestampFromSlot, updateChainTip };
package/dist/chain.d.mts CHANGED
@@ -1,2 +1,2 @@
1
- import { _ as getTimestampFromSlot, a as getCalculatedSlotFromBlockTime, c as getEpochFromSlot, d as getGenesis, f as getLastSlotOfEpoch, g as getSlotFromDateId, h as getShelley, i as getCalculatedEpochSlot, l as getEpochLength, m as getNumEpochBlocks, n as getCalculatedChainTip, o as getDateIdFromSlot, p as getNetworkMagic, r as getCalculatedEpoch, s as getDateIdFromTimestamp, t as getByron, u as getEpochStart, v as updateChainTip } from "./chain-DRRhGMxp.mjs";
1
+ import { _ as getTimestampFromSlot, a as getCalculatedSlotFromBlockTime, c as getEpochFromSlot, d as getGenesis, f as getLastSlotOfEpoch, g as getSlotFromDateId, h as getShelley, i as getCalculatedEpochSlot, l as getEpochLength, m as getNumEpochBlocks, n as getCalculatedChainTip, o as getDateIdFromSlot, p as getNetworkMagic, r as getCalculatedEpoch, s as getDateIdFromTimestamp, t as getByron, u as getEpochStart, v as updateChainTip } from "./chain-0Mtrt2zw.mjs";
2
2
  export { getByron, getCalculatedChainTip, getCalculatedEpoch, getCalculatedEpochSlot, getCalculatedSlotFromBlockTime, getDateIdFromSlot, getDateIdFromTimestamp, getEpochFromSlot, getEpochLength, getEpochStart, getGenesis, getLastSlotOfEpoch, getNetworkMagic, getNumEpochBlocks, getShelley, getSlotFromDateId, getTimestampFromSlot, updateChainTip };
package/dist/chain.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { t as GenesisStore } from "./GenesisStore-CqCs2Yin.mjs";
1
+ import { t as GenesisStore } from "./GenesisStore-BZQk-5ZY.mjs";
2
2
  import { networkShelleyTransitionEpoch } from "./types/NetworkId.mjs";
3
3
  import { changeTimezone, now } from "@eternl/tools";
4
4
  //#region src/chain.ts
@@ -41,14 +41,10 @@ const getTimestampFromSlot = (networkId, slotNo) => {
41
41
  return (common.byronEndTime + (slotNo - common.byronSlots) * shelley.slotLength) * 1e3;
42
42
  };
43
43
  const getEpochFromSlot = (networkId, slotNo) => {
44
- const byron = getByron(networkId);
45
44
  const shelley = getShelley(networkId);
46
45
  const common = getCommonData(networkId);
47
- let timeSec = 0;
48
- if (slotNo < common.byronSlots) timeSec = byron.startTime + slotNo * parseInt(byron.blockVersionData.slotDuration);
49
- else timeSec = common.byronEndTime + (slotNo - common.byronSlots) * shelley.slotLength;
50
- if (timeSec < common.byronEndTime) return Math.floor((timeSec - byron.startTime) * 1e3 / parseInt(byron.blockVersionData.slotDuration) / common.byronEpochLength);
51
- return common.shelleyTransEpoch + Math.floor((timeSec - common.byronEndTime) / shelley.slotLength / shelley.epochLength);
46
+ if (slotNo < common.byronSlots) return Math.floor(slotNo / common.byronEpochLength);
47
+ return common.shelleyTransEpoch + Math.floor((slotNo - common.byronSlots) / shelley.epochLength);
52
48
  };
53
49
  const getCalculatedSlotFromBlockTime = (networkId, timestamp) => {
54
50
  const dateTimeSec = Math.floor(new Date(timestamp).getTime() / 1e3);
@@ -1 +1 @@
1
- {"version":3,"file":"chain.mjs","names":[],"sources":["../src/chain.ts"],"sourcesContent":["import {\n changeTimezone,\n now,\n} from '@eternl/tools'\n\nimport { GenesisStore } from './network/GenesisStore'\nimport {\n type IByron,\n type IGenesisStore,\n type IShelley,\n} from './network/IGenesisStore'\nimport { type DateId } from './types/DateId'\nimport { type IChainTip } from './types/IChainTip'\nimport {\n type NetworkId,\n networkShelleyTransitionEpoch,\n} from './types/NetworkId'\n\n// Cache for storing calculated DateId results\nconst dateIdCache = new Map<string, DateId>()\n\n// Cache for Intl.DateTimeFormat instances (these are expensive to create)\nconst formatterCache = new Map<string, Intl.DateTimeFormat>()\n\nexport const getGenesis = (networkId: NetworkId): IGenesisStore => GenesisStore[networkId]\nexport const getByron = (networkId: NetworkId): IByron => GenesisStore[networkId].byron\nexport const getShelley = (networkId: NetworkId): IShelley => GenesisStore[networkId].shelley\nexport const getNetworkMagic = (networkId: NetworkId): number => GenesisStore[networkId].shelley.networkMagic\nexport const getEpochLength = (networkId: NetworkId): number => GenesisStore[networkId].shelley.epochLength\nexport const getNumEpochBlocks= (networkId: NetworkId): number => getEpochLength(networkId) * GenesisStore[networkId].shelley.activeSlotsCoeff\n\nconst getCommonData = (networkId: NetworkId): any => {\n\n const byron = getByron(networkId)\n\n const currentTimeSec = Math.floor(now() / 1000)\n const shelleyTransEpoch = networkShelleyTransitionEpoch[networkId]\n const byronEpochLength = byron.protocolConsts.k * 10\n const byronSlots = shelleyTransEpoch * byronEpochLength\n const byronSlotLength = byron.blockVersionData.slotDuration\n const byronEndTime = byron.startTime + Math.floor((shelleyTransEpoch * byronEpochLength * parseInt(byronSlotLength)) / 1000)\n\n return {\n currentTimeSec,\n shelleyTransEpoch,\n byronEpochLength,\n byronSlots,\n byronSlotLength,\n byronEndTime\n }\n}\n\nexport const getCalculatedChainTip = (networkId: NetworkId): number => {\n\n const byron = getByron(networkId)\n const shelley = getShelley(networkId)\n const common = getCommonData(networkId)\n\n if (common.currentTimeSec < common.byronEndTime) {\n\n return Math.floor(\n (common.currentTimeSec - byron.startTime) * 1000) /\n parseInt(byron.blockVersionData.slotDuration)\n }\n\n return common.byronSlots + Math.floor(\n (common.currentTimeSec - common.byronEndTime) / shelley.slotLength)\n}\n\nexport const getTimestampFromSlot = (networkId: NetworkId, slotNo: number): number => {\n\n const byron = getByron(networkId)\n const shelley = getShelley(networkId)\n const common = getCommonData(networkId)\n\n if (slotNo < common.byronSlots) {\n\n return (byron.startTime * 1000 + (slotNo * parseInt(byron.blockVersionData.slotDuration)))\n }\n\n return (common.byronEndTime + (slotNo - common.byronSlots) * shelley.slotLength) * 1000\n}\n\nexport const getEpochFromSlot = (networkId: NetworkId, slotNo: number): number => {\n\n const byron = getByron(networkId)\n const shelley = getShelley(networkId)\n const common = getCommonData(networkId)\n\n let timeSec = 0\n\n if (slotNo < common.byronSlots) {\n\n timeSec = (byron.startTime + (slotNo * parseInt(byron.blockVersionData.slotDuration)))\n\n } else {\n\n timeSec = (common.byronEndTime + (slotNo - common.byronSlots) * shelley.slotLength)\n }\n\n if (timeSec < common.byronEndTime) {\n\n return Math.floor(\n (((timeSec - byron.startTime) * 1000) /\n parseInt(byron.blockVersionData.slotDuration)\n ) / common.byronEpochLength)\n }\n\n return common.shelleyTransEpoch + Math.floor(\n (timeSec - common.byronEndTime) / shelley.slotLength / shelley.epochLength)\n}\n\nexport const getCalculatedSlotFromBlockTime = (networkId: NetworkId, timestamp: any): number => {\n\n const dateTimeSec = Math.floor((new Date(timestamp)).getTime() / 1000)\n\n const byron = getByron(networkId)\n const shelley = getShelley(networkId)\n const common = getCommonData(networkId)\n\n if (dateTimeSec < common.byronEndTime) {\n\n return Math.floor(\n (dateTimeSec - byron.startTime) * 1000) /\n parseInt(byron.blockVersionData.slotDuration)\n }\n\n return common.byronSlots + Math.floor(\n (dateTimeSec - common.byronEndTime) / shelley.slotLength)\n}\n\nexport const getCalculatedEpochSlot = (networkId: NetworkId): number => {\n\n const shelley = getShelley(networkId)\n const common = getCommonData(networkId)\n\n const tip = getCalculatedChainTip(networkId) - common.byronSlots - (\n (getCalculatedEpoch(networkId) - common.shelleyTransEpoch) * shelley.epochLength)\n\n return Math.floor(tip)\n}\n\nexport const getCalculatedEpoch = (id: NetworkId): number => {\n\n const byron = getByron(id)\n const shelley = getShelley(id)\n\n const common = getCommonData(id)\n\n if (common.currentTimeSec < common.byronEndTime) {\n\n return Math.floor(\n (((common.currentTimeSec - byron.startTime) * 1000) /\n parseInt(byron.blockVersionData.slotDuration)\n ) / common.byronEpochLength)\n }\n\n return common.shelleyTransEpoch + Math.floor(\n (common.currentTimeSec - common.byronEndTime) / shelley.slotLength / shelley.epochLength)\n}\n\nexport const getLastSlotOfEpoch = (id: NetworkId, epochNo: number): number => {\n\n const shelley = getShelley(id)\n\n const common = getCommonData(id)\n\n if (epochNo <= common.shelleyTransEpoch) {\n\n return common.byronEpochLength * epochNo\n }\n\n return (common.byronEpochLength * (common.shelleyTransEpoch - 1)) +\n ((epochNo - common.shelleyTransEpoch + 1) * shelley.epochLength)\n}\n\nexport const getEpochStart = (id: NetworkId, epochNo: number): {\n\n slotNumber: number,\n timestamp: number\n\n} => {\n\n const common = getCommonData(id)\n\n if (epochNo >= common.shelleyTransEpoch) {\n\n const shelley = getShelley(id)\n\n const shelleySlots = (epochNo - common.shelleyTransEpoch) * shelley.epochLength\n\n const slotNumber = common.byronSlots + shelleySlots + 1\n const timestamp = (common.byronEndTime + shelleySlots + 1) * 1000\n\n return { slotNumber, timestamp }\n\n } else {\n\n const byron = getByron(id)\n\n const slotNumber = epochNo * common.byronEpochLength\n const timestamp = (byron.startTime + slotNumber * parseInt(common.byronSlotLength) / 1000) * 1000\n\n return { slotNumber, timestamp }\n }\n}\n\nexport const updateChainTip = (id: NetworkId, chainTip: IChainTip, data: IChainTip): IChainTip => {\n\n const shelley = getShelley(id)\n\n const calcTip = getCalculatedChainTip(id)\n\n chainTip.blockNo = data.blockNo\n chainTip.slotNo = data.slotNo\n\n chainTip.epochNo = data.epochNo\n chainTip.epochSlot = data.epochSlot\n chainTip.epochSlots = shelley.epochLength\n chainTip.epochPercent = parseFloat(((chainTip.epochSlot / chainTip.epochSlots) * 100).toFixed(2))\n chainTip.syncProgress = Math.round((chainTip.slotNo / calcTip) * 10000) / 100\n\n chainTip.onTip = (calcTip - chainTip.slotNo) < 300 // 5 minutes without a block\n\n return chainTip\n}\n\nexport const getDateIdFromSlot = (networkId: NetworkId, slotNo: number, userSelectedTimezone: string): DateId => {\n\n const timeStamp = getTimestampFromSlot(networkId, slotNo)\n\n return getDateIdFromTimestamp(timeStamp, userSelectedTimezone)\n}\n\nexport const getDateIdFromTimestamp = (timeStamp: number, userSelectedTimezone: string): DateId => {\n\n const cacheKey = `${timeStamp}_${userSelectedTimezone}`\n\n const cachedResult = dateIdCache.get(cacheKey)\n\n if (cachedResult) { return cachedResult }\n\n let formatter = formatterCache.get(userSelectedTimezone)\n\n if (!formatter) {\n\n formatter = Intl.DateTimeFormat('de-DE', {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n timeZone: userSelectedTimezone,\n })\n\n formatterCache.set(userSelectedTimezone, formatter)\n }\n\n const date = new Date(timeStamp)\n const dateArray = formatter.formatToParts(date)\n\n const result: DateId = {\n\n year: parseInt(dateArray[4]!.value),\n month: parseInt(dateArray[2]!.value),\n day: parseInt(dateArray[0]!.value),\n timezone: userSelectedTimezone\n }\n\n dateIdCache.set(cacheKey, result)\n\n return result\n}\n\nexport const getSlotFromDateId = (\n networkId: NetworkId,\n dateId: Pick<DateId, 'year' | 'month' | 'day' | 'timezone'>,\n calcEnd: boolean = false\n): number => {\n\n const year = dateId.year // e.g. 2023\n const month = dateId.month - 1 // date months start at 0\n\n let date\n\n if (dateId.day === 0 && dateId.month === 0) {\n\n if (calcEnd) {\n\n // up to 31st Dec 23:59:59, it's slot based, which is 1 slot = 1 second\n date = new Date((new Date(year + 1, 0, 1, 0, 0, 0)).getTime() - 1000)\n\n } else {\n\n // from 1st Jan 00:00:00\n date = new Date((new Date(year, 0, 1, 0, 0, 0)).getTime())\n }\n\n } else if (dateId.day === 0) {\n\n if (calcEnd) {\n\n // up to last day of month 23:59:59, it's slot based, which is 1 slot = 1 second\n date = new Date((new Date(year, month + 1, 1, 0, 0, 0)).getTime() - 1000)\n\n } else {\n\n // from 1st day of month 00:00:00\n date = new Date((new Date(year, month, 1, 0, 0, 0)).getTime())\n }\n\n } else {\n\n if (calcEnd) {\n\n // up to 23:59:59\n date = new Date((new Date(year, month, dateId.day, 0, 0, 0)).getTime() + (86400 - 1) * 1000)\n\n } else {\n\n // from 00:00:00\n date = new Date((new Date(year, month, dateId.day, 0, 0, 0)).getTime())\n }\n }\n\n date = changeTimezone(date, dateId.timezone)\n\n return getCalculatedSlotFromBlockTime(networkId, date.getTime())\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"chain.mjs","names":[],"sources":["../src/chain.ts"],"sourcesContent":["import {\n changeTimezone,\n now,\n} from '@eternl/tools'\n\nimport { GenesisStore } from './network/GenesisStore'\nimport {\n type IByron,\n type IGenesisStore,\n type IShelley,\n} from './network/IGenesisStore'\nimport { type DateId } from './types/DateId'\nimport { type IChainTip } from './types/IChainTip'\nimport {\n type NetworkId,\n networkShelleyTransitionEpoch,\n} from './types/NetworkId'\n\n// Cache for storing calculated DateId results\nconst dateIdCache = new Map<string, DateId>()\n\n// Cache for Intl.DateTimeFormat instances (these are expensive to create)\nconst formatterCache = new Map<string, Intl.DateTimeFormat>()\n\nexport const getGenesis = (networkId: NetworkId): IGenesisStore => GenesisStore[networkId]\nexport const getByron = (networkId: NetworkId): IByron => GenesisStore[networkId].byron\nexport const getShelley = (networkId: NetworkId): IShelley => GenesisStore[networkId].shelley\nexport const getNetworkMagic = (networkId: NetworkId): number => GenesisStore[networkId].shelley.networkMagic\nexport const getEpochLength = (networkId: NetworkId): number => GenesisStore[networkId].shelley.epochLength\nexport const getNumEpochBlocks= (networkId: NetworkId): number => getEpochLength(networkId) * GenesisStore[networkId].shelley.activeSlotsCoeff\n\nconst getCommonData = (networkId: NetworkId): any => {\n\n const byron = getByron(networkId)\n\n const currentTimeSec = Math.floor(now() / 1000)\n const shelleyTransEpoch = networkShelleyTransitionEpoch[networkId]\n const byronEpochLength = byron.protocolConsts.k * 10\n const byronSlots = shelleyTransEpoch * byronEpochLength\n const byronSlotLength = byron.blockVersionData.slotDuration\n const byronEndTime = byron.startTime + Math.floor((shelleyTransEpoch * byronEpochLength * parseInt(byronSlotLength)) / 1000)\n\n return {\n currentTimeSec,\n shelleyTransEpoch,\n byronEpochLength,\n byronSlots,\n byronSlotLength,\n byronEndTime\n }\n}\n\nexport const getCalculatedChainTip = (networkId: NetworkId): number => {\n\n const byron = getByron(networkId)\n const shelley = getShelley(networkId)\n const common = getCommonData(networkId)\n\n if (common.currentTimeSec < common.byronEndTime) {\n\n return Math.floor(\n (common.currentTimeSec - byron.startTime) * 1000) /\n parseInt(byron.blockVersionData.slotDuration)\n }\n\n return common.byronSlots + Math.floor(\n (common.currentTimeSec - common.byronEndTime) / shelley.slotLength)\n}\n\nexport const getTimestampFromSlot = (networkId: NetworkId, slotNo: number): number => {\n\n const byron = getByron(networkId)\n const shelley = getShelley(networkId)\n const common = getCommonData(networkId)\n\n if (slotNo < common.byronSlots) {\n\n return (byron.startTime * 1000 + (slotNo * parseInt(byron.blockVersionData.slotDuration)))\n }\n\n return (common.byronEndTime + (slotNo - common.byronSlots) * shelley.slotLength) * 1000\n}\n\nexport const getEpochFromSlot = (networkId: NetworkId, slotNo: number): number => {\n\n const shelley = getShelley(networkId)\n const common = getCommonData(networkId)\n\n if (slotNo < common.byronSlots) {\n\n return Math.floor(slotNo / common.byronEpochLength)\n }\n\n return common.shelleyTransEpoch + Math.floor(\n (slotNo - common.byronSlots) / shelley.epochLength)\n}\n\nexport const getCalculatedSlotFromBlockTime = (networkId: NetworkId, timestamp: any): number => {\n\n const dateTimeSec = Math.floor((new Date(timestamp)).getTime() / 1000)\n\n const byron = getByron(networkId)\n const shelley = getShelley(networkId)\n const common = getCommonData(networkId)\n\n if (dateTimeSec < common.byronEndTime) {\n\n return Math.floor(\n (dateTimeSec - byron.startTime) * 1000) /\n parseInt(byron.blockVersionData.slotDuration)\n }\n\n return common.byronSlots + Math.floor(\n (dateTimeSec - common.byronEndTime) / shelley.slotLength)\n}\n\nexport const getCalculatedEpochSlot = (networkId: NetworkId): number => {\n\n const shelley = getShelley(networkId)\n const common = getCommonData(networkId)\n\n const tip = getCalculatedChainTip(networkId) - common.byronSlots - (\n (getCalculatedEpoch(networkId) - common.shelleyTransEpoch) * shelley.epochLength)\n\n return Math.floor(tip)\n}\n\nexport const getCalculatedEpoch = (id: NetworkId): number => {\n\n const byron = getByron(id)\n const shelley = getShelley(id)\n\n const common = getCommonData(id)\n\n if (common.currentTimeSec < common.byronEndTime) {\n\n return Math.floor(\n (((common.currentTimeSec - byron.startTime) * 1000) /\n parseInt(byron.blockVersionData.slotDuration)\n ) / common.byronEpochLength)\n }\n\n return common.shelleyTransEpoch + Math.floor(\n (common.currentTimeSec - common.byronEndTime) / shelley.slotLength / shelley.epochLength)\n}\n\nexport const getLastSlotOfEpoch = (id: NetworkId, epochNo: number): number => {\n\n const shelley = getShelley(id)\n\n const common = getCommonData(id)\n\n if (epochNo <= common.shelleyTransEpoch) {\n\n return common.byronEpochLength * epochNo\n }\n\n return (common.byronEpochLength * (common.shelleyTransEpoch - 1)) +\n ((epochNo - common.shelleyTransEpoch + 1) * shelley.epochLength)\n}\n\nexport const getEpochStart = (id: NetworkId, epochNo: number): {\n\n slotNumber: number,\n timestamp: number\n\n} => {\n\n const common = getCommonData(id)\n\n if (epochNo >= common.shelleyTransEpoch) {\n\n const shelley = getShelley(id)\n\n const shelleySlots = (epochNo - common.shelleyTransEpoch) * shelley.epochLength\n\n const slotNumber = common.byronSlots + shelleySlots + 1\n const timestamp = (common.byronEndTime + shelleySlots + 1) * 1000\n\n return { slotNumber, timestamp }\n\n } else {\n\n const byron = getByron(id)\n\n const slotNumber = epochNo * common.byronEpochLength\n const timestamp = (byron.startTime + slotNumber * parseInt(common.byronSlotLength) / 1000) * 1000\n\n return { slotNumber, timestamp }\n }\n}\n\nexport const updateChainTip = (id: NetworkId, chainTip: IChainTip, data: IChainTip): IChainTip => {\n\n const shelley = getShelley(id)\n\n const calcTip = getCalculatedChainTip(id)\n\n chainTip.blockNo = data.blockNo\n chainTip.slotNo = data.slotNo\n\n chainTip.epochNo = data.epochNo\n chainTip.epochSlot = data.epochSlot\n chainTip.epochSlots = shelley.epochLength\n chainTip.epochPercent = parseFloat(((chainTip.epochSlot / chainTip.epochSlots) * 100).toFixed(2))\n chainTip.syncProgress = Math.round((chainTip.slotNo / calcTip) * 10000) / 100\n\n chainTip.onTip = (calcTip - chainTip.slotNo) < 300 // 5 minutes without a block\n\n return chainTip\n}\n\nexport const getDateIdFromSlot = (networkId: NetworkId, slotNo: number, userSelectedTimezone: string): DateId => {\n\n const timeStamp = getTimestampFromSlot(networkId, slotNo)\n\n return getDateIdFromTimestamp(timeStamp, userSelectedTimezone)\n}\n\nexport const getDateIdFromTimestamp = (timeStamp: number, userSelectedTimezone: string): DateId => {\n\n const cacheKey = `${timeStamp}_${userSelectedTimezone}`\n\n const cachedResult = dateIdCache.get(cacheKey)\n\n if (cachedResult) { return cachedResult }\n\n let formatter = formatterCache.get(userSelectedTimezone)\n\n if (!formatter) {\n\n formatter = Intl.DateTimeFormat('de-DE', {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n timeZone: userSelectedTimezone,\n })\n\n formatterCache.set(userSelectedTimezone, formatter)\n }\n\n const date = new Date(timeStamp)\n const dateArray = formatter.formatToParts(date)\n\n const result: DateId = {\n\n year: parseInt(dateArray[4]!.value),\n month: parseInt(dateArray[2]!.value),\n day: parseInt(dateArray[0]!.value),\n timezone: userSelectedTimezone\n }\n\n dateIdCache.set(cacheKey, result)\n\n return result\n}\n\nexport const getSlotFromDateId = (\n networkId: NetworkId,\n dateId: Pick<DateId, 'year' | 'month' | 'day' | 'timezone'>,\n calcEnd: boolean = false\n): number => {\n\n const year = dateId.year // e.g. 2023\n const month = dateId.month - 1 // date months start at 0\n\n let date\n\n if (dateId.day === 0 && dateId.month === 0) {\n\n if (calcEnd) {\n\n // up to 31st Dec 23:59:59, it's slot based, which is 1 slot = 1 second\n date = new Date((new Date(year + 1, 0, 1, 0, 0, 0)).getTime() - 1000)\n\n } else {\n\n // from 1st Jan 00:00:00\n date = new Date((new Date(year, 0, 1, 0, 0, 0)).getTime())\n }\n\n } else if (dateId.day === 0) {\n\n if (calcEnd) {\n\n // up to last day of month 23:59:59, it's slot based, which is 1 slot = 1 second\n date = new Date((new Date(year, month + 1, 1, 0, 0, 0)).getTime() - 1000)\n\n } else {\n\n // from 1st day of month 00:00:00\n date = new Date((new Date(year, month, 1, 0, 0, 0)).getTime())\n }\n\n } else {\n\n if (calcEnd) {\n\n // up to 23:59:59\n date = new Date((new Date(year, month, dateId.day, 0, 0, 0)).getTime() + (86400 - 1) * 1000)\n\n } else {\n\n // from 00:00:00\n date = new Date((new Date(year, month, dateId.day, 0, 0, 0)).getTime())\n }\n }\n\n date = changeTimezone(date, dateId.timezone)\n\n return getCalculatedSlotFromBlockTime(networkId, date.getTime())\n}\n"],"mappings":"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"}
package/dist/index.cjs CHANGED
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_GenesisStore = require("./GenesisStore-DGnbeDqM.cjs");
2
+ const require_GenesisStore = require("./GenesisStore-r52jj7kC.cjs");
3
3
  const require_types_NetworkId = require("./types/NetworkId.cjs");
4
4
  const require_chain = require("./chain.cjs");
5
5
  require("./network/IGenesisStore.cjs");
@@ -31,6 +31,7 @@ exports.getShelley = require_chain.getShelley;
31
31
  exports.getSlotFromDateId = require_chain.getSlotFromDateId;
32
32
  exports.getTimestampFromSlot = require_chain.getTimestampFromSlot;
33
33
  exports.isCustomNetwork = require_types_NetworkId.isCustomNetwork;
34
+ exports.isDevelopmentNetwork = require_types_NetworkId.isDevelopmentNetwork;
34
35
  exports.isSupportedNetworkId = require_types_NetworkId.isSupportedNetworkId;
35
36
  exports.isTestnetNetwork = require_types_NetworkId.isTestnetNetwork;
36
37
  exports.networkAddressPrefix = require_types_NetworkId.networkAddressPrefix;
package/dist/index.d.cts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { a as IShelley, i as IProtocolConsts, n as IByron, r as IGenesisStore, t as IBlockVersionData } from "./IGenesisStore-DsIpICQ8.cjs";
2
2
  import { t as DateId } from "./DateId-DpLkO3y9.cjs";
3
- import { _ as networkStakeAddressPrefix, a as getNetworkDecimals, c as isSupportedNetworkId, d as networkCurrencyCode, f as networkCurrencySymbol, g as networkShelleyTransitionEpoch, h as networkIdx, i as getNetworkCurrencySymbol, l as isTestnetNetwork, m as networkIdList, n as NetworkId, o as getNetworkId, p as networkGroups, r as getNetworkCurrencyCode, s as isCustomNetwork, t as NETWORK_ID, u as networkAddressPrefix } from "./NetworkId-B9JhuswJ.cjs";
4
- import { _ as getTimestampFromSlot, a as getCalculatedSlotFromBlockTime, b as createIChainTip, c as getEpochFromSlot, d as getGenesis, f as getLastSlotOfEpoch, g as getSlotFromDateId, h as getShelley, i as getCalculatedEpochSlot, l as getEpochLength, m as getNumEpochBlocks, n as getCalculatedChainTip, o as getDateIdFromSlot, p as getNetworkMagic, r as getCalculatedEpoch, s as getDateIdFromTimestamp, t as getByron, u as getEpochStart, v as updateChainTip, x as GenesisStore, y as IChainTip } from "./chain-DbsXl5Uh.cjs";
3
+ import { _ as networkShelleyTransitionEpoch, a as getNetworkDecimals, c as isDevelopmentNetwork, d as networkAddressPrefix, f as networkCurrencyCode, g as networkIdx, h as networkIdList, i as getNetworkCurrencySymbol, l as isSupportedNetworkId, m as networkGroups, n as NetworkId, o as getNetworkId, p as networkCurrencySymbol, r as getNetworkCurrencyCode, s as isCustomNetwork, t as NETWORK_ID, u as isTestnetNetwork, v as networkStakeAddressPrefix } from "./NetworkId-BzB9yQuF.cjs";
4
+ import { _ as getTimestampFromSlot, a as getCalculatedSlotFromBlockTime, b as createIChainTip, c as getEpochFromSlot, d as getGenesis, f as getLastSlotOfEpoch, g as getSlotFromDateId, h as getShelley, i as getCalculatedEpochSlot, l as getEpochLength, m as getNumEpochBlocks, n as getCalculatedChainTip, o as getDateIdFromSlot, p as getNetworkMagic, r as getCalculatedEpoch, s as getDateIdFromTimestamp, t as getByron, u as getEpochStart, v as updateChainTip, x as GenesisStore, y as IChainTip } from "./chain-TJS85jZZ.cjs";
5
5
  import { n as IProtocolVersion, t as IEpochParams } from "./IEpochParams-BFNd585A.cjs";
6
- export { DateId, GenesisStore, IBlockVersionData, IByron, IChainTip, IEpochParams, IGenesisStore, IProtocolConsts, IProtocolVersion, IShelley, NETWORK_ID, NetworkId, createIChainTip, getByron, getCalculatedChainTip, getCalculatedEpoch, getCalculatedEpochSlot, getCalculatedSlotFromBlockTime, getDateIdFromSlot, getDateIdFromTimestamp, getEpochFromSlot, getEpochLength, getEpochStart, getGenesis, getLastSlotOfEpoch, getNetworkCurrencyCode, getNetworkCurrencySymbol, getNetworkDecimals, getNetworkId, getNetworkMagic, getNumEpochBlocks, getShelley, getSlotFromDateId, getTimestampFromSlot, isCustomNetwork, isSupportedNetworkId, isTestnetNetwork, networkAddressPrefix, networkCurrencyCode, networkCurrencySymbol, networkGroups, networkIdList, networkIdx, networkShelleyTransitionEpoch, networkStakeAddressPrefix, updateChainTip };
6
+ export { DateId, GenesisStore, IBlockVersionData, IByron, IChainTip, IEpochParams, IGenesisStore, IProtocolConsts, IProtocolVersion, IShelley, NETWORK_ID, NetworkId, createIChainTip, getByron, getCalculatedChainTip, getCalculatedEpoch, getCalculatedEpochSlot, getCalculatedSlotFromBlockTime, getDateIdFromSlot, getDateIdFromTimestamp, getEpochFromSlot, getEpochLength, getEpochStart, getGenesis, getLastSlotOfEpoch, getNetworkCurrencyCode, getNetworkCurrencySymbol, getNetworkDecimals, getNetworkId, getNetworkMagic, getNumEpochBlocks, getShelley, getSlotFromDateId, getTimestampFromSlot, isCustomNetwork, isDevelopmentNetwork, isSupportedNetworkId, isTestnetNetwork, networkAddressPrefix, networkCurrencyCode, networkCurrencySymbol, networkGroups, networkIdList, networkIdx, networkShelleyTransitionEpoch, networkStakeAddressPrefix, updateChainTip };
package/dist/index.d.mts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { a as IShelley, i as IProtocolConsts, n as IByron, r as IGenesisStore, t as IBlockVersionData } from "./IGenesisStore-DsIpICQ8.mjs";
2
2
  import { t as DateId } from "./DateId-DpLkO3y9.mjs";
3
- import { _ as networkStakeAddressPrefix, a as getNetworkDecimals, c as isSupportedNetworkId, d as networkCurrencyCode, f as networkCurrencySymbol, g as networkShelleyTransitionEpoch, h as networkIdx, i as getNetworkCurrencySymbol, l as isTestnetNetwork, m as networkIdList, n as NetworkId, o as getNetworkId, p as networkGroups, r as getNetworkCurrencyCode, s as isCustomNetwork, t as NETWORK_ID, u as networkAddressPrefix } from "./NetworkId-B9JhuswJ.mjs";
4
- import { _ as getTimestampFromSlot, a as getCalculatedSlotFromBlockTime, b as createIChainTip, c as getEpochFromSlot, d as getGenesis, f as getLastSlotOfEpoch, g as getSlotFromDateId, h as getShelley, i as getCalculatedEpochSlot, l as getEpochLength, m as getNumEpochBlocks, n as getCalculatedChainTip, o as getDateIdFromSlot, p as getNetworkMagic, r as getCalculatedEpoch, s as getDateIdFromTimestamp, t as getByron, u as getEpochStart, v as updateChainTip, x as GenesisStore, y as IChainTip } from "./chain-DRRhGMxp.mjs";
3
+ import { _ as networkShelleyTransitionEpoch, a as getNetworkDecimals, c as isDevelopmentNetwork, d as networkAddressPrefix, f as networkCurrencyCode, g as networkIdx, h as networkIdList, i as getNetworkCurrencySymbol, l as isSupportedNetworkId, m as networkGroups, n as NetworkId, o as getNetworkId, p as networkCurrencySymbol, r as getNetworkCurrencyCode, s as isCustomNetwork, t as NETWORK_ID, u as isTestnetNetwork, v as networkStakeAddressPrefix } from "./NetworkId-BzB9yQuF.mjs";
4
+ import { _ as getTimestampFromSlot, a as getCalculatedSlotFromBlockTime, b as createIChainTip, c as getEpochFromSlot, d as getGenesis, f as getLastSlotOfEpoch, g as getSlotFromDateId, h as getShelley, i as getCalculatedEpochSlot, l as getEpochLength, m as getNumEpochBlocks, n as getCalculatedChainTip, o as getDateIdFromSlot, p as getNetworkMagic, r as getCalculatedEpoch, s as getDateIdFromTimestamp, t as getByron, u as getEpochStart, v as updateChainTip, x as GenesisStore, y as IChainTip } from "./chain-0Mtrt2zw.mjs";
5
5
  import { n as IProtocolVersion, t as IEpochParams } from "./IEpochParams-BFNd585A.mjs";
6
- export { DateId, GenesisStore, IBlockVersionData, IByron, IChainTip, IEpochParams, IGenesisStore, IProtocolConsts, IProtocolVersion, IShelley, NETWORK_ID, NetworkId, createIChainTip, getByron, getCalculatedChainTip, getCalculatedEpoch, getCalculatedEpochSlot, getCalculatedSlotFromBlockTime, getDateIdFromSlot, getDateIdFromTimestamp, getEpochFromSlot, getEpochLength, getEpochStart, getGenesis, getLastSlotOfEpoch, getNetworkCurrencyCode, getNetworkCurrencySymbol, getNetworkDecimals, getNetworkId, getNetworkMagic, getNumEpochBlocks, getShelley, getSlotFromDateId, getTimestampFromSlot, isCustomNetwork, isSupportedNetworkId, isTestnetNetwork, networkAddressPrefix, networkCurrencyCode, networkCurrencySymbol, networkGroups, networkIdList, networkIdx, networkShelleyTransitionEpoch, networkStakeAddressPrefix, updateChainTip };
6
+ export { DateId, GenesisStore, IBlockVersionData, IByron, IChainTip, IEpochParams, IGenesisStore, IProtocolConsts, IProtocolVersion, IShelley, NETWORK_ID, NetworkId, createIChainTip, getByron, getCalculatedChainTip, getCalculatedEpoch, getCalculatedEpochSlot, getCalculatedSlotFromBlockTime, getDateIdFromSlot, getDateIdFromTimestamp, getEpochFromSlot, getEpochLength, getEpochStart, getGenesis, getLastSlotOfEpoch, getNetworkCurrencyCode, getNetworkCurrencySymbol, getNetworkDecimals, getNetworkId, getNetworkMagic, getNumEpochBlocks, getShelley, getSlotFromDateId, getTimestampFromSlot, isCustomNetwork, isDevelopmentNetwork, isSupportedNetworkId, isTestnetNetwork, networkAddressPrefix, networkCurrencyCode, networkCurrencySymbol, networkGroups, networkIdList, networkIdx, networkShelleyTransitionEpoch, networkStakeAddressPrefix, updateChainTip };
package/dist/index.mjs CHANGED
@@ -1,8 +1,8 @@
1
- import { t as GenesisStore } from "./GenesisStore-CqCs2Yin.mjs";
2
- import { NETWORK_ID, getNetworkCurrencyCode, getNetworkCurrencySymbol, getNetworkDecimals, getNetworkId, isCustomNetwork, isSupportedNetworkId, isTestnetNetwork, networkAddressPrefix, networkCurrencyCode, networkCurrencySymbol, networkGroups, networkIdList, networkIdx, networkShelleyTransitionEpoch, networkStakeAddressPrefix } from "./types/NetworkId.mjs";
1
+ import { t as GenesisStore } from "./GenesisStore-BZQk-5ZY.mjs";
2
+ import { NETWORK_ID, getNetworkCurrencyCode, getNetworkCurrencySymbol, getNetworkDecimals, getNetworkId, isCustomNetwork, isDevelopmentNetwork, isSupportedNetworkId, isTestnetNetwork, networkAddressPrefix, networkCurrencyCode, networkCurrencySymbol, networkGroups, networkIdList, networkIdx, networkShelleyTransitionEpoch, networkStakeAddressPrefix } from "./types/NetworkId.mjs";
3
3
  import { getByron, getCalculatedChainTip, getCalculatedEpoch, getCalculatedEpochSlot, getCalculatedSlotFromBlockTime, getDateIdFromSlot, getDateIdFromTimestamp, getEpochFromSlot, getEpochLength, getEpochStart, getGenesis, getLastSlotOfEpoch, getNetworkMagic, getNumEpochBlocks, getShelley, getSlotFromDateId, getTimestampFromSlot, updateChainTip } from "./chain.mjs";
4
4
  import "./network/IGenesisStore.mjs";
5
5
  import { createIChainTip } from "./types/IChainTip.mjs";
6
6
  import "./types/IEpochParams.mjs";
7
7
  import "./types/DateId.mjs";
8
- export { GenesisStore, NETWORK_ID, createIChainTip, getByron, getCalculatedChainTip, getCalculatedEpoch, getCalculatedEpochSlot, getCalculatedSlotFromBlockTime, getDateIdFromSlot, getDateIdFromTimestamp, getEpochFromSlot, getEpochLength, getEpochStart, getGenesis, getLastSlotOfEpoch, getNetworkCurrencyCode, getNetworkCurrencySymbol, getNetworkDecimals, getNetworkId, getNetworkMagic, getNumEpochBlocks, getShelley, getSlotFromDateId, getTimestampFromSlot, isCustomNetwork, isSupportedNetworkId, isTestnetNetwork, networkAddressPrefix, networkCurrencyCode, networkCurrencySymbol, networkGroups, networkIdList, networkIdx, networkShelleyTransitionEpoch, networkStakeAddressPrefix, updateChainTip };
8
+ export { GenesisStore, NETWORK_ID, createIChainTip, getByron, getCalculatedChainTip, getCalculatedEpoch, getCalculatedEpochSlot, getCalculatedSlotFromBlockTime, getDateIdFromSlot, getDateIdFromTimestamp, getEpochFromSlot, getEpochLength, getEpochStart, getGenesis, getLastSlotOfEpoch, getNetworkCurrencyCode, getNetworkCurrencySymbol, getNetworkDecimals, getNetworkId, getNetworkMagic, getNumEpochBlocks, getShelley, getSlotFromDateId, getTimestampFromSlot, isCustomNetwork, isDevelopmentNetwork, isSupportedNetworkId, isTestnetNetwork, networkAddressPrefix, networkCurrencyCode, networkCurrencySymbol, networkGroups, networkIdList, networkIdx, networkShelleyTransitionEpoch, networkStakeAddressPrefix, updateChainTip };
@@ -1,3 +1,3 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_GenesisStore = require("../GenesisStore-DGnbeDqM.cjs");
2
+ const require_GenesisStore = require("../GenesisStore-r52jj7kC.cjs");
3
3
  exports.GenesisStore = require_GenesisStore.GenesisStore;
@@ -1,2 +1,2 @@
1
- import { x as GenesisStore } from "../chain-DbsXl5Uh.cjs";
1
+ import { x as GenesisStore } from "../chain-TJS85jZZ.cjs";
2
2
  export { GenesisStore };
@@ -1,2 +1,2 @@
1
- import { x as GenesisStore } from "../chain-DRRhGMxp.mjs";
1
+ import { x as GenesisStore } from "../chain-0Mtrt2zw.mjs";
2
2
  export { GenesisStore };
@@ -1 +1 @@
1
- export { t as GenesisStore } from "../GenesisStore-CqCs2Yin.mjs";
1
+ export { t as GenesisStore } from "../GenesisStore-BZQk-5ZY.mjs";