@xyo-network/xl1-wrappers 1.22.2 → 1.22.4
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/index.mjs
CHANGED
|
@@ -152,8 +152,8 @@ var HydratedTransactionWrapper = class _HydratedTransactionWrapper {
|
|
|
152
152
|
context;
|
|
153
153
|
payloadsCache = [];
|
|
154
154
|
_signatureCache = [];
|
|
155
|
-
constructor(
|
|
156
|
-
this.context = context;
|
|
155
|
+
constructor(data, context) {
|
|
156
|
+
this.context = context ?? { singletons: {} };
|
|
157
157
|
this.data = data;
|
|
158
158
|
this.fees = new FeesWrapper(
|
|
159
159
|
this.boundWitness.fees
|
|
@@ -211,9 +211,8 @@ var HydratedTransactionWrapper = class _HydratedTransactionWrapper {
|
|
|
211
211
|
get signatures() {
|
|
212
212
|
return [...this._signatureCache];
|
|
213
213
|
}
|
|
214
|
-
static async parse(
|
|
214
|
+
static async parse(transaction, validate = false) {
|
|
215
215
|
const wrapper = new _HydratedTransactionWrapper(
|
|
216
|
-
context,
|
|
217
216
|
transaction
|
|
218
217
|
);
|
|
219
218
|
const parsed = await wrapper.parse();
|
|
@@ -243,7 +242,7 @@ var HydratedTransactionWrapper = class _HydratedTransactionWrapper {
|
|
|
243
242
|
async validate() {
|
|
244
243
|
const errors = [
|
|
245
244
|
...(await Promise.all(this._signatureCache.map((signature) => signature.validate()))).flat(),
|
|
246
|
-
...await validateTransaction(this.context, this.data)
|
|
245
|
+
...await validateTransaction({ ...this.context, chainId: this.data[0].chain }, this.data)
|
|
247
246
|
];
|
|
248
247
|
return errors;
|
|
249
248
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/Base.ts","../../src/chain/chain.ts","../../src/Fees.ts","../../src/lib/createSignatureWrappers.ts","../../src/Signature.ts","../../src/transaction/HydratedTransaction.ts"],"sourcesContent":["import type { PromisableArray } from '@xylabs/sdk-js'\nimport type { XyoConnection } from '@xyo-network/xl1-protocol-sdk'\n\nexport interface BaseWrapperConfig<T> {\n provider: XyoConnection\n value: T\n}\n\nexport class BaseWrapper<T, C extends BaseWrapperConfig<T> = BaseWrapperConfig<T>> {\n protected readonly config: Partial<C>\n protected readonly value: T\n protected constructor(value: T, config: Partial<C> = {}) {\n this.config = config\n this.value = value\n }\n\n get provider(): XyoConnection | undefined {\n return this.config.provider\n }\n\n static async create<T, C extends BaseWrapperConfig<T> = BaseWrapperConfig<T>>(value: T, config: Partial<C> = {}) {\n if ((await this.validateValue(value)).length > 0) {\n throw new Error(`Invalid value for ${this.constructor.name}: ${value}`)\n }\n if ((await this.validateConfig(config)).length > 0) {\n throw new Error(`Invalid config for ${this.constructor.name}: ${config}`)\n }\n return new this<T>(value, config)\n }\n\n static validateConfig(_config: unknown): PromisableArray<Error> {\n return []\n }\n\n static validateValue(_value: unknown): PromisableArray<Error> {\n return []\n }\n\n validate(): PromisableArray<Error> {\n return []\n }\n}\n","import type { Address } from '@xylabs/sdk-js'\n\nimport type { BaseWrapperConfig } from '../Base.ts'\nimport { BaseWrapper } from '../Base.ts'\n\nexport class ChainWrapper extends BaseWrapper<Address, BaseWrapperConfig<Address>> {\n get id(): Address {\n return this.value\n }\n}\n","import type { Hex, Promisable } from '@xylabs/sdk-js'\nimport { hexToBigInt } from '@xylabs/sdk-js'\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 { asHex } from '@xylabs/sdk-js'\nimport 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(asHex(bw.$signatures[i], true), bw.addresses[i], hash),\n )\n }\n return signatures\n}\n","import type {\n Address, Hash, Hex,\n} from '@xylabs/sdk-js'\nimport { toArrayBuffer } from '@xylabs/sdk-js'\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.hash, this.address, this.signature)\n }\n}\n","import type { Hash, Hex } from '@xylabs/sdk-js'\nimport { hexToBigInt, isDefined } from '@xylabs/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type {\n Payload, Schema,\n WithHashMeta,\n WithStorageMeta,\n} from '@xyo-network/payload-model'\nimport type {\n AllowedBlockPayload, BaseContext, ChainId, HydratedTransactionWithHashMeta, Transfer,\n} from '@xyo-network/xl1-protocol'\nimport { isTransfer, XYO_ZERO_ADDRESS } from '@xyo-network/xl1-protocol'\nimport type {\n HydratedTransactionInstance, SignatureInstance,\n TransactionFeesInstance,\n} from '@xyo-network/xl1-protocol-sdk'\nimport {\n transactionRequiredGas, tryExtractElevatedHashes, tryExtractElevatedHashesFromScript,\n} from '@xyo-network/xl1-protocol-sdk'\nimport { validateTransaction } from '@xyo-network/xl1-validation'\n\nimport { FeesWrapper } from '../Fees.ts'\nimport { createSignatureWrappers } from '../lib/index.ts'\n\nconst sumTransfers = (payload: Transfer) => {\n let total = 0n\n for (let i of Object.values(payload.transfers)) {\n total += hexToBigInt(i ?? '00' as Hex)\n }\n return total\n}\n\nexport interface HydratedTransactionWrapperContext extends BaseContext {\n chainId: ChainId\n}\n\nexport class HydratedTransactionWrapper<T extends HydratedTransactionWithHashMeta> implements HydratedTransactionInstance<T> {\n data: T\n fees: TransactionFeesInstance\n\n protected context: HydratedTransactionWrapperContext\n protected payloadsCache: WithStorageMeta<Payload>[] = []\n\n private _signatureCache: SignatureInstance[] = []\n\n protected constructor(context: HydratedTransactionWrapperContext, data: T) {\n this.context = context\n this.data = data\n this.fees = new FeesWrapper(\n this.boundWitness.fees,\n )\n }\n\n get boundWitness(): T[0] {\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() {\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(): WithHashMeta<WithStorageMeta<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 get signatureCount(): number {\n return this._signatureCache.length\n }\n\n get signatures(): SignatureInstance[] {\n return [...this._signatureCache]\n }\n\n static async parse<T extends HydratedTransactionWithHashMeta>(context: HydratedTransactionWrapperContext, transaction: T, validate = false): Promise<HydratedTransactionInstance<[T[0],\n T[1][number][]]>> {\n const wrapper = new HydratedTransactionWrapper<T>(\n context,\n transaction,\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): WithHashMeta<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): WithStorageMeta<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 signature(index: number): SignatureInstance | undefined {\n return this._signatureCache[index]\n }\n\n async validate(): Promise<Error[]> {\n const errors: Error[] = [...(await Promise.all(this._signatureCache.map(signature => signature.validate()))).flat(),\n ...(await validateTransaction(this.context, this.data))]\n return errors\n }\n\n protected async parse(validate = false): Promise<HydratedTransactionInstance<[WithHashMeta<T[0]>, WithHashMeta<T[1][number]>[]]>> {\n const transactionPayloads = await PayloadBuilder.addStorageMeta(this.data[1])\n this._signatureCache = await createSignatureWrappers(this.data[0])\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"],"mappings":"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","names":["hexToBigInt","PayloadBuilder","hexToBigInt","PayloadBuilder"]}
|
|
1
|
+
{"version":3,"sources":["../../src/Base.ts","../../src/chain/chain.ts","../../src/Fees.ts","../../src/lib/createSignatureWrappers.ts","../../src/Signature.ts","../../src/transaction/HydratedTransaction.ts"],"sourcesContent":["import type { PromisableArray } from '@xylabs/sdk-js'\nimport type { XyoConnection } from '@xyo-network/xl1-protocol-sdk'\n\nexport interface BaseWrapperConfig<T> {\n provider: XyoConnection\n value: T\n}\n\nexport class BaseWrapper<T, C extends BaseWrapperConfig<T> = BaseWrapperConfig<T>> {\n protected readonly config: Partial<C>\n protected readonly value: T\n protected constructor(value: T, config: Partial<C> = {}) {\n this.config = config\n this.value = value\n }\n\n get provider(): XyoConnection | undefined {\n return this.config.provider\n }\n\n static async create<T, C extends BaseWrapperConfig<T> = BaseWrapperConfig<T>>(value: T, config: Partial<C> = {}) {\n if ((await this.validateValue(value)).length > 0) {\n throw new Error(`Invalid value for ${this.constructor.name}: ${value}`)\n }\n if ((await this.validateConfig(config)).length > 0) {\n throw new Error(`Invalid config for ${this.constructor.name}: ${config}`)\n }\n return new this<T>(value, config)\n }\n\n static validateConfig(_config: unknown): PromisableArray<Error> {\n return []\n }\n\n static validateValue(_value: unknown): PromisableArray<Error> {\n return []\n }\n\n validate(): PromisableArray<Error> {\n return []\n }\n}\n","import type { Address } from '@xylabs/sdk-js'\n\nimport type { BaseWrapperConfig } from '../Base.ts'\nimport { BaseWrapper } from '../Base.ts'\n\nexport class ChainWrapper extends BaseWrapper<Address, BaseWrapperConfig<Address>> {\n get id(): Address {\n return this.value\n }\n}\n","import type { Hex, Promisable } from '@xylabs/sdk-js'\nimport { hexToBigInt } from '@xylabs/sdk-js'\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 { asHex } from '@xylabs/sdk-js'\nimport 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(asHex(bw.$signatures[i], true), bw.addresses[i], hash),\n )\n }\n return signatures\n}\n","import type {\n Address, Hash, Hex,\n} from '@xylabs/sdk-js'\nimport { toArrayBuffer } from '@xylabs/sdk-js'\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.hash, this.address, this.signature)\n }\n}\n","import type { Hash, Hex } from '@xylabs/sdk-js'\nimport { hexToBigInt, isDefined } from '@xylabs/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type {\n Payload, Schema,\n WithHashMeta,\n WithStorageMeta,\n} from '@xyo-network/payload-model'\nimport type {\n AllowedBlockPayload, BaseContext, HydratedTransactionWithHashMeta, Transfer,\n} from '@xyo-network/xl1-protocol'\nimport { isTransfer, XYO_ZERO_ADDRESS } from '@xyo-network/xl1-protocol'\nimport type {\n HydratedTransactionInstance, SignatureInstance,\n TransactionFeesInstance,\n} from '@xyo-network/xl1-protocol-sdk'\nimport {\n transactionRequiredGas, tryExtractElevatedHashes, tryExtractElevatedHashesFromScript,\n} from '@xyo-network/xl1-protocol-sdk'\nimport { validateTransaction } from '@xyo-network/xl1-validation'\n\nimport { FeesWrapper } from '../Fees.ts'\nimport { createSignatureWrappers } from '../lib/index.ts'\n\nconst sumTransfers = (payload: Transfer) => {\n let total = 0n\n for (let i of Object.values(payload.transfers)) {\n total += hexToBigInt(i ?? '00' as Hex)\n }\n return total\n}\n\nexport interface HydratedTransactionWrapperContext extends BaseContext {\n\n}\n\nexport class HydratedTransactionWrapper<T extends HydratedTransactionWithHashMeta> implements HydratedTransactionInstance<T> {\n data: T\n fees: TransactionFeesInstance\n\n protected context: HydratedTransactionWrapperContext\n protected payloadsCache: WithStorageMeta<Payload>[] = []\n\n private _signatureCache: SignatureInstance[] = []\n\n protected constructor(data: T, context?: HydratedTransactionWrapperContext) {\n this.context = context ?? { singletons: {} }\n this.data = data\n this.fees = new FeesWrapper(\n this.boundWitness.fees,\n )\n }\n\n get boundWitness(): T[0] {\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() {\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(): WithHashMeta<WithStorageMeta<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 get signatureCount(): number {\n return this._signatureCache.length\n }\n\n get signatures(): SignatureInstance[] {\n return [...this._signatureCache]\n }\n\n static async parse<T extends HydratedTransactionWithHashMeta>(transaction: T, validate = false): Promise<HydratedTransactionInstance<[T[0],\n T[1][number][]]>> {\n const wrapper = new HydratedTransactionWrapper<T>(\n transaction,\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): WithHashMeta<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): WithStorageMeta<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 signature(index: number): SignatureInstance | undefined {\n return this._signatureCache[index]\n }\n\n async validate(): Promise<Error[]> {\n const errors: Error[] = [...(await Promise.all(this._signatureCache.map(signature => signature.validate()))).flat(),\n ...(await validateTransaction({ ...this.context, chainId: this.data[0].chain }, this.data))]\n return errors\n }\n\n protected async parse(validate = false): Promise<HydratedTransactionInstance<[WithHashMeta<T[0]>, WithHashMeta<T[1][number]>[]]>> {\n const transactionPayloads = await PayloadBuilder.addStorageMeta(this.data[1])\n this._signatureCache = await createSignatureWrappers(this.data[0])\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"],"mappings":"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","names":["hexToBigInt","PayloadBuilder","hexToBigInt","PayloadBuilder"]}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import type { Hash } from '@xylabs/sdk-js';
|
|
2
2
|
import type { Payload, Schema, WithHashMeta, WithStorageMeta } from '@xyo-network/payload-model';
|
|
3
|
-
import type { AllowedBlockPayload, BaseContext,
|
|
3
|
+
import type { AllowedBlockPayload, BaseContext, HydratedTransactionWithHashMeta } from '@xyo-network/xl1-protocol';
|
|
4
4
|
import type { HydratedTransactionInstance, SignatureInstance, TransactionFeesInstance } from '@xyo-network/xl1-protocol-sdk';
|
|
5
5
|
export interface HydratedTransactionWrapperContext extends BaseContext {
|
|
6
|
-
chainId: ChainId;
|
|
7
6
|
}
|
|
8
7
|
export declare class HydratedTransactionWrapper<T extends HydratedTransactionWithHashMeta> implements HydratedTransactionInstance<T> {
|
|
9
8
|
data: T;
|
|
@@ -11,7 +10,7 @@ export declare class HydratedTransactionWrapper<T extends HydratedTransactionWit
|
|
|
11
10
|
protected context: HydratedTransactionWrapperContext;
|
|
12
11
|
protected payloadsCache: WithStorageMeta<Payload>[];
|
|
13
12
|
private _signatureCache;
|
|
14
|
-
protected constructor(
|
|
13
|
+
protected constructor(data: T, context?: HydratedTransactionWrapperContext);
|
|
15
14
|
get boundWitness(): T[0];
|
|
16
15
|
get elevatedPayloadCount(): number;
|
|
17
16
|
get elevatedPayloads(): WithStorageMeta<AllowedBlockPayload>[];
|
|
@@ -27,7 +26,7 @@ export declare class HydratedTransactionWrapper<T extends HydratedTransactionWit
|
|
|
27
26
|
get publicExternalPayloads(): Payload[];
|
|
28
27
|
get signatureCount(): number;
|
|
29
28
|
get signatures(): SignatureInstance[];
|
|
30
|
-
static parse<T extends HydratedTransactionWithHashMeta>(
|
|
29
|
+
static parse<T extends HydratedTransactionWithHashMeta>(transaction: T, validate?: boolean): Promise<HydratedTransactionInstance<[
|
|
31
30
|
T[0],
|
|
32
31
|
T[1][number][]
|
|
33
32
|
]>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HydratedTransaction.d.ts","sourceRoot":"","sources":["../../../src/transaction/HydratedTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAO,MAAM,gBAAgB,CAAA;AAG/C,OAAO,KAAK,EACV,OAAO,EAAE,MAAM,EACf,YAAY,EACZ,eAAe,EAChB,MAAM,4BAA4B,CAAA;AACnC,OAAO,KAAK,EACV,mBAAmB,EAAE,WAAW,EAAE
|
|
1
|
+
{"version":3,"file":"HydratedTransaction.d.ts","sourceRoot":"","sources":["../../../src/transaction/HydratedTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAO,MAAM,gBAAgB,CAAA;AAG/C,OAAO,KAAK,EACV,OAAO,EAAE,MAAM,EACf,YAAY,EACZ,eAAe,EAChB,MAAM,4BAA4B,CAAA;AACnC,OAAO,KAAK,EACV,mBAAmB,EAAE,WAAW,EAAE,+BAA+B,EAClE,MAAM,2BAA2B,CAAA;AAElC,OAAO,KAAK,EACV,2BAA2B,EAAE,iBAAiB,EAC9C,uBAAuB,EACxB,MAAM,+BAA+B,CAAA;AAiBtC,MAAM,WAAW,iCAAkC,SAAQ,WAAW;CAErE;AAED,qBAAa,0BAA0B,CAAC,CAAC,SAAS,+BAA+B,CAAE,YAAW,2BAA2B,CAAC,CAAC,CAAC;IAC1H,IAAI,EAAE,CAAC,CAAA;IACP,IAAI,EAAE,uBAAuB,CAAA;IAE7B,SAAS,CAAC,OAAO,EAAE,iCAAiC,CAAA;IACpD,SAAS,CAAC,aAAa,EAAE,eAAe,CAAC,OAAO,CAAC,EAAE,CAAK;IAExD,OAAO,CAAC,eAAe,CAA0B;IAEjD,SAAS,aAAa,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,iCAAiC;IAQ1E,IAAI,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,CAEvB;IAED,IAAI,oBAAoB,IAAI,MAAM,CAGjC;IAED,IAAI,gBAAgB,2CAEnB;IAED,IAAI,gBAAgB,IAAI,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CASrD;IAED,IAAI,IAAI;;;;MAEP;IAED,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,IAAI,QAAQ,IAAI,YAAY,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAE5D;IAED,IAAI,uBAAuB,IAAI,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAUlD;IAGD,IAAI,sBAAsB,IAAI,OAAO,EAAE,CAItC;IAED,IAAI,cAAc,IAAI,MAAM,CAE3B;IAED,IAAI,UAAU,IAAI,iBAAiB,EAAE,CAEpC;WAEY,KAAK,CAAC,CAAC,SAAS,+BAA+B,EAAE,WAAW,EAAE,CAAC,EAAE,QAAQ,UAAQ,GAAG,OAAO,CAAC,2BAA2B,CAAC;QAAC,CAAC,CAAC,CAAC,CAAC;QACxI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE;KAAC,CAAC,CAAC;IAcnB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,CAAC,mBAAmB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS;IAI5F,WAAW,IAAI,MAAM;IAIrB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,GAAG,SAAS;IAI5D,MAAM,IAAI,MAAM;IAShB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAIjD,QAAQ,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;cAMlB,KAAK,CAAC,QAAQ,UAAQ,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CAWlI"}
|
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-wrappers",
|
|
4
|
-
"version": "1.22.
|
|
4
|
+
"version": "1.22.4",
|
|
5
5
|
"description": "XYO Layer One SDK Wrappers",
|
|
6
6
|
"homepage": "https://xylabs.com",
|
|
7
7
|
"bugs": {
|
|
@@ -44,9 +44,9 @@
|
|
|
44
44
|
"@xyo-network/boundwitness-validator": "~5.3.2",
|
|
45
45
|
"@xyo-network/payload-builder": "~5.3.2",
|
|
46
46
|
"@xyo-network/payload-model": "~5.3.2",
|
|
47
|
-
"@xyo-network/xl1-protocol": "~1.22.
|
|
48
|
-
"@xyo-network/xl1-protocol-sdk": "~1.22.
|
|
49
|
-
"@xyo-network/xl1-validation": "~1.22.
|
|
47
|
+
"@xyo-network/xl1-protocol": "~1.22.4",
|
|
48
|
+
"@xyo-network/xl1-protocol-sdk": "~1.22.4",
|
|
49
|
+
"@xyo-network/xl1-validation": "~1.22.4"
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|
|
52
52
|
"@types/node": "~25.1.0",
|
|
@@ -7,7 +7,7 @@ import type {
|
|
|
7
7
|
WithStorageMeta,
|
|
8
8
|
} from '@xyo-network/payload-model'
|
|
9
9
|
import type {
|
|
10
|
-
AllowedBlockPayload, BaseContext,
|
|
10
|
+
AllowedBlockPayload, BaseContext, HydratedTransactionWithHashMeta, Transfer,
|
|
11
11
|
} from '@xyo-network/xl1-protocol'
|
|
12
12
|
import { isTransfer, XYO_ZERO_ADDRESS } from '@xyo-network/xl1-protocol'
|
|
13
13
|
import type {
|
|
@@ -31,7 +31,7 @@ const sumTransfers = (payload: Transfer) => {
|
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
export interface HydratedTransactionWrapperContext extends BaseContext {
|
|
34
|
-
|
|
34
|
+
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
export class HydratedTransactionWrapper<T extends HydratedTransactionWithHashMeta> implements HydratedTransactionInstance<T> {
|
|
@@ -43,8 +43,8 @@ export class HydratedTransactionWrapper<T extends HydratedTransactionWithHashMet
|
|
|
43
43
|
|
|
44
44
|
private _signatureCache: SignatureInstance[] = []
|
|
45
45
|
|
|
46
|
-
protected constructor(
|
|
47
|
-
this.context = context
|
|
46
|
+
protected constructor(data: T, context?: HydratedTransactionWrapperContext) {
|
|
47
|
+
this.context = context ?? { singletons: {} }
|
|
48
48
|
this.data = data
|
|
49
49
|
this.fees = new FeesWrapper(
|
|
50
50
|
this.boundWitness.fees,
|
|
@@ -114,10 +114,9 @@ export class HydratedTransactionWrapper<T extends HydratedTransactionWithHashMet
|
|
|
114
114
|
return [...this._signatureCache]
|
|
115
115
|
}
|
|
116
116
|
|
|
117
|
-
static async parse<T extends HydratedTransactionWithHashMeta>(
|
|
117
|
+
static async parse<T extends HydratedTransactionWithHashMeta>(transaction: T, validate = false): Promise<HydratedTransactionInstance<[T[0],
|
|
118
118
|
T[1][number][]]>> {
|
|
119
119
|
const wrapper = new HydratedTransactionWrapper<T>(
|
|
120
|
-
context,
|
|
121
120
|
transaction,
|
|
122
121
|
)
|
|
123
122
|
const parsed = await wrapper.parse()
|
|
@@ -157,7 +156,7 @@ export class HydratedTransactionWrapper<T extends HydratedTransactionWithHashMet
|
|
|
157
156
|
|
|
158
157
|
async validate(): Promise<Error[]> {
|
|
159
158
|
const errors: Error[] = [...(await Promise.all(this._signatureCache.map(signature => signature.validate()))).flat(),
|
|
160
|
-
...(await validateTransaction(this.context, this.data))]
|
|
159
|
+
...(await validateTransaction({ ...this.context, chainId: this.data[0].chain }, this.data))]
|
|
161
160
|
return errors
|
|
162
161
|
}
|
|
163
162
|
|