@xyo-network/chain-wrappers 1.5.28 → 1.5.30

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.
@@ -348,6 +348,7 @@ import { PayloadBuilder as PayloadBuilder3 } from "@xyo-network/payload-builder"
348
348
 
349
349
  // src/transaction/HydratedTransaction.ts
350
350
  import { hexToBigInt as hexToBigInt2 } from "@xylabs/hex";
351
+ import { isDefined as isDefined2 } from "@xylabs/typeof";
351
352
  import { tryExtractElevatedHashes, tryExtractElevatedHashesFromScript } from "@xyo-network/chain-protocol";
352
353
  import { XYO_ZERO_ADDRESS } from "@xyo-network/chain-utils";
353
354
  import { validateTransaction } from "@xyo-network/chain-validation";
@@ -435,6 +436,16 @@ var HydratedTransactionWrapper = class _HydratedTransactionWrapper {
435
436
  get elevatedPayloads() {
436
437
  return tryExtractElevatedHashes(this.data);
437
438
  }
439
+ get externalPayloads() {
440
+ const allPayloads = this.payloads;
441
+ const external = {};
442
+ for (let i = 0; i < this.boundWitness.payload_hashes.length; i++) {
443
+ const payloadHash = this.boundWitness.payload_hashes[i];
444
+ const payload = allPayloads.find((p) => p._hash === payloadHash);
445
+ external[payloadHash] = isDefined2(payload) ? payload : this.boundWitness.payload_schemas[i];
446
+ }
447
+ return external;
448
+ }
438
449
  get from() {
439
450
  return this.data[0].from;
440
451
  }
@@ -446,6 +457,23 @@ var HydratedTransactionWrapper = class _HydratedTransactionWrapper {
446
457
  ...this.payloadsCache
447
458
  ];
448
459
  }
460
+ get privateExternalPayloads() {
461
+ const allPayloads = this.payloads;
462
+ const missing = {};
463
+ for (let i = 0; i < this.boundWitness.payload_hashes.length; i++) {
464
+ const payloadHash = this.boundWitness.payload_hashes[i];
465
+ if (!allPayloads.some((p) => p._hash === payloadHash)) {
466
+ missing[payloadHash] = this.boundWitness.payload_schemas[i];
467
+ }
468
+ }
469
+ return missing;
470
+ }
471
+ // list all the payloads that are included in the transaction and are not elevated and found in the hydration
472
+ get publicExternalPayloads() {
473
+ const allPayloads = this.payloads;
474
+ const elevatedPayloads = this.elevatedPayloads;
475
+ return allPayloads.filter((p) => !elevatedPayloads.some((ep) => ep._hash === p._hash));
476
+ }
449
477
  static async parse(transaction, validate = false) {
450
478
  const wrapper = new _HydratedTransactionWrapper([
451
479
  await PayloadBuilder2.addStorageMeta(transaction[0]),
@@ -537,7 +565,6 @@ var HydratedBlockWrapper = class _HydratedBlockWrapper {
537
565
  }
538
566
  data;
539
567
  allPayloadsCache = [];
540
- publicPayloadsCache = [];
541
568
  transactionsCache = [];
542
569
  constructor(data) {
543
570
  this.data = data;
@@ -559,17 +586,6 @@ var HydratedBlockWrapper = class _HydratedBlockWrapper {
559
586
  ...this.allPayloadsCache
560
587
  ];
561
588
  }
562
- get privatePayloadCount() {
563
- return this.data[1].length - this.publicPayloadCount;
564
- }
565
- get publicPayloadCount() {
566
- return this.allPayloadsCache.length;
567
- }
568
- get publicPayloads() {
569
- return [
570
- ...this.publicPayloadsCache
571
- ];
572
- }
573
589
  get reward() {
574
590
  return this.allPayloadsCache.reduce((acc, payload) => acc + (isTransfer2(payload) ? payload.from === XYO_ZERO_ADDRESS2 ? sumTransfers2(payload) : 0n : 0n), 0n);
575
591
  }
@@ -613,12 +629,8 @@ var HydratedBlockWrapper = class _HydratedBlockWrapper {
613
629
  }
614
630
  for (const hash of this.data[0].payload_hashes) {
615
631
  const payload = this.allPayloadsCache.find((p) => p._hash === hash);
616
- if (payload) {
617
- if (isAllowedBlockPayloadWithHashStorageMeta(payload)) {
618
- this.publicPayloadsCache.push(payload);
619
- } else {
620
- throw new Error("Disallowed payload type");
621
- }
632
+ if (payload && !isAllowedBlockPayloadWithHashStorageMeta(payload)) {
633
+ throw new Error("Disallowed payload type");
622
634
  }
623
635
  }
624
636
  if (validate) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/amount/splitOnDecimal.ts","../../src/amount/splitOnDecimalToString.ts","../../src/amount/ShiftedBigInt.ts","../../src/amount/Xl1Amount.ts","../../src/block/IndexedHydratedBlockRangeStore.ts","../../src/lib/createSignatureWrappers.ts","../../src/Signature.ts","../../src/block/HydratedBlock.ts","../../src/transaction/SignedHydratedTransaction.ts","../../src/transaction/HydratedTransaction.ts","../../src/Fees.ts","../../src/block/SignedHydratedBlock.ts"],"sourcesContent":["export const splitOnDecimal = (value: bigint, places = 18): [bigint, bigint] => {\n const whole = value / BigInt(10 ** places)\n const decimal = value % BigInt(10 ** places)\n return [whole, decimal]\n}\n","import { splitOnDecimal } from './splitOnDecimal.ts'\n\nexport const splitOnDecimalToString = (\n value: bigint,\n places = 18,\n maxDecimal = places,\n maxCharacters = 9,\n minDecimals = 1,\n locale: Intl.LocalesArgument = 'en-US',\n): string => {\n const [whole, decimal] = splitOnDecimal(value, places)\n if (whole === 0n && decimal < 10 ** maxDecimal && decimal !== 0n) return '< 0.'.padEnd(maxDecimal + 5, '0') + '1'\n\n const wholeCharacters = whole.toString(10).length\n const calcMaxDecimalCharacters = maxCharacters === -1 ? places : wholeCharacters > maxCharacters ? 0 : maxCharacters - wholeCharacters\n const maxDecimalCharacters = Math.min(maxDecimal, calcMaxDecimalCharacters)\n\n // Format whole number with thousand separators according to locale\n const formattedWhole = new Intl.NumberFormat(locale, {\n maximumFractionDigits: 0,\n useGrouping: true,\n }).format(whole)\n\n // Get decimal separator for the locale\n const decimalSeparator = new Intl.NumberFormat(locale)\n .formatToParts(1.1)\n .find(part => part.type === 'decimal')?.value ?? '.'\n\n // Pad decimal part to correct number of places\n let paddedDecimal = decimal.toString().padStart(places, '0').slice(0, maxDecimalCharacters)\n // remove unneeded trailing zeros (honoring minDecimals)\n while (paddedDecimal.length > minDecimals && paddedDecimal.endsWith('0')) {\n paddedDecimal = paddedDecimal.slice(0, -1)\n }\n\n return `${formattedWhole}${paddedDecimal.length > 0 ? decimalSeparator : ''}${paddedDecimal}`\n}\n","import type { ShiftedBigIntConfig } from '@xyo-network/xl1-protocol-sdk'\n\nimport { splitOnDecimalToString } from './splitOnDecimalToString.ts'\n\nexport class ShiftedBigInt {\n static readonly defaultConfig: ShiftedBigIntConfig = {\n places: 18,\n maxDecimal: 18,\n maxCharacters: 9,\n minDecimals: 1,\n locale: 'en-US',\n }\n\n config: ShiftedBigIntConfig\n value: bigint\n\n constructor(\n value: bigint | ShiftedBigInt,\n config: Partial<ShiftedBigIntConfig> = {},\n ) {\n this.value = typeof value === 'bigint' ? value : value.value\n this.config = {\n ...ShiftedBigInt.defaultConfig, ...(typeof value === 'bigint' ? {} : value.config), ...config,\n }\n }\n\n get locale(): Intl.LocalesArgument {\n return this.config.locale ?? 'en-US'\n }\n\n get maxCharacters(): number {\n return this.config.maxCharacters ?? 9\n }\n\n get maxDecimal(): number {\n return this.config.maxDecimal ?? this.places\n }\n\n get minDecimals(): number {\n return this.config.minDecimals ?? 1\n }\n\n get places(): number {\n return this.config.places ?? 18\n }\n\n toFullString(): string {\n return splitOnDecimalToString(\n this.value,\n this.places,\n this.places,\n Infinity,\n this.places,\n this.locale,\n )\n }\n\n toShortString(): string {\n return splitOnDecimalToString(\n this.value,\n this.places,\n this.maxDecimal,\n this.maxCharacters,\n this.minDecimals,\n this.locale,\n )\n }\n\n toString(): string {\n return this.toFullString()\n }\n}\n","/* eslint-disable @typescript-eslint/member-ordering */\nimport { assertEx } from '@xylabs/assert'\nimport {\n AttoXL1, FemtoXL1, MicroXL1, MilliXL1, NanoXL1, PicoXL1,\n XL1Places,\n} from '@xyo-network/xl1-protocol'\nimport type { ShiftedBigIntConfig } from '@xyo-network/xl1-protocol-sdk'\n\nimport { ShiftedBigInt } from './ShiftedBigInt.ts'\n\nconst MAX_XL1_AMOUNT = 2n ** BigInt(256) - 1n\nconst allowedPlaces = Object.values(XL1Places)\n\nexport interface XL1AmountInstance {\n value: AttoXL1\n\n to(places: bigint | number): bigint\n\n milli: MilliXL1\n\n micro: MicroXL1\n\n nano: NanoXL1\n\n pico: PicoXL1\n\n femto: FemtoXL1\n\n atto: AttoXL1\n\n toString(places: number, config: Partial<ShiftedBigIntConfig>): string\n}\n\nexport class XL1Amount implements XL1AmountInstance {\n value: AttoXL1\n private locale: Intl.LocalesArgument\n\n constructor(value: bigint, locale: Intl.LocalesArgument = 'en-US') {\n this.locale = locale\n this.value = AttoXL1(value > MAX_XL1_AMOUNT ? MAX_XL1_AMOUNT : value < 0n ? 0n : value)\n }\n\n static from(value: bigint, places: bigint = XL1Places.atto) {\n assertEx(allowedPlaces.includes(places), () => `Invalid conversion places (${places} not in ${allowedPlaces})`)\n return new XL1Amount(value * 10n ** BigInt(places))\n }\n\n static fromMilli(value: MilliXL1) {\n return this.from(value, XL1Places.milli)\n }\n\n static fromMicro(value: MicroXL1) {\n return this.from(value, XL1Places.micro)\n }\n\n static fromNano(value: NanoXL1) {\n return this.from(value, XL1Places.nano)\n }\n\n static fromPico(value: PicoXL1) {\n return this.from(value, XL1Places.pico)\n }\n\n static fromFemto(value: FemtoXL1) {\n return this.from(value, XL1Places.femto)\n }\n\n static fromAtto(value: AttoXL1) {\n return this.from(value, XL1Places.atto)\n }\n\n to(places: number | bigint = XL1Places.atto) {\n return this.value / 10n ** BigInt(places)\n }\n\n get milli() {\n return MilliXL1(this.to(XL1Places.micro))\n }\n\n get micro() {\n return MicroXL1(this.to(XL1Places.micro))\n }\n\n get nano() {\n return NanoXL1(this.to(XL1Places.nano))\n }\n\n get pico() {\n return PicoXL1(this.to(XL1Places.pico))\n }\n\n get femto() {\n return FemtoXL1(this.to(XL1Places.femto))\n }\n\n get atto() {\n return AttoXL1(this.to(XL1Places.atto))\n }\n\n toString(places: number = Number(XL1Places.atto), config: Partial<ShiftedBigIntConfig> = {}): string {\n assertEx(allowedPlaces.includes(BigInt(places)), () => `Invalid conversion places (${places} not in ${allowedPlaces})`)\n return new ShiftedBigInt(\n this.value,\n {\n places,\n locale: this.locale,\n maxDecimal: places,\n minDecimals: 0,\n maxCharacters: places,\n ...config,\n },\n ).toShortString()\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { BaseParams } from '@xylabs/base'\nimport { BaseEmitter } from '@xylabs/events'\nimport { exists } from '@xylabs/exists'\nimport type { Hash } from '@xylabs/hex'\nimport type { EmptyObject } from '@xylabs/object'\nimport type { Promisable } from '@xylabs/promise'\nimport { isDefined } from '@xylabs/typeof'\nimport type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { hydrateBlock } from '@xyo-network/chain-protocol'\nimport {\n asBlockBoundWitness, asBlockBoundWitnessWithStorageMeta, type HydratedBlock,\n} from '@xyo-network/xl1-protocol'\nimport type { BlockWindowInstance } from '@xyo-network/xl1-protocol-sdk'\nimport { Semaphore } from 'async-mutex'\n\nexport type HydratedBlockStoreParams<TAdditionalParams extends EmptyObject = EmptyObject> = BaseParams<{\n sourceArchivist: ArchivistInstance\n} & TAdditionalParams>\n\nexport interface HydratedBlockStoreInstance {\n fromHash(hash: Hash): Promisable<HydratedBlock | undefined>\n}\n\nexport interface IndexedHydratedBlockStoreInstance extends HydratedBlockStoreInstance {\n fromNumber(number: number): Promisable<HydratedBlock | undefined>\n}\n\nexport interface HydratedBlockRangeStoreParams extends HydratedBlockStoreParams<{\n first: Hash\n last: Hash\n snapshotArchivist: ArchivistInstance\n}> {}\n\nexport interface IndexedHydratedBlockRangeStoreInstance extends BlockWindowInstance, IndexedHydratedBlockStoreInstance {\n first(): Promisable<HydratedBlock>\n last(): Promisable<HydratedBlock>\n next(from: HydratedBlock): Promisable<HydratedBlock | undefined>\n next(from: HydratedBlock, count: number): Promisable<HydratedBlock[]>\n prev(from: HydratedBlock): Promisable<HydratedBlock | undefined>\n prev(from: HydratedBlock, count: number): Promisable<HydratedBlock[]>\n}\n\nconst BlockNumberIndexSemaphoreLocks = 10 as const\n\n// TODO: Allow/Require source/snapshot archivist to be BlockStores instead\nexport class IndexedHydratedBlockRangeStore extends BaseEmitter<HydratedBlockRangeStoreParams> implements IndexedHydratedBlockRangeStoreInstance {\n private _blockNumberIndex: Map<number, Hash> = new Map()\n private _blockNumberIndexSemaphore = new Semaphore(BlockNumberIndexSemaphoreLocks)\n private _firstNumber: number\n private _lastNumber: number\n\n protected constructor(params: HydratedBlockRangeStoreParams, firstNumber: number, lastNumber: number) {\n super(params)\n this._firstNumber = firstNumber\n this._lastNumber = lastNumber\n }\n\n get count(): number {\n return this._lastNumber - this._firstNumber + 1\n }\n\n get numberRange(): [number, number] {\n return [this._firstNumber, this._lastNumber]\n }\n\n get range(): [Hash, Hash] {\n return [this.params.first, this.params.last]\n }\n\n static async create(params: HydratedBlockRangeStoreParams): Promise<IndexedHydratedBlockRangeStore> {\n const firstBlock = asBlockBoundWitness((await params.sourceArchivist.get([params.first])).at(0)\n ?? (await params.snapshotArchivist.get([params.first])).at(0), {})\n const firstBlockExisting = assertEx(firstBlock, () => 'First block not found')\n\n const lastBlock = asBlockBoundWitness((await params.sourceArchivist.get([params.last])).at(0)\n ?? (await params.snapshotArchivist.get([params.last])).at(0), {})\n const lastBlockExisting = assertEx(lastBlock, () => 'Last block not found')\n\n // getting the block numbers here since can not get them in the constructor\n const result = new IndexedHydratedBlockRangeStore(params, firstBlockExisting.block, lastBlockExisting.block)\n result.createSubscriptions()\n await result.index()\n return result\n }\n\n async first(): Promise<HydratedBlock> {\n return assertEx(await this.fromHash(this.params.first), () => 'First block not found')\n }\n\n async fromHash(hash: Hash): Promise<HydratedBlock | undefined> {\n const block = (await hydrateBlock(this.params.sourceArchivist, hash))\n ?? (await hydrateBlock(this.params.snapshotArchivist, hash))\n if (isDefined(block) && (block[0].block <= this._lastNumber && block[0].block >= this._firstNumber)) {\n return block\n }\n }\n\n fromNumber(number: number): Promisable<HydratedBlock | undefined> {\n const hash = this._blockNumberIndex.get(number)\n if (isDefined(hash)) {\n return this.fromHash(hash)\n }\n }\n\n async last(): Promise<HydratedBlock> {\n return assertEx(await this.fromHash(this.params.last), () => 'Last block not found')\n }\n\n async next(from: HydratedBlock): Promise<HydratedBlock | undefined>\n async next(from: HydratedBlock, count: number): Promise<HydratedBlock[]>\n async next(from: HydratedBlock, count?: number): Promise<HydratedBlock | HydratedBlock[] | undefined> {\n const nextBlockNumber = from[0].block + 1\n if (nextBlockNumber > this._lastNumber) {\n return isDefined(count) ? [] : undefined\n }\n if (isDefined(count)) {\n if (count === 0) {\n return []\n }\n const nextBlock = await this.fromNumber(nextBlockNumber)\n\n if (isDefined(nextBlock)) {\n return [nextBlock, ...await this.next(nextBlock, count - 1)].filter(exists)\n } else {\n if (from[0].block < this._lastNumber) {\n throw new Error(`Next block [${nextBlockNumber}] not found, but should be in range`)\n }\n return []\n }\n } else {\n return await this.fromNumber(nextBlockNumber)\n }\n }\n\n async prev(from: HydratedBlock): Promise<HydratedBlock | undefined>\n async prev(from: HydratedBlock, count: number): Promise<HydratedBlock[]>\n async prev(from: HydratedBlock, count?: number): Promise<HydratedBlock | HydratedBlock[] | undefined> {\n const prevBlockNumber = from[0].block - 1\n if (prevBlockNumber < this._firstNumber) {\n return isDefined(count) ? [] : undefined\n }\n if (isDefined(count)) {\n if (count === 0) {\n return []\n }\n const prevBlock = await this.fromNumber(prevBlockNumber)\n if (isDefined(prevBlock)) {\n return [...await this.next(prevBlock, count - 1), prevBlock].filter(exists)\n } else {\n if (from[0].block > this._firstNumber) {\n throw new Error(`Prev block [${prevBlockNumber}] not found, but should be in range`)\n }\n return []\n }\n } else {\n return await this.fromNumber(prevBlockNumber)\n }\n }\n\n private createSubscriptions(): void {\n // we monitor deletes so that we can keep them if we need them for the window\n this.params.sourceArchivist.on('deleted', async ({ payloads }) => {\n await this.params.snapshotArchivist.insert(payloads)\n })\n }\n\n private async index() {\n // get all the locks (make exclusive)\n await this._blockNumberIndexSemaphore.acquire(BlockNumberIndexSemaphoreLocks)\n try {\n this._blockNumberIndex.clear()\n let blockToIndex: Hash = this.params.last\n let firstFound = false\n while (!firstFound) {\n const payload = assertEx((await this.params.sourceArchivist.get([blockToIndex])).at(0), () => 'Block payload not found')\n const block = assertEx(asBlockBoundWitnessWithStorageMeta(payload), () => 'Payload is not a Block')\n if (block.block < this._firstNumber || block.block > this._lastNumber) {\n throw new Error(`Block [${block.block}] is out of range`)\n }\n this._blockNumberIndex.set(block.block, block._hash)\n firstFound = block.block === this._firstNumber\n }\n } finally {\n this._blockNumberIndexSemaphore.release(BlockNumberIndexSemaphoreLocks)\n }\n }\n}\n","import type { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { SignatureInstance } from '@xyo-network/xl1-protocol-sdk'\n\nimport { SignatureWrapper } from '../Signature.ts'\n\nexport const createSignatureWrappers = async (bw: BoundWitness): Promise<SignatureInstance[]> => {\n const signatures: SignatureInstance[] = []\n const hash = await PayloadBuilder.dataHash(bw)\n for (let i = 0; i < bw.$signatures.length; i++) {\n signatures.push(\n new SignatureWrapper(bw.$signatures[i], bw.addresses[i], hash),\n )\n }\n return signatures\n}\n","import { toArrayBuffer } from '@xylabs/arraybuffer'\nimport type {\n Address, Hash, Hex,\n} from '@xylabs/hex'\nimport { BoundWitnessValidator } from '@xyo-network/boundwitness-validator'\nimport type { SignatureInstance } from '@xyo-network/xl1-protocol-sdk'\n\nexport class SignatureWrapper implements SignatureInstance {\n address: Address\n hash: Hash\n signature: Hex\n\n constructor(signature: Hex, address: Address, hash: Hash) {\n this.signature = signature\n this.address = address\n this.hash = hash\n }\n\n static async validate(hash: Hash, address: Address, signature: Hex): Promise<Error[]> {\n return await BoundWitnessValidator.validateSignature(toArrayBuffer(hash), toArrayBuffer(address), toArrayBuffer(signature))\n }\n\n async validate(): Promise<Error[]> {\n return await SignatureWrapper.validate(this.address, this.hash, this.signature)\n }\n}\n","import type { Hash } from '@xylabs/hex'\nimport { hexToBigInt } from '@xylabs/hex'\nimport { XYO_ZERO_ADDRESS } from '@xyo-network/chain-utils'\nimport { validateHydratedBlock, validateHydratedBlockState } from '@xyo-network/chain-validation'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { WithHashStorageMeta } from '@xyo-network/payload-model'\nimport type {\n AccountBalanceService,\n AllowedBlockPayload,\n HydratedBlock, SignedHydratedTransaction, Transfer,\n} from '@xyo-network/xl1-protocol'\nimport {\n isAllowedBlockPayloadWithHashStorageMeta,\n isSignedTransactionBoundWitnessWithStorageMeta,\n isTransfer,\n} from '@xyo-network/xl1-protocol'\nimport type { HydratedBlockInstance, SignedHydratedTransactionInstance } from '@xyo-network/xl1-protocol-sdk'\n\nimport { SignedHydratedTransactionWrapper } from '../transaction/SignedHydratedTransaction.ts'\n\nconst sumTransfers = (payload: Transfer) => {\n let total = 0n\n for (let i of Object.values(payload.transfers)) {\n total += hexToBigInt(i ?? '00')\n }\n return total\n}\n\nexport class HydratedBlockWrapper<T extends HydratedBlock> implements HydratedBlockInstance<[WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]> {\n data: [WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]\n protected allPayloadsCache: WithHashStorageMeta<WithHashStorageMeta<T[1][number]>>[] = []\n protected publicPayloadsCache: WithHashStorageMeta<WithHashStorageMeta<T[1][number] & AllowedBlockPayload>>[] = []\n protected transactionsCache: SignedHydratedTransactionInstance[] = []\n\n protected constructor(data: [WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]) {\n this.data = data\n }\n\n get block() {\n return this.data[0].block\n }\n\n get boundWitness() {\n return this.data[0]\n }\n\n get chain() {\n return this.data[0].chain\n }\n\n get payloadCount(): number {\n return this.allPayloadsCache.length\n }\n\n get payloads(): T[1][number][] {\n return [...this.allPayloadsCache]\n }\n\n get privatePayloadCount(): number {\n return this.data[1].length - this.publicPayloadCount\n }\n\n get publicPayloadCount(): number {\n return this.allPayloadsCache.length\n }\n\n get publicPayloads(): (T[1][number] & AllowedBlockPayload)[] {\n return [...this.publicPayloadsCache]\n }\n\n get reward(): bigint {\n return this.allPayloadsCache.reduce((acc: bigint, payload) => acc + (\n isTransfer(payload)\n ? payload.from === XYO_ZERO_ADDRESS\n ? sumTransfers(payload)\n : 0n\n : 0n), 0n)\n }\n\n get stepHashes(): Hash[] {\n return this.data[0].step_hashes\n }\n\n get transactionCount(): number {\n return this.transactionsCache.length\n }\n\n get transactions(): SignedHydratedTransactionInstance[] {\n return this.transactionsCache\n }\n\n static async parse<T extends HydratedBlock>(block: T, validate = false): Promise<HydratedBlockInstance> {\n const wrapper = new HydratedBlockWrapper<T>(block)\n return await wrapper.parse(validate)\n }\n\n payload(index: number) {\n return this.data[1].at(index)\n }\n\n transaction(index: number): SignedHydratedTransactionInstance | undefined {\n return this.transactionsCache.at(index)\n }\n\n async validate(): Promise<Error[]> {\n return await validateHydratedBlock(this.data)\n }\n\n async validateState(services: { accountBalance: AccountBalanceService }): Promise<Error[]> {\n return await validateHydratedBlockState(this.data, this.chain, services)\n }\n\n protected async parse(validate = false): Promise<HydratedBlockInstance<[WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]>> {\n const allPayloads = await PayloadBuilder.addStorageMeta(this.data[1])\n for (const payload of allPayloads) {\n if (isSignedTransactionBoundWitnessWithStorageMeta(payload)) {\n const hydratedTransaction: SignedHydratedTransaction = [payload, allPayloads.filter(\n p => payload.payload_hashes.includes(p._hash) || payload.payload_hashes.includes(p._dataHash),\n )]\n this.transactionsCache.push(await SignedHydratedTransactionWrapper.parse(hydratedTransaction))\n } else {\n this.allPayloadsCache.push(payload)\n }\n }\n for (const hash of this.data[0].payload_hashes) {\n const payload = this.allPayloadsCache.find(p => p._hash === hash)\n if (payload) {\n if (isAllowedBlockPayloadWithHashStorageMeta(payload)) {\n this.publicPayloadsCache.push(payload)\n } else {\n throw new Error('Disallowed payload type')\n }\n }\n }\n if (validate) {\n await this.validate()\n }\n return this\n }\n}\n","import { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { WithHashStorageMeta } from '@xyo-network/payload-model'\nimport type { SignedHydratedTransaction } from '@xyo-network/xl1-protocol'\nimport type { SignatureInstance, SignedHydratedTransactionInstance } from '@xyo-network/xl1-protocol-sdk'\n\nimport { createSignatureWrappers } from '../lib/createSignatureWrappers.ts'\nimport { HydratedTransactionWrapper } from './HydratedTransaction.ts'\n\nexport class SignedHydratedTransactionWrapper<T extends SignedHydratedTransaction> extends HydratedTransactionWrapper<T>\n implements SignedHydratedTransactionInstance<[WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]> {\n private _signatureCache: SignatureInstance[] = []\n\n get signatureCount(): number {\n return this._signatureCache.length\n }\n\n get signatures(): SignatureInstance[] {\n return [...this._signatureCache]\n }\n\n static override async parse<T extends SignedHydratedTransaction>(transaction: T, validate = false):\n Promise<SignedHydratedTransactionInstance<[WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]>> {\n const wrapper = new SignedHydratedTransactionWrapper<T>([\n await PayloadBuilder.addStorageMeta(transaction[0]),\n await PayloadBuilder.addStorageMeta(transaction[1]),\n ])\n return await wrapper.parse(validate)\n }\n\n signature(index: number): SignatureInstance | undefined {\n return this._signatureCache[index]\n }\n\n override async validate(): Promise<Error[]> {\n const errors: Error[] = []\n errors.push(\n ...(await Promise.all(this._signatureCache.map(signature => signature.validate()))).flat(),\n ...(await super.validate()),\n )\n return errors\n }\n\n protected override async parse(validate = false):\n Promise<SignedHydratedTransactionInstance<[WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]>> {\n this._signatureCache = await createSignatureWrappers(this.data[0])\n await super.parse(validate)\n return this\n }\n}\n","import { hexToBigInt } from '@xylabs/hex'\nimport type { Promisable } from '@xylabs/promise'\nimport { tryExtractElevatedHashes, tryExtractElevatedHashesFromScript } from '@xyo-network/chain-protocol'\nimport { XYO_ZERO_ADDRESS } from '@xyo-network/chain-utils'\nimport { validateTransaction } from '@xyo-network/chain-validation'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload, WithHashStorageMeta } from '@xyo-network/payload-model'\nimport type {\n AllowedBlockPayload, HydratedTransaction, HydratedTransactionWithHashStorageMeta, Transfer,\n} from '@xyo-network/xl1-protocol'\nimport { isTransfer } from '@xyo-network/xl1-protocol'\nimport {\n type HydratedTransactionInstance, type TransactionFeesInstance, transactionRequiredGas,\n} from '@xyo-network/xl1-protocol-sdk'\n\nimport { FeesWrapper } from '../Fees.ts'\n\nconst sumTransfers = (payload: Transfer) => {\n let total = 0n\n for (let i of Object.values(payload.transfers)) {\n total += hexToBigInt(i ?? '00')\n }\n return total\n}\n\nexport class HydratedTransactionWrapper<T extends HydratedTransaction> implements HydratedTransactionInstance<[WithHashStorageMeta<T[0]>,\n WithHashStorageMeta<T[1][number]>[]]> {\n data: HydratedTransactionWithHashStorageMeta<T>\n fees: TransactionFeesInstance\n\n protected payloadsCache: WithHashStorageMeta<Payload>[] = []\n\n protected constructor(data: HydratedTransactionWithHashStorageMeta<T>) {\n this.data = data\n this.fees = new FeesWrapper(\n this.boundWitness.fees,\n )\n }\n\n get boundWitness() {\n return this.data[0]\n }\n\n get elevatedPayloadCount(): number {\n const { script } = this.data[0]\n return script ? tryExtractElevatedHashesFromScript(script).length : 0\n }\n\n get elevatedPayloads(): WithHashStorageMeta<AllowedBlockPayload>[] {\n return tryExtractElevatedHashes(this.data)\n }\n\n get from() {\n return this.data[0].from\n }\n\n get payloadCount(): number {\n return this.payloadsCache.length\n }\n\n get payloads(): WithHashStorageMeta<WithHashStorageMeta<T[1][number]>>[] {\n return [...this.payloadsCache]\n }\n\n static async parse<T extends HydratedTransaction>(transaction: T, validate = false): Promise<HydratedTransactionInstance<[WithHashStorageMeta<T[0]>,\n WithHashStorageMeta<T[1][number]>[]]>> {\n const wrapper = new HydratedTransactionWrapper<T>(\n [\n await PayloadBuilder.addStorageMeta(transaction[0]),\n await PayloadBuilder.addStorageMeta(transaction[1]),\n ],\n )\n const parsed = await wrapper.parse()\n if (validate) {\n const errors = await wrapper.validate()\n if (errors.length > 0) {\n throw new Error(`Block validation failed: ${errors.join(', ')}`)\n }\n }\n return parsed\n }\n\n elevatedPayload(index: number): WithHashStorageMeta<AllowedBlockPayload & T[1][number]> | undefined {\n return this.elevatedPayloads.at(index)\n }\n\n gasRequired(): bigint {\n return transactionRequiredGas(this.data)\n }\n\n payload(index: number): WithHashStorageMeta<Payload> | undefined {\n return this.payloads.at(index)\n }\n\n reward(): bigint {\n return this.payloadsCache.reduce((acc: bigint, payload) => acc + (\n isTransfer(payload)\n ? payload.from === XYO_ZERO_ADDRESS\n ? sumTransfers(payload)\n : 0n\n : 0n), 0n)\n }\n\n validate(): Promisable<Error[]> {\n return validateTransaction(this.data)\n }\n\n protected async parse(validate = false): Promise<HydratedTransactionInstance<[WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]>> {\n const transactionPayloads = await PayloadBuilder.addStorageMeta(this.data[1])\n for (const payload of transactionPayloads) {\n this.payloadsCache.push(payload)\n }\n if (validate) {\n await this.validate()\n }\n return this\n }\n}\n","import type { Hex } from '@xylabs/hex'\nimport { hexToBigInt } from '@xylabs/hex'\nimport type { Promisable } from '@xylabs/promise'\nimport type { TransactionFeesBigInt, TransactionFeesHex } from '@xyo-network/xl1-protocol'\nimport { AttoXL1 } from '@xyo-network/xl1-protocol'\nimport type { TransactionFeesInstance } from '@xyo-network/xl1-protocol-sdk'\n\nfunction parseHexOrBigInt(value: Hex | bigint) {\n return AttoXL1((typeof value === 'bigint' ? value : hexToBigInt(value)))\n}\n\nexport class FeesWrapper implements TransactionFeesInstance {\n base: AttoXL1\n gasLimit: AttoXL1\n gasPrice: AttoXL1\n priority: AttoXL1\n\n constructor({\n base, gasLimit, gasPrice, priority,\n }: TransactionFeesHex | TransactionFeesBigInt) {\n this.base = parseHexOrBigInt(base)\n this.gasLimit = parseHexOrBigInt(gasLimit)\n this.gasPrice = parseHexOrBigInt(gasPrice)\n this.priority = parseHexOrBigInt(priority)\n }\n\n static validate({\n base, gasLimit, gasPrice, priority,\n }: TransactionFeesHex | TransactionFeesBigInt): Promisable<Error[]> {\n const errors: Error[] = []\n const baseValue = parseHexOrBigInt(base)\n const gasLimitValue = parseHexOrBigInt(gasLimit)\n const gasPriceValue = parseHexOrBigInt(gasPrice)\n const priorityValue = parseHexOrBigInt(priority)\n if (baseValue <= 0n) {\n errors.push(new Error('Base fee cannot be negative or zero'))\n }\n if (gasLimitValue < 0n) {\n errors.push(new Error('Gas limit cannot be negative'))\n }\n if (gasPriceValue < 0n) {\n errors.push(new Error('Gas price cannot be negative'))\n }\n if (priorityValue < 0n) {\n errors.push(new Error('Priority cannot be negative'))\n }\n return errors\n }\n\n async validate(): Promise<Error[]> {\n return await FeesWrapper.validate({\n base: this.base, gasLimit: this.gasLimit, gasPrice: this.gasPrice, priority: this.priority,\n })\n }\n}\n","import type { WithHashStorageMeta } from '@xyo-network/payload-model'\nimport type { SignedHydratedBlock } from '@xyo-network/xl1-protocol'\nimport type { SignatureInstance, SignedHydratedBlockInstance } from '@xyo-network/xl1-protocol-sdk'\n\nimport { createSignatureWrappers } from '../lib/createSignatureWrappers.ts'\nimport { HydratedBlockWrapper } from './HydratedBlock.ts'\n\nexport class SignedHydratedBlockWrapper<T extends SignedHydratedBlock> extends HydratedBlockWrapper<T>\n implements SignedHydratedBlockInstance<[WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]> {\n private _signatureCache: SignatureInstance[] = []\n\n get signatureCount(): number {\n return this._signatureCache.length\n }\n\n get signatures(): SignatureInstance[] {\n return [...this._signatureCache]\n }\n\n static override async parse<T extends SignedHydratedBlock>(block: T, validate = false):\n Promise<SignedHydratedBlockInstance<[WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]>> {\n const wrapper = new SignedHydratedBlockWrapper<T>(block)\n return await wrapper.parse(validate)\n }\n\n signature(index: number): SignatureInstance | undefined {\n return this._signatureCache[index]\n }\n\n override async validate(): Promise<Error[]> {\n const errors: Error[] = []\n errors.push(\n ...(await Promise.all(this._signatureCache.map(signature => signature.validate()))).flat(),\n ...(await super.validate()),\n )\n return errors\n }\n\n protected override async parse(validate = false): Promise<SignedHydratedBlockInstance<[WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]>> {\n this._signatureCache = await createSignatureWrappers(this.data[0])\n await super.parse(validate)\n return this\n }\n}\n"],"mappings":"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","names":["splitOnDecimal","value","places","whole","BigInt","decimal","splitOnDecimalToString","value","places","maxDecimal","maxCharacters","minDecimals","locale","whole","decimal","splitOnDecimal","padEnd","wholeCharacters","toString","length","calcMaxDecimalCharacters","maxDecimalCharacters","Math","min","formattedWhole","Intl","NumberFormat","maximumFractionDigits","useGrouping","format","decimalSeparator","formatToParts","find","part","type","paddedDecimal","padStart","slice","endsWith","ShiftedBigInt","defaultConfig","places","maxDecimal","maxCharacters","minDecimals","locale","config","value","toFullString","splitOnDecimalToString","Infinity","toShortString","toString","assertEx","AttoXL1","FemtoXL1","MicroXL1","MilliXL1","NanoXL1","PicoXL1","XL1Places","MAX_XL1_AMOUNT","BigInt","allowedPlaces","Object","values","XL1Places","XL1Amount","value","locale","AttoXL1","from","places","atto","assertEx","includes","fromMilli","milli","fromMicro","micro","fromNano","nano","fromPico","pico","fromFemto","femto","fromAtto","to","MilliXL1","MicroXL1","NanoXL1","PicoXL1","FemtoXL1","toString","Number","config","ShiftedBigInt","maxDecimal","minDecimals","maxCharacters","toShortString","assertEx","BaseEmitter","exists","isDefined","hydrateBlock","asBlockBoundWitness","asBlockBoundWitnessWithStorageMeta","Semaphore","BlockNumberIndexSemaphoreLocks","IndexedHydratedBlockRangeStore","BaseEmitter","_blockNumberIndex","Map","_blockNumberIndexSemaphore","Semaphore","_firstNumber","_lastNumber","params","firstNumber","lastNumber","count","numberRange","range","first","last","create","firstBlock","asBlockBoundWitness","sourceArchivist","get","at","snapshotArchivist","firstBlockExisting","assertEx","lastBlock","lastBlockExisting","result","block","createSubscriptions","index","fromHash","hash","hydrateBlock","isDefined","fromNumber","number","next","from","nextBlockNumber","undefined","nextBlock","filter","exists","Error","prev","prevBlockNumber","prevBlock","on","payloads","insert","acquire","clear","blockToIndex","firstFound","payload","asBlockBoundWitnessWithStorageMeta","set","_hash","release","PayloadBuilder","toArrayBuffer","BoundWitnessValidator","SignatureWrapper","address","hash","signature","validate","BoundWitnessValidator","validateSignature","toArrayBuffer","createSignatureWrappers","bw","signatures","hash","PayloadBuilder","dataHash","i","$signatures","length","push","SignatureWrapper","addresses","hexToBigInt","XYO_ZERO_ADDRESS","validateHydratedBlock","validateHydratedBlockState","PayloadBuilder","isAllowedBlockPayloadWithHashStorageMeta","isSignedTransactionBoundWitnessWithStorageMeta","isTransfer","PayloadBuilder","hexToBigInt","tryExtractElevatedHashes","tryExtractElevatedHashesFromScript","XYO_ZERO_ADDRESS","validateTransaction","PayloadBuilder","isTransfer","transactionRequiredGas","hexToBigInt","AttoXL1","parseHexOrBigInt","value","AttoXL1","hexToBigInt","FeesWrapper","base","gasLimit","gasPrice","priority","validate","errors","baseValue","gasLimitValue","gasPriceValue","priorityValue","push","Error","sumTransfers","payload","total","i","Object","values","transfers","hexToBigInt","HydratedTransactionWrapper","data","fees","payloadsCache","FeesWrapper","boundWitness","elevatedPayloadCount","script","tryExtractElevatedHashesFromScript","length","elevatedPayloads","tryExtractElevatedHashes","from","payloadCount","payloads","parse","transaction","validate","wrapper","PayloadBuilder","addStorageMeta","parsed","errors","Error","join","elevatedPayload","index","at","gasRequired","transactionRequiredGas","reward","reduce","acc","isTransfer","XYO_ZERO_ADDRESS","validateTransaction","transactionPayloads","push","SignedHydratedTransactionWrapper","HydratedTransactionWrapper","_signatureCache","signatureCount","length","signatures","parse","transaction","validate","wrapper","PayloadBuilder","addStorageMeta","signature","index","errors","push","Promise","all","map","flat","createSignatureWrappers","data","sumTransfers","payload","total","i","Object","values","transfers","hexToBigInt","HydratedBlockWrapper","data","allPayloadsCache","publicPayloadsCache","transactionsCache","block","boundWitness","chain","payloadCount","length","payloads","privatePayloadCount","publicPayloadCount","publicPayloads","reward","reduce","acc","isTransfer","from","XYO_ZERO_ADDRESS","stepHashes","step_hashes","transactionCount","transactions","parse","validate","wrapper","index","at","transaction","validateHydratedBlock","validateState","services","validateHydratedBlockState","allPayloads","PayloadBuilder","addStorageMeta","isSignedTransactionBoundWitnessWithStorageMeta","hydratedTransaction","filter","p","payload_hashes","includes","_hash","_dataHash","push","SignedHydratedTransactionWrapper","hash","find","isAllowedBlockPayloadWithHashStorageMeta","Error","SignedHydratedBlockWrapper","HydratedBlockWrapper","_signatureCache","signatureCount","length","signatures","parse","block","validate","wrapper","signature","index","errors","push","Promise","all","map","flat","createSignatureWrappers","data"]}
1
+ {"version":3,"sources":["../../src/amount/splitOnDecimal.ts","../../src/amount/splitOnDecimalToString.ts","../../src/amount/ShiftedBigInt.ts","../../src/amount/Xl1Amount.ts","../../src/block/IndexedHydratedBlockRangeStore.ts","../../src/lib/createSignatureWrappers.ts","../../src/Signature.ts","../../src/block/HydratedBlock.ts","../../src/transaction/SignedHydratedTransaction.ts","../../src/transaction/HydratedTransaction.ts","../../src/Fees.ts","../../src/block/SignedHydratedBlock.ts"],"sourcesContent":["export const splitOnDecimal = (value: bigint, places = 18): [bigint, bigint] => {\n const whole = value / BigInt(10 ** places)\n const decimal = value % BigInt(10 ** places)\n return [whole, decimal]\n}\n","import { splitOnDecimal } from './splitOnDecimal.ts'\n\nexport const splitOnDecimalToString = (\n value: bigint,\n places = 18,\n maxDecimal = places,\n maxCharacters = 9,\n minDecimals = 1,\n locale: Intl.LocalesArgument = 'en-US',\n): string => {\n const [whole, decimal] = splitOnDecimal(value, places)\n if (whole === 0n && decimal < 10 ** maxDecimal && decimal !== 0n) return '< 0.'.padEnd(maxDecimal + 5, '0') + '1'\n\n const wholeCharacters = whole.toString(10).length\n const calcMaxDecimalCharacters = maxCharacters === -1 ? places : wholeCharacters > maxCharacters ? 0 : maxCharacters - wholeCharacters\n const maxDecimalCharacters = Math.min(maxDecimal, calcMaxDecimalCharacters)\n\n // Format whole number with thousand separators according to locale\n const formattedWhole = new Intl.NumberFormat(locale, {\n maximumFractionDigits: 0,\n useGrouping: true,\n }).format(whole)\n\n // Get decimal separator for the locale\n const decimalSeparator = new Intl.NumberFormat(locale)\n .formatToParts(1.1)\n .find(part => part.type === 'decimal')?.value ?? '.'\n\n // Pad decimal part to correct number of places\n let paddedDecimal = decimal.toString().padStart(places, '0').slice(0, maxDecimalCharacters)\n // remove unneeded trailing zeros (honoring minDecimals)\n while (paddedDecimal.length > minDecimals && paddedDecimal.endsWith('0')) {\n paddedDecimal = paddedDecimal.slice(0, -1)\n }\n\n return `${formattedWhole}${paddedDecimal.length > 0 ? decimalSeparator : ''}${paddedDecimal}`\n}\n","import type { ShiftedBigIntConfig } from '@xyo-network/xl1-protocol-sdk'\n\nimport { splitOnDecimalToString } from './splitOnDecimalToString.ts'\n\nexport class ShiftedBigInt {\n static readonly defaultConfig: ShiftedBigIntConfig = {\n places: 18,\n maxDecimal: 18,\n maxCharacters: 9,\n minDecimals: 1,\n locale: 'en-US',\n }\n\n config: ShiftedBigIntConfig\n value: bigint\n\n constructor(\n value: bigint | ShiftedBigInt,\n config: Partial<ShiftedBigIntConfig> = {},\n ) {\n this.value = typeof value === 'bigint' ? value : value.value\n this.config = {\n ...ShiftedBigInt.defaultConfig, ...(typeof value === 'bigint' ? {} : value.config), ...config,\n }\n }\n\n get locale(): Intl.LocalesArgument {\n return this.config.locale ?? 'en-US'\n }\n\n get maxCharacters(): number {\n return this.config.maxCharacters ?? 9\n }\n\n get maxDecimal(): number {\n return this.config.maxDecimal ?? this.places\n }\n\n get minDecimals(): number {\n return this.config.minDecimals ?? 1\n }\n\n get places(): number {\n return this.config.places ?? 18\n }\n\n toFullString(): string {\n return splitOnDecimalToString(\n this.value,\n this.places,\n this.places,\n Infinity,\n this.places,\n this.locale,\n )\n }\n\n toShortString(): string {\n return splitOnDecimalToString(\n this.value,\n this.places,\n this.maxDecimal,\n this.maxCharacters,\n this.minDecimals,\n this.locale,\n )\n }\n\n toString(): string {\n return this.toFullString()\n }\n}\n","/* eslint-disable @typescript-eslint/member-ordering */\nimport { assertEx } from '@xylabs/assert'\nimport {\n AttoXL1, FemtoXL1, MicroXL1, MilliXL1, NanoXL1, PicoXL1,\n XL1Places,\n} from '@xyo-network/xl1-protocol'\nimport type { ShiftedBigIntConfig } from '@xyo-network/xl1-protocol-sdk'\n\nimport { ShiftedBigInt } from './ShiftedBigInt.ts'\n\nconst MAX_XL1_AMOUNT = 2n ** BigInt(256) - 1n\nconst allowedPlaces = Object.values(XL1Places)\n\nexport interface XL1AmountInstance {\n value: AttoXL1\n\n to(places: bigint | number): bigint\n\n milli: MilliXL1\n\n micro: MicroXL1\n\n nano: NanoXL1\n\n pico: PicoXL1\n\n femto: FemtoXL1\n\n atto: AttoXL1\n\n toString(places: number, config: Partial<ShiftedBigIntConfig>): string\n}\n\nexport class XL1Amount implements XL1AmountInstance {\n value: AttoXL1\n private locale: Intl.LocalesArgument\n\n constructor(value: bigint, locale: Intl.LocalesArgument = 'en-US') {\n this.locale = locale\n this.value = AttoXL1(value > MAX_XL1_AMOUNT ? MAX_XL1_AMOUNT : value < 0n ? 0n : value)\n }\n\n static from(value: bigint, places: bigint = XL1Places.atto) {\n assertEx(allowedPlaces.includes(places), () => `Invalid conversion places (${places} not in ${allowedPlaces})`)\n return new XL1Amount(value * 10n ** BigInt(places))\n }\n\n static fromMilli(value: MilliXL1) {\n return this.from(value, XL1Places.milli)\n }\n\n static fromMicro(value: MicroXL1) {\n return this.from(value, XL1Places.micro)\n }\n\n static fromNano(value: NanoXL1) {\n return this.from(value, XL1Places.nano)\n }\n\n static fromPico(value: PicoXL1) {\n return this.from(value, XL1Places.pico)\n }\n\n static fromFemto(value: FemtoXL1) {\n return this.from(value, XL1Places.femto)\n }\n\n static fromAtto(value: AttoXL1) {\n return this.from(value, XL1Places.atto)\n }\n\n to(places: number | bigint = XL1Places.atto) {\n return this.value / 10n ** BigInt(places)\n }\n\n get milli() {\n return MilliXL1(this.to(XL1Places.micro))\n }\n\n get micro() {\n return MicroXL1(this.to(XL1Places.micro))\n }\n\n get nano() {\n return NanoXL1(this.to(XL1Places.nano))\n }\n\n get pico() {\n return PicoXL1(this.to(XL1Places.pico))\n }\n\n get femto() {\n return FemtoXL1(this.to(XL1Places.femto))\n }\n\n get atto() {\n return AttoXL1(this.to(XL1Places.atto))\n }\n\n toString(places: number = Number(XL1Places.atto), config: Partial<ShiftedBigIntConfig> = {}): string {\n assertEx(allowedPlaces.includes(BigInt(places)), () => `Invalid conversion places (${places} not in ${allowedPlaces})`)\n return new ShiftedBigInt(\n this.value,\n {\n places,\n locale: this.locale,\n maxDecimal: places,\n minDecimals: 0,\n maxCharacters: places,\n ...config,\n },\n ).toShortString()\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { BaseParams } from '@xylabs/base'\nimport { BaseEmitter } from '@xylabs/events'\nimport { exists } from '@xylabs/exists'\nimport type { Hash } from '@xylabs/hex'\nimport type { EmptyObject } from '@xylabs/object'\nimport type { Promisable } from '@xylabs/promise'\nimport { isDefined } from '@xylabs/typeof'\nimport type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { hydrateBlock } from '@xyo-network/chain-protocol'\nimport {\n asBlockBoundWitness, asBlockBoundWitnessWithStorageMeta, type HydratedBlock,\n} from '@xyo-network/xl1-protocol'\nimport type { BlockWindowInstance } from '@xyo-network/xl1-protocol-sdk'\nimport { Semaphore } from 'async-mutex'\n\nexport type HydratedBlockStoreParams<TAdditionalParams extends EmptyObject = EmptyObject> = BaseParams<{\n sourceArchivist: ArchivistInstance\n} & TAdditionalParams>\n\nexport interface HydratedBlockStoreInstance {\n fromHash(hash: Hash): Promisable<HydratedBlock | undefined>\n}\n\nexport interface IndexedHydratedBlockStoreInstance extends HydratedBlockStoreInstance {\n fromNumber(number: number): Promisable<HydratedBlock | undefined>\n}\n\nexport interface HydratedBlockRangeStoreParams extends HydratedBlockStoreParams<{\n first: Hash\n last: Hash\n snapshotArchivist: ArchivistInstance\n}> {}\n\nexport interface IndexedHydratedBlockRangeStoreInstance extends BlockWindowInstance, IndexedHydratedBlockStoreInstance {\n first(): Promisable<HydratedBlock>\n last(): Promisable<HydratedBlock>\n next(from: HydratedBlock): Promisable<HydratedBlock | undefined>\n next(from: HydratedBlock, count: number): Promisable<HydratedBlock[]>\n prev(from: HydratedBlock): Promisable<HydratedBlock | undefined>\n prev(from: HydratedBlock, count: number): Promisable<HydratedBlock[]>\n}\n\nconst BlockNumberIndexSemaphoreLocks = 10 as const\n\n// TODO: Allow/Require source/snapshot archivist to be BlockStores instead\nexport class IndexedHydratedBlockRangeStore extends BaseEmitter<HydratedBlockRangeStoreParams> implements IndexedHydratedBlockRangeStoreInstance {\n private _blockNumberIndex: Map<number, Hash> = new Map()\n private _blockNumberIndexSemaphore = new Semaphore(BlockNumberIndexSemaphoreLocks)\n private _firstNumber: number\n private _lastNumber: number\n\n protected constructor(params: HydratedBlockRangeStoreParams, firstNumber: number, lastNumber: number) {\n super(params)\n this._firstNumber = firstNumber\n this._lastNumber = lastNumber\n }\n\n get count(): number {\n return this._lastNumber - this._firstNumber + 1\n }\n\n get numberRange(): [number, number] {\n return [this._firstNumber, this._lastNumber]\n }\n\n get range(): [Hash, Hash] {\n return [this.params.first, this.params.last]\n }\n\n static async create(params: HydratedBlockRangeStoreParams): Promise<IndexedHydratedBlockRangeStore> {\n const firstBlock = asBlockBoundWitness((await params.sourceArchivist.get([params.first])).at(0)\n ?? (await params.snapshotArchivist.get([params.first])).at(0), {})\n const firstBlockExisting = assertEx(firstBlock, () => 'First block not found')\n\n const lastBlock = asBlockBoundWitness((await params.sourceArchivist.get([params.last])).at(0)\n ?? (await params.snapshotArchivist.get([params.last])).at(0), {})\n const lastBlockExisting = assertEx(lastBlock, () => 'Last block not found')\n\n // getting the block numbers here since can not get them in the constructor\n const result = new IndexedHydratedBlockRangeStore(params, firstBlockExisting.block, lastBlockExisting.block)\n result.createSubscriptions()\n await result.index()\n return result\n }\n\n async first(): Promise<HydratedBlock> {\n return assertEx(await this.fromHash(this.params.first), () => 'First block not found')\n }\n\n async fromHash(hash: Hash): Promise<HydratedBlock | undefined> {\n const block = (await hydrateBlock(this.params.sourceArchivist, hash))\n ?? (await hydrateBlock(this.params.snapshotArchivist, hash))\n if (isDefined(block) && (block[0].block <= this._lastNumber && block[0].block >= this._firstNumber)) {\n return block\n }\n }\n\n fromNumber(number: number): Promisable<HydratedBlock | undefined> {\n const hash = this._blockNumberIndex.get(number)\n if (isDefined(hash)) {\n return this.fromHash(hash)\n }\n }\n\n async last(): Promise<HydratedBlock> {\n return assertEx(await this.fromHash(this.params.last), () => 'Last block not found')\n }\n\n async next(from: HydratedBlock): Promise<HydratedBlock | undefined>\n async next(from: HydratedBlock, count: number): Promise<HydratedBlock[]>\n async next(from: HydratedBlock, count?: number): Promise<HydratedBlock | HydratedBlock[] | undefined> {\n const nextBlockNumber = from[0].block + 1\n if (nextBlockNumber > this._lastNumber) {\n return isDefined(count) ? [] : undefined\n }\n if (isDefined(count)) {\n if (count === 0) {\n return []\n }\n const nextBlock = await this.fromNumber(nextBlockNumber)\n\n if (isDefined(nextBlock)) {\n return [nextBlock, ...await this.next(nextBlock, count - 1)].filter(exists)\n } else {\n if (from[0].block < this._lastNumber) {\n throw new Error(`Next block [${nextBlockNumber}] not found, but should be in range`)\n }\n return []\n }\n } else {\n return await this.fromNumber(nextBlockNumber)\n }\n }\n\n async prev(from: HydratedBlock): Promise<HydratedBlock | undefined>\n async prev(from: HydratedBlock, count: number): Promise<HydratedBlock[]>\n async prev(from: HydratedBlock, count?: number): Promise<HydratedBlock | HydratedBlock[] | undefined> {\n const prevBlockNumber = from[0].block - 1\n if (prevBlockNumber < this._firstNumber) {\n return isDefined(count) ? [] : undefined\n }\n if (isDefined(count)) {\n if (count === 0) {\n return []\n }\n const prevBlock = await this.fromNumber(prevBlockNumber)\n if (isDefined(prevBlock)) {\n return [...await this.next(prevBlock, count - 1), prevBlock].filter(exists)\n } else {\n if (from[0].block > this._firstNumber) {\n throw new Error(`Prev block [${prevBlockNumber}] not found, but should be in range`)\n }\n return []\n }\n } else {\n return await this.fromNumber(prevBlockNumber)\n }\n }\n\n private createSubscriptions(): void {\n // we monitor deletes so that we can keep them if we need them for the window\n this.params.sourceArchivist.on('deleted', async ({ payloads }) => {\n await this.params.snapshotArchivist.insert(payloads)\n })\n }\n\n private async index() {\n // get all the locks (make exclusive)\n await this._blockNumberIndexSemaphore.acquire(BlockNumberIndexSemaphoreLocks)\n try {\n this._blockNumberIndex.clear()\n let blockToIndex: Hash = this.params.last\n let firstFound = false\n while (!firstFound) {\n const payload = assertEx((await this.params.sourceArchivist.get([blockToIndex])).at(0), () => 'Block payload not found')\n const block = assertEx(asBlockBoundWitnessWithStorageMeta(payload), () => 'Payload is not a Block')\n if (block.block < this._firstNumber || block.block > this._lastNumber) {\n throw new Error(`Block [${block.block}] is out of range`)\n }\n this._blockNumberIndex.set(block.block, block._hash)\n firstFound = block.block === this._firstNumber\n }\n } finally {\n this._blockNumberIndexSemaphore.release(BlockNumberIndexSemaphoreLocks)\n }\n }\n}\n","import type { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { SignatureInstance } from '@xyo-network/xl1-protocol-sdk'\n\nimport { SignatureWrapper } from '../Signature.ts'\n\nexport const createSignatureWrappers = async (bw: BoundWitness): Promise<SignatureInstance[]> => {\n const signatures: SignatureInstance[] = []\n const hash = await PayloadBuilder.dataHash(bw)\n for (let i = 0; i < bw.$signatures.length; i++) {\n signatures.push(\n new SignatureWrapper(bw.$signatures[i], bw.addresses[i], hash),\n )\n }\n return signatures\n}\n","import { toArrayBuffer } from '@xylabs/arraybuffer'\nimport type {\n Address, Hash, Hex,\n} from '@xylabs/hex'\nimport { BoundWitnessValidator } from '@xyo-network/boundwitness-validator'\nimport type { SignatureInstance } from '@xyo-network/xl1-protocol-sdk'\n\nexport class SignatureWrapper implements SignatureInstance {\n address: Address\n hash: Hash\n signature: Hex\n\n constructor(signature: Hex, address: Address, hash: Hash) {\n this.signature = signature\n this.address = address\n this.hash = hash\n }\n\n static async validate(hash: Hash, address: Address, signature: Hex): Promise<Error[]> {\n return await BoundWitnessValidator.validateSignature(toArrayBuffer(hash), toArrayBuffer(address), toArrayBuffer(signature))\n }\n\n async validate(): Promise<Error[]> {\n return await SignatureWrapper.validate(this.address, this.hash, this.signature)\n }\n}\n","import type { Hash } from '@xylabs/hex'\nimport { hexToBigInt } from '@xylabs/hex'\nimport { XYO_ZERO_ADDRESS } from '@xyo-network/chain-utils'\nimport { validateHydratedBlock, validateHydratedBlockState } from '@xyo-network/chain-validation'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { WithHashStorageMeta } from '@xyo-network/payload-model'\nimport type {\n AccountBalanceService,\n HydratedBlock, SignedHydratedTransaction, Transfer,\n} from '@xyo-network/xl1-protocol'\nimport {\n isAllowedBlockPayloadWithHashStorageMeta,\n isSignedTransactionBoundWitnessWithStorageMeta,\n isTransfer,\n} from '@xyo-network/xl1-protocol'\nimport type { HydratedBlockInstance, SignedHydratedTransactionInstance } from '@xyo-network/xl1-protocol-sdk'\n\nimport { SignedHydratedTransactionWrapper } from '../transaction/SignedHydratedTransaction.ts'\n\nconst sumTransfers = (payload: Transfer) => {\n let total = 0n\n for (let i of Object.values(payload.transfers)) {\n total += hexToBigInt(i ?? '00')\n }\n return total\n}\n\nexport class HydratedBlockWrapper<T extends HydratedBlock> implements HydratedBlockInstance<[WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]> {\n data: [WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]\n protected allPayloadsCache: WithHashStorageMeta<WithHashStorageMeta<T[1][number]>>[] = []\n protected transactionsCache: SignedHydratedTransactionInstance[] = []\n\n protected constructor(data: [WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]) {\n this.data = data\n }\n\n get block() {\n return this.data[0].block\n }\n\n get boundWitness() {\n return this.data[0]\n }\n\n get chain() {\n return this.data[0].chain\n }\n\n get payloadCount(): number {\n return this.allPayloadsCache.length\n }\n\n get payloads(): T[1][number][] {\n return [...this.allPayloadsCache]\n }\n\n get reward(): bigint {\n return this.allPayloadsCache.reduce((acc: bigint, payload) => acc + (\n isTransfer(payload)\n ? payload.from === XYO_ZERO_ADDRESS\n ? sumTransfers(payload)\n : 0n\n : 0n), 0n)\n }\n\n get stepHashes(): Hash[] {\n return this.data[0].step_hashes\n }\n\n get transactionCount(): number {\n return this.transactionsCache.length\n }\n\n get transactions(): SignedHydratedTransactionInstance[] {\n return this.transactionsCache\n }\n\n static async parse<T extends HydratedBlock>(block: T, validate = false): Promise<HydratedBlockInstance> {\n const wrapper = new HydratedBlockWrapper<T>(block)\n return await wrapper.parse(validate)\n }\n\n payload(index: number) {\n return this.data[1].at(index)\n }\n\n transaction(index: number): SignedHydratedTransactionInstance | undefined {\n return this.transactionsCache.at(index)\n }\n\n async validate(): Promise<Error[]> {\n return await validateHydratedBlock(this.data)\n }\n\n async validateState(services: { accountBalance: AccountBalanceService }): Promise<Error[]> {\n return await validateHydratedBlockState(this.data, this.chain, services)\n }\n\n protected async parse(validate = false): Promise<HydratedBlockInstance<[WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]>> {\n const allPayloads = await PayloadBuilder.addStorageMeta(this.data[1])\n for (const payload of allPayloads) {\n if (isSignedTransactionBoundWitnessWithStorageMeta(payload)) {\n const hydratedTransaction: SignedHydratedTransaction = [payload, allPayloads.filter(\n p => payload.payload_hashes.includes(p._hash) || payload.payload_hashes.includes(p._dataHash),\n )]\n this.transactionsCache.push(await SignedHydratedTransactionWrapper.parse(hydratedTransaction))\n } else {\n this.allPayloadsCache.push(payload)\n }\n }\n for (const hash of this.data[0].payload_hashes) {\n const payload = this.allPayloadsCache.find(p => p._hash === hash)\n if (payload && !isAllowedBlockPayloadWithHashStorageMeta(payload)) {\n throw new Error('Disallowed payload type')\n }\n }\n if (validate) {\n await this.validate()\n }\n return this\n }\n}\n","import { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { WithHashStorageMeta } from '@xyo-network/payload-model'\nimport type { SignedHydratedTransaction } from '@xyo-network/xl1-protocol'\nimport type { SignatureInstance, SignedHydratedTransactionInstance } from '@xyo-network/xl1-protocol-sdk'\n\nimport { createSignatureWrappers } from '../lib/createSignatureWrappers.ts'\nimport { HydratedTransactionWrapper } from './HydratedTransaction.ts'\n\nexport class SignedHydratedTransactionWrapper<T extends SignedHydratedTransaction> extends HydratedTransactionWrapper<T>\n implements SignedHydratedTransactionInstance<[WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]> {\n private _signatureCache: SignatureInstance[] = []\n\n get signatureCount(): number {\n return this._signatureCache.length\n }\n\n get signatures(): SignatureInstance[] {\n return [...this._signatureCache]\n }\n\n static override async parse<T extends SignedHydratedTransaction>(transaction: T, validate = false):\n Promise<SignedHydratedTransactionInstance<[WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]>> {\n const wrapper = new SignedHydratedTransactionWrapper<T>([\n await PayloadBuilder.addStorageMeta(transaction[0]),\n await PayloadBuilder.addStorageMeta(transaction[1]),\n ])\n return await wrapper.parse(validate)\n }\n\n signature(index: number): SignatureInstance | undefined {\n return this._signatureCache[index]\n }\n\n override async validate(): Promise<Error[]> {\n const errors: Error[] = []\n errors.push(\n ...(await Promise.all(this._signatureCache.map(signature => signature.validate()))).flat(),\n ...(await super.validate()),\n )\n return errors\n }\n\n protected override async parse(validate = false):\n Promise<SignedHydratedTransactionInstance<[WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]>> {\n this._signatureCache = await createSignatureWrappers(this.data[0])\n await super.parse(validate)\n return this\n }\n}\n","import type { Hash } from '@xylabs/hex'\nimport { hexToBigInt } from '@xylabs/hex'\nimport type { Promisable } from '@xylabs/promise'\nimport { isDefined } from '@xylabs/typeof'\nimport { tryExtractElevatedHashes, tryExtractElevatedHashesFromScript } from '@xyo-network/chain-protocol'\nimport { XYO_ZERO_ADDRESS } from '@xyo-network/chain-utils'\nimport { validateTransaction } from '@xyo-network/chain-validation'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type {\n Payload, Schema, WithHashStorageMeta,\n} from '@xyo-network/payload-model'\nimport type {\n AllowedBlockPayload, HydratedTransaction, HydratedTransactionWithHashStorageMeta, Transfer,\n} from '@xyo-network/xl1-protocol'\nimport { isTransfer } from '@xyo-network/xl1-protocol'\nimport {\n type HydratedTransactionInstance, type TransactionFeesInstance, transactionRequiredGas,\n} from '@xyo-network/xl1-protocol-sdk'\n\nimport { FeesWrapper } from '../Fees.ts'\n\nconst sumTransfers = (payload: Transfer) => {\n let total = 0n\n for (let i of Object.values(payload.transfers)) {\n total += hexToBigInt(i ?? '00')\n }\n return total\n}\n\nexport class HydratedTransactionWrapper<T extends HydratedTransaction> implements HydratedTransactionInstance<[WithHashStorageMeta<T[0]>,\n WithHashStorageMeta<T[1][number]>[]]> {\n data: HydratedTransactionWithHashStorageMeta<T>\n fees: TransactionFeesInstance\n\n protected payloadsCache: WithHashStorageMeta<Payload>[] = []\n\n protected constructor(data: HydratedTransactionWithHashStorageMeta<T>) {\n this.data = data\n this.fees = new FeesWrapper(\n this.boundWitness.fees,\n )\n }\n\n get boundWitness() {\n return this.data[0]\n }\n\n get elevatedPayloadCount(): number {\n const { script } = this.data[0]\n return script ? tryExtractElevatedHashesFromScript(script).length : 0\n }\n\n get elevatedPayloads(): WithHashStorageMeta<AllowedBlockPayload>[] {\n return tryExtractElevatedHashes(this.data)\n }\n\n get externalPayloads(): Record<Hash, Schema | Payload> {\n const allPayloads = this.payloads\n const external: Record<Hash, Schema | Payload> = {}\n for (let i = 0; i < this.boundWitness.payload_hashes.length; i++) {\n const payloadHash = this.boundWitness.payload_hashes[i]\n const payload = allPayloads.find(p => p._hash === payloadHash)\n external[payloadHash] = isDefined(payload) ? payload : this.boundWitness.payload_schemas[i]\n }\n return external\n }\n\n get from() {\n return this.data[0].from\n }\n\n get payloadCount(): number {\n return this.payloadsCache.length\n }\n\n get payloads(): WithHashStorageMeta<WithHashStorageMeta<T[1][number]>>[] {\n return [...this.payloadsCache]\n }\n\n get privateExternalPayloads(): Record<Hash, Schema> {\n const allPayloads = this.payloads\n const missing: Record<Hash, Schema> = {}\n for (let i = 0; i < this.boundWitness.payload_hashes.length; i++) {\n const payloadHash = this.boundWitness.payload_hashes[i]\n if (!allPayloads.some(p => p._hash === payloadHash)) {\n missing[payloadHash] = this.boundWitness.payload_schemas[i]\n }\n }\n return missing\n }\n\n // list all the payloads that are included in the transaction and are not elevated and found in the hydration\n get publicExternalPayloads(): Payload[] {\n const allPayloads = this.payloads\n const elevatedPayloads = this.elevatedPayloads\n return allPayloads.filter(p => !elevatedPayloads.some(ep => ep._hash === p._hash))\n }\n\n static async parse<T extends HydratedTransaction>(transaction: T, validate = false): Promise<HydratedTransactionInstance<[WithHashStorageMeta<T[0]>,\n WithHashStorageMeta<T[1][number]>[]]>> {\n const wrapper = new HydratedTransactionWrapper<T>(\n [\n await PayloadBuilder.addStorageMeta(transaction[0]),\n await PayloadBuilder.addStorageMeta(transaction[1]),\n ],\n )\n const parsed = await wrapper.parse()\n if (validate) {\n const errors = await wrapper.validate()\n if (errors.length > 0) {\n throw new Error(`Block validation failed: ${errors.join(', ')}`)\n }\n }\n return parsed\n }\n\n elevatedPayload(index: number): WithHashStorageMeta<AllowedBlockPayload & T[1][number]> | undefined {\n return this.elevatedPayloads.at(index)\n }\n\n gasRequired(): bigint {\n return transactionRequiredGas(this.data)\n }\n\n payload(index: number): WithHashStorageMeta<Payload> | undefined {\n return this.payloads.at(index)\n }\n\n reward(): bigint {\n return this.payloadsCache.reduce((acc: bigint, payload) => acc + (\n isTransfer(payload)\n ? payload.from === XYO_ZERO_ADDRESS\n ? sumTransfers(payload)\n : 0n\n : 0n), 0n)\n }\n\n validate(): Promisable<Error[]> {\n return validateTransaction(this.data)\n }\n\n protected async parse(validate = false): Promise<HydratedTransactionInstance<[WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]>> {\n const transactionPayloads = await PayloadBuilder.addStorageMeta(this.data[1])\n for (const payload of transactionPayloads) {\n this.payloadsCache.push(payload)\n }\n if (validate) {\n await this.validate()\n }\n return this\n }\n}\n","import type { Hex } from '@xylabs/hex'\nimport { hexToBigInt } from '@xylabs/hex'\nimport type { Promisable } from '@xylabs/promise'\nimport type { TransactionFeesBigInt, TransactionFeesHex } from '@xyo-network/xl1-protocol'\nimport { AttoXL1 } from '@xyo-network/xl1-protocol'\nimport type { TransactionFeesInstance } from '@xyo-network/xl1-protocol-sdk'\n\nfunction parseHexOrBigInt(value: Hex | bigint) {\n return AttoXL1((typeof value === 'bigint' ? value : hexToBigInt(value)))\n}\n\nexport class FeesWrapper implements TransactionFeesInstance {\n base: AttoXL1\n gasLimit: AttoXL1\n gasPrice: AttoXL1\n priority: AttoXL1\n\n constructor({\n base, gasLimit, gasPrice, priority,\n }: TransactionFeesHex | TransactionFeesBigInt) {\n this.base = parseHexOrBigInt(base)\n this.gasLimit = parseHexOrBigInt(gasLimit)\n this.gasPrice = parseHexOrBigInt(gasPrice)\n this.priority = parseHexOrBigInt(priority)\n }\n\n static validate({\n base, gasLimit, gasPrice, priority,\n }: TransactionFeesHex | TransactionFeesBigInt): Promisable<Error[]> {\n const errors: Error[] = []\n const baseValue = parseHexOrBigInt(base)\n const gasLimitValue = parseHexOrBigInt(gasLimit)\n const gasPriceValue = parseHexOrBigInt(gasPrice)\n const priorityValue = parseHexOrBigInt(priority)\n if (baseValue <= 0n) {\n errors.push(new Error('Base fee cannot be negative or zero'))\n }\n if (gasLimitValue < 0n) {\n errors.push(new Error('Gas limit cannot be negative'))\n }\n if (gasPriceValue < 0n) {\n errors.push(new Error('Gas price cannot be negative'))\n }\n if (priorityValue < 0n) {\n errors.push(new Error('Priority cannot be negative'))\n }\n return errors\n }\n\n async validate(): Promise<Error[]> {\n return await FeesWrapper.validate({\n base: this.base, gasLimit: this.gasLimit, gasPrice: this.gasPrice, priority: this.priority,\n })\n }\n}\n","import type { WithHashStorageMeta } from '@xyo-network/payload-model'\nimport type { SignedHydratedBlock } from '@xyo-network/xl1-protocol'\nimport type { SignatureInstance, SignedHydratedBlockInstance } from '@xyo-network/xl1-protocol-sdk'\n\nimport { createSignatureWrappers } from '../lib/createSignatureWrappers.ts'\nimport { HydratedBlockWrapper } from './HydratedBlock.ts'\n\nexport class SignedHydratedBlockWrapper<T extends SignedHydratedBlock> extends HydratedBlockWrapper<T>\n implements SignedHydratedBlockInstance<[WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]> {\n private _signatureCache: SignatureInstance[] = []\n\n get signatureCount(): number {\n return this._signatureCache.length\n }\n\n get signatures(): SignatureInstance[] {\n return [...this._signatureCache]\n }\n\n static override async parse<T extends SignedHydratedBlock>(block: T, validate = false):\n Promise<SignedHydratedBlockInstance<[WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]>> {\n const wrapper = new SignedHydratedBlockWrapper<T>(block)\n return await wrapper.parse(validate)\n }\n\n signature(index: number): SignatureInstance | undefined {\n return this._signatureCache[index]\n }\n\n override async validate(): Promise<Error[]> {\n const errors: Error[] = []\n errors.push(\n ...(await Promise.all(this._signatureCache.map(signature => signature.validate()))).flat(),\n ...(await super.validate()),\n )\n return errors\n }\n\n protected override async parse(validate = false): Promise<SignedHydratedBlockInstance<[WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]>> {\n this._signatureCache = await createSignatureWrappers(this.data[0])\n await super.parse(validate)\n return this\n }\n}\n"],"mappings":"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","names":["splitOnDecimal","value","places","whole","BigInt","decimal","splitOnDecimalToString","value","places","maxDecimal","maxCharacters","minDecimals","locale","whole","decimal","splitOnDecimal","padEnd","wholeCharacters","toString","length","calcMaxDecimalCharacters","maxDecimalCharacters","Math","min","formattedWhole","Intl","NumberFormat","maximumFractionDigits","useGrouping","format","decimalSeparator","formatToParts","find","part","type","paddedDecimal","padStart","slice","endsWith","ShiftedBigInt","defaultConfig","places","maxDecimal","maxCharacters","minDecimals","locale","config","value","toFullString","splitOnDecimalToString","Infinity","toShortString","toString","assertEx","AttoXL1","FemtoXL1","MicroXL1","MilliXL1","NanoXL1","PicoXL1","XL1Places","MAX_XL1_AMOUNT","BigInt","allowedPlaces","Object","values","XL1Places","XL1Amount","value","locale","AttoXL1","from","places","atto","assertEx","includes","fromMilli","milli","fromMicro","micro","fromNano","nano","fromPico","pico","fromFemto","femto","fromAtto","to","MilliXL1","MicroXL1","NanoXL1","PicoXL1","FemtoXL1","toString","Number","config","ShiftedBigInt","maxDecimal","minDecimals","maxCharacters","toShortString","assertEx","BaseEmitter","exists","isDefined","hydrateBlock","asBlockBoundWitness","asBlockBoundWitnessWithStorageMeta","Semaphore","BlockNumberIndexSemaphoreLocks","IndexedHydratedBlockRangeStore","BaseEmitter","_blockNumberIndex","Map","_blockNumberIndexSemaphore","Semaphore","_firstNumber","_lastNumber","params","firstNumber","lastNumber","count","numberRange","range","first","last","create","firstBlock","asBlockBoundWitness","sourceArchivist","get","at","snapshotArchivist","firstBlockExisting","assertEx","lastBlock","lastBlockExisting","result","block","createSubscriptions","index","fromHash","hash","hydrateBlock","isDefined","fromNumber","number","next","from","nextBlockNumber","undefined","nextBlock","filter","exists","Error","prev","prevBlockNumber","prevBlock","on","payloads","insert","acquire","clear","blockToIndex","firstFound","payload","asBlockBoundWitnessWithStorageMeta","set","_hash","release","PayloadBuilder","toArrayBuffer","BoundWitnessValidator","SignatureWrapper","address","hash","signature","validate","BoundWitnessValidator","validateSignature","toArrayBuffer","createSignatureWrappers","bw","signatures","hash","PayloadBuilder","dataHash","i","$signatures","length","push","SignatureWrapper","addresses","hexToBigInt","XYO_ZERO_ADDRESS","validateHydratedBlock","validateHydratedBlockState","PayloadBuilder","isAllowedBlockPayloadWithHashStorageMeta","isSignedTransactionBoundWitnessWithStorageMeta","isTransfer","PayloadBuilder","hexToBigInt","isDefined","tryExtractElevatedHashes","tryExtractElevatedHashesFromScript","XYO_ZERO_ADDRESS","validateTransaction","PayloadBuilder","isTransfer","transactionRequiredGas","hexToBigInt","AttoXL1","parseHexOrBigInt","value","AttoXL1","hexToBigInt","FeesWrapper","base","gasLimit","gasPrice","priority","validate","errors","baseValue","gasLimitValue","gasPriceValue","priorityValue","push","Error","sumTransfers","payload","total","i","Object","values","transfers","hexToBigInt","HydratedTransactionWrapper","data","fees","payloadsCache","FeesWrapper","boundWitness","elevatedPayloadCount","script","tryExtractElevatedHashesFromScript","length","elevatedPayloads","tryExtractElevatedHashes","externalPayloads","allPayloads","payloads","external","payload_hashes","payloadHash","find","p","_hash","isDefined","payload_schemas","from","payloadCount","privateExternalPayloads","missing","some","publicExternalPayloads","filter","ep","parse","transaction","validate","wrapper","PayloadBuilder","addStorageMeta","parsed","errors","Error","join","elevatedPayload","index","at","gasRequired","transactionRequiredGas","reward","reduce","acc","isTransfer","XYO_ZERO_ADDRESS","validateTransaction","transactionPayloads","push","SignedHydratedTransactionWrapper","HydratedTransactionWrapper","_signatureCache","signatureCount","length","signatures","parse","transaction","validate","wrapper","PayloadBuilder","addStorageMeta","signature","index","errors","push","Promise","all","map","flat","createSignatureWrappers","data","sumTransfers","payload","total","i","Object","values","transfers","hexToBigInt","HydratedBlockWrapper","data","allPayloadsCache","transactionsCache","block","boundWitness","chain","payloadCount","length","payloads","reward","reduce","acc","isTransfer","from","XYO_ZERO_ADDRESS","stepHashes","step_hashes","transactionCount","transactions","parse","validate","wrapper","index","at","transaction","validateHydratedBlock","validateState","services","validateHydratedBlockState","allPayloads","PayloadBuilder","addStorageMeta","isSignedTransactionBoundWitnessWithStorageMeta","hydratedTransaction","filter","p","payload_hashes","includes","_hash","_dataHash","push","SignedHydratedTransactionWrapper","hash","find","isAllowedBlockPayloadWithHashStorageMeta","Error","SignedHydratedBlockWrapper","HydratedBlockWrapper","_signatureCache","signatureCount","length","signatures","parse","block","validate","wrapper","signature","index","errors","push","Promise","all","map","flat","createSignatureWrappers","data"]}
@@ -1,11 +1,10 @@
1
1
  import type { Hash } from '@xylabs/hex';
2
2
  import type { WithHashStorageMeta } from '@xyo-network/payload-model';
3
- import type { AccountBalanceService, AllowedBlockPayload, HydratedBlock } from '@xyo-network/xl1-protocol';
3
+ import type { AccountBalanceService, HydratedBlock } from '@xyo-network/xl1-protocol';
4
4
  import type { HydratedBlockInstance, SignedHydratedTransactionInstance } from '@xyo-network/xl1-protocol-sdk';
5
5
  export declare class HydratedBlockWrapper<T extends HydratedBlock> implements HydratedBlockInstance<[WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]> {
6
6
  data: [WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]];
7
7
  protected allPayloadsCache: WithHashStorageMeta<WithHashStorageMeta<T[1][number]>>[];
8
- protected publicPayloadsCache: WithHashStorageMeta<WithHashStorageMeta<T[1][number] & AllowedBlockPayload>>[];
9
8
  protected transactionsCache: SignedHydratedTransactionInstance[];
10
9
  protected constructor(data: [WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]);
11
10
  get block(): number;
@@ -13,9 +12,6 @@ export declare class HydratedBlockWrapper<T extends HydratedBlock> implements Hy
13
12
  get chain(): Lowercase<string>;
14
13
  get payloadCount(): number;
15
14
  get payloads(): T[1][number][];
16
- get privatePayloadCount(): number;
17
- get publicPayloadCount(): number;
18
- get publicPayloads(): (T[1][number] & AllowedBlockPayload)[];
19
15
  get reward(): bigint;
20
16
  get stepHashes(): Hash[];
21
17
  get transactionCount(): number;
@@ -1 +1 @@
1
- {"version":3,"file":"HydratedBlock.d.ts","sourceRoot":"","sources":["../../../src/block/HydratedBlock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAKvC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AACrE,OAAO,KAAK,EACV,qBAAqB,EACrB,mBAAmB,EACnB,aAAa,EACd,MAAM,2BAA2B,CAAA;AAMlC,OAAO,KAAK,EAAE,qBAAqB,EAAE,iCAAiC,EAAE,MAAM,+BAA+B,CAAA;AAY7G,qBAAa,oBAAoB,CAAC,CAAC,SAAS,aAAa,CAAE,YAAW,qBAAqB,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;IAC3J,IAAI,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAA;IACtE,SAAS,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAK;IACzF,SAAS,CAAC,mBAAmB,EAAE,mBAAmB,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,mBAAmB,CAAC,CAAC,EAAE,CAAK;IAClH,SAAS,CAAC,iBAAiB,EAAE,iCAAiC,EAAE,CAAK;IAErE,SAAS,aAAa,IAAI,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;IAI5F,IAAI,KAAK,WAER;IAED,IAAI,YAAY,8BAEf;IAED,IAAI,KAAK,sBAER;IAED,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,IAAI,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAE7B;IAED,IAAI,mBAAmB,IAAI,MAAM,CAEhC;IAED,IAAI,kBAAkB,IAAI,MAAM,CAE/B;IAED,IAAI,cAAc,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,mBAAmB,CAAC,EAAE,CAE3D;IAED,IAAI,MAAM,IAAI,MAAM,CAOnB;IAED,IAAI,UAAU,IAAI,IAAI,EAAE,CAEvB;IAED,IAAI,gBAAgB,IAAI,MAAM,CAE7B;IAED,IAAI,YAAY,IAAI,iCAAiC,EAAE,CAEtD;WAEY,KAAK,CAAC,CAAC,SAAS,aAAa,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,UAAQ,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAKvG,OAAO,CAAC,KAAK,EAAE,MAAM;IAIrB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,iCAAiC,GAAG,SAAS;IAInE,QAAQ,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAI5B,aAAa,CAAC,QAAQ,EAAE;QAAE,cAAc,EAAE,qBAAqB,CAAA;KAAE,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;cAI1E,KAAK,CAAC,QAAQ,UAAQ,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CA2B1I"}
1
+ {"version":3,"file":"HydratedBlock.d.ts","sourceRoot":"","sources":["../../../src/block/HydratedBlock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAKvC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AACrE,OAAO,KAAK,EACV,qBAAqB,EACrB,aAAa,EACd,MAAM,2BAA2B,CAAA;AAMlC,OAAO,KAAK,EAAE,qBAAqB,EAAE,iCAAiC,EAAE,MAAM,+BAA+B,CAAA;AAY7G,qBAAa,oBAAoB,CAAC,CAAC,SAAS,aAAa,CAAE,YAAW,qBAAqB,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;IAC3J,IAAI,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAA;IACtE,SAAS,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAK;IACzF,SAAS,CAAC,iBAAiB,EAAE,iCAAiC,EAAE,CAAK;IAErE,SAAS,aAAa,IAAI,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;IAI5F,IAAI,KAAK,WAER;IAED,IAAI,YAAY,8BAEf;IAED,IAAI,KAAK,sBAER;IAED,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,IAAI,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAE7B;IAED,IAAI,MAAM,IAAI,MAAM,CAOnB;IAED,IAAI,UAAU,IAAI,IAAI,EAAE,CAEvB;IAED,IAAI,gBAAgB,IAAI,MAAM,CAE7B;IAED,IAAI,YAAY,IAAI,iCAAiC,EAAE,CAEtD;WAEY,KAAK,CAAC,CAAC,SAAS,aAAa,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,UAAQ,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAKvG,OAAO,CAAC,KAAK,EAAE,MAAM;IAIrB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,iCAAiC,GAAG,SAAS;IAInE,QAAQ,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAI5B,aAAa,CAAC,QAAQ,EAAE;QAAE,cAAc,EAAE,qBAAqB,CAAA;KAAE,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;cAI1E,KAAK,CAAC,QAAQ,UAAQ,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CAuB1I"}
@@ -1,5 +1,6 @@
1
+ import type { Hash } from '@xylabs/hex';
1
2
  import type { Promisable } from '@xylabs/promise';
2
- import type { Payload, WithHashStorageMeta } from '@xyo-network/payload-model';
3
+ import type { Payload, Schema, WithHashStorageMeta } from '@xyo-network/payload-model';
3
4
  import type { AllowedBlockPayload, HydratedTransaction, HydratedTransactionWithHashStorageMeta } from '@xyo-network/xl1-protocol';
4
5
  import { type HydratedTransactionInstance, type TransactionFeesInstance } from '@xyo-network/xl1-protocol-sdk';
5
6
  export declare class HydratedTransactionWrapper<T extends HydratedTransaction> implements HydratedTransactionInstance<[
@@ -13,9 +14,12 @@ export declare class HydratedTransactionWrapper<T extends HydratedTransaction> i
13
14
  get boundWitness(): WithHashStorageMeta<T[0]>;
14
15
  get elevatedPayloadCount(): number;
15
16
  get elevatedPayloads(): WithHashStorageMeta<AllowedBlockPayload>[];
17
+ get externalPayloads(): Record<Hash, Schema | Payload>;
16
18
  get from(): Lowercase<string>;
17
19
  get payloadCount(): number;
18
20
  get payloads(): WithHashStorageMeta<WithHashStorageMeta<T[1][number]>>[];
21
+ get privateExternalPayloads(): Record<Hash, Schema>;
22
+ get publicExternalPayloads(): Payload[];
19
23
  static parse<T extends HydratedTransaction>(transaction: T, validate?: boolean): Promise<HydratedTransactionInstance<[
20
24
  WithHashStorageMeta<T[0]>,
21
25
  WithHashStorageMeta<T[1][number]>[]
@@ -1 +1 @@
1
- {"version":3,"file":"HydratedTransaction.d.ts","sourceRoot":"","sources":["../../../src/transaction/HydratedTransaction.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAKjD,OAAO,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAC9E,OAAO,KAAK,EACV,mBAAmB,EAAE,mBAAmB,EAAE,sCAAsC,EACjF,MAAM,2BAA2B,CAAA;AAElC,OAAO,EACL,KAAK,2BAA2B,EAAE,KAAK,uBAAuB,EAC/D,MAAM,+BAA+B,CAAA;AAYtC,qBAAa,0BAA0B,CAAC,CAAC,SAAS,mBAAmB,CAAE,YAAW,2BAA2B,CAAC;IAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtI,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE;CAAC,CAAC;IACrC,IAAI,EAAE,sCAAsC,CAAC,CAAC,CAAC,CAAA;IAC/C,IAAI,EAAE,uBAAuB,CAAA;IAE7B,SAAS,CAAC,aAAa,EAAE,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAAK;IAE5D,SAAS,aAAa,IAAI,EAAE,sCAAsC,CAAC,CAAC,CAAC;IAOrE,IAAI,YAAY,8BAEf;IAED,IAAI,oBAAoB,IAAI,MAAM,CAGjC;IAED,IAAI,gBAAgB,IAAI,mBAAmB,CAAC,mBAAmB,CAAC,EAAE,CAEjE;IAED,IAAI,IAAI,sBAEP;IAED,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,IAAI,QAAQ,IAAI,mBAAmB,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAEvE;WAEY,KAAK,CAAC,CAAC,SAAS,mBAAmB,EAAE,WAAW,EAAE,CAAC,EAAE,QAAQ,UAAQ,GAAG,OAAO,CAAC,2BAA2B,CAAC;QAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjJ,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE;KAAC,CAAC,CAAC;IAiBxC,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,mBAAmB,CAAC,mBAAmB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS;IAInG,WAAW,IAAI,MAAM;IAIrB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,mBAAmB,CAAC,OAAO,CAAC,GAAG,SAAS;IAIhE,MAAM,IAAI,MAAM;IAShB,QAAQ,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;cAIf,KAAK,CAAC,QAAQ,UAAQ,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CAUhJ"}
1
+ {"version":3,"file":"HydratedTransaction.d.ts","sourceRoot":"","sources":["../../../src/transaction/HydratedTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAEvC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAMjD,OAAO,KAAK,EACV,OAAO,EAAE,MAAM,EAAE,mBAAmB,EACrC,MAAM,4BAA4B,CAAA;AACnC,OAAO,KAAK,EACV,mBAAmB,EAAE,mBAAmB,EAAE,sCAAsC,EACjF,MAAM,2BAA2B,CAAA;AAElC,OAAO,EACL,KAAK,2BAA2B,EAAE,KAAK,uBAAuB,EAC/D,MAAM,+BAA+B,CAAA;AAYtC,qBAAa,0BAA0B,CAAC,CAAC,SAAS,mBAAmB,CAAE,YAAW,2BAA2B,CAAC;IAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtI,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE;CAAC,CAAC;IACrC,IAAI,EAAE,sCAAsC,CAAC,CAAC,CAAC,CAAA;IAC/C,IAAI,EAAE,uBAAuB,CAAA;IAE7B,SAAS,CAAC,aAAa,EAAE,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAAK;IAE5D,SAAS,aAAa,IAAI,EAAE,sCAAsC,CAAC,CAAC,CAAC;IAOrE,IAAI,YAAY,8BAEf;IAED,IAAI,oBAAoB,IAAI,MAAM,CAGjC;IAED,IAAI,gBAAgB,IAAI,mBAAmB,CAAC,mBAAmB,CAAC,EAAE,CAEjE;IAED,IAAI,gBAAgB,IAAI,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CASrD;IAED,IAAI,IAAI,sBAEP;IAED,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,IAAI,QAAQ,IAAI,mBAAmB,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAEvE;IAED,IAAI,uBAAuB,IAAI,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAUlD;IAGD,IAAI,sBAAsB,IAAI,OAAO,EAAE,CAItC;WAEY,KAAK,CAAC,CAAC,SAAS,mBAAmB,EAAE,WAAW,EAAE,CAAC,EAAE,QAAQ,UAAQ,GAAG,OAAO,CAAC,2BAA2B,CAAC;QAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjJ,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE;KAAC,CAAC,CAAC;IAiBxC,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,mBAAmB,CAAC,mBAAmB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS;IAInG,WAAW,IAAI,MAAM;IAIrB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,mBAAmB,CAAC,OAAO,CAAC,GAAG,SAAS;IAIhE,MAAM,IAAI,MAAM;IAShB,QAAQ,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;cAIf,KAAK,CAAC,QAAQ,UAAQ,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CAUhJ"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "http://json.schemastore.org/package.json",
3
3
  "name": "@xyo-network/chain-wrappers",
4
- "version": "1.5.28",
4
+ "version": "1.5.30",
5
5
  "description": "XYO Layer One SDK Wrappers",
6
6
  "homepage": "https://xylabs.com",
7
7
  "bugs": {
@@ -34,32 +34,32 @@
34
34
  "deploy3": "echo Deploy3 not allowed!"
35
35
  },
36
36
  "dependencies": {
37
- "@xylabs/arraybuffer": "^4.11.16",
38
- "@xylabs/assert": "^4.11.16",
39
- "@xylabs/base": "^4.11.16",
40
- "@xylabs/events": "^4.11.16",
41
- "@xylabs/exists": "^4.11.16",
42
- "@xylabs/hex": "^4.11.16",
43
- "@xylabs/object": "^4.11.16",
44
- "@xylabs/promise": "^4.11.16",
45
- "@xylabs/typeof": "^4.11.16",
46
- "@xyo-network/archivist-model": "^3.18.5",
47
- "@xyo-network/boundwitness-model": "^3.18.5",
48
- "@xyo-network/boundwitness-validator": "^3.18.5",
49
- "@xyo-network/chain-protocol": "^1.5.28",
50
- "@xyo-network/chain-utils": "^1.5.28",
51
- "@xyo-network/chain-validation": "^1.5.28",
52
- "@xyo-network/payload-builder": "^3.18.5",
53
- "@xyo-network/payload-model": "^3.18.5",
54
- "@xyo-network/xl1-protocol": "^1.4.19",
55
- "@xyo-network/xl1-protocol-sdk": "^1.5.28",
37
+ "@xylabs/arraybuffer": "^4.11.20",
38
+ "@xylabs/assert": "^4.11.20",
39
+ "@xylabs/base": "^4.11.20",
40
+ "@xylabs/events": "^4.11.20",
41
+ "@xylabs/exists": "^4.11.20",
42
+ "@xylabs/hex": "^4.11.20",
43
+ "@xylabs/object": "^4.11.20",
44
+ "@xylabs/promise": "^4.11.20",
45
+ "@xylabs/typeof": "^4.11.20",
46
+ "@xyo-network/archivist-model": "^3.18.8",
47
+ "@xyo-network/boundwitness-model": "^3.18.8",
48
+ "@xyo-network/boundwitness-validator": "^3.18.8",
49
+ "@xyo-network/chain-protocol": "^1.5.30",
50
+ "@xyo-network/chain-utils": "^1.5.30",
51
+ "@xyo-network/chain-validation": "^1.5.30",
52
+ "@xyo-network/payload-builder": "^3.18.8",
53
+ "@xyo-network/payload-model": "^3.18.8",
54
+ "@xyo-network/xl1-protocol": "^1.4.25",
55
+ "@xyo-network/xl1-protocol-sdk": "^1.5.30",
56
56
  "async-mutex": "^0.5.0"
57
57
  },
58
58
  "devDependencies": {
59
- "@types/node": "^22.15.30",
59
+ "@types/node": "^24.0.1",
60
60
  "@xylabs/ts-scripts-yarn3": "^6.5.8",
61
61
  "@xylabs/tsconfig": "^6.5.8",
62
- "knip": "^5.60.2",
62
+ "knip": "^5.61.0",
63
63
  "typescript": "^5.8.3"
64
64
  },
65
65
  "engines": {
@@ -6,7 +6,6 @@ import { PayloadBuilder } from '@xyo-network/payload-builder'
6
6
  import type { WithHashStorageMeta } from '@xyo-network/payload-model'
7
7
  import type {
8
8
  AccountBalanceService,
9
- AllowedBlockPayload,
10
9
  HydratedBlock, SignedHydratedTransaction, Transfer,
11
10
  } from '@xyo-network/xl1-protocol'
12
11
  import {
@@ -29,7 +28,6 @@ const sumTransfers = (payload: Transfer) => {
29
28
  export class HydratedBlockWrapper<T extends HydratedBlock> implements HydratedBlockInstance<[WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]> {
30
29
  data: [WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]
31
30
  protected allPayloadsCache: WithHashStorageMeta<WithHashStorageMeta<T[1][number]>>[] = []
32
- protected publicPayloadsCache: WithHashStorageMeta<WithHashStorageMeta<T[1][number] & AllowedBlockPayload>>[] = []
33
31
  protected transactionsCache: SignedHydratedTransactionInstance[] = []
34
32
 
35
33
  protected constructor(data: [WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]) {
@@ -56,18 +54,6 @@ export class HydratedBlockWrapper<T extends HydratedBlock> implements HydratedBl
56
54
  return [...this.allPayloadsCache]
57
55
  }
58
56
 
59
- get privatePayloadCount(): number {
60
- return this.data[1].length - this.publicPayloadCount
61
- }
62
-
63
- get publicPayloadCount(): number {
64
- return this.allPayloadsCache.length
65
- }
66
-
67
- get publicPayloads(): (T[1][number] & AllowedBlockPayload)[] {
68
- return [...this.publicPayloadsCache]
69
- }
70
-
71
57
  get reward(): bigint {
72
58
  return this.allPayloadsCache.reduce((acc: bigint, payload) => acc + (
73
59
  isTransfer(payload)
@@ -124,12 +110,8 @@ export class HydratedBlockWrapper<T extends HydratedBlock> implements HydratedBl
124
110
  }
125
111
  for (const hash of this.data[0].payload_hashes) {
126
112
  const payload = this.allPayloadsCache.find(p => p._hash === hash)
127
- if (payload) {
128
- if (isAllowedBlockPayloadWithHashStorageMeta(payload)) {
129
- this.publicPayloadsCache.push(payload)
130
- } else {
131
- throw new Error('Disallowed payload type')
132
- }
113
+ if (payload && !isAllowedBlockPayloadWithHashStorageMeta(payload)) {
114
+ throw new Error('Disallowed payload type')
133
115
  }
134
116
  }
135
117
  if (validate) {
@@ -1,10 +1,14 @@
1
+ import type { Hash } from '@xylabs/hex'
1
2
  import { hexToBigInt } from '@xylabs/hex'
2
3
  import type { Promisable } from '@xylabs/promise'
4
+ import { isDefined } from '@xylabs/typeof'
3
5
  import { tryExtractElevatedHashes, tryExtractElevatedHashesFromScript } from '@xyo-network/chain-protocol'
4
6
  import { XYO_ZERO_ADDRESS } from '@xyo-network/chain-utils'
5
7
  import { validateTransaction } from '@xyo-network/chain-validation'
6
8
  import { PayloadBuilder } from '@xyo-network/payload-builder'
7
- import type { Payload, WithHashStorageMeta } from '@xyo-network/payload-model'
9
+ import type {
10
+ Payload, Schema, WithHashStorageMeta,
11
+ } from '@xyo-network/payload-model'
8
12
  import type {
9
13
  AllowedBlockPayload, HydratedTransaction, HydratedTransactionWithHashStorageMeta, Transfer,
10
14
  } from '@xyo-network/xl1-protocol'
@@ -50,6 +54,17 @@ export class HydratedTransactionWrapper<T extends HydratedTransaction> implement
50
54
  return tryExtractElevatedHashes(this.data)
51
55
  }
52
56
 
57
+ get externalPayloads(): Record<Hash, Schema | Payload> {
58
+ const allPayloads = this.payloads
59
+ const external: Record<Hash, Schema | Payload> = {}
60
+ for (let i = 0; i < this.boundWitness.payload_hashes.length; i++) {
61
+ const payloadHash = this.boundWitness.payload_hashes[i]
62
+ const payload = allPayloads.find(p => p._hash === payloadHash)
63
+ external[payloadHash] = isDefined(payload) ? payload : this.boundWitness.payload_schemas[i]
64
+ }
65
+ return external
66
+ }
67
+
53
68
  get from() {
54
69
  return this.data[0].from
55
70
  }
@@ -62,6 +77,25 @@ export class HydratedTransactionWrapper<T extends HydratedTransaction> implement
62
77
  return [...this.payloadsCache]
63
78
  }
64
79
 
80
+ get privateExternalPayloads(): Record<Hash, Schema> {
81
+ const allPayloads = this.payloads
82
+ const missing: Record<Hash, Schema> = {}
83
+ for (let i = 0; i < this.boundWitness.payload_hashes.length; i++) {
84
+ const payloadHash = this.boundWitness.payload_hashes[i]
85
+ if (!allPayloads.some(p => p._hash === payloadHash)) {
86
+ missing[payloadHash] = this.boundWitness.payload_schemas[i]
87
+ }
88
+ }
89
+ return missing
90
+ }
91
+
92
+ // list all the payloads that are included in the transaction and are not elevated and found in the hydration
93
+ get publicExternalPayloads(): Payload[] {
94
+ const allPayloads = this.payloads
95
+ const elevatedPayloads = this.elevatedPayloads
96
+ return allPayloads.filter(p => !elevatedPayloads.some(ep => ep._hash === p._hash))
97
+ }
98
+
65
99
  static async parse<T extends HydratedTransaction>(transaction: T, validate = false): Promise<HydratedTransactionInstance<[WithHashStorageMeta<T[0]>,
66
100
  WithHashStorageMeta<T[1][number]>[]]>> {
67
101
  const wrapper = new HydratedTransactionWrapper<T>(