@xyo-network/xl1-cli-lib 1.14.2 → 1.14.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/node/index.mjs +216 -65
- package/dist/node/index.mjs.map +1 -1
- package/dist/node/orchestration/archivists/lib/localPersistentArchivist.d.ts +1 -1
- package/dist/node/orchestration/archivists/lib/localPersistentArchivist.d.ts.map +1 -1
- package/dist/node/orchestration/services/implementation/head/createBootstrapHead.d.ts +4 -0
- package/dist/node/orchestration/services/implementation/head/createBootstrapHead.d.ts.map +1 -0
- package/dist/node/orchestration/services/implementation/head/createForkedHead/config/getBridgeDestinationDetails.d.ts +18 -0
- package/dist/node/orchestration/services/implementation/head/createForkedHead/config/getBridgeDestinationDetails.d.ts.map +1 -0
- package/dist/node/orchestration/services/implementation/head/createForkedHead/config/getBridgeSourceDetails.d.ts +14 -0
- package/dist/node/orchestration/services/implementation/head/createForkedHead/config/getBridgeSourceDetails.d.ts.map +1 -0
- package/dist/node/orchestration/services/implementation/head/createForkedHead/config/getForkDetails.d.ts +4 -0
- package/dist/node/orchestration/services/implementation/head/createForkedHead/config/getForkDetails.d.ts.map +1 -0
- package/dist/node/orchestration/services/implementation/head/createForkedHead/config/index.d.ts +4 -0
- package/dist/node/orchestration/services/implementation/head/createForkedHead/config/index.d.ts.map +1 -0
- package/dist/node/orchestration/services/implementation/head/createForkedHead/createForkedHead.d.ts +5 -0
- package/dist/node/orchestration/services/implementation/head/createForkedHead/createForkedHead.d.ts.map +1 -0
- package/dist/node/orchestration/services/implementation/head/createForkedHead/getBridgeDestinationObservation.d.ts +10 -0
- package/dist/node/orchestration/services/implementation/head/createForkedHead/getBridgeDestinationObservation.d.ts.map +1 -0
- package/dist/node/orchestration/services/implementation/head/createForkedHead/getBridgeIntent.d.ts +10 -0
- package/dist/node/orchestration/services/implementation/head/createForkedHead/getBridgeIntent.d.ts.map +1 -0
- package/dist/node/orchestration/services/implementation/head/createForkedHead/getBridgeSourceObservation.d.ts +10 -0
- package/dist/node/orchestration/services/implementation/head/createForkedHead/getBridgeSourceObservation.d.ts.map +1 -0
- package/dist/node/orchestration/services/implementation/head/createForkedHead/getFirstBlockForNewChain.d.ts +12 -0
- package/dist/node/orchestration/services/implementation/head/createForkedHead/getFirstBlockForNewChain.d.ts.map +1 -0
- package/dist/node/orchestration/services/implementation/head/createForkedHead/index.d.ts +2 -0
- package/dist/node/orchestration/services/implementation/head/createForkedHead/index.d.ts.map +1 -0
- package/dist/node/orchestration/services/implementation/head/getForkFromBlock.d.ts +12 -0
- package/dist/node/orchestration/services/implementation/head/getForkFromBlock.d.ts.map +1 -0
- package/dist/node/orchestration/services/implementation/head/head.d.ts.map +1 -0
- package/dist/node/orchestration/services/implementation/head/index.d.ts +2 -0
- package/dist/node/orchestration/services/implementation/head/index.d.ts.map +1 -0
- package/dist/node/orchestration/services/implementation/head/submitNewChain.d.ts +10 -0
- package/dist/node/orchestration/services/implementation/head/submitNewChain.d.ts.map +1 -0
- package/dist/node/orchestration/services/implementation/index.d.ts +1 -1
- package/dist/node/orchestration/services/implementation/index.d.ts.map +1 -1
- package/dist/node/xl1.mjs +216 -65
- package/dist/node/xl1.mjs.map +1 -1
- package/package.json +12 -12
- package/src/orchestration/actor/implementation/ChainHeadUpdateActor.ts +2 -2
- package/src/orchestration/actor/model/Actor.ts +2 -2
- package/src/orchestration/archivists/ChainFinalized/local.ts +1 -1
- package/src/orchestration/archivists/StakeIntentState/local.ts +1 -1
- package/src/orchestration/archivists/lib/localPersistentArchivist.ts +8 -1
- package/src/orchestration/services/implementation/head/createBootstrapHead.ts +8 -0
- package/src/orchestration/services/implementation/head/createForkedHead/config/getBridgeDestinationDetails.ts +27 -0
- package/src/orchestration/services/implementation/head/createForkedHead/config/getBridgeSourceDetails.ts +18 -0
- package/src/orchestration/services/implementation/head/createForkedHead/config/getForkDetails.ts +10 -0
- package/src/orchestration/services/implementation/head/createForkedHead/config/index.ts +3 -0
- package/src/orchestration/services/implementation/head/createForkedHead/createForkedHead.ts +31 -0
- package/src/orchestration/services/implementation/head/createForkedHead/getBridgeDestinationObservation.ts +38 -0
- package/src/orchestration/services/implementation/head/createForkedHead/getBridgeIntent.ts +50 -0
- package/src/orchestration/services/implementation/head/createForkedHead/getBridgeSourceObservation.ts +43 -0
- package/src/orchestration/services/implementation/head/createForkedHead/getFirstBlockForNewChain.ts +42 -0
- package/src/orchestration/services/implementation/head/createForkedHead/index.ts +1 -0
- package/src/orchestration/services/implementation/head/getForkFromBlock.ts +42 -0
- package/src/orchestration/services/implementation/head/head.ts +52 -0
- package/src/orchestration/services/implementation/head/index.ts +1 -0
- package/src/orchestration/services/implementation/head/submitNewChain.ts +27 -0
- package/src/orchestration/services/implementation/index.ts +1 -1
- package/dist/node/orchestration/services/implementation/head.d.ts.map +0 -1
- package/src/orchestration/services/implementation/head.ts +0 -111
- /package/dist/node/orchestration/services/implementation/{head.d.ts → head/head.d.ts} +0 -0
package/dist/node/index.mjs
CHANGED
|
@@ -9,7 +9,7 @@ import { Mutex } from "async-mutex";
|
|
|
9
9
|
// src/orchestration/actor/model/Actor.ts
|
|
10
10
|
import { Base } from "@xylabs/base";
|
|
11
11
|
import { IdLogger } from "@xylabs/logger";
|
|
12
|
-
import { span,
|
|
12
|
+
import { span, spanRootAsync } from "@xylabs/telemetry";
|
|
13
13
|
var Actor = class extends Base {
|
|
14
14
|
static {
|
|
15
15
|
__name(this, "Actor");
|
|
@@ -68,7 +68,7 @@ var Actor = class extends Base {
|
|
|
68
68
|
return span(`${this.name}:${name}`, fn, this.tracer);
|
|
69
69
|
}
|
|
70
70
|
async spanAsync(name, fn) {
|
|
71
|
-
return await
|
|
71
|
+
return await spanRootAsync(`${this.name}:${name}`, fn, this.tracer);
|
|
72
72
|
}
|
|
73
73
|
/**
|
|
74
74
|
* Called by the Orchestrator when the actor is activated.
|
|
@@ -236,9 +236,9 @@ var ChainHeadUpdateActor = class _ChainHeadUpdateActor extends Actor {
|
|
|
236
236
|
const candidateBlockNumberDisplay = `0x${toHex(candidateBlockNumber)}`;
|
|
237
237
|
const currentBlockNumber = currentHead?.block ?? -1;
|
|
238
238
|
if (candidateBlockNumber > currentBlockNumber) {
|
|
239
|
-
this.logger?.log("Found more recent head:", candidateBlockNumberDisplay);
|
|
239
|
+
this.logger?.log("Found more recent head:", candidateBlockNumber, candidateBlockNumberDisplay);
|
|
240
240
|
await this.chainIterator.updateHead(candidateBlock);
|
|
241
|
-
this.logger?.log("Updated head:", candidateBlockNumberDisplay);
|
|
241
|
+
this.logger?.log("Updated head:", candidateBlockNumber, candidateBlockNumberDisplay);
|
|
242
242
|
}
|
|
243
243
|
}
|
|
244
244
|
};
|
|
@@ -527,9 +527,9 @@ var initHealthEndpoints = /* @__PURE__ */ __name((params) => {
|
|
|
527
527
|
}, "initHealthEndpoints");
|
|
528
528
|
|
|
529
529
|
// src/orchestration/initServices.ts
|
|
530
|
-
import { assertEx as
|
|
530
|
+
import { assertEx as assertEx18 } from "@xylabs/assert";
|
|
531
531
|
import { asAddress as asAddress2 } from "@xylabs/hex";
|
|
532
|
-
import { isDefined as
|
|
532
|
+
import { isDefined as isDefined12 } from "@xylabs/typeof";
|
|
533
533
|
import { balanceSummaryRepositoryFromMap, BaseTimeSyncService, initTelemetry, startupSpanAsync as startupSpanAsync7, validateHydratedBlockState } from "@xyo-network/chain-sdk";
|
|
534
534
|
|
|
535
535
|
// src/orchestration/archivists/ChainFinalized/archivist.ts
|
|
@@ -552,13 +552,14 @@ var getStoreDirectory = /* @__PURE__ */ __name((name, storageRoot, kind) => {
|
|
|
552
552
|
|
|
553
553
|
// src/orchestration/archivists/lib/localPersistentArchivist.ts
|
|
554
554
|
var DEFAULT_STORAGE_ROOT = Path2.join(process.cwd(), ".store");
|
|
555
|
-
var getLocalPersistentArchivist = /* @__PURE__ */ __name((dbName, storeName, storageRoot, kind = "lmdb") => {
|
|
555
|
+
var getLocalPersistentArchivist = /* @__PURE__ */ __name((name, dbName, storeName, storageRoot, kind = "lmdb") => {
|
|
556
556
|
switch (kind) {
|
|
557
557
|
case "lmdb": {
|
|
558
558
|
const root = storageRoot ?? DEFAULT_STORAGE_ROOT;
|
|
559
559
|
return LmdbArchivist.create({
|
|
560
560
|
account: "random",
|
|
561
561
|
config: {
|
|
562
|
+
name,
|
|
562
563
|
clearStoreOnStart: false,
|
|
563
564
|
dbName,
|
|
564
565
|
location: getStoreDirectory(dbName, root, "lmdb"),
|
|
@@ -577,7 +578,7 @@ var initLocalChainFinalizedArchivist = /* @__PURE__ */ __name(async ({ config: c
|
|
|
577
578
|
return await mutex.runExclusive(async () => {
|
|
578
579
|
if (singleton) return singleton;
|
|
579
580
|
const { root } = config3.storage;
|
|
580
|
-
singleton = await getLocalPersistentArchivist("chain", "finalized", root);
|
|
581
|
+
singleton = await getLocalPersistentArchivist("local-finalized-chain", "chain", "finalized", root);
|
|
581
582
|
return singleton;
|
|
582
583
|
});
|
|
583
584
|
}, "initLocalChainFinalizedArchivist");
|
|
@@ -782,7 +783,7 @@ var initLocalStakeIntentStateArchivist = /* @__PURE__ */ __name(async ({ config:
|
|
|
782
783
|
return await mutex11.runExclusive(async () => {
|
|
783
784
|
if (singleton11) return singleton11;
|
|
784
785
|
const { root } = config3.storage;
|
|
785
|
-
singleton11 = await getLocalPersistentArchivist("stakeIntent", "state", root);
|
|
786
|
+
singleton11 = await getLocalPersistentArchivist("local-stake-intent-state", "stakeIntent", "state", root);
|
|
786
787
|
return assertEx9(singleton11, () => new Error("Failed to initialize stake intent state archivist"));
|
|
787
788
|
});
|
|
788
789
|
}, "initLocalStakeIntentStateArchivist");
|
|
@@ -1089,30 +1090,136 @@ var init = /* @__PURE__ */ __name((params) => {
|
|
|
1089
1090
|
return chainStakeServiceSingleton2;
|
|
1090
1091
|
}, "init");
|
|
1091
1092
|
|
|
1092
|
-
// src/orchestration/services/implementation/head.ts
|
|
1093
|
-
import {
|
|
1094
|
-
import {
|
|
1095
|
-
import {
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
await chainSubmissionsArchivistWrite.insert(flattenHydratedBlock2(block));
|
|
1103
|
-
while (true) {
|
|
1104
|
-
const result = await chainArchivist.get([
|
|
1105
|
-
bw._hash
|
|
1106
|
-
]);
|
|
1107
|
-
if (result.length > 0) break;
|
|
1108
|
-
await delay(1e3);
|
|
1109
|
-
}
|
|
1110
|
-
return bw;
|
|
1093
|
+
// src/orchestration/services/implementation/head/head.ts
|
|
1094
|
+
import { assertEx as assertEx16 } from "@xylabs/assert";
|
|
1095
|
+
import { isDefined as isDefined11 } from "@xylabs/typeof";
|
|
1096
|
+
import { findMostRecentBlock as findMostRecentBlock2 } from "@xyo-network/chain-sdk";
|
|
1097
|
+
|
|
1098
|
+
// src/orchestration/services/implementation/head/createBootstrapHead.ts
|
|
1099
|
+
import { ZERO_ADDRESS as ZERO_ADDRESS2 } from "@xylabs/hex";
|
|
1100
|
+
import { createGenesisBlock } from "@xyo-network/chain-sdk";
|
|
1101
|
+
var createBootstrapHead = /* @__PURE__ */ __name(async (account) => {
|
|
1102
|
+
return await createGenesisBlock(account, ZERO_ADDRESS2, 10000000n, account.address);
|
|
1111
1103
|
}, "createBootstrapHead");
|
|
1112
|
-
|
|
1104
|
+
|
|
1105
|
+
// src/orchestration/services/implementation/head/createForkedHead/getBridgeDestinationObservation.ts
|
|
1106
|
+
import { BridgeDestinationObservationSchema, buildNextBlock } from "@xyo-network/chain-sdk";
|
|
1107
|
+
import { PayloadBuilder as PayloadBuilder4 } from "@xyo-network/payload-builder";
|
|
1108
|
+
|
|
1109
|
+
// src/orchestration/services/implementation/head/createForkedHead/config/getBridgeDestinationDetails.ts
|
|
1110
|
+
import { toHex as toHex5 } from "@xylabs/hex";
|
|
1111
|
+
|
|
1112
|
+
// src/orchestration/services/implementation/head/createForkedHead/config/getForkDetails.ts
|
|
1113
|
+
import { toHex as toHex4 } from "@xylabs/hex";
|
|
1114
|
+
import { AttoXL1ConvertFactor } from "@xyo-network/xl1-protocol";
|
|
1115
|
+
var getForkBlockReward = /* @__PURE__ */ __name(() => {
|
|
1116
|
+
return 18000000000n * AttoXL1ConvertFactor.xl1;
|
|
1117
|
+
}, "getForkBlockReward");
|
|
1118
|
+
var getForkBlockRewardHex = /* @__PURE__ */ __name(() => {
|
|
1119
|
+
return toHex4(getForkBlockReward());
|
|
1120
|
+
}, "getForkBlockRewardHex");
|
|
1121
|
+
|
|
1122
|
+
// src/orchestration/services/implementation/head/createForkedHead/config/getBridgeDestinationDetails.ts
|
|
1123
|
+
var ethChainId = toHex5("0x1");
|
|
1124
|
+
var bridgeableTokenContract = toHex5("0x7789e11BB83b398A8Cca8E8D582B33F91499D6f5");
|
|
1125
|
+
var bridgeDestAddress = toHex5("0xe53218d47913b5f9E58bb74F0a0eD790bbF21972");
|
|
1126
|
+
var destConfirmation = toHex5("0x772ee028f9ad291ec692912c1a33ecd4409e71383fe06f6ebf39f7cdbb779069");
|
|
1127
|
+
var getBridgeDestChainId = /* @__PURE__ */ __name(() => ethChainId, "getBridgeDestChainId");
|
|
1128
|
+
var getBridgeDestToken = /* @__PURE__ */ __name(() => bridgeableTokenContract, "getBridgeDestToken");
|
|
1129
|
+
var getBridgeDestAddress = /* @__PURE__ */ __name(() => bridgeDestAddress, "getBridgeDestAddress");
|
|
1130
|
+
var getBridgeDestAmount = /* @__PURE__ */ __name(() => getForkBlockRewardHex(), "getBridgeDestAmount");
|
|
1131
|
+
var getBridgeDestConfirmation = /* @__PURE__ */ __name(() => destConfirmation, "getBridgeDestConfirmation");
|
|
1132
|
+
var getBridgeDestinationDetails = /* @__PURE__ */ __name(() => {
|
|
1133
|
+
return {
|
|
1134
|
+
dest: getBridgeDestChainId(),
|
|
1135
|
+
destToken: getBridgeDestToken(),
|
|
1136
|
+
destAddress: getBridgeDestAddress(),
|
|
1137
|
+
destAmount: getBridgeDestAmount()
|
|
1138
|
+
};
|
|
1139
|
+
}, "getBridgeDestinationDetails");
|
|
1140
|
+
|
|
1141
|
+
// src/orchestration/services/implementation/head/createForkedHead/config/getBridgeSourceDetails.ts
|
|
1142
|
+
var getBridgeSrcChainId = /* @__PURE__ */ __name((chainService) => chainService.chainId, "getBridgeSrcChainId");
|
|
1143
|
+
var getBridgeSrcAddress = /* @__PURE__ */ __name((account) => account.address, "getBridgeSrcAddress");
|
|
1144
|
+
var getBridgeSrcToken = /* @__PURE__ */ __name((chainService) => chainService.chainId, "getBridgeSrcToken");
|
|
1145
|
+
var getBridgeSrcAmount = /* @__PURE__ */ __name(() => getForkBlockRewardHex(), "getBridgeSrcAmount");
|
|
1146
|
+
var getBridgeSourceDetails = /* @__PURE__ */ __name((account, chainService) => {
|
|
1147
|
+
return {
|
|
1148
|
+
src: getBridgeSrcChainId(chainService),
|
|
1149
|
+
srcAddress: getBridgeSrcAddress(account),
|
|
1150
|
+
srcToken: getBridgeSrcToken(chainService),
|
|
1151
|
+
srcAmount: getBridgeSrcAmount()
|
|
1152
|
+
};
|
|
1153
|
+
}, "getBridgeSourceDetails");
|
|
1154
|
+
|
|
1155
|
+
// src/orchestration/services/implementation/head/createForkedHead/getBridgeDestinationObservation.ts
|
|
1156
|
+
var getBridgeDestinationObservation = /* @__PURE__ */ __name(async (previousBlock, account, chainService) => {
|
|
1157
|
+
const bridgeDestinationObservationFields = {
|
|
1158
|
+
...getBridgeSourceDetails(account, chainService),
|
|
1159
|
+
...getBridgeDestinationDetails(),
|
|
1160
|
+
destConfirmation: getBridgeDestConfirmation()
|
|
1161
|
+
};
|
|
1162
|
+
const bridgeDestinationObservation = new PayloadBuilder4({
|
|
1163
|
+
schema: BridgeDestinationObservationSchema
|
|
1164
|
+
}).fields(bridgeDestinationObservationFields).build();
|
|
1165
|
+
return await buildNextBlock(previousBlock[0], [], [
|
|
1166
|
+
bridgeDestinationObservation
|
|
1167
|
+
], [
|
|
1168
|
+
account
|
|
1169
|
+
]);
|
|
1170
|
+
}, "getBridgeDestinationObservation");
|
|
1171
|
+
|
|
1172
|
+
// src/orchestration/services/implementation/head/createForkedHead/getBridgeIntent.ts
|
|
1173
|
+
import { BridgeIntentSchema, buildNextBlock as buildNextBlock2, createTransferPayload, XYO_BRIDGE_ADDRESS } from "@xyo-network/chain-sdk";
|
|
1174
|
+
import { PayloadBuilder as PayloadBuilder5 } from "@xyo-network/payload-builder";
|
|
1175
|
+
var getBridgeIntent = /* @__PURE__ */ __name(async (previousBlock, account, chainService) => {
|
|
1176
|
+
const transferPayload = createTransferPayload(account.address, {
|
|
1177
|
+
[XYO_BRIDGE_ADDRESS]: getForkBlockReward()
|
|
1178
|
+
});
|
|
1179
|
+
const nonce = `${Date.now()}`;
|
|
1180
|
+
const bridgeIntentFields = {
|
|
1181
|
+
...getBridgeSourceDetails(account, chainService),
|
|
1182
|
+
...getBridgeDestinationDetails(),
|
|
1183
|
+
nonce
|
|
1184
|
+
};
|
|
1185
|
+
const bridgeIntent = new PayloadBuilder5({
|
|
1186
|
+
schema: BridgeIntentSchema
|
|
1187
|
+
}).fields(bridgeIntentFields).build();
|
|
1188
|
+
return await buildNextBlock2(previousBlock[0], [], [
|
|
1189
|
+
bridgeIntent,
|
|
1190
|
+
transferPayload
|
|
1191
|
+
], [
|
|
1192
|
+
account
|
|
1193
|
+
]);
|
|
1194
|
+
}, "getBridgeIntent");
|
|
1195
|
+
|
|
1196
|
+
// src/orchestration/services/implementation/head/createForkedHead/getBridgeSourceObservation.ts
|
|
1197
|
+
import { BridgeSourceObservationSchema, buildNextBlock as buildNextBlock3 } from "@xyo-network/chain-sdk";
|
|
1198
|
+
import { PayloadBuilder as PayloadBuilder6 } from "@xyo-network/payload-builder";
|
|
1199
|
+
var getBridgeSourceObservation = /* @__PURE__ */ __name(async (previousBlock, account, chainService) => {
|
|
1200
|
+
const srcTxHash = previousBlock[0]._hash;
|
|
1201
|
+
const bridgeSourceObservationFields = {
|
|
1202
|
+
...getBridgeSourceDetails(account, chainService),
|
|
1203
|
+
...getBridgeDestinationDetails(),
|
|
1204
|
+
// Observation
|
|
1205
|
+
srcConfirmation: srcTxHash
|
|
1206
|
+
};
|
|
1207
|
+
const bridgeSourceObservation = new PayloadBuilder6({
|
|
1208
|
+
schema: BridgeSourceObservationSchema
|
|
1209
|
+
}).fields(bridgeSourceObservationFields).build();
|
|
1210
|
+
return await buildNextBlock3(previousBlock[0], [], [
|
|
1211
|
+
bridgeSourceObservation
|
|
1212
|
+
], [
|
|
1213
|
+
account
|
|
1214
|
+
]);
|
|
1215
|
+
}, "getBridgeSourceObservation");
|
|
1216
|
+
|
|
1217
|
+
// src/orchestration/services/implementation/head/createForkedHead/getFirstBlockForNewChain.ts
|
|
1218
|
+
import { buildBlock } from "@xyo-network/chain-sdk";
|
|
1219
|
+
var getFirstBlockForNewChain = /* @__PURE__ */ __name(async (forkBlock, account, chainService) => {
|
|
1113
1220
|
const { _hash: previousBlockHash, block: previousBlockNumber, step_hashes: previousStepHashes, protocol } = forkBlock;
|
|
1114
|
-
const
|
|
1115
|
-
const
|
|
1221
|
+
const chainId = chainService.chainId;
|
|
1222
|
+
const forkBlockReward = getForkBlockReward();
|
|
1116
1223
|
const options = {
|
|
1117
1224
|
blockPayloads: [],
|
|
1118
1225
|
chainId,
|
|
@@ -1125,41 +1232,85 @@ var createForkedHead = /* @__PURE__ */ __name(async (chainSubmissionsArchivistWr
|
|
|
1125
1232
|
txs: [],
|
|
1126
1233
|
protocol,
|
|
1127
1234
|
reward: forkBlockReward,
|
|
1128
|
-
rewardAddress:
|
|
1235
|
+
rewardAddress: account.address
|
|
1129
1236
|
};
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1237
|
+
return await buildBlock(options);
|
|
1238
|
+
}, "getFirstBlockForNewChain");
|
|
1239
|
+
|
|
1240
|
+
// src/orchestration/services/implementation/head/createForkedHead/createForkedHead.ts
|
|
1241
|
+
var createForkedHead = /* @__PURE__ */ __name(async (forkFromBlock, account, chainService) => {
|
|
1242
|
+
const chain = [];
|
|
1243
|
+
const firstBlockForNewChain = await getFirstBlockForNewChain(forkFromBlock, account, chainService);
|
|
1244
|
+
chain.push(firstBlockForNewChain);
|
|
1245
|
+
const bridgeIntent = await getBridgeIntent(firstBlockForNewChain, account, chainService);
|
|
1246
|
+
chain.push(bridgeIntent);
|
|
1247
|
+
const bridgeSourceObservation = await getBridgeSourceObservation(bridgeIntent, account, chainService);
|
|
1248
|
+
chain.push(bridgeSourceObservation);
|
|
1249
|
+
const bridgeDestinationObservation = await getBridgeDestinationObservation(bridgeSourceObservation, account, chainService);
|
|
1250
|
+
chain.push(bridgeDestinationObservation);
|
|
1251
|
+
return chain;
|
|
1141
1252
|
}, "createForkedHead");
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1253
|
+
|
|
1254
|
+
// src/orchestration/services/implementation/head/getForkFromBlock.ts
|
|
1255
|
+
import { asHash, hexFromBigInt } from "@xylabs/hex";
|
|
1256
|
+
import { isDefined as isDefined10 } from "@xylabs/typeof";
|
|
1257
|
+
import { isBlockBoundWitnessWithHashStorageMeta } from "@xyo-network/chain-sdk";
|
|
1258
|
+
var getForkFromBlock = /* @__PURE__ */ __name(async (head, chainService, chainArchivist) => {
|
|
1259
|
+
if (head.chain !== chainService.chainId) {
|
|
1149
1260
|
const forkedAtBigInt = await chainService.forkedAtHash();
|
|
1150
1261
|
const forkedAtHex = hexFromBigInt(forkedAtBigInt);
|
|
1151
1262
|
const forkedAtHash = asHash(forkedAtHex);
|
|
1152
1263
|
if (isDefined10(forkedAtHash)) {
|
|
1153
|
-
const [
|
|
1264
|
+
const [forkedAtBlock] = await chainArchivist.get([
|
|
1154
1265
|
forkedAtHash
|
|
1155
1266
|
]);
|
|
1156
1267
|
const forkedChainId = await chainService.forkedChainId();
|
|
1157
1268
|
const forkedAtBlockNumber = Number(await chainService.forkedAtBlockNumber());
|
|
1158
|
-
if (isBlockBoundWitnessWithHashStorageMeta(
|
|
1159
|
-
|
|
1269
|
+
if (isBlockBoundWitnessWithHashStorageMeta(forkedAtBlock) && forkedAtBlock.chain === forkedChainId && forkedAtBlock.block === forkedAtBlockNumber) {
|
|
1270
|
+
return forkedAtBlock;
|
|
1160
1271
|
}
|
|
1161
1272
|
}
|
|
1162
1273
|
}
|
|
1274
|
+
}, "getForkFromBlock");
|
|
1275
|
+
|
|
1276
|
+
// src/orchestration/services/implementation/head/submitNewChain.ts
|
|
1277
|
+
import { delay } from "@xylabs/delay";
|
|
1278
|
+
import { flattenHydratedBlock as flattenHydratedBlock2 } from "@xyo-network/xl1-protocol-sdk";
|
|
1279
|
+
var submitNewChain = /* @__PURE__ */ __name(async (chain, chainArchivist, chainSubmissionsArchivistWrite) => {
|
|
1280
|
+
for (const block of chain) {
|
|
1281
|
+
const [bw] = block;
|
|
1282
|
+
await chainSubmissionsArchivistWrite.insert(flattenHydratedBlock2(block));
|
|
1283
|
+
while (true) {
|
|
1284
|
+
const result = await chainArchivist.get([
|
|
1285
|
+
bw._hash
|
|
1286
|
+
]);
|
|
1287
|
+
if (result.length > 0) break;
|
|
1288
|
+
await delay(1e3);
|
|
1289
|
+
}
|
|
1290
|
+
}
|
|
1291
|
+
}, "submitNewChain");
|
|
1292
|
+
|
|
1293
|
+
// src/orchestration/services/implementation/head/head.ts
|
|
1294
|
+
var headSingleton;
|
|
1295
|
+
var initHead = /* @__PURE__ */ __name(async (params) => {
|
|
1296
|
+
const { account, chainArchivist, chainSubmissionsArchivistWrite, chainService } = params;
|
|
1297
|
+
if (headSingleton) return headSingleton;
|
|
1298
|
+
let head = await findMostRecentBlock2(chainArchivist);
|
|
1299
|
+
if (head) {
|
|
1300
|
+
const forkFromBlock = await getForkFromBlock(head, chainService, chainArchivist);
|
|
1301
|
+
if (isDefined11(forkFromBlock)) {
|
|
1302
|
+
const chain = await createForkedHead(forkFromBlock, account, chainService);
|
|
1303
|
+
await submitNewChain(chain, chainArchivist, chainSubmissionsArchivistWrite);
|
|
1304
|
+
const newBlock = assertEx16(chain.at(-1), () => new Error("Failed to get new head after forking"));
|
|
1305
|
+
head = newBlock[0];
|
|
1306
|
+
}
|
|
1307
|
+
} else {
|
|
1308
|
+
const genesisBlock = await createBootstrapHead(account);
|
|
1309
|
+
await submitNewChain([
|
|
1310
|
+
genesisBlock
|
|
1311
|
+
], chainArchivist, chainSubmissionsArchivistWrite);
|
|
1312
|
+
head = genesisBlock[0];
|
|
1313
|
+
}
|
|
1163
1314
|
headSingleton = head;
|
|
1164
1315
|
return headSingleton;
|
|
1165
1316
|
}, "initHead");
|
|
@@ -1204,7 +1355,7 @@ var initBlockProducer = /* @__PURE__ */ __name(async (params) => {
|
|
|
1204
1355
|
}, "initBlockProducer");
|
|
1205
1356
|
|
|
1206
1357
|
// src/orchestration/services/implementation/reward.ts
|
|
1207
|
-
import { assertEx as
|
|
1358
|
+
import { assertEx as assertEx17 } from "@xylabs/assert";
|
|
1208
1359
|
import { EvmBlockRewardService, MemoryBlockRewardService } from "@xyo-network/chain-sdk";
|
|
1209
1360
|
var rewardServiceSingleton;
|
|
1210
1361
|
var initBlockRewardService = /* @__PURE__ */ __name((params) => {
|
|
@@ -1226,8 +1377,8 @@ var canUseEvmBlockRewardService = /* @__PURE__ */ __name((params) => canUseEvmPr
|
|
|
1226
1377
|
var initEvmBlockRewardService = /* @__PURE__ */ __name(async (params) => {
|
|
1227
1378
|
if (rewardServiceSingleton) return rewardServiceSingleton;
|
|
1228
1379
|
const { account: paramsAccount } = params;
|
|
1229
|
-
const account =
|
|
1230
|
-
const provider2 =
|
|
1380
|
+
const account = assertEx17(paramsAccount, () => "Error: Account is required");
|
|
1381
|
+
const provider2 = assertEx17(await initEvmProvider(params));
|
|
1231
1382
|
const evmBlockRewardServiceParams = {
|
|
1232
1383
|
...params,
|
|
1233
1384
|
provider: provider2,
|
|
@@ -1337,7 +1488,7 @@ var RuntimeStatusMonitor = class extends LoggerStatusReporter {
|
|
|
1337
1488
|
|
|
1338
1489
|
// src/orchestration/initServices.ts
|
|
1339
1490
|
var isStartable = /* @__PURE__ */ __name((value) => {
|
|
1340
|
-
return
|
|
1491
|
+
return isDefined12(value.start) && typeof value.start === "function";
|
|
1341
1492
|
}, "isStartable");
|
|
1342
1493
|
var initServices = /* @__PURE__ */ __name(async (context) => {
|
|
1343
1494
|
const { config: config3, logger } = context;
|
|
@@ -1463,7 +1614,7 @@ var initServices = /* @__PURE__ */ __name(async (context) => {
|
|
|
1463
1614
|
chainArchivist,
|
|
1464
1615
|
chainIterator
|
|
1465
1616
|
});
|
|
1466
|
-
const rewardAddress =
|
|
1617
|
+
const rewardAddress = isDefined12(config3.producer.rewardAddress) ? assertEx18(asAddress2(config3.producer.rewardAddress), () => "Invalid block reward address provided") : account.address;
|
|
1467
1618
|
const producerParams = {
|
|
1468
1619
|
...validatorParams,
|
|
1469
1620
|
name: "Producer",
|
|
@@ -1504,7 +1655,7 @@ var initServices = /* @__PURE__ */ __name(async (context) => {
|
|
|
1504
1655
|
|
|
1505
1656
|
// src/runCLI.ts
|
|
1506
1657
|
import { deepMerge } from "@xylabs/object";
|
|
1507
|
-
import { isDefined as
|
|
1658
|
+
import { isDefined as isDefined15 } from "@xylabs/typeof";
|
|
1508
1659
|
import { ConfigZod } from "@xyo-network/xl1-protocol-sdk";
|
|
1509
1660
|
import yargs from "yargs";
|
|
1510
1661
|
import { hideBin } from "yargs/helpers";
|
|
@@ -1564,16 +1715,16 @@ var XL1LogoColorizedAscii = `\x1B[38;2;128;128;128m\xA0\xA0\xA0\xA0\xA0\xA0\xA0\
|
|
|
1564
1715
|
// src/initLogger.ts
|
|
1565
1716
|
import { Base as Base2 } from "@xylabs/base";
|
|
1566
1717
|
import { ConsoleLogger, LogLevel, SilentLogger } from "@xylabs/logger";
|
|
1567
|
-
import { isDefined as
|
|
1718
|
+
import { isDefined as isDefined13 } from "@xylabs/typeof";
|
|
1568
1719
|
var initLogger = /* @__PURE__ */ __name((config3) => {
|
|
1569
1720
|
let logger;
|
|
1570
1721
|
if (config3.silent) {
|
|
1571
1722
|
logger = new SilentLogger();
|
|
1572
1723
|
} else {
|
|
1573
1724
|
let level;
|
|
1574
|
-
if (
|
|
1725
|
+
if (isDefined13(config3.logLevel)) {
|
|
1575
1726
|
const parsed = LogLevel[config3.logLevel.toLowerCase()];
|
|
1576
|
-
if (
|
|
1727
|
+
if (isDefined13(parsed)) level = parsed;
|
|
1577
1728
|
}
|
|
1578
1729
|
logger = new ConsoleLogger(level);
|
|
1579
1730
|
}
|
|
@@ -1599,7 +1750,7 @@ var optionsFromGlobalZodRegistry = /* @__PURE__ */ __name(() => {
|
|
|
1599
1750
|
}, "optionsFromGlobalZodRegistry");
|
|
1600
1751
|
|
|
1601
1752
|
// src/tryParseConfig.ts
|
|
1602
|
-
import { isDefined as
|
|
1753
|
+
import { isDefined as isDefined14, isNull } from "@xylabs/typeof";
|
|
1603
1754
|
import { cosmiconfigSync } from "cosmiconfig";
|
|
1604
1755
|
var configName = "xyo";
|
|
1605
1756
|
var configSection = "xl1";
|
|
@@ -1608,7 +1759,7 @@ var tryParseConfig = /* @__PURE__ */ __name(() => {
|
|
|
1608
1759
|
const result = explorer.search();
|
|
1609
1760
|
if (!isNull(result)) {
|
|
1610
1761
|
const section = result?.config?.[configSection];
|
|
1611
|
-
if (
|
|
1762
|
+
if (isDefined14(section) && typeof section === "object") {
|
|
1612
1763
|
return section;
|
|
1613
1764
|
}
|
|
1614
1765
|
}
|
|
@@ -1638,7 +1789,7 @@ var waitForHostPort = /* @__PURE__ */ __name((host, port) => {
|
|
|
1638
1789
|
|
|
1639
1790
|
// src/runCLI.ts
|
|
1640
1791
|
var config;
|
|
1641
|
-
var version =
|
|
1792
|
+
var version = isDefined15("1.14.2") ? "1.14.2" : "unknown";
|
|
1642
1793
|
var getContextFromConfig = /* @__PURE__ */ __name((config3) => {
|
|
1643
1794
|
const logger = initLogger(config3);
|
|
1644
1795
|
const orchestrator = new Orchestrator(logger);
|