@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.
- package/dist/neutral/index.mjs +157 -73
- package/dist/neutral/index.mjs.map +1 -1
- package/dist/types/Fees.d.ts +12 -0
- package/dist/types/Fees.d.ts.map +1 -0
- package/dist/types/Signature.d.ts +2 -2
- package/dist/types/Signature.d.ts.map +1 -1
- package/dist/types/block/HydratedBlock.d.ts +8 -9
- package/dist/types/block/HydratedBlock.d.ts.map +1 -1
- package/dist/types/block/SignedHydratedBlock.d.ts +4 -2
- package/dist/types/block/SignedHydratedBlock.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/lib/createSignatureWrappers.d.ts +4 -0
- package/dist/types/lib/createSignatureWrappers.d.ts.map +1 -0
- package/dist/types/lib/index.d.ts +2 -0
- package/dist/types/lib/index.d.ts.map +1 -0
- package/dist/types/transaction/HydratedTransaction.d.ts +9 -9
- package/dist/types/transaction/HydratedTransaction.d.ts.map +1 -1
- package/dist/types/transaction/SignedHydratedTransaction.d.ts +4 -2
- package/dist/types/transaction/SignedHydratedTransaction.d.ts.map +1 -1
- package/package.json +6 -4
- package/src/Fees.ts +51 -0
- package/src/Signature.ts +8 -3
- package/src/block/HydratedBlock.ts +22 -23
- package/src/block/SignedHydratedBlock.ts +20 -7
- package/src/index.ts +1 -0
- package/src/lib/createSignatureWrappers.ts +16 -0
- package/src/lib/index.ts +1 -0
- package/src/transaction/HydratedTransaction.ts +30 -29
- package/src/transaction/SignedHydratedTransaction.ts +21 -7
package/dist/neutral/index.mjs
CHANGED
|
@@ -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
|
|
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
|
|
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 +=
|
|
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
|
|
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
|
-
|
|
98
|
-
}
|
|
99
|
-
signatureCount() {
|
|
100
|
-
throw new Error("Method not implemented.");
|
|
189
|
+
return this._signatureCache[index];
|
|
101
190
|
}
|
|
102
|
-
|
|
103
|
-
|
|
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 +=
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
294
|
+
return this._signatureCache[index];
|
|
194
295
|
}
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
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":";;;;AAAA,SAASA,eAAAA,oBAAmB;AAE5B,SAASC,oBAAAA,yBAAwB;AACjC,SAASC,kBAAAA,uBAAsB;AAM/B,SACEC,gDACAC,cAAAA,mBACK;;;ACZP,SAASC,mBAAmB;AAE5B,SAASC,wBAAwB;AACjC,SAASC,sBAAsB;AAU/B,SAASC,kBAAkB;AAE3B,IAAMC,eAAe,wBAACC,YAAAA;AACpB,MAAIC,QAAQ;AACZ,WAASC,KAAKC,OAAOC,OAAOJ,QAAQK,SAAS,GAAG;AAC9CJ,aAASK,YAAYJ,CAAAA;EACvB;AACA,SAAOD;AACT,GANqB;AAQd,IAAMM,6BAAN,MAAMA,4BAAAA;EAvBb,OAuBaA;;;EACXC;EAEUC,gBAAgD,CAAA;EAE1D,YAAsBC,aAAgB;AACpC,SAAKF,OAAOE;EACd;EAEA,aAAaC,MAAMD,aAAkCE,WAAW,OAA6C;AAC3G,UAAMC,UAAU,IAAIN,4BAA2BG,WAAAA;AAC/C,UAAMI,SAAS,MAAMD,QAAQF,MAAK;AAClC,QAAIC,UAAU;AACZ,YAAMG,SAAS,MAAMF,QAAQD,SAAQ;AACrC,UAAIG,OAAOC,SAAS,GAAG;AACrB,cAAM,IAAIC,MAAM,4BAA4BF,OAAOG,KAAK,IAAA,CAAA,EAAO;MACjE;IACF;AACA,WAAOJ;EACT;EAEAK,eAAwC;AACtC,UAAM,IAAIF,MAAM,yBAAA;EAClB;EAEAG,gBAAgBC,QAAiD;AAC/D,UAAM,IAAIJ,MAAM,yBAAA;EAClB;EAEAK,uBAA+B;AAC7B,UAAM,IAAIL,MAAM,yBAAA;EAClB;EAEAM,mBAA0C;AACxC,UAAM,IAAIN,MAAM,yBAAA;EAClB;EAEAO,OAAqB;AACnB,UAAM,IAAIP,MAAM,yBAAA;EAClB;EAEAQ,cAAsB;AACpB,UAAM,IAAIR,MAAM,yBAAA;EAClB;EAEAjB,QAAQ0B,OAAoC;AAC1C,UAAM,IAAIT,MAAM,yBAAA;EAElB;EAEAU,eAAuB;AACrB,WAAO,KAAKlB,cAAcO;EAC5B;EAEAY,WAAsB;AACpB,UAAM,IAAIX,MAAM,yBAAA;EAElB;EAEAY,SAAiB;AACf,WAAO,KAAKpB,cAAcqB,OAAO,CAACC,KAAa/B,YAAY+B,OACzDC,WAAWhC,OAAAA,IACPA,QAAQiC,SAASC,mBACfnC,aAAaC,OAAAA,IACb,KACF,KAAK,EAAE;EACf;EAEAY,WAAgC;AAC9B,WAAO,CAAA;EACT;EAEA,MAAgBD,MAAMC,WAAW,OAA6C;AAC5E,UAAMuB,sBAAsB,MAAMC,eAAeC,eAAe,KAAK7B,KAAK,CAAA,CAAE;AAC5E,eAAWR,WAAWmC,qBAAqB;AACzC,WAAK1B,cAAc6B,KAAKtC,OAAAA;IAC1B;AACA,QAAIY,UAAU;AACZ,YAAM,KAAKA,SAAQ;IACrB;AACA,WAAO;EACT;AACF;;;ACjGO,IAAM2B,mCAAN,MAAMA,0CAA8EC,2BAAAA;EAF3F,OAE2FA;;;EAEzF,aAAsBC,MAA2CC,OAAUC,WAAW,OAAsD;AAC1I,UAAMC,UAAU,IAAIL,kCAAoCG,KAAAA;AACxD,WAAO,MAAME,QAAQH,MAAME,QAAAA;EAC7B;EAEAE,UAAUC,OAA8C;AACtD,UAAM,IAAIC,MAAM,yBAAA;EAClB;EAEAC,iBAAyB;AACvB,UAAM,IAAID,MAAM,yBAAA;EAClB;EAEAE,aAAkC;AAChC,UAAM,IAAIF,MAAM,yBAAA;EAClB;EAEA,MAAyBN,MAAME,WAAW,OAAsD;AAC9F,UAAM,MAAMF,MAAME,QAAAA;AAClB,WAAO;EACT;AACF;;;AFdA,IAAMO,gBAAe,wBAACC,YAAAA;AACpB,MAAIC,QAAQ;AACZ,WAASC,KAAKC,OAAOC,OAAOJ,QAAQK,SAAS,GAAG;AAC9CJ,aAASK,aAAYJ,CAAAA;EACvB;AACA,SAAOD;AACT,GANqB;AAQd,IAAMM,uBAAN,MAAMA,sBAAAA;EAzBb,OAyBaA;;;EACXC;EACUC,gBAAiD,CAAA;EACjDC,oBAAyD,CAAA;EAEnE,YAAsBC,OAAU;AAC9B,SAAKH,OAAOG;EACd;EAEA,aAAaC,MAA+BD,OAAUE,WAAW,OAAuC;AACtG,UAAMC,UAAU,IAAIP,sBAAwBI,KAAAA;AAC5C,WAAO,MAAMG,QAAQF,MAAMC,QAAAA;EAC7B;EAEAE,eAAqB;AACnB,UAAM,IAAIC,MAAM,yBAAA;EAClB;EAEAC,OAAqB;AACnB,UAAM,IAAID,MAAM,yBAAA;EAClB;EAEAhB,QAAQkB,OAAyC;AAC/C,WAAO,KAAKT,cAAcU,GAAGD,KAAAA;EAC/B;EAEAE,eAAuB;AACrB,WAAO,KAAKX,cAAcY;EAC5B;EAEAC,WAA2B;AACzB,WAAO,KAAKb;EACd;EAEAc,SAAiB;AACf,WAAO,KAAKd,cAAce,OAAO,CAACC,KAAazB,YAAYyB,OACzDC,YAAW1B,OAAAA,IACPA,QAAQ2B,SAASC,oBACf7B,cAAaC,OAAAA,IACb,KACF,KAAK,EAAE;EACf;EAEA6B,YAAYX,OAA8D;AACxE,WAAO,KAAKR,kBAAkBS,GAAGD,KAAAA;EACnC;EAEAY,mBAA2B;AACzB,WAAO,KAAKpB,kBAAkBW;EAChC;EAEAU,eAAoD;AAClD,WAAO,KAAKrB;EACd;EAEAG,WAAgC;AAC9B,WAAO,CAAA;EACT;EAEA,MAAgBD,MAAMC,WAAW,OAA0C;AACzE,UAAMmB,gBAAgB,MAAMC,gBAAeC,eAAe,KAAK1B,KAAK,CAAA,CAAE;AACtE,eAAWR,WAAWgC,eAAe;AACnC,UAAIG,+CAA+CnC,OAAAA,GAAU;AAC3D,cAAMoC,sBAAiD;UAACpC;UAASgC,cAAcK,OAC7EC,CAAAA,MAAKtC,QAAQuC,eAAeC,SAASF,EAAEG,KAAK,KAAKzC,QAAQuC,eAAeC,SAASF,EAAEI,SAAS,CAAA;;AAE9F,aAAKhC,kBAAkBiC,KAAK,MAAMC,iCAAiChC,MAAMwB,mBAAAA,CAAAA;MAC3E,OAAO;AACL,aAAK3B,cAAckC,KAAK3C,OAAAA;MAC1B;IACF;AACA,QAAIa,UAAU;AACZ,YAAM,KAAKA,SAAQ;IACrB;AACA,WAAO;EACT;AACF;;;AG9FO,IAAMgC,6BAAN,MAAMA,oCAAkEC,qBAAAA;EAF/E,OAE+EA;;;EAC7E,aAAsBC,MAAqCC,OAAUC,WAAW,OAAgD;AAC9H,UAAMC,UAAU,IAAIL,4BAA8BG,KAAAA;AAClD,WAAO,MAAME,QAAQH,MAAME,QAAAA;EAC7B;EAEAE,UAAUC,OAA8C;AACtD,UAAM,IAAIC,MAAM,yBAAA;EAClB;EAEAC,iBAAyB;AACvB,UAAM,IAAID,MAAM,yBAAA;EAClB;EAEAE,aAAkC;AAChC,UAAM,IAAIF,MAAM,yBAAA;EAClB;EAEA,MAAyBN,MAAME,WAAW,OAAgD;AACxF,UAAM,MAAMF,MAAME,QAAAA;AAClB,WAAO;EACT;AACF;;;ACvBO,IAAMO,mBAAN,MAAMA;EAAb,OAAaA;;;EACXC;EACAC;EACAC;EAEAC,YAAYD,WAAgBF,SAAkBC,MAAY;AACxD,SAAKC,YAAYA;AACjB,SAAKF,UAAUA;AACf,SAAKC,OAAOA;EACd;EAEAG,WAAgC;AAC9B,UAAM,IAAIC,MAAM,yBAAA;EAClB;AACF;","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():
|
|
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":"
|
|
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 {
|
|
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,
|
|
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
|
-
|
|
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;
|
|
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"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -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 @@
|
|
|
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,
|
|
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
|
-
|
|
9
|
-
|
|
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,
|
|
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
|
-
|
|
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":"
|
|
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.
|
|
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/
|
|
39
|
-
"@xyo-network/
|
|
40
|
-
"@xyo-network/
|
|
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
|
|
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():
|
|
19
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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():
|
|
38
|
+
get fees(): TransactionFeesInstance {
|
|
45
39
|
throw new Error('Method not implemented.')
|
|
46
40
|
}
|
|
47
41
|
|
|
48
|
-
|
|
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
|
-
|
|
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
|
-
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
signatureCount(): number {
|
|
19
|
-
throw new Error('Method not implemented.')
|
|
26
|
+
return this._signatureCache[index]
|
|
20
27
|
}
|
|
21
28
|
|
|
22
|
-
|
|
23
|
-
|
|
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
|
@@ -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
|
+
}
|
package/src/lib/index.ts
ADDED
|
@@ -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
|
-
|
|
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
|
-
|
|
34
|
-
|
|
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
|
-
|
|
46
|
-
|
|
42
|
+
get elevatedPayloadCount(): number {
|
|
43
|
+
return 0
|
|
47
44
|
}
|
|
48
45
|
|
|
49
|
-
|
|
46
|
+
get elevatedPayloads(): AllowedBlockPayload[] {
|
|
50
47
|
throw new Error('Method not implemented.')
|
|
51
48
|
}
|
|
52
49
|
|
|
53
|
-
|
|
54
|
-
|
|
50
|
+
get payloadCount(): number {
|
|
51
|
+
return this.payloadsCache.length
|
|
55
52
|
}
|
|
56
53
|
|
|
57
|
-
|
|
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
|
-
|
|
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
|
-
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
signatureCount(): number {
|
|
21
|
-
throw new Error('Method not implemented.')
|
|
29
|
+
return this._signatureCache[index]
|
|
22
30
|
}
|
|
23
31
|
|
|
24
|
-
|
|
25
|
-
|
|
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
|
}
|