@xyo-network/xl1-cli-lib 1.14.1 → 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 +255 -51
- package/dist/node/index.mjs.map +1 -1
- package/dist/node/orchestration/actor/implementation/BalanceActor.d.ts +1 -1
- package/dist/node/orchestration/actor/implementation/BalanceActor.d.ts.map +1 -1
- package/dist/node/orchestration/actor/implementation/ProducerActor.d.ts +1 -1
- package/dist/node/orchestration/actor/implementation/ProducerActor.d.ts.map +1 -1
- package/dist/node/orchestration/actor/implementation/ValidatorActor.d.ts +1 -1
- package/dist/node/orchestration/actor/implementation/ValidatorActor.d.ts.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/initServices.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.d.ts → head/head.d.ts} +2 -1
- 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 +253 -49
- package/dist/node/xl1.mjs.map +1 -1
- package/package.json +13 -13
- package/src/orchestration/actor/implementation/BalanceActor.ts +2 -2
- package/src/orchestration/actor/implementation/ChainHeadUpdateActor.ts +2 -2
- package/src/orchestration/actor/implementation/ProducerActor.ts +4 -4
- package/src/orchestration/actor/implementation/ValidatorActor.ts +4 -4
- 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/initServices.ts +11 -7
- 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/src/spec/BootstrapChain.spec.ts +2 -2
- package/dist/node/orchestration/services/implementation/head.d.ts.map +0 -1
- package/src/orchestration/services/implementation/head.ts +0 -44
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.
|
|
@@ -166,7 +166,7 @@ var BalanceActor = class _BalanceActor extends Actor {
|
|
|
166
166
|
super("BalanceActor", "Balance", params);
|
|
167
167
|
}
|
|
168
168
|
get balanceService() {
|
|
169
|
-
return assertEx(this.params.
|
|
169
|
+
return assertEx(this.params.balance, () => "balanceService not set");
|
|
170
170
|
}
|
|
171
171
|
get chainIterator() {
|
|
172
172
|
return assertEx(this.params.chainIterator, () => "chainIterator not set");
|
|
@@ -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
|
};
|
|
@@ -266,7 +266,7 @@ var ProducerActor = class _ProducerActor extends Actor {
|
|
|
266
266
|
return assertEx3(this.params.account, () => "account not set");
|
|
267
267
|
}
|
|
268
268
|
get balanceService() {
|
|
269
|
-
return assertEx3(this.params.
|
|
269
|
+
return assertEx3(this.params.balance, () => "balanceService not set");
|
|
270
270
|
}
|
|
271
271
|
get chainIterator() {
|
|
272
272
|
return assertEx3(this.params.chainIterator, () => "chainIterator not set");
|
|
@@ -284,7 +284,7 @@ var ProducerActor = class _ProducerActor extends Actor {
|
|
|
284
284
|
return assertEx3(this.params.producer, () => "producer not set");
|
|
285
285
|
}
|
|
286
286
|
get stakeIntentService() {
|
|
287
|
-
return assertEx3(this.params.
|
|
287
|
+
return assertEx3(this.params.stakeIntent, () => "stakeIntentService not set");
|
|
288
288
|
}
|
|
289
289
|
static create(params) {
|
|
290
290
|
return new _ProducerActor(params);
|
|
@@ -413,7 +413,7 @@ var ValidatorActor = class _ValidatorActor extends Actor {
|
|
|
413
413
|
return assertEx4(this.params.account, () => "account not set");
|
|
414
414
|
}
|
|
415
415
|
get balanceService() {
|
|
416
|
-
return assertEx4(this.params.
|
|
416
|
+
return assertEx4(this.params.balance, () => "balanceService not set");
|
|
417
417
|
}
|
|
418
418
|
get chainIterator() {
|
|
419
419
|
return assertEx4(this.params.chainIterator, () => "chainIterator not set");
|
|
@@ -428,7 +428,7 @@ var ValidatorActor = class _ValidatorActor extends Actor {
|
|
|
428
428
|
return assertEx4(this.params.pendingBundledTransactionsArchivistWrite, () => "pendingBundledTransactionsArchivistWrite not set");
|
|
429
429
|
}
|
|
430
430
|
get stakeIntentService() {
|
|
431
|
-
return assertEx4(this.params.
|
|
431
|
+
return assertEx4(this.params.stakeIntent, () => "stakeIntentService not set");
|
|
432
432
|
}
|
|
433
433
|
// protected get validator() {
|
|
434
434
|
// return assertEx(this.params.validator, () => 'validator not set')
|
|
@@ -527,10 +527,10 @@ 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
|
|
533
|
-
import { balanceSummaryRepositoryFromMap, initTelemetry, startupSpanAsync as startupSpanAsync7, validateHydratedBlockState } from "@xyo-network/chain-sdk";
|
|
532
|
+
import { isDefined as isDefined12 } from "@xylabs/typeof";
|
|
533
|
+
import { balanceSummaryRepositoryFromMap, BaseTimeSyncService, initTelemetry, startupSpanAsync as startupSpanAsync7, validateHydratedBlockState } from "@xyo-network/chain-sdk";
|
|
534
534
|
|
|
535
535
|
// src/orchestration/archivists/ChainFinalized/archivist.ts
|
|
536
536
|
import { initArchivistSync, startupSpanAsync } from "@xyo-network/chain-sdk";
|
|
@@ -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,227 @@ var init = /* @__PURE__ */ __name((params) => {
|
|
|
1089
1090
|
return chainStakeServiceSingleton2;
|
|
1090
1091
|
}, "init");
|
|
1091
1092
|
|
|
1092
|
-
// src/orchestration/services/implementation/head.ts
|
|
1093
|
-
import {
|
|
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
|
|
1094
1099
|
import { ZERO_ADDRESS as ZERO_ADDRESS2 } from "@xylabs/hex";
|
|
1095
|
-
import { createGenesisBlock
|
|
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);
|
|
1103
|
+
}, "createBootstrapHead");
|
|
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) => {
|
|
1220
|
+
const { _hash: previousBlockHash, block: previousBlockNumber, step_hashes: previousStepHashes, protocol } = forkBlock;
|
|
1221
|
+
const chainId = chainService.chainId;
|
|
1222
|
+
const forkBlockReward = getForkBlockReward();
|
|
1223
|
+
const options = {
|
|
1224
|
+
blockPayloads: [],
|
|
1225
|
+
chainId,
|
|
1226
|
+
previousBlockHash,
|
|
1227
|
+
previousBlockNumber,
|
|
1228
|
+
previousStepHashes,
|
|
1229
|
+
signers: [
|
|
1230
|
+
account
|
|
1231
|
+
],
|
|
1232
|
+
txs: [],
|
|
1233
|
+
protocol,
|
|
1234
|
+
reward: forkBlockReward,
|
|
1235
|
+
rewardAddress: account.address
|
|
1236
|
+
};
|
|
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;
|
|
1252
|
+
}, "createForkedHead");
|
|
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) {
|
|
1260
|
+
const forkedAtBigInt = await chainService.forkedAtHash();
|
|
1261
|
+
const forkedAtHex = hexFromBigInt(forkedAtBigInt);
|
|
1262
|
+
const forkedAtHash = asHash(forkedAtHex);
|
|
1263
|
+
if (isDefined10(forkedAtHash)) {
|
|
1264
|
+
const [forkedAtBlock] = await chainArchivist.get([
|
|
1265
|
+
forkedAtHash
|
|
1266
|
+
]);
|
|
1267
|
+
const forkedChainId = await chainService.forkedChainId();
|
|
1268
|
+
const forkedAtBlockNumber = Number(await chainService.forkedAtBlockNumber());
|
|
1269
|
+
if (isBlockBoundWitnessWithHashStorageMeta(forkedAtBlock) && forkedAtBlock.chain === forkedChainId && forkedAtBlock.block === forkedAtBlockNumber) {
|
|
1270
|
+
return forkedAtBlock;
|
|
1271
|
+
}
|
|
1272
|
+
}
|
|
1273
|
+
}
|
|
1274
|
+
}, "getForkFromBlock");
|
|
1275
|
+
|
|
1276
|
+
// src/orchestration/services/implementation/head/submitNewChain.ts
|
|
1277
|
+
import { delay } from "@xylabs/delay";
|
|
1096
1278
|
import { flattenHydratedBlock as flattenHydratedBlock2 } from "@xyo-network/xl1-protocol-sdk";
|
|
1097
|
-
var
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
|
|
1107
|
-
|
|
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
|
+
}
|
|
1108
1290
|
}
|
|
1109
|
-
|
|
1110
|
-
|
|
1291
|
+
}, "submitNewChain");
|
|
1292
|
+
|
|
1293
|
+
// src/orchestration/services/implementation/head/head.ts
|
|
1294
|
+
var headSingleton;
|
|
1111
1295
|
var initHead = /* @__PURE__ */ __name(async (params) => {
|
|
1112
|
-
const { account, chainArchivist, chainSubmissionsArchivistWrite } = params;
|
|
1296
|
+
const { account, chainArchivist, chainSubmissionsArchivistWrite, chainService } = params;
|
|
1113
1297
|
if (headSingleton) return headSingleton;
|
|
1114
1298
|
let head = await findMostRecentBlock2(chainArchivist);
|
|
1115
|
-
if (
|
|
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
|
+
}
|
|
1116
1314
|
headSingleton = head;
|
|
1117
1315
|
return headSingleton;
|
|
1118
1316
|
}, "initHead");
|
|
@@ -1157,7 +1355,7 @@ var initBlockProducer = /* @__PURE__ */ __name(async (params) => {
|
|
|
1157
1355
|
}, "initBlockProducer");
|
|
1158
1356
|
|
|
1159
1357
|
// src/orchestration/services/implementation/reward.ts
|
|
1160
|
-
import { assertEx as
|
|
1358
|
+
import { assertEx as assertEx17 } from "@xylabs/assert";
|
|
1161
1359
|
import { EvmBlockRewardService, MemoryBlockRewardService } from "@xyo-network/chain-sdk";
|
|
1162
1360
|
var rewardServiceSingleton;
|
|
1163
1361
|
var initBlockRewardService = /* @__PURE__ */ __name((params) => {
|
|
@@ -1179,8 +1377,8 @@ var canUseEvmBlockRewardService = /* @__PURE__ */ __name((params) => canUseEvmPr
|
|
|
1179
1377
|
var initEvmBlockRewardService = /* @__PURE__ */ __name(async (params) => {
|
|
1180
1378
|
if (rewardServiceSingleton) return rewardServiceSingleton;
|
|
1181
1379
|
const { account: paramsAccount } = params;
|
|
1182
|
-
const account =
|
|
1183
|
-
const provider2 =
|
|
1380
|
+
const account = assertEx17(paramsAccount, () => "Error: Account is required");
|
|
1381
|
+
const provider2 = assertEx17(await initEvmProvider(params));
|
|
1184
1382
|
const evmBlockRewardServiceParams = {
|
|
1185
1383
|
...params,
|
|
1186
1384
|
provider: provider2,
|
|
@@ -1290,7 +1488,7 @@ var RuntimeStatusMonitor = class extends LoggerStatusReporter {
|
|
|
1290
1488
|
|
|
1291
1489
|
// src/orchestration/initServices.ts
|
|
1292
1490
|
var isStartable = /* @__PURE__ */ __name((value) => {
|
|
1293
|
-
return
|
|
1491
|
+
return isDefined12(value.start) && typeof value.start === "function";
|
|
1294
1492
|
}, "isStartable");
|
|
1295
1493
|
var initServices = /* @__PURE__ */ __name(async (context) => {
|
|
1296
1494
|
const { config: config3, logger } = context;
|
|
@@ -1354,7 +1552,8 @@ var initServices = /* @__PURE__ */ __name(async (context) => {
|
|
|
1354
1552
|
...initParams,
|
|
1355
1553
|
account,
|
|
1356
1554
|
chainArchivist,
|
|
1357
|
-
chainSubmissionsArchivistWrite
|
|
1555
|
+
chainSubmissionsArchivistWrite,
|
|
1556
|
+
chainService
|
|
1358
1557
|
}));
|
|
1359
1558
|
const [pendingTransactionsService, rewardService, chainIterator, balanceService] = await Promise.all([
|
|
1360
1559
|
startupSpanAsync7("PendingTransactions", () => initPendingTransactions({
|
|
@@ -1411,7 +1610,11 @@ var initServices = /* @__PURE__ */ __name(async (context) => {
|
|
|
1411
1610
|
validateHydratedBlockState,
|
|
1412
1611
|
...initParams
|
|
1413
1612
|
};
|
|
1414
|
-
const
|
|
1613
|
+
const time = await BaseTimeSyncService.create({
|
|
1614
|
+
chainArchivist,
|
|
1615
|
+
chainIterator
|
|
1616
|
+
});
|
|
1617
|
+
const rewardAddress = isDefined12(config3.producer.rewardAddress) ? assertEx18(asAddress2(config3.producer.rewardAddress), () => "Invalid block reward address provided") : account.address;
|
|
1415
1618
|
const producerParams = {
|
|
1416
1619
|
...validatorParams,
|
|
1417
1620
|
name: "Producer",
|
|
@@ -1421,24 +1624,25 @@ var initServices = /* @__PURE__ */ __name(async (context) => {
|
|
|
1421
1624
|
pendingTransactionsService,
|
|
1422
1625
|
rejectedTransactionsArchivist,
|
|
1423
1626
|
rewardAddress,
|
|
1627
|
+
time,
|
|
1424
1628
|
...initParams
|
|
1425
1629
|
};
|
|
1426
1630
|
const producer = await startupSpanAsync7("Producer", () => initBlockProducer(producerParams));
|
|
1427
1631
|
const result = {
|
|
1428
1632
|
account,
|
|
1429
|
-
balanceService,
|
|
1633
|
+
balance: balanceService,
|
|
1430
1634
|
chainArchivist,
|
|
1431
1635
|
chainContractViewer,
|
|
1432
1636
|
chainIterator,
|
|
1433
1637
|
chainStaker,
|
|
1434
1638
|
chainStakeViewer,
|
|
1435
1639
|
chainSubmissionsArchivistWrite,
|
|
1436
|
-
electionService,
|
|
1640
|
+
election: electionService,
|
|
1437
1641
|
pendingBundledTransactionsArchivistWrite,
|
|
1438
|
-
pendingTransactionsService,
|
|
1642
|
+
pendingTransactions: pendingTransactionsService,
|
|
1439
1643
|
producer,
|
|
1440
|
-
rewardService,
|
|
1441
|
-
stakeIntentService
|
|
1644
|
+
reward: rewardService,
|
|
1645
|
+
stakeIntent: stakeIntentService
|
|
1442
1646
|
};
|
|
1443
1647
|
logger?.log("All services created. Starting...");
|
|
1444
1648
|
const startableServices = [
|
|
@@ -1451,7 +1655,7 @@ var initServices = /* @__PURE__ */ __name(async (context) => {
|
|
|
1451
1655
|
|
|
1452
1656
|
// src/runCLI.ts
|
|
1453
1657
|
import { deepMerge } from "@xylabs/object";
|
|
1454
|
-
import { isDefined as
|
|
1658
|
+
import { isDefined as isDefined15 } from "@xylabs/typeof";
|
|
1455
1659
|
import { ConfigZod } from "@xyo-network/xl1-protocol-sdk";
|
|
1456
1660
|
import yargs from "yargs";
|
|
1457
1661
|
import { hideBin } from "yargs/helpers";
|
|
@@ -1511,16 +1715,16 @@ var XL1LogoColorizedAscii = `\x1B[38;2;128;128;128m\xA0\xA0\xA0\xA0\xA0\xA0\xA0\
|
|
|
1511
1715
|
// src/initLogger.ts
|
|
1512
1716
|
import { Base as Base2 } from "@xylabs/base";
|
|
1513
1717
|
import { ConsoleLogger, LogLevel, SilentLogger } from "@xylabs/logger";
|
|
1514
|
-
import { isDefined as
|
|
1718
|
+
import { isDefined as isDefined13 } from "@xylabs/typeof";
|
|
1515
1719
|
var initLogger = /* @__PURE__ */ __name((config3) => {
|
|
1516
1720
|
let logger;
|
|
1517
1721
|
if (config3.silent) {
|
|
1518
1722
|
logger = new SilentLogger();
|
|
1519
1723
|
} else {
|
|
1520
1724
|
let level;
|
|
1521
|
-
if (
|
|
1725
|
+
if (isDefined13(config3.logLevel)) {
|
|
1522
1726
|
const parsed = LogLevel[config3.logLevel.toLowerCase()];
|
|
1523
|
-
if (
|
|
1727
|
+
if (isDefined13(parsed)) level = parsed;
|
|
1524
1728
|
}
|
|
1525
1729
|
logger = new ConsoleLogger(level);
|
|
1526
1730
|
}
|
|
@@ -1546,7 +1750,7 @@ var optionsFromGlobalZodRegistry = /* @__PURE__ */ __name(() => {
|
|
|
1546
1750
|
}, "optionsFromGlobalZodRegistry");
|
|
1547
1751
|
|
|
1548
1752
|
// src/tryParseConfig.ts
|
|
1549
|
-
import { isDefined as
|
|
1753
|
+
import { isDefined as isDefined14, isNull } from "@xylabs/typeof";
|
|
1550
1754
|
import { cosmiconfigSync } from "cosmiconfig";
|
|
1551
1755
|
var configName = "xyo";
|
|
1552
1756
|
var configSection = "xl1";
|
|
@@ -1555,7 +1759,7 @@ var tryParseConfig = /* @__PURE__ */ __name(() => {
|
|
|
1555
1759
|
const result = explorer.search();
|
|
1556
1760
|
if (!isNull(result)) {
|
|
1557
1761
|
const section = result?.config?.[configSection];
|
|
1558
|
-
if (
|
|
1762
|
+
if (isDefined14(section) && typeof section === "object") {
|
|
1559
1763
|
return section;
|
|
1560
1764
|
}
|
|
1561
1765
|
}
|
|
@@ -1585,7 +1789,7 @@ var waitForHostPort = /* @__PURE__ */ __name((host, port) => {
|
|
|
1585
1789
|
|
|
1586
1790
|
// src/runCLI.ts
|
|
1587
1791
|
var config;
|
|
1588
|
-
var version =
|
|
1792
|
+
var version = isDefined15("1.14.2") ? "1.14.2" : "unknown";
|
|
1589
1793
|
var getContextFromConfig = /* @__PURE__ */ __name((config3) => {
|
|
1590
1794
|
const logger = initLogger(config3);
|
|
1591
1795
|
const orchestrator = new Orchestrator(logger);
|