@xyo-network/chain-wrappers 1.3.2 → 1.3.3
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 +73 -31
- package/dist/neutral/index.mjs.map +1 -1
- package/dist/types/block/HydratedBlock.d.ts +14 -12
- package/dist/types/block/HydratedBlock.d.ts.map +1 -1
- package/dist/types/block/SignedHydratedBlock.d.ts +4 -3
- package/dist/types/block/SignedHydratedBlock.d.ts.map +1 -1
- package/dist/types/transaction/HydratedTransaction.d.ts +11 -11
- package/dist/types/transaction/HydratedTransaction.d.ts.map +1 -1
- package/dist/types/transaction/SignedHydratedTransaction.d.ts +4 -3
- package/dist/types/transaction/SignedHydratedTransaction.d.ts.map +1 -1
- package/package.json +4 -3
- package/src/block/HydratedBlock.ts +47 -26
- package/src/block/SignedHydratedBlock.ts +6 -3
- package/src/transaction/HydratedTransaction.ts +35 -21
- package/src/transaction/SignedHydratedTransaction.ts +11 -4
package/dist/neutral/index.mjs
CHANGED
|
@@ -40,14 +40,20 @@ var createSignatureWrappers = /* @__PURE__ */ __name(async (bw) => {
|
|
|
40
40
|
// src/block/HydratedBlock.ts
|
|
41
41
|
import { hexToBigInt as hexToBigInt3 } from "@xylabs/hex";
|
|
42
42
|
import { XYO_ZERO_ADDRESS as XYO_ZERO_ADDRESS2 } from "@xyo-network/chain-utils";
|
|
43
|
+
import { validateHydratedBlock } from "@xyo-network/chain-validation";
|
|
44
|
+
import { PayloadBuilder as PayloadBuilder4 } from "@xyo-network/payload-builder";
|
|
45
|
+
import { isAllowedBlockPayloadWithHashStorageMeta as isAllowedBlockPayloadWithHashStorageMeta2, isSignedTransactionBoundWitnessWithStorageMeta, isTransfer as isTransfer2 } from "@xyo-network/xl1-model";
|
|
46
|
+
|
|
47
|
+
// src/transaction/SignedHydratedTransaction.ts
|
|
43
48
|
import { PayloadBuilder as PayloadBuilder3 } from "@xyo-network/payload-builder";
|
|
44
|
-
import { isSignedTransactionBoundWitnessWithStorageMeta, isTransfer as isTransfer2 } from "@xyo-network/xl1-model";
|
|
45
49
|
|
|
46
50
|
// src/transaction/HydratedTransaction.ts
|
|
51
|
+
import { exists } from "@xylabs/exists";
|
|
47
52
|
import { hexToBigInt as hexToBigInt2 } from "@xylabs/hex";
|
|
48
53
|
import { XYO_ZERO_ADDRESS } from "@xyo-network/chain-utils";
|
|
54
|
+
import { validateTransaction } from "@xyo-network/chain-validation";
|
|
49
55
|
import { PayloadBuilder as PayloadBuilder2 } from "@xyo-network/payload-builder";
|
|
50
|
-
import { isTransfer } from "@xyo-network/xl1-model";
|
|
56
|
+
import { isAllowedBlockPayloadWithHashStorageMeta, isTransfer } from "@xyo-network/xl1-model";
|
|
51
57
|
|
|
52
58
|
// src/Fees.ts
|
|
53
59
|
import { hexToBigInt } from "@xylabs/hex";
|
|
@@ -110,8 +116,8 @@ var HydratedTransactionWrapper = class _HydratedTransactionWrapper {
|
|
|
110
116
|
data;
|
|
111
117
|
fees;
|
|
112
118
|
payloadsCache = [];
|
|
113
|
-
constructor(
|
|
114
|
-
this.data =
|
|
119
|
+
constructor(data) {
|
|
120
|
+
this.data = data;
|
|
115
121
|
this.fees = new FeesWrapper(this.boundWitness.fees);
|
|
116
122
|
}
|
|
117
123
|
get boundWitness() {
|
|
@@ -121,16 +127,28 @@ var HydratedTransactionWrapper = class _HydratedTransactionWrapper {
|
|
|
121
127
|
return 0;
|
|
122
128
|
}
|
|
123
129
|
get elevatedPayloads() {
|
|
124
|
-
|
|
130
|
+
const elevatedHashes = (this.boundWitness.script ?? []).map((operation) => {
|
|
131
|
+
const [opCode, ...args] = operation.split("|");
|
|
132
|
+
if (opCode === "elevate") {
|
|
133
|
+
return args[0];
|
|
134
|
+
}
|
|
135
|
+
}).filter(exists);
|
|
136
|
+
const elevated = elevatedHashes.map((hash) => this.payloads.find((payload) => payload._hash === hash)).filter(exists);
|
|
137
|
+
return elevated.filter(isAllowedBlockPayloadWithHashStorageMeta);
|
|
125
138
|
}
|
|
126
139
|
get payloadCount() {
|
|
127
140
|
return this.payloadsCache.length;
|
|
128
141
|
}
|
|
129
142
|
get payloads() {
|
|
130
|
-
|
|
143
|
+
return [
|
|
144
|
+
...this.payloadsCache
|
|
145
|
+
];
|
|
131
146
|
}
|
|
132
147
|
static async parse(transaction, validate = false) {
|
|
133
|
-
const wrapper = new _HydratedTransactionWrapper(
|
|
148
|
+
const wrapper = new _HydratedTransactionWrapper([
|
|
149
|
+
await PayloadBuilder2.addStorageMeta(transaction[0]),
|
|
150
|
+
await PayloadBuilder2.addStorageMeta(transaction[1])
|
|
151
|
+
]);
|
|
134
152
|
const parsed = await wrapper.parse();
|
|
135
153
|
if (validate) {
|
|
136
154
|
const errors = await wrapper.validate();
|
|
@@ -140,20 +158,20 @@ var HydratedTransactionWrapper = class _HydratedTransactionWrapper {
|
|
|
140
158
|
}
|
|
141
159
|
return parsed;
|
|
142
160
|
}
|
|
143
|
-
elevatedPayload(
|
|
144
|
-
|
|
161
|
+
elevatedPayload(index) {
|
|
162
|
+
return this.elevatedPayloads.at(index);
|
|
145
163
|
}
|
|
146
164
|
gasRequired() {
|
|
147
165
|
throw new Error("Method not implemented.");
|
|
148
166
|
}
|
|
149
|
-
payload(
|
|
150
|
-
|
|
167
|
+
payload(index) {
|
|
168
|
+
return this.payloads.at(index);
|
|
151
169
|
}
|
|
152
170
|
reward() {
|
|
153
171
|
return this.payloadsCache.reduce((acc, payload) => acc + (isTransfer(payload) ? payload.from === XYO_ZERO_ADDRESS ? sumTransfers(payload) : 0n : 0n), 0n);
|
|
154
172
|
}
|
|
155
173
|
validate() {
|
|
156
|
-
return
|
|
174
|
+
return validateTransaction(this.data);
|
|
157
175
|
}
|
|
158
176
|
async parse(validate = false) {
|
|
159
177
|
const transactionPayloads = await PayloadBuilder2.addStorageMeta(this.data[1]);
|
|
@@ -181,8 +199,11 @@ var SignedHydratedTransactionWrapper = class _SignedHydratedTransactionWrapper e
|
|
|
181
199
|
...this._signatureCache
|
|
182
200
|
];
|
|
183
201
|
}
|
|
184
|
-
static async parse(
|
|
185
|
-
const wrapper = new _SignedHydratedTransactionWrapper(
|
|
202
|
+
static async parse(transaction, validate = false) {
|
|
203
|
+
const wrapper = new _SignedHydratedTransactionWrapper([
|
|
204
|
+
await PayloadBuilder3.addStorageMeta(transaction[0]),
|
|
205
|
+
await PayloadBuilder3.addStorageMeta(transaction[1])
|
|
206
|
+
]);
|
|
186
207
|
return await wrapper.parse(validate);
|
|
187
208
|
}
|
|
188
209
|
signature(index) {
|
|
@@ -213,25 +234,36 @@ var HydratedBlockWrapper = class _HydratedBlockWrapper {
|
|
|
213
234
|
__name(this, "HydratedBlockWrapper");
|
|
214
235
|
}
|
|
215
236
|
data;
|
|
216
|
-
|
|
237
|
+
allPayloadsCache = [];
|
|
238
|
+
publicPayloadsCache = [];
|
|
217
239
|
transactionsCache = [];
|
|
218
|
-
constructor(
|
|
219
|
-
this.data =
|
|
240
|
+
constructor(data) {
|
|
241
|
+
this.data = data;
|
|
220
242
|
}
|
|
221
243
|
get boundWitness() {
|
|
222
|
-
|
|
223
|
-
}
|
|
224
|
-
get fees() {
|
|
225
|
-
throw new Error("Method not implemented.");
|
|
244
|
+
return this.data[0];
|
|
226
245
|
}
|
|
227
246
|
get payloadCount() {
|
|
228
|
-
return this.
|
|
247
|
+
return this.allPayloadsCache.length;
|
|
229
248
|
}
|
|
230
249
|
get payloads() {
|
|
231
|
-
return
|
|
250
|
+
return [
|
|
251
|
+
...this.allPayloadsCache
|
|
252
|
+
];
|
|
253
|
+
}
|
|
254
|
+
get privatePayloadCount() {
|
|
255
|
+
return this.data[1].length - this.publicPayloadCount;
|
|
256
|
+
}
|
|
257
|
+
get publicPayloadCount() {
|
|
258
|
+
return this.allPayloadsCache.length;
|
|
259
|
+
}
|
|
260
|
+
get publicPayloads() {
|
|
261
|
+
return [
|
|
262
|
+
...this.publicPayloadsCache
|
|
263
|
+
];
|
|
232
264
|
}
|
|
233
265
|
get reward() {
|
|
234
|
-
return this.
|
|
266
|
+
return this.allPayloadsCache.reduce((acc, payload) => acc + (isTransfer2(payload) ? payload.from === XYO_ZERO_ADDRESS2 ? sumTransfers2(payload) : 0n : 0n), 0n);
|
|
235
267
|
}
|
|
236
268
|
get transactionCount() {
|
|
237
269
|
return this.transactionsCache.length;
|
|
@@ -244,25 +276,35 @@ var HydratedBlockWrapper = class _HydratedBlockWrapper {
|
|
|
244
276
|
return await wrapper.parse(validate);
|
|
245
277
|
}
|
|
246
278
|
payload(index) {
|
|
247
|
-
return this.
|
|
279
|
+
return this.data[1].at(index);
|
|
248
280
|
}
|
|
249
281
|
transaction(index) {
|
|
250
282
|
return this.transactionsCache.at(index);
|
|
251
283
|
}
|
|
252
|
-
validate() {
|
|
253
|
-
return
|
|
284
|
+
async validate() {
|
|
285
|
+
return await validateHydratedBlock(this.data);
|
|
254
286
|
}
|
|
255
287
|
async parse(validate = false) {
|
|
256
|
-
const
|
|
257
|
-
for (const payload of
|
|
288
|
+
const allPayloads = await PayloadBuilder4.addStorageMeta(this.data[1]);
|
|
289
|
+
for (const payload of allPayloads) {
|
|
258
290
|
if (isSignedTransactionBoundWitnessWithStorageMeta(payload)) {
|
|
259
291
|
const hydratedTransaction = [
|
|
260
292
|
payload,
|
|
261
|
-
|
|
293
|
+
allPayloads.filter((p) => payload.payload_hashes.includes(p._hash) || payload.payload_hashes.includes(p._dataHash))
|
|
262
294
|
];
|
|
263
295
|
this.transactionsCache.push(await SignedHydratedTransactionWrapper.parse(hydratedTransaction));
|
|
264
296
|
} else {
|
|
265
|
-
this.
|
|
297
|
+
this.allPayloadsCache.push(payload);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
for (const hash of this.data[0].payload_hashes) {
|
|
301
|
+
const payload = this.allPayloadsCache.find((p) => p._hash === hash);
|
|
302
|
+
if (payload) {
|
|
303
|
+
if (isAllowedBlockPayloadWithHashStorageMeta2(payload)) {
|
|
304
|
+
this.publicPayloadsCache.push(payload);
|
|
305
|
+
} else {
|
|
306
|
+
throw new Error("Disallowed payload type");
|
|
307
|
+
}
|
|
266
308
|
}
|
|
267
309
|
}
|
|
268
310
|
if (validate) {
|
|
@@ -1 +1 @@
|
|
|
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, HydratedTransaction, HydratedTransactionInstance, TransactionFeesInstance, 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 {\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","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"]}
|
|
1
|
+
{"version":3,"sources":["../../src/lib/createSignatureWrappers.ts","../../src/Signature.ts","../../src/block/HydratedBlock.ts","../../src/transaction/SignedHydratedTransaction.ts","../../src/transaction/HydratedTransaction.ts","../../src/Fees.ts","../../src/block/SignedHydratedBlock.ts"],"sourcesContent":["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 { validateHydratedBlock } from '@xyo-network/chain-validation'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { WithHashStorageMeta } from '@xyo-network/payload-model'\nimport type {\n AllowedBlockPayload,\n HydratedBlock, HydratedBlockInstance, SignedHydratedTransaction, SignedHydratedTransactionInstance, Transfer,\n} from '@xyo-network/xl1-model'\nimport {\n isAllowedBlockPayloadWithHashStorageMeta,\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<[WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]> {\n data: [WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]\n protected allPayloadsCache: WithHashStorageMeta<WithHashStorageMeta<T[1][number]>>[] = []\n protected publicPayloadsCache: WithHashStorageMeta<WithHashStorageMeta<T[1][number] & AllowedBlockPayload>>[] = []\n protected transactionsCache: SignedHydratedTransactionInstance[] = []\n\n protected constructor(data: [WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]) {\n this.data = data\n }\n\n get boundWitness() {\n return this.data[0]\n }\n\n get payloadCount(): number {\n return this.allPayloadsCache.length\n }\n\n get payloads(): T[1][number][] {\n return [...this.allPayloadsCache]\n }\n\n get privatePayloadCount(): number {\n return this.data[1].length - this.publicPayloadCount\n }\n\n get publicPayloadCount(): number {\n return this.allPayloadsCache.length\n }\n\n get publicPayloads(): (T[1][number] & AllowedBlockPayload)[] {\n return [...this.publicPayloadsCache]\n }\n\n get reward(): bigint {\n return this.allPayloadsCache.reduce((acc: bigint, payload) => acc + (\n isTransfer(payload)\n ? payload.from === XYO_ZERO_ADDRESS\n ? sumTransfers(payload)\n : 0n\n : 0n), 0n)\n }\n\n get transactionCount(): number {\n return this.transactionsCache.length\n }\n\n get transactions(): SignedHydratedTransactionInstance[] {\n return this.transactionsCache\n }\n\n static async parse<T extends HydratedBlock>(block: T, validate = false): Promise<HydratedBlockInstance> {\n const wrapper = new HydratedBlockWrapper<T>(block)\n return await wrapper.parse(validate)\n }\n\n payload(index: number) {\n return this.data[1].at(index)\n }\n\n transaction(index: number): SignedHydratedTransactionInstance | undefined {\n return this.transactionsCache.at(index)\n }\n\n async validate(): Promise<Error[]> {\n return await validateHydratedBlock(this.data)\n }\n\n protected async parse(validate = false): Promise<HydratedBlockInstance<[WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]>> {\n const allPayloads = await PayloadBuilder.addStorageMeta(this.data[1])\n for (const payload of allPayloads) {\n if (isSignedTransactionBoundWitnessWithStorageMeta(payload)) {\n const hydratedTransaction: SignedHydratedTransaction = [payload, allPayloads.filter(\n p => payload.payload_hashes.includes(p._hash) || payload.payload_hashes.includes(p._dataHash),\n )]\n this.transactionsCache.push(await SignedHydratedTransactionWrapper.parse(hydratedTransaction))\n } else {\n this.allPayloadsCache.push(payload)\n }\n }\n for (const hash of this.data[0].payload_hashes) {\n const payload = this.allPayloadsCache.find(p => p._hash === hash)\n if (payload) {\n if (isAllowedBlockPayloadWithHashStorageMeta(payload)) {\n this.publicPayloadsCache.push(payload)\n } else {\n throw new Error('Disallowed payload type')\n }\n }\n }\n if (validate) {\n await this.validate()\n }\n return this\n }\n}\n","import { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { WithHashStorageMeta } from '@xyo-network/payload-model'\nimport type {\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<[WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]> {\n private _signatureCache: SignatureInstance[] = []\n\n get signatureCount(): number {\n return this._signatureCache.length\n }\n\n get signatures(): SignatureInstance[] {\n return [...this._signatureCache]\n }\n\n static override async parse<T extends SignedHydratedTransaction>(transaction: T, validate = false):\n Promise<SignedHydratedTransactionInstance<[WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]>> {\n const wrapper = new SignedHydratedTransactionWrapper<T>([\n await PayloadBuilder.addStorageMeta(transaction[0]),\n await PayloadBuilder.addStorageMeta(transaction[1]),\n ])\n return await wrapper.parse(validate)\n }\n\n signature(index: number): SignatureInstance | undefined {\n return this._signatureCache[index]\n }\n\n override async validate(): Promise<Error[]> {\n const errors: Error[] = []\n errors.push(\n ...(await Promise.all(this._signatureCache.map(signature => signature.validate()))).flat(),\n ...(await super.validate()),\n )\n return errors\n }\n\n protected override async parse(validate = false):\n Promise<SignedHydratedTransactionInstance<[WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]>> {\n this._signatureCache = await createSignatureWrappers(this.data[0])\n await super.parse(validate)\n return this\n }\n}\n","import { exists } from '@xylabs/exists'\nimport { hexToBigInt } from '@xylabs/hex'\nimport type { Promisable } from '@xylabs/promise'\nimport { XYO_ZERO_ADDRESS } from '@xyo-network/chain-utils'\nimport { validateTransaction } from '@xyo-network/chain-validation'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload, WithHashStorageMeta } from '@xyo-network/payload-model'\nimport type {\n AllowedBlockPayload, HydratedTransaction, HydratedTransactionInstance, HydratedTransactionWithHashStorageMeta, TransactionFeesInstance, Transfer,\n} from '@xyo-network/xl1-model'\nimport { isAllowedBlockPayloadWithHashStorageMeta, 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>\nimplements HydratedTransactionInstance<[WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]> {\n data: HydratedTransactionWithHashStorageMeta<T>\n fees: TransactionFeesInstance\n\n protected payloadsCache: WithHashStorageMeta<Payload>[] = []\n\n protected constructor(data: HydratedTransactionWithHashStorageMeta<T>) {\n this.data = data\n this.fees = new FeesWrapper(\n this.boundWitness.fees,\n )\n }\n\n get boundWitness() {\n return this.data[0]\n }\n\n get elevatedPayloadCount(): number {\n return 0\n }\n\n get elevatedPayloads(): WithHashStorageMeta<AllowedBlockPayload>[] {\n const elevatedHashes = (this.boundWitness.script ?? []).map((operation) => {\n const [opCode, ...args] = operation.split('|')\n if (opCode === 'elevate') {\n return args[0]\n }\n }).filter(exists)\n const elevated = elevatedHashes.map(hash => this.payloads.find(payload => payload._hash === hash)).filter(exists)\n return elevated.filter(isAllowedBlockPayloadWithHashStorageMeta)\n }\n\n get payloadCount(): number {\n return this.payloadsCache.length\n }\n\n get payloads(): WithHashStorageMeta<WithHashStorageMeta<T[1][number]>>[] {\n return [...this.payloadsCache]\n }\n\n static async parse<T extends HydratedTransaction>(transaction: T, validate = false):\n Promise<HydratedTransactionInstance<[WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]>> {\n const wrapper = new HydratedTransactionWrapper<T>(\n [\n await PayloadBuilder.addStorageMeta(transaction[0]),\n await PayloadBuilder.addStorageMeta(transaction[1]),\n ],\n )\n const parsed = await wrapper.parse()\n if (validate) {\n const errors = await wrapper.validate()\n if (errors.length > 0) {\n throw new Error(`Block validation failed: ${errors.join(', ')}`)\n }\n }\n return parsed\n }\n\n elevatedPayload(index: number): WithHashStorageMeta<AllowedBlockPayload & T[1][number]> | undefined {\n return this.elevatedPayloads.at(index)\n }\n\n gasRequired(): bigint {\n throw new Error('Method not implemented.')\n }\n\n payload(index: number): WithHashStorageMeta<Payload> | undefined {\n return this.payloads.at(index)\n }\n\n reward(): bigint {\n return this.payloadsCache.reduce((acc: bigint, payload) => acc + (\n isTransfer(payload)\n ? payload.from === XYO_ZERO_ADDRESS\n ? sumTransfers(payload)\n : 0n\n : 0n), 0n)\n }\n\n validate(): Promisable<Error[]> {\n return validateTransaction(this.data)\n }\n\n protected async parse(validate = false): Promise<HydratedTransactionInstance<[WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]>> {\n const transactionPayloads = await PayloadBuilder.addStorageMeta(this.data[1])\n for (const payload of transactionPayloads) {\n this.payloadsCache.push(payload)\n }\n if (validate) {\n await this.validate()\n }\n return this\n }\n}\n","import { 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 { WithHashStorageMeta } from '@xyo-network/payload-model'\nimport 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>\n implements SignedHydratedBlockInstance<[WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]> {\n private _signatureCache: SignatureInstance[] = []\n\n get signatureCount(): number {\n return this._signatureCache.length\n }\n\n get signatures(): SignatureInstance[] {\n return [...this._signatureCache]\n }\n\n static override async parse<T extends SignedHydratedBlock>(block: T, validate = false):\n Promise<SignedHydratedBlockInstance<[WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]>> {\n const wrapper = new SignedHydratedBlockWrapper<T>(block)\n return await wrapper.parse(validate)\n }\n\n signature(index: number): SignatureInstance | undefined {\n return this._signatureCache[index]\n }\n\n override async validate(): Promise<Error[]> {\n const errors: Error[] = []\n errors.push(\n ...(await Promise.all(this._signatureCache.map(signature => signature.validate()))).flat(),\n ...(await super.validate()),\n )\n return errors\n }\n\n protected override async parse(validate = false): Promise<SignedHydratedBlockInstance<[WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]>> {\n this._signatureCache = await createSignatureWrappers(this.data[0])\n await super.parse(validate)\n return this\n }\n}\n"],"mappings":";;;;AACA,SAASA,sBAAsB;;;ACD/B,SAASC,qBAAqB;AAI9B,SAASC,6BAA6B;AAG/B,IAAMC,mBAAN,MAAMA,kBAAAA;EAPb,OAOaA;;;EACXC;EACAC;EACAC;EAEAC,YAAYD,WAAgBF,SAAkBC,MAAY;AACxD,SAAKC,YAAYA;AACjB,SAAKF,UAAUA;AACf,SAAKC,OAAOA;EACd;EAEA,aAAaG,SAASH,MAAYD,SAAkBE,WAAkC;AACpF,WAAO,MAAMG,sBAAsBC,kBAAkBC,cAAcN,IAAAA,GAAOM,cAAcP,OAAAA,GAAUO,cAAcL,SAAAA,CAAAA;EAClH;EAEA,MAAME,WAA6B;AACjC,WAAO,MAAML,kBAAiBK,SAAS,KAAKJ,SAAS,KAAKC,MAAM,KAAKC,SAAS;EAChF;AACF;;;ADnBO,IAAMM,0BAA0B,8BAAOC,OAAAA;AAC5C,QAAMC,aAAkC,CAAA;AACxC,QAAMC,OAAO,MAAMC,eAAeC,SAASJ,EAAAA;AAC3C,WAASK,IAAI,GAAGA,IAAIL,GAAGM,YAAYC,QAAQF,KAAK;AAC9CJ,eAAWO,KACT,IAAIC,iBAAiBT,GAAGM,YAAYD,CAAAA,GAAIL,GAAGU,UAAUL,CAAAA,GAAIH,IAAAA,CAAAA;EAE7D;AACA,SAAOD;AACT,GATuC;;;AENvC,SAASU,eAAAA,oBAAmB;AAE5B,SAASC,oBAAAA,yBAAwB;AACjC,SAASC,6BAA6B;AACtC,SAASC,kBAAAA,uBAAsB;AAM/B,SACEC,4CAAAA,2CACAC,gDACAC,cAAAA,mBACK;;;ACdP,SAASC,kBAAAA,uBAAsB;;;ACA/B,SAASC,cAAc;AACvB,SAASC,eAAAA,oBAAmB;AAE5B,SAASC,wBAAwB;AACjC,SAASC,2BAA2B;AACpC,SAASC,kBAAAA,uBAAsB;AAK/B,SAASC,0CAA0CC,kBAAkB;;;ACVrE,SAASC,mBAAmB;AAOrB,IAAMC,cAAN,MAAMA,aAAAA;EAPb,OAOaA;;;EACXC;EACAC;EACAC;EACAC;EAEAC,YAAY,EACVJ,MAAMC,UAAUC,UAAUC,SAAQ,GACW;AAC7C,SAAKH,OAAO,OAAOA,SAAS,WAAWA,OAAOK,YAAYL,IAAAA;AAC1D,SAAKC,WAAW,OAAOA,aAAa,WAAWA,WAAWI,YAAYJ,QAAAA;AACtE,SAAKC,WAAW,OAAOA,aAAa,WAAWA,WAAWG,YAAYH,QAAAA;AACtE,SAAKC,WAAW,OAAOA,aAAa,WAAWA,WAAWE,YAAYF,QAAAA;EACxE;EAEA,OAAOG,SAAS,EACdN,MAAMC,UAAUC,UAAUC,SAAQ,GACgC;AAClE,UAAMI,SAAkB,CAAA;AACxB,UAAMC,YAAY,OAAOR,SAAS,WAAWA,OAAOK,YAAYL,IAAAA;AAChE,UAAMS,gBAAgB,OAAOR,aAAa,WAAWA,WAAWI,YAAYJ,QAAAA;AAC5E,UAAMS,gBAAgB,OAAOR,aAAa,WAAWA,WAAWG,YAAYH,QAAAA;AAC5E,UAAMS,gBAAgB,OAAOR,aAAa,WAAWA,WAAWE,YAAYF,QAAAA;AAC5E,QAAIK,aAAa,IAAI;AACnBD,aAAOK,KAAK,IAAIC,MAAM,qCAAA,CAAA;IACxB;AACA,QAAIJ,gBAAgB,IAAI;AACtBF,aAAOK,KAAK,IAAIC,MAAM,8BAAA,CAAA;IACxB;AACA,QAAIH,gBAAgB,IAAI;AACtBH,aAAOK,KAAK,IAAIC,MAAM,8BAAA,CAAA;IACxB;AACA,QAAIF,gBAAgB,IAAI;AACtBJ,aAAOK,KAAK,IAAIC,MAAM,6BAAA,CAAA;IACxB;AACA,WAAON;EACT;EAEA,MAAMD,WAA6B;AACjC,WAAO,MAAMP,aAAYO,SAAS;MAChCN,MAAM,KAAKA;MAAMC,UAAU,KAAKA;MAAUC,UAAU,KAAKA;MAAUC,UAAU,KAAKA;IACpF,CAAA;EACF;AACF;;;ADpCA,IAAMW,eAAe,wBAACC,YAAAA;AACpB,MAAIC,QAAQ;AACZ,WAASC,KAAKC,OAAOC,OAAOJ,QAAQK,SAAS,GAAG;AAC9CJ,aAASK,aAAYJ,CAAAA;EACvB;AACA,SAAOD;AACT,GANqB;AAQd,IAAMM,6BAAN,MAAMA,4BAAAA;EAtBb,OAsBaA;;;EAEXC;EACAC;EAEUC,gBAAgD,CAAA;EAE1D,YAAsBF,MAAiD;AACrE,SAAKA,OAAOA;AACZ,SAAKC,OAAO,IAAIE,YACd,KAAKC,aAAaH,IAAI;EAE1B;EAEA,IAAIG,eAAe;AACjB,WAAO,KAAKJ,KAAK,CAAA;EACnB;EAEA,IAAIK,uBAA+B;AACjC,WAAO;EACT;EAEA,IAAIC,mBAA+D;AACjE,UAAMC,kBAAkB,KAAKH,aAAaI,UAAU,CAAA,GAAIC,IAAI,CAACC,cAAAA;AAC3D,YAAM,CAACC,QAAQ,GAAGC,IAAAA,IAAQF,UAAUG,MAAM,GAAA;AAC1C,UAAIF,WAAW,WAAW;AACxB,eAAOC,KAAK,CAAA;MACd;IACF,CAAA,EAAGE,OAAOC,MAAAA;AACV,UAAMC,WAAWT,eAAeE,IAAIQ,CAAAA,SAAQ,KAAKC,SAASC,KAAK3B,CAAAA,YAAWA,QAAQ4B,UAAUH,IAAAA,CAAAA,EAAOH,OAAOC,MAAAA;AAC1G,WAAOC,SAASF,OAAOO,wCAAAA;EACzB;EAEA,IAAIC,eAAuB;AACzB,WAAO,KAAKpB,cAAcqB;EAC5B;EAEA,IAAIL,WAAqE;AACvE,WAAO;SAAI,KAAKhB;;EAClB;EAEA,aAAasB,MAAqCC,aAAgBC,WAAW,OAC0B;AACrG,UAAMC,UAAU,IAAI5B,4BAClB;MACE,MAAM6B,gBAAeC,eAAeJ,YAAY,CAAA,CAAE;MAClD,MAAMG,gBAAeC,eAAeJ,YAAY,CAAA,CAAE;KACnD;AAEH,UAAMK,SAAS,MAAMH,QAAQH,MAAK;AAClC,QAAIE,UAAU;AACZ,YAAMK,SAAS,MAAMJ,QAAQD,SAAQ;AACrC,UAAIK,OAAOR,SAAS,GAAG;AACrB,cAAM,IAAIS,MAAM,4BAA4BD,OAAOE,KAAK,IAAA,CAAA,EAAO;MACjE;IACF;AACA,WAAOH;EACT;EAEAI,gBAAgBC,OAAoF;AAClG,WAAO,KAAK7B,iBAAiB8B,GAAGD,KAAAA;EAClC;EAEAE,cAAsB;AACpB,UAAM,IAAIL,MAAM,yBAAA;EAClB;EAEAxC,QAAQ2C,OAAyD;AAC/D,WAAO,KAAKjB,SAASkB,GAAGD,KAAAA;EAC1B;EAEAG,SAAiB;AACf,WAAO,KAAKpC,cAAcqC,OAAO,CAACC,KAAahD,YAAYgD,OACzDC,WAAWjD,OAAAA,IACPA,QAAQkD,SAASC,mBACfpD,aAAaC,OAAAA,IACb,KACF,KAAK,EAAE;EACf;EAEAkC,WAAgC;AAC9B,WAAOkB,oBAAoB,KAAK5C,IAAI;EACtC;EAEA,MAAgBwB,MAAME,WAAW,OAA+G;AAC9I,UAAMmB,sBAAsB,MAAMjB,gBAAeC,eAAe,KAAK7B,KAAK,CAAA,CAAE;AAC5E,eAAWR,WAAWqD,qBAAqB;AACzC,WAAK3C,cAAc4C,KAAKtD,OAAAA;IAC1B;AACA,QAAIkC,UAAU;AACZ,YAAM,KAAKA,SAAQ;IACrB;AACA,WAAO;EACT;AACF;;;ADzGO,IAAMqB,mCAAN,MAAMA,0CAA8EC,2BAAAA;EAX3F,OAW2FA;;;EAEjFC,kBAAuC,CAAA;EAE/C,IAAIC,iBAAyB;AAC3B,WAAO,KAAKD,gBAAgBE;EAC9B;EAEA,IAAIC,aAAkC;AACpC,WAAO;SAAI,KAAKH;;EAClB;EAEA,aAAsBI,MAA2CC,aAAgBC,WAAW,OACiB;AAC3G,UAAMC,UAAU,IAAIT,kCAAoC;MACtD,MAAMU,gBAAeC,eAAeJ,YAAY,CAAA,CAAE;MAClD,MAAMG,gBAAeC,eAAeJ,YAAY,CAAA,CAAE;KACnD;AACD,WAAO,MAAME,QAAQH,MAAME,QAAAA;EAC7B;EAEAI,UAAUC,OAA8C;AACtD,WAAO,KAAKX,gBAAgBW,KAAAA;EAC9B;EAEA,MAAeL,WAA6B;AAC1C,UAAMM,SAAkB,CAAA;AACxBA,WAAOC,KAAI,IACL,MAAMC,QAAQC,IAAI,KAAKf,gBAAgBgB,IAAIN,CAAAA,cAAaA,UAAUJ,SAAQ,CAAA,CAAA,GAAMW,KAAI,GAAA,GACpF,MAAM,MAAMX,SAAAA,CAAAA;AAElB,WAAOM;EACT;EAEA,MAAyBR,MAAME,WAAW,OACmE;AAC3G,SAAKN,kBAAkB,MAAMkB,wBAAwB,KAAKC,KAAK,CAAA,CAAE;AACjE,UAAM,MAAMf,MAAME,QAAAA;AAClB,WAAO;EACT;AACF;;;ADjCA,IAAMc,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;EA1Bb,OA0BaA;;;EACXC;EACUC,mBAA6E,CAAA;EAC7EC,sBAAsG,CAAA;EACtGC,oBAAyD,CAAA;EAEnE,YAAsBH,MAAwE;AAC5F,SAAKA,OAAOA;EACd;EAEA,IAAII,eAAe;AACjB,WAAO,KAAKJ,KAAK,CAAA;EACnB;EAEA,IAAIK,eAAuB;AACzB,WAAO,KAAKJ,iBAAiBK;EAC/B;EAEA,IAAIC,WAA2B;AAC7B,WAAO;SAAI,KAAKN;;EAClB;EAEA,IAAIO,sBAA8B;AAChC,WAAO,KAAKR,KAAK,CAAA,EAAGM,SAAS,KAAKG;EACpC;EAEA,IAAIA,qBAA6B;AAC/B,WAAO,KAAKR,iBAAiBK;EAC/B;EAEA,IAAII,iBAAyD;AAC3D,WAAO;SAAI,KAAKR;;EAClB;EAEA,IAAIS,SAAiB;AACnB,WAAO,KAAKV,iBAAiBW,OAAO,CAACC,KAAarB,YAAYqB,OAC5DC,YAAWtB,OAAAA,IACPA,QAAQuB,SAASC,oBACfzB,cAAaC,OAAAA,IACb,KACF,KAAK,EAAE;EACf;EAEA,IAAIyB,mBAA2B;AAC7B,WAAO,KAAKd,kBAAkBG;EAChC;EAEA,IAAIY,eAAoD;AACtD,WAAO,KAAKf;EACd;EAEA,aAAagB,MAA+BC,OAAUC,WAAW,OAAuC;AACtG,UAAMC,UAAU,IAAIvB,sBAAwBqB,KAAAA;AAC5C,WAAO,MAAME,QAAQH,MAAME,QAAAA;EAC7B;EAEA7B,QAAQ+B,OAAe;AACrB,WAAO,KAAKvB,KAAK,CAAA,EAAGwB,GAAGD,KAAAA;EACzB;EAEAE,YAAYF,OAA8D;AACxE,WAAO,KAAKpB,kBAAkBqB,GAAGD,KAAAA;EACnC;EAEA,MAAMF,WAA6B;AACjC,WAAO,MAAMK,sBAAsB,KAAK1B,IAAI;EAC9C;EAEA,MAAgBmB,MAAME,WAAW,OAAyG;AACxI,UAAMM,cAAc,MAAMC,gBAAeC,eAAe,KAAK7B,KAAK,CAAA,CAAE;AACpE,eAAWR,WAAWmC,aAAa;AACjC,UAAIG,+CAA+CtC,OAAAA,GAAU;AAC3D,cAAMuC,sBAAiD;UAACvC;UAASmC,YAAYK,OAC3EC,CAAAA,MAAKzC,QAAQ0C,eAAeC,SAASF,EAAEG,KAAK,KAAK5C,QAAQ0C,eAAeC,SAASF,EAAEI,SAAS,CAAA;;AAE9F,aAAKlC,kBAAkBmC,KAAK,MAAMC,iCAAiCpB,MAAMY,mBAAAA,CAAAA;MAC3E,OAAO;AACL,aAAK9B,iBAAiBqC,KAAK9C,OAAAA;MAC7B;IACF;AACA,eAAWgD,QAAQ,KAAKxC,KAAK,CAAA,EAAGkC,gBAAgB;AAC9C,YAAM1C,UAAU,KAAKS,iBAAiBwC,KAAKR,CAAAA,MAAKA,EAAEG,UAAUI,IAAAA;AAC5D,UAAIhD,SAAS;AACX,YAAIkD,0CAAyClD,OAAAA,GAAU;AACrD,eAAKU,oBAAoBoC,KAAK9C,OAAAA;QAChC,OAAO;AACL,gBAAM,IAAImD,MAAM,yBAAA;QAClB;MACF;IACF;AACA,QAAItB,UAAU;AACZ,YAAM,KAAKA,SAAQ;IACrB;AACA,WAAO;EACT;AACF;;;AIhHO,IAAMuB,6BAAN,MAAMA,oCAAkEC,qBAAAA;EAH/E,OAG+EA;;;EAErEC,kBAAuC,CAAA;EAE/C,IAAIC,iBAAyB;AAC3B,WAAO,KAAKD,gBAAgBE;EAC9B;EAEA,IAAIC,aAAkC;AACpC,WAAO;SAAI,KAAKH;;EAClB;EAEA,aAAsBI,MAAqCC,OAAUC,WAAW,OACuB;AACrG,UAAMC,UAAU,IAAIT,4BAA8BO,KAAAA;AAClD,WAAO,MAAME,QAAQH,MAAME,QAAAA;EAC7B;EAEAE,UAAUC,OAA8C;AACtD,WAAO,KAAKT,gBAAgBS,KAAAA;EAC9B;EAEA,MAAeH,WAA6B;AAC1C,UAAMI,SAAkB,CAAA;AACxBA,WAAOC,KAAI,IACL,MAAMC,QAAQC,IAAI,KAAKb,gBAAgBc,IAAIN,CAAAA,cAAaA,UAAUF,SAAQ,CAAA,CAAA,GAAMS,KAAI,GAAA,GACpF,MAAM,MAAMT,SAAAA,CAAAA;AAElB,WAAOI;EACT;EAEA,MAAyBN,MAAME,WAAW,OAA+G;AACvJ,SAAKN,kBAAkB,MAAMgB,wBAAwB,KAAKC,KAAK,CAAA,CAAE;AACjE,UAAM,MAAMb,MAAME,QAAAA;AAClB,WAAO;EACT;AACF;","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","validateHydratedBlock","PayloadBuilder","isAllowedBlockPayloadWithHashStorageMeta","isSignedTransactionBoundWitnessWithStorageMeta","isTransfer","PayloadBuilder","exists","hexToBigInt","XYO_ZERO_ADDRESS","validateTransaction","PayloadBuilder","isAllowedBlockPayloadWithHashStorageMeta","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","FeesWrapper","boundWitness","elevatedPayloadCount","elevatedPayloads","elevatedHashes","script","map","operation","opCode","args","split","filter","exists","elevated","hash","payloads","find","_hash","isAllowedBlockPayloadWithHashStorageMeta","payloadCount","length","parse","transaction","validate","wrapper","PayloadBuilder","addStorageMeta","parsed","errors","Error","join","elevatedPayload","index","at","gasRequired","reward","reduce","acc","isTransfer","from","XYO_ZERO_ADDRESS","validateTransaction","transactionPayloads","push","SignedHydratedTransactionWrapper","HydratedTransactionWrapper","_signatureCache","signatureCount","length","signatures","parse","transaction","validate","wrapper","PayloadBuilder","addStorageMeta","signature","index","errors","push","Promise","all","map","flat","createSignatureWrappers","data","sumTransfers","payload","total","i","Object","values","transfers","hexToBigInt","HydratedBlockWrapper","data","allPayloadsCache","publicPayloadsCache","transactionsCache","boundWitness","payloadCount","length","payloads","privatePayloadCount","publicPayloadCount","publicPayloads","reward","reduce","acc","isTransfer","from","XYO_ZERO_ADDRESS","transactionCount","transactions","parse","block","validate","wrapper","index","at","transaction","validateHydratedBlock","allPayloads","PayloadBuilder","addStorageMeta","isSignedTransactionBoundWitnessWithStorageMeta","hydratedTransaction","filter","p","payload_hashes","includes","_hash","_dataHash","push","SignedHydratedTransactionWrapper","hash","find","isAllowedBlockPayloadWithHashStorageMeta","Error","SignedHydratedBlockWrapper","HydratedBlockWrapper","_signatureCache","signatureCount","length","signatures","parse","block","validate","wrapper","signature","index","errors","push","Promise","all","map","flat","createSignatureWrappers","data"]}
|
|
@@ -1,22 +1,24 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
protected
|
|
1
|
+
import type { WithHashStorageMeta } from '@xyo-network/payload-model';
|
|
2
|
+
import type { AllowedBlockPayload, HydratedBlock, HydratedBlockInstance, SignedHydratedTransactionInstance } from '@xyo-network/xl1-model';
|
|
3
|
+
export declare class HydratedBlockWrapper<T extends HydratedBlock> implements HydratedBlockInstance<[WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]> {
|
|
4
|
+
data: [WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]];
|
|
5
|
+
protected allPayloadsCache: WithHashStorageMeta<WithHashStorageMeta<T[1][number]>>[];
|
|
6
|
+
protected publicPayloadsCache: WithHashStorageMeta<WithHashStorageMeta<T[1][number] & AllowedBlockPayload>>[];
|
|
7
7
|
protected transactionsCache: SignedHydratedTransactionInstance[];
|
|
8
|
-
protected constructor(
|
|
9
|
-
get boundWitness(): T[0]
|
|
10
|
-
get fees(): TransactionFeesInstance;
|
|
8
|
+
protected constructor(data: [WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]);
|
|
9
|
+
get boundWitness(): WithHashStorageMeta<T[0]>;
|
|
11
10
|
get payloadCount(): number;
|
|
12
11
|
get payloads(): T[1][number][];
|
|
12
|
+
get privatePayloadCount(): number;
|
|
13
|
+
get publicPayloadCount(): number;
|
|
14
|
+
get publicPayloads(): (T[1][number] & AllowedBlockPayload)[];
|
|
13
15
|
get reward(): bigint;
|
|
14
16
|
get transactionCount(): number;
|
|
15
17
|
get transactions(): SignedHydratedTransactionInstance[];
|
|
16
18
|
static parse<T extends HydratedBlock>(block: T, validate?: boolean): Promise<HydratedBlockInstance>;
|
|
17
|
-
payload(index: number): T[1][number] | undefined;
|
|
19
|
+
payload(index: number): WithHashStorageMeta<T[1][number]> | undefined;
|
|
18
20
|
transaction(index: number): SignedHydratedTransactionInstance | undefined;
|
|
19
|
-
validate():
|
|
20
|
-
protected parse(validate?: boolean): Promise<HydratedBlockInstance<T>>;
|
|
21
|
+
validate(): Promise<Error[]>;
|
|
22
|
+
protected parse(validate?: boolean): Promise<HydratedBlockInstance<[WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]>>;
|
|
21
23
|
}
|
|
22
24
|
//# sourceMappingURL=HydratedBlock.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HydratedBlock.d.ts","sourceRoot":"","sources":["../../../src/block/HydratedBlock.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"HydratedBlock.d.ts","sourceRoot":"","sources":["../../../src/block/HydratedBlock.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AACrE,OAAO,KAAK,EACV,mBAAmB,EACnB,aAAa,EAAE,qBAAqB,EAA6B,iCAAiC,EACnG,MAAM,wBAAwB,CAAA;AAiB/B,qBAAa,oBAAoB,CAAC,CAAC,SAAS,aAAa,CAAE,YAAW,qBAAqB,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;IAC3J,IAAI,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAA;IACtE,SAAS,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAK;IACzF,SAAS,CAAC,mBAAmB,EAAE,mBAAmB,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,mBAAmB,CAAC,CAAC,EAAE,CAAK;IAClH,SAAS,CAAC,iBAAiB,EAAE,iCAAiC,EAAE,CAAK;IAErE,SAAS,aAAa,IAAI,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;IAI5F,IAAI,YAAY,8BAEf;IAED,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,IAAI,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAE7B;IAED,IAAI,mBAAmB,IAAI,MAAM,CAEhC;IAED,IAAI,kBAAkB,IAAI,MAAM,CAE/B;IAED,IAAI,cAAc,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,mBAAmB,CAAC,EAAE,CAE3D;IAED,IAAI,MAAM,IAAI,MAAM,CAOnB;IAED,IAAI,gBAAgB,IAAI,MAAM,CAE7B;IAED,IAAI,YAAY,IAAI,iCAAiC,EAAE,CAEtD;WAEY,KAAK,CAAC,CAAC,SAAS,aAAa,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,UAAQ,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAKvG,OAAO,CAAC,KAAK,EAAE,MAAM;IAIrB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,iCAAiC,GAAG,SAAS;IAInE,QAAQ,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;cAIlB,KAAK,CAAC,QAAQ,UAAQ,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CA2B1I"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
+
import type { WithHashStorageMeta } from '@xyo-network/payload-model';
|
|
1
2
|
import type { SignatureInstance, SignedHydratedBlock, SignedHydratedBlockInstance } from '@xyo-network/xl1-model';
|
|
2
3
|
import { HydratedBlockWrapper } from './HydratedBlock.ts';
|
|
3
|
-
export declare class SignedHydratedBlockWrapper<T extends SignedHydratedBlock> extends HydratedBlockWrapper<T> implements SignedHydratedBlockInstance<T> {
|
|
4
|
+
export declare class SignedHydratedBlockWrapper<T extends SignedHydratedBlock> extends HydratedBlockWrapper<T> implements SignedHydratedBlockInstance<[WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]> {
|
|
4
5
|
private _signatureCache;
|
|
5
6
|
get signatureCount(): number;
|
|
6
7
|
get signatures(): SignatureInstance[];
|
|
7
|
-
static parse<T extends SignedHydratedBlock>(block: T, validate?: boolean): Promise<SignedHydratedBlockInstance<T>>;
|
|
8
|
+
static parse<T extends SignedHydratedBlock>(block: T, validate?: boolean): Promise<SignedHydratedBlockInstance<[WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]>>;
|
|
8
9
|
signature(index: number): SignatureInstance | undefined;
|
|
9
10
|
validate(): Promise<Error[]>;
|
|
10
|
-
protected parse(validate?: boolean): Promise<SignedHydratedBlockInstance<T>>;
|
|
11
|
+
protected parse(validate?: boolean): Promise<SignedHydratedBlockInstance<[WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]>>;
|
|
11
12
|
}
|
|
12
13
|
//# 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;AAG/B,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AAEzD,qBAAa,0BAA0B,CAAC,CAAC,SAAS,mBAAmB,CAAE,SAAQ,oBAAoB,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"SignedHydratedBlock.d.ts","sourceRoot":"","sources":["../../../src/block/SignedHydratedBlock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AACrE,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,CACnG,YAAW,2BAA2B,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;IACxG,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,GACrF,OAAO,CAAC,2BAA2B,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAKtG,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,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CAKzJ"}
|
|
@@ -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, HydratedTransaction, HydratedTransactionInstance, TransactionFeesInstance } from '@xyo-network/xl1-model';
|
|
4
|
-
export declare class HydratedTransactionWrapper<T extends HydratedTransaction> implements HydratedTransactionInstance<T> {
|
|
5
|
-
data: T
|
|
3
|
+
import type { AllowedBlockPayload, HydratedTransaction, HydratedTransactionInstance, HydratedTransactionWithHashStorageMeta, TransactionFeesInstance } from '@xyo-network/xl1-model';
|
|
4
|
+
export declare class HydratedTransactionWrapper<T extends HydratedTransaction> implements HydratedTransactionInstance<[WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]> {
|
|
5
|
+
data: HydratedTransactionWithHashStorageMeta<T>;
|
|
6
6
|
fees: TransactionFeesInstance;
|
|
7
7
|
protected payloadsCache: WithHashStorageMeta<Payload>[];
|
|
8
|
-
protected constructor(
|
|
9
|
-
get boundWitness(): T[0]
|
|
8
|
+
protected constructor(data: HydratedTransactionWithHashStorageMeta<T>);
|
|
9
|
+
get boundWitness(): WithHashStorageMeta<T[0]>;
|
|
10
10
|
get elevatedPayloadCount(): number;
|
|
11
|
-
get elevatedPayloads(): AllowedBlockPayload[];
|
|
11
|
+
get elevatedPayloads(): WithHashStorageMeta<AllowedBlockPayload>[];
|
|
12
12
|
get payloadCount(): number;
|
|
13
|
-
get payloads():
|
|
14
|
-
static parse<T extends HydratedTransaction>(transaction: T, validate?: boolean): Promise<HydratedTransactionInstance<T>>;
|
|
15
|
-
elevatedPayload(
|
|
13
|
+
get payloads(): WithHashStorageMeta<WithHashStorageMeta<T[1][number]>>[];
|
|
14
|
+
static parse<T extends HydratedTransaction>(transaction: T, validate?: boolean): Promise<HydratedTransactionInstance<[WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]>>;
|
|
15
|
+
elevatedPayload(index: number): WithHashStorageMeta<AllowedBlockPayload & T[1][number]> | undefined;
|
|
16
16
|
gasRequired(): bigint;
|
|
17
|
-
payload(
|
|
17
|
+
payload(index: number): WithHashStorageMeta<Payload> | undefined;
|
|
18
18
|
reward(): bigint;
|
|
19
19
|
validate(): Promisable<Error[]>;
|
|
20
|
-
protected parse(validate?: boolean): Promise<HydratedTransactionInstance<T>>;
|
|
20
|
+
protected parse(validate?: boolean): Promise<HydratedTransactionInstance<[WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]>>;
|
|
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":"
|
|
1
|
+
{"version":3,"file":"HydratedTransaction.d.ts","sourceRoot":"","sources":["../../../src/transaction/HydratedTransaction.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAIjD,OAAO,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAC9E,OAAO,KAAK,EACV,mBAAmB,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,sCAAsC,EAAE,uBAAuB,EACvI,MAAM,wBAAwB,CAAA;AAa/B,qBAAa,0BAA0B,CAAC,CAAC,SAAS,mBAAmB,CACrE,YAAW,2BAA2B,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;IACtG,IAAI,EAAE,sCAAsC,CAAC,CAAC,CAAC,CAAA;IAC/C,IAAI,EAAE,uBAAuB,CAAA;IAE7B,SAAS,CAAC,aAAa,EAAE,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAAK;IAE5D,SAAS,aAAa,IAAI,EAAE,sCAAsC,CAAC,CAAC,CAAC;IAOrE,IAAI,YAAY,8BAEf;IAED,IAAI,oBAAoB,IAAI,MAAM,CAEjC;IAED,IAAI,gBAAgB,IAAI,mBAAmB,CAAC,mBAAmB,CAAC,EAAE,CASjE;IAED,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,IAAI,QAAQ,IAAI,mBAAmB,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAEvE;WAEY,KAAK,CAAC,CAAC,SAAS,mBAAmB,EAAE,WAAW,EAAE,CAAC,EAAE,QAAQ,UAAQ,GAClF,OAAO,CAAC,2BAA2B,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAiBtG,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,mBAAmB,CAAC,mBAAmB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS;IAInG,WAAW,IAAI,MAAM;IAIrB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,mBAAmB,CAAC,OAAO,CAAC,GAAG,SAAS;IAIhE,MAAM,IAAI,MAAM;IAShB,QAAQ,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;cAIf,KAAK,CAAC,QAAQ,UAAQ,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CAUhJ"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
+
import type { WithHashStorageMeta } from '@xyo-network/payload-model';
|
|
1
2
|
import type { SignatureInstance, SignedHydratedTransaction, SignedHydratedTransactionInstance } from '@xyo-network/xl1-model';
|
|
2
3
|
import { HydratedTransactionWrapper } from './HydratedTransaction.ts';
|
|
3
|
-
export declare class SignedHydratedTransactionWrapper<T extends SignedHydratedTransaction> extends HydratedTransactionWrapper<T> implements SignedHydratedTransactionInstance<T> {
|
|
4
|
+
export declare class SignedHydratedTransactionWrapper<T extends SignedHydratedTransaction> extends HydratedTransactionWrapper<T> implements SignedHydratedTransactionInstance<[WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]> {
|
|
4
5
|
private _signatureCache;
|
|
5
6
|
get signatureCount(): number;
|
|
6
7
|
get signatures(): SignatureInstance[];
|
|
7
|
-
static parse<T extends SignedHydratedTransaction>(
|
|
8
|
+
static parse<T extends SignedHydratedTransaction>(transaction: T, validate?: boolean): Promise<SignedHydratedTransactionInstance<[WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]>>;
|
|
8
9
|
signature(index: number): SignatureInstance | undefined;
|
|
9
10
|
validate(): Promise<Error[]>;
|
|
10
|
-
protected parse(validate?: boolean): Promise<SignedHydratedTransactionInstance<T>>;
|
|
11
|
+
protected parse(validate?: boolean): Promise<SignedHydratedTransactionInstance<[WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]>>;
|
|
11
12
|
}
|
|
12
13
|
//# 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,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AACrE,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,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;IAC9G,OAAO,CAAC,eAAe,CAA0B;IAEjD,IAAI,cAAc,IAAI,MAAM,CAE3B;IAED,IAAI,UAAU,IAAI,iBAAiB,EAAE,CAEpC;WAEqB,KAAK,CAAC,CAAC,SAAS,yBAAyB,EAAE,WAAW,EAAE,CAAC,EAAE,QAAQ,UAAQ,GACjG,OAAO,CAAC,iCAAiC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAQ5G,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAIxC,QAAQ,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;cASlB,KAAK,CAAC,QAAQ,UAAQ,GAC/C,OAAO,CAAC,iCAAiC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CAK7G"}
|
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.3.
|
|
4
|
+
"version": "1.3.3",
|
|
5
5
|
"description": "XYO Layer One SDK Wrappers",
|
|
6
6
|
"homepage": "https://xylabs.com",
|
|
7
7
|
"bugs": {
|
|
@@ -37,9 +37,10 @@
|
|
|
37
37
|
"@xylabs/arraybuffer": "^4.8.7",
|
|
38
38
|
"@xylabs/promise": "^4.8.7",
|
|
39
39
|
"@xyo-network/boundwitness-validator": "^3.13.0",
|
|
40
|
-
"@xyo-network/chain-utils": "^1.3.
|
|
40
|
+
"@xyo-network/chain-utils": "^1.3.3",
|
|
41
|
+
"@xyo-network/chain-validation": "^1.3.3",
|
|
41
42
|
"@xyo-network/payload-model": "^3.13.0",
|
|
42
|
-
"@xyo-network/xl1-model": "^1.3.
|
|
43
|
+
"@xyo-network/xl1-model": "^1.3.3"
|
|
43
44
|
},
|
|
44
45
|
"devDependencies": {
|
|
45
46
|
"@types/node": "^22.14.1",
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import { hexToBigInt } from '@xylabs/hex'
|
|
2
2
|
import type { Promisable } from '@xylabs/promise'
|
|
3
3
|
import { XYO_ZERO_ADDRESS } from '@xyo-network/chain-utils'
|
|
4
|
+
import { validateHydratedBlock } from '@xyo-network/chain-validation'
|
|
4
5
|
import { PayloadBuilder } from '@xyo-network/payload-builder'
|
|
5
|
-
import type {
|
|
6
|
+
import type { WithHashStorageMeta } from '@xyo-network/payload-model'
|
|
6
7
|
import type {
|
|
7
|
-
|
|
8
|
-
|
|
8
|
+
AllowedBlockPayload,
|
|
9
|
+
HydratedBlock, HydratedBlockInstance, SignedHydratedTransaction, SignedHydratedTransactionInstance, Transfer,
|
|
9
10
|
} from '@xyo-network/xl1-model'
|
|
10
11
|
import {
|
|
12
|
+
isAllowedBlockPayloadWithHashStorageMeta,
|
|
11
13
|
isSignedTransactionBoundWitnessWithStorageMeta,
|
|
12
14
|
isTransfer,
|
|
13
15
|
} from '@xyo-network/xl1-model'
|
|
@@ -22,33 +24,42 @@ const sumTransfers = (payload: Transfer) => {
|
|
|
22
24
|
return total
|
|
23
25
|
}
|
|
24
26
|
|
|
25
|
-
export class HydratedBlockWrapper<T extends HydratedBlock> implements HydratedBlockInstance<T> {
|
|
26
|
-
data: T
|
|
27
|
-
protected
|
|
27
|
+
export class HydratedBlockWrapper<T extends HydratedBlock> implements HydratedBlockInstance<[WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]> {
|
|
28
|
+
data: [WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]
|
|
29
|
+
protected allPayloadsCache: WithHashStorageMeta<WithHashStorageMeta<T[1][number]>>[] = []
|
|
30
|
+
protected publicPayloadsCache: WithHashStorageMeta<WithHashStorageMeta<T[1][number] & AllowedBlockPayload>>[] = []
|
|
28
31
|
protected transactionsCache: SignedHydratedTransactionInstance[] = []
|
|
29
32
|
|
|
30
|
-
protected constructor(
|
|
31
|
-
this.data =
|
|
33
|
+
protected constructor(data: [WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]) {
|
|
34
|
+
this.data = data
|
|
32
35
|
}
|
|
33
36
|
|
|
34
|
-
get boundWitness()
|
|
35
|
-
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
get fees(): TransactionFeesInstance {
|
|
39
|
-
throw new Error('Method not implemented.')
|
|
37
|
+
get boundWitness() {
|
|
38
|
+
return this.data[0]
|
|
40
39
|
}
|
|
41
40
|
|
|
42
41
|
get payloadCount(): number {
|
|
43
|
-
return this.
|
|
42
|
+
return this.allPayloadsCache.length
|
|
44
43
|
}
|
|
45
44
|
|
|
46
45
|
get payloads(): T[1][number][] {
|
|
47
|
-
return this.
|
|
46
|
+
return [...this.allPayloadsCache]
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
get privatePayloadCount(): number {
|
|
50
|
+
return this.data[1].length - this.publicPayloadCount
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
get publicPayloadCount(): number {
|
|
54
|
+
return this.allPayloadsCache.length
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
get publicPayloads(): (T[1][number] & AllowedBlockPayload)[] {
|
|
58
|
+
return [...this.publicPayloadsCache]
|
|
48
59
|
}
|
|
49
60
|
|
|
50
61
|
get reward(): bigint {
|
|
51
|
-
return this.
|
|
62
|
+
return this.allPayloadsCache.reduce((acc: bigint, payload) => acc + (
|
|
52
63
|
isTransfer(payload)
|
|
53
64
|
? payload.from === XYO_ZERO_ADDRESS
|
|
54
65
|
? sumTransfers(payload)
|
|
@@ -69,28 +80,38 @@ export class HydratedBlockWrapper<T extends HydratedBlock> implements HydratedBl
|
|
|
69
80
|
return await wrapper.parse(validate)
|
|
70
81
|
}
|
|
71
82
|
|
|
72
|
-
payload(index: number)
|
|
73
|
-
return this.
|
|
83
|
+
payload(index: number) {
|
|
84
|
+
return this.data[1].at(index)
|
|
74
85
|
}
|
|
75
86
|
|
|
76
87
|
transaction(index: number): SignedHydratedTransactionInstance | undefined {
|
|
77
88
|
return this.transactionsCache.at(index)
|
|
78
89
|
}
|
|
79
90
|
|
|
80
|
-
validate():
|
|
81
|
-
return
|
|
91
|
+
async validate(): Promise<Error[]> {
|
|
92
|
+
return await validateHydratedBlock(this.data)
|
|
82
93
|
}
|
|
83
94
|
|
|
84
|
-
protected async parse(validate = false): Promise<HydratedBlockInstance<T>> {
|
|
85
|
-
const
|
|
86
|
-
for (const payload of
|
|
95
|
+
protected async parse(validate = false): Promise<HydratedBlockInstance<[WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]>> {
|
|
96
|
+
const allPayloads = await PayloadBuilder.addStorageMeta(this.data[1])
|
|
97
|
+
for (const payload of allPayloads) {
|
|
87
98
|
if (isSignedTransactionBoundWitnessWithStorageMeta(payload)) {
|
|
88
|
-
const hydratedTransaction: SignedHydratedTransaction = [payload,
|
|
99
|
+
const hydratedTransaction: SignedHydratedTransaction = [payload, allPayloads.filter(
|
|
89
100
|
p => payload.payload_hashes.includes(p._hash) || payload.payload_hashes.includes(p._dataHash),
|
|
90
101
|
)]
|
|
91
102
|
this.transactionsCache.push(await SignedHydratedTransactionWrapper.parse(hydratedTransaction))
|
|
92
103
|
} else {
|
|
93
|
-
this.
|
|
104
|
+
this.allPayloadsCache.push(payload)
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
for (const hash of this.data[0].payload_hashes) {
|
|
108
|
+
const payload = this.allPayloadsCache.find(p => p._hash === hash)
|
|
109
|
+
if (payload) {
|
|
110
|
+
if (isAllowedBlockPayloadWithHashStorageMeta(payload)) {
|
|
111
|
+
this.publicPayloadsCache.push(payload)
|
|
112
|
+
} else {
|
|
113
|
+
throw new Error('Disallowed payload type')
|
|
114
|
+
}
|
|
94
115
|
}
|
|
95
116
|
}
|
|
96
117
|
if (validate) {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { WithHashStorageMeta } from '@xyo-network/payload-model'
|
|
1
2
|
import type {
|
|
2
3
|
SignatureInstance, SignedHydratedBlock,
|
|
3
4
|
SignedHydratedBlockInstance,
|
|
@@ -6,7 +7,8 @@ import type {
|
|
|
6
7
|
import { createSignatureWrappers } from '../lib/createSignatureWrappers.ts'
|
|
7
8
|
import { HydratedBlockWrapper } from './HydratedBlock.ts'
|
|
8
9
|
|
|
9
|
-
export class SignedHydratedBlockWrapper<T extends SignedHydratedBlock> extends HydratedBlockWrapper<T>
|
|
10
|
+
export class SignedHydratedBlockWrapper<T extends SignedHydratedBlock> extends HydratedBlockWrapper<T>
|
|
11
|
+
implements SignedHydratedBlockInstance<[WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]> {
|
|
10
12
|
private _signatureCache: SignatureInstance[] = []
|
|
11
13
|
|
|
12
14
|
get signatureCount(): number {
|
|
@@ -17,7 +19,8 @@ export class SignedHydratedBlockWrapper<T extends SignedHydratedBlock> extends H
|
|
|
17
19
|
return [...this._signatureCache]
|
|
18
20
|
}
|
|
19
21
|
|
|
20
|
-
static override async parse<T extends SignedHydratedBlock>(block: T, validate = false):
|
|
22
|
+
static override async parse<T extends SignedHydratedBlock>(block: T, validate = false):
|
|
23
|
+
Promise<SignedHydratedBlockInstance<[WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]>> {
|
|
21
24
|
const wrapper = new SignedHydratedBlockWrapper<T>(block)
|
|
22
25
|
return await wrapper.parse(validate)
|
|
23
26
|
}
|
|
@@ -35,7 +38,7 @@ export class SignedHydratedBlockWrapper<T extends SignedHydratedBlock> extends H
|
|
|
35
38
|
return errors
|
|
36
39
|
}
|
|
37
40
|
|
|
38
|
-
protected override async parse(validate = false): Promise<SignedHydratedBlockInstance<T>> {
|
|
41
|
+
protected override async parse(validate = false): Promise<SignedHydratedBlockInstance<[WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]>> {
|
|
39
42
|
this._signatureCache = await createSignatureWrappers(this.data[0])
|
|
40
43
|
await super.parse(validate)
|
|
41
44
|
return this
|
|
@@ -1,12 +1,14 @@
|
|
|
1
|
+
import { exists } from '@xylabs/exists'
|
|
1
2
|
import { hexToBigInt } from '@xylabs/hex'
|
|
2
3
|
import type { Promisable } from '@xylabs/promise'
|
|
3
4
|
import { XYO_ZERO_ADDRESS } from '@xyo-network/chain-utils'
|
|
5
|
+
import { validateTransaction } from '@xyo-network/chain-validation'
|
|
4
6
|
import { PayloadBuilder } from '@xyo-network/payload-builder'
|
|
5
7
|
import type { Payload, WithHashStorageMeta } from '@xyo-network/payload-model'
|
|
6
8
|
import type {
|
|
7
|
-
AllowedBlockPayload, HydratedTransaction, HydratedTransactionInstance, TransactionFeesInstance, Transfer,
|
|
9
|
+
AllowedBlockPayload, HydratedTransaction, HydratedTransactionInstance, HydratedTransactionWithHashStorageMeta, TransactionFeesInstance, Transfer,
|
|
8
10
|
} from '@xyo-network/xl1-model'
|
|
9
|
-
import { isTransfer } from '@xyo-network/xl1-model'
|
|
11
|
+
import { isAllowedBlockPayloadWithHashStorageMeta, isTransfer } from '@xyo-network/xl1-model'
|
|
10
12
|
|
|
11
13
|
import { FeesWrapper } from '../Fees.ts'
|
|
12
14
|
|
|
@@ -18,20 +20,21 @@ const sumTransfers = (payload: Transfer) => {
|
|
|
18
20
|
return total
|
|
19
21
|
}
|
|
20
22
|
|
|
21
|
-
export class HydratedTransactionWrapper<T extends HydratedTransaction>
|
|
22
|
-
|
|
23
|
+
export class HydratedTransactionWrapper<T extends HydratedTransaction>
|
|
24
|
+
implements HydratedTransactionInstance<[WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]> {
|
|
25
|
+
data: HydratedTransactionWithHashStorageMeta<T>
|
|
23
26
|
fees: TransactionFeesInstance
|
|
24
27
|
|
|
25
28
|
protected payloadsCache: WithHashStorageMeta<Payload>[] = []
|
|
26
29
|
|
|
27
|
-
protected constructor(
|
|
28
|
-
this.data =
|
|
30
|
+
protected constructor(data: HydratedTransactionWithHashStorageMeta<T>) {
|
|
31
|
+
this.data = data
|
|
29
32
|
this.fees = new FeesWrapper(
|
|
30
33
|
this.boundWitness.fees,
|
|
31
34
|
)
|
|
32
35
|
}
|
|
33
36
|
|
|
34
|
-
get boundWitness()
|
|
37
|
+
get boundWitness() {
|
|
35
38
|
return this.data[0]
|
|
36
39
|
}
|
|
37
40
|
|
|
@@ -39,21 +42,33 @@ export class HydratedTransactionWrapper<T extends HydratedTransaction> implement
|
|
|
39
42
|
return 0
|
|
40
43
|
}
|
|
41
44
|
|
|
42
|
-
get elevatedPayloads(): AllowedBlockPayload[] {
|
|
43
|
-
|
|
45
|
+
get elevatedPayloads(): WithHashStorageMeta<AllowedBlockPayload>[] {
|
|
46
|
+
const elevatedHashes = (this.boundWitness.script ?? []).map((operation) => {
|
|
47
|
+
const [opCode, ...args] = operation.split('|')
|
|
48
|
+
if (opCode === 'elevate') {
|
|
49
|
+
return args[0]
|
|
50
|
+
}
|
|
51
|
+
}).filter(exists)
|
|
52
|
+
const elevated = elevatedHashes.map(hash => this.payloads.find(payload => payload._hash === hash)).filter(exists)
|
|
53
|
+
return elevated.filter(isAllowedBlockPayloadWithHashStorageMeta)
|
|
44
54
|
}
|
|
45
55
|
|
|
46
56
|
get payloadCount(): number {
|
|
47
57
|
return this.payloadsCache.length
|
|
48
58
|
}
|
|
49
59
|
|
|
50
|
-
get payloads():
|
|
51
|
-
|
|
52
|
-
// return this.payloadsCache
|
|
60
|
+
get payloads(): WithHashStorageMeta<WithHashStorageMeta<T[1][number]>>[] {
|
|
61
|
+
return [...this.payloadsCache]
|
|
53
62
|
}
|
|
54
63
|
|
|
55
|
-
static async parse<T extends HydratedTransaction>(transaction: T, validate = false):
|
|
56
|
-
|
|
64
|
+
static async parse<T extends HydratedTransaction>(transaction: T, validate = false):
|
|
65
|
+
Promise<HydratedTransactionInstance<[WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]>> {
|
|
66
|
+
const wrapper = new HydratedTransactionWrapper<T>(
|
|
67
|
+
[
|
|
68
|
+
await PayloadBuilder.addStorageMeta(transaction[0]),
|
|
69
|
+
await PayloadBuilder.addStorageMeta(transaction[1]),
|
|
70
|
+
],
|
|
71
|
+
)
|
|
57
72
|
const parsed = await wrapper.parse()
|
|
58
73
|
if (validate) {
|
|
59
74
|
const errors = await wrapper.validate()
|
|
@@ -64,17 +79,16 @@ export class HydratedTransactionWrapper<T extends HydratedTransaction> implement
|
|
|
64
79
|
return parsed
|
|
65
80
|
}
|
|
66
81
|
|
|
67
|
-
elevatedPayload(
|
|
68
|
-
|
|
82
|
+
elevatedPayload(index: number): WithHashStorageMeta<AllowedBlockPayload & T[1][number]> | undefined {
|
|
83
|
+
return this.elevatedPayloads.at(index)
|
|
69
84
|
}
|
|
70
85
|
|
|
71
86
|
gasRequired(): bigint {
|
|
72
87
|
throw new Error('Method not implemented.')
|
|
73
88
|
}
|
|
74
89
|
|
|
75
|
-
payload(
|
|
76
|
-
|
|
77
|
-
// return this.payloadsCache.at(index)
|
|
90
|
+
payload(index: number): WithHashStorageMeta<Payload> | undefined {
|
|
91
|
+
return this.payloads.at(index)
|
|
78
92
|
}
|
|
79
93
|
|
|
80
94
|
reward(): bigint {
|
|
@@ -87,10 +101,10 @@ export class HydratedTransactionWrapper<T extends HydratedTransaction> implement
|
|
|
87
101
|
}
|
|
88
102
|
|
|
89
103
|
validate(): Promisable<Error[]> {
|
|
90
|
-
return
|
|
104
|
+
return validateTransaction(this.data)
|
|
91
105
|
}
|
|
92
106
|
|
|
93
|
-
protected async parse(validate = false): Promise<HydratedTransactionInstance<T>> {
|
|
107
|
+
protected async parse(validate = false): Promise<HydratedTransactionInstance<[WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]>> {
|
|
94
108
|
const transactionPayloads = await PayloadBuilder.addStorageMeta(this.data[1])
|
|
95
109
|
for (const payload of transactionPayloads) {
|
|
96
110
|
this.payloadsCache.push(payload)
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { PayloadBuilder } from '@xyo-network/payload-builder'
|
|
2
|
+
import type { WithHashStorageMeta } from '@xyo-network/payload-model'
|
|
1
3
|
import type {
|
|
2
4
|
SignatureInstance,
|
|
3
5
|
SignedHydratedTransaction,
|
|
@@ -8,7 +10,7 @@ import { createSignatureWrappers } from '../lib/createSignatureWrappers.ts'
|
|
|
8
10
|
import { HydratedTransactionWrapper } from './HydratedTransaction.ts'
|
|
9
11
|
|
|
10
12
|
export class SignedHydratedTransactionWrapper<T extends SignedHydratedTransaction> extends HydratedTransactionWrapper<T>
|
|
11
|
-
implements SignedHydratedTransactionInstance<T> {
|
|
13
|
+
implements SignedHydratedTransactionInstance<[WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]> {
|
|
12
14
|
private _signatureCache: SignatureInstance[] = []
|
|
13
15
|
|
|
14
16
|
get signatureCount(): number {
|
|
@@ -19,8 +21,12 @@ export class SignedHydratedTransactionWrapper<T extends SignedHydratedTransactio
|
|
|
19
21
|
return [...this._signatureCache]
|
|
20
22
|
}
|
|
21
23
|
|
|
22
|
-
static override async parse<T extends SignedHydratedTransaction>(
|
|
23
|
-
|
|
24
|
+
static override async parse<T extends SignedHydratedTransaction>(transaction: T, validate = false):
|
|
25
|
+
Promise<SignedHydratedTransactionInstance<[WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]>> {
|
|
26
|
+
const wrapper = new SignedHydratedTransactionWrapper<T>([
|
|
27
|
+
await PayloadBuilder.addStorageMeta(transaction[0]),
|
|
28
|
+
await PayloadBuilder.addStorageMeta(transaction[1]),
|
|
29
|
+
])
|
|
24
30
|
return await wrapper.parse(validate)
|
|
25
31
|
}
|
|
26
32
|
|
|
@@ -37,7 +43,8 @@ export class SignedHydratedTransactionWrapper<T extends SignedHydratedTransactio
|
|
|
37
43
|
return errors
|
|
38
44
|
}
|
|
39
45
|
|
|
40
|
-
protected override async parse(validate = false):
|
|
46
|
+
protected override async parse(validate = false):
|
|
47
|
+
Promise<SignedHydratedTransactionInstance<[WithHashStorageMeta<T[0]>, WithHashStorageMeta<T[1][number]>[]]>> {
|
|
41
48
|
this._signatureCache = await createSignatureWrappers(this.data[0])
|
|
42
49
|
await super.parse(validate)
|
|
43
50
|
return this
|