@xyo-network/xl1-cli-lib 1.14.3 → 1.15.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 (44) hide show
  1. package/dist/node/index.mjs +146 -78
  2. package/dist/node/index.mjs.map +1 -1
  3. package/dist/node/orchestration/initServices.d.ts.map +1 -1
  4. package/dist/node/orchestration/map/BalanceSummary/index.d.ts +1 -0
  5. package/dist/node/orchestration/map/BalanceSummary/index.d.ts.map +1 -1
  6. package/dist/node/orchestration/map/BalanceSummary/{local.d.ts → initLocalBalanceSummaryMap.d.ts} +1 -1
  7. package/dist/node/orchestration/map/BalanceSummary/initLocalBalanceSummaryMap.d.ts.map +1 -0
  8. package/dist/node/orchestration/map/BalanceSummary/initLocalTransferSummaryMap.d.ts +7 -0
  9. package/dist/node/orchestration/map/BalanceSummary/initLocalTransferSummaryMap.d.ts.map +1 -0
  10. package/dist/node/orchestration/map/BalanceSummary/initTransferSummaryMap.d.ts +7 -0
  11. package/dist/node/orchestration/map/BalanceSummary/initTransferSummaryMap.d.ts.map +1 -0
  12. package/dist/node/orchestration/services/implementation/evm/initEvmProvider.d.ts +2 -2
  13. package/dist/node/orchestration/services/implementation/evm/initEvmProvider.d.ts.map +1 -1
  14. package/dist/node/orchestration/services/implementation/head/createBootstrapHead.d.ts +2 -2
  15. package/dist/node/orchestration/services/implementation/head/createBootstrapHead.d.ts.map +1 -1
  16. package/dist/node/orchestration/services/implementation/head/createForkedHead/getFirstBlockForNewChain.d.ts.map +1 -1
  17. package/dist/node/orchestration/services/implementation/head/head.d.ts.map +1 -1
  18. package/dist/node/orchestration/services/implementation/index.d.ts +1 -0
  19. package/dist/node/orchestration/services/implementation/index.d.ts.map +1 -1
  20. package/dist/node/orchestration/services/implementation/time.d.ts +4 -0
  21. package/dist/node/orchestration/services/implementation/time.d.ts.map +1 -0
  22. package/dist/node/orchestration/services/implementation/transfer.d.ts +4 -0
  23. package/dist/node/orchestration/services/implementation/transfer.d.ts.map +1 -0
  24. package/dist/node/runCLI.d.ts.map +1 -1
  25. package/dist/node/xl1.mjs +145 -78
  26. package/dist/node/xl1.mjs.map +1 -1
  27. package/package.json +8 -7
  28. package/src/optionsFromGlobalZodRegistry.ts +1 -1
  29. package/src/orchestration/initServices.ts +32 -16
  30. package/src/orchestration/map/BalanceSummary/index.ts +1 -0
  31. package/src/orchestration/map/BalanceSummary/initBalanceSummaryMap.ts +1 -1
  32. package/src/orchestration/map/BalanceSummary/initLocalTransferSummaryMap.ts +21 -0
  33. package/src/orchestration/map/BalanceSummary/initTransferSummaryMap.ts +22 -0
  34. package/src/orchestration/services/implementation/evm/initEvmProvider.ts +2 -1
  35. package/src/orchestration/services/implementation/head/createBootstrapHead.ts +27 -5
  36. package/src/orchestration/services/implementation/head/createForkedHead/config/getBridgeDestinationDetails.ts +3 -3
  37. package/src/orchestration/services/implementation/head/createForkedHead/getFirstBlockForNewChain.ts +5 -6
  38. package/src/orchestration/services/implementation/head/head.ts +4 -3
  39. package/src/orchestration/services/implementation/index.ts +1 -0
  40. package/src/orchestration/services/implementation/time.ts +23 -0
  41. package/src/orchestration/services/implementation/transfer.ts +13 -0
  42. package/src/runCLI.ts +1 -0
  43. package/dist/node/orchestration/map/BalanceSummary/local.d.ts.map +0 -1
  44. /package/src/orchestration/map/BalanceSummary/{local.ts → initLocalBalanceSummaryMap.ts} +0 -0
package/dist/node/xl1.mjs CHANGED
@@ -6,7 +6,7 @@ import { config as config2 } from "dotenv";
6
6
 
7
7
  // src/runCLI.ts
8
8
  import { deepMerge } from "@xylabs/object";
9
- import { isDefined as isDefined14 } from "@xylabs/typeof";
9
+ import { isDefined as isDefined16 } from "@xylabs/typeof";
10
10
  import { ConfigZod } from "@xyo-network/xl1-protocol-sdk";
11
11
  import yargs from "yargs";
12
12
  import { hideBin } from "yargs/helpers";
@@ -472,8 +472,8 @@ var initHealthEndpoints = /* @__PURE__ */ __name((params) => {
472
472
  // src/orchestration/initServices.ts
473
473
  import { assertEx as assertEx17 } from "@xylabs/assert";
474
474
  import { asAddress as asAddress2 } from "@xylabs/hex";
475
- import { isDefined as isDefined11 } from "@xylabs/typeof";
476
- import { balanceSummaryRepositoryFromMap, BaseTimeSyncService, initTelemetry, startupSpanAsync as startupSpanAsync7, validateHydratedBlockState } from "@xyo-network/chain-sdk";
475
+ import { isDefined as isDefined13 } from "@xylabs/typeof";
476
+ import { balanceSummaryRepositoryFromMap, initTelemetry, startupSpanAsync as startupSpanAsync8, validateHydratedBlockState } from "@xyo-network/chain-sdk";
477
477
 
478
478
  // src/orchestration/archivists/ChainFinalized/archivist.ts
479
479
  import { initArchivistSync, startupSpanAsync } from "@xyo-network/chain-sdk";
@@ -748,7 +748,7 @@ import { isDefined as isDefined4 } from "@xylabs/typeof";
748
748
  import { startupSpanAsync as startupSpanAsync6 } from "@xyo-network/chain-sdk";
749
749
  import { Mutex as Mutex15 } from "async-mutex";
750
750
 
751
- // src/orchestration/map/BalanceSummary/local.ts
751
+ // src/orchestration/map/BalanceSummary/initLocalBalanceSummaryMap.ts
752
752
  import { isDefined as isDefined3 } from "@xylabs/typeof";
753
753
  import { Mutex as Mutex14 } from "async-mutex";
754
754
 
@@ -834,7 +834,7 @@ var getLocalPersistentMap = /* @__PURE__ */ __name(async (dbName, storeName, sto
834
834
  }
835
835
  }, "getLocalPersistentMap");
836
836
 
837
- // src/orchestration/map/BalanceSummary/local.ts
837
+ // src/orchestration/map/BalanceSummary/initLocalBalanceSummaryMap.ts
838
838
  var mutex13 = new Mutex14();
839
839
  var singleton13;
840
840
  var initLocalBalanceSummaryMap = /* @__PURE__ */ __name(async (params) => {
@@ -859,6 +859,38 @@ async function initBalanceSummaryMap(params) {
859
859
  }
860
860
  __name(initBalanceSummaryMap, "initBalanceSummaryMap");
861
861
 
862
+ // src/orchestration/map/BalanceSummary/initTransferSummaryMap.ts
863
+ import { isDefined as isDefined6 } from "@xylabs/typeof";
864
+ import { startupSpanAsync as startupSpanAsync7 } from "@xyo-network/chain-sdk";
865
+ import { Mutex as Mutex17 } from "async-mutex";
866
+
867
+ // src/orchestration/map/BalanceSummary/initLocalTransferSummaryMap.ts
868
+ import { isDefined as isDefined5 } from "@xylabs/typeof";
869
+ import { Mutex as Mutex16 } from "async-mutex";
870
+ var mutex15 = new Mutex16();
871
+ var singleton15;
872
+ var initLocalTransferSummaryMap = /* @__PURE__ */ __name(async (params) => {
873
+ return await mutex15.runExclusive(async () => {
874
+ if (isDefined5(singleton15)) return singleton15;
875
+ const { root } = params.config.storage;
876
+ singleton15 = await getLocalPersistentMap("transfer", "summary", root);
877
+ return singleton15;
878
+ });
879
+ }, "initLocalTransferSummaryMap");
880
+
881
+ // src/orchestration/map/BalanceSummary/initTransferSummaryMap.ts
882
+ var mutex16 = new Mutex17();
883
+ var singleton16;
884
+ async function initTransferSummaryMap(params) {
885
+ return await mutex16.runExclusive(async () => {
886
+ if (isDefined6(singleton16)) return singleton16;
887
+ const local = await startupSpanAsync7("TransferSummaryMap:initLocal", () => initLocalTransferSummaryMap(params));
888
+ singleton16 = local;
889
+ return singleton16;
890
+ });
891
+ }
892
+ __name(initTransferSummaryMap, "initTransferSummaryMap");
893
+
862
894
  // src/orchestration/services/implementation/account.ts
863
895
  import { isUndefined as isUndefined2 } from "@xylabs/typeof";
864
896
  import { HDWallet } from "@xyo-network/wallet";
@@ -898,7 +930,7 @@ import { MemoryChainService } from "@xyo-network/chain-sdk";
898
930
  // src/orchestration/services/implementation/chain/evm.ts
899
931
  import { assertEx as assertEx14 } from "@xylabs/assert";
900
932
  import { asAddress, ZERO_ADDRESS } from "@xylabs/hex";
901
- import { isDefined as isDefined8 } from "@xylabs/typeof";
933
+ import { isDefined as isDefined10 } from "@xylabs/typeof";
902
934
  import { EvmChainService } from "@xyo-network/chain-sdk";
903
935
  import { Wallet } from "ethers/wallet";
904
936
 
@@ -907,15 +939,15 @@ import { assertEx as assertEx13 } from "@xylabs/assert";
907
939
 
908
940
  // src/orchestration/services/implementation/evm/initInfuraProvider.ts
909
941
  import { assertEx as assertEx11 } from "@xylabs/assert";
910
- import { isDefined as isDefined6 } from "@xylabs/typeof";
942
+ import { isDefined as isDefined8 } from "@xylabs/typeof";
911
943
  import { InfuraProvider } from "ethers/providers";
912
944
 
913
945
  // src/orchestration/services/implementation/evm/initChainId.ts
914
946
  import { assertEx as assertEx10 } from "@xylabs/assert";
915
947
  import { hexFrom, isHex } from "@xylabs/hex";
916
- import { isDefined as isDefined5 } from "@xylabs/typeof";
948
+ import { isDefined as isDefined7 } from "@xylabs/typeof";
917
949
  var canUseChainId = /* @__PURE__ */ __name((config3) => {
918
- return isDefined5(config3.evm.chainId);
950
+ return isDefined7(config3.evm.chainId);
919
951
  }, "canUseChainId");
920
952
  var getChainId = /* @__PURE__ */ __name((config3) => {
921
953
  const chainId = assertEx10(config3.evm.chainId, () => "Missing config.evm.chainId");
@@ -940,7 +972,7 @@ var initInfuraProvider = /* @__PURE__ */ __name((config3) => {
940
972
  return instance;
941
973
  }, "initInfuraProvider");
942
974
  var canUseInfuraProvider = /* @__PURE__ */ __name((config3) => {
943
- return canUseChainId(config3) && isDefined6(config3.evm?.infura?.projectId) && isDefined6(config3.evm?.infura?.projectSecret);
975
+ return canUseChainId(config3) && isDefined8(config3.evm?.infura?.projectId) && isDefined8(config3.evm?.infura?.projectSecret);
944
976
  }, "canUseInfuraProvider");
945
977
  var getInfuraProviderConfig = /* @__PURE__ */ __name((config3) => {
946
978
  const projectId = assertEx11(config3.evm?.infura?.projectId, () => "Missing config.evm.infura.projectId");
@@ -954,14 +986,14 @@ var getInfuraProviderConfig = /* @__PURE__ */ __name((config3) => {
954
986
 
955
987
  // src/orchestration/services/implementation/evm/initJsonRpcProvider.ts
956
988
  import { assertEx as assertEx12 } from "@xylabs/assert";
957
- import { isDefined as isDefined7 } from "@xylabs/typeof";
989
+ import { isDefined as isDefined9 } from "@xylabs/typeof";
958
990
  import { JsonRpcProvider } from "ethers/providers";
959
991
  var initJsonRpcProvider = /* @__PURE__ */ __name((config3) => {
960
992
  const providerConfig = getJsonRpcProviderConfig(config3);
961
993
  return Promise.resolve(new JsonRpcProvider(...providerConfig));
962
994
  }, "initJsonRpcProvider");
963
995
  var canUseJsonRpcProvider = /* @__PURE__ */ __name((config3) => {
964
- return canUseChainId(config3) && isDefined7(config3.evm.jsonRpc?.url);
996
+ return canUseChainId(config3) && isDefined9(config3.evm.jsonRpc?.url);
965
997
  }, "canUseJsonRpcProvider");
966
998
  var getJsonRpcProviderConfig = /* @__PURE__ */ __name((config3) => {
967
999
  const jsonRpcUrl = assertEx12(config3.evm.jsonRpc?.url, () => "Missing config.evm.jsonRpc.url");
@@ -990,7 +1022,7 @@ var canUseEvmProvider = /* @__PURE__ */ __name(({ config: config3 }) => {
990
1022
  var chainStakeServiceSingleton;
991
1023
  var canUseEvmContractChainService = /* @__PURE__ */ __name((config3) => {
992
1024
  const { id } = config3.chain;
993
- return isDefined8(id) && id !== ZERO_ADDRESS && canUseEvmProvider({
1025
+ return isDefined10(id) && id !== ZERO_ADDRESS && canUseEvmProvider({
994
1026
  config: config3
995
1027
  });
996
1028
  }, "canUseEvmContractChainService");
@@ -1035,18 +1067,28 @@ var init = /* @__PURE__ */ __name((params) => {
1035
1067
 
1036
1068
  // src/orchestration/services/implementation/head/head.ts
1037
1069
  import { assertEx as assertEx15 } from "@xylabs/assert";
1038
- import { isDefined as isDefined10 } from "@xylabs/typeof";
1070
+ import { isDefined as isDefined12 } from "@xylabs/typeof";
1039
1071
  import { findMostRecentBlock as findMostRecentBlock2 } from "@xyo-network/chain-sdk";
1040
1072
 
1041
1073
  // src/orchestration/services/implementation/head/createBootstrapHead.ts
1042
- import { ZERO_ADDRESS as ZERO_ADDRESS2 } from "@xylabs/hex";
1043
- import { createGenesisBlock } from "@xyo-network/chain-sdk";
1044
- var createBootstrapHead = /* @__PURE__ */ __name(async (account) => {
1045
- return await createGenesisBlock(account, ZERO_ADDRESS2, 10000000n, account.address);
1074
+ import { buildNextBlock, createDeclarationIntent as createDeclarationIntent2, createGenesisBlock } from "@xyo-network/chain-sdk";
1075
+ var createBootstrapHead = /* @__PURE__ */ __name(async (account, chainService) => {
1076
+ const chainId = chainService.chainId;
1077
+ const chain = [];
1078
+ const genesisBlock = await createGenesisBlock(account, chainId, 10000000n, account.address);
1079
+ chain.push(genesisBlock);
1080
+ const producerDeclarationPayload = createDeclarationIntent2(account.address, "producer", genesisBlock[0].block, genesisBlock[0].block + 1e4);
1081
+ const producerDeclarationBlock = await buildNextBlock(genesisBlock[0], [], [
1082
+ producerDeclarationPayload
1083
+ ], [
1084
+ account
1085
+ ]);
1086
+ chain.push(producerDeclarationBlock);
1087
+ return chain;
1046
1088
  }, "createBootstrapHead");
1047
1089
 
1048
1090
  // src/orchestration/services/implementation/head/createForkedHead/getBridgeDestinationObservation.ts
1049
- import { BridgeDestinationObservationSchema, buildNextBlock } from "@xyo-network/chain-sdk";
1091
+ import { BridgeDestinationObservationSchema, buildNextBlock as buildNextBlock2 } from "@xyo-network/chain-sdk";
1050
1092
  import { PayloadBuilder as PayloadBuilder3 } from "@xyo-network/payload-builder";
1051
1093
 
1052
1094
  // src/orchestration/services/implementation/head/createForkedHead/config/getBridgeDestinationDetails.ts
@@ -1064,9 +1106,9 @@ var getForkBlockRewardHex = /* @__PURE__ */ __name(() => {
1064
1106
 
1065
1107
  // src/orchestration/services/implementation/head/createForkedHead/config/getBridgeDestinationDetails.ts
1066
1108
  var ethChainId = toHex4("0x1");
1067
- var bridgeableTokenContract = toHex4("0x7789e11BB83b398A8Cca8E8D582B33F91499D6f5");
1068
- var bridgeDestAddress = toHex4("0xe53218d47913b5f9E58bb74F0a0eD790bbF21972");
1069
- var destConfirmation = toHex4("0x772ee028f9ad291ec692912c1a33ecd4409e71383fe06f6ebf39f7cdbb779069");
1109
+ var bridgeableTokenContract = toHex4("0xf72aE3E0DA743033AbD7A407557D684c1aE66aed");
1110
+ var bridgeDestAddress = toHex4("0x0e65b65B10C791942665030402c35023d88B14dA");
1111
+ var destConfirmation = toHex4("0x950861b10523b52cdbb4a9ee52ed26601db555d2652bfec21c709e5e70d5b7d3");
1070
1112
  var getBridgeDestChainId = /* @__PURE__ */ __name(() => ethChainId, "getBridgeDestChainId");
1071
1113
  var getBridgeDestToken = /* @__PURE__ */ __name(() => bridgeableTokenContract, "getBridgeDestToken");
1072
1114
  var getBridgeDestAddress = /* @__PURE__ */ __name(() => bridgeDestAddress, "getBridgeDestAddress");
@@ -1105,7 +1147,7 @@ var getBridgeDestinationObservation = /* @__PURE__ */ __name(async (previousBloc
1105
1147
  const bridgeDestinationObservation = new PayloadBuilder3({
1106
1148
  schema: BridgeDestinationObservationSchema
1107
1149
  }).fields(bridgeDestinationObservationFields).build();
1108
- return await buildNextBlock(previousBlock[0], [], [
1150
+ return await buildNextBlock2(previousBlock[0], [], [
1109
1151
  bridgeDestinationObservation
1110
1152
  ], [
1111
1153
  account
@@ -1113,7 +1155,7 @@ var getBridgeDestinationObservation = /* @__PURE__ */ __name(async (previousBloc
1113
1155
  }, "getBridgeDestinationObservation");
1114
1156
 
1115
1157
  // src/orchestration/services/implementation/head/createForkedHead/getBridgeIntent.ts
1116
- import { BridgeIntentSchema, buildNextBlock as buildNextBlock2, createTransferPayload, XYO_BRIDGE_ADDRESS } from "@xyo-network/chain-sdk";
1158
+ import { BridgeIntentSchema, buildNextBlock as buildNextBlock3, createTransferPayload, XYO_BRIDGE_ADDRESS } from "@xyo-network/chain-sdk";
1117
1159
  import { PayloadBuilder as PayloadBuilder4 } from "@xyo-network/payload-builder";
1118
1160
  var getBridgeIntent = /* @__PURE__ */ __name(async (previousBlock, account, chainService) => {
1119
1161
  const transferPayload = createTransferPayload(account.address, {
@@ -1128,7 +1170,7 @@ var getBridgeIntent = /* @__PURE__ */ __name(async (previousBlock, account, chai
1128
1170
  const bridgeIntent = new PayloadBuilder4({
1129
1171
  schema: BridgeIntentSchema
1130
1172
  }).fields(bridgeIntentFields).build();
1131
- return await buildNextBlock2(previousBlock[0], [], [
1173
+ return await buildNextBlock3(previousBlock[0], [], [
1132
1174
  bridgeIntent,
1133
1175
  transferPayload
1134
1176
  ], [
@@ -1137,7 +1179,7 @@ var getBridgeIntent = /* @__PURE__ */ __name(async (previousBlock, account, chai
1137
1179
  }, "getBridgeIntent");
1138
1180
 
1139
1181
  // src/orchestration/services/implementation/head/createForkedHead/getBridgeSourceObservation.ts
1140
- import { BridgeSourceObservationSchema, buildNextBlock as buildNextBlock3 } from "@xyo-network/chain-sdk";
1182
+ import { BridgeSourceObservationSchema, buildNextBlock as buildNextBlock4 } from "@xyo-network/chain-sdk";
1141
1183
  import { PayloadBuilder as PayloadBuilder5 } from "@xyo-network/payload-builder";
1142
1184
  var getBridgeSourceObservation = /* @__PURE__ */ __name(async (previousBlock, account, chainService) => {
1143
1185
  const srcTxHash = previousBlock[0]._hash;
@@ -1150,7 +1192,7 @@ var getBridgeSourceObservation = /* @__PURE__ */ __name(async (previousBlock, ac
1150
1192
  const bridgeSourceObservation = new PayloadBuilder5({
1151
1193
  schema: BridgeSourceObservationSchema
1152
1194
  }).fields(bridgeSourceObservationFields).build();
1153
- return await buildNextBlock3(previousBlock[0], [], [
1195
+ return await buildNextBlock4(previousBlock[0], [], [
1154
1196
  bridgeSourceObservation
1155
1197
  ], [
1156
1198
  account
@@ -1158,11 +1200,10 @@ var getBridgeSourceObservation = /* @__PURE__ */ __name(async (previousBlock, ac
1158
1200
  }, "getBridgeSourceObservation");
1159
1201
 
1160
1202
  // src/orchestration/services/implementation/head/createForkedHead/getFirstBlockForNewChain.ts
1161
- import { buildBlock } from "@xyo-network/chain-sdk";
1203
+ import { AttoXL1, buildBlock, XYO_STEP_REWARD_ADDRESS } from "@xyo-network/chain-sdk";
1162
1204
  var getFirstBlockForNewChain = /* @__PURE__ */ __name(async (forkBlock, account, chainService) => {
1163
1205
  const { _hash: previousBlockHash, block: previousBlockNumber, step_hashes: previousStepHashes, protocol } = forkBlock;
1164
1206
  const chainId = chainService.chainId;
1165
- const forkBlockReward = getForkBlockReward();
1166
1207
  const options = {
1167
1208
  blockPayloads: [],
1168
1209
  chainId,
@@ -1174,8 +1215,8 @@ var getFirstBlockForNewChain = /* @__PURE__ */ __name(async (forkBlock, account,
1174
1215
  ],
1175
1216
  txs: [],
1176
1217
  protocol,
1177
- reward: forkBlockReward,
1178
- rewardAddress: account.address
1218
+ stepRewardAddress: XYO_STEP_REWARD_ADDRESS,
1219
+ stepRewardPoolBalance: AttoXL1(0n)
1179
1220
  };
1180
1221
  return await buildBlock(options);
1181
1222
  }, "getFirstBlockForNewChain");
@@ -1196,14 +1237,14 @@ var createForkedHead = /* @__PURE__ */ __name(async (forkFromBlock, account, cha
1196
1237
 
1197
1238
  // src/orchestration/services/implementation/head/getForkFromBlock.ts
1198
1239
  import { asHash, hexFromBigInt } from "@xylabs/hex";
1199
- import { isDefined as isDefined9 } from "@xylabs/typeof";
1240
+ import { isDefined as isDefined11 } from "@xylabs/typeof";
1200
1241
  import { isBlockBoundWitnessWithHashStorageMeta } from "@xyo-network/chain-sdk";
1201
1242
  var getForkFromBlock = /* @__PURE__ */ __name(async (head, chainService, chainArchivist) => {
1202
1243
  if (head.chain !== chainService.chainId) {
1203
1244
  const forkedAtBigInt = await chainService.forkedAtHash();
1204
1245
  const forkedAtHex = hexFromBigInt(forkedAtBigInt);
1205
1246
  const forkedAtHash = asHash(forkedAtHex);
1206
- if (isDefined9(forkedAtHash)) {
1247
+ if (isDefined11(forkedAtHash)) {
1207
1248
  const [forkedAtBlock] = await chainArchivist.get([
1208
1249
  forkedAtHash
1209
1250
  ]);
@@ -1241,18 +1282,17 @@ var initHead = /* @__PURE__ */ __name(async (params) => {
1241
1282
  let head = await findMostRecentBlock2(chainArchivist);
1242
1283
  if (head) {
1243
1284
  const forkFromBlock = await getForkFromBlock(head, chainService, chainArchivist);
1244
- if (isDefined10(forkFromBlock)) {
1285
+ if (isDefined12(forkFromBlock)) {
1245
1286
  const chain = await createForkedHead(forkFromBlock, account, chainService);
1246
1287
  await submitNewChain(chain, chainArchivist, chainSubmissionsArchivistWrite);
1247
1288
  const newBlock = assertEx15(chain.at(-1), () => new Error("Failed to get new head after forking"));
1248
1289
  head = newBlock[0];
1249
1290
  }
1250
1291
  } else {
1251
- const genesisBlock = await createBootstrapHead(account);
1252
- await submitNewChain([
1253
- genesisBlock
1254
- ], chainArchivist, chainSubmissionsArchivistWrite);
1255
- head = genesisBlock[0];
1292
+ const chain = await createBootstrapHead(account, chainService);
1293
+ await submitNewChain(chain, chainArchivist, chainSubmissionsArchivistWrite);
1294
+ const newBlock = assertEx15(chain.at(-1), () => new Error("Failed to get new head after genesis"));
1295
+ head = newBlock[0];
1256
1296
  }
1257
1297
  headSingleton = head;
1258
1298
  return headSingleton;
@@ -1331,6 +1371,27 @@ var initEvmBlockRewardService = /* @__PURE__ */ __name(async (params) => {
1331
1371
  return rewardServiceSingleton;
1332
1372
  }, "initEvmBlockRewardService");
1333
1373
 
1374
+ // src/orchestration/services/implementation/time.ts
1375
+ import { BaseTimeSyncService } from "@xyo-network/chain-sdk";
1376
+ var timeSyncServiceSingleton;
1377
+ var initTimeService = /* @__PURE__ */ __name(async ({ chainArchivist, chainIterator, config: config3, logger, meterProvider, traceProvider }) => {
1378
+ if (timeSyncServiceSingleton) return timeSyncServiceSingleton;
1379
+ const ethProvider = canUseEvmProvider({
1380
+ config: config3
1381
+ }) ? await initEvmProvider({
1382
+ config: config3
1383
+ }) : void 0;
1384
+ timeSyncServiceSingleton = BaseTimeSyncService.create({
1385
+ chainArchivist,
1386
+ chainIterator,
1387
+ ethProvider,
1388
+ logger,
1389
+ meterProvider,
1390
+ traceProvider
1391
+ });
1392
+ return await timeSyncServiceSingleton;
1393
+ }, "initTimeService");
1394
+
1334
1395
  // src/orchestration/status/ServiceStatus.ts
1335
1396
  var LoggerStatusReporter = class {
1336
1397
  static {
@@ -1423,7 +1484,7 @@ var RuntimeStatusMonitor = class extends LoggerStatusReporter {
1423
1484
 
1424
1485
  // src/orchestration/initServices.ts
1425
1486
  var isStartable = /* @__PURE__ */ __name((value) => {
1426
- return isDefined11(value.start) && typeof value.start === "function";
1487
+ return isDefined13(value.start) && typeof value.start === "function";
1427
1488
  }, "isStartable");
1428
1489
  var initServices = /* @__PURE__ */ __name(async (context) => {
1429
1490
  const { config: config3, logger } = context;
@@ -1439,7 +1500,7 @@ var initServices = /* @__PURE__ */ __name(async (context) => {
1439
1500
  logger.error("Producer encountered an unhandled error!");
1440
1501
  process.exit(1);
1441
1502
  });
1442
- await startupSpanAsync7("initHealthEndpoints", () => initHealthEndpoints({
1503
+ await startupSpanAsync8("initHealthEndpoints", () => initHealthEndpoints({
1443
1504
  ...context,
1444
1505
  statusReporter
1445
1506
  }));
@@ -1456,8 +1517,8 @@ var initServices = /* @__PURE__ */ __name(async (context) => {
1456
1517
  }
1457
1518
  };
1458
1519
  const [{ traceProvider, meterProvider }, account] = await Promise.all([
1459
- startupSpanAsync7("initTelemetry", () => initTelemetry(telemetryConfig)),
1460
- startupSpanAsync7("initAccount", () => initAccount(context))
1520
+ startupSpanAsync8("initTelemetry", () => initTelemetry(telemetryConfig)),
1521
+ startupSpanAsync8("initAccount", () => initAccount(context))
1461
1522
  ]);
1462
1523
  const initParams = {
1463
1524
  config: config3,
@@ -1466,24 +1527,25 @@ var initServices = /* @__PURE__ */ __name(async (context) => {
1466
1527
  statusReporter,
1467
1528
  traceProvider
1468
1529
  };
1469
- const [chainArchivist, [pendingBundledTransactionsArchivist, pendingBundledTransactionsArchivistWrite], rejectedTransactionsArchivist, chainSubmissionsArchivistWrite, stakeIntentStateArchivist, chainService, balanceSummaryMap] = await Promise.all([
1470
- startupSpanAsync7("ChainFinalizedArchivist", () => initChainFinalizedArchivist(initParams)),
1471
- startupSpanAsync7("PendingBundledTransactionsArchivist", () => initPendingBundledTransactionsArchivist(initParams)),
1472
- startupSpanAsync7("RejectedTransactionsArchivist", () => initRejectedTransactionsArchivist(initParams)),
1473
- startupSpanAsync7("ChainSubmissionsArchivist", () => initChainSubmissionsArchivist(initParams)),
1474
- startupSpanAsync7("StakeIntentStateArchivist", () => initStakeIntentStateArchivist(initParams)),
1475
- startupSpanAsync7("ChainService", () => initChainService({
1530
+ const [chainArchivist, [pendingBundledTransactionsArchivist, pendingBundledTransactionsArchivistWrite], rejectedTransactionsArchivist, chainSubmissionsArchivistWrite, stakeIntentStateArchivist, chainService, balanceSummaryMap, transferSummaryMap] = await Promise.all([
1531
+ startupSpanAsync8("ChainFinalizedArchivist", () => initChainFinalizedArchivist(initParams)),
1532
+ startupSpanAsync8("PendingBundledTransactionsArchivist", () => initPendingBundledTransactionsArchivist(initParams)),
1533
+ startupSpanAsync8("RejectedTransactionsArchivist", () => initRejectedTransactionsArchivist(initParams)),
1534
+ startupSpanAsync8("ChainSubmissionsArchivist", () => initChainSubmissionsArchivist(initParams)),
1535
+ startupSpanAsync8("StakeIntentStateArchivist", () => initStakeIntentStateArchivist(initParams)),
1536
+ startupSpanAsync8("ChainService", () => initChainService({
1476
1537
  ...initParams,
1477
1538
  account,
1478
1539
  name: "ChainService"
1479
1540
  })),
1480
- startupSpanAsync7("BalanceSummaryMap", () => initBalanceSummaryMap(initParams))
1541
+ startupSpanAsync8("BalanceSummaryMap", () => initBalanceSummaryMap(initParams)),
1542
+ startupSpanAsync8("TransferSummaryMap", () => initTransferSummaryMap(initParams))
1481
1543
  ]);
1482
1544
  const chainId = chainService.chainId;
1483
1545
  const chainContractViewer = chainService;
1484
1546
  const chainStakeViewer = chainService;
1485
1547
  const chainStaker = chainService;
1486
- const head = await startupSpanAsync7("initHead", () => initHead({
1548
+ const head = await startupSpanAsync8("initHead", () => initHead({
1487
1549
  ...initParams,
1488
1550
  account,
1489
1551
  chainArchivist,
@@ -1491,7 +1553,7 @@ var initServices = /* @__PURE__ */ __name(async (context) => {
1491
1553
  chainService
1492
1554
  }));
1493
1555
  const [pendingTransactionsService, rewardService, chainIterator, balanceService] = await Promise.all([
1494
- startupSpanAsync7("PendingTransactions", () => initPendingTransactions({
1556
+ startupSpanAsync8("PendingTransactions", () => initPendingTransactions({
1495
1557
  name: "PendingTransactionsService",
1496
1558
  chainArchivist,
1497
1559
  chainId,
@@ -1499,34 +1561,42 @@ var initServices = /* @__PURE__ */ __name(async (context) => {
1499
1561
  rejectedTransactionsArchivist,
1500
1562
  ...initParams
1501
1563
  })),
1502
- startupSpanAsync7("RewardService", () => initBlockRewardService({
1564
+ startupSpanAsync8("RewardService", () => initBlockRewardService({
1503
1565
  name: "RewardService",
1504
1566
  account,
1505
1567
  chainService,
1506
1568
  ...initParams
1507
1569
  })),
1508
- startupSpanAsync7("ChainIterator", () => initChainIterator({
1570
+ startupSpanAsync8("ChainIterator", () => initChainIterator({
1509
1571
  name: "ChainIterator",
1510
1572
  chainArchivist,
1511
1573
  head,
1512
1574
  ...initParams
1513
1575
  })),
1514
- startupSpanAsync7("BalanceService", () => initBalanceService({
1576
+ startupSpanAsync8("BalanceService", () => initBalanceService({
1515
1577
  name: "BalanceService",
1516
1578
  chainArchivist,
1517
1579
  summaryRepository: balanceSummaryRepositoryFromMap(balanceSummaryMap),
1518
1580
  ...initParams
1519
1581
  }))
1520
1582
  ]);
1521
- const stakeIntentService = await startupSpanAsync7("StakeIntentService", () => initStakeIntentService({
1522
- name: "StakeIntentService",
1523
- chainArchivist,
1524
- chainIterator,
1525
- chainStakeViewer,
1526
- stakeIntentStateArchivist,
1527
- ...initParams
1528
- }));
1529
- const electionService = await startupSpanAsync7("ElectionService", () => initElectionService({
1583
+ const [stakeIntentService, time] = await Promise.all([
1584
+ startupSpanAsync8("StakeIntentService", () => initStakeIntentService({
1585
+ name: "StakeIntentService",
1586
+ chainArchivist,
1587
+ chainIterator,
1588
+ chainStakeViewer,
1589
+ stakeIntentStateArchivist,
1590
+ ...initParams
1591
+ })),
1592
+ startupSpanAsync8("TimeService", () => initTimeService({
1593
+ name: "TimeService",
1594
+ chainArchivist,
1595
+ chainIterator,
1596
+ ...initParams
1597
+ }))
1598
+ ]);
1599
+ const electionService = await startupSpanAsync8("ElectionService", () => initElectionService({
1530
1600
  name: "ElectionService",
1531
1601
  chainIterator,
1532
1602
  chainStakeViewer,
@@ -1545,11 +1615,7 @@ var initServices = /* @__PURE__ */ __name(async (context) => {
1545
1615
  validateHydratedBlockState,
1546
1616
  ...initParams
1547
1617
  };
1548
- const time = await BaseTimeSyncService.create({
1549
- chainArchivist,
1550
- chainIterator
1551
- });
1552
- const rewardAddress = isDefined11(config3.producer.rewardAddress) ? assertEx17(asAddress2(config3.producer.rewardAddress), () => "Invalid block reward address provided") : account.address;
1618
+ const rewardAddress = isDefined13(config3.producer.rewardAddress) ? assertEx17(asAddress2(config3.producer.rewardAddress), () => "Invalid block reward address provided") : account.address;
1553
1619
  const producerParams = {
1554
1620
  ...validatorParams,
1555
1621
  name: "Producer",
@@ -1562,7 +1628,7 @@ var initServices = /* @__PURE__ */ __name(async (context) => {
1562
1628
  time,
1563
1629
  ...initParams
1564
1630
  };
1565
- const producer = await startupSpanAsync7("Producer", () => initBlockProducer(producerParams));
1631
+ const producer = await startupSpanAsync8("Producer", () => initBlockProducer(producerParams));
1566
1632
  const result = {
1567
1633
  account,
1568
1634
  balance: balanceService,
@@ -1635,16 +1701,16 @@ var XL1LogoColorizedAscii = `\x1B[38;2;128;128;128m\xA0\xA0\xA0\xA0\xA0\xA0\xA0\
1635
1701
  // src/initLogger.ts
1636
1702
  import { Base as Base2 } from "@xylabs/base";
1637
1703
  import { ConsoleLogger, LogLevel, SilentLogger } from "@xylabs/logger";
1638
- import { isDefined as isDefined12 } from "@xylabs/typeof";
1704
+ import { isDefined as isDefined14 } from "@xylabs/typeof";
1639
1705
  var initLogger = /* @__PURE__ */ __name((config3) => {
1640
1706
  let logger;
1641
1707
  if (config3.silent) {
1642
1708
  logger = new SilentLogger();
1643
1709
  } else {
1644
1710
  let level;
1645
- if (isDefined12(config3.logLevel)) {
1711
+ if (isDefined14(config3.logLevel)) {
1646
1712
  const parsed = LogLevel[config3.logLevel.toLowerCase()];
1647
- if (isDefined12(parsed)) level = parsed;
1713
+ if (isDefined14(parsed)) level = parsed;
1648
1714
  }
1649
1715
  logger = new ConsoleLogger(level);
1650
1716
  }
@@ -1660,7 +1726,7 @@ var usageMetaToOptions = /* @__PURE__ */ __name((meta) => {
1660
1726
  }, "usageMetaToOptions");
1661
1727
  var optionsFromGlobalZodRegistry = /* @__PURE__ */ __name(() => {
1662
1728
  const opts = {};
1663
- for (const schema of globalRegistry._map.values()) {
1729
+ for (const schema of Object.values(globalRegistry._map)) {
1664
1730
  if (isUsageMeta(schema)) {
1665
1731
  if (schema.hidden) continue;
1666
1732
  opts[schema.title] = usageMetaToOptions(schema);
@@ -1670,7 +1736,7 @@ var optionsFromGlobalZodRegistry = /* @__PURE__ */ __name(() => {
1670
1736
  }, "optionsFromGlobalZodRegistry");
1671
1737
 
1672
1738
  // src/tryParseConfig.ts
1673
- import { isDefined as isDefined13, isNull } from "@xylabs/typeof";
1739
+ import { isDefined as isDefined15, isNull } from "@xylabs/typeof";
1674
1740
  import { cosmiconfigSync } from "cosmiconfig";
1675
1741
  var configName = "xyo";
1676
1742
  var configSection = "xl1";
@@ -1679,7 +1745,7 @@ var tryParseConfig = /* @__PURE__ */ __name(() => {
1679
1745
  const result = explorer.search();
1680
1746
  if (!isNull(result)) {
1681
1747
  const section = result?.config?.[configSection];
1682
- if (isDefined13(section) && typeof section === "object") {
1748
+ if (isDefined15(section) && typeof section === "object") {
1683
1749
  return section;
1684
1750
  }
1685
1751
  }
@@ -1709,7 +1775,7 @@ var waitForHostPort = /* @__PURE__ */ __name((host, port) => {
1709
1775
 
1710
1776
  // src/runCLI.ts
1711
1777
  var config;
1712
- var version = isDefined14("1.14.2") ? "1.14.2" : "unknown";
1778
+ var version = isDefined16("1.14.4") ? "1.14.4" : "unknown";
1713
1779
  var getContextFromConfig = /* @__PURE__ */ __name((config3) => {
1714
1780
  const logger = initLogger(config3);
1715
1781
  const orchestrator = new Orchestrator(logger);
@@ -1741,6 +1807,7 @@ Run various components of the XL1 ecosystem.
1741
1807
  Usage:
1742
1808
  $0 <command> [options]`).parserConfiguration({
1743
1809
  "dot-notation": true,
1810
+ "parse-numbers": false,
1744
1811
  "populate--": true
1745
1812
  }).env("XL1").scriptName("xl1").middleware((argv2) => {
1746
1813
  try {