@xyo-network/xl1-protocol-sdk 1.8.1 → 1.8.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/neutral/ChainServiceCollection.d.ts +2 -2
- package/dist/neutral/ChainServiceCollection.d.ts.map +1 -1
- package/dist/neutral/ChainServiceCollectionV2.d.ts +2 -2
- package/dist/neutral/ChainServiceCollectionV2.d.ts.map +1 -1
- package/dist/neutral/index.mjs +105 -7
- package/dist/neutral/index.mjs.map +1 -1
- package/dist/neutral/transaction/buildTransaction.d.ts +1 -1
- package/dist/neutral/transaction/buildTransaction.d.ts.map +1 -1
- package/dist/neutral/transaction/buildUnsignedTransaction.d.ts +5 -0
- package/dist/neutral/transaction/buildUnsignedTransaction.d.ts.map +1 -0
- package/dist/neutral/transaction/confirmSubmittedTransaction.d.ts +28 -0
- package/dist/neutral/transaction/confirmSubmittedTransaction.d.ts.map +1 -0
- package/dist/neutral/transaction/index.d.ts +3 -0
- package/dist/neutral/transaction/index.d.ts.map +1 -1
- package/dist/neutral/transaction/signTransaction.d.ts +4 -0
- package/dist/neutral/transaction/signTransaction.d.ts.map +1 -0
- package/package.json +3 -1
- package/src/ChainServiceCollection.ts +2 -2
- package/src/ChainServiceCollectionV2.ts +2 -2
- package/src/transaction/buildTransaction.ts +4 -4
- package/src/transaction/buildUnsignedTransaction.ts +57 -0
- package/src/transaction/confirmSubmittedTransaction.ts +62 -0
- package/src/transaction/index.ts +3 -0
- package/src/transaction/signTransaction.ts +18 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ArchivistInstance, WriteArchivist } from '@xyo-network/archivist-model';
|
|
2
2
|
import type { WalletInstance } from '@xyo-network/wallet-model';
|
|
3
|
-
import type { AccountBalanceService, BlockProducerService, BlockRewardService, ChainContractViewer, ChainStaker, ChainStakeViewer, ElectionService,
|
|
3
|
+
import type { AccountBalanceService, BlockProducerService, BlockRewardService, ChainContractViewer, ChainStaker, ChainStakeViewer, ElectionService, EventingChainBlockNumberIteratorService, StakeIntentService } from '@xyo-network/xl1-protocol';
|
|
4
4
|
/** @deprecated use ChainServiceCollectionV2 */
|
|
5
5
|
export interface ChainServiceCollection {
|
|
6
6
|
/**
|
|
@@ -23,7 +23,7 @@ export interface ChainServiceCollection {
|
|
|
23
23
|
/**
|
|
24
24
|
* The chain iterator
|
|
25
25
|
*/
|
|
26
|
-
chainIterator?:
|
|
26
|
+
chainIterator?: EventingChainBlockNumberIteratorService;
|
|
27
27
|
/**
|
|
28
28
|
* Service for viewing stake information
|
|
29
29
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChainServiceCollection.d.ts","sourceRoot":"","sources":["../../src/ChainServiceCollection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AACrF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC/D,OAAO,KAAK,EACV,qBAAqB,EAAE,oBAAoB,EAC3C,kBAAkB,EAAE,mBAAmB,EAAE,WAAW,EAAE,gBAAgB,EAAE,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"ChainServiceCollection.d.ts","sourceRoot":"","sources":["../../src/ChainServiceCollection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AACrF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC/D,OAAO,KAAK,EACV,qBAAqB,EAAE,oBAAoB,EAC3C,kBAAkB,EAAE,mBAAmB,EAAE,WAAW,EAAE,gBAAgB,EAAE,eAAe,EAAE,uCAAuC,EAChI,kBAAkB,EACnB,MAAM,2BAA2B,CAAA;AAElC,+CAA+C;AAC/C,MAAM,WAAW,sBAAsB;IAErC;;OAEG;IACH,OAAO,EAAE,cAAc,CAAA;IACvB;;OAEG;IACH,cAAc,EAAE,qBAAqB,CAAA;IACrC;;OAEG;IACH,cAAc,EAAE,iBAAiB,CAAA;IACjC;;;OAGG;IACH,mBAAmB,EAAE,mBAAmB,CAAA;IACxC;;OAEG;IACH,aAAa,CAAC,EAAE,uCAAuC,CAAA;IACvD;;OAEG;IACH,gBAAgB,EAAE,gBAAgB,CAAA;IAClC;;OAEG;IACH,WAAW,EAAE,WAAW,CAAA;IACxB;;OAEG;IACH,8BAA8B,EAAE,cAAc,CAAA;IAC9C;;OAEG;IACH,eAAe,EAAE,eAAe,CAAA;IAChC;;;OAGG;IACH,wCAAwC,EAAE,iBAAiB,CAAA;IAC3D;;OAEG;IACH,QAAQ,EAAE,oBAAoB,CAAA;IAC9B;;OAEG;IACH,aAAa,EAAE,kBAAkB,CAAA;IACjC;;OAEG;IACH,kBAAkB,EAAE,kBAAkB,CAAA;CACvC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ArchivistInstance, WriteArchivist } from '@xyo-network/archivist-model';
|
|
2
2
|
import type { WalletInstance } from '@xyo-network/wallet-model';
|
|
3
|
-
import type { AccountBalanceServiceV2, BlockProducerService, BlockRewardService, ChainContractViewer, ChainStaker, ChainStakeViewer, ElectionService,
|
|
3
|
+
import type { AccountBalanceServiceV2, BlockProducerService, BlockRewardService, ChainContractViewer, ChainStaker, ChainStakeViewer, ElectionService, EventingChainBlockNumberIteratorService, PendingTransactionsService, StakeIntentService } from '@xyo-network/xl1-protocol';
|
|
4
4
|
export interface ChainServiceCollectionV2 {
|
|
5
5
|
/**
|
|
6
6
|
* The account which is used to sign transactions
|
|
@@ -22,7 +22,7 @@ export interface ChainServiceCollectionV2 {
|
|
|
22
22
|
/**
|
|
23
23
|
* The chain iterator
|
|
24
24
|
*/
|
|
25
|
-
chainIterator?:
|
|
25
|
+
chainIterator?: EventingChainBlockNumberIteratorService;
|
|
26
26
|
/**
|
|
27
27
|
* Service for viewing stake information
|
|
28
28
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChainServiceCollectionV2.d.ts","sourceRoot":"","sources":["../../src/ChainServiceCollectionV2.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AACrF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC/D,OAAO,KAAK,EACV,uBAAuB,EAAE,oBAAoB,EAC7C,kBAAkB,EAAE,mBAAmB,EAAE,WAAW,EAAE,gBAAgB,EAAE,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"ChainServiceCollectionV2.d.ts","sourceRoot":"","sources":["../../src/ChainServiceCollectionV2.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AACrF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC/D,OAAO,KAAK,EACV,uBAAuB,EAAE,oBAAoB,EAC7C,kBAAkB,EAAE,mBAAmB,EAAE,WAAW,EAAE,gBAAgB,EAAE,eAAe,EAAE,uCAAuC,EAChI,0BAA0B,EAC1B,kBAAkB,EACnB,MAAM,2BAA2B,CAAA;AAElC,MAAM,WAAW,wBAAwB;IAEvC;;OAEG;IACH,OAAO,EAAE,cAAc,CAAA;IACvB;;OAEG;IACH,cAAc,EAAE,uBAAuB,CAAA;IACvC;;OAEG;IACH,cAAc,EAAE,iBAAiB,CAAA;IACjC;;;OAGG;IACH,mBAAmB,EAAE,mBAAmB,CAAA;IACxC;;OAEG;IACH,aAAa,CAAC,EAAE,uCAAuC,CAAA;IACvD;;OAEG;IACH,gBAAgB,EAAE,gBAAgB,CAAA;IAClC;;OAEG;IACH,WAAW,EAAE,WAAW,CAAA;IACxB;;OAEG;IACH,8BAA8B,EAAE,cAAc,CAAA;IAC9C;;OAEG;IACH,eAAe,EAAE,eAAe,CAAA;IAChC;;;OAGG;IACH,wCAAwC,EAAE,iBAAiB,CAAA;IAC3D;;OAEG;IACH,0BAA0B,EAAE,0BAA0B,CAAA;IACtD;;OAEG;IACH,QAAQ,EAAE,oBAAoB,CAAA;IAC9B;;OAEG;IACH,aAAa,EAAE,kBAAkB,CAAA;IACjC;;OAEG;IACH,kBAAkB,EAAE,kBAAkB,CAAA;CACvC"}
|
package/dist/neutral/index.mjs
CHANGED
|
@@ -497,7 +497,7 @@ import { toHex as toHex2 } from "@xylabs/hex";
|
|
|
497
497
|
import { BoundWitnessBuilder } from "@xyo-network/boundwitness-builder";
|
|
498
498
|
import { PayloadBuilder as PayloadBuilder2 } from "@xyo-network/payload-builder";
|
|
499
499
|
import { defaultTransactionFees } from "@xyo-network/xl1-protocol";
|
|
500
|
-
async function buildTransaction(chain,
|
|
500
|
+
async function buildTransaction(chain, onChainPayloads, offChainPayloads, signer, nbf, exp, from, fees = defaultTransactionFees) {
|
|
501
501
|
if (from === void 0 && Array.isArray(signer)) {
|
|
502
502
|
throw new Error("from is required when signer is an array");
|
|
503
503
|
}
|
|
@@ -512,7 +512,7 @@ async function buildTransaction(chain, elevatedPayloads, additionalPayloads, sig
|
|
|
512
512
|
nbf,
|
|
513
513
|
exp
|
|
514
514
|
};
|
|
515
|
-
const elevatedHashes = await PayloadBuilder2.hashes(
|
|
515
|
+
const elevatedHashes = await PayloadBuilder2.hashes(onChainPayloads);
|
|
516
516
|
const script = [];
|
|
517
517
|
for (const elevatedHash of elevatedHashes) {
|
|
518
518
|
script.push(`elevate|${elevatedHash}`);
|
|
@@ -527,8 +527,8 @@ async function buildTransaction(chain, elevatedPayloads, additionalPayloads, sig
|
|
|
527
527
|
const [tx, txPayloads] = await new BoundWitnessBuilder().fields(fields).meta({
|
|
528
528
|
$signatures: []
|
|
529
529
|
}).payloads([
|
|
530
|
-
...
|
|
531
|
-
...
|
|
530
|
+
...onChainPayloads,
|
|
531
|
+
...offChainPayloads
|
|
532
532
|
]).signers(Array.isArray(signer) ? signer : [
|
|
533
533
|
signer
|
|
534
534
|
]).build();
|
|
@@ -539,6 +539,77 @@ async function buildTransaction(chain, elevatedPayloads, additionalPayloads, sig
|
|
|
539
539
|
}
|
|
540
540
|
__name(buildTransaction, "buildTransaction");
|
|
541
541
|
|
|
542
|
+
// src/transaction/buildUnsignedTransaction.ts
|
|
543
|
+
import { toHex as toHex3 } from "@xylabs/hex";
|
|
544
|
+
import { BoundWitnessBuilder as BoundWitnessBuilder2 } from "@xyo-network/boundwitness-builder";
|
|
545
|
+
import { PayloadBuilder as PayloadBuilder3 } from "@xyo-network/payload-builder";
|
|
546
|
+
import { defaultTransactionFees as defaultTransactionFees2 } from "@xyo-network/xl1-protocol";
|
|
547
|
+
async function buildUnsignedTransaction(chain, onChainPayloads, offChainPayloads, nbf, exp, from, fees = defaultTransactionFees2) {
|
|
548
|
+
const txBoundWitnessFields = {
|
|
549
|
+
chain,
|
|
550
|
+
fees: {
|
|
551
|
+
base: toHex3(fees.base),
|
|
552
|
+
gasLimit: toHex3(fees.gasLimit),
|
|
553
|
+
gasPrice: toHex3(fees.gasPrice),
|
|
554
|
+
priority: toHex3(fees.priority)
|
|
555
|
+
},
|
|
556
|
+
nbf,
|
|
557
|
+
exp
|
|
558
|
+
};
|
|
559
|
+
const elevatedHashes = await PayloadBuilder3.hashes(onChainPayloads);
|
|
560
|
+
const script = [];
|
|
561
|
+
for (const elevatedHash of elevatedHashes) {
|
|
562
|
+
script.push(`elevate|${elevatedHash}`);
|
|
563
|
+
}
|
|
564
|
+
const fields = {
|
|
565
|
+
...txBoundWitnessFields,
|
|
566
|
+
from
|
|
567
|
+
};
|
|
568
|
+
if (script.length > 0) {
|
|
569
|
+
fields.script = script;
|
|
570
|
+
}
|
|
571
|
+
const [tx, txPayloads] = await new BoundWitnessBuilder2().fields(fields).meta({
|
|
572
|
+
$signatures: []
|
|
573
|
+
}).payloads([
|
|
574
|
+
...onChainPayloads,
|
|
575
|
+
...offChainPayloads
|
|
576
|
+
]).build();
|
|
577
|
+
return [
|
|
578
|
+
await PayloadBuilder3.addStorageMeta(tx),
|
|
579
|
+
await PayloadBuilder3.addStorageMeta(txPayloads)
|
|
580
|
+
];
|
|
581
|
+
}
|
|
582
|
+
__name(buildUnsignedTransaction, "buildUnsignedTransaction");
|
|
583
|
+
|
|
584
|
+
// src/transaction/confirmSubmittedTransaction.ts
|
|
585
|
+
import { delay } from "@xylabs/delay";
|
|
586
|
+
import { isDefined as isDefined3 } from "@xylabs/typeof";
|
|
587
|
+
import { PayloadBuilder as PayloadBuilder4 } from "@xyo-network/payload-builder";
|
|
588
|
+
var DEFAULT_CONFIRMATION_ATTEMPTS = 20;
|
|
589
|
+
var DEFAULT_DELAY_BETWEEN_ATTEMPTS = 1e3;
|
|
590
|
+
var confirmSubmittedTransaction = /* @__PURE__ */ __name(async (viewer, transaction, options) => {
|
|
591
|
+
const { attempts: maxAttempts = DEFAULT_CONFIRMATION_ATTEMPTS, delay: attemptDelay = DEFAULT_DELAY_BETWEEN_ATTEMPTS } = options || {};
|
|
592
|
+
const txBWHash = await PayloadBuilder4.hash(transaction);
|
|
593
|
+
options?.logger?.log("\u2705 confirming transaction:", txBWHash, "\n");
|
|
594
|
+
let attempts = 0;
|
|
595
|
+
while (true) {
|
|
596
|
+
const tx = await viewer.transactionByHash(txBWHash) ?? void 0;
|
|
597
|
+
if (isDefined3(tx)) {
|
|
598
|
+
options?.logger?.log("\u{1F37B} Transaction confirmed:", txBWHash, "\n");
|
|
599
|
+
return tx;
|
|
600
|
+
} else {
|
|
601
|
+
attempts++;
|
|
602
|
+
if (attempts > maxAttempts) {
|
|
603
|
+
options?.logger?.error(`\u26A0\uFE0F Transaction not confirmed after ${maxAttempts} attempts`);
|
|
604
|
+
throw new Error(`Transaction ${txBWHash} not confirmed after ${maxAttempts} attempts`);
|
|
605
|
+
} else {
|
|
606
|
+
options?.logger?.log(`\u{1F504} Transaction not confirmed yet, attempt ${attempts}. Retrying...`, "\n");
|
|
607
|
+
await delay(attemptDelay);
|
|
608
|
+
}
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
}, "confirmSubmittedTransaction");
|
|
612
|
+
|
|
542
613
|
// src/transaction/hydrateTransaction.ts
|
|
543
614
|
import { assertEx as assertEx4 } from "@xylabs/assert";
|
|
544
615
|
import { hydrateTypedBoundWitness, tryHydrateTypedBoundWitness } from "@xyo-network/archivist-model";
|
|
@@ -587,11 +658,11 @@ var hydrateElevatedTransaction = /* @__PURE__ */ __name(async (archivist, hash)
|
|
|
587
658
|
}, "hydrateElevatedTransaction");
|
|
588
659
|
|
|
589
660
|
// src/transaction/primitives/transactionBlockByteCount.ts
|
|
590
|
-
import { PayloadBuilder as
|
|
661
|
+
import { PayloadBuilder as PayloadBuilder5 } from "@xyo-network/payload-builder";
|
|
591
662
|
function transactionBlockByteCount([transaction, payloads]) {
|
|
592
|
-
const cleanTransaction =
|
|
663
|
+
const cleanTransaction = PayloadBuilder5.omitStorageMeta(transaction);
|
|
593
664
|
const transactionBytes = JSON.stringify(cleanTransaction).length;
|
|
594
|
-
const cleanPayloads =
|
|
665
|
+
const cleanPayloads = PayloadBuilder5.omitStorageMeta(payloads);
|
|
595
666
|
return cleanPayloads.reduce((acc, payload) => acc + JSON.stringify(payload).length, 0) + transactionBytes;
|
|
596
667
|
}
|
|
597
668
|
__name(transactionBlockByteCount, "transactionBlockByteCount");
|
|
@@ -677,6 +748,30 @@ var extractElevatedHashes = /* @__PURE__ */ __name((tx) => {
|
|
|
677
748
|
return filtered;
|
|
678
749
|
}, "extractElevatedHashes");
|
|
679
750
|
|
|
751
|
+
// src/transaction/signTransaction.ts
|
|
752
|
+
import { toArrayBuffer } from "@xylabs/arraybuffer";
|
|
753
|
+
import { assertEx as assertEx6 } from "@xylabs/assert";
|
|
754
|
+
import { hexFromArrayBuffer } from "@xylabs/hex";
|
|
755
|
+
import { PayloadBuilder as PayloadBuilder6 } from "@xyo-network/payload-builder";
|
|
756
|
+
async function signTransaction(tx, signer) {
|
|
757
|
+
assertEx6(tx.from === signer.address, () => "Signer address does not match transaction from address");
|
|
758
|
+
const signedTx = structuredClone(tx);
|
|
759
|
+
signedTx.addresses = [
|
|
760
|
+
signer.address
|
|
761
|
+
];
|
|
762
|
+
signedTx.previous_hashes = [
|
|
763
|
+
signer.previousHash ?? null
|
|
764
|
+
];
|
|
765
|
+
const hash = await PayloadBuilder6.hash(signedTx);
|
|
766
|
+
const hashBytes = toArrayBuffer(hash);
|
|
767
|
+
const [signature] = await signer.sign(hashBytes);
|
|
768
|
+
signedTx.$signatures = [
|
|
769
|
+
hexFromArrayBuffer(signature)
|
|
770
|
+
];
|
|
771
|
+
return signedTx;
|
|
772
|
+
}
|
|
773
|
+
__name(signTransaction, "signTransaction");
|
|
774
|
+
|
|
680
775
|
// src/wallet/generateXyoBaseWalletFromPhrase.ts
|
|
681
776
|
import { HDWallet } from "@xyo-network/wallet";
|
|
682
777
|
|
|
@@ -724,7 +819,9 @@ export {
|
|
|
724
819
|
balanceSummary,
|
|
725
820
|
blockPayloadsFromHydratedBlock,
|
|
726
821
|
buildTransaction,
|
|
822
|
+
buildUnsignedTransaction,
|
|
727
823
|
calculateFramesFromRange,
|
|
824
|
+
confirmSubmittedTransaction,
|
|
728
825
|
crackOperation,
|
|
729
826
|
crackOperations,
|
|
730
827
|
deepCalculateFramesFromRange,
|
|
@@ -749,6 +846,7 @@ export {
|
|
|
749
846
|
isPositiveBigInt,
|
|
750
847
|
netBalancesForPayloads,
|
|
751
848
|
parseSignedBigInt,
|
|
849
|
+
signTransaction,
|
|
752
850
|
toPositiveBigInt,
|
|
753
851
|
toSignedBigInt,
|
|
754
852
|
transactionBlockByteCount,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/block/hydrateBlock.ts","../../src/block/primitives/balanceStepSummaryFromRange.ts","../../src/payload/netBalancesForPayloads.ts","../../src/SignedBigInt.ts","../../src/block/primitives/frames/calculateFramesFromRange.ts","../../src/block/primitives/frames/deepCalculateFramesFromRange.ts","../../src/block/primitives/hashFromBlockNumber.ts","../../src/block/primitives/payloads.ts","../../src/block/primitives/balanceSummary.ts","../../src/config/Config.ts","../../src/config/Api.ts","../../src/validation/lib/isLocalhost.ts","../../src/validation/lib/getUrl.ts","../../src/validation/schema/Address.ts","../../src/validation/schema/Mnemonic.ts","../../src/config/App.ts","../../src/config/Chain.ts","../../src/config/Evm.ts","../../src/config/Producer.ts","../../src/config/storage/driver/Mongo.ts","../../src/config/storage/Storage.ts","../../src/config/Telemetry.ts","../../src/transaction/buildTransaction.ts","../../src/transaction/hydrateTransaction.ts","../../src/transaction/primitives/transactionBlockByteCount.ts","../../src/transaction/primitives/transactionElevatedPayloads.ts","../../src/transaction/primitives/transactionOperations.ts","../../src/transaction/primitives/transactionRequiredGas.ts","../../src/transaction/script.ts","../../src/wallet/generateXyoBaseWalletFromPhrase.ts","../../src/wallet/paths.ts"],"sourcesContent":["import { filterAs } from '@xylabs/array'\nimport { assertEx } from '@xylabs/assert'\nimport type { Hash } from '@xylabs/hex'\nimport type { ReadArchivist } from '@xyo-network/archivist-model'\nimport type { Payload, WithStorageMeta } from '@xyo-network/payload-model'\nimport type { HydratedBlock, TransactionBoundWitness } from '@xyo-network/xl1-protocol'\nimport {\n asTransactionBoundWitnessWithStorageMeta, isBlockBoundWitnessWithStorageMeta, isTransactionBoundWitnessWithStorageMeta,\n} from '@xyo-network/xl1-protocol'\n\nexport function allHashesPresent(hashes: Hash[], payloads: WithStorageMeta<Payload>[]): boolean {\n const payloadHashes = new Set(payloads.map(p => p._hash))\n return hashes.every(hash => payloadHashes.has(hash))\n}\n\nexport const tryHydrateBlock = async (\n archivist: ReadArchivist,\n hash: Hash,\n maxDepth: number = 1,\n): Promise<HydratedBlock | undefined> => {\n assertEx(maxDepth >= 0, () => 'maxDepth must be greater than or equal to 0')\n const bw = (await archivist.get([hash])).find(isBlockBoundWitnessWithStorageMeta)\n if (!bw) return undefined\n if (maxDepth === 0) return [bw, []]\n const blkPayloads = await archivist.get(bw.payload_hashes)\n if (maxDepth === 1) return [bw, blkPayloads]\n const transactions = blkPayloads.filter(isTransactionBoundWitnessWithStorageMeta)\n const transactionsPayloadHashes = transactions.flatMap(tx => tx.payload_hashes)\n const transactionsPayloads = await archivist.get(transactionsPayloadHashes)\n const allPayloadsHashes = new Set([...blkPayloads, ...transactionsPayloads].flatMap(p => p._hash))\n const allPayloads = await archivist.get([...allPayloadsHashes])\n const allPayloadsFiltered = allPayloads.filter(p => allPayloadsHashes.has(p._hash))\n return [bw, allPayloadsFiltered]\n}\n\nexport const hydrateBlock = async (\n archivist: ReadArchivist,\n hash: Hash,\n maxDepth: number = 1,\n minDepth = maxDepth,\n): Promise<HydratedBlock> => {\n assertEx(maxDepth >= 0, () => 'maxDepth must be greater than or equal to 0')\n assertEx(minDepth >= 0, () => 'minDepth must be greater than or equal to 0')\n assertEx(maxDepth >= minDepth, () => 'maxDepth must be greater than or equal to minDepth')\n const bw = assertEx(\n (await archivist.get([hash])).find(isBlockBoundWitnessWithStorageMeta),\n () => `block ${hash} not found`,\n )\n if (maxDepth === 0) return [bw, []]\n const blkPayloads = await archivist.get(bw.payload_hashes)\n if (minDepth === 1) assertEx(allHashesPresent(bw.payload_hashes, blkPayloads), () => `Unable to find all payloads for block ${hash}`)\n if (maxDepth === 1) return [bw, blkPayloads]\n const transactions = blkPayloads.filter(isTransactionBoundWitnessWithStorageMeta)\n const transactionsPayloadHashes = transactions.flatMap(tx => tx.payload_hashes)\n const transactionsPayloads = await archivist.get(transactionsPayloadHashes)\n assertEx(allHashesPresent(transactionsPayloadHashes, transactionsPayloads), () => `Unable to find all payloads for transactions in block ${hash}`)\n const allPayloadsHashes = new Set([...blkPayloads, ...transactionsPayloads].flatMap(p => p._hash))\n const allPayloads = await archivist.get([...allPayloadsHashes])\n const allPayloadsFiltered = allPayloads.filter(p => allPayloadsHashes.has(p._hash))\n if (maxDepth === 2) assertEx(allHashesPresent(\n [...allPayloadsHashes],\n allPayloadsFiltered,\n ), () => `Unable to find all payloads for transactions in block ${hash}`)\n return [bw, allPayloadsFiltered]\n}\n\nexport const flattenHydratedBlock = (hydratedBlock: HydratedBlock): WithStorageMeta<Payload>[] => {\n const [blk, blkPayloads] = hydratedBlock\n return [...blkPayloads, blk]\n}\n\nexport const flattenHydratedBlocks = (hydratedBlocks: HydratedBlock[]): WithStorageMeta<Payload>[] =>\n hydratedBlocks.flatMap(blk => flattenHydratedBlock(blk))\n\nexport const transactionsFromHydratedBlock = (block: HydratedBlock): WithStorageMeta<TransactionBoundWitness>[] => {\n return filterAs(block[1], asTransactionBoundWitnessWithStorageMeta)\n}\n\nexport const blockPayloadsFromHydratedBlock = (block: HydratedBlock): WithStorageMeta<Payload>[] => {\n return block[0].payload_hashes.map(hash => assertEx(\n block[1].find(p => p._hash === hash),\n () => `missing payload ${hash}`,\n )).filter(x => !isTransactionBoundWitnessWithStorageMeta(x))\n}\n","import { assertEx } from '@xylabs/assert'\nimport { type Address } from '@xylabs/hex'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport { isAnyPayload } from '@xyo-network/payload-model'\nimport { StepSizes } from '@xyo-network/xl1-protocol'\n\nimport { netBalancesForPayloads } from '../../payload/index.ts'\nimport {\n parseSignedBigInt, type SignedBigInt, toSignedBigInt,\n} from '../../SignedBigInt.ts'\nimport { hydrateBlock } from '../hydrateBlock.ts'\nimport type { BlockNumberRange } from './frames/index.ts'\nimport { deepCalculateFramesFromRange } from './frames/index.ts'\nimport { hashFromBlockNumber } from './hashFromBlockNumber.ts'\nimport type { BalanceStepSummaryContext } from './model.ts'\nimport { type BalancesStepSummary, BalancesStepSummarySchema } from './payloads.ts'\n\nexport async function balanceStepSummaryFromRange(\n context: BalanceStepSummaryContext,\n range: BlockNumberRange,\n): Promise<WithStorageMeta<BalancesStepSummary>> {\n // console.log(`balanceStepSummaryFromRange: head=${head}, range=${range[0]}-${range[1]}`)\n const frameHeadHash = await hashFromBlockNumber(context, range[1])\n const frameSize = range[1] - range[0] + 1\n\n let result: BalancesStepSummary | undefined = undefined\n\n if (frameSize === 1) {\n const hash = await hashFromBlockNumber(context, range[0])\n const [, payloads] = await hydrateBlock(context.chainArchivist, hash)\n const balances: Record<Address, SignedBigInt> = {}\n for (const [address, balance] of Object.entries(netBalancesForPayloads(payloads))) {\n balances[address as Address] = toSignedBigInt(balance)\n }\n result = {\n schema: BalancesStepSummarySchema, hash: context.head, stepSize: -1, balances,\n }\n } else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const step = (StepSizes as any).indexOf(frameSize)\n assertEx(step !== -1, () => `Invalid step size: ${frameSize}. Must be one of ${StepSizes.join(', ')}`)\n\n const [summaryResult] = await context.summaryRepository.get([frameHeadHash])\n if (isAnyPayload(summaryResult)) {\n result = summaryResult as WithStorageMeta<BalancesStepSummary>\n } else {\n // We do not have it, so lets build it\n const subRanges = deepCalculateFramesFromRange(range, step - 1)\n const promises = subRanges.map(subRange => balanceStepSummaryFromRange(\n context,\n subRange,\n ))\n const subResults = await Promise.all(promises)\n\n // add them all up\n const bigIntBalances: Record<Address, bigint> = {}\n for (const subResult of subResults) {\n for (const [address, balance] of Object.entries(subResult.balances)) {\n bigIntBalances[address as Address] = (bigIntBalances[address as Address] ?? 0n) + parseSignedBigInt(balance)\n }\n }\n\n const balances: Record<Address, SignedBigInt> = {}\n for (const [address, balance] of Object.entries(bigIntBalances)) {\n balances[address as Address] = toSignedBigInt(balance)\n }\n\n result = {\n schema: BalancesStepSummarySchema, hash: frameHeadHash, stepSize: frameSize, balances,\n }\n\n await context.summaryRepository.insert([result])\n }\n }\n // console.log(`balanceStepSummaryFromRange-result: head=${head}, range=${range[0]}-${range[1]}: ${toSafeJsonString(result, 10)}`)\n const finalResult = await PayloadBuilder.addStorageMeta(result)\n return finalResult\n}\n","import {\n type Address, type Hex, hexToBigInt, toAddress,\n} from '@xylabs/hex'\nimport type { Payload } from '@xyo-network/payload-model'\nimport { isTransfer } from '@xyo-network/xl1-protocol'\n\nexport const netBalancesForPayloads = (payloads: Payload[]) => {\n const balances: Record<Address, bigint> = {}\n for (const payload of payloads) {\n if (isTransfer(payload)) {\n const { from } = payload\n for (let [address, amount] of Object.entries(payload.transfers) as [Address, Hex][]) {\n balances[toAddress(address)] = (balances[toAddress(address)] ?? 0n) + hexToBigInt(amount)\n balances[toAddress(from)] = (balances[toAddress(from)] ?? 0n) - hexToBigInt(amount)\n }\n }\n }\n return balances\n}\n","import {\n type Hex,\n hexToBigInt,\n toHex,\n} from '@xylabs/hex'\nimport { isObject } from '@xylabs/object'\n\nexport interface NegativeBigInt {\n negative: Hex\n}\n\nexport interface PositiveBigInt {\n positive: Hex\n}\n\nexport type SignedBigInt = NegativeBigInt | PositiveBigInt\n\nexport const isNegativeBigInt = (value: unknown): value is NegativeBigInt => {\n return isObject(value) && 'negative' in value && typeof value.negative === 'string'\n}\n\nexport const isPositiveBigInt = (value: unknown): value is PositiveBigInt => {\n return isObject(value) && 'positive' in value && typeof value.positive === 'string'\n}\n\nexport const parseSignedBigInt = (value: SignedBigInt): bigint => {\n if (isNegativeBigInt(value)) {\n return -hexToBigInt(value.negative)\n } else if (isPositiveBigInt(value)) {\n return hexToBigInt(value.positive)\n } else {\n throw new Error('Invalid balance type')\n }\n}\n\nexport const toSignedBigInt = (value: bigint): SignedBigInt => {\n return value < 0n ? { negative: toHex(-value) } : { positive: toHex(value) }\n}\n\nexport const toPositiveBigInt = (value: unknown): PositiveBigInt => {\n if (isNegativeBigInt(value)) {\n return { positive: toHex(0n) }\n }\n if (isPositiveBigInt(value)) {\n return { positive: value.positive }\n }\n if (typeof value === 'bigint') {\n return { positive: toHex(value) }\n }\n throw new Error('Invalid value for positive big int')\n}\n","import { stepSize } from '@xyo-network/xl1-protocol'\n\nimport type { BlockNumberRange } from './BlockNumberRange.ts'\n\nexport function calculateFramesFromRange(range: BlockNumberRange, step: number): [\n // ranges of fitted frames\n BlockNumberRange[],\n // ranges of remaining blocks\n BlockNumberRange[]] {\n const size = stepSize(step)\n let start = (Math.trunc(range[0] / size)) * size\n const fitted: BlockNumberRange[] = []\n const remaining: BlockNumberRange[] = []\n\n // if the start is not aligned with the range, add a remaining block\n if (start !== range[0]) {\n start += size\n remaining.push([range[0], Math.min(start - 1, range[1])])\n }\n\n for (let i = start; i <= range[1]; i += size) {\n if ((i + size - 1) <= range[1]) {\n fitted.push([i, Math.min(i + size - 1, range[1])])\n } else {\n remaining.push([i, range[1]])\n }\n }\n return [fitted, remaining]\n}\n","import { StepSizes } from '@xyo-network/xl1-protocol'\n\nimport type { BlockNumberRange } from './BlockNumberRange.ts'\nimport { calculateFramesFromRange } from './calculateFramesFromRange.ts'\n\nexport function deepCalculateFramesFromRange(range: BlockNumberRange, startingStep = StepSizes.length - 1): BlockNumberRange[] {\n const fitted: BlockNumberRange[] = []\n let remaining: BlockNumberRange[] = [range]\n\n for (let step = startingStep; step >= 0; step--) {\n const newRemaining: BlockNumberRange[] = []\n for (const range of remaining) {\n const [newFittedFrames, newRemainingFrames] = calculateFramesFromRange(range, step)\n fitted.push(...newFittedFrames)\n newRemaining.push(...newRemainingFrames)\n }\n remaining = newRemaining\n }\n\n for (const range of remaining) {\n for (let i = range[0]; i <= range[1]; i++) {\n fitted.push([i, i]) // Add individual frames for remaining ranges\n }\n }\n\n return fitted.toSorted((a, b) => a[0] - b[0]) // Sort by start of range\n}\n","import { asHash, type Hash } from '@xylabs/hex'\nimport { toSafeJsonString } from '@xylabs/object'\nimport { asBlockBoundWitnessWithStorageMeta, StepSizes } from '@xyo-network/xl1-protocol'\n\nimport type { ChainContext } from './model.ts'\n\nexport async function hashFromBlockNumber(context: ChainContext, blockNumber: number): Promise<Hash> {\n const result = await context.chainArchivist.get([context.head])\n let currentBlock = asBlockBoundWitnessWithStorageMeta(result.at(0), () => `Head block not found for hash: ${context.head}`, { required: true })\n while (currentBlock.block > blockNumber) {\n let jumpHash: Hash | null = currentBlock.previous\n let jumpBlockNumber = currentBlock.block - 1\n for (const [step, stepSize] of StepSizes.entries()) {\n const possibleJumpBlockNumber = currentBlock.block - stepSize\n if (possibleJumpBlockNumber >= blockNumber && possibleJumpBlockNumber <= jumpBlockNumber) {\n jumpBlockNumber = possibleJumpBlockNumber\n jumpHash = asHash(currentBlock.step_hashes.at(step), () => `Step hash not found for step ${step} in block ${currentBlock.block}`)\n }\n }\n const [newBlock] = await context.chainArchivist.get([\n asHash(jumpHash, () => `Jump hash not found for block number [${blockNumber}]: ${jumpBlockNumber} ${toSafeJsonString(currentBlock, 10)}`)])\n currentBlock = asBlockBoundWitnessWithStorageMeta(newBlock, () => `Block not found for hash: ${jumpHash}`, { required: true })\n if (currentBlock.block === blockNumber) {\n break\n }\n if (currentBlock.block < blockNumber) {\n throw new Error(`Block number ${blockNumber} is not a valid step block number for block ${context.head}.`)\n }\n }\n return currentBlock._hash\n}\n","import type { Address, Hash } from '@xylabs/hex'\nimport type { EmptyObject } from '@xylabs/object'\nimport { AsObjectFactory } from '@xylabs/object'\nimport type {\n Payload, Schema, WithStorageMeta,\n} from '@xyo-network/payload-model'\nimport { isPayloadOfSchemaType, isStorageMeta } from '@xyo-network/payload-model'\n\nimport type { SignedBigInt } from '../../SignedBigInt.ts'\n\nexport const StepSummarySchema: Schema = 'network.xyo.step.summary'\nexport type StepSummarySchema = typeof StepSummarySchema\n\nexport interface StepSummaryFields {\n hash: Hash // the stepHash - the hash of the last block in the step frame\n stepSize: number // the stepSize in blocks\n}\n\nexport interface ChainWindow {\n depth: number // number of blocks the window covers, including the head\n head: Hash // the head of the chain\n}\n\nexport type StepSummary<TAdditionalFields extends EmptyObject | void = void,\n TSchema extends Schema | void = void> = Payload<TAdditionalFields extends void ? StepSummaryFields : TAdditionalFields & StepSummaryFields,\n TSchema extends void ? StepSummarySchema : TSchema>\n\nexport const BalancesStepSummarySchema: Schema = 'network.xyo.step.summary.balances'\nexport type BalancesStepSummarySchema = typeof BalancesStepSummarySchema\n\nexport type BalancesStepSummary = StepSummary<{\n balances: Record<Address, SignedBigInt>\n}, BalancesStepSummarySchema>\n\n/**\n * Identity function for determining if an object is an BalancesStepSummary\n */\nexport const isBalancesStepSummary = isPayloadOfSchemaType<BalancesStepSummary>(BalancesStepSummarySchema)\nexport const asBalancesStepSummary = AsObjectFactory.create<BalancesStepSummary>(isBalancesStepSummary)\n\n/**\n * Identity function for determining if an object is an BalancesStepSummary with Storage Meta\n */\nexport const isBalancesStepSummaryWithStorageMeta = (value: unknown): value is WithStorageMeta<BalancesStepSummary> => {\n return isBalancesStepSummary(value) && isStorageMeta(value)\n}\nexport const asBalancesStepSummaryWithStorageMeta = AsObjectFactory.create<WithStorageMeta<BalancesStepSummary>>(isBalancesStepSummaryWithStorageMeta)\n","import type { Address } from '@xylabs/hex'\nimport { asAddress } from '@xylabs/hex'\nimport { isDefined } from '@xylabs/typeof'\nimport { asBlockBoundWitnessWithStorageMeta } from '@xyo-network/xl1-protocol'\n\nimport { parseSignedBigInt } from '../../SignedBigInt.ts'\nimport { balanceStepSummaryFromRange } from './balanceStepSummaryFromRange.ts'\nimport { deepCalculateFramesFromRange } from './frames/index.ts'\nimport type { BalanceStepSummaryContext } from './model.ts'\n\nexport async function balanceSummary(\n context: BalanceStepSummaryContext,\n): Promise<Partial<Record<Address, bigint>>> {\n const headResult = await context.chainArchivist.get([context.head])\n const headBoundWitness = asBlockBoundWitnessWithStorageMeta(headResult.at(0), () => `Head block not found for hash: ${context.head}`, { required: true })\n const rangeStart = isDefined(context.windowSize) ? Math.max(headBoundWitness.block - context.windowSize + 1, 0) : 0\n const ranges = deepCalculateFramesFromRange([rangeStart, headBoundWitness.block])\n const summaries = await Promise.all(ranges.map(range => balanceStepSummaryFromRange(context, range)))\n const balances: Partial<Record<Address, bigint>> = {}\n for (let summary of summaries) {\n for (const [address, balance] of Object.entries(summary.balances)) {\n const validAddress = asAddress(address, () => `Invalid address: ${address}`)\n balances[validAddress] = (balances[validAddress] ?? 0n) + parseSignedBigInt(balance)\n }\n }\n return balances\n}\n","import type { LogLevelKey } from '@xylabs/logger'\nimport { LogLevel } from '@xylabs/logger'\nimport z from 'zod'\n\nimport { ApiConfigSchema } from './Api.ts'\nimport { AppConfigSchema } from './App.ts'\nimport { ChainConfigSchema } from './Chain.ts'\nimport { EvmConfigSchema } from './Evm.ts'\nimport { ProducerConfigSchema } from './Producer.ts'\nimport { StorageConfigSchema } from './storage/index.ts'\nimport { TelemetryConfigSchema } from './Telemetry.ts'\n\nconst LogLevels = Object.keys(LogLevel) as [LogLevelKey, ...LogLevelKey[]]\n\nexport const Xl1CommonConfigSchema = z.object({\n silent: z.boolean().default(false).describe('Whether to run in silent mode'),\n logLevel: z.enum(LogLevels).default('info').describe('Desired process verbosity'),\n}).describe('XL1 common configuration options')\n\nexport const ConfigSchema = z.object({\n ...Xl1CommonConfigSchema.shape,\n api: ApiConfigSchema.default(ApiConfigSchema.parse({})).describe('Configuration for the API node'),\n app: AppConfigSchema.default(AppConfigSchema.parse({})).describe('Configuration for the application'),\n chain: ChainConfigSchema.default(ChainConfigSchema.parse({})).describe('Configuration for the chain'),\n evm: EvmConfigSchema.default(EvmConfigSchema.parse({})).describe('Configuration for EVM-backed services'),\n producer: ProducerConfigSchema.default(ProducerConfigSchema.parse({})).describe('Configuration for the producer'),\n storage: StorageConfigSchema.default(StorageConfigSchema.parse({})).describe('Configuration for the storage'),\n telemetry: TelemetryConfigSchema.default(TelemetryConfigSchema.parse({})).describe('Configuration for telemetry'),\n})\n\nexport type Config = z.infer<typeof ConfigSchema>\n\nexport const getDefaultConfig = (): Config => ConfigSchema.parse({})\n","import z from 'zod'\n\nimport { MnemonicStringSchema } from '../validation/index.ts'\n\nexport const ApiConfigSchema = z.object({\n mnemonic: MnemonicStringSchema.optional().describe('Mnemonic for the API wallet'),\n host: z.string().default('localhost').describe('Host for the API'),\n port: z.coerce.number().default(8080).describe('Port for the API'),\n})\n\nexport type ApiConfig = z.infer<typeof ApiConfigSchema>\n","export const isLocalhost = (hostname: string): boolean => {\n return (\n hostname === 'localhost'\n || hostname === '127.0.0.1'\n || hostname === '::1' // IPv6 localhost\n || hostname.endsWith('.localhost')\n )\n}\n","import { isLocalhost } from './isLocalhost.ts'\n\nexport const getUrl = (host: string, port: number): string => {\n const scheme = isLocalhost(host) ? 'http' : 'https'\n return `${scheme}://${host}:${port}`\n}\n","export const TODO = true\n","import { z } from 'zod'\n\n/**\n * Validates a single string containing a BIP-39 mnemonic.\n *\n * • Trims leading/trailing whitespace.\n * • Collapses any run of whitespace (spaces, tabs, new-lines) to a single space.\n * • Splits on spaces → array of words.\n * • Checks that the word-count is 12, 15, 18, 21, or 24.\n *\n */\nexport const MnemonicStringSchema = z\n .string()\n .transform(s => s.trim().replaceAll(/\\s+/g, ' ')) // normalize spacing\n .refine(\n s => [12, 15, 18, 21, 24].includes(s.split(' ').length),\n { message: 'Mnemonic must contain 12, 15, 18, 21, or 24 words.' },\n ).describe('BIP-39 mnemonic string')\n\nexport type MnemonicString = z.infer<typeof MnemonicStringSchema>\n","import z from 'zod'\n\nexport const AppConfigSchema = z.object({ port: z.coerce.number().default(3000).describe('Port for the application') })\n","import z from 'zod'\n\nexport const ChainConfigSchema = z.object({\n id: z.string().optional()\n .describe('The unique identifier for the chain. Should be the staking contract address for contract-backed chains.'),\n})\n","import z from 'zod'\n\nexport const EvmJsonRpcConfigSchema = z.object({\n //\n url: z.string().optional().describe('JSON-RPC URL'),\n})\nexport const EvmInfuraConfigSchema = z.object({\n projectId: z.string().optional().describe('Infura project ID'),\n projectSecret: z.string().optional().describe('Infura project secret'),\n})\nexport const EvmConfigSchema = z.object({\n chainId: z.string().optional().describe('EVM chain ID'),\n infura: EvmInfuraConfigSchema.optional().describe('Infura Provider configuration'),\n jsonRpc: EvmJsonRpcConfigSchema.optional().describe('JSON-RPC Provider configuration'),\n})\n\nexport type EvmConfig = z.infer<typeof EvmConfigSchema>\n","import z from 'zod'\n\nimport { MnemonicStringSchema } from '../validation/index.ts'\n\nexport const ProducerConfigSchema = z.object({\n // TODO: Port schema\n healthCheckPort: z.coerce.number().optional().describe('Port for the Producer health checks'),\n // TODO: BigInt schema\n minStake: z.coerce.number().default(1).describe('Minimum stake required to be a Producer'),\n mnemonic: MnemonicStringSchema.optional().describe('Mnemonic for the Producer wallet'),\n // TODO: Port schema\n port: z.coerce.number().default(8081).describe('Port for the Producer'),\n disableIntentRedeclaration: z.boolean().optional().describe('Should the producer skip redeclaring their intent to continue producing blocks'),\n // TODO: Address schema\n rewardAddress: z.string().optional().describe('Address to receive block rewards'),\n})\n","import { isDefined, isUndefined } from '@xylabs/typeof'\nimport z from 'zod'\n\n/**\n * Checks if the provided MongoDB configuration contains all necessary fields\n * for establishing a connection.\n * @param config MongoDB configuration object\n * @returns True if the configuration contains all necessary fields for\n * establishing a connection\n */\nexport const hasMongoConfig = (config?: MongoConfig): config is Required<MongoConfig> => {\n if (isUndefined(config)) return false\n return (\n isDefined(config.connectionString)\n && isDefined(config.database)\n && isDefined(config.domain)\n && isDefined(config.password)\n && isDefined(config.username)\n )\n}\n\nexport const MongoConfigSchema = z.object({\n // TODO: Create from other arguments\n connectionString: z.string().min(1).optional().describe('MongoDB connection string'),\n database: z.string().min(1).optional().describe('MongoDB database name'),\n domain: z.string().min(1).optional().describe('MongoDB domain'),\n password: z.string().min(1).optional().describe('MongoDB password'),\n username: z.string().min(1).optional().describe('MongoDB username'),\n})\n\nexport type MongoConfig = z.infer<typeof MongoConfigSchema>\n","import z from 'zod'\n\nimport { MongoConfigSchema } from './driver/index.ts'\n\nexport const StorageConfigSchema = z.object({\n mongo: MongoConfigSchema.optional().describe('Configuration for the MongoDBstorage driver'),\n root: z.string().optional().describe('Root directory for local storage'),\n}).describe('Storage configuration options')\n\nexport type StorageConfig = z.infer<typeof StorageConfigSchema>\n","import z from 'zod'\n\nexport const OpenTelemetryConfigSchema = z.object({\n // OpenTelemetry options\n otlpEndpoint: z.string().optional().describe('OTLP endpoint for exporting telemetry data'),\n})\n\nexport const TelemetryConfigSchema = z.object({\n // OpenTelemetry configuration\n otel: OpenTelemetryConfigSchema.optional().describe('OpenTelemetry configuration'),\n}).describe('Telemetry configuration options')\n\nexport type TelemetryConfig = z.infer<typeof TelemetryConfigSchema>\n","import { assertEx } from '@xylabs/assert'\nimport type { Address, Hex } from '@xylabs/hex'\nimport { toHex } from '@xylabs/hex'\nimport type { AccountInstance } from '@xyo-network/account-model'\nimport { BoundWitnessBuilder } from '@xyo-network/boundwitness-builder'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload } from '@xyo-network/payload-model'\nimport type {\n AllowedBlockPayload,\n ExecutableFields,\n FromFields,\n HydratedTransaction, TransactionBoundWitness, TransactionBoundWitnessFields, TransactionFeesBigInt,\n} from '@xyo-network/xl1-protocol'\nimport { defaultTransactionFees } from '@xyo-network/xl1-protocol'\n\nexport async function buildTransaction(\n chain: Hex,\n elevatedPayloads: AllowedBlockPayload[],\n additionalPayloads: Payload[],\n signer: AccountInstance | AccountInstance[],\n nbf: number,\n exp: number,\n from?: Address,\n fees: TransactionFeesBigInt = defaultTransactionFees,\n): Promise<HydratedTransaction> {\n if (from === undefined && Array.isArray(signer)) {\n throw new Error('from is required when signer is an array')\n }\n\n const txBoundWitnessFields: TransactionBoundWitnessFields = {\n chain,\n fees: {\n base: toHex(fees.base),\n gasLimit: toHex(fees.gasLimit),\n gasPrice: toHex(fees.gasPrice),\n priority: toHex(fees.priority),\n },\n nbf,\n exp,\n }\n\n const elevatedHashes = await PayloadBuilder.hashes(elevatedPayloads)\n const script: string[] = []\n for (const elevatedHash of elevatedHashes) {\n script.push(`elevate|${elevatedHash}`)\n }\n\n const fields: TransactionBoundWitnessFields & FromFields & Partial<ExecutableFields> = {\n ...txBoundWitnessFields,\n from: from ?? (Array.isArray(signer) ? assertEx(signer.at(0)?.address) : signer.address),\n }\n\n if (script.length > 0) {\n fields.script = script\n }\n\n const [tx, txPayloads] = await new BoundWitnessBuilder<TransactionBoundWitness>()\n .fields(fields)\n .meta({ $signatures: [] })\n .payloads([...elevatedPayloads, ...additionalPayloads])\n .signers(Array.isArray(signer) ? signer : [signer])\n .build()\n\n return [await PayloadBuilder.addStorageMeta(tx), await PayloadBuilder.addStorageMeta(txPayloads)]\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { Hash } from '@xylabs/hex'\nimport type { ReadArchivist } from '@xyo-network/archivist-model'\nimport { hydrateTypedBoundWitness, tryHydrateTypedBoundWitness } from '@xyo-network/archivist-model'\nimport type { Payload, WithStorageMeta } from '@xyo-network/payload-model'\nimport type {\n AllowedBlockPayload,\n HydratedTransaction, TransactionBoundWitness,\n} from '@xyo-network/xl1-protocol'\nimport { isAllowedBlockPayload, isTransactionBoundWitnessWithStorageMeta } from '@xyo-network/xl1-protocol'\n\nexport const tryHydrateTransaction = async (\n archivist: ReadArchivist,\n hash: Hash,\n): Promise<HydratedTransaction | undefined> => {\n return (await tryHydrateTypedBoundWitness<TransactionBoundWitness>(\n archivist,\n hash,\n isTransactionBoundWitnessWithStorageMeta,\n )) as HydratedTransaction | undefined\n}\n\nexport const hydrateTransaction = async (\n archivist: ReadArchivist,\n hash: Hash,\n): Promise<HydratedTransaction> => {\n return await hydrateTypedBoundWitness<TransactionBoundWitness>(\n archivist,\n hash,\n isTransactionBoundWitnessWithStorageMeta,\n ) as HydratedTransaction\n}\n\nexport const flattenHydratedTransaction = (hydratedTransaction: HydratedTransaction): Payload[] => {\n const [tx, txPayloads] = hydratedTransaction\n return [...txPayloads, tx]\n}\n\nexport const flattenHydratedTransactions = (hydratedTransactions: HydratedTransaction[]): Payload[] =>\n hydratedTransactions.flatMap(tx => flattenHydratedTransaction(tx))\n\nexport const tryHydrateElevatedTransaction = async (\n archivist: ReadArchivist,\n hash: Hash,\n): Promise<HydratedTransaction | undefined> => {\n const hydratedTransaction = await tryHydrateTransaction(archivist, hash)\n if (!hydratedTransaction) {\n return undefined\n }\n const [transaction, payloads] = hydratedTransaction\n const opCodes = (transaction.script ?? []).filter(operation => operation.startsWith('elevate|'))\n const elevatedPayloads: WithStorageMeta<AllowedBlockPayload>[] = []\n for (const opCode of opCodes) {\n const [code, hash] = opCode.split('|')\n if (code === 'elevated') {\n const elevatedPayload = payloads.find(payload => payload._hash === hash)\n if (isAllowedBlockPayload(elevatedPayload)) {\n elevatedPayloads.push(elevatedPayload)\n }\n }\n }\n if (opCodes.length === elevatedPayloads.length) {\n return [transaction, elevatedPayloads]\n }\n return undefined\n}\n\nexport const hydrateElevatedTransaction = async (\n archivist: ReadArchivist,\n hash: Hash,\n): Promise<HydratedTransaction> => {\n return assertEx(await tryHydrateElevatedTransaction(archivist, hash), () => 'Hydration failed')\n}\n","import { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { HydratedTransaction } from '@xyo-network/xl1-protocol'\n\n/** The number of bytes that a transaction and its payloads will take up in a block */\nexport function transactionBlockByteCount([transaction, payloads]: HydratedTransaction): number {\n const cleanTransaction = PayloadBuilder.omitStorageMeta(transaction)\n const transactionBytes = JSON.stringify(cleanTransaction).length\n const cleanPayloads = PayloadBuilder.omitStorageMeta(payloads)\n return cleanPayloads.reduce((acc: number, payload) => acc + JSON.stringify(payload).length, 0) + transactionBytes\n}\n","import { asHash, type Hash } from '@xylabs/hex'\nimport type { Payload, WithHashStorageMeta } from '@xyo-network/payload-model'\nimport type { HydratedTransaction, TransactionBoundWitness } from '@xyo-network/xl1-protocol'\n\nimport { crackOperations } from './transactionOperations.ts'\n\nexport function transactionElevatedPayloadHashes(transaction: TransactionBoundWitness): Hash[] {\n const elevateOperations = crackOperations(transaction.script ?? []).filter(op => op[0] === 'elevate')\n return elevateOperations.map(op => asHash(op[1][0], true))\n}\n\nexport function transactionElevatedPayloads([transaction, payloads]: HydratedTransaction): WithHashStorageMeta<Payload>[] {\n const hashes = transactionElevatedPayloadHashes(transaction)\n const elevatedPayloads = payloads.filter(payload => hashes.includes(payload._hash))\n return elevatedPayloads\n}\n","export function crackOperation(operation: string): [string, string[]] {\n const parts = operation.split('|')\n if (parts.length < 2) {\n throw new Error(`Invalid operation format: ${operation}`)\n }\n return [parts[0], parts.slice(1)]\n}\n\nexport function crackOperations(operations: string[]): [string, string[]][] {\n return operations.map(op => crackOperation(op))\n}\n","import type { HydratedTransaction } from '@xyo-network/xl1-protocol'\nimport { AttoXL1, TransactionGasCosts } from '@xyo-network/xl1-protocol'\n\nimport { transactionBlockByteCount } from './transactionBlockByteCount.ts'\nimport { transactionElevatedPayloads } from './transactionElevatedPayloads.ts'\n\n/** The required gas for the byte storage on the block chain for a transaction */\nexport function transactionBytesRequiredGas([transaction, payloads]: HydratedTransaction): AttoXL1 {\n const transactionBlockBytes = transactionBlockByteCount([transaction, payloads])\n return AttoXL1(TransactionGasCosts.characterStorage * BigInt(transactionBlockBytes))\n}\n\nexport function transactionRequiredGas(hydratedTransaction: HydratedTransaction): AttoXL1 {\n const elevatedPayloads = transactionElevatedPayloads(hydratedTransaction)\n const hashes = elevatedPayloads.length + 1 /* for transaction itself */\n const signatures = hydratedTransaction[0].addresses.length\n return AttoXL1(transactionBytesRequiredGas(hydratedTransaction)\n + TransactionGasCosts.hashValidation * BigInt(hashes)\n + TransactionGasCosts.signatureValidation * BigInt(signatures)\n + TransactionGasCosts.payloadValidation * BigInt(elevatedPayloads.length))\n}\n","import { filterAs } from '@xylabs/array'\nimport { assertEx } from '@xylabs/assert'\nimport { asHash, type Hash } from '@xylabs/hex'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport type { AllowedBlockPayload, HydratedTransaction } from '@xyo-network/xl1-protocol'\nimport { isAllowedBlockPayloadWithHashStorageMeta } from '@xyo-network/xl1-protocol'\n\nexport const tryExtractElevatedHashesFromScript = (strings: string[]): Hash[] => {\n const hashes = strings\n .filter(str => str.startsWith('elevate|'))\n .map(str => str.split('|')[1])\n return filterAs(hashes, h => asHash(h))\n}\n\nexport const extractElevatedHashesFromScript = (strings: string[]): Hash[] => {\n const hashes = strings\n .filter(str => str.startsWith('elevate|'))\n .map(str => str.split('|')[1])\n const filtered = filterAs(hashes, h => asHash(h))\n assertEx(filtered.length === hashes.length, () => 'Invalid elevated hashes')\n return filtered\n}\n\nexport const tryExtractElevatedHashes = (tx: HydratedTransaction): WithStorageMeta<AllowedBlockPayload>[] => {\n const [bw, payloads] = tx\n const { script } = bw\n const hashes = script ? tryExtractElevatedHashesFromScript(script) : []\n return payloads\n .filter(p => hashes.includes(p._hash))\n .filter(isAllowedBlockPayloadWithHashStorageMeta)\n}\n\nexport const extractElevatedHashes = (tx: HydratedTransaction): WithStorageMeta<AllowedBlockPayload>[] => {\n const [bw, payloads] = tx\n const { script } = bw\n const hashes = script ? tryExtractElevatedHashesFromScript(script) : []\n const filtered = payloads\n .filter(p => hashes.includes(p._hash))\n .filter(isAllowedBlockPayloadWithHashStorageMeta)\n assertEx(filtered.length === hashes.length, () => 'Invalid elevated hashes')\n return filtered\n}\n","import { HDWallet } from '@xyo-network/wallet'\n\nimport { DEFAULT_WALLET_PATH } from './paths.ts'\n\n/**\n * Initializes a wallet to the default XYO path from a mnemonic phrase\n * @param walletPhrase The mnemonic phrase for the wallet\n * @returns A wallet initialized to the default XYO path using the provided phrase\n */\nexport const generateXyoBaseWalletFromPhrase = (walletPhrase: string) => {\n const wallet = HDWallet.fromPhrase(walletPhrase, DEFAULT_WALLET_PATH)\n return wallet\n}\n","export const WALLET_COMPLIANCE = '44\\'' as const\n\nexport const COIN_TYPES = { Ethereum: '60\\'' } as const\n\nexport const ACCOUNT_TYPE = { GANACHE: '0\\'', XYO: '0\\'' } as const\n\nexport const CHANGE_ADDRESS = { META_MASK: '0', XYO: '0' } as const\n\nexport const ADDRESS_INDEX = { META_MASK: '0', XYO: '0' } as const\n\nexport const DEFAULT_WALLET_PATH = `m/${WALLET_COMPLIANCE}/${COIN_TYPES.Ethereum}/${ACCOUNT_TYPE.XYO}/${CHANGE_ADDRESS.XYO}`\n"],"mappings":"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","names":["filterAs","assertEx","asTransactionBoundWitnessWithStorageMeta","isBlockBoundWitnessWithStorageMeta","isTransactionBoundWitnessWithStorageMeta","allHashesPresent","hashes","payloads","payloadHashes","Set","map","p","_hash","every","hash","has","tryHydrateBlock","archivist","maxDepth","assertEx","bw","get","find","isBlockBoundWitnessWithStorageMeta","undefined","blkPayloads","payload_hashes","transactions","filter","isTransactionBoundWitnessWithStorageMeta","transactionsPayloadHashes","flatMap","tx","transactionsPayloads","allPayloadsHashes","allPayloads","allPayloadsFiltered","hydrateBlock","minDepth","flattenHydratedBlock","hydratedBlock","blk","flattenHydratedBlocks","hydratedBlocks","transactionsFromHydratedBlock","block","filterAs","asTransactionBoundWitnessWithStorageMeta","blockPayloadsFromHydratedBlock","x","assertEx","PayloadBuilder","isAnyPayload","StepSizes","hexToBigInt","toAddress","isTransfer","netBalancesForPayloads","payloads","balances","payload","isTransfer","from","address","amount","Object","entries","transfers","toAddress","hexToBigInt","hexToBigInt","toHex","isObject","isNegativeBigInt","value","isObject","negative","isPositiveBigInt","positive","parseSignedBigInt","hexToBigInt","Error","toSignedBigInt","toHex","toPositiveBigInt","stepSize","calculateFramesFromRange","range","step","size","stepSize","start","Math","trunc","fitted","remaining","push","min","i","StepSizes","deepCalculateFramesFromRange","range","startingStep","StepSizes","length","fitted","remaining","step","newRemaining","newFittedFrames","newRemainingFrames","calculateFramesFromRange","push","i","toSorted","a","b","asHash","toSafeJsonString","asBlockBoundWitnessWithStorageMeta","StepSizes","hashFromBlockNumber","context","blockNumber","result","chainArchivist","get","head","currentBlock","asBlockBoundWitnessWithStorageMeta","at","required","block","jumpHash","previous","jumpBlockNumber","step","stepSize","StepSizes","entries","possibleJumpBlockNumber","asHash","step_hashes","newBlock","toSafeJsonString","Error","_hash","AsObjectFactory","isPayloadOfSchemaType","isStorageMeta","StepSummarySchema","BalancesStepSummarySchema","isBalancesStepSummary","isPayloadOfSchemaType","asBalancesStepSummary","AsObjectFactory","create","isBalancesStepSummaryWithStorageMeta","value","isStorageMeta","asBalancesStepSummaryWithStorageMeta","balanceStepSummaryFromRange","context","range","frameHeadHash","hashFromBlockNumber","frameSize","result","undefined","hash","payloads","hydrateBlock","chainArchivist","balances","address","balance","Object","entries","netBalancesForPayloads","toSignedBigInt","schema","BalancesStepSummarySchema","head","stepSize","step","StepSizes","indexOf","assertEx","join","summaryResult","summaryRepository","get","isAnyPayload","subRanges","deepCalculateFramesFromRange","promises","map","subRange","subResults","Promise","all","bigIntBalances","subResult","parseSignedBigInt","insert","finalResult","PayloadBuilder","addStorageMeta","asAddress","isDefined","asBlockBoundWitnessWithStorageMeta","balanceSummary","context","headResult","chainArchivist","get","head","headBoundWitness","asBlockBoundWitnessWithStorageMeta","at","required","rangeStart","isDefined","windowSize","Math","max","block","ranges","deepCalculateFramesFromRange","summaries","Promise","all","map","range","balanceStepSummaryFromRange","balances","summary","address","balance","Object","entries","validAddress","asAddress","parseSignedBigInt","LogLevel","z","z","isLocalhost","hostname","endsWith","getUrl","host","port","scheme","isLocalhost","TODO","z","MnemonicStringSchema","string","transform","s","trim","replaceAll","refine","includes","split","length","message","describe","ApiConfigSchema","z","object","mnemonic","MnemonicStringSchema","optional","describe","host","string","default","port","coerce","number","z","AppConfigSchema","object","port","coerce","number","default","describe","z","ChainConfigSchema","object","id","string","optional","describe","z","EvmJsonRpcConfigSchema","object","url","string","optional","describe","EvmInfuraConfigSchema","projectId","projectSecret","EvmConfigSchema","chainId","infura","jsonRpc","z","ProducerConfigSchema","z","object","healthCheckPort","coerce","number","optional","describe","minStake","default","mnemonic","MnemonicStringSchema","port","disableIntentRedeclaration","boolean","rewardAddress","string","isDefined","isUndefined","z","hasMongoConfig","config","isUndefined","isDefined","connectionString","database","domain","password","username","MongoConfigSchema","z","object","string","min","optional","describe","z","StorageConfigSchema","z","object","mongo","MongoConfigSchema","optional","describe","root","string","z","OpenTelemetryConfigSchema","object","otlpEndpoint","string","optional","describe","TelemetryConfigSchema","otel","LogLevels","Object","keys","LogLevel","Xl1CommonConfigSchema","z","object","silent","boolean","default","describe","logLevel","enum","ConfigSchema","shape","api","ApiConfigSchema","parse","app","AppConfigSchema","chain","ChainConfigSchema","evm","EvmConfigSchema","producer","ProducerConfigSchema","storage","StorageConfigSchema","telemetry","TelemetryConfigSchema","getDefaultConfig","assertEx","toHex","BoundWitnessBuilder","PayloadBuilder","defaultTransactionFees","buildTransaction","chain","elevatedPayloads","additionalPayloads","signer","nbf","exp","from","fees","defaultTransactionFees","undefined","Array","isArray","Error","txBoundWitnessFields","base","toHex","gasLimit","gasPrice","priority","elevatedHashes","PayloadBuilder","hashes","script","elevatedHash","push","fields","assertEx","at","address","length","tx","txPayloads","BoundWitnessBuilder","meta","$signatures","payloads","signers","build","addStorageMeta","assertEx","hydrateTypedBoundWitness","tryHydrateTypedBoundWitness","isAllowedBlockPayload","isTransactionBoundWitnessWithStorageMeta","tryHydrateTransaction","archivist","hash","tryHydrateTypedBoundWitness","isTransactionBoundWitnessWithStorageMeta","hydrateTransaction","hydrateTypedBoundWitness","flattenHydratedTransaction","hydratedTransaction","tx","txPayloads","flattenHydratedTransactions","hydratedTransactions","flatMap","tryHydrateElevatedTransaction","undefined","transaction","payloads","opCodes","script","filter","operation","startsWith","elevatedPayloads","opCode","code","split","elevatedPayload","find","payload","_hash","isAllowedBlockPayload","push","length","hydrateElevatedTransaction","assertEx","PayloadBuilder","transactionBlockByteCount","transaction","payloads","cleanTransaction","PayloadBuilder","omitStorageMeta","transactionBytes","JSON","stringify","length","cleanPayloads","reduce","acc","payload","asHash","crackOperation","operation","parts","split","length","Error","slice","crackOperations","operations","map","op","transactionElevatedPayloadHashes","transaction","elevateOperations","crackOperations","script","filter","op","map","asHash","transactionElevatedPayloads","payloads","hashes","elevatedPayloads","payload","includes","_hash","AttoXL1","TransactionGasCosts","transactionBytesRequiredGas","transaction","payloads","transactionBlockBytes","transactionBlockByteCount","AttoXL1","TransactionGasCosts","characterStorage","BigInt","transactionRequiredGas","hydratedTransaction","elevatedPayloads","transactionElevatedPayloads","hashes","length","signatures","addresses","hashValidation","signatureValidation","payloadValidation","filterAs","assertEx","asHash","isAllowedBlockPayloadWithHashStorageMeta","tryExtractElevatedHashesFromScript","strings","hashes","filter","str","startsWith","map","split","filterAs","h","asHash","extractElevatedHashesFromScript","filtered","assertEx","length","tryExtractElevatedHashes","tx","bw","payloads","script","p","includes","_hash","isAllowedBlockPayloadWithHashStorageMeta","extractElevatedHashes","HDWallet","WALLET_COMPLIANCE","COIN_TYPES","Ethereum","ACCOUNT_TYPE","GANACHE","XYO","CHANGE_ADDRESS","META_MASK","ADDRESS_INDEX","DEFAULT_WALLET_PATH","generateXyoBaseWalletFromPhrase","walletPhrase","wallet","HDWallet","fromPhrase","DEFAULT_WALLET_PATH"]}
|
|
1
|
+
{"version":3,"sources":["../../src/block/hydrateBlock.ts","../../src/block/primitives/balanceStepSummaryFromRange.ts","../../src/payload/netBalancesForPayloads.ts","../../src/SignedBigInt.ts","../../src/block/primitives/frames/calculateFramesFromRange.ts","../../src/block/primitives/frames/deepCalculateFramesFromRange.ts","../../src/block/primitives/hashFromBlockNumber.ts","../../src/block/primitives/payloads.ts","../../src/block/primitives/balanceSummary.ts","../../src/config/Config.ts","../../src/config/Api.ts","../../src/validation/lib/isLocalhost.ts","../../src/validation/lib/getUrl.ts","../../src/validation/schema/Address.ts","../../src/validation/schema/Mnemonic.ts","../../src/config/App.ts","../../src/config/Chain.ts","../../src/config/Evm.ts","../../src/config/Producer.ts","../../src/config/storage/driver/Mongo.ts","../../src/config/storage/Storage.ts","../../src/config/Telemetry.ts","../../src/transaction/buildTransaction.ts","../../src/transaction/buildUnsignedTransaction.ts","../../src/transaction/confirmSubmittedTransaction.ts","../../src/transaction/hydrateTransaction.ts","../../src/transaction/primitives/transactionBlockByteCount.ts","../../src/transaction/primitives/transactionElevatedPayloads.ts","../../src/transaction/primitives/transactionOperations.ts","../../src/transaction/primitives/transactionRequiredGas.ts","../../src/transaction/script.ts","../../src/transaction/signTransaction.ts","../../src/wallet/generateXyoBaseWalletFromPhrase.ts","../../src/wallet/paths.ts"],"sourcesContent":["import { filterAs } from '@xylabs/array'\nimport { assertEx } from '@xylabs/assert'\nimport type { Hash } from '@xylabs/hex'\nimport type { ReadArchivist } from '@xyo-network/archivist-model'\nimport type { Payload, WithStorageMeta } from '@xyo-network/payload-model'\nimport type { HydratedBlock, TransactionBoundWitness } from '@xyo-network/xl1-protocol'\nimport {\n asTransactionBoundWitnessWithStorageMeta, isBlockBoundWitnessWithStorageMeta, isTransactionBoundWitnessWithStorageMeta,\n} from '@xyo-network/xl1-protocol'\n\nexport function allHashesPresent(hashes: Hash[], payloads: WithStorageMeta<Payload>[]): boolean {\n const payloadHashes = new Set(payloads.map(p => p._hash))\n return hashes.every(hash => payloadHashes.has(hash))\n}\n\nexport const tryHydrateBlock = async (\n archivist: ReadArchivist,\n hash: Hash,\n maxDepth: number = 1,\n): Promise<HydratedBlock | undefined> => {\n assertEx(maxDepth >= 0, () => 'maxDepth must be greater than or equal to 0')\n const bw = (await archivist.get([hash])).find(isBlockBoundWitnessWithStorageMeta)\n if (!bw) return undefined\n if (maxDepth === 0) return [bw, []]\n const blkPayloads = await archivist.get(bw.payload_hashes)\n if (maxDepth === 1) return [bw, blkPayloads]\n const transactions = blkPayloads.filter(isTransactionBoundWitnessWithStorageMeta)\n const transactionsPayloadHashes = transactions.flatMap(tx => tx.payload_hashes)\n const transactionsPayloads = await archivist.get(transactionsPayloadHashes)\n const allPayloadsHashes = new Set([...blkPayloads, ...transactionsPayloads].flatMap(p => p._hash))\n const allPayloads = await archivist.get([...allPayloadsHashes])\n const allPayloadsFiltered = allPayloads.filter(p => allPayloadsHashes.has(p._hash))\n return [bw, allPayloadsFiltered]\n}\n\nexport const hydrateBlock = async (\n archivist: ReadArchivist,\n hash: Hash,\n maxDepth: number = 1,\n minDepth = maxDepth,\n): Promise<HydratedBlock> => {\n assertEx(maxDepth >= 0, () => 'maxDepth must be greater than or equal to 0')\n assertEx(minDepth >= 0, () => 'minDepth must be greater than or equal to 0')\n assertEx(maxDepth >= minDepth, () => 'maxDepth must be greater than or equal to minDepth')\n const bw = assertEx(\n (await archivist.get([hash])).find(isBlockBoundWitnessWithStorageMeta),\n () => `block ${hash} not found`,\n )\n if (maxDepth === 0) return [bw, []]\n const blkPayloads = await archivist.get(bw.payload_hashes)\n if (minDepth === 1) assertEx(allHashesPresent(bw.payload_hashes, blkPayloads), () => `Unable to find all payloads for block ${hash}`)\n if (maxDepth === 1) return [bw, blkPayloads]\n const transactions = blkPayloads.filter(isTransactionBoundWitnessWithStorageMeta)\n const transactionsPayloadHashes = transactions.flatMap(tx => tx.payload_hashes)\n const transactionsPayloads = await archivist.get(transactionsPayloadHashes)\n assertEx(allHashesPresent(transactionsPayloadHashes, transactionsPayloads), () => `Unable to find all payloads for transactions in block ${hash}`)\n const allPayloadsHashes = new Set([...blkPayloads, ...transactionsPayloads].flatMap(p => p._hash))\n const allPayloads = await archivist.get([...allPayloadsHashes])\n const allPayloadsFiltered = allPayloads.filter(p => allPayloadsHashes.has(p._hash))\n if (maxDepth === 2) assertEx(allHashesPresent(\n [...allPayloadsHashes],\n allPayloadsFiltered,\n ), () => `Unable to find all payloads for transactions in block ${hash}`)\n return [bw, allPayloadsFiltered]\n}\n\nexport const flattenHydratedBlock = (hydratedBlock: HydratedBlock): WithStorageMeta<Payload>[] => {\n const [blk, blkPayloads] = hydratedBlock\n return [...blkPayloads, blk]\n}\n\nexport const flattenHydratedBlocks = (hydratedBlocks: HydratedBlock[]): WithStorageMeta<Payload>[] =>\n hydratedBlocks.flatMap(blk => flattenHydratedBlock(blk))\n\nexport const transactionsFromHydratedBlock = (block: HydratedBlock): WithStorageMeta<TransactionBoundWitness>[] => {\n return filterAs(block[1], asTransactionBoundWitnessWithStorageMeta)\n}\n\nexport const blockPayloadsFromHydratedBlock = (block: HydratedBlock): WithStorageMeta<Payload>[] => {\n return block[0].payload_hashes.map(hash => assertEx(\n block[1].find(p => p._hash === hash),\n () => `missing payload ${hash}`,\n )).filter(x => !isTransactionBoundWitnessWithStorageMeta(x))\n}\n","import { assertEx } from '@xylabs/assert'\nimport { type Address } from '@xylabs/hex'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport { isAnyPayload } from '@xyo-network/payload-model'\nimport { StepSizes } from '@xyo-network/xl1-protocol'\n\nimport { netBalancesForPayloads } from '../../payload/index.ts'\nimport {\n parseSignedBigInt, type SignedBigInt, toSignedBigInt,\n} from '../../SignedBigInt.ts'\nimport { hydrateBlock } from '../hydrateBlock.ts'\nimport type { BlockNumberRange } from './frames/index.ts'\nimport { deepCalculateFramesFromRange } from './frames/index.ts'\nimport { hashFromBlockNumber } from './hashFromBlockNumber.ts'\nimport type { BalanceStepSummaryContext } from './model.ts'\nimport { type BalancesStepSummary, BalancesStepSummarySchema } from './payloads.ts'\n\nexport async function balanceStepSummaryFromRange(\n context: BalanceStepSummaryContext,\n range: BlockNumberRange,\n): Promise<WithStorageMeta<BalancesStepSummary>> {\n // console.log(`balanceStepSummaryFromRange: head=${head}, range=${range[0]}-${range[1]}`)\n const frameHeadHash = await hashFromBlockNumber(context, range[1])\n const frameSize = range[1] - range[0] + 1\n\n let result: BalancesStepSummary | undefined = undefined\n\n if (frameSize === 1) {\n const hash = await hashFromBlockNumber(context, range[0])\n const [, payloads] = await hydrateBlock(context.chainArchivist, hash)\n const balances: Record<Address, SignedBigInt> = {}\n for (const [address, balance] of Object.entries(netBalancesForPayloads(payloads))) {\n balances[address as Address] = toSignedBigInt(balance)\n }\n result = {\n schema: BalancesStepSummarySchema, hash: context.head, stepSize: -1, balances,\n }\n } else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const step = (StepSizes as any).indexOf(frameSize)\n assertEx(step !== -1, () => `Invalid step size: ${frameSize}. Must be one of ${StepSizes.join(', ')}`)\n\n const [summaryResult] = await context.summaryRepository.get([frameHeadHash])\n if (isAnyPayload(summaryResult)) {\n result = summaryResult as WithStorageMeta<BalancesStepSummary>\n } else {\n // We do not have it, so lets build it\n const subRanges = deepCalculateFramesFromRange(range, step - 1)\n const promises = subRanges.map(subRange => balanceStepSummaryFromRange(\n context,\n subRange,\n ))\n const subResults = await Promise.all(promises)\n\n // add them all up\n const bigIntBalances: Record<Address, bigint> = {}\n for (const subResult of subResults) {\n for (const [address, balance] of Object.entries(subResult.balances)) {\n bigIntBalances[address as Address] = (bigIntBalances[address as Address] ?? 0n) + parseSignedBigInt(balance)\n }\n }\n\n const balances: Record<Address, SignedBigInt> = {}\n for (const [address, balance] of Object.entries(bigIntBalances)) {\n balances[address as Address] = toSignedBigInt(balance)\n }\n\n result = {\n schema: BalancesStepSummarySchema, hash: frameHeadHash, stepSize: frameSize, balances,\n }\n\n await context.summaryRepository.insert([result])\n }\n }\n // console.log(`balanceStepSummaryFromRange-result: head=${head}, range=${range[0]}-${range[1]}: ${toSafeJsonString(result, 10)}`)\n const finalResult = await PayloadBuilder.addStorageMeta(result)\n return finalResult\n}\n","import {\n type Address, type Hex, hexToBigInt, toAddress,\n} from '@xylabs/hex'\nimport type { Payload } from '@xyo-network/payload-model'\nimport { isTransfer } from '@xyo-network/xl1-protocol'\n\nexport const netBalancesForPayloads = (payloads: Payload[]) => {\n const balances: Record<Address, bigint> = {}\n for (const payload of payloads) {\n if (isTransfer(payload)) {\n const { from } = payload\n for (let [address, amount] of Object.entries(payload.transfers) as [Address, Hex][]) {\n balances[toAddress(address)] = (balances[toAddress(address)] ?? 0n) + hexToBigInt(amount)\n balances[toAddress(from)] = (balances[toAddress(from)] ?? 0n) - hexToBigInt(amount)\n }\n }\n }\n return balances\n}\n","import {\n type Hex,\n hexToBigInt,\n toHex,\n} from '@xylabs/hex'\nimport { isObject } from '@xylabs/object'\n\nexport interface NegativeBigInt {\n negative: Hex\n}\n\nexport interface PositiveBigInt {\n positive: Hex\n}\n\nexport type SignedBigInt = NegativeBigInt | PositiveBigInt\n\nexport const isNegativeBigInt = (value: unknown): value is NegativeBigInt => {\n return isObject(value) && 'negative' in value && typeof value.negative === 'string'\n}\n\nexport const isPositiveBigInt = (value: unknown): value is PositiveBigInt => {\n return isObject(value) && 'positive' in value && typeof value.positive === 'string'\n}\n\nexport const parseSignedBigInt = (value: SignedBigInt): bigint => {\n if (isNegativeBigInt(value)) {\n return -hexToBigInt(value.negative)\n } else if (isPositiveBigInt(value)) {\n return hexToBigInt(value.positive)\n } else {\n throw new Error('Invalid balance type')\n }\n}\n\nexport const toSignedBigInt = (value: bigint): SignedBigInt => {\n return value < 0n ? { negative: toHex(-value) } : { positive: toHex(value) }\n}\n\nexport const toPositiveBigInt = (value: unknown): PositiveBigInt => {\n if (isNegativeBigInt(value)) {\n return { positive: toHex(0n) }\n }\n if (isPositiveBigInt(value)) {\n return { positive: value.positive }\n }\n if (typeof value === 'bigint') {\n return { positive: toHex(value) }\n }\n throw new Error('Invalid value for positive big int')\n}\n","import { stepSize } from '@xyo-network/xl1-protocol'\n\nimport type { BlockNumberRange } from './BlockNumberRange.ts'\n\nexport function calculateFramesFromRange(range: BlockNumberRange, step: number): [\n // ranges of fitted frames\n BlockNumberRange[],\n // ranges of remaining blocks\n BlockNumberRange[]] {\n const size = stepSize(step)\n let start = (Math.trunc(range[0] / size)) * size\n const fitted: BlockNumberRange[] = []\n const remaining: BlockNumberRange[] = []\n\n // if the start is not aligned with the range, add a remaining block\n if (start !== range[0]) {\n start += size\n remaining.push([range[0], Math.min(start - 1, range[1])])\n }\n\n for (let i = start; i <= range[1]; i += size) {\n if ((i + size - 1) <= range[1]) {\n fitted.push([i, Math.min(i + size - 1, range[1])])\n } else {\n remaining.push([i, range[1]])\n }\n }\n return [fitted, remaining]\n}\n","import { StepSizes } from '@xyo-network/xl1-protocol'\n\nimport type { BlockNumberRange } from './BlockNumberRange.ts'\nimport { calculateFramesFromRange } from './calculateFramesFromRange.ts'\n\nexport function deepCalculateFramesFromRange(range: BlockNumberRange, startingStep = StepSizes.length - 1): BlockNumberRange[] {\n const fitted: BlockNumberRange[] = []\n let remaining: BlockNumberRange[] = [range]\n\n for (let step = startingStep; step >= 0; step--) {\n const newRemaining: BlockNumberRange[] = []\n for (const range of remaining) {\n const [newFittedFrames, newRemainingFrames] = calculateFramesFromRange(range, step)\n fitted.push(...newFittedFrames)\n newRemaining.push(...newRemainingFrames)\n }\n remaining = newRemaining\n }\n\n for (const range of remaining) {\n for (let i = range[0]; i <= range[1]; i++) {\n fitted.push([i, i]) // Add individual frames for remaining ranges\n }\n }\n\n return fitted.toSorted((a, b) => a[0] - b[0]) // Sort by start of range\n}\n","import { asHash, type Hash } from '@xylabs/hex'\nimport { toSafeJsonString } from '@xylabs/object'\nimport { asBlockBoundWitnessWithStorageMeta, StepSizes } from '@xyo-network/xl1-protocol'\n\nimport type { ChainContext } from './model.ts'\n\nexport async function hashFromBlockNumber(context: ChainContext, blockNumber: number): Promise<Hash> {\n const result = await context.chainArchivist.get([context.head])\n let currentBlock = asBlockBoundWitnessWithStorageMeta(result.at(0), () => `Head block not found for hash: ${context.head}`, { required: true })\n while (currentBlock.block > blockNumber) {\n let jumpHash: Hash | null = currentBlock.previous\n let jumpBlockNumber = currentBlock.block - 1\n for (const [step, stepSize] of StepSizes.entries()) {\n const possibleJumpBlockNumber = currentBlock.block - stepSize\n if (possibleJumpBlockNumber >= blockNumber && possibleJumpBlockNumber <= jumpBlockNumber) {\n jumpBlockNumber = possibleJumpBlockNumber\n jumpHash = asHash(currentBlock.step_hashes.at(step), () => `Step hash not found for step ${step} in block ${currentBlock.block}`)\n }\n }\n const [newBlock] = await context.chainArchivist.get([\n asHash(jumpHash, () => `Jump hash not found for block number [${blockNumber}]: ${jumpBlockNumber} ${toSafeJsonString(currentBlock, 10)}`)])\n currentBlock = asBlockBoundWitnessWithStorageMeta(newBlock, () => `Block not found for hash: ${jumpHash}`, { required: true })\n if (currentBlock.block === blockNumber) {\n break\n }\n if (currentBlock.block < blockNumber) {\n throw new Error(`Block number ${blockNumber} is not a valid step block number for block ${context.head}.`)\n }\n }\n return currentBlock._hash\n}\n","import type { Address, Hash } from '@xylabs/hex'\nimport type { EmptyObject } from '@xylabs/object'\nimport { AsObjectFactory } from '@xylabs/object'\nimport type {\n Payload, Schema, WithStorageMeta,\n} from '@xyo-network/payload-model'\nimport { isPayloadOfSchemaType, isStorageMeta } from '@xyo-network/payload-model'\n\nimport type { SignedBigInt } from '../../SignedBigInt.ts'\n\nexport const StepSummarySchema: Schema = 'network.xyo.step.summary'\nexport type StepSummarySchema = typeof StepSummarySchema\n\nexport interface StepSummaryFields {\n hash: Hash // the stepHash - the hash of the last block in the step frame\n stepSize: number // the stepSize in blocks\n}\n\nexport interface ChainWindow {\n depth: number // number of blocks the window covers, including the head\n head: Hash // the head of the chain\n}\n\nexport type StepSummary<TAdditionalFields extends EmptyObject | void = void,\n TSchema extends Schema | void = void> = Payload<TAdditionalFields extends void ? StepSummaryFields : TAdditionalFields & StepSummaryFields,\n TSchema extends void ? StepSummarySchema : TSchema>\n\nexport const BalancesStepSummarySchema: Schema = 'network.xyo.step.summary.balances'\nexport type BalancesStepSummarySchema = typeof BalancesStepSummarySchema\n\nexport type BalancesStepSummary = StepSummary<{\n balances: Record<Address, SignedBigInt>\n}, BalancesStepSummarySchema>\n\n/**\n * Identity function for determining if an object is an BalancesStepSummary\n */\nexport const isBalancesStepSummary = isPayloadOfSchemaType<BalancesStepSummary>(BalancesStepSummarySchema)\nexport const asBalancesStepSummary = AsObjectFactory.create<BalancesStepSummary>(isBalancesStepSummary)\n\n/**\n * Identity function for determining if an object is an BalancesStepSummary with Storage Meta\n */\nexport const isBalancesStepSummaryWithStorageMeta = (value: unknown): value is WithStorageMeta<BalancesStepSummary> => {\n return isBalancesStepSummary(value) && isStorageMeta(value)\n}\nexport const asBalancesStepSummaryWithStorageMeta = AsObjectFactory.create<WithStorageMeta<BalancesStepSummary>>(isBalancesStepSummaryWithStorageMeta)\n","import type { Address } from '@xylabs/hex'\nimport { asAddress } from '@xylabs/hex'\nimport { isDefined } from '@xylabs/typeof'\nimport { asBlockBoundWitnessWithStorageMeta } from '@xyo-network/xl1-protocol'\n\nimport { parseSignedBigInt } from '../../SignedBigInt.ts'\nimport { balanceStepSummaryFromRange } from './balanceStepSummaryFromRange.ts'\nimport { deepCalculateFramesFromRange } from './frames/index.ts'\nimport type { BalanceStepSummaryContext } from './model.ts'\n\nexport async function balanceSummary(\n context: BalanceStepSummaryContext,\n): Promise<Partial<Record<Address, bigint>>> {\n const headResult = await context.chainArchivist.get([context.head])\n const headBoundWitness = asBlockBoundWitnessWithStorageMeta(headResult.at(0), () => `Head block not found for hash: ${context.head}`, { required: true })\n const rangeStart = isDefined(context.windowSize) ? Math.max(headBoundWitness.block - context.windowSize + 1, 0) : 0\n const ranges = deepCalculateFramesFromRange([rangeStart, headBoundWitness.block])\n const summaries = await Promise.all(ranges.map(range => balanceStepSummaryFromRange(context, range)))\n const balances: Partial<Record<Address, bigint>> = {}\n for (let summary of summaries) {\n for (const [address, balance] of Object.entries(summary.balances)) {\n const validAddress = asAddress(address, () => `Invalid address: ${address}`)\n balances[validAddress] = (balances[validAddress] ?? 0n) + parseSignedBigInt(balance)\n }\n }\n return balances\n}\n","import type { LogLevelKey } from '@xylabs/logger'\nimport { LogLevel } from '@xylabs/logger'\nimport z from 'zod'\n\nimport { ApiConfigSchema } from './Api.ts'\nimport { AppConfigSchema } from './App.ts'\nimport { ChainConfigSchema } from './Chain.ts'\nimport { EvmConfigSchema } from './Evm.ts'\nimport { ProducerConfigSchema } from './Producer.ts'\nimport { StorageConfigSchema } from './storage/index.ts'\nimport { TelemetryConfigSchema } from './Telemetry.ts'\n\nconst LogLevels = Object.keys(LogLevel) as [LogLevelKey, ...LogLevelKey[]]\n\nexport const Xl1CommonConfigSchema = z.object({\n silent: z.boolean().default(false).describe('Whether to run in silent mode'),\n logLevel: z.enum(LogLevels).default('info').describe('Desired process verbosity'),\n}).describe('XL1 common configuration options')\n\nexport const ConfigSchema = z.object({\n ...Xl1CommonConfigSchema.shape,\n api: ApiConfigSchema.default(ApiConfigSchema.parse({})).describe('Configuration for the API node'),\n app: AppConfigSchema.default(AppConfigSchema.parse({})).describe('Configuration for the application'),\n chain: ChainConfigSchema.default(ChainConfigSchema.parse({})).describe('Configuration for the chain'),\n evm: EvmConfigSchema.default(EvmConfigSchema.parse({})).describe('Configuration for EVM-backed services'),\n producer: ProducerConfigSchema.default(ProducerConfigSchema.parse({})).describe('Configuration for the producer'),\n storage: StorageConfigSchema.default(StorageConfigSchema.parse({})).describe('Configuration for the storage'),\n telemetry: TelemetryConfigSchema.default(TelemetryConfigSchema.parse({})).describe('Configuration for telemetry'),\n})\n\nexport type Config = z.infer<typeof ConfigSchema>\n\nexport const getDefaultConfig = (): Config => ConfigSchema.parse({})\n","import z from 'zod'\n\nimport { MnemonicStringSchema } from '../validation/index.ts'\n\nexport const ApiConfigSchema = z.object({\n mnemonic: MnemonicStringSchema.optional().describe('Mnemonic for the API wallet'),\n host: z.string().default('localhost').describe('Host for the API'),\n port: z.coerce.number().default(8080).describe('Port for the API'),\n})\n\nexport type ApiConfig = z.infer<typeof ApiConfigSchema>\n","export const isLocalhost = (hostname: string): boolean => {\n return (\n hostname === 'localhost'\n || hostname === '127.0.0.1'\n || hostname === '::1' // IPv6 localhost\n || hostname.endsWith('.localhost')\n )\n}\n","import { isLocalhost } from './isLocalhost.ts'\n\nexport const getUrl = (host: string, port: number): string => {\n const scheme = isLocalhost(host) ? 'http' : 'https'\n return `${scheme}://${host}:${port}`\n}\n","export const TODO = true\n","import { z } from 'zod'\n\n/**\n * Validates a single string containing a BIP-39 mnemonic.\n *\n * • Trims leading/trailing whitespace.\n * • Collapses any run of whitespace (spaces, tabs, new-lines) to a single space.\n * • Splits on spaces → array of words.\n * • Checks that the word-count is 12, 15, 18, 21, or 24.\n *\n */\nexport const MnemonicStringSchema = z\n .string()\n .transform(s => s.trim().replaceAll(/\\s+/g, ' ')) // normalize spacing\n .refine(\n s => [12, 15, 18, 21, 24].includes(s.split(' ').length),\n { message: 'Mnemonic must contain 12, 15, 18, 21, or 24 words.' },\n ).describe('BIP-39 mnemonic string')\n\nexport type MnemonicString = z.infer<typeof MnemonicStringSchema>\n","import z from 'zod'\n\nexport const AppConfigSchema = z.object({ port: z.coerce.number().default(3000).describe('Port for the application') })\n","import z from 'zod'\n\nexport const ChainConfigSchema = z.object({\n id: z.string().optional()\n .describe('The unique identifier for the chain. Should be the staking contract address for contract-backed chains.'),\n})\n","import z from 'zod'\n\nexport const EvmJsonRpcConfigSchema = z.object({\n //\n url: z.string().optional().describe('JSON-RPC URL'),\n})\nexport const EvmInfuraConfigSchema = z.object({\n projectId: z.string().optional().describe('Infura project ID'),\n projectSecret: z.string().optional().describe('Infura project secret'),\n})\nexport const EvmConfigSchema = z.object({\n chainId: z.string().optional().describe('EVM chain ID'),\n infura: EvmInfuraConfigSchema.optional().describe('Infura Provider configuration'),\n jsonRpc: EvmJsonRpcConfigSchema.optional().describe('JSON-RPC Provider configuration'),\n})\n\nexport type EvmConfig = z.infer<typeof EvmConfigSchema>\n","import z from 'zod'\n\nimport { MnemonicStringSchema } from '../validation/index.ts'\n\nexport const ProducerConfigSchema = z.object({\n // TODO: Port schema\n healthCheckPort: z.coerce.number().optional().describe('Port for the Producer health checks'),\n // TODO: BigInt schema\n minStake: z.coerce.number().default(1).describe('Minimum stake required to be a Producer'),\n mnemonic: MnemonicStringSchema.optional().describe('Mnemonic for the Producer wallet'),\n // TODO: Port schema\n port: z.coerce.number().default(8081).describe('Port for the Producer'),\n disableIntentRedeclaration: z.boolean().optional().describe('Should the producer skip redeclaring their intent to continue producing blocks'),\n // TODO: Address schema\n rewardAddress: z.string().optional().describe('Address to receive block rewards'),\n})\n","import { isDefined, isUndefined } from '@xylabs/typeof'\nimport z from 'zod'\n\n/**\n * Checks if the provided MongoDB configuration contains all necessary fields\n * for establishing a connection.\n * @param config MongoDB configuration object\n * @returns True if the configuration contains all necessary fields for\n * establishing a connection\n */\nexport const hasMongoConfig = (config?: MongoConfig): config is Required<MongoConfig> => {\n if (isUndefined(config)) return false\n return (\n isDefined(config.connectionString)\n && isDefined(config.database)\n && isDefined(config.domain)\n && isDefined(config.password)\n && isDefined(config.username)\n )\n}\n\nexport const MongoConfigSchema = z.object({\n // TODO: Create from other arguments\n connectionString: z.string().min(1).optional().describe('MongoDB connection string'),\n database: z.string().min(1).optional().describe('MongoDB database name'),\n domain: z.string().min(1).optional().describe('MongoDB domain'),\n password: z.string().min(1).optional().describe('MongoDB password'),\n username: z.string().min(1).optional().describe('MongoDB username'),\n})\n\nexport type MongoConfig = z.infer<typeof MongoConfigSchema>\n","import z from 'zod'\n\nimport { MongoConfigSchema } from './driver/index.ts'\n\nexport const StorageConfigSchema = z.object({\n mongo: MongoConfigSchema.optional().describe('Configuration for the MongoDBstorage driver'),\n root: z.string().optional().describe('Root directory for local storage'),\n}).describe('Storage configuration options')\n\nexport type StorageConfig = z.infer<typeof StorageConfigSchema>\n","import z from 'zod'\n\nexport const OpenTelemetryConfigSchema = z.object({\n // OpenTelemetry options\n otlpEndpoint: z.string().optional().describe('OTLP endpoint for exporting telemetry data'),\n})\n\nexport const TelemetryConfigSchema = z.object({\n // OpenTelemetry configuration\n otel: OpenTelemetryConfigSchema.optional().describe('OpenTelemetry configuration'),\n}).describe('Telemetry configuration options')\n\nexport type TelemetryConfig = z.infer<typeof TelemetryConfigSchema>\n","import { assertEx } from '@xylabs/assert'\nimport type { Address, Hex } from '@xylabs/hex'\nimport { toHex } from '@xylabs/hex'\nimport type { AccountInstance } from '@xyo-network/account-model'\nimport { BoundWitnessBuilder } from '@xyo-network/boundwitness-builder'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload } from '@xyo-network/payload-model'\nimport type {\n AllowedBlockPayload,\n ExecutableFields,\n FromFields,\n HydratedTransaction, TransactionBoundWitness, TransactionBoundWitnessFields, TransactionFeesBigInt,\n} from '@xyo-network/xl1-protocol'\nimport { defaultTransactionFees } from '@xyo-network/xl1-protocol'\n\nexport async function buildTransaction(\n chain: Hex,\n onChainPayloads: AllowedBlockPayload[],\n offChainPayloads: Payload[],\n signer: AccountInstance | AccountInstance[],\n nbf: number,\n exp: number,\n from?: Address,\n fees: TransactionFeesBigInt = defaultTransactionFees,\n): Promise<HydratedTransaction> {\n if (from === undefined && Array.isArray(signer)) {\n throw new Error('from is required when signer is an array')\n }\n\n const txBoundWitnessFields: TransactionBoundWitnessFields = {\n chain,\n fees: {\n base: toHex(fees.base),\n gasLimit: toHex(fees.gasLimit),\n gasPrice: toHex(fees.gasPrice),\n priority: toHex(fees.priority),\n },\n nbf,\n exp,\n }\n\n const elevatedHashes = await PayloadBuilder.hashes(onChainPayloads)\n const script: string[] = []\n for (const elevatedHash of elevatedHashes) {\n script.push(`elevate|${elevatedHash}`)\n }\n\n const fields: TransactionBoundWitnessFields & FromFields & Partial<ExecutableFields> = {\n ...txBoundWitnessFields,\n from: from ?? (Array.isArray(signer) ? assertEx(signer.at(0)?.address) : signer.address),\n }\n\n if (script.length > 0) {\n fields.script = script\n }\n\n const [tx, txPayloads] = await new BoundWitnessBuilder<TransactionBoundWitness>()\n .fields(fields)\n .meta({ $signatures: [] })\n .payloads([...onChainPayloads, ...offChainPayloads])\n .signers(Array.isArray(signer) ? signer : [signer])\n .build()\n\n return [await PayloadBuilder.addStorageMeta(tx), await PayloadBuilder.addStorageMeta(txPayloads)]\n}\n","import type { Address, Hex } from '@xylabs/hex'\nimport { toHex } from '@xylabs/hex'\nimport { BoundWitnessBuilder } from '@xyo-network/boundwitness-builder'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload } from '@xyo-network/payload-model'\nimport type {\n AllowedBlockPayload,\n ExecutableFields,\n FromFields,\n HydratedTransaction, TransactionBoundWitness, TransactionBoundWitnessFields, TransactionFeesBigInt,\n} from '@xyo-network/xl1-protocol'\nimport { defaultTransactionFees } from '@xyo-network/xl1-protocol'\n\nexport async function buildUnsignedTransaction(\n chain: Hex,\n onChainPayloads: AllowedBlockPayload[],\n offChainPayloads: Payload[],\n nbf: number,\n exp: number,\n from: Address,\n fees: TransactionFeesBigInt = defaultTransactionFees,\n): Promise<HydratedTransaction> {\n const txBoundWitnessFields: TransactionBoundWitnessFields = {\n chain,\n fees: {\n base: toHex(fees.base),\n gasLimit: toHex(fees.gasLimit),\n gasPrice: toHex(fees.gasPrice),\n priority: toHex(fees.priority),\n },\n nbf,\n exp,\n }\n\n const elevatedHashes = await PayloadBuilder.hashes(onChainPayloads)\n const script: string[] = []\n for (const elevatedHash of elevatedHashes) {\n script.push(`elevate|${elevatedHash}`)\n }\n\n const fields: TransactionBoundWitnessFields & FromFields & Partial<ExecutableFields> = {\n ...txBoundWitnessFields,\n from,\n }\n\n if (script.length > 0) {\n fields.script = script\n }\n\n const [tx, txPayloads] = await new BoundWitnessBuilder<TransactionBoundWitness>()\n .fields(fields)\n .meta({ $signatures: [] })\n .payloads([...onChainPayloads, ...offChainPayloads])\n .build()\n\n return [await PayloadBuilder.addStorageMeta(tx), await PayloadBuilder.addStorageMeta(txPayloads)]\n}\n","import { delay } from '@xylabs/delay'\nimport type { Logger } from '@xylabs/logger'\nimport { isDefined } from '@xylabs/typeof'\nimport type { Signed } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type {\n HydratedTransaction, TransactionBoundWitness, XyoViewer,\n} from '@xyo-network/xl1-protocol'\n\nconst DEFAULT_CONFIRMATION_ATTEMPTS = 20\nconst DEFAULT_DELAY_BETWEEN_ATTEMPTS = 1000 // milliseconds\n\nexport type ConfirmSubmittedTransactionOptions = {\n /**\n * Number of attempts to confirm the transaction.\n * Defaults to 20.\n */\n attempts?: number\n /**\n * Delay in milliseconds between confirmation attempts.\n * Defaults to 1000 (1 second).\n */\n delay?: number\n /**\n * Optional logger instance for logging progress.\n */\n logger?: Logger\n}\n\n/**\n * Confirms a submitted transaction by checking if it has been included in the blockchain.\n * @param viewer The viewer\n * @param transaction The transaction to confirm\n * @param options Options for confirmation\n * @returns The confirmed transaction or throws an error if not confirmed\n */\nexport const confirmSubmittedTransaction = async (\n viewer: XyoViewer,\n transaction: Signed<TransactionBoundWitness>,\n options?: ConfirmSubmittedTransactionOptions,\n): Promise<HydratedTransaction> => {\n const { attempts: maxAttempts = DEFAULT_CONFIRMATION_ATTEMPTS, delay: attemptDelay = DEFAULT_DELAY_BETWEEN_ATTEMPTS } = options || {}\n const txBWHash = await PayloadBuilder.hash(transaction)\n options?.logger?.log('✅ confirming transaction:', txBWHash, '\\n')\n let attempts = 0\n while (true) {\n const tx = await viewer.transactionByHash(txBWHash) ?? undefined\n if (isDefined(tx)) {\n options?.logger?.log('🍻 Transaction confirmed:', txBWHash, '\\n')\n return tx\n } else {\n attempts++\n if (attempts > maxAttempts) {\n options?.logger?.error(`⚠️ Transaction not confirmed after ${maxAttempts} attempts`)\n throw new Error(`Transaction ${txBWHash} not confirmed after ${maxAttempts} attempts`)\n } else {\n options?.logger?.log(`🔄 Transaction not confirmed yet, attempt ${attempts}. Retrying...`, '\\n')\n await delay(attemptDelay)\n }\n }\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { Hash } from '@xylabs/hex'\nimport type { ReadArchivist } from '@xyo-network/archivist-model'\nimport { hydrateTypedBoundWitness, tryHydrateTypedBoundWitness } from '@xyo-network/archivist-model'\nimport type { Payload, WithStorageMeta } from '@xyo-network/payload-model'\nimport type {\n AllowedBlockPayload,\n HydratedTransaction, TransactionBoundWitness,\n} from '@xyo-network/xl1-protocol'\nimport { isAllowedBlockPayload, isTransactionBoundWitnessWithStorageMeta } from '@xyo-network/xl1-protocol'\n\nexport const tryHydrateTransaction = async (\n archivist: ReadArchivist,\n hash: Hash,\n): Promise<HydratedTransaction | undefined> => {\n return (await tryHydrateTypedBoundWitness<TransactionBoundWitness>(\n archivist,\n hash,\n isTransactionBoundWitnessWithStorageMeta,\n )) as HydratedTransaction | undefined\n}\n\nexport const hydrateTransaction = async (\n archivist: ReadArchivist,\n hash: Hash,\n): Promise<HydratedTransaction> => {\n return await hydrateTypedBoundWitness<TransactionBoundWitness>(\n archivist,\n hash,\n isTransactionBoundWitnessWithStorageMeta,\n ) as HydratedTransaction\n}\n\nexport const flattenHydratedTransaction = (hydratedTransaction: HydratedTransaction): Payload[] => {\n const [tx, txPayloads] = hydratedTransaction\n return [...txPayloads, tx]\n}\n\nexport const flattenHydratedTransactions = (hydratedTransactions: HydratedTransaction[]): Payload[] =>\n hydratedTransactions.flatMap(tx => flattenHydratedTransaction(tx))\n\nexport const tryHydrateElevatedTransaction = async (\n archivist: ReadArchivist,\n hash: Hash,\n): Promise<HydratedTransaction | undefined> => {\n const hydratedTransaction = await tryHydrateTransaction(archivist, hash)\n if (!hydratedTransaction) {\n return undefined\n }\n const [transaction, payloads] = hydratedTransaction\n const opCodes = (transaction.script ?? []).filter(operation => operation.startsWith('elevate|'))\n const elevatedPayloads: WithStorageMeta<AllowedBlockPayload>[] = []\n for (const opCode of opCodes) {\n const [code, hash] = opCode.split('|')\n if (code === 'elevated') {\n const elevatedPayload = payloads.find(payload => payload._hash === hash)\n if (isAllowedBlockPayload(elevatedPayload)) {\n elevatedPayloads.push(elevatedPayload)\n }\n }\n }\n if (opCodes.length === elevatedPayloads.length) {\n return [transaction, elevatedPayloads]\n }\n return undefined\n}\n\nexport const hydrateElevatedTransaction = async (\n archivist: ReadArchivist,\n hash: Hash,\n): Promise<HydratedTransaction> => {\n return assertEx(await tryHydrateElevatedTransaction(archivist, hash), () => 'Hydration failed')\n}\n","import { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { HydratedTransaction } from '@xyo-network/xl1-protocol'\n\n/** The number of bytes that a transaction and its payloads will take up in a block */\nexport function transactionBlockByteCount([transaction, payloads]: HydratedTransaction): number {\n const cleanTransaction = PayloadBuilder.omitStorageMeta(transaction)\n const transactionBytes = JSON.stringify(cleanTransaction).length\n const cleanPayloads = PayloadBuilder.omitStorageMeta(payloads)\n return cleanPayloads.reduce((acc: number, payload) => acc + JSON.stringify(payload).length, 0) + transactionBytes\n}\n","import { asHash, type Hash } from '@xylabs/hex'\nimport type { Payload, WithHashStorageMeta } from '@xyo-network/payload-model'\nimport type { HydratedTransaction, TransactionBoundWitness } from '@xyo-network/xl1-protocol'\n\nimport { crackOperations } from './transactionOperations.ts'\n\nexport function transactionElevatedPayloadHashes(transaction: TransactionBoundWitness): Hash[] {\n const elevateOperations = crackOperations(transaction.script ?? []).filter(op => op[0] === 'elevate')\n return elevateOperations.map(op => asHash(op[1][0], true))\n}\n\nexport function transactionElevatedPayloads([transaction, payloads]: HydratedTransaction): WithHashStorageMeta<Payload>[] {\n const hashes = transactionElevatedPayloadHashes(transaction)\n const elevatedPayloads = payloads.filter(payload => hashes.includes(payload._hash))\n return elevatedPayloads\n}\n","export function crackOperation(operation: string): [string, string[]] {\n const parts = operation.split('|')\n if (parts.length < 2) {\n throw new Error(`Invalid operation format: ${operation}`)\n }\n return [parts[0], parts.slice(1)]\n}\n\nexport function crackOperations(operations: string[]): [string, string[]][] {\n return operations.map(op => crackOperation(op))\n}\n","import type { HydratedTransaction } from '@xyo-network/xl1-protocol'\nimport { AttoXL1, TransactionGasCosts } from '@xyo-network/xl1-protocol'\n\nimport { transactionBlockByteCount } from './transactionBlockByteCount.ts'\nimport { transactionElevatedPayloads } from './transactionElevatedPayloads.ts'\n\n/** The required gas for the byte storage on the block chain for a transaction */\nexport function transactionBytesRequiredGas([transaction, payloads]: HydratedTransaction): AttoXL1 {\n const transactionBlockBytes = transactionBlockByteCount([transaction, payloads])\n return AttoXL1(TransactionGasCosts.characterStorage * BigInt(transactionBlockBytes))\n}\n\nexport function transactionRequiredGas(hydratedTransaction: HydratedTransaction): AttoXL1 {\n const elevatedPayloads = transactionElevatedPayloads(hydratedTransaction)\n const hashes = elevatedPayloads.length + 1 /* for transaction itself */\n const signatures = hydratedTransaction[0].addresses.length\n return AttoXL1(transactionBytesRequiredGas(hydratedTransaction)\n + TransactionGasCosts.hashValidation * BigInt(hashes)\n + TransactionGasCosts.signatureValidation * BigInt(signatures)\n + TransactionGasCosts.payloadValidation * BigInt(elevatedPayloads.length))\n}\n","import { filterAs } from '@xylabs/array'\nimport { assertEx } from '@xylabs/assert'\nimport { asHash, type Hash } from '@xylabs/hex'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport type { AllowedBlockPayload, HydratedTransaction } from '@xyo-network/xl1-protocol'\nimport { isAllowedBlockPayloadWithHashStorageMeta } from '@xyo-network/xl1-protocol'\n\nexport const tryExtractElevatedHashesFromScript = (strings: string[]): Hash[] => {\n const hashes = strings\n .filter(str => str.startsWith('elevate|'))\n .map(str => str.split('|')[1])\n return filterAs(hashes, h => asHash(h))\n}\n\nexport const extractElevatedHashesFromScript = (strings: string[]): Hash[] => {\n const hashes = strings\n .filter(str => str.startsWith('elevate|'))\n .map(str => str.split('|')[1])\n const filtered = filterAs(hashes, h => asHash(h))\n assertEx(filtered.length === hashes.length, () => 'Invalid elevated hashes')\n return filtered\n}\n\nexport const tryExtractElevatedHashes = (tx: HydratedTransaction): WithStorageMeta<AllowedBlockPayload>[] => {\n const [bw, payloads] = tx\n const { script } = bw\n const hashes = script ? tryExtractElevatedHashesFromScript(script) : []\n return payloads\n .filter(p => hashes.includes(p._hash))\n .filter(isAllowedBlockPayloadWithHashStorageMeta)\n}\n\nexport const extractElevatedHashes = (tx: HydratedTransaction): WithStorageMeta<AllowedBlockPayload>[] => {\n const [bw, payloads] = tx\n const { script } = bw\n const hashes = script ? tryExtractElevatedHashesFromScript(script) : []\n const filtered = payloads\n .filter(p => hashes.includes(p._hash))\n .filter(isAllowedBlockPayloadWithHashStorageMeta)\n assertEx(filtered.length === hashes.length, () => 'Invalid elevated hashes')\n return filtered\n}\n","import { toArrayBuffer } from '@xylabs/arraybuffer'\nimport { assertEx } from '@xylabs/assert'\nimport { hexFromArrayBuffer } from '@xylabs/hex'\nimport type { AccountInstance } from '@xyo-network/account-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { TransactionBoundWitness } from '@xyo-network/xl1-protocol'\n\nexport async function signTransaction(tx: TransactionBoundWitness, signer: AccountInstance) {\n assertEx(tx.from === signer.address, () => 'Signer address does not match transaction from address')\n const signedTx = structuredClone(tx)\n signedTx.addresses = [signer.address]\n signedTx.previous_hashes = [signer.previousHash ?? null]\n const hash = await PayloadBuilder.hash(signedTx)\n const hashBytes = toArrayBuffer(hash)\n const [signature] = await signer.sign(hashBytes)\n signedTx.$signatures = [hexFromArrayBuffer(signature)]\n return signedTx\n}\n","import { HDWallet } from '@xyo-network/wallet'\n\nimport { DEFAULT_WALLET_PATH } from './paths.ts'\n\n/**\n * Initializes a wallet to the default XYO path from a mnemonic phrase\n * @param walletPhrase The mnemonic phrase for the wallet\n * @returns A wallet initialized to the default XYO path using the provided phrase\n */\nexport const generateXyoBaseWalletFromPhrase = (walletPhrase: string) => {\n const wallet = HDWallet.fromPhrase(walletPhrase, DEFAULT_WALLET_PATH)\n return wallet\n}\n","export const WALLET_COMPLIANCE = '44\\'' as const\n\nexport const COIN_TYPES = { Ethereum: '60\\'' } as const\n\nexport const ACCOUNT_TYPE = { GANACHE: '0\\'', XYO: '0\\'' } as const\n\nexport const CHANGE_ADDRESS = { META_MASK: '0', XYO: '0' } as const\n\nexport const ADDRESS_INDEX = { META_MASK: '0', XYO: '0' } as const\n\nexport const DEFAULT_WALLET_PATH = `m/${WALLET_COMPLIANCE}/${COIN_TYPES.Ethereum}/${ACCOUNT_TYPE.XYO}/${CHANGE_ADDRESS.XYO}`\n"],"mappings":"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","names":["filterAs","assertEx","asTransactionBoundWitnessWithStorageMeta","isBlockBoundWitnessWithStorageMeta","isTransactionBoundWitnessWithStorageMeta","allHashesPresent","hashes","payloads","payloadHashes","Set","map","p","_hash","every","hash","has","tryHydrateBlock","archivist","maxDepth","assertEx","bw","get","find","isBlockBoundWitnessWithStorageMeta","undefined","blkPayloads","payload_hashes","transactions","filter","isTransactionBoundWitnessWithStorageMeta","transactionsPayloadHashes","flatMap","tx","transactionsPayloads","allPayloadsHashes","allPayloads","allPayloadsFiltered","hydrateBlock","minDepth","flattenHydratedBlock","hydratedBlock","blk","flattenHydratedBlocks","hydratedBlocks","transactionsFromHydratedBlock","block","filterAs","asTransactionBoundWitnessWithStorageMeta","blockPayloadsFromHydratedBlock","x","assertEx","PayloadBuilder","isAnyPayload","StepSizes","hexToBigInt","toAddress","isTransfer","netBalancesForPayloads","payloads","balances","payload","isTransfer","from","address","amount","Object","entries","transfers","toAddress","hexToBigInt","hexToBigInt","toHex","isObject","isNegativeBigInt","value","isObject","negative","isPositiveBigInt","positive","parseSignedBigInt","hexToBigInt","Error","toSignedBigInt","toHex","toPositiveBigInt","stepSize","calculateFramesFromRange","range","step","size","stepSize","start","Math","trunc","fitted","remaining","push","min","i","StepSizes","deepCalculateFramesFromRange","range","startingStep","StepSizes","length","fitted","remaining","step","newRemaining","newFittedFrames","newRemainingFrames","calculateFramesFromRange","push","i","toSorted","a","b","asHash","toSafeJsonString","asBlockBoundWitnessWithStorageMeta","StepSizes","hashFromBlockNumber","context","blockNumber","result","chainArchivist","get","head","currentBlock","asBlockBoundWitnessWithStorageMeta","at","required","block","jumpHash","previous","jumpBlockNumber","step","stepSize","StepSizes","entries","possibleJumpBlockNumber","asHash","step_hashes","newBlock","toSafeJsonString","Error","_hash","AsObjectFactory","isPayloadOfSchemaType","isStorageMeta","StepSummarySchema","BalancesStepSummarySchema","isBalancesStepSummary","isPayloadOfSchemaType","asBalancesStepSummary","AsObjectFactory","create","isBalancesStepSummaryWithStorageMeta","value","isStorageMeta","asBalancesStepSummaryWithStorageMeta","balanceStepSummaryFromRange","context","range","frameHeadHash","hashFromBlockNumber","frameSize","result","undefined","hash","payloads","hydrateBlock","chainArchivist","balances","address","balance","Object","entries","netBalancesForPayloads","toSignedBigInt","schema","BalancesStepSummarySchema","head","stepSize","step","StepSizes","indexOf","assertEx","join","summaryResult","summaryRepository","get","isAnyPayload","subRanges","deepCalculateFramesFromRange","promises","map","subRange","subResults","Promise","all","bigIntBalances","subResult","parseSignedBigInt","insert","finalResult","PayloadBuilder","addStorageMeta","asAddress","isDefined","asBlockBoundWitnessWithStorageMeta","balanceSummary","context","headResult","chainArchivist","get","head","headBoundWitness","asBlockBoundWitnessWithStorageMeta","at","required","rangeStart","isDefined","windowSize","Math","max","block","ranges","deepCalculateFramesFromRange","summaries","Promise","all","map","range","balanceStepSummaryFromRange","balances","summary","address","balance","Object","entries","validAddress","asAddress","parseSignedBigInt","LogLevel","z","z","isLocalhost","hostname","endsWith","getUrl","host","port","scheme","isLocalhost","TODO","z","MnemonicStringSchema","string","transform","s","trim","replaceAll","refine","includes","split","length","message","describe","ApiConfigSchema","z","object","mnemonic","MnemonicStringSchema","optional","describe","host","string","default","port","coerce","number","z","AppConfigSchema","object","port","coerce","number","default","describe","z","ChainConfigSchema","object","id","string","optional","describe","z","EvmJsonRpcConfigSchema","object","url","string","optional","describe","EvmInfuraConfigSchema","projectId","projectSecret","EvmConfigSchema","chainId","infura","jsonRpc","z","ProducerConfigSchema","z","object","healthCheckPort","coerce","number","optional","describe","minStake","default","mnemonic","MnemonicStringSchema","port","disableIntentRedeclaration","boolean","rewardAddress","string","isDefined","isUndefined","z","hasMongoConfig","config","isUndefined","isDefined","connectionString","database","domain","password","username","MongoConfigSchema","z","object","string","min","optional","describe","z","StorageConfigSchema","z","object","mongo","MongoConfigSchema","optional","describe","root","string","z","OpenTelemetryConfigSchema","object","otlpEndpoint","string","optional","describe","TelemetryConfigSchema","otel","LogLevels","Object","keys","LogLevel","Xl1CommonConfigSchema","z","object","silent","boolean","default","describe","logLevel","enum","ConfigSchema","shape","api","ApiConfigSchema","parse","app","AppConfigSchema","chain","ChainConfigSchema","evm","EvmConfigSchema","producer","ProducerConfigSchema","storage","StorageConfigSchema","telemetry","TelemetryConfigSchema","getDefaultConfig","assertEx","toHex","BoundWitnessBuilder","PayloadBuilder","defaultTransactionFees","buildTransaction","chain","onChainPayloads","offChainPayloads","signer","nbf","exp","from","fees","defaultTransactionFees","undefined","Array","isArray","Error","txBoundWitnessFields","base","toHex","gasLimit","gasPrice","priority","elevatedHashes","PayloadBuilder","hashes","script","elevatedHash","push","fields","assertEx","at","address","length","tx","txPayloads","BoundWitnessBuilder","meta","$signatures","payloads","signers","build","addStorageMeta","toHex","BoundWitnessBuilder","PayloadBuilder","defaultTransactionFees","buildUnsignedTransaction","chain","onChainPayloads","offChainPayloads","nbf","exp","from","fees","defaultTransactionFees","txBoundWitnessFields","base","toHex","gasLimit","gasPrice","priority","elevatedHashes","PayloadBuilder","hashes","script","elevatedHash","push","fields","length","tx","txPayloads","BoundWitnessBuilder","meta","$signatures","payloads","build","addStorageMeta","delay","isDefined","PayloadBuilder","DEFAULT_CONFIRMATION_ATTEMPTS","DEFAULT_DELAY_BETWEEN_ATTEMPTS","confirmSubmittedTransaction","viewer","transaction","options","attempts","maxAttempts","delay","attemptDelay","txBWHash","PayloadBuilder","hash","logger","log","tx","transactionByHash","undefined","isDefined","error","Error","assertEx","hydrateTypedBoundWitness","tryHydrateTypedBoundWitness","isAllowedBlockPayload","isTransactionBoundWitnessWithStorageMeta","tryHydrateTransaction","archivist","hash","tryHydrateTypedBoundWitness","isTransactionBoundWitnessWithStorageMeta","hydrateTransaction","hydrateTypedBoundWitness","flattenHydratedTransaction","hydratedTransaction","tx","txPayloads","flattenHydratedTransactions","hydratedTransactions","flatMap","tryHydrateElevatedTransaction","undefined","transaction","payloads","opCodes","script","filter","operation","startsWith","elevatedPayloads","opCode","code","split","elevatedPayload","find","payload","_hash","isAllowedBlockPayload","push","length","hydrateElevatedTransaction","assertEx","PayloadBuilder","transactionBlockByteCount","transaction","payloads","cleanTransaction","PayloadBuilder","omitStorageMeta","transactionBytes","JSON","stringify","length","cleanPayloads","reduce","acc","payload","asHash","crackOperation","operation","parts","split","length","Error","slice","crackOperations","operations","map","op","transactionElevatedPayloadHashes","transaction","elevateOperations","crackOperations","script","filter","op","map","asHash","transactionElevatedPayloads","payloads","hashes","elevatedPayloads","payload","includes","_hash","AttoXL1","TransactionGasCosts","transactionBytesRequiredGas","transaction","payloads","transactionBlockBytes","transactionBlockByteCount","AttoXL1","TransactionGasCosts","characterStorage","BigInt","transactionRequiredGas","hydratedTransaction","elevatedPayloads","transactionElevatedPayloads","hashes","length","signatures","addresses","hashValidation","signatureValidation","payloadValidation","filterAs","assertEx","asHash","isAllowedBlockPayloadWithHashStorageMeta","tryExtractElevatedHashesFromScript","strings","hashes","filter","str","startsWith","map","split","filterAs","h","asHash","extractElevatedHashesFromScript","filtered","assertEx","length","tryExtractElevatedHashes","tx","bw","payloads","script","p","includes","_hash","isAllowedBlockPayloadWithHashStorageMeta","extractElevatedHashes","toArrayBuffer","assertEx","hexFromArrayBuffer","PayloadBuilder","signTransaction","tx","signer","assertEx","from","address","signedTx","structuredClone","addresses","previous_hashes","previousHash","hash","PayloadBuilder","hashBytes","toArrayBuffer","signature","sign","$signatures","hexFromArrayBuffer","HDWallet","WALLET_COMPLIANCE","COIN_TYPES","Ethereum","ACCOUNT_TYPE","GANACHE","XYO","CHANGE_ADDRESS","META_MASK","ADDRESS_INDEX","DEFAULT_WALLET_PATH","generateXyoBaseWalletFromPhrase","walletPhrase","wallet","HDWallet","fromPhrase","DEFAULT_WALLET_PATH"]}
|
|
@@ -2,5 +2,5 @@ import type { Address, Hex } from '@xylabs/hex';
|
|
|
2
2
|
import type { AccountInstance } from '@xyo-network/account-model';
|
|
3
3
|
import type { Payload } from '@xyo-network/payload-model';
|
|
4
4
|
import type { AllowedBlockPayload, HydratedTransaction, TransactionFeesBigInt } from '@xyo-network/xl1-protocol';
|
|
5
|
-
export declare function buildTransaction(chain: Hex,
|
|
5
|
+
export declare function buildTransaction(chain: Hex, onChainPayloads: AllowedBlockPayload[], offChainPayloads: Payload[], signer: AccountInstance | AccountInstance[], nbf: number, exp: number, from?: Address, fees?: TransactionFeesBigInt): Promise<HydratedTransaction>;
|
|
6
6
|
//# sourceMappingURL=buildTransaction.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buildTransaction.d.ts","sourceRoot":"","sources":["../../../src/transaction/buildTransaction.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AAE/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAGjE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACzD,OAAO,KAAK,EACV,mBAAmB,EAGnB,mBAAmB,EAA0D,qBAAqB,EACnG,MAAM,2BAA2B,CAAA;AAGlC,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,GAAG,EACV,
|
|
1
|
+
{"version":3,"file":"buildTransaction.d.ts","sourceRoot":"","sources":["../../../src/transaction/buildTransaction.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AAE/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAGjE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACzD,OAAO,KAAK,EACV,mBAAmB,EAGnB,mBAAmB,EAA0D,qBAAqB,EACnG,MAAM,2BAA2B,CAAA;AAGlC,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,GAAG,EACV,eAAe,EAAE,mBAAmB,EAAE,EACtC,gBAAgB,EAAE,OAAO,EAAE,EAC3B,MAAM,EAAE,eAAe,GAAG,eAAe,EAAE,EAC3C,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,OAAO,EACd,IAAI,GAAE,qBAA8C,GACnD,OAAO,CAAC,mBAAmB,CAAC,CAwC9B"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Address, Hex } from '@xylabs/hex';
|
|
2
|
+
import type { Payload } from '@xyo-network/payload-model';
|
|
3
|
+
import type { AllowedBlockPayload, HydratedTransaction, TransactionFeesBigInt } from '@xyo-network/xl1-protocol';
|
|
4
|
+
export declare function buildUnsignedTransaction(chain: Hex, onChainPayloads: AllowedBlockPayload[], offChainPayloads: Payload[], nbf: number, exp: number, from: Address, fees?: TransactionFeesBigInt): Promise<HydratedTransaction>;
|
|
5
|
+
//# sourceMappingURL=buildUnsignedTransaction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildUnsignedTransaction.d.ts","sourceRoot":"","sources":["../../../src/transaction/buildUnsignedTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AAI/C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACzD,OAAO,KAAK,EACV,mBAAmB,EAGnB,mBAAmB,EAA0D,qBAAqB,EACnG,MAAM,2BAA2B,CAAA;AAGlC,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,GAAG,EACV,eAAe,EAAE,mBAAmB,EAAE,EACtC,gBAAgB,EAAE,OAAO,EAAE,EAC3B,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,OAAO,EACb,IAAI,GAAE,qBAA8C,GACnD,OAAO,CAAC,mBAAmB,CAAC,CAmC9B"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { Logger } from '@xylabs/logger';
|
|
2
|
+
import type { Signed } from '@xyo-network/boundwitness-model';
|
|
3
|
+
import type { HydratedTransaction, TransactionBoundWitness, XyoViewer } from '@xyo-network/xl1-protocol';
|
|
4
|
+
export type ConfirmSubmittedTransactionOptions = {
|
|
5
|
+
/**
|
|
6
|
+
* Number of attempts to confirm the transaction.
|
|
7
|
+
* Defaults to 20.
|
|
8
|
+
*/
|
|
9
|
+
attempts?: number;
|
|
10
|
+
/**
|
|
11
|
+
* Delay in milliseconds between confirmation attempts.
|
|
12
|
+
* Defaults to 1000 (1 second).
|
|
13
|
+
*/
|
|
14
|
+
delay?: number;
|
|
15
|
+
/**
|
|
16
|
+
* Optional logger instance for logging progress.
|
|
17
|
+
*/
|
|
18
|
+
logger?: Logger;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Confirms a submitted transaction by checking if it has been included in the blockchain.
|
|
22
|
+
* @param viewer The viewer
|
|
23
|
+
* @param transaction The transaction to confirm
|
|
24
|
+
* @param options Options for confirmation
|
|
25
|
+
* @returns The confirmed transaction or throws an error if not confirmed
|
|
26
|
+
*/
|
|
27
|
+
export declare const confirmSubmittedTransaction: (viewer: XyoViewer, transaction: Signed<TransactionBoundWitness>, options?: ConfirmSubmittedTransactionOptions) => Promise<HydratedTransaction>;
|
|
28
|
+
//# sourceMappingURL=confirmSubmittedTransaction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confirmSubmittedTransaction.d.ts","sourceRoot":"","sources":["../../../src/transaction/confirmSubmittedTransaction.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAE5C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAA;AAE7D,OAAO,KAAK,EACV,mBAAmB,EAAE,uBAAuB,EAAE,SAAS,EACxD,MAAM,2BAA2B,CAAA;AAKlC,MAAM,MAAM,kCAAkC,GAAG;IAC/C;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,2BAA2B,GACtC,QAAQ,SAAS,EACjB,aAAa,MAAM,CAAC,uBAAuB,CAAC,EAC5C,UAAU,kCAAkC,KAC3C,OAAO,CAAC,mBAAmB,CAqB7B,CAAA"}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
export * from './buildTransaction.ts';
|
|
2
|
+
export * from './buildUnsignedTransaction.ts';
|
|
3
|
+
export * from './confirmSubmittedTransaction.ts';
|
|
2
4
|
export * from './hydrateTransaction.ts';
|
|
3
5
|
export * from './primitives/index.ts';
|
|
4
6
|
export * from './script.ts';
|
|
7
|
+
export * from './signTransaction.ts';
|
|
5
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/transaction/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAA;AACrC,cAAc,yBAAyB,CAAA;AACvC,cAAc,uBAAuB,CAAA;AACrC,cAAc,aAAa,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/transaction/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAA;AACrC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,kCAAkC,CAAA;AAChD,cAAc,yBAAyB,CAAA;AACvC,cAAc,uBAAuB,CAAA;AACrC,cAAc,aAAa,CAAA;AAC3B,cAAc,sBAAsB,CAAA"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { AccountInstance } from '@xyo-network/account-model';
|
|
2
|
+
import type { TransactionBoundWitness } from '@xyo-network/xl1-protocol';
|
|
3
|
+
export declare function signTransaction(tx: TransactionBoundWitness, signer: AccountInstance): Promise<TransactionBoundWitness>;
|
|
4
|
+
//# sourceMappingURL=signTransaction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signTransaction.d.ts","sourceRoot":"","sources":["../../../src/transaction/signTransaction.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAEjE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAA;AAExE,wBAAsB,eAAe,CAAC,EAAE,EAAE,uBAAuB,EAAE,MAAM,EAAE,eAAe,oCAUzF"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "http://json.schemastore.org/package.json",
|
|
3
3
|
"name": "@xyo-network/xl1-protocol-sdk",
|
|
4
|
-
"version": "1.8.
|
|
4
|
+
"version": "1.8.3",
|
|
5
5
|
"description": "XYO Layer One SDK Protocol",
|
|
6
6
|
"homepage": "https://xylabs.com",
|
|
7
7
|
"bugs": {
|
|
@@ -37,7 +37,9 @@
|
|
|
37
37
|
],
|
|
38
38
|
"dependencies": {
|
|
39
39
|
"@xylabs/array": "^4.15.0",
|
|
40
|
+
"@xylabs/arraybuffer": "^4.15.3",
|
|
40
41
|
"@xylabs/assert": "^4.15.0",
|
|
42
|
+
"@xylabs/delay": "^4.15.0",
|
|
41
43
|
"@xylabs/hex": "^4.15.0",
|
|
42
44
|
"@xylabs/logger": "^4.15.0",
|
|
43
45
|
"@xylabs/object": "^4.15.0",
|
|
@@ -2,7 +2,7 @@ import type { ArchivistInstance, WriteArchivist } from '@xyo-network/archivist-m
|
|
|
2
2
|
import type { WalletInstance } from '@xyo-network/wallet-model'
|
|
3
3
|
import type {
|
|
4
4
|
AccountBalanceService, BlockProducerService,
|
|
5
|
-
BlockRewardService, ChainContractViewer, ChainStaker, ChainStakeViewer, ElectionService,
|
|
5
|
+
BlockRewardService, ChainContractViewer, ChainStaker, ChainStakeViewer, ElectionService, EventingChainBlockNumberIteratorService,
|
|
6
6
|
StakeIntentService,
|
|
7
7
|
} from '@xyo-network/xl1-protocol'
|
|
8
8
|
|
|
@@ -29,7 +29,7 @@ export interface ChainServiceCollection {
|
|
|
29
29
|
/**
|
|
30
30
|
* The chain iterator
|
|
31
31
|
*/
|
|
32
|
-
chainIterator?:
|
|
32
|
+
chainIterator?: EventingChainBlockNumberIteratorService
|
|
33
33
|
/**
|
|
34
34
|
* Service for viewing stake information
|
|
35
35
|
*/
|
|
@@ -2,7 +2,7 @@ import type { ArchivistInstance, WriteArchivist } from '@xyo-network/archivist-m
|
|
|
2
2
|
import type { WalletInstance } from '@xyo-network/wallet-model'
|
|
3
3
|
import type {
|
|
4
4
|
AccountBalanceServiceV2, BlockProducerService,
|
|
5
|
-
BlockRewardService, ChainContractViewer, ChainStaker, ChainStakeViewer, ElectionService,
|
|
5
|
+
BlockRewardService, ChainContractViewer, ChainStaker, ChainStakeViewer, ElectionService, EventingChainBlockNumberIteratorService,
|
|
6
6
|
PendingTransactionsService,
|
|
7
7
|
StakeIntentService,
|
|
8
8
|
} from '@xyo-network/xl1-protocol'
|
|
@@ -29,7 +29,7 @@ export interface ChainServiceCollectionV2 {
|
|
|
29
29
|
/**
|
|
30
30
|
* The chain iterator
|
|
31
31
|
*/
|
|
32
|
-
chainIterator?:
|
|
32
|
+
chainIterator?: EventingChainBlockNumberIteratorService
|
|
33
33
|
/**
|
|
34
34
|
* Service for viewing stake information
|
|
35
35
|
*/
|
|
@@ -15,8 +15,8 @@ import { defaultTransactionFees } from '@xyo-network/xl1-protocol'
|
|
|
15
15
|
|
|
16
16
|
export async function buildTransaction(
|
|
17
17
|
chain: Hex,
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
onChainPayloads: AllowedBlockPayload[],
|
|
19
|
+
offChainPayloads: Payload[],
|
|
20
20
|
signer: AccountInstance | AccountInstance[],
|
|
21
21
|
nbf: number,
|
|
22
22
|
exp: number,
|
|
@@ -39,7 +39,7 @@ export async function buildTransaction(
|
|
|
39
39
|
exp,
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
const elevatedHashes = await PayloadBuilder.hashes(
|
|
42
|
+
const elevatedHashes = await PayloadBuilder.hashes(onChainPayloads)
|
|
43
43
|
const script: string[] = []
|
|
44
44
|
for (const elevatedHash of elevatedHashes) {
|
|
45
45
|
script.push(`elevate|${elevatedHash}`)
|
|
@@ -57,7 +57,7 @@ export async function buildTransaction(
|
|
|
57
57
|
const [tx, txPayloads] = await new BoundWitnessBuilder<TransactionBoundWitness>()
|
|
58
58
|
.fields(fields)
|
|
59
59
|
.meta({ $signatures: [] })
|
|
60
|
-
.payloads([...
|
|
60
|
+
.payloads([...onChainPayloads, ...offChainPayloads])
|
|
61
61
|
.signers(Array.isArray(signer) ? signer : [signer])
|
|
62
62
|
.build()
|
|
63
63
|
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { Address, Hex } from '@xylabs/hex'
|
|
2
|
+
import { toHex } from '@xylabs/hex'
|
|
3
|
+
import { BoundWitnessBuilder } from '@xyo-network/boundwitness-builder'
|
|
4
|
+
import { PayloadBuilder } from '@xyo-network/payload-builder'
|
|
5
|
+
import type { Payload } from '@xyo-network/payload-model'
|
|
6
|
+
import type {
|
|
7
|
+
AllowedBlockPayload,
|
|
8
|
+
ExecutableFields,
|
|
9
|
+
FromFields,
|
|
10
|
+
HydratedTransaction, TransactionBoundWitness, TransactionBoundWitnessFields, TransactionFeesBigInt,
|
|
11
|
+
} from '@xyo-network/xl1-protocol'
|
|
12
|
+
import { defaultTransactionFees } from '@xyo-network/xl1-protocol'
|
|
13
|
+
|
|
14
|
+
export async function buildUnsignedTransaction(
|
|
15
|
+
chain: Hex,
|
|
16
|
+
onChainPayloads: AllowedBlockPayload[],
|
|
17
|
+
offChainPayloads: Payload[],
|
|
18
|
+
nbf: number,
|
|
19
|
+
exp: number,
|
|
20
|
+
from: Address,
|
|
21
|
+
fees: TransactionFeesBigInt = defaultTransactionFees,
|
|
22
|
+
): Promise<HydratedTransaction> {
|
|
23
|
+
const txBoundWitnessFields: TransactionBoundWitnessFields = {
|
|
24
|
+
chain,
|
|
25
|
+
fees: {
|
|
26
|
+
base: toHex(fees.base),
|
|
27
|
+
gasLimit: toHex(fees.gasLimit),
|
|
28
|
+
gasPrice: toHex(fees.gasPrice),
|
|
29
|
+
priority: toHex(fees.priority),
|
|
30
|
+
},
|
|
31
|
+
nbf,
|
|
32
|
+
exp,
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const elevatedHashes = await PayloadBuilder.hashes(onChainPayloads)
|
|
36
|
+
const script: string[] = []
|
|
37
|
+
for (const elevatedHash of elevatedHashes) {
|
|
38
|
+
script.push(`elevate|${elevatedHash}`)
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const fields: TransactionBoundWitnessFields & FromFields & Partial<ExecutableFields> = {
|
|
42
|
+
...txBoundWitnessFields,
|
|
43
|
+
from,
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
if (script.length > 0) {
|
|
47
|
+
fields.script = script
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const [tx, txPayloads] = await new BoundWitnessBuilder<TransactionBoundWitness>()
|
|
51
|
+
.fields(fields)
|
|
52
|
+
.meta({ $signatures: [] })
|
|
53
|
+
.payloads([...onChainPayloads, ...offChainPayloads])
|
|
54
|
+
.build()
|
|
55
|
+
|
|
56
|
+
return [await PayloadBuilder.addStorageMeta(tx), await PayloadBuilder.addStorageMeta(txPayloads)]
|
|
57
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { delay } from '@xylabs/delay'
|
|
2
|
+
import type { Logger } from '@xylabs/logger'
|
|
3
|
+
import { isDefined } from '@xylabs/typeof'
|
|
4
|
+
import type { Signed } from '@xyo-network/boundwitness-model'
|
|
5
|
+
import { PayloadBuilder } from '@xyo-network/payload-builder'
|
|
6
|
+
import type {
|
|
7
|
+
HydratedTransaction, TransactionBoundWitness, XyoViewer,
|
|
8
|
+
} from '@xyo-network/xl1-protocol'
|
|
9
|
+
|
|
10
|
+
const DEFAULT_CONFIRMATION_ATTEMPTS = 20
|
|
11
|
+
const DEFAULT_DELAY_BETWEEN_ATTEMPTS = 1000 // milliseconds
|
|
12
|
+
|
|
13
|
+
export type ConfirmSubmittedTransactionOptions = {
|
|
14
|
+
/**
|
|
15
|
+
* Number of attempts to confirm the transaction.
|
|
16
|
+
* Defaults to 20.
|
|
17
|
+
*/
|
|
18
|
+
attempts?: number
|
|
19
|
+
/**
|
|
20
|
+
* Delay in milliseconds between confirmation attempts.
|
|
21
|
+
* Defaults to 1000 (1 second).
|
|
22
|
+
*/
|
|
23
|
+
delay?: number
|
|
24
|
+
/**
|
|
25
|
+
* Optional logger instance for logging progress.
|
|
26
|
+
*/
|
|
27
|
+
logger?: Logger
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Confirms a submitted transaction by checking if it has been included in the blockchain.
|
|
32
|
+
* @param viewer The viewer
|
|
33
|
+
* @param transaction The transaction to confirm
|
|
34
|
+
* @param options Options for confirmation
|
|
35
|
+
* @returns The confirmed transaction or throws an error if not confirmed
|
|
36
|
+
*/
|
|
37
|
+
export const confirmSubmittedTransaction = async (
|
|
38
|
+
viewer: XyoViewer,
|
|
39
|
+
transaction: Signed<TransactionBoundWitness>,
|
|
40
|
+
options?: ConfirmSubmittedTransactionOptions,
|
|
41
|
+
): Promise<HydratedTransaction> => {
|
|
42
|
+
const { attempts: maxAttempts = DEFAULT_CONFIRMATION_ATTEMPTS, delay: attemptDelay = DEFAULT_DELAY_BETWEEN_ATTEMPTS } = options || {}
|
|
43
|
+
const txBWHash = await PayloadBuilder.hash(transaction)
|
|
44
|
+
options?.logger?.log('✅ confirming transaction:', txBWHash, '\n')
|
|
45
|
+
let attempts = 0
|
|
46
|
+
while (true) {
|
|
47
|
+
const tx = await viewer.transactionByHash(txBWHash) ?? undefined
|
|
48
|
+
if (isDefined(tx)) {
|
|
49
|
+
options?.logger?.log('🍻 Transaction confirmed:', txBWHash, '\n')
|
|
50
|
+
return tx
|
|
51
|
+
} else {
|
|
52
|
+
attempts++
|
|
53
|
+
if (attempts > maxAttempts) {
|
|
54
|
+
options?.logger?.error(`⚠️ Transaction not confirmed after ${maxAttempts} attempts`)
|
|
55
|
+
throw new Error(`Transaction ${txBWHash} not confirmed after ${maxAttempts} attempts`)
|
|
56
|
+
} else {
|
|
57
|
+
options?.logger?.log(`🔄 Transaction not confirmed yet, attempt ${attempts}. Retrying...`, '\n')
|
|
58
|
+
await delay(attemptDelay)
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
package/src/transaction/index.ts
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
export * from './buildTransaction.ts'
|
|
2
|
+
export * from './buildUnsignedTransaction.ts'
|
|
3
|
+
export * from './confirmSubmittedTransaction.ts'
|
|
2
4
|
export * from './hydrateTransaction.ts'
|
|
3
5
|
export * from './primitives/index.ts'
|
|
4
6
|
export * from './script.ts'
|
|
7
|
+
export * from './signTransaction.ts'
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { toArrayBuffer } from '@xylabs/arraybuffer'
|
|
2
|
+
import { assertEx } from '@xylabs/assert'
|
|
3
|
+
import { hexFromArrayBuffer } from '@xylabs/hex'
|
|
4
|
+
import type { AccountInstance } from '@xyo-network/account-model'
|
|
5
|
+
import { PayloadBuilder } from '@xyo-network/payload-builder'
|
|
6
|
+
import type { TransactionBoundWitness } from '@xyo-network/xl1-protocol'
|
|
7
|
+
|
|
8
|
+
export async function signTransaction(tx: TransactionBoundWitness, signer: AccountInstance) {
|
|
9
|
+
assertEx(tx.from === signer.address, () => 'Signer address does not match transaction from address')
|
|
10
|
+
const signedTx = structuredClone(tx)
|
|
11
|
+
signedTx.addresses = [signer.address]
|
|
12
|
+
signedTx.previous_hashes = [signer.previousHash ?? null]
|
|
13
|
+
const hash = await PayloadBuilder.hash(signedTx)
|
|
14
|
+
const hashBytes = toArrayBuffer(hash)
|
|
15
|
+
const [signature] = await signer.sign(hashBytes)
|
|
16
|
+
signedTx.$signatures = [hexFromArrayBuffer(signature)]
|
|
17
|
+
return signedTx
|
|
18
|
+
}
|