@feelyourprotocol/block 8141.0.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.
Files changed (133) hide show
  1. package/LICENSE +373 -0
  2. package/README.md +466 -0
  3. package/dist/cjs/block/block.d.ts +147 -0
  4. package/dist/cjs/block/block.d.ts.map +1 -0
  5. package/dist/cjs/block/block.js +415 -0
  6. package/dist/cjs/block/block.js.map +1 -0
  7. package/dist/cjs/block/constructors.d.ts +77 -0
  8. package/dist/cjs/block/constructors.d.ts.map +1 -0
  9. package/dist/cjs/block/constructors.js +298 -0
  10. package/dist/cjs/block/constructors.js.map +1 -0
  11. package/dist/cjs/block/index.d.ts +3 -0
  12. package/dist/cjs/block/index.d.ts.map +1 -0
  13. package/dist/cjs/block/index.js +19 -0
  14. package/dist/cjs/block/index.js.map +1 -0
  15. package/dist/cjs/consensus/clique.d.ts +52 -0
  16. package/dist/cjs/consensus/clique.d.ts.map +1 -0
  17. package/dist/cjs/consensus/clique.js +144 -0
  18. package/dist/cjs/consensus/clique.js.map +1 -0
  19. package/dist/cjs/consensus/ethash.d.ts +9 -0
  20. package/dist/cjs/consensus/ethash.d.ts.map +1 -0
  21. package/dist/cjs/consensus/ethash.js +13 -0
  22. package/dist/cjs/consensus/ethash.js.map +1 -0
  23. package/dist/cjs/consensus/index.d.ts +3 -0
  24. package/dist/cjs/consensus/index.d.ts.map +1 -0
  25. package/dist/cjs/consensus/index.js +29 -0
  26. package/dist/cjs/consensus/index.js.map +1 -0
  27. package/dist/cjs/from-beacon-payload.d.ts +36 -0
  28. package/dist/cjs/from-beacon-payload.d.ts.map +1 -0
  29. package/dist/cjs/from-beacon-payload.js +48 -0
  30. package/dist/cjs/from-beacon-payload.js.map +1 -0
  31. package/dist/cjs/header/constructors.d.ts +39 -0
  32. package/dist/cjs/header/constructors.d.ts.map +1 -0
  33. package/dist/cjs/header/constructors.js +127 -0
  34. package/dist/cjs/header/constructors.js.map +1 -0
  35. package/dist/cjs/header/header.d.ts +134 -0
  36. package/dist/cjs/header/header.d.ts.map +1 -0
  37. package/dist/cjs/header/header.js +699 -0
  38. package/dist/cjs/header/header.js.map +1 -0
  39. package/dist/cjs/header/index.d.ts +3 -0
  40. package/dist/cjs/header/index.d.ts.map +1 -0
  41. package/dist/cjs/header/index.js +19 -0
  42. package/dist/cjs/header/index.js.map +1 -0
  43. package/dist/cjs/helpers.d.ts +59 -0
  44. package/dist/cjs/helpers.d.ts.map +1 -0
  45. package/dist/cjs/helpers.js +172 -0
  46. package/dist/cjs/helpers.js.map +1 -0
  47. package/dist/cjs/index.d.ts +8 -0
  48. package/dist/cjs/index.d.ts.map +1 -0
  49. package/dist/cjs/index.js +31 -0
  50. package/dist/cjs/index.js.map +1 -0
  51. package/dist/cjs/package.json +3 -0
  52. package/dist/cjs/params.d.ts +3 -0
  53. package/dist/cjs/params.d.ts.map +1 -0
  54. package/dist/cjs/params.js +97 -0
  55. package/dist/cjs/params.js.map +1 -0
  56. package/dist/cjs/types.d.ts +228 -0
  57. package/dist/cjs/types.d.ts.map +1 -0
  58. package/dist/cjs/types.js +3 -0
  59. package/dist/cjs/types.js.map +1 -0
  60. package/dist/esm/block/block.d.ts +147 -0
  61. package/dist/esm/block/block.d.ts.map +1 -0
  62. package/dist/esm/block/block.js +411 -0
  63. package/dist/esm/block/block.js.map +1 -0
  64. package/dist/esm/block/constructors.d.ts +77 -0
  65. package/dist/esm/block/constructors.d.ts.map +1 -0
  66. package/dist/esm/block/constructors.js +286 -0
  67. package/dist/esm/block/constructors.js.map +1 -0
  68. package/dist/esm/block/index.d.ts +3 -0
  69. package/dist/esm/block/index.d.ts.map +1 -0
  70. package/dist/esm/block/index.js +3 -0
  71. package/dist/esm/block/index.js.map +1 -0
  72. package/dist/esm/consensus/clique.d.ts +52 -0
  73. package/dist/esm/consensus/clique.d.ts.map +1 -0
  74. package/dist/esm/consensus/clique.js +132 -0
  75. package/dist/esm/consensus/clique.js.map +1 -0
  76. package/dist/esm/consensus/ethash.d.ts +9 -0
  77. package/dist/esm/consensus/ethash.d.ts.map +1 -0
  78. package/dist/esm/consensus/ethash.js +10 -0
  79. package/dist/esm/consensus/ethash.js.map +1 -0
  80. package/dist/esm/consensus/index.d.ts +3 -0
  81. package/dist/esm/consensus/index.d.ts.map +1 -0
  82. package/dist/esm/consensus/index.js +3 -0
  83. package/dist/esm/consensus/index.js.map +1 -0
  84. package/dist/esm/from-beacon-payload.d.ts +36 -0
  85. package/dist/esm/from-beacon-payload.d.ts.map +1 -0
  86. package/dist/esm/from-beacon-payload.js +45 -0
  87. package/dist/esm/from-beacon-payload.js.map +1 -0
  88. package/dist/esm/header/constructors.d.ts +39 -0
  89. package/dist/esm/header/constructors.d.ts.map +1 -0
  90. package/dist/esm/header/constructors.js +120 -0
  91. package/dist/esm/header/constructors.js.map +1 -0
  92. package/dist/esm/header/header.d.ts +134 -0
  93. package/dist/esm/header/header.d.ts.map +1 -0
  94. package/dist/esm/header/header.js +695 -0
  95. package/dist/esm/header/header.js.map +1 -0
  96. package/dist/esm/header/index.d.ts +3 -0
  97. package/dist/esm/header/index.d.ts.map +1 -0
  98. package/dist/esm/header/index.js +3 -0
  99. package/dist/esm/header/index.js.map +1 -0
  100. package/dist/esm/helpers.d.ts +59 -0
  101. package/dist/esm/helpers.d.ts.map +1 -0
  102. package/dist/esm/helpers.js +161 -0
  103. package/dist/esm/helpers.js.map +1 -0
  104. package/dist/esm/index.d.ts +8 -0
  105. package/dist/esm/index.d.ts.map +1 -0
  106. package/dist/esm/index.js +8 -0
  107. package/dist/esm/index.js.map +1 -0
  108. package/dist/esm/package.json +3 -0
  109. package/dist/esm/params.d.ts +3 -0
  110. package/dist/esm/params.d.ts.map +1 -0
  111. package/dist/esm/params.js +94 -0
  112. package/dist/esm/params.js.map +1 -0
  113. package/dist/esm/types.d.ts +228 -0
  114. package/dist/esm/types.d.ts.map +1 -0
  115. package/dist/esm/types.js +2 -0
  116. package/dist/esm/types.js.map +1 -0
  117. package/dist/tsconfig.prod.cjs.tsbuildinfo +1 -0
  118. package/dist/tsconfig.prod.esm.tsbuildinfo +1 -0
  119. package/package.json +75 -0
  120. package/src/block/block.ts +526 -0
  121. package/src/block/constructors.ts +407 -0
  122. package/src/block/index.ts +2 -0
  123. package/src/consensus/clique.ts +171 -0
  124. package/src/consensus/ethash.ts +11 -0
  125. package/src/consensus/index.ts +12 -0
  126. package/src/from-beacon-payload.ts +82 -0
  127. package/src/header/constructors.ts +169 -0
  128. package/src/header/header.ts +890 -0
  129. package/src/header/index.ts +2 -0
  130. package/src/helpers.ts +223 -0
  131. package/src/index.ts +13 -0
  132. package/src/params.ts +95 -0
  133. package/src/types.ts +254 -0
@@ -0,0 +1,411 @@
1
+ import { ConsensusType } from '@feelyourprotocol/common';
2
+ import { MerklePatriciaTrie } from '@feelyourprotocol/mpt';
3
+ import { RLP } from '@feelyourprotocol/rlp';
4
+ import { Blob4844Tx, Capability } from '@feelyourprotocol/tx';
5
+ import { BIGINT_0, EthereumJSErrorWithoutCode, KECCAK256_RLP, KECCAK256_RLP_ARRAY, bytesToHex, equalsBytes, } from '@feelyourprotocol/util';
6
+ import { sha256 } from '@noble/hashes/sha2.js';
7
+ import { keccak_256 } from '@noble/hashes/sha3.js';
8
+ /* eslint-disable */
9
+ // This is to allow for a proper and linked collection of constructors for the class header.
10
+ // For tree shaking/code size this should be no problem since types go away on transpilation.
11
+ // TODO: See if there is an easier way to achieve the same result.
12
+ // See: https://github.com/microsoft/TypeScript/issues/47558
13
+ // (situation will eventually improve on Typescript and/or Eslint update)
14
+ import { BlockHeader, genTransactionsTrieRoot, genWithdrawalsTrieRoot, } from "../index.js";
15
+ /**
16
+ * Class representing a block in the Ethereum network. The {@link BlockHeader} has its own
17
+ * class and can be used independently, for a block it is included in the form of the
18
+ * {@link Block.header} property.
19
+ *
20
+ * A block object can be created with one of the following constructor methods
21
+ * (separate from the Block class to allow for tree shaking):
22
+ *
23
+ * - {@link createBlock }
24
+ * - {@link createBlockFromBytesArray }
25
+ * - {@link createBlockFromRLP }
26
+ * - {@link createBlockFromRPC }
27
+ * - {@link createBlockFromJSONRPCProvider }
28
+ * - {@link createBlockFromExecutionPayload }
29
+ * - {@link createBlockFromBeaconPayloadJSON }
30
+ */
31
+ export class Block {
32
+ /**
33
+ * This constructor takes the values, validates them, assigns them and freezes the object.
34
+ *
35
+ * @deprecated Use the static factory methods (see {@link Block} for an overview) to assist in creating
36
+ * a Block object from varying data types and options.
37
+ */
38
+ constructor(header, transactions = [], uncleHeaders = [], withdrawals, opts = {}) {
39
+ this.transactions = [];
40
+ this.uncleHeaders = [];
41
+ this.cache = {};
42
+ this.header = header ?? new BlockHeader({}, opts);
43
+ this.common = this.header.common;
44
+ this.keccakFunction = this.common.customCrypto.keccak256 ?? keccak_256;
45
+ this.sha256Function = this.common.customCrypto.sha256 ?? sha256;
46
+ this.transactions = transactions;
47
+ this.withdrawals = withdrawals ?? (this.common.isActivatedEIP(4895) ? [] : undefined);
48
+ this.uncleHeaders = uncleHeaders;
49
+ if (uncleHeaders.length > 0) {
50
+ this.validateUncles();
51
+ if (this.common.consensusType() === ConsensusType.ProofOfAuthority) {
52
+ const msg = this._errorMsg('Block initialization with uncleHeaders on a PoA network is not allowed');
53
+ throw EthereumJSErrorWithoutCode(msg);
54
+ }
55
+ if (this.common.consensusType() === ConsensusType.ProofOfStake) {
56
+ const msg = this._errorMsg('Block initialization with uncleHeaders on a PoS network is not allowed');
57
+ throw EthereumJSErrorWithoutCode(msg);
58
+ }
59
+ }
60
+ if (!this.common.isActivatedEIP(4895) && withdrawals !== undefined) {
61
+ throw EthereumJSErrorWithoutCode('Cannot have a withdrawals field if EIP 4895 is not active');
62
+ }
63
+ const freeze = opts?.freeze ?? true;
64
+ if (freeze) {
65
+ Object.freeze(this);
66
+ }
67
+ }
68
+ /**
69
+ * Returns an array of the raw byte arrays for this block, in order.
70
+ */
71
+ raw() {
72
+ const bytesArray = [
73
+ this.header.raw(),
74
+ this.transactions.map((tx) => tx.supports(Capability.EIP2718TypedTransaction) ? tx.serialize() : tx.raw()),
75
+ this.uncleHeaders.map((uh) => uh.raw()),
76
+ ];
77
+ const withdrawalsRaw = this.withdrawals?.map((wt) => wt.raw());
78
+ if (withdrawalsRaw) {
79
+ bytesArray.push(withdrawalsRaw);
80
+ }
81
+ return bytesArray;
82
+ }
83
+ /**
84
+ * Returns the hash of the block.
85
+ */
86
+ hash() {
87
+ return this.header.hash();
88
+ }
89
+ /**
90
+ * Determines if this block is the genesis block.
91
+ */
92
+ isGenesis() {
93
+ return this.header.isGenesis();
94
+ }
95
+ /**
96
+ * Returns the rlp encoding of the block.
97
+ */
98
+ serialize() {
99
+ return RLP.encode(this.raw());
100
+ }
101
+ /**
102
+ * Generates transaction trie for validation.
103
+ */
104
+ async genTxTrie() {
105
+ return genTransactionsTrieRoot(this.transactions, new MerklePatriciaTrie({ common: this.common }));
106
+ }
107
+ /**
108
+ * Validates the transaction trie by generating a trie
109
+ * and do a check on the root hash.
110
+ * @returns True if the transaction trie is valid, false otherwise
111
+ */
112
+ async transactionsTrieIsValid() {
113
+ let result;
114
+ if (this.transactions.length === 0) {
115
+ result = equalsBytes(this.header.transactionsTrie, KECCAK256_RLP);
116
+ return result;
117
+ }
118
+ if (this.cache.txTrieRoot === undefined) {
119
+ this.cache.txTrieRoot = await this.genTxTrie();
120
+ }
121
+ result = equalsBytes(this.cache.txTrieRoot, this.header.transactionsTrie);
122
+ return result;
123
+ }
124
+ /**
125
+ * Validates transaction signatures and minimum gas requirements.
126
+ * @returns {string[]} an array of error strings
127
+ */
128
+ getTransactionsValidationErrors() {
129
+ const errors = [];
130
+ let blobGasUsed = BIGINT_0;
131
+ // eslint-disable-next-line prefer-const
132
+ for (let [i, tx] of this.transactions.entries()) {
133
+ const errs = tx.getValidationErrors();
134
+ if (this.common.isActivatedEIP(1559)) {
135
+ if (tx.supports(Capability.EIP1559FeeMarket)) {
136
+ tx = tx;
137
+ if (tx.maxFeePerGas < this.header.baseFeePerGas) {
138
+ errs.push('tx unable to pay base fee (EIP-1559 tx)');
139
+ }
140
+ }
141
+ else {
142
+ tx = tx;
143
+ if (tx.gasPrice < this.header.baseFeePerGas) {
144
+ errs.push('tx unable to pay base fee (non EIP-1559 tx)');
145
+ }
146
+ }
147
+ }
148
+ if (this.common.isActivatedEIP(4844)) {
149
+ const blobGasLimit = this.common.getBlobGasSchedule().maxBlobGasPerBlock;
150
+ const blobGasPerBlob = this.common.param('blobGasPerBlob');
151
+ if (tx instanceof Blob4844Tx) {
152
+ blobGasUsed += BigInt(tx.numBlobs()) * blobGasPerBlob;
153
+ if (blobGasUsed > blobGasLimit) {
154
+ errs.push(`tx causes total blob gas of ${blobGasUsed} to exceed maximum blob gas per block of ${blobGasLimit}`);
155
+ }
156
+ }
157
+ }
158
+ if (errs.length > 0) {
159
+ errors.push(`errors at tx ${i}: ${errs.join(', ')}`);
160
+ }
161
+ }
162
+ if (this.common.isActivatedEIP(4844)) {
163
+ if (blobGasUsed !== this.header.blobGasUsed) {
164
+ errors.push(`invalid blobGasUsed expected=${this.header.blobGasUsed} actual=${blobGasUsed}`);
165
+ }
166
+ }
167
+ return errors;
168
+ }
169
+ /**
170
+ * Validates transaction signatures and minimum gas requirements.
171
+ * @returns True if all transactions are valid, false otherwise
172
+ */
173
+ transactionsAreValid() {
174
+ const errors = this.getTransactionsValidationErrors();
175
+ return errors.length === 0;
176
+ }
177
+ /**
178
+ * Validates the block data, throwing if invalid.
179
+ * This can be checked on the Block itself without needing access to any parent block
180
+ * It checks:
181
+ * - All transactions are valid
182
+ * - The transactions trie is valid
183
+ * - The uncle hash is valid
184
+ * - Block size limit (EIP-7934)
185
+ * @param onlyHeader if only passed the header, skip validating txTrie and unclesHash (default: false)
186
+ * @param verifyTxs if set to `false`, will not check for transaction validation errors (default: true)
187
+ * @param validateBlockSize if set to `true`, will check for block size limit (EIP-7934) (default: false)
188
+ */
189
+ async validateData(onlyHeader = false, verifyTxs = true, validateBlockSize = false) {
190
+ // EIP-7934: RLP Execution Block Size Limit validation
191
+ if (validateBlockSize && this.common.isActivatedEIP(7934)) {
192
+ const rlpEncoded = this.serialize();
193
+ const maxRlpBlockSize = this.common.param('maxRlpBlockSize');
194
+ if (rlpEncoded.length > maxRlpBlockSize) {
195
+ const msg = this._errorMsg(`Block size exceeds maximum RLP block size limit: ${rlpEncoded.length} bytes > ${maxRlpBlockSize} bytes`);
196
+ throw EthereumJSErrorWithoutCode(msg);
197
+ }
198
+ }
199
+ if (verifyTxs) {
200
+ const txErrors = this.getTransactionsValidationErrors();
201
+ if (txErrors.length > 0) {
202
+ const msg = this._errorMsg(`invalid transactions: ${txErrors.join(' ')}`);
203
+ throw EthereumJSErrorWithoutCode(msg);
204
+ }
205
+ }
206
+ if (onlyHeader) {
207
+ return;
208
+ }
209
+ if (verifyTxs) {
210
+ for (const [index, tx] of this.transactions.entries()) {
211
+ if (!tx.isSigned()) {
212
+ const msg = this._errorMsg(`invalid transactions: transaction at index ${index} is unsigned`);
213
+ throw EthereumJSErrorWithoutCode(msg);
214
+ }
215
+ }
216
+ }
217
+ if (!(await this.transactionsTrieIsValid())) {
218
+ const msg = this._errorMsg('invalid transaction trie');
219
+ throw EthereumJSErrorWithoutCode(msg);
220
+ }
221
+ if (!this.uncleHashIsValid()) {
222
+ const msg = this._errorMsg('invalid uncle hash');
223
+ throw EthereumJSErrorWithoutCode(msg);
224
+ }
225
+ if (this.common.isActivatedEIP(4895) && !(await this.withdrawalsTrieIsValid())) {
226
+ const msg = this._errorMsg('invalid withdrawals trie');
227
+ throw EthereumJSErrorWithoutCode(msg);
228
+ }
229
+ }
230
+ /**
231
+ * Validates that blob gas fee for each transaction is greater than or equal to the
232
+ * blobGasPrice for the block and that total blob gas in block is less than maximum
233
+ * blob gas per block
234
+ * @param parentHeader header of parent block
235
+ */
236
+ validateBlobTransactions(parentHeader) {
237
+ if (this.common.isActivatedEIP(4844)) {
238
+ const blobGasLimit = this.common.getBlobGasSchedule().maxBlobGasPerBlock;
239
+ const blobGasPerBlob = this.common.param('blobGasPerBlob');
240
+ let blobGasUsed = BIGINT_0;
241
+ const expectedExcessBlobGas = parentHeader.calcNextExcessBlobGas(this.common);
242
+ if (this.header.excessBlobGas !== expectedExcessBlobGas) {
243
+ throw EthereumJSErrorWithoutCode(`block excessBlobGas mismatch: have ${this.header.excessBlobGas}, want ${expectedExcessBlobGas}`);
244
+ }
245
+ let blobGasPrice;
246
+ for (const tx of this.transactions) {
247
+ if (tx instanceof Blob4844Tx) {
248
+ blobGasPrice = blobGasPrice ?? this.header.getBlobGasPrice();
249
+ if (tx.maxFeePerBlobGas < blobGasPrice) {
250
+ throw EthereumJSErrorWithoutCode(`blob transaction maxFeePerBlobGas ${tx.maxFeePerBlobGas} < than block blob gas price ${blobGasPrice} - ${this.errorStr()}`);
251
+ }
252
+ blobGasUsed += BigInt(tx.blobVersionedHashes.length) * blobGasPerBlob;
253
+ if (blobGasUsed > blobGasLimit) {
254
+ throw EthereumJSErrorWithoutCode(`tx causes total blob gas of ${blobGasUsed} to exceed maximum blob gas per block of ${blobGasLimit}`);
255
+ }
256
+ }
257
+ }
258
+ if (this.header.blobGasUsed !== blobGasUsed) {
259
+ throw EthereumJSErrorWithoutCode(`block blobGasUsed mismatch: have ${this.header.blobGasUsed}, want ${blobGasUsed}`);
260
+ }
261
+ }
262
+ }
263
+ /**
264
+ * Validates the uncle's hash.
265
+ * @returns true if the uncle's hash is valid, false otherwise.
266
+ */
267
+ uncleHashIsValid() {
268
+ if (this.uncleHeaders.length === 0) {
269
+ return equalsBytes(KECCAK256_RLP_ARRAY, this.header.uncleHash);
270
+ }
271
+ const uncles = this.uncleHeaders.map((uh) => uh.raw());
272
+ const raw = RLP.encode(uncles);
273
+ return equalsBytes(this.keccakFunction(raw), this.header.uncleHash);
274
+ }
275
+ /**
276
+ * Validates the withdrawal root
277
+ * @returns true if the withdrawals trie root is valid, false otherwise
278
+ */
279
+ async withdrawalsTrieIsValid() {
280
+ if (!this.common.isActivatedEIP(4895)) {
281
+ throw EthereumJSErrorWithoutCode('EIP 4895 is not activated');
282
+ }
283
+ let result;
284
+ if (this.withdrawals.length === 0) {
285
+ result = equalsBytes(this.header.withdrawalsRoot, KECCAK256_RLP);
286
+ return result;
287
+ }
288
+ if (this.cache.withdrawalsTrieRoot === undefined) {
289
+ this.cache.withdrawalsTrieRoot = await genWithdrawalsTrieRoot(this.withdrawals, new MerklePatriciaTrie({ common: this.common }));
290
+ }
291
+ result = equalsBytes(this.cache.withdrawalsTrieRoot, this.header.withdrawalsRoot);
292
+ return result;
293
+ }
294
+ /**
295
+ * Consistency checks for uncles included in the block, if any.
296
+ *
297
+ * Throws if invalid.
298
+ *
299
+ * The rules for uncles checked are the following:
300
+ * Header has at most 2 uncles.
301
+ * Header does not count an uncle twice.
302
+ */
303
+ validateUncles() {
304
+ if (this.isGenesis()) {
305
+ return;
306
+ }
307
+ // Header has at most 2 uncles
308
+ if (this.uncleHeaders.length > 2) {
309
+ const msg = this._errorMsg('too many uncle headers');
310
+ throw EthereumJSErrorWithoutCode(msg);
311
+ }
312
+ // Header does not count an uncle twice.
313
+ const uncleHashes = this.uncleHeaders.map((header) => bytesToHex(header.hash()));
314
+ if (!(new Set(uncleHashes).size === uncleHashes.length)) {
315
+ const msg = this._errorMsg('duplicate uncles');
316
+ throw EthereumJSErrorWithoutCode(msg);
317
+ }
318
+ }
319
+ /**
320
+ * Validates if the block gasLimit remains in the boundaries set by the protocol.
321
+ * Throws if invalid
322
+ *
323
+ * @param parentBlock - the parent of this `Block`
324
+ */
325
+ validateGasLimit(parentBlock) {
326
+ return this.header.validateGasLimit(parentBlock.header);
327
+ }
328
+ /**
329
+ * Returns the block in JSON format.
330
+ */
331
+ toJSON() {
332
+ const withdrawalsAttr = this.withdrawals
333
+ ? {
334
+ withdrawals: this.withdrawals.map((wt) => wt.toJSON()),
335
+ }
336
+ : {};
337
+ return {
338
+ header: this.header.toJSON(),
339
+ transactions: this.transactions.map((tx) => tx.toJSON()),
340
+ uncleHeaders: this.uncleHeaders.map((uh) => uh.toJSON()),
341
+ ...withdrawalsAttr,
342
+ };
343
+ }
344
+ /**
345
+ * Maps the block properties to the execution payload structure from the beacon chain,
346
+ * see https://github.com/ethereum/consensus-specs/blob/dev/specs/bellatrix/beacon-chain.md#ExecutionPayload
347
+ *
348
+ * @returns dict with the execution payload parameters with camel case naming
349
+ */
350
+ toExecutionPayload() {
351
+ const blockJSON = this.toJSON();
352
+ const header = blockJSON.header;
353
+ const transactions = this.transactions.map((tx) => bytesToHex(tx.serialize())) ?? [];
354
+ const withdrawalsArr = blockJSON.withdrawals ? { withdrawals: blockJSON.withdrawals } : {};
355
+ const executionPayload = {
356
+ blockNumber: header.number,
357
+ parentHash: header.parentHash,
358
+ feeRecipient: header.coinbase,
359
+ stateRoot: header.stateRoot,
360
+ receiptsRoot: header.receiptTrie,
361
+ logsBloom: header.logsBloom,
362
+ gasLimit: header.gasLimit,
363
+ gasUsed: header.gasUsed,
364
+ timestamp: header.timestamp,
365
+ extraData: header.extraData,
366
+ baseFeePerGas: header.baseFeePerGas,
367
+ blobGasUsed: header.blobGasUsed,
368
+ excessBlobGas: header.excessBlobGas,
369
+ blockHash: bytesToHex(this.hash()),
370
+ prevRandao: header.mixHash,
371
+ transactions,
372
+ ...withdrawalsArr,
373
+ parentBeaconBlockRoot: header.parentBeaconBlockRoot,
374
+ requestsHash: header.requestsHash,
375
+ };
376
+ return executionPayload;
377
+ }
378
+ /**
379
+ * Return a compact error string representation of the object
380
+ */
381
+ errorStr() {
382
+ let hash = '';
383
+ try {
384
+ hash = bytesToHex(this.hash());
385
+ }
386
+ catch {
387
+ hash = 'error';
388
+ }
389
+ let hf = '';
390
+ try {
391
+ hf = this.common.hardfork();
392
+ }
393
+ catch {
394
+ hf = 'error';
395
+ }
396
+ let errorStr = `block number=${this.header.number} hash=${hash} `;
397
+ errorStr += `hf=${hf} baseFeePerGas=${this.header.baseFeePerGas ?? 'none'} `;
398
+ errorStr += `txs=${this.transactions.length} uncles=${this.uncleHeaders.length}`;
399
+ return errorStr;
400
+ }
401
+ /**
402
+ * Internal helper function to create an annotated error message
403
+ *
404
+ * @param msg Base error message
405
+ * @hidden
406
+ */
407
+ _errorMsg(msg) {
408
+ return `${msg} (${this.errorStr()})`;
409
+ }
410
+ }
411
+ //# sourceMappingURL=block.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"block.js","sourceRoot":"","sources":["../../../src/block/block.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ import { Block } from '../index.ts';
2
+ import type { EthersProvider } from '@feelyourprotocol/util';
3
+ import type { BeaconPayloadJSON } from '../from-beacon-payload.ts';
4
+ import type { BlockBytes, BlockData, BlockOptions, ExecutionPayload, HeaderData, JSONRPCBlock } from '../types.ts';
5
+ /**
6
+ * Static constructor to create a block from a block data dictionary
7
+ *
8
+ * @param blockData
9
+ * @param opts
10
+ * @returns a new {@link Block} object
11
+ */
12
+ export declare function createBlock(blockData?: BlockData, opts?: BlockOptions): Block;
13
+ /**
14
+ * Simple static constructor if only an empty block is needed
15
+ * (tree shaking advantages since it does not draw all the tx constructors in)
16
+ *
17
+ * @param headerData
18
+ * @param opts
19
+ * @returns a new {@link Block} object
20
+ */
21
+ export declare function createEmptyBlock(headerData: HeaderData, opts?: BlockOptions): Block;
22
+ /**
23
+ * Static constructor to create a block from an array of Bytes values
24
+ *
25
+ * @param values
26
+ * @param opts
27
+ * @returns a new {@link Block} object
28
+ */
29
+ export declare function createBlockFromBytesArray(values: BlockBytes, opts?: BlockOptions): Block;
30
+ /**
31
+ * Static constructor to create a block from a RLP-serialized block
32
+ *
33
+ * @param serialized
34
+ * @param opts
35
+ * @returns a new {@link Block} object
36
+ */
37
+ export declare function createBlockFromRLP(serialized: Uint8Array, opts?: BlockOptions): Block;
38
+ /**
39
+ * Creates a new block object from Ethereum JSON RPC.
40
+ *
41
+ * @param blockParams - Ethereum JSON RPC of block (eth_getBlockByNumber)
42
+ * @param uncles - Optional list of Ethereum JSON RPC of uncles (eth_getUncleByBlockHashAndIndex)
43
+ * @param opts - An object describing the blockchain
44
+ * @returns a new {@link Block} object
45
+ */
46
+ export declare function createBlockFromRPC(blockParams: JSONRPCBlock, uncles?: any[], options?: BlockOptions): Block;
47
+ /**
48
+ * Method to retrieve a block from a JSON-RPC provider and format as a {@link Block}
49
+ * @param provider either a url for a remote provider or an Ethers JSONRPCProvider object
50
+ * @param blockTag block hash or block number to be run
51
+ * @param opts {@link BlockOptions}
52
+ * @returns a new {@link Block} object specified by `blockTag`
53
+ */
54
+ export declare const createBlockFromJSONRPCProvider: (provider: string | EthersProvider, blockTag: string | bigint, opts: BlockOptions) => Promise<Block>;
55
+ /**
56
+ * Method to retrieve a block from an execution payload
57
+ * @param payload Execution payload constructed from beacon payload data
58
+ * @param opts {@link BlockOptions}
59
+ * @returns The constructed {@link Block} object
60
+ */
61
+ export declare function createBlockFromExecutionPayload(payload: ExecutionPayload, opts?: BlockOptions): Promise<Block>;
62
+ /**
63
+ * Method to retrieve a block from a beacon payload JSON
64
+ * @param payload JSON of a beacon block fetched from beacon APIs
65
+ * @param opts {@link BlockOptions}
66
+ * @returns The constructed {@link Block} object
67
+ */
68
+ export declare function createBlockFromBeaconPayloadJSON(payload: BeaconPayloadJSON, opts?: BlockOptions): Promise<Block>;
69
+ /**
70
+ * Creates a block for Clique networks with the seal applied during instantiation.
71
+ * @param blockData Block fields used to build the block
72
+ * @param cliqueSigner Private key bytes used to sign the header
73
+ * @param opts {@link BlockOptions}
74
+ * @returns A sealed Clique {@link Block} object
75
+ */
76
+ export declare function createSealedCliqueBlock(blockData: BlockData | undefined, cliqueSigner: Uint8Array, opts?: BlockOptions): Block;
77
+ //# sourceMappingURL=constructors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constructors.d.ts","sourceRoot":"","sources":["../../../src/block/constructors.ts"],"names":[],"mappings":"AAwBA,OAAO,EACL,KAAK,EAKN,MAAM,aAAa,CAAA;AAEpB,OAAO,KAAK,EAAE,cAAc,EAAmB,MAAM,kBAAkB,CAAA;AACvE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAClE,OAAO,KAAK,EACV,UAAU,EACV,SAAS,EACT,YAAY,EACZ,gBAAgB,EAChB,UAAU,EACV,YAAY,EAEb,MAAM,aAAa,CAAA;AAEpB;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,SAAS,GAAE,SAAc,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,KAAK,CA0CjF;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,KAAK,CAGnF;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,KAAK,CAiExF;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,KAAK,CAgBrF;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,YAAY,EACzB,MAAM,GAAE,GAAG,EAAO,EAClB,OAAO,CAAC,EAAE,YAAY,GACrB,KAAK,CAiBP;AAED;;;;;;GAMG;AACH,eAAO,MAAM,8BAA8B,GACzC,UAAU,MAAM,GAAG,cAAc,EACjC,UAAU,MAAM,GAAG,MAAM,EACzB,MAAM,YAAY,KACjB,OAAO,CAAC,KAAK,CAgDf,CAAA;AAED;;;;;GAKG;AACH,wBAAsB,+BAA+B,CACnD,OAAO,EAAE,gBAAgB,EACzB,IAAI,CAAC,EAAE,YAAY,GAClB,OAAO,CAAC,KAAK,CAAC,CAqDhB;AAED;;;;;GAKG;AACH,wBAAsB,gCAAgC,CACpD,OAAO,EAAE,iBAAiB,EAC1B,IAAI,CAAC,EAAE,YAAY,GAClB,OAAO,CAAC,KAAK,CAAC,CAGhB;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,SAAS,YAAK,EACzB,YAAY,EAAE,UAAU,EACxB,IAAI,GAAE,YAAiB,GACtB,KAAK,CAkBP"}