@xyo-network/chain-wrappers 1.2.8 → 1.3.0

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.
@@ -1,21 +1,105 @@
1
1
  var __defProp = Object.defineProperty;
2
2
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
3
 
4
+ // src/lib/createSignatureWrappers.ts
5
+ import { PayloadBuilder } from "@xyo-network/payload-builder";
6
+
7
+ // src/Signature.ts
8
+ import { toArrayBuffer } from "@xylabs/arraybuffer";
9
+ import { BoundWitnessValidator } from "@xyo-network/boundwitness-validator";
10
+ var SignatureWrapper = class _SignatureWrapper {
11
+ static {
12
+ __name(this, "SignatureWrapper");
13
+ }
14
+ address;
15
+ hash;
16
+ signature;
17
+ constructor(signature, address, hash) {
18
+ this.signature = signature;
19
+ this.address = address;
20
+ this.hash = hash;
21
+ }
22
+ static async validate(hash, address, signature) {
23
+ return await BoundWitnessValidator.validateSignature(toArrayBuffer(hash), toArrayBuffer(address), toArrayBuffer(signature));
24
+ }
25
+ async validate() {
26
+ return await _SignatureWrapper.validate(this.address, this.hash, this.signature);
27
+ }
28
+ };
29
+
30
+ // src/lib/createSignatureWrappers.ts
31
+ var createSignatureWrappers = /* @__PURE__ */ __name(async (bw) => {
32
+ const signatures = [];
33
+ const hash = await PayloadBuilder.dataHash(bw);
34
+ for (let i = 0; i < bw.$signatures.length; i++) {
35
+ signatures.push(new SignatureWrapper(bw.$signatures[i], bw.addresses[i], hash));
36
+ }
37
+ return signatures;
38
+ }, "createSignatureWrappers");
39
+
4
40
  // src/block/HydratedBlock.ts
5
- import { hexToBigInt as hexToBigInt2 } from "@xylabs/hex";
41
+ import { hexToBigInt as hexToBigInt3 } from "@xylabs/hex";
6
42
  import { XYO_ZERO_ADDRESS as XYO_ZERO_ADDRESS2 } from "@xyo-network/chain-utils";
7
- import { PayloadBuilder as PayloadBuilder2 } from "@xyo-network/payload-builder";
43
+ import { PayloadBuilder as PayloadBuilder3 } from "@xyo-network/payload-builder";
8
44
  import { isSignedTransactionBoundWitnessWithStorageMeta, isTransfer as isTransfer2 } from "@xyo-network/xl1-model";
9
45
 
10
46
  // src/transaction/HydratedTransaction.ts
11
- import { hexToBigInt } from "@xylabs/hex";
47
+ import { hexToBigInt as hexToBigInt2 } from "@xylabs/hex";
12
48
  import { XYO_ZERO_ADDRESS } from "@xyo-network/chain-utils";
13
- import { PayloadBuilder } from "@xyo-network/payload-builder";
49
+ import { PayloadBuilder as PayloadBuilder2 } from "@xyo-network/payload-builder";
14
50
  import { isTransfer } from "@xyo-network/xl1-model";
51
+
52
+ // src/Fees.ts
53
+ import { hexToBigInt } from "@xylabs/hex";
54
+ var FeesWrapper = class _FeesWrapper {
55
+ static {
56
+ __name(this, "FeesWrapper");
57
+ }
58
+ base;
59
+ gasLimit;
60
+ gasPrice;
61
+ priority;
62
+ constructor({ base, gasLimit, gasPrice, priority }) {
63
+ this.base = typeof base === "bigint" ? base : hexToBigInt(base);
64
+ this.gasLimit = typeof gasLimit === "bigint" ? gasLimit : hexToBigInt(gasLimit);
65
+ this.gasPrice = typeof gasPrice === "bigint" ? gasPrice : hexToBigInt(gasPrice);
66
+ this.priority = typeof priority === "bigint" ? priority : hexToBigInt(priority);
67
+ }
68
+ static validate({ base, gasLimit, gasPrice, priority }) {
69
+ const errors = [];
70
+ const baseValue = typeof base === "bigint" ? base : hexToBigInt(base);
71
+ const gasLimitValue = typeof gasLimit === "bigint" ? gasLimit : hexToBigInt(gasLimit);
72
+ const gasPriceValue = typeof gasPrice === "bigint" ? gasPrice : hexToBigInt(gasPrice);
73
+ const priorityValue = typeof priority === "bigint" ? priority : hexToBigInt(priority);
74
+ if (baseValue <= 0n) {
75
+ errors.push(new Error("Base fee cannot be negative or zero"));
76
+ }
77
+ if (gasLimitValue < 0n) {
78
+ errors.push(new Error("Gas limit cannot be negative"));
79
+ }
80
+ if (gasPriceValue < 0n) {
81
+ errors.push(new Error("Gas price cannot be negative"));
82
+ }
83
+ if (priorityValue < 0n) {
84
+ errors.push(new Error("Priority cannot be negative"));
85
+ }
86
+ return errors;
87
+ }
88
+ async validate() {
89
+ return await _FeesWrapper.validate({
90
+ base: this.base,
91
+ gasLimit: this.gasLimit,
92
+ gasPrice: this.gasPrice,
93
+ priority: this.priority
94
+ });
95
+ }
96
+ };
97
+
98
+ // src/transaction/HydratedTransaction.ts
15
99
  var sumTransfers = /* @__PURE__ */ __name((payload) => {
16
100
  let total = 0n;
17
101
  for (let i of Object.values(payload.transfers)) {
18
- total += hexToBigInt(i);
102
+ total += hexToBigInt2(i);
19
103
  }
20
104
  return total;
21
105
  }, "sumTransfers");
@@ -24,9 +108,26 @@ var HydratedTransactionWrapper = class _HydratedTransactionWrapper {
24
108
  __name(this, "HydratedTransactionWrapper");
25
109
  }
26
110
  data;
111
+ fees;
27
112
  payloadsCache = [];
28
113
  constructor(transaction) {
29
114
  this.data = transaction;
115
+ this.fees = new FeesWrapper(this.boundWitness.fees);
116
+ }
117
+ get boundWitness() {
118
+ return this.data[0];
119
+ }
120
+ get elevatedPayloadCount() {
121
+ return 0;
122
+ }
123
+ get elevatedPayloads() {
124
+ throw new Error("Method not implemented.");
125
+ }
126
+ get payloadCount() {
127
+ return this.payloadsCache.length;
128
+ }
129
+ get payloads() {
130
+ throw new Error("Method not implemented.");
30
131
  }
31
132
  static async parse(transaction, validate = false) {
32
133
  const wrapper = new _HydratedTransactionWrapper(transaction);
@@ -39,33 +140,15 @@ var HydratedTransactionWrapper = class _HydratedTransactionWrapper {
39
140
  }
40
141
  return parsed;
41
142
  }
42
- boundWitness() {
43
- throw new Error("Method not implemented.");
44
- }
45
143
  elevatedPayload(_index) {
46
144
  throw new Error("Method not implemented.");
47
145
  }
48
- elevatedPayloadCount() {
49
- throw new Error("Method not implemented.");
50
- }
51
- elevatedPayloads() {
52
- throw new Error("Method not implemented.");
53
- }
54
- fees() {
55
- throw new Error("Method not implemented.");
56
- }
57
146
  gasRequired() {
58
147
  throw new Error("Method not implemented.");
59
148
  }
60
149
  payload(index) {
61
150
  throw new Error("Method not implemented.");
62
151
  }
63
- payloadCount() {
64
- return this.payloadsCache.length;
65
- }
66
- payloads() {
67
- throw new Error("Method not implemented.");
68
- }
69
152
  reward() {
70
153
  return this.payloadsCache.reduce((acc, payload) => acc + (isTransfer(payload) ? payload.from === XYO_ZERO_ADDRESS ? sumTransfers(payload) : 0n : 0n), 0n);
71
154
  }
@@ -73,7 +156,7 @@ var HydratedTransactionWrapper = class _HydratedTransactionWrapper {
73
156
  return [];
74
157
  }
75
158
  async parse(validate = false) {
76
- const transactionPayloads = await PayloadBuilder.addStorageMeta(this.data[1]);
159
+ const transactionPayloads = await PayloadBuilder2.addStorageMeta(this.data[1]);
77
160
  for (const payload of transactionPayloads) {
78
161
  this.payloadsCache.push(payload);
79
162
  }
@@ -89,20 +172,29 @@ var SignedHydratedTransactionWrapper = class _SignedHydratedTransactionWrapper e
89
172
  static {
90
173
  __name(this, "SignedHydratedTransactionWrapper");
91
174
  }
175
+ _signatureCache = [];
176
+ get signatureCount() {
177
+ return this._signatureCache.length;
178
+ }
179
+ get signatures() {
180
+ return [
181
+ ...this._signatureCache
182
+ ];
183
+ }
92
184
  static async parse(block, validate = false) {
93
185
  const wrapper = new _SignedHydratedTransactionWrapper(block);
94
186
  return await wrapper.parse(validate);
95
187
  }
96
188
  signature(index) {
97
- throw new Error("Method not implemented.");
98
- }
99
- signatureCount() {
100
- throw new Error("Method not implemented.");
189
+ return this._signatureCache[index];
101
190
  }
102
- signatures() {
103
- throw new Error("Method not implemented.");
191
+ async validate() {
192
+ const errors = [];
193
+ errors.push(...(await Promise.all(this._signatureCache.map((signature) => signature.validate()))).flat(), ...await super.validate());
194
+ return errors;
104
195
  }
105
196
  async parse(validate = false) {
197
+ this._signatureCache = await createSignatureWrappers(this.data[0]);
106
198
  await super.parse(validate);
107
199
  return this;
108
200
  }
@@ -112,7 +204,7 @@ var SignedHydratedTransactionWrapper = class _SignedHydratedTransactionWrapper e
112
204
  var sumTransfers2 = /* @__PURE__ */ __name((payload) => {
113
205
  let total = 0n;
114
206
  for (let i of Object.values(payload.transfers)) {
115
- total += hexToBigInt2(i);
207
+ total += hexToBigInt3(i);
116
208
  }
117
209
  return total;
118
210
  }, "sumTransfers");
@@ -126,42 +218,42 @@ var HydratedBlockWrapper = class _HydratedBlockWrapper {
126
218
  constructor(block) {
127
219
  this.data = block;
128
220
  }
129
- static async parse(block, validate = false) {
130
- const wrapper = new _HydratedBlockWrapper(block);
131
- return await wrapper.parse(validate);
132
- }
133
- boundWitness() {
221
+ get boundWitness() {
134
222
  throw new Error("Method not implemented.");
135
223
  }
136
- fees() {
224
+ get fees() {
137
225
  throw new Error("Method not implemented.");
138
226
  }
139
- payload(index) {
140
- return this.payloadsCache.at(index);
141
- }
142
- payloadCount() {
227
+ get payloadCount() {
143
228
  return this.payloadsCache.length;
144
229
  }
145
- payloads() {
230
+ get payloads() {
146
231
  return this.payloadsCache;
147
232
  }
148
- reward() {
233
+ get reward() {
149
234
  return this.payloadsCache.reduce((acc, payload) => acc + (isTransfer2(payload) ? payload.from === XYO_ZERO_ADDRESS2 ? sumTransfers2(payload) : 0n : 0n), 0n);
150
235
  }
151
- transaction(index) {
152
- return this.transactionsCache.at(index);
153
- }
154
- transactionCount() {
236
+ get transactionCount() {
155
237
  return this.transactionsCache.length;
156
238
  }
157
- transactions() {
239
+ get transactions() {
158
240
  return this.transactionsCache;
159
241
  }
242
+ static async parse(block, validate = false) {
243
+ const wrapper = new _HydratedBlockWrapper(block);
244
+ return await wrapper.parse(validate);
245
+ }
246
+ payload(index) {
247
+ return this.payloadsCache.at(index);
248
+ }
249
+ transaction(index) {
250
+ return this.transactionsCache.at(index);
251
+ }
160
252
  validate() {
161
253
  return [];
162
254
  }
163
255
  async parse(validate = false) {
164
- const blockPayloads = await PayloadBuilder2.addStorageMeta(this.data[1]);
256
+ const blockPayloads = await PayloadBuilder3.addStorageMeta(this.data[1]);
165
257
  for (const payload of blockPayloads) {
166
258
  if (isSignedTransactionBoundWitnessWithStorageMeta(payload)) {
167
259
  const hydratedTransaction = [
@@ -185,43 +277,35 @@ var SignedHydratedBlockWrapper = class _SignedHydratedBlockWrapper extends Hydra
185
277
  static {
186
278
  __name(this, "SignedHydratedBlockWrapper");
187
279
  }
280
+ _signatureCache = [];
281
+ get signatureCount() {
282
+ return this._signatureCache.length;
283
+ }
284
+ get signatures() {
285
+ return [
286
+ ...this._signatureCache
287
+ ];
288
+ }
188
289
  static async parse(block, validate = false) {
189
290
  const wrapper = new _SignedHydratedBlockWrapper(block);
190
291
  return await wrapper.parse(validate);
191
292
  }
192
293
  signature(index) {
193
- throw new Error("Method not implemented.");
294
+ return this._signatureCache[index];
194
295
  }
195
- signatureCount() {
196
- throw new Error("Method not implemented.");
197
- }
198
- signatures() {
199
- throw new Error("Method not implemented.");
296
+ async validate() {
297
+ const errors = [];
298
+ errors.push(...(await Promise.all(this._signatureCache.map((signature) => signature.validate()))).flat(), ...await super.validate());
299
+ return errors;
200
300
  }
201
301
  async parse(validate = false) {
302
+ this._signatureCache = await createSignatureWrappers(this.data[0]);
202
303
  await super.parse(validate);
203
304
  return this;
204
305
  }
205
306
  };
206
-
207
- // src/Signature.ts
208
- var SignatureWrapper = class {
209
- static {
210
- __name(this, "SignatureWrapper");
211
- }
212
- address;
213
- hash;
214
- signature;
215
- constructor(signature, address, hash) {
216
- this.signature = signature;
217
- this.address = address;
218
- this.hash = hash;
219
- }
220
- validate() {
221
- throw new Error("Method not implemented.");
222
- }
223
- };
224
307
  export {
308
+ FeesWrapper,
225
309
  SignatureWrapper,
226
310
  SignedHydratedBlockWrapper
227
311
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/block/HydratedBlock.ts","../../src/transaction/HydratedTransaction.ts","../../src/transaction/SignedHydratedTransaction.ts","../../src/block/SignedHydratedBlock.ts","../../src/Signature.ts"],"sourcesContent":["import { hexToBigInt } from '@xylabs/hex'\nimport type { Promisable } from '@xylabs/promise'\nimport { XYO_ZERO_ADDRESS } from '@xyo-network/chain-utils'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport type {\n FeesInstance, HydratedBlock, SignedHydratedTransaction, SignedHydratedTransactionInstance,\n Transfer,\n} from '@xyo-network/xl1-model'\nimport {\n isSignedTransactionBoundWitnessWithStorageMeta,\n isTransfer,\n} from '@xyo-network/xl1-model'\n\nimport type { HydratedBlockInstance } from '../../../model/dist/types/instances/HydratedBlock.js'\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)\n }\n return total\n}\n\nexport class HydratedBlockWrapper<T extends HydratedBlock> implements HydratedBlockInstance<T> {\n data: T\n protected payloadsCache: WithStorageMeta<T[1][number]>[] = []\n protected transactionsCache: SignedHydratedTransactionInstance[] = []\n\n protected constructor(block: T) {\n this.data = block\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 boundWitness(): T[0] {\n throw new Error('Method not implemented.')\n }\n\n fees(): FeesInstance {\n throw new Error('Method not implemented.')\n }\n\n payload(index: number): T[1][number] | undefined {\n return this.payloadsCache.at(index)\n }\n\n payloadCount(): number {\n return this.payloadsCache.length\n }\n\n payloads(): T[1][number][] {\n return this.payloadsCache\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 transaction(index: number): SignedHydratedTransactionInstance | undefined {\n return this.transactionsCache.at(index)\n }\n\n transactionCount(): number {\n return this.transactionsCache.length\n }\n\n transactions(): SignedHydratedTransactionInstance[] {\n return this.transactionsCache\n }\n\n validate(): Promisable<Error[]> {\n return []\n }\n\n protected async parse(validate = false): Promise<HydratedBlockInstance<T>> {\n const blockPayloads = await PayloadBuilder.addStorageMeta(this.data[1])\n for (const payload of blockPayloads) {\n if (isSignedTransactionBoundWitnessWithStorageMeta(payload)) {\n const hydratedTransaction: SignedHydratedTransaction = [payload, blockPayloads.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.payloadsCache.push(payload)\n }\n }\n if (validate) {\n await this.validate()\n }\n return this\n }\n}\n","import { hexToBigInt } from '@xylabs/hex'\nimport type { Promisable } from '@xylabs/promise'\nimport { XYO_ZERO_ADDRESS } from '@xyo-network/chain-utils'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload, WithHashStorageMeta } from '@xyo-network/payload-model'\nimport type {\n AllowedBlockPayload,\n FeesInstance,\n HydratedTransaction,\n HydratedTransactionInstance,\n TransactionBoundWitness,\n Transfer,\n} from '@xyo-network/xl1-model'\nimport { isTransfer } from '@xyo-network/xl1-model'\n\nconst sumTransfers = (payload: Transfer) => {\n let total = 0n\n for (let i of Object.values(payload.transfers)) {\n total += hexToBigInt(i)\n }\n return total\n}\n\nexport class HydratedTransactionWrapper<T extends HydratedTransaction> implements HydratedTransactionInstance<T> {\n data: T\n\n protected payloadsCache: WithHashStorageMeta<Payload>[] = []\n\n protected constructor(transaction: T) {\n this.data = transaction\n }\n\n static async parse(transaction: HydratedTransaction, validate = false): Promise<HydratedTransactionInstance> {\n const wrapper = new HydratedTransactionWrapper(transaction)\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 boundWitness(): TransactionBoundWitness {\n throw new Error('Method not implemented.')\n }\n\n elevatedPayload(_index: number): AllowedBlockPayload | undefined {\n throw new Error('Method not implemented.')\n }\n\n elevatedPayloadCount(): number {\n throw new Error('Method not implemented.')\n }\n\n elevatedPayloads(): AllowedBlockPayload[] {\n throw new Error('Method not implemented.')\n }\n\n fees(): FeesInstance {\n throw new Error('Method not implemented.')\n }\n\n gasRequired(): bigint {\n throw new Error('Method not implemented.')\n }\n\n payload(index: number): Payload | undefined {\n throw new Error('Method not implemented.')\n // return this.payloadsCache.at(index)\n }\n\n payloadCount(): number {\n return this.payloadsCache.length\n }\n\n payloads(): Payload[] {\n throw new Error('Method not implemented.')\n // return this.payloadsCache\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 []\n }\n\n protected async parse(validate = false): Promise<HydratedTransactionInstance> {\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 {\n SignatureInstance,\n SignedHydratedTransaction,\n SignedHydratedTransactionInstance,\n} from '@xyo-network/xl1-model'\n\nimport { HydratedTransactionWrapper } from './HydratedTransaction.ts'\n\nexport class SignedHydratedTransactionWrapper<T extends SignedHydratedTransaction> extends HydratedTransactionWrapper<T>\n implements SignedHydratedTransactionInstance<T> {\n static override async parse<T extends SignedHydratedTransaction>(block: T, validate = false): Promise<SignedHydratedTransactionInstance<T>> {\n const wrapper = new SignedHydratedTransactionWrapper<T>(block)\n return await wrapper.parse(validate)\n }\n\n signature(index: number): SignatureInstance | undefined {\n throw new Error('Method not implemented.')\n }\n\n signatureCount(): number {\n throw new Error('Method not implemented.')\n }\n\n signatures(): SignatureInstance[] {\n throw new Error('Method not implemented.')\n }\n\n protected override async parse(validate = false): Promise<SignedHydratedTransactionInstance<T>> {\n await super.parse(validate)\n return this\n }\n}\n","import type {\n SignatureInstance, SignedHydratedBlock,\n SignedHydratedBlockInstance,\n} from '@xyo-network/xl1-model'\n\nimport { HydratedBlockWrapper } from './HydratedBlock.ts'\n\nexport class SignedHydratedBlockWrapper<T extends SignedHydratedBlock> extends HydratedBlockWrapper<T> implements SignedHydratedBlockInstance<T> {\n static override async parse<T extends SignedHydratedBlock>(block: T, validate = false): Promise<SignedHydratedBlockInstance<T>> {\n const wrapper = new SignedHydratedBlockWrapper<T>(block)\n return await wrapper.parse(validate)\n }\n\n signature(index: number): SignatureInstance | undefined {\n throw new Error('Method not implemented.')\n }\n\n signatureCount(): number {\n throw new Error('Method not implemented.')\n }\n\n signatures(): SignatureInstance[] {\n throw new Error('Method not implemented.')\n }\n\n protected override async parse(validate = false): Promise<SignedHydratedBlockInstance<T>> {\n await super.parse(validate)\n return this\n }\n}\n","import type {\n Address, Hash, Hex,\n} from '@xylabs/hex'\nimport type { Promisable } from '@xylabs/promise'\nimport type { SignatureInstance } from '@xyo-network/xl1-model'\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 validate(): Promisable<Error[]> {\n throw new Error('Method not implemented.')\n }\n}\n"],"mappings":"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","names":["hexToBigInt","XYO_ZERO_ADDRESS","PayloadBuilder","isSignedTransactionBoundWitnessWithStorageMeta","isTransfer","hexToBigInt","XYO_ZERO_ADDRESS","PayloadBuilder","isTransfer","sumTransfers","payload","total","i","Object","values","transfers","hexToBigInt","HydratedTransactionWrapper","data","payloadsCache","transaction","parse","validate","wrapper","parsed","errors","length","Error","join","boundWitness","elevatedPayload","_index","elevatedPayloadCount","elevatedPayloads","fees","gasRequired","index","payloadCount","payloads","reward","reduce","acc","isTransfer","from","XYO_ZERO_ADDRESS","transactionPayloads","PayloadBuilder","addStorageMeta","push","SignedHydratedTransactionWrapper","HydratedTransactionWrapper","parse","block","validate","wrapper","signature","index","Error","signatureCount","signatures","sumTransfers","payload","total","i","Object","values","transfers","hexToBigInt","HydratedBlockWrapper","data","payloadsCache","transactionsCache","block","parse","validate","wrapper","boundWitness","Error","fees","index","at","payloadCount","length","payloads","reward","reduce","acc","isTransfer","from","XYO_ZERO_ADDRESS","transaction","transactionCount","transactions","blockPayloads","PayloadBuilder","addStorageMeta","isSignedTransactionBoundWitnessWithStorageMeta","hydratedTransaction","filter","p","payload_hashes","includes","_hash","_dataHash","push","SignedHydratedTransactionWrapper","SignedHydratedBlockWrapper","HydratedBlockWrapper","parse","block","validate","wrapper","signature","index","Error","signatureCount","signatures","SignatureWrapper","address","hash","signature","constructor","validate","Error"]}
1
+ {"version":3,"sources":["../../src/lib/createSignatureWrappers.ts","../../src/Signature.ts","../../src/block/HydratedBlock.ts","../../src/transaction/HydratedTransaction.ts","../../src/Fees.ts","../../src/transaction/SignedHydratedTransaction.ts","../../src/block/SignedHydratedBlock.ts"],"sourcesContent":["import type { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { SignatureInstance } from '@xyo-network/xl1-model'\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-model'\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 { hexToBigInt } from '@xylabs/hex'\nimport type { Promisable } from '@xylabs/promise'\nimport { XYO_ZERO_ADDRESS } from '@xyo-network/chain-utils'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport type {\n HydratedBlock, HydratedBlockInstance, SignedHydratedTransaction, SignedHydratedTransactionInstance,\n TransactionFeesInstance, Transfer,\n} from '@xyo-network/xl1-model'\nimport {\n isSignedTransactionBoundWitnessWithStorageMeta,\n isTransfer,\n} from '@xyo-network/xl1-model'\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)\n }\n return total\n}\n\nexport class HydratedBlockWrapper<T extends HydratedBlock> implements HydratedBlockInstance<T> {\n data: T\n protected payloadsCache: WithStorageMeta<T[1][number]>[] = []\n protected transactionsCache: SignedHydratedTransactionInstance[] = []\n\n protected constructor(block: T) {\n this.data = block\n }\n\n get boundWitness(): T[0] {\n throw new Error('Method not implemented.')\n }\n\n get fees(): TransactionFeesInstance {\n throw new Error('Method not implemented.')\n }\n\n get payloadCount(): number {\n return this.payloadsCache.length\n }\n\n get payloads(): T[1][number][] {\n return this.payloadsCache\n }\n\n get 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 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): T[1][number] | undefined {\n return this.payloadsCache.at(index)\n }\n\n transaction(index: number): SignedHydratedTransactionInstance | undefined {\n return this.transactionsCache.at(index)\n }\n\n validate(): Promisable<Error[]> {\n return []\n }\n\n protected async parse(validate = false): Promise<HydratedBlockInstance<T>> {\n const blockPayloads = await PayloadBuilder.addStorageMeta(this.data[1])\n for (const payload of blockPayloads) {\n if (isSignedTransactionBoundWitnessWithStorageMeta(payload)) {\n const hydratedTransaction: SignedHydratedTransaction = [payload, blockPayloads.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.payloadsCache.push(payload)\n }\n }\n if (validate) {\n await this.validate()\n }\n return this\n }\n}\n","import { hexToBigInt } from '@xylabs/hex'\nimport type { Promisable } from '@xylabs/promise'\nimport { XYO_ZERO_ADDRESS } from '@xyo-network/chain-utils'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload, WithHashStorageMeta } from '@xyo-network/payload-model'\nimport type {\n AllowedBlockPayload,\n HydratedTransaction,\n HydratedTransactionInstance,\n TransactionFeesInstance,\n Transfer,\n} from '@xyo-network/xl1-model'\nimport { isTransfer } from '@xyo-network/xl1-model'\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)\n }\n return total\n}\n\nexport class HydratedTransactionWrapper<T extends HydratedTransaction> implements HydratedTransactionInstance<T> {\n data: T\n fees: TransactionFeesInstance\n\n protected payloadsCache: WithHashStorageMeta<Payload>[] = []\n\n protected constructor(transaction: T) {\n this.data = transaction\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 return 0\n }\n\n get elevatedPayloads(): AllowedBlockPayload[] {\n throw new Error('Method not implemented.')\n }\n\n get payloadCount(): number {\n return this.payloadsCache.length\n }\n\n get payloads(): Payload[] {\n throw new Error('Method not implemented.')\n // return this.payloadsCache\n }\n\n static async parse<T extends HydratedTransaction>(transaction: T, validate = false): Promise<HydratedTransactionInstance<T>> {\n const wrapper = new HydratedTransactionWrapper<T>(transaction)\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): AllowedBlockPayload | undefined {\n throw new Error('Method not implemented.')\n }\n\n gasRequired(): bigint {\n throw new Error('Method not implemented.')\n }\n\n payload(index: number): Payload | undefined {\n throw new Error('Method not implemented.')\n // return this.payloadsCache.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 []\n }\n\n protected async parse(validate = false): Promise<HydratedTransactionInstance<T>> {\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 { hexToBigInt } from '@xylabs/hex'\nimport type { Promisable } from '@xylabs/promise'\nimport type {\n TransactionFeesBigInt, TransactionFeesHex,\n TransactionFeesInstance,\n} from '@xyo-network/xl1-model'\n\nexport class FeesWrapper implements TransactionFeesInstance {\n base: bigint\n gasLimit: bigint\n gasPrice: bigint\n priority: bigint\n\n constructor({\n base, gasLimit, gasPrice, priority,\n }: TransactionFeesHex | TransactionFeesBigInt) {\n this.base = typeof base === 'bigint' ? base : hexToBigInt(base)\n this.gasLimit = typeof gasLimit === 'bigint' ? gasLimit : hexToBigInt(gasLimit)\n this.gasPrice = typeof gasPrice === 'bigint' ? gasPrice : hexToBigInt(gasPrice)\n this.priority = typeof priority === 'bigint' ? priority : hexToBigInt(priority)\n }\n\n static validate({\n base, gasLimit, gasPrice, priority,\n }: TransactionFeesHex | TransactionFeesBigInt): Promisable<Error[]> {\n const errors: Error[] = []\n const baseValue = typeof base === 'bigint' ? base : hexToBigInt(base)\n const gasLimitValue = typeof gasLimit === 'bigint' ? gasLimit : hexToBigInt(gasLimit)\n const gasPriceValue = typeof gasPrice === 'bigint' ? gasPrice : hexToBigInt(gasPrice)\n const priorityValue = typeof priority === 'bigint' ? priority : hexToBigInt(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 { Promisable } from '@xylabs/promise'\nimport type {\n SignatureInstance,\n SignedHydratedTransaction,\n SignedHydratedTransactionInstance,\n} from '@xyo-network/xl1-model'\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<T> {\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>(block: T, validate = false): Promise<SignedHydratedTransactionInstance<T>> {\n const wrapper = new SignedHydratedTransactionWrapper<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<SignedHydratedTransactionInstance<T>> {\n this._signatureCache = await createSignatureWrappers(this.data[0])\n await super.parse(validate)\n return this\n }\n}\n","import type {\n SignatureInstance, SignedHydratedBlock,\n SignedHydratedBlockInstance,\n} from '@xyo-network/xl1-model'\n\nimport { createSignatureWrappers } from '../lib/createSignatureWrappers.ts'\nimport { HydratedBlockWrapper } from './HydratedBlock.ts'\n\nexport class SignedHydratedBlockWrapper<T extends SignedHydratedBlock> extends HydratedBlockWrapper<T> implements SignedHydratedBlockInstance<T> {\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): Promise<SignedHydratedBlockInstance<T>> {\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<T>> {\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":["PayloadBuilder","toArrayBuffer","BoundWitnessValidator","SignatureWrapper","address","hash","signature","constructor","validate","BoundWitnessValidator","validateSignature","toArrayBuffer","createSignatureWrappers","bw","signatures","hash","PayloadBuilder","dataHash","i","$signatures","length","push","SignatureWrapper","addresses","hexToBigInt","XYO_ZERO_ADDRESS","PayloadBuilder","isSignedTransactionBoundWitnessWithStorageMeta","isTransfer","hexToBigInt","XYO_ZERO_ADDRESS","PayloadBuilder","isTransfer","hexToBigInt","FeesWrapper","base","gasLimit","gasPrice","priority","constructor","hexToBigInt","validate","errors","baseValue","gasLimitValue","gasPriceValue","priorityValue","push","Error","sumTransfers","payload","total","i","Object","values","transfers","hexToBigInt","HydratedTransactionWrapper","data","fees","payloadsCache","transaction","FeesWrapper","boundWitness","elevatedPayloadCount","elevatedPayloads","Error","payloadCount","length","payloads","parse","validate","wrapper","parsed","errors","join","elevatedPayload","_index","gasRequired","index","reward","reduce","acc","isTransfer","from","XYO_ZERO_ADDRESS","transactionPayloads","PayloadBuilder","addStorageMeta","push","SignedHydratedTransactionWrapper","HydratedTransactionWrapper","_signatureCache","signatureCount","length","signatures","parse","block","validate","wrapper","signature","index","errors","push","Promise","all","map","flat","createSignatureWrappers","data","sumTransfers","payload","total","i","Object","values","transfers","hexToBigInt","HydratedBlockWrapper","data","payloadsCache","transactionsCache","block","boundWitness","Error","fees","payloadCount","length","payloads","reward","reduce","acc","isTransfer","from","XYO_ZERO_ADDRESS","transactionCount","transactions","parse","validate","wrapper","index","at","transaction","blockPayloads","PayloadBuilder","addStorageMeta","isSignedTransactionBoundWitnessWithStorageMeta","hydratedTransaction","filter","p","payload_hashes","includes","_hash","_dataHash","push","SignedHydratedTransactionWrapper","SignedHydratedBlockWrapper","HydratedBlockWrapper","_signatureCache","signatureCount","length","signatures","parse","block","validate","wrapper","signature","index","errors","push","Promise","all","map","flat","createSignatureWrappers","data"]}
@@ -0,0 +1,12 @@
1
+ import type { Promisable } from '@xylabs/promise';
2
+ import type { TransactionFeesBigInt, TransactionFeesHex, TransactionFeesInstance } from '@xyo-network/xl1-model';
3
+ export declare class FeesWrapper implements TransactionFeesInstance {
4
+ base: bigint;
5
+ gasLimit: bigint;
6
+ gasPrice: bigint;
7
+ priority: bigint;
8
+ constructor({ base, gasLimit, gasPrice, priority, }: TransactionFeesHex | TransactionFeesBigInt);
9
+ static validate({ base, gasLimit, gasPrice, priority, }: TransactionFeesHex | TransactionFeesBigInt): Promisable<Error[]>;
10
+ validate(): Promise<Error[]>;
11
+ }
12
+ //# sourceMappingURL=Fees.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Fees.d.ts","sourceRoot":"","sources":["../../src/Fees.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,EACV,qBAAqB,EAAE,kBAAkB,EACzC,uBAAuB,EACxB,MAAM,wBAAwB,CAAA;AAE/B,qBAAa,WAAY,YAAW,uBAAuB;IACzD,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;gBAEJ,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"}
@@ -1,11 +1,11 @@
1
1
  import type { Address, Hash, Hex } from '@xylabs/hex';
2
- import type { Promisable } from '@xylabs/promise';
3
2
  import type { SignatureInstance } from '@xyo-network/xl1-model';
4
3
  export declare class SignatureWrapper implements SignatureInstance {
5
4
  address: Address;
6
5
  hash: Hash;
7
6
  signature: Hex;
8
7
  constructor(signature: Hex, address: Address, hash: Hash);
9
- validate(): Promisable<Error[]>;
8
+ static validate(hash: Hash, address: Address, signature: Hex): Promise<Error[]>;
9
+ validate(): Promise<Error[]>;
10
10
  }
11
11
  //# sourceMappingURL=Signature.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Signature.d.ts","sourceRoot":"","sources":["../../src/Signature.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EAAE,IAAI,EAAE,GAAG,EACnB,MAAM,aAAa,CAAA;AACpB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAE/D,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;IAMxD,QAAQ,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;CAGhC"}
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,wBAAwB,CAAA;AAE/D,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"}
@@ -1,22 +1,21 @@
1
1
  import type { Promisable } from '@xylabs/promise';
2
2
  import type { WithStorageMeta } from '@xyo-network/payload-model';
3
- import type { FeesInstance, HydratedBlock, SignedHydratedTransactionInstance } from '@xyo-network/xl1-model';
4
- import type { HydratedBlockInstance } from '../../../model/dist/types/instances/HydratedBlock.js';
3
+ import type { HydratedBlock, HydratedBlockInstance, SignedHydratedTransactionInstance, TransactionFeesInstance } from '@xyo-network/xl1-model';
5
4
  export declare class HydratedBlockWrapper<T extends HydratedBlock> implements HydratedBlockInstance<T> {
6
5
  data: T;
7
6
  protected payloadsCache: WithStorageMeta<T[1][number]>[];
8
7
  protected transactionsCache: SignedHydratedTransactionInstance[];
9
8
  protected constructor(block: T);
9
+ get boundWitness(): T[0];
10
+ get fees(): TransactionFeesInstance;
11
+ get payloadCount(): number;
12
+ get payloads(): T[1][number][];
13
+ get reward(): bigint;
14
+ get transactionCount(): number;
15
+ get transactions(): SignedHydratedTransactionInstance[];
10
16
  static parse<T extends HydratedBlock>(block: T, validate?: boolean): Promise<HydratedBlockInstance>;
11
- boundWitness(): T[0];
12
- fees(): FeesInstance;
13
17
  payload(index: number): T[1][number] | undefined;
14
- payloadCount(): number;
15
- payloads(): T[1][number][];
16
- reward(): bigint;
17
18
  transaction(index: number): SignedHydratedTransactionInstance | undefined;
18
- transactionCount(): number;
19
- transactions(): SignedHydratedTransactionInstance[];
20
19
  validate(): Promisable<Error[]>;
21
20
  protected parse(validate?: boolean): Promise<HydratedBlockInstance<T>>;
22
21
  }
@@ -1 +1 @@
1
- {"version":3,"file":"HydratedBlock.d.ts","sourceRoot":"","sources":["../../../src/block/HydratedBlock.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAGjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AACjE,OAAO,KAAK,EACV,YAAY,EAAE,aAAa,EAA6B,iCAAiC,EAE1F,MAAM,wBAAwB,CAAA;AAM/B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sDAAsD,CAAA;AAWjG,qBAAa,oBAAoB,CAAC,CAAC,SAAS,aAAa,CAAE,YAAW,qBAAqB,CAAC,CAAC,CAAC;IAC5F,IAAI,EAAE,CAAC,CAAA;IACP,SAAS,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAK;IAC7D,SAAS,CAAC,iBAAiB,EAAE,iCAAiC,EAAE,CAAK;IAErE,SAAS,aAAa,KAAK,EAAE,CAAC;WAIjB,KAAK,CAAC,CAAC,SAAS,aAAa,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,UAAQ,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAKvG,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC;IAIpB,IAAI,IAAI,YAAY;IAIpB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,SAAS;IAIhD,YAAY,IAAI,MAAM;IAItB,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE;IAI1B,MAAM,IAAI,MAAM;IAShB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,iCAAiC,GAAG,SAAS;IAIzE,gBAAgB,IAAI,MAAM;IAI1B,YAAY,IAAI,iCAAiC,EAAE;IAInD,QAAQ,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;cAIf,KAAK,CAAC,QAAQ,UAAQ,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;CAiB3E"}
1
+ {"version":3,"file":"HydratedBlock.d.ts","sourceRoot":"","sources":["../../../src/block/HydratedBlock.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAGjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AACjE,OAAO,KAAK,EACV,aAAa,EAAE,qBAAqB,EAA6B,iCAAiC,EAClG,uBAAuB,EACxB,MAAM,wBAAwB,CAAA;AAgB/B,qBAAa,oBAAoB,CAAC,CAAC,SAAS,aAAa,CAAE,YAAW,qBAAqB,CAAC,CAAC,CAAC;IAC5F,IAAI,EAAE,CAAC,CAAA;IACP,SAAS,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAK;IAC7D,SAAS,CAAC,iBAAiB,EAAE,iCAAiC,EAAE,CAAK;IAErE,SAAS,aAAa,KAAK,EAAE,CAAC;IAI9B,IAAI,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,CAEvB;IAED,IAAI,IAAI,IAAI,uBAAuB,CAElC;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,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,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,SAAS;IAIhD,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,iCAAiC,GAAG,SAAS;IAIzE,QAAQ,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;cAIf,KAAK,CAAC,QAAQ,UAAQ,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;CAiB3E"}
@@ -1,10 +1,12 @@
1
1
  import type { SignatureInstance, SignedHydratedBlock, SignedHydratedBlockInstance } from '@xyo-network/xl1-model';
2
2
  import { HydratedBlockWrapper } from './HydratedBlock.ts';
3
3
  export declare class SignedHydratedBlockWrapper<T extends SignedHydratedBlock> extends HydratedBlockWrapper<T> implements SignedHydratedBlockInstance<T> {
4
+ private _signatureCache;
5
+ get signatureCount(): number;
6
+ get signatures(): SignatureInstance[];
4
7
  static parse<T extends SignedHydratedBlock>(block: T, validate?: boolean): Promise<SignedHydratedBlockInstance<T>>;
5
8
  signature(index: number): SignatureInstance | undefined;
6
- signatureCount(): number;
7
- signatures(): SignatureInstance[];
9
+ validate(): Promise<Error[]>;
8
10
  protected parse(validate?: boolean): Promise<SignedHydratedBlockInstance<T>>;
9
11
  }
10
12
  //# sourceMappingURL=SignedHydratedBlock.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SignedHydratedBlock.d.ts","sourceRoot":"","sources":["../../../src/block/SignedHydratedBlock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EAAE,mBAAmB,EACtC,2BAA2B,EAC5B,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AAEzD,qBAAa,0BAA0B,CAAC,CAAC,SAAS,mBAAmB,CAAE,SAAQ,oBAAoB,CAAC,CAAC,CAAE,YAAW,2BAA2B,CAAC,CAAC,CAAC;WACxH,KAAK,CAAC,CAAC,SAAS,mBAAmB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,UAAQ,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC;IAK/H,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAIvD,cAAc,IAAI,MAAM;IAIxB,UAAU,IAAI,iBAAiB,EAAE;cAIR,KAAK,CAAC,QAAQ,UAAQ,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC;CAI1F"}
1
+ {"version":3,"file":"SignedHydratedBlock.d.ts","sourceRoot":"","sources":["../../../src/block/SignedHydratedBlock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EAAE,mBAAmB,EACtC,2BAA2B,EAC5B,MAAM,wBAAwB,CAAA;AAG/B,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AAEzD,qBAAa,0BAA0B,CAAC,CAAC,SAAS,mBAAmB,CAAE,SAAQ,oBAAoB,CAAC,CAAC,CAAE,YAAW,2BAA2B,CAAC,CAAC,CAAC;IAC9I,OAAO,CAAC,eAAe,CAA0B;IAEjD,IAAI,cAAc,IAAI,MAAM,CAE3B;IAED,IAAI,UAAU,IAAI,iBAAiB,EAAE,CAEpC;WAEqB,KAAK,CAAC,CAAC,SAAS,mBAAmB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,UAAQ,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC;IAK/H,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAIxC,QAAQ,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;cASlB,KAAK,CAAC,QAAQ,UAAQ,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC;CAK1F"}
@@ -1,3 +1,4 @@
1
1
  export * from './block/index.ts';
2
+ export * from './Fees.ts';
2
3
  export * from './Signature.ts';
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,WAAW,CAAA;AACzB,cAAc,gBAAgB,CAAA"}
@@ -0,0 +1,4 @@
1
+ import type { BoundWitness } from '@xyo-network/boundwitness-model';
2
+ import type { SignatureInstance } from '@xyo-network/xl1-model';
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,wBAAwB,CAAA;AAI/D,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"}
@@ -1,22 +1,22 @@
1
1
  import type { Promisable } from '@xylabs/promise';
2
2
  import type { Payload, WithHashStorageMeta } from '@xyo-network/payload-model';
3
- import type { AllowedBlockPayload, FeesInstance, HydratedTransaction, HydratedTransactionInstance, TransactionBoundWitness } from '@xyo-network/xl1-model';
3
+ import type { AllowedBlockPayload, HydratedTransaction, HydratedTransactionInstance, TransactionFeesInstance } from '@xyo-network/xl1-model';
4
4
  export declare class HydratedTransactionWrapper<T extends HydratedTransaction> implements HydratedTransactionInstance<T> {
5
5
  data: T;
6
+ fees: TransactionFeesInstance;
6
7
  protected payloadsCache: WithHashStorageMeta<Payload>[];
7
8
  protected constructor(transaction: T);
8
- static parse(transaction: HydratedTransaction, validate?: boolean): Promise<HydratedTransactionInstance>;
9
- boundWitness(): TransactionBoundWitness;
9
+ get boundWitness(): T[0];
10
+ get elevatedPayloadCount(): number;
11
+ get elevatedPayloads(): AllowedBlockPayload[];
12
+ get payloadCount(): number;
13
+ get payloads(): Payload[];
14
+ static parse<T extends HydratedTransaction>(transaction: T, validate?: boolean): Promise<HydratedTransactionInstance<T>>;
10
15
  elevatedPayload(_index: number): AllowedBlockPayload | undefined;
11
- elevatedPayloadCount(): number;
12
- elevatedPayloads(): AllowedBlockPayload[];
13
- fees(): FeesInstance;
14
16
  gasRequired(): bigint;
15
17
  payload(index: number): Payload | undefined;
16
- payloadCount(): number;
17
- payloads(): Payload[];
18
18
  reward(): bigint;
19
19
  validate(): Promisable<Error[]>;
20
- protected parse(validate?: boolean): Promise<HydratedTransactionInstance>;
20
+ protected parse(validate?: boolean): Promise<HydratedTransactionInstance<T>>;
21
21
  }
22
22
  //# sourceMappingURL=HydratedTransaction.d.ts.map
@@ -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;AAGjD,OAAO,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAC9E,OAAO,KAAK,EACV,mBAAmB,EACnB,YAAY,EACZ,mBAAmB,EACnB,2BAA2B,EAC3B,uBAAuB,EAExB,MAAM,wBAAwB,CAAA;AAW/B,qBAAa,0BAA0B,CAAC,CAAC,SAAS,mBAAmB,CAAE,YAAW,2BAA2B,CAAC,CAAC,CAAC;IAC9G,IAAI,EAAE,CAAC,CAAA;IAEP,SAAS,CAAC,aAAa,EAAE,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAAK;IAE5D,SAAS,aAAa,WAAW,EAAE,CAAC;WAIvB,KAAK,CAAC,WAAW,EAAE,mBAAmB,EAAE,QAAQ,UAAQ,GAAG,OAAO,CAAC,2BAA2B,CAAC;IAY5G,YAAY,IAAI,uBAAuB;IAIvC,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS;IAIhE,oBAAoB,IAAI,MAAM;IAI9B,gBAAgB,IAAI,mBAAmB,EAAE;IAIzC,IAAI,IAAI,YAAY;IAIpB,WAAW,IAAI,MAAM;IAIrB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAK3C,YAAY,IAAI,MAAM;IAItB,QAAQ,IAAI,OAAO,EAAE;IAKrB,MAAM,IAAI,MAAM;IAShB,QAAQ,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;cAIf,KAAK,CAAC,QAAQ,UAAQ,GAAG,OAAO,CAAC,2BAA2B,CAAC;CAU9E"}
1
+ {"version":3,"file":"HydratedTransaction.d.ts","sourceRoot":"","sources":["../../../src/transaction/HydratedTransaction.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAGjD,OAAO,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAC9E,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EACnB,2BAA2B,EAC3B,uBAAuB,EAExB,MAAM,wBAAwB,CAAA;AAa/B,qBAAa,0BAA0B,CAAC,CAAC,SAAS,mBAAmB,CAAE,YAAW,2BAA2B,CAAC,CAAC,CAAC;IAC9G,IAAI,EAAE,CAAC,CAAA;IACP,IAAI,EAAE,uBAAuB,CAAA;IAE7B,SAAS,CAAC,aAAa,EAAE,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAAK;IAE5D,SAAS,aAAa,WAAW,EAAE,CAAC;IAOpC,IAAI,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,CAEvB;IAED,IAAI,oBAAoB,IAAI,MAAM,CAEjC;IAED,IAAI,gBAAgB,IAAI,mBAAmB,EAAE,CAE5C;IAED,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,IAAI,QAAQ,IAAI,OAAO,EAAE,CAGxB;WAEY,KAAK,CAAC,CAAC,SAAS,mBAAmB,EAAE,WAAW,EAAE,CAAC,EAAE,QAAQ,UAAQ,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC;IAY5H,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS;IAIhE,WAAW,IAAI,MAAM;IAIrB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAK3C,MAAM,IAAI,MAAM;IAShB,QAAQ,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;cAIf,KAAK,CAAC,QAAQ,UAAQ,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC;CAUjF"}
@@ -1,10 +1,12 @@
1
1
  import type { SignatureInstance, SignedHydratedTransaction, SignedHydratedTransactionInstance } from '@xyo-network/xl1-model';
2
2
  import { HydratedTransactionWrapper } from './HydratedTransaction.ts';
3
3
  export declare class SignedHydratedTransactionWrapper<T extends SignedHydratedTransaction> extends HydratedTransactionWrapper<T> implements SignedHydratedTransactionInstance<T> {
4
+ private _signatureCache;
5
+ get signatureCount(): number;
6
+ get signatures(): SignatureInstance[];
4
7
  static parse<T extends SignedHydratedTransaction>(block: T, validate?: boolean): Promise<SignedHydratedTransactionInstance<T>>;
5
8
  signature(index: number): SignatureInstance | undefined;
6
- signatureCount(): number;
7
- signatures(): SignatureInstance[];
9
+ validate(): Promise<Error[]>;
8
10
  protected parse(validate?: boolean): Promise<SignedHydratedTransactionInstance<T>>;
9
11
  }
10
12
  //# sourceMappingURL=SignedHydratedTransaction.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SignedHydratedTransaction.d.ts","sourceRoot":"","sources":["../../../src/transaction/SignedHydratedTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,yBAAyB,EACzB,iCAAiC,EAClC,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAA;AAErE,qBAAa,gCAAgC,CAAC,CAAC,SAAS,yBAAyB,CAAE,SAAQ,0BAA0B,CAAC,CAAC,CACrH,YAAW,iCAAiC,CAAC,CAAC,CAAC;WACzB,KAAK,CAAC,CAAC,SAAS,yBAAyB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,UAAQ,GAAG,OAAO,CAAC,iCAAiC,CAAC,CAAC,CAAC,CAAC;IAK3I,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAIvD,cAAc,IAAI,MAAM;IAIxB,UAAU,IAAI,iBAAiB,EAAE;cAIR,KAAK,CAAC,QAAQ,UAAQ,GAAG,OAAO,CAAC,iCAAiC,CAAC,CAAC,CAAC,CAAC;CAIhG"}
1
+ {"version":3,"file":"SignedHydratedTransaction.d.ts","sourceRoot":"","sources":["../../../src/transaction/SignedHydratedTransaction.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,iBAAiB,EACjB,yBAAyB,EACzB,iCAAiC,EAClC,MAAM,wBAAwB,CAAA;AAG/B,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAA;AAErE,qBAAa,gCAAgC,CAAC,CAAC,SAAS,yBAAyB,CAAE,SAAQ,0BAA0B,CAAC,CAAC,CACrH,YAAW,iCAAiC,CAAC,CAAC,CAAC;IAC/C,OAAO,CAAC,eAAe,CAA0B;IAEjD,IAAI,cAAc,IAAI,MAAM,CAE3B;IAED,IAAI,UAAU,IAAI,iBAAiB,EAAE,CAEpC;WAEqB,KAAK,CAAC,CAAC,SAAS,yBAAyB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,UAAQ,GAAG,OAAO,CAAC,iCAAiC,CAAC,CAAC,CAAC,CAAC;IAK3I,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAIxC,QAAQ,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;cASlB,KAAK,CAAC,QAAQ,UAAQ,GAAG,OAAO,CAAC,iCAAiC,CAAC,CAAC,CAAC,CAAC;CAKhG"}
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.2.8",
4
+ "version": "1.3.0",
5
5
  "description": "XYO Layer One SDK Wrappers",
6
6
  "homepage": "https://xylabs.com",
7
7
  "bugs": {
@@ -34,10 +34,12 @@
34
34
  "deploy3": "echo Deploy3 not allowed!"
35
35
  },
36
36
  "dependencies": {
37
+ "@xylabs/arraybuffer": "^4.8.7",
37
38
  "@xylabs/promise": "^4.8.7",
38
- "@xyo-network/chain-utils": "^1.2.8",
39
- "@xyo-network/payload-model": "^3.12.5",
40
- "@xyo-network/xl1-model": "^1.2.8"
39
+ "@xyo-network/boundwitness-validator": "^3.13.0",
40
+ "@xyo-network/chain-utils": "^1.3.0",
41
+ "@xyo-network/payload-model": "^3.13.0",
42
+ "@xyo-network/xl1-model": "^1.3.0"
41
43
  },
42
44
  "devDependencies": {
43
45
  "@types/node": "^22.14.1",
package/src/Fees.ts ADDED
@@ -0,0 +1,51 @@
1
+ import { hexToBigInt } from '@xylabs/hex'
2
+ import type { Promisable } from '@xylabs/promise'
3
+ import type {
4
+ TransactionFeesBigInt, TransactionFeesHex,
5
+ TransactionFeesInstance,
6
+ } from '@xyo-network/xl1-model'
7
+
8
+ export class FeesWrapper implements TransactionFeesInstance {
9
+ base: bigint
10
+ gasLimit: bigint
11
+ gasPrice: bigint
12
+ priority: bigint
13
+
14
+ constructor({
15
+ base, gasLimit, gasPrice, priority,
16
+ }: TransactionFeesHex | TransactionFeesBigInt) {
17
+ this.base = typeof base === 'bigint' ? base : hexToBigInt(base)
18
+ this.gasLimit = typeof gasLimit === 'bigint' ? gasLimit : hexToBigInt(gasLimit)
19
+ this.gasPrice = typeof gasPrice === 'bigint' ? gasPrice : hexToBigInt(gasPrice)
20
+ this.priority = typeof priority === 'bigint' ? priority : hexToBigInt(priority)
21
+ }
22
+
23
+ static validate({
24
+ base, gasLimit, gasPrice, priority,
25
+ }: TransactionFeesHex | TransactionFeesBigInt): Promisable<Error[]> {
26
+ const errors: Error[] = []
27
+ const baseValue = typeof base === 'bigint' ? base : hexToBigInt(base)
28
+ const gasLimitValue = typeof gasLimit === 'bigint' ? gasLimit : hexToBigInt(gasLimit)
29
+ const gasPriceValue = typeof gasPrice === 'bigint' ? gasPrice : hexToBigInt(gasPrice)
30
+ const priorityValue = typeof priority === 'bigint' ? priority : hexToBigInt(priority)
31
+ if (baseValue <= 0n) {
32
+ errors.push(new Error('Base fee cannot be negative or zero'))
33
+ }
34
+ if (gasLimitValue < 0n) {
35
+ errors.push(new Error('Gas limit cannot be negative'))
36
+ }
37
+ if (gasPriceValue < 0n) {
38
+ errors.push(new Error('Gas price cannot be negative'))
39
+ }
40
+ if (priorityValue < 0n) {
41
+ errors.push(new Error('Priority cannot be negative'))
42
+ }
43
+ return errors
44
+ }
45
+
46
+ async validate(): Promise<Error[]> {
47
+ return await FeesWrapper.validate({
48
+ base: this.base, gasLimit: this.gasLimit, gasPrice: this.gasPrice, priority: this.priority,
49
+ })
50
+ }
51
+ }
package/src/Signature.ts CHANGED
@@ -1,7 +1,8 @@
1
+ import { toArrayBuffer } from '@xylabs/arraybuffer'
1
2
  import type {
2
3
  Address, Hash, Hex,
3
4
  } from '@xylabs/hex'
4
- import type { Promisable } from '@xylabs/promise'
5
+ import { BoundWitnessValidator } from '@xyo-network/boundwitness-validator'
5
6
  import type { SignatureInstance } from '@xyo-network/xl1-model'
6
7
 
7
8
  export class SignatureWrapper implements SignatureInstance {
@@ -15,7 +16,11 @@ export class SignatureWrapper implements SignatureInstance {
15
16
  this.hash = hash
16
17
  }
17
18
 
18
- validate(): Promisable<Error[]> {
19
- throw new Error('Method not implemented.')
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)
20
25
  }
21
26
  }
@@ -4,15 +4,14 @@ import { XYO_ZERO_ADDRESS } from '@xyo-network/chain-utils'
4
4
  import { PayloadBuilder } from '@xyo-network/payload-builder'
5
5
  import type { WithStorageMeta } from '@xyo-network/payload-model'
6
6
  import type {
7
- FeesInstance, HydratedBlock, SignedHydratedTransaction, SignedHydratedTransactionInstance,
8
- Transfer,
7
+ HydratedBlock, HydratedBlockInstance, SignedHydratedTransaction, SignedHydratedTransactionInstance,
8
+ TransactionFeesInstance, Transfer,
9
9
  } from '@xyo-network/xl1-model'
10
10
  import {
11
11
  isSignedTransactionBoundWitnessWithStorageMeta,
12
12
  isTransfer,
13
13
  } from '@xyo-network/xl1-model'
14
14
 
15
- import type { HydratedBlockInstance } from '../../../model/dist/types/instances/HydratedBlock.js'
16
15
  import { SignedHydratedTransactionWrapper } from '../transaction/SignedHydratedTransaction.ts'
17
16
 
18
17
  const sumTransfers = (payload: Transfer) => {
@@ -32,32 +31,23 @@ export class HydratedBlockWrapper<T extends HydratedBlock> implements HydratedBl
32
31
  this.data = block
33
32
  }
34
33
 
35
- static async parse<T extends HydratedBlock>(block: T, validate = false): Promise<HydratedBlockInstance> {
36
- const wrapper = new HydratedBlockWrapper<T>(block)
37
- return await wrapper.parse(validate)
38
- }
39
-
40
- boundWitness(): T[0] {
34
+ get boundWitness(): T[0] {
41
35
  throw new Error('Method not implemented.')
42
36
  }
43
37
 
44
- fees(): FeesInstance {
38
+ get fees(): TransactionFeesInstance {
45
39
  throw new Error('Method not implemented.')
46
40
  }
47
41
 
48
- payload(index: number): T[1][number] | undefined {
49
- return this.payloadsCache.at(index)
50
- }
51
-
52
- payloadCount(): number {
42
+ get payloadCount(): number {
53
43
  return this.payloadsCache.length
54
44
  }
55
45
 
56
- payloads(): T[1][number][] {
46
+ get payloads(): T[1][number][] {
57
47
  return this.payloadsCache
58
48
  }
59
49
 
60
- reward(): bigint {
50
+ get reward(): bigint {
61
51
  return this.payloadsCache.reduce((acc: bigint, payload) => acc + (
62
52
  isTransfer(payload)
63
53
  ? payload.from === XYO_ZERO_ADDRESS
@@ -66,18 +56,27 @@ export class HydratedBlockWrapper<T extends HydratedBlock> implements HydratedBl
66
56
  : 0n), 0n)
67
57
  }
68
58
 
69
- transaction(index: number): SignedHydratedTransactionInstance | undefined {
70
- return this.transactionsCache.at(index)
71
- }
72
-
73
- transactionCount(): number {
59
+ get transactionCount(): number {
74
60
  return this.transactionsCache.length
75
61
  }
76
62
 
77
- transactions(): SignedHydratedTransactionInstance[] {
63
+ get transactions(): SignedHydratedTransactionInstance[] {
78
64
  return this.transactionsCache
79
65
  }
80
66
 
67
+ static async parse<T extends HydratedBlock>(block: T, validate = false): Promise<HydratedBlockInstance> {
68
+ const wrapper = new HydratedBlockWrapper<T>(block)
69
+ return await wrapper.parse(validate)
70
+ }
71
+
72
+ payload(index: number): T[1][number] | undefined {
73
+ return this.payloadsCache.at(index)
74
+ }
75
+
76
+ transaction(index: number): SignedHydratedTransactionInstance | undefined {
77
+ return this.transactionsCache.at(index)
78
+ }
79
+
81
80
  validate(): Promisable<Error[]> {
82
81
  return []
83
82
  }
@@ -3,27 +3,40 @@ import type {
3
3
  SignedHydratedBlockInstance,
4
4
  } from '@xyo-network/xl1-model'
5
5
 
6
+ import { createSignatureWrappers } from '../lib/createSignatureWrappers.ts'
6
7
  import { HydratedBlockWrapper } from './HydratedBlock.ts'
7
8
 
8
9
  export class SignedHydratedBlockWrapper<T extends SignedHydratedBlock> extends HydratedBlockWrapper<T> implements SignedHydratedBlockInstance<T> {
10
+ private _signatureCache: SignatureInstance[] = []
11
+
12
+ get signatureCount(): number {
13
+ return this._signatureCache.length
14
+ }
15
+
16
+ get signatures(): SignatureInstance[] {
17
+ return [...this._signatureCache]
18
+ }
19
+
9
20
  static override async parse<T extends SignedHydratedBlock>(block: T, validate = false): Promise<SignedHydratedBlockInstance<T>> {
10
21
  const wrapper = new SignedHydratedBlockWrapper<T>(block)
11
22
  return await wrapper.parse(validate)
12
23
  }
13
24
 
14
25
  signature(index: number): SignatureInstance | undefined {
15
- throw new Error('Method not implemented.')
16
- }
17
-
18
- signatureCount(): number {
19
- throw new Error('Method not implemented.')
26
+ return this._signatureCache[index]
20
27
  }
21
28
 
22
- signatures(): SignatureInstance[] {
23
- throw new Error('Method not implemented.')
29
+ override async validate(): Promise<Error[]> {
30
+ const errors: Error[] = []
31
+ errors.push(
32
+ ...(await Promise.all(this._signatureCache.map(signature => signature.validate()))).flat(),
33
+ ...(await super.validate()),
34
+ )
35
+ return errors
24
36
  }
25
37
 
26
38
  protected override async parse(validate = false): Promise<SignedHydratedBlockInstance<T>> {
39
+ this._signatureCache = await createSignatureWrappers(this.data[0])
27
40
  await super.parse(validate)
28
41
  return this
29
42
  }
package/src/index.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  export * from './block/index.ts'
2
+ export * from './Fees.ts'
2
3
  export * from './Signature.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-model'
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
+ }
@@ -0,0 +1 @@
1
+ export * from './createSignatureWrappers.ts'
@@ -5,14 +5,15 @@ import { PayloadBuilder } from '@xyo-network/payload-builder'
5
5
  import type { Payload, WithHashStorageMeta } from '@xyo-network/payload-model'
6
6
  import type {
7
7
  AllowedBlockPayload,
8
- FeesInstance,
9
8
  HydratedTransaction,
10
9
  HydratedTransactionInstance,
11
- TransactionBoundWitness,
10
+ TransactionFeesInstance,
12
11
  Transfer,
13
12
  } from '@xyo-network/xl1-model'
14
13
  import { isTransfer } from '@xyo-network/xl1-model'
15
14
 
15
+ import { FeesWrapper } from '../Fees.ts'
16
+
16
17
  const sumTransfers = (payload: Transfer) => {
17
18
  let total = 0n
18
19
  for (let i of Object.values(payload.transfers)) {
@@ -23,42 +24,51 @@ const sumTransfers = (payload: Transfer) => {
23
24
 
24
25
  export class HydratedTransactionWrapper<T extends HydratedTransaction> implements HydratedTransactionInstance<T> {
25
26
  data: T
27
+ fees: TransactionFeesInstance
26
28
 
27
29
  protected payloadsCache: WithHashStorageMeta<Payload>[] = []
28
30
 
29
31
  protected constructor(transaction: T) {
30
32
  this.data = transaction
33
+ this.fees = new FeesWrapper(
34
+ this.boundWitness.fees,
35
+ )
31
36
  }
32
37
 
33
- static async parse(transaction: HydratedTransaction, validate = false): Promise<HydratedTransactionInstance> {
34
- const wrapper = new HydratedTransactionWrapper(transaction)
35
- const parsed = await wrapper.parse()
36
- if (validate) {
37
- const errors = await wrapper.validate()
38
- if (errors.length > 0) {
39
- throw new Error(`Block validation failed: ${errors.join(', ')}`)
40
- }
41
- }
42
- return parsed
38
+ get boundWitness(): T[0] {
39
+ return this.data[0]
43
40
  }
44
41
 
45
- boundWitness(): TransactionBoundWitness {
46
- throw new Error('Method not implemented.')
42
+ get elevatedPayloadCount(): number {
43
+ return 0
47
44
  }
48
45
 
49
- elevatedPayload(_index: number): AllowedBlockPayload | undefined {
46
+ get elevatedPayloads(): AllowedBlockPayload[] {
50
47
  throw new Error('Method not implemented.')
51
48
  }
52
49
 
53
- elevatedPayloadCount(): number {
54
- throw new Error('Method not implemented.')
50
+ get payloadCount(): number {
51
+ return this.payloadsCache.length
55
52
  }
56
53
 
57
- elevatedPayloads(): AllowedBlockPayload[] {
54
+ get payloads(): Payload[] {
58
55
  throw new Error('Method not implemented.')
56
+ // return this.payloadsCache
57
+ }
58
+
59
+ static async parse<T extends HydratedTransaction>(transaction: T, validate = false): Promise<HydratedTransactionInstance<T>> {
60
+ const wrapper = new HydratedTransactionWrapper<T>(transaction)
61
+ const parsed = await wrapper.parse()
62
+ if (validate) {
63
+ const errors = await wrapper.validate()
64
+ if (errors.length > 0) {
65
+ throw new Error(`Block validation failed: ${errors.join(', ')}`)
66
+ }
67
+ }
68
+ return parsed
59
69
  }
60
70
 
61
- fees(): FeesInstance {
71
+ elevatedPayload(_index: number): AllowedBlockPayload | undefined {
62
72
  throw new Error('Method not implemented.')
63
73
  }
64
74
 
@@ -71,15 +81,6 @@ export class HydratedTransactionWrapper<T extends HydratedTransaction> implement
71
81
  // return this.payloadsCache.at(index)
72
82
  }
73
83
 
74
- payloadCount(): number {
75
- return this.payloadsCache.length
76
- }
77
-
78
- payloads(): Payload[] {
79
- throw new Error('Method not implemented.')
80
- // return this.payloadsCache
81
- }
82
-
83
84
  reward(): bigint {
84
85
  return this.payloadsCache.reduce((acc: bigint, payload) => acc + (
85
86
  isTransfer(payload)
@@ -93,7 +94,7 @@ export class HydratedTransactionWrapper<T extends HydratedTransaction> implement
93
94
  return []
94
95
  }
95
96
 
96
- protected async parse(validate = false): Promise<HydratedTransactionInstance> {
97
+ protected async parse(validate = false): Promise<HydratedTransactionInstance<T>> {
97
98
  const transactionPayloads = await PayloadBuilder.addStorageMeta(this.data[1])
98
99
  for (const payload of transactionPayloads) {
99
100
  this.payloadsCache.push(payload)
@@ -1,31 +1,45 @@
1
+ import type { Promisable } from '@xylabs/promise'
1
2
  import type {
2
3
  SignatureInstance,
3
4
  SignedHydratedTransaction,
4
5
  SignedHydratedTransactionInstance,
5
6
  } from '@xyo-network/xl1-model'
6
7
 
8
+ import { createSignatureWrappers } from '../lib/createSignatureWrappers.ts'
7
9
  import { HydratedTransactionWrapper } from './HydratedTransaction.ts'
8
10
 
9
11
  export class SignedHydratedTransactionWrapper<T extends SignedHydratedTransaction> extends HydratedTransactionWrapper<T>
10
12
  implements SignedHydratedTransactionInstance<T> {
13
+ private _signatureCache: SignatureInstance[] = []
14
+
15
+ get signatureCount(): number {
16
+ return this._signatureCache.length
17
+ }
18
+
19
+ get signatures(): SignatureInstance[] {
20
+ return [...this._signatureCache]
21
+ }
22
+
11
23
  static override async parse<T extends SignedHydratedTransaction>(block: T, validate = false): Promise<SignedHydratedTransactionInstance<T>> {
12
24
  const wrapper = new SignedHydratedTransactionWrapper<T>(block)
13
25
  return await wrapper.parse(validate)
14
26
  }
15
27
 
16
28
  signature(index: number): SignatureInstance | undefined {
17
- throw new Error('Method not implemented.')
18
- }
19
-
20
- signatureCount(): number {
21
- throw new Error('Method not implemented.')
29
+ return this._signatureCache[index]
22
30
  }
23
31
 
24
- signatures(): SignatureInstance[] {
25
- throw new Error('Method not implemented.')
32
+ override async validate(): Promise<Error[]> {
33
+ const errors: Error[] = []
34
+ errors.push(
35
+ ...(await Promise.all(this._signatureCache.map(signature => signature.validate()))).flat(),
36
+ ...(await super.validate()),
37
+ )
38
+ return errors
26
39
  }
27
40
 
28
41
  protected override async parse(validate = false): Promise<SignedHydratedTransactionInstance<T>> {
42
+ this._signatureCache = await createSignatureWrappers(this.data[0])
29
43
  await super.parse(validate)
30
44
  return this
31
45
  }