@xyo-network/xl1-wrappers 1.7.15

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.
@@ -0,0 +1,17 @@
1
+ import type { PromisableArray } from '@xylabs/promise';
2
+ import type { XyoConnectionProvider } from '@xyo-network/xl1-protocol';
3
+ export interface BaseWrapperConfig<T> {
4
+ provider: XyoConnectionProvider;
5
+ value: T;
6
+ }
7
+ export declare class BaseWrapper<T, C extends BaseWrapperConfig<T> = BaseWrapperConfig<T>> {
8
+ protected readonly config: Partial<C>;
9
+ protected readonly value: T;
10
+ protected constructor(value: T, config?: Partial<C>);
11
+ get provider(): XyoConnectionProvider | undefined;
12
+ static create<T, C extends BaseWrapperConfig<T> = BaseWrapperConfig<T>>(value: T, config?: Partial<C>): Promise<BaseWrapper<T, BaseWrapperConfig<T>>>;
13
+ static validateConfig(_config: unknown): PromisableArray<Error>;
14
+ static validateValue(_value: unknown): PromisableArray<Error>;
15
+ validate(): PromisableArray<Error>;
16
+ }
17
+ //# sourceMappingURL=Base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Base.d.ts","sourceRoot":"","sources":["../../src/Base.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAA;AAEtE,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAClC,QAAQ,EAAE,qBAAqB,CAAA;IAC/B,KAAK,EAAE,CAAC,CAAA;CACT;AAED,qBAAa,WAAW,CAAC,CAAC,EAAE,CAAC,SAAS,iBAAiB,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC;IAC/E,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;IACrC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAA;IAC3B,SAAS,aAAa,KAAK,EAAE,CAAC,EAAE,MAAM,GAAE,OAAO,CAAC,CAAC,CAAM;IAKvD,IAAI,QAAQ,IAAI,qBAAqB,GAAG,SAAS,CAEhD;WAEY,MAAM,CAAC,CAAC,EAAE,CAAC,SAAS,iBAAiB,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,GAAE,OAAO,CAAC,CAAC,CAAM;IAU/G,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC;IAI/D,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC;IAI7D,QAAQ,IAAI,eAAe,CAAC,KAAK,CAAC;CAGnC"}
@@ -0,0 +1,14 @@
1
+ import type { Promisable } from '@xylabs/promise';
2
+ import type { TransactionFeesBigInt, TransactionFeesHex } from '@xyo-network/xl1-protocol';
3
+ import { AttoXL1 } from '@xyo-network/xl1-protocol';
4
+ import type { TransactionFeesInstance } from '@xyo-network/xl1-protocol-sdk';
5
+ export declare class FeesWrapper implements TransactionFeesInstance {
6
+ base: AttoXL1;
7
+ gasLimit: AttoXL1;
8
+ gasPrice: AttoXL1;
9
+ priority: AttoXL1;
10
+ constructor({ base, gasLimit, gasPrice, priority, }: TransactionFeesHex | TransactionFeesBigInt);
11
+ static validate({ base, gasLimit, gasPrice, priority, }: TransactionFeesHex | TransactionFeesBigInt): Promisable<Error[]>;
12
+ validate(): Promise<Error[]>;
13
+ }
14
+ //# sourceMappingURL=Fees.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Fees.d.ts","sourceRoot":"","sources":["../../src/Fees.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC1F,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAA;AACnD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAA;AAM5E,qBAAa,WAAY,YAAW,uBAAuB;IACzD,IAAI,EAAE,OAAO,CAAA;IACb,QAAQ,EAAE,OAAO,CAAA;IACjB,QAAQ,EAAE,OAAO,CAAA;IACjB,QAAQ,EAAE,OAAO,CAAA;gBAEL,EACV,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,GACnC,EAAE,kBAAkB,GAAG,qBAAqB;IAO7C,MAAM,CAAC,QAAQ,CAAC,EACd,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,GACnC,EAAE,kBAAkB,GAAG,qBAAqB,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC;IAqB7D,QAAQ,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;CAKnC"}
@@ -0,0 +1,11 @@
1
+ import type { Address, Hash, Hex } from '@xylabs/hex';
2
+ import type { SignatureInstance } from '@xyo-network/xl1-protocol-sdk';
3
+ export declare class SignatureWrapper implements SignatureInstance {
4
+ address: Address;
5
+ hash: Hash;
6
+ signature: Hex;
7
+ constructor(signature: Hex, address: Address, hash: Hash);
8
+ static validate(hash: Hash, address: Address, signature: Hex): Promise<Error[]>;
9
+ validate(): Promise<Error[]>;
10
+ }
11
+ //# sourceMappingURL=Signature.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Signature.d.ts","sourceRoot":"","sources":["../../src/Signature.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,OAAO,EAAE,IAAI,EAAE,GAAG,EACnB,MAAM,aAAa,CAAA;AAEpB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAA;AAEtE,qBAAa,gBAAiB,YAAW,iBAAiB;IACxD,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,EAAE,IAAI,CAAA;IACV,SAAS,EAAE,GAAG,CAAA;gBAEF,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI;WAM3C,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAI/E,QAAQ,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;CAGnC"}
@@ -0,0 +1,6 @@
1
+ export * from './Base.ts';
2
+ export * from './Fees.ts';
3
+ export * from './lib/index.ts';
4
+ export * from './Signature.ts';
5
+ export * from './transaction/index.ts';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,wBAAwB,CAAA"}
@@ -0,0 +1,257 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+
4
+ // src/Base.ts
5
+ var BaseWrapper = class {
6
+ static {
7
+ __name(this, "BaseWrapper");
8
+ }
9
+ config;
10
+ value;
11
+ constructor(value, config = {}) {
12
+ this.config = config;
13
+ this.value = value;
14
+ }
15
+ get provider() {
16
+ return this.config.provider;
17
+ }
18
+ static async create(value, config = {}) {
19
+ if ((await this.validateValue(value)).length > 0) {
20
+ throw new Error(`Invalid value for ${this.constructor.name}: ${value}`);
21
+ }
22
+ if ((await this.validateConfig(config)).length > 0) {
23
+ throw new Error(`Invalid config for ${this.constructor.name}: ${config}`);
24
+ }
25
+ return new this(value, config);
26
+ }
27
+ static validateConfig(_config) {
28
+ return [];
29
+ }
30
+ static validateValue(_value) {
31
+ return [];
32
+ }
33
+ validate() {
34
+ return [];
35
+ }
36
+ };
37
+
38
+ // src/Fees.ts
39
+ import { hexToBigInt } from "@xylabs/hex";
40
+ import { AttoXL1 } from "@xyo-network/xl1-protocol";
41
+ function parseHexOrBigInt(value) {
42
+ return AttoXL1(typeof value === "bigint" ? value : hexToBigInt(value));
43
+ }
44
+ __name(parseHexOrBigInt, "parseHexOrBigInt");
45
+ var FeesWrapper = class _FeesWrapper {
46
+ static {
47
+ __name(this, "FeesWrapper");
48
+ }
49
+ base;
50
+ gasLimit;
51
+ gasPrice;
52
+ priority;
53
+ constructor({ base, gasLimit, gasPrice, priority }) {
54
+ this.base = parseHexOrBigInt(base);
55
+ this.gasLimit = parseHexOrBigInt(gasLimit);
56
+ this.gasPrice = parseHexOrBigInt(gasPrice);
57
+ this.priority = parseHexOrBigInt(priority);
58
+ }
59
+ static validate({ base, gasLimit, gasPrice, priority }) {
60
+ const errors = [];
61
+ const baseValue = parseHexOrBigInt(base);
62
+ const gasLimitValue = parseHexOrBigInt(gasLimit);
63
+ const gasPriceValue = parseHexOrBigInt(gasPrice);
64
+ const priorityValue = parseHexOrBigInt(priority);
65
+ if (baseValue <= 0n) {
66
+ errors.push(new Error("Base fee cannot be negative or zero"));
67
+ }
68
+ if (gasLimitValue < 0n) {
69
+ errors.push(new Error("Gas limit cannot be negative"));
70
+ }
71
+ if (gasPriceValue < 0n) {
72
+ errors.push(new Error("Gas price cannot be negative"));
73
+ }
74
+ if (priorityValue < 0n) {
75
+ errors.push(new Error("Priority cannot be negative"));
76
+ }
77
+ return errors;
78
+ }
79
+ async validate() {
80
+ return await _FeesWrapper.validate({
81
+ base: this.base,
82
+ gasLimit: this.gasLimit,
83
+ gasPrice: this.gasPrice,
84
+ priority: this.priority
85
+ });
86
+ }
87
+ };
88
+
89
+ // src/lib/createSignatureWrappers.ts
90
+ import { PayloadBuilder } from "@xyo-network/payload-builder";
91
+
92
+ // src/Signature.ts
93
+ import { toArrayBuffer } from "@xylabs/arraybuffer";
94
+ import { BoundWitnessValidator } from "@xyo-network/boundwitness-validator";
95
+ var SignatureWrapper = class _SignatureWrapper {
96
+ static {
97
+ __name(this, "SignatureWrapper");
98
+ }
99
+ address;
100
+ hash;
101
+ signature;
102
+ constructor(signature, address, hash) {
103
+ this.signature = signature;
104
+ this.address = address;
105
+ this.hash = hash;
106
+ }
107
+ static async validate(hash, address, signature) {
108
+ return await BoundWitnessValidator.validateSignature(toArrayBuffer(hash), toArrayBuffer(address), toArrayBuffer(signature));
109
+ }
110
+ async validate() {
111
+ return await _SignatureWrapper.validate(this.address, this.hash, this.signature);
112
+ }
113
+ };
114
+
115
+ // src/lib/createSignatureWrappers.ts
116
+ var createSignatureWrappers = /* @__PURE__ */ __name(async (bw) => {
117
+ const signatures = [];
118
+ const hash = await PayloadBuilder.dataHash(bw);
119
+ for (let i = 0; i < bw.$signatures.length; i++) {
120
+ signatures.push(new SignatureWrapper(bw.$signatures[i], bw.addresses[i], hash));
121
+ }
122
+ return signatures;
123
+ }, "createSignatureWrappers");
124
+
125
+ // src/transaction/HydratedTransaction.ts
126
+ import { hexToBigInt as hexToBigInt2 } from "@xylabs/hex";
127
+ import { isDefined } from "@xylabs/typeof";
128
+ import { validateTransaction } from "@xyo-network/chain-validation";
129
+ import { PayloadBuilder as PayloadBuilder2 } from "@xyo-network/payload-builder";
130
+ import { isTransfer, XYO_ZERO_ADDRESS } from "@xyo-network/xl1-protocol";
131
+ import { transactionRequiredGas, tryExtractElevatedHashes, tryExtractElevatedHashesFromScript } from "@xyo-network/xl1-protocol-sdk";
132
+ var sumTransfers = /* @__PURE__ */ __name((payload) => {
133
+ let total = 0n;
134
+ for (let i of Object.values(payload.transfers)) {
135
+ total += hexToBigInt2(i ?? "00");
136
+ }
137
+ return total;
138
+ }, "sumTransfers");
139
+ var HydratedTransactionWrapper = class _HydratedTransactionWrapper {
140
+ static {
141
+ __name(this, "HydratedTransactionWrapper");
142
+ }
143
+ data;
144
+ fees;
145
+ payloadsCache = [];
146
+ _signatureCache = [];
147
+ constructor(data) {
148
+ this.data = data;
149
+ this.fees = new FeesWrapper(this.boundWitness.fees);
150
+ }
151
+ get boundWitness() {
152
+ return this.data[0];
153
+ }
154
+ get elevatedPayloadCount() {
155
+ const { script } = this.data[0];
156
+ return script ? tryExtractElevatedHashesFromScript(script).length : 0;
157
+ }
158
+ get elevatedPayloads() {
159
+ return tryExtractElevatedHashes(this.data);
160
+ }
161
+ get externalPayloads() {
162
+ const allPayloads = this.payloads;
163
+ const external = {};
164
+ for (let i = 0; i < this.boundWitness.payload_hashes.length; i++) {
165
+ const payloadHash = this.boundWitness.payload_hashes[i];
166
+ const payload = allPayloads.find((p) => p._hash === payloadHash);
167
+ external[payloadHash] = isDefined(payload) ? payload : this.boundWitness.payload_schemas[i];
168
+ }
169
+ return external;
170
+ }
171
+ get from() {
172
+ return this.data[0].from;
173
+ }
174
+ get payloadCount() {
175
+ return this.payloadsCache.length;
176
+ }
177
+ get payloads() {
178
+ return [
179
+ ...this.payloadsCache
180
+ ];
181
+ }
182
+ get privateExternalPayloads() {
183
+ const allPayloads = this.payloads;
184
+ const missing = {};
185
+ for (let i = 0; i < this.boundWitness.payload_hashes.length; i++) {
186
+ const payloadHash = this.boundWitness.payload_hashes[i];
187
+ if (!allPayloads.some((p) => p._hash === payloadHash)) {
188
+ missing[payloadHash] = this.boundWitness.payload_schemas[i];
189
+ }
190
+ }
191
+ return missing;
192
+ }
193
+ // list all the payloads that are included in the transaction and are not elevated and found in the hydration
194
+ get publicExternalPayloads() {
195
+ const allPayloads = this.payloads;
196
+ const elevatedPayloads = this.elevatedPayloads;
197
+ return allPayloads.filter((p) => !elevatedPayloads.some((ep) => ep._hash === p._hash));
198
+ }
199
+ get signatureCount() {
200
+ return this._signatureCache.length;
201
+ }
202
+ get signatures() {
203
+ return [
204
+ ...this._signatureCache
205
+ ];
206
+ }
207
+ static async parse(transaction, validate = false) {
208
+ const wrapper = new _HydratedTransactionWrapper(transaction);
209
+ const parsed = await wrapper.parse();
210
+ if (validate) {
211
+ const errors = await wrapper.validate();
212
+ if (errors.length > 0) {
213
+ throw new Error(`Block validation failed: ${errors.join(", ")}`);
214
+ }
215
+ }
216
+ return parsed;
217
+ }
218
+ elevatedPayload(index) {
219
+ return this.elevatedPayloads.at(index);
220
+ }
221
+ gasRequired() {
222
+ return transactionRequiredGas(this.data);
223
+ }
224
+ payload(index) {
225
+ return this.payloads.at(index);
226
+ }
227
+ reward() {
228
+ return this.payloadsCache.reduce((acc, payload) => acc + (isTransfer(payload) ? payload.from === XYO_ZERO_ADDRESS ? sumTransfers(payload) : 0n : 0n), 0n);
229
+ }
230
+ signature(index) {
231
+ return this._signatureCache[index];
232
+ }
233
+ async validate() {
234
+ const errors = [];
235
+ errors.push(...(await Promise.all(this._signatureCache.map((signature) => signature.validate()))).flat(), ...await validateTransaction(this.data));
236
+ return errors;
237
+ }
238
+ async parse(validate = false) {
239
+ const transactionPayloads = await PayloadBuilder2.addStorageMeta(this.data[1]);
240
+ this._signatureCache = await createSignatureWrappers(this.data[0]);
241
+ for (const payload of transactionPayloads) {
242
+ this.payloadsCache.push(payload);
243
+ }
244
+ if (validate) {
245
+ await this.validate();
246
+ }
247
+ return this;
248
+ }
249
+ };
250
+ export {
251
+ BaseWrapper,
252
+ FeesWrapper,
253
+ HydratedTransactionWrapper,
254
+ SignatureWrapper,
255
+ createSignatureWrappers
256
+ };
257
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/Base.ts","../../src/Fees.ts","../../src/lib/createSignatureWrappers.ts","../../src/Signature.ts","../../src/transaction/HydratedTransaction.ts"],"sourcesContent":["import type { PromisableArray } from '@xylabs/promise'\nimport type { XyoConnectionProvider } from '@xyo-network/xl1-protocol'\n\nexport interface BaseWrapperConfig<T> {\n provider: XyoConnectionProvider\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(): XyoConnectionProvider | 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 { 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 { 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 { isDefined } from '@xylabs/typeof'\nimport { validateTransaction } from '@xyo-network/chain-validation'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type {\n Payload, Schema, WithHashStorageMeta,\n WithStorageMeta,\n} from '@xyo-network/payload-model'\nimport type {\n AllowedBlockPayload, HydratedTransaction, 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'\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')\n }\n return total\n}\n\nexport class HydratedTransactionWrapper<T extends HydratedTransaction> implements HydratedTransactionInstance<[T[0],\n T[1][number][]]> {\n data: T\n fees: TransactionFeesInstance\n\n protected payloadsCache: WithStorageMeta<Payload>[] = []\n\n private _signatureCache: SignatureInstance[] = []\n\n protected constructor(data: T) {\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(): WithStorageMeta<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<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 HydratedTransaction>(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): 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): 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[] = []\n errors.push(\n ...(await Promise.all(this._signatureCache.map(signature => signature.validate()))).flat(),\n ...(await validateTransaction(this.data)),\n )\n return errors\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 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":["BaseWrapper","config","value","provider","create","validateValue","length","Error","name","validateConfig","_config","_value","validate","hexToBigInt","AttoXL1","parseHexOrBigInt","value","AttoXL1","hexToBigInt","FeesWrapper","base","gasLimit","gasPrice","priority","validate","errors","baseValue","gasLimitValue","gasPriceValue","priorityValue","push","Error","PayloadBuilder","toArrayBuffer","BoundWitnessValidator","SignatureWrapper","address","hash","signature","validate","BoundWitnessValidator","validateSignature","toArrayBuffer","createSignatureWrappers","bw","signatures","hash","PayloadBuilder","dataHash","i","$signatures","length","push","SignatureWrapper","addresses","hexToBigInt","isDefined","validateTransaction","PayloadBuilder","isTransfer","XYO_ZERO_ADDRESS","transactionRequiredGas","tryExtractElevatedHashes","tryExtractElevatedHashesFromScript","sumTransfers","payload","total","i","Object","values","transfers","hexToBigInt","HydratedTransactionWrapper","data","fees","payloadsCache","_signatureCache","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","signatureCount","signatures","parse","transaction","validate","wrapper","parsed","errors","Error","join","elevatedPayload","index","at","gasRequired","transactionRequiredGas","reward","reduce","acc","isTransfer","XYO_ZERO_ADDRESS","signature","push","Promise","all","map","flat","validateTransaction","transactionPayloads","PayloadBuilder","addStorageMeta","createSignatureWrappers"]}
@@ -0,0 +1,4 @@
1
+ import type { BoundWitness } from '@xyo-network/boundwitness-model';
2
+ import type { SignatureInstance } from '@xyo-network/xl1-protocol-sdk';
3
+ export declare const createSignatureWrappers: (bw: BoundWitness) => Promise<SignatureInstance[]>;
4
+ //# sourceMappingURL=createSignatureWrappers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createSignatureWrappers.d.ts","sourceRoot":"","sources":["../../../src/lib/createSignatureWrappers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAEnE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAA;AAItE,eAAO,MAAM,uBAAuB,GAAU,IAAI,YAAY,KAAG,OAAO,CAAC,iBAAiB,EAAE,CAS3F,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './createSignatureWrappers.ts';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAA"}
@@ -0,0 +1,37 @@
1
+ import type { Hash } from '@xylabs/hex';
2
+ import type { Payload, Schema, WithHashStorageMeta, WithStorageMeta } from '@xyo-network/payload-model';
3
+ import type { AllowedBlockPayload, HydratedTransaction } from '@xyo-network/xl1-protocol';
4
+ import type { HydratedTransactionInstance, SignatureInstance, TransactionFeesInstance } from '@xyo-network/xl1-protocol-sdk';
5
+ export declare class HydratedTransactionWrapper<T extends HydratedTransaction> implements HydratedTransactionInstance<[
6
+ T[0],
7
+ T[1][number][]
8
+ ]> {
9
+ data: T;
10
+ fees: TransactionFeesInstance;
11
+ protected payloadsCache: WithStorageMeta<Payload>[];
12
+ private _signatureCache;
13
+ protected constructor(data: T);
14
+ get boundWitness(): T[0];
15
+ get elevatedPayloadCount(): number;
16
+ get elevatedPayloads(): WithStorageMeta<AllowedBlockPayload>[];
17
+ get externalPayloads(): Record<Hash, Schema | Payload>;
18
+ get from(): Lowercase<string>;
19
+ get payloadCount(): number;
20
+ get payloads(): WithHashStorageMeta<WithStorageMeta<T[1][number]>>[];
21
+ get privateExternalPayloads(): Record<Hash, Schema>;
22
+ get publicExternalPayloads(): Payload[];
23
+ get signatureCount(): number;
24
+ get signatures(): SignatureInstance[];
25
+ static parse<T extends HydratedTransaction>(transaction: T, validate?: boolean): Promise<HydratedTransactionInstance<[
26
+ T[0],
27
+ T[1][number][]
28
+ ]>>;
29
+ elevatedPayload(index: number): WithHashStorageMeta<AllowedBlockPayload & T[1][number]> | undefined;
30
+ gasRequired(): bigint;
31
+ payload(index: number): WithStorageMeta<Payload> | undefined;
32
+ reward(): bigint;
33
+ signature(index: number): SignatureInstance | undefined;
34
+ validate(): Promise<Error[]>;
35
+ protected parse(validate?: boolean): Promise<HydratedTransactionInstance<[WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]>>;
36
+ }
37
+ //# sourceMappingURL=HydratedTransaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HydratedTransaction.d.ts","sourceRoot":"","sources":["../../../src/transaction/HydratedTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAKvC,OAAO,KAAK,EACV,OAAO,EAAE,MAAM,EAAE,mBAAmB,EACpC,eAAe,EAChB,MAAM,4BAA4B,CAAA;AACnC,OAAO,KAAK,EACV,mBAAmB,EAAE,mBAAmB,EACzC,MAAM,2BAA2B,CAAA;AAElC,OAAO,KAAK,EACV,2BAA2B,EAAE,iBAAiB,EAC9C,uBAAuB,EACxB,MAAM,+BAA+B,CAAA;AAgBtC,qBAAa,0BAA0B,CAAC,CAAC,SAAS,mBAAmB,CAAE,YAAW,2BAA2B,CAAC;IAAC,CAAC,CAAC,CAAC,CAAC;IACjH,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE;CAAC,CAAC;IAChB,IAAI,EAAE,CAAC,CAAA;IACP,IAAI,EAAE,uBAAuB,CAAA;IAE7B,SAAS,CAAC,aAAa,EAAE,eAAe,CAAC,OAAO,CAAC,EAAE,CAAK;IAExD,OAAO,CAAC,eAAe,CAA0B;IAEjD,SAAS,aAAa,IAAI,EAAE,CAAC;IAO7B,IAAI,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,CAEvB;IAED,IAAI,oBAAoB,IAAI,MAAM,CAGjC;IAED,IAAI,gBAAgB,IAAI,eAAe,CAAC,mBAAmB,CAAC,EAAE,CAE7D;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,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAEnE;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,mBAAmB,EAAE,WAAW,EAAE,CAAC,EAAE,QAAQ,UAAQ,GAAG,OAAO,CAAC,2BAA2B,CAAC;QAAC,CAAC,CAAC,CAAC,CAAC;QAC5H,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE;KAAC,CAAC,CAAC;IAcnB,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,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;cASlB,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;CAWhJ"}
@@ -0,0 +1,2 @@
1
+ export * from './HydratedTransaction.ts';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/transaction/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAA"}
package/package.json ADDED
@@ -0,0 +1,65 @@
1
+ {
2
+ "$schema": "http://json.schemastore.org/package.json",
3
+ "name": "@xyo-network/xl1-wrappers",
4
+ "version": "1.7.15",
5
+ "description": "XYO Layer One SDK Wrappers",
6
+ "homepage": "https://xylabs.com",
7
+ "bugs": {
8
+ "url": "git+https://github.com/xylabs/xyo-chain/issues",
9
+ "email": "support@xylabs.com"
10
+ },
11
+ "repository": {
12
+ "type": "git",
13
+ "url": "git+https://github.com/xylabs/xyo-chain.git"
14
+ },
15
+ "license": "LGPL-3.0-only",
16
+ "author": {
17
+ "name": "XY Labs Development Team",
18
+ "email": "support@xylabs.com",
19
+ "url": "https://xylabs.com"
20
+ },
21
+ "sideEffects": false,
22
+ "type": "module",
23
+ "exports": {
24
+ ".": {
25
+ "types": "./dist/neutral/index.d.ts",
26
+ "source": "./src/index.ts",
27
+ "default": "./dist/neutral/index.mjs"
28
+ },
29
+ "./package.json": "./package.json"
30
+ },
31
+ "module": "./dist/neutral/index.mjs",
32
+ "source": "./src/index.ts",
33
+ "types": "./dist/neutral/index.d.ts",
34
+ "files": [
35
+ "dist",
36
+ "src"
37
+ ],
38
+ "dependencies": {
39
+ "@xylabs/arraybuffer": "^4.13.23",
40
+ "@xylabs/hex": "^4.13.23",
41
+ "@xylabs/promise": "^4.13.23",
42
+ "@xylabs/typeof": "^4.13.23",
43
+ "@xyo-network/boundwitness-model": "^4.1.7",
44
+ "@xyo-network/boundwitness-validator": "^4.1.7",
45
+ "@xyo-network/chain-validation": "^1.7.15",
46
+ "@xyo-network/payload-builder": "^4.1.7",
47
+ "@xyo-network/payload-model": "^4.1.7",
48
+ "@xyo-network/xl1-protocol": "^1.7.19",
49
+ "@xyo-network/xl1-protocol-sdk": "^1.7.15"
50
+ },
51
+ "devDependencies": {
52
+ "@types/node": "^24.1.0",
53
+ "@xylabs/ts-scripts-yarn3": "^7.0.1",
54
+ "@xylabs/tsconfig": "^7.0.1",
55
+ "knip": "^5.62.0",
56
+ "typescript": "^5.8.3"
57
+ },
58
+ "engines": {
59
+ "node": ">=22.3 <23"
60
+ },
61
+ "engineStrict": true,
62
+ "publishConfig": {
63
+ "access": "public"
64
+ }
65
+ }
package/src/Base.ts ADDED
@@ -0,0 +1,42 @@
1
+ import type { PromisableArray } from '@xylabs/promise'
2
+ import type { XyoConnectionProvider } from '@xyo-network/xl1-protocol'
3
+
4
+ export interface BaseWrapperConfig<T> {
5
+ provider: XyoConnectionProvider
6
+ value: T
7
+ }
8
+
9
+ export class BaseWrapper<T, C extends BaseWrapperConfig<T> = BaseWrapperConfig<T>> {
10
+ protected readonly config: Partial<C>
11
+ protected readonly value: T
12
+ protected constructor(value: T, config: Partial<C> = {}) {
13
+ this.config = config
14
+ this.value = value
15
+ }
16
+
17
+ get provider(): XyoConnectionProvider | undefined {
18
+ return this.config.provider
19
+ }
20
+
21
+ static async create<T, C extends BaseWrapperConfig<T> = BaseWrapperConfig<T>>(value: T, config: Partial<C> = {}) {
22
+ if ((await this.validateValue(value)).length > 0) {
23
+ throw new Error(`Invalid value for ${this.constructor.name}: ${value}`)
24
+ }
25
+ if ((await this.validateConfig(config)).length > 0) {
26
+ throw new Error(`Invalid config for ${this.constructor.name}: ${config}`)
27
+ }
28
+ return new this<T>(value, config)
29
+ }
30
+
31
+ static validateConfig(_config: unknown): PromisableArray<Error> {
32
+ return []
33
+ }
34
+
35
+ static validateValue(_value: unknown): PromisableArray<Error> {
36
+ return []
37
+ }
38
+
39
+ validate(): PromisableArray<Error> {
40
+ return []
41
+ }
42
+ }
package/src/Fees.ts ADDED
@@ -0,0 +1,55 @@
1
+ import type { Hex } from '@xylabs/hex'
2
+ import { hexToBigInt } from '@xylabs/hex'
3
+ import type { Promisable } from '@xylabs/promise'
4
+ import type { TransactionFeesBigInt, TransactionFeesHex } from '@xyo-network/xl1-protocol'
5
+ import { AttoXL1 } from '@xyo-network/xl1-protocol'
6
+ import type { TransactionFeesInstance } from '@xyo-network/xl1-protocol-sdk'
7
+
8
+ function parseHexOrBigInt(value: Hex | bigint) {
9
+ return AttoXL1((typeof value === 'bigint' ? value : hexToBigInt(value)))
10
+ }
11
+
12
+ export class FeesWrapper implements TransactionFeesInstance {
13
+ base: AttoXL1
14
+ gasLimit: AttoXL1
15
+ gasPrice: AttoXL1
16
+ priority: AttoXL1
17
+
18
+ constructor({
19
+ base, gasLimit, gasPrice, priority,
20
+ }: TransactionFeesHex | TransactionFeesBigInt) {
21
+ this.base = parseHexOrBigInt(base)
22
+ this.gasLimit = parseHexOrBigInt(gasLimit)
23
+ this.gasPrice = parseHexOrBigInt(gasPrice)
24
+ this.priority = parseHexOrBigInt(priority)
25
+ }
26
+
27
+ static validate({
28
+ base, gasLimit, gasPrice, priority,
29
+ }: TransactionFeesHex | TransactionFeesBigInt): Promisable<Error[]> {
30
+ const errors: Error[] = []
31
+ const baseValue = parseHexOrBigInt(base)
32
+ const gasLimitValue = parseHexOrBigInt(gasLimit)
33
+ const gasPriceValue = parseHexOrBigInt(gasPrice)
34
+ const priorityValue = parseHexOrBigInt(priority)
35
+ if (baseValue <= 0n) {
36
+ errors.push(new Error('Base fee cannot be negative or zero'))
37
+ }
38
+ if (gasLimitValue < 0n) {
39
+ errors.push(new Error('Gas limit cannot be negative'))
40
+ }
41
+ if (gasPriceValue < 0n) {
42
+ errors.push(new Error('Gas price cannot be negative'))
43
+ }
44
+ if (priorityValue < 0n) {
45
+ errors.push(new Error('Priority cannot be negative'))
46
+ }
47
+ return errors
48
+ }
49
+
50
+ async validate(): Promise<Error[]> {
51
+ return await FeesWrapper.validate({
52
+ base: this.base, gasLimit: this.gasLimit, gasPrice: this.gasPrice, priority: this.priority,
53
+ })
54
+ }
55
+ }
@@ -0,0 +1,26 @@
1
+ import { toArrayBuffer } from '@xylabs/arraybuffer'
2
+ import type {
3
+ Address, Hash, Hex,
4
+ } from '@xylabs/hex'
5
+ import { BoundWitnessValidator } from '@xyo-network/boundwitness-validator'
6
+ import type { SignatureInstance } from '@xyo-network/xl1-protocol-sdk'
7
+
8
+ export class SignatureWrapper implements SignatureInstance {
9
+ address: Address
10
+ hash: Hash
11
+ signature: Hex
12
+
13
+ constructor(signature: Hex, address: Address, hash: Hash) {
14
+ this.signature = signature
15
+ this.address = address
16
+ this.hash = hash
17
+ }
18
+
19
+ static async validate(hash: Hash, address: Address, signature: Hex): Promise<Error[]> {
20
+ return await BoundWitnessValidator.validateSignature(toArrayBuffer(hash), toArrayBuffer(address), toArrayBuffer(signature))
21
+ }
22
+
23
+ async validate(): Promise<Error[]> {
24
+ return await SignatureWrapper.validate(this.address, this.hash, this.signature)
25
+ }
26
+ }
package/src/index.ts ADDED
@@ -0,0 +1,5 @@
1
+ export * from './Base.ts'
2
+ export * from './Fees.ts'
3
+ export * from './lib/index.ts'
4
+ export * from './Signature.ts'
5
+ export * from './transaction/index.ts'
@@ -0,0 +1,16 @@
1
+ import type { BoundWitness } from '@xyo-network/boundwitness-model'
2
+ import { PayloadBuilder } from '@xyo-network/payload-builder'
3
+ import type { SignatureInstance } from '@xyo-network/xl1-protocol-sdk'
4
+
5
+ import { SignatureWrapper } from '../Signature.ts'
6
+
7
+ export const createSignatureWrappers = async (bw: BoundWitness): Promise<SignatureInstance[]> => {
8
+ const signatures: SignatureInstance[] = []
9
+ const hash = await PayloadBuilder.dataHash(bw)
10
+ for (let i = 0; i < bw.$signatures.length; i++) {
11
+ signatures.push(
12
+ new SignatureWrapper(bw.$signatures[i], bw.addresses[i], hash),
13
+ )
14
+ }
15
+ return signatures
16
+ }