@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,36 @@
1
+ import type { NumericString, PrefixedHexString } from '@feelyourprotocol/util';
2
+ import type { ExecutionPayload } from './types.ts';
3
+ type BeaconWithdrawal = {
4
+ index: PrefixedHexString;
5
+ validator_index: PrefixedHexString;
6
+ address: PrefixedHexString;
7
+ amount: PrefixedHexString;
8
+ };
9
+ export type BeaconPayloadJSON = {
10
+ parent_hash: PrefixedHexString;
11
+ fee_recipient: PrefixedHexString;
12
+ state_root: PrefixedHexString;
13
+ receipts_root: PrefixedHexString;
14
+ logs_bloom: PrefixedHexString;
15
+ prev_randao: PrefixedHexString;
16
+ block_number: NumericString;
17
+ gas_limit: NumericString;
18
+ gas_used: NumericString;
19
+ timestamp: NumericString;
20
+ extra_data: PrefixedHexString;
21
+ base_fee_per_gas: NumericString;
22
+ block_hash: PrefixedHexString;
23
+ transactions: PrefixedHexString[];
24
+ withdrawals?: BeaconWithdrawal[];
25
+ blob_gas_used?: NumericString;
26
+ excess_blob_gas?: NumericString;
27
+ parent_beacon_block_root?: PrefixedHexString;
28
+ requests_hash?: PrefixedHexString;
29
+ };
30
+ /**
31
+ * Converts a beacon block execution payload JSON object {@link BeaconPayloadJSON} to the {@link ExecutionPayload} data needed to construct a {@link Block}.
32
+ * The JSON data can be retrieved from a consensus layer (CL) client on this Beacon API `/eth/v2/beacon/blocks/[block number]`
33
+ */
34
+ export declare function executionPayloadFromBeaconPayload(payload: BeaconPayloadJSON): ExecutionPayload;
35
+ export {};
36
+ //# sourceMappingURL=from-beacon-payload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"from-beacon-payload.d.ts","sourceRoot":"","sources":["../../src/from-beacon-payload.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACxE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAElD,KAAK,gBAAgB,GAAG;IACtB,KAAK,EAAE,iBAAiB,CAAA;IACxB,eAAe,EAAE,iBAAiB,CAAA;IAClC,OAAO,EAAE,iBAAiB,CAAA;IAC1B,MAAM,EAAE,iBAAiB,CAAA;CAC1B,CAAA;AAID,MAAM,MAAM,iBAAiB,GAAG;IAC9B,WAAW,EAAE,iBAAiB,CAAA;IAC9B,aAAa,EAAE,iBAAiB,CAAA;IAChC,UAAU,EAAE,iBAAiB,CAAA;IAC7B,aAAa,EAAE,iBAAiB,CAAA;IAChC,UAAU,EAAE,iBAAiB,CAAA;IAC7B,WAAW,EAAE,iBAAiB,CAAA;IAC9B,YAAY,EAAE,aAAa,CAAA;IAC3B,SAAS,EAAE,aAAa,CAAA;IACxB,QAAQ,EAAE,aAAa,CAAA;IACvB,SAAS,EAAE,aAAa,CAAA;IACxB,UAAU,EAAE,iBAAiB,CAAA;IAC7B,gBAAgB,EAAE,aAAa,CAAA;IAC/B,UAAU,EAAE,iBAAiB,CAAA;IAC7B,YAAY,EAAE,iBAAiB,EAAE,CAAA;IACjC,WAAW,CAAC,EAAE,gBAAgB,EAAE,CAAA;IAChC,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,eAAe,CAAC,EAAE,aAAa,CAAA;IAC/B,wBAAwB,CAAC,EAAE,iBAAiB,CAAA;IAC5C,aAAa,CAAC,EAAE,iBAAiB,CAAA;CAClC,CAAA;AAED;;;GAGG;AACH,wBAAgB,iCAAiC,CAAC,OAAO,EAAE,iBAAiB,GAAG,gBAAgB,CAyC9F"}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.executionPayloadFromBeaconPayload = executionPayloadFromBeaconPayload;
4
+ const util_1 = require("@feelyourprotocol/util");
5
+ /**
6
+ * Converts a beacon block execution payload JSON object {@link BeaconPayloadJSON} to the {@link ExecutionPayload} data needed to construct a {@link Block}.
7
+ * The JSON data can be retrieved from a consensus layer (CL) client on this Beacon API `/eth/v2/beacon/blocks/[block number]`
8
+ */
9
+ function executionPayloadFromBeaconPayload(payload) {
10
+ const executionPayload = {
11
+ parentHash: payload.parent_hash,
12
+ feeRecipient: payload.fee_recipient,
13
+ stateRoot: payload.state_root,
14
+ receiptsRoot: payload.receipts_root,
15
+ logsBloom: payload.logs_bloom,
16
+ prevRandao: payload.prev_randao,
17
+ blockNumber: (0, util_1.bigIntToHex)(BigInt(payload.block_number)),
18
+ gasLimit: (0, util_1.bigIntToHex)(BigInt(payload.gas_limit)),
19
+ gasUsed: (0, util_1.bigIntToHex)(BigInt(payload.gas_used)),
20
+ timestamp: (0, util_1.bigIntToHex)(BigInt(payload.timestamp)),
21
+ extraData: payload.extra_data,
22
+ baseFeePerGas: (0, util_1.bigIntToHex)(BigInt(payload.base_fee_per_gas)),
23
+ blockHash: payload.block_hash,
24
+ transactions: payload.transactions,
25
+ };
26
+ if (payload.withdrawals !== undefined && payload.withdrawals !== null) {
27
+ executionPayload.withdrawals = payload.withdrawals.map((wd) => ({
28
+ index: (0, util_1.bigIntToHex)(BigInt(wd.index)),
29
+ validatorIndex: (0, util_1.bigIntToHex)(BigInt(wd.validator_index)),
30
+ address: wd.address,
31
+ amount: (0, util_1.bigIntToHex)(BigInt(wd.amount)),
32
+ }));
33
+ }
34
+ if (payload.blob_gas_used !== undefined && payload.blob_gas_used !== null) {
35
+ executionPayload.blobGasUsed = (0, util_1.bigIntToHex)(BigInt(payload.blob_gas_used));
36
+ }
37
+ if (payload.excess_blob_gas !== undefined && payload.excess_blob_gas !== null) {
38
+ executionPayload.excessBlobGas = (0, util_1.bigIntToHex)(BigInt(payload.excess_blob_gas));
39
+ }
40
+ if (payload.parent_beacon_block_root !== undefined && payload.parent_beacon_block_root !== null) {
41
+ executionPayload.parentBeaconBlockRoot = payload.parent_beacon_block_root;
42
+ }
43
+ if (payload.requests_hash !== undefined && payload.requests_hash !== null) {
44
+ executionPayload.requestsHash = payload.requests_hash;
45
+ }
46
+ return executionPayload;
47
+ }
48
+ //# sourceMappingURL=from-beacon-payload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"from-beacon-payload.js","sourceRoot":"","sources":["../../src/from-beacon-payload.ts"],"names":[],"mappings":";;AAwCA,8EAyCC;AAjFD,2CAA8C;AAoC9C;;;GAGG;AACH,SAAgB,iCAAiC,CAAC,OAA0B;IAC1E,MAAM,gBAAgB,GAAqB;QACzC,UAAU,EAAE,OAAO,CAAC,WAAW;QAC/B,YAAY,EAAE,OAAO,CAAC,aAAa;QACnC,SAAS,EAAE,OAAO,CAAC,UAAU;QAC7B,YAAY,EAAE,OAAO,CAAC,aAAa;QACnC,SAAS,EAAE,OAAO,CAAC,UAAU;QAC7B,UAAU,EAAE,OAAO,CAAC,WAAW;QAC/B,WAAW,EAAE,IAAA,kBAAW,EAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACtD,QAAQ,EAAE,IAAA,kBAAW,EAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAChD,OAAO,EAAE,IAAA,kBAAW,EAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC9C,SAAS,EAAE,IAAA,kBAAW,EAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACjD,SAAS,EAAE,OAAO,CAAC,UAAU;QAC7B,aAAa,EAAE,IAAA,kBAAW,EAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAC5D,SAAS,EAAE,OAAO,CAAC,UAAU;QAC7B,YAAY,EAAE,OAAO,CAAC,YAAY;KACnC,CAAA;IAED,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS,IAAI,OAAO,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;QACtE,gBAAgB,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YAC9D,KAAK,EAAE,IAAA,kBAAW,EAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;YACpC,cAAc,EAAE,IAAA,kBAAW,EAAC,MAAM,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC;YACvD,OAAO,EAAE,EAAE,CAAC,OAAO;YACnB,MAAM,EAAE,IAAA,kBAAW,EAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;SACvC,CAAC,CAAC,CAAA;IACL,CAAC;IAED,IAAI,OAAO,CAAC,aAAa,KAAK,SAAS,IAAI,OAAO,CAAC,aAAa,KAAK,IAAI,EAAE,CAAC;QAC1E,gBAAgB,CAAC,WAAW,GAAG,IAAA,kBAAW,EAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAA;IAC3E,CAAC;IACD,IAAI,OAAO,CAAC,eAAe,KAAK,SAAS,IAAI,OAAO,CAAC,eAAe,KAAK,IAAI,EAAE,CAAC;QAC9E,gBAAgB,CAAC,aAAa,GAAG,IAAA,kBAAW,EAAC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAA;IAC/E,CAAC;IACD,IAAI,OAAO,CAAC,wBAAwB,KAAK,SAAS,IAAI,OAAO,CAAC,wBAAwB,KAAK,IAAI,EAAE,CAAC;QAChG,gBAAgB,CAAC,qBAAqB,GAAG,OAAO,CAAC,wBAAwB,CAAA;IAC3E,CAAC;IACD,IAAI,OAAO,CAAC,aAAa,KAAK,SAAS,IAAI,OAAO,CAAC,aAAa,KAAK,IAAI,EAAE,CAAC;QAC1E,gBAAgB,CAAC,YAAY,GAAG,OAAO,CAAC,aAAa,CAAA;IACvD,CAAC;IAED,OAAO,gBAAgB,CAAA;AACzB,CAAC"}
@@ -0,0 +1,39 @@
1
+ import { BlockHeader } from '../index.ts';
2
+ import type { BlockHeaderBytes, BlockOptions, HeaderData, JSONRPCBlock } from '../types.ts';
3
+ /**
4
+ * Static constructor to create a block header from a header data dictionary
5
+ *
6
+ * @param headerData
7
+ * @param opts
8
+ */
9
+ export declare function createBlockHeader(headerData?: HeaderData, opts?: BlockOptions): BlockHeader;
10
+ /**
11
+ * Static constructor to create a block header from an array of bytes values
12
+ *
13
+ * @param values
14
+ * @param opts
15
+ */
16
+ export declare function createBlockHeaderFromBytesArray(values: BlockHeaderBytes, opts?: BlockOptions): BlockHeader;
17
+ /**
18
+ * Static constructor to create a block header from a RLP-serialized header
19
+ *
20
+ * @param serializedHeaderData
21
+ * @param opts
22
+ */
23
+ export declare function createBlockHeaderFromRLP(serializedHeaderData: Uint8Array, opts?: BlockOptions): BlockHeader;
24
+ /**
25
+ * Creates a Clique block header with the seal applied during instantiation.
26
+ * @param headerData Header fields for the Clique block
27
+ * @param cliqueSigner Private key bytes used to sign the header
28
+ * @param opts {@link BlockOptions}
29
+ * @returns A sealed {@link BlockHeader}
30
+ */
31
+ export declare function createSealedCliqueBlockHeader(headerData: HeaderData | undefined, cliqueSigner: Uint8Array, opts?: BlockOptions): BlockHeader;
32
+ /**
33
+ * Creates a new block header object from Ethereum JSON RPC.
34
+ *
35
+ * @param blockParams - Ethereum JSON RPC of block (eth_getBlockByNumber)
36
+ * @param options - An object describing the blockchain
37
+ */
38
+ export declare function createBlockHeaderFromRPC(blockParams: JSONRPCBlock, options?: BlockOptions): BlockHeader;
39
+ //# sourceMappingURL=constructors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constructors.d.ts","sourceRoot":"","sources":["../../../src/header/constructors.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEzC,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE3F;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,GAAE,UAAe,EAAE,IAAI,GAAE,YAAiB,eAErF;AAED;;;;;GAKG;AACH,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,gBAAgB,EAAE,IAAI,GAAE,YAAiB,eAmChG;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,oBAAoB,EAAE,UAAU,EAChC,IAAI,GAAE,YAAiB,eAOxB;AAED;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAC3C,UAAU,EAAE,UAAU,YAAK,EAC3B,YAAY,EAAE,UAAU,EACxB,IAAI,GAAE,YAAiB,GACtB,WAAW,CAab;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,YAAY,eAyDzF"}
@@ -0,0 +1,127 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createBlockHeader = createBlockHeader;
4
+ exports.createBlockHeaderFromBytesArray = createBlockHeaderFromBytesArray;
5
+ exports.createBlockHeaderFromRLP = createBlockHeaderFromRLP;
6
+ exports.createSealedCliqueBlockHeader = createSealedCliqueBlockHeader;
7
+ exports.createBlockHeaderFromRPC = createBlockHeaderFromRPC;
8
+ const rlp_1 = require("@feelyourprotocol/rlp");
9
+ const util_1 = require("@feelyourprotocol/util");
10
+ const clique_ts_1 = require("../consensus/clique.js");
11
+ const helpers_ts_1 = require("../helpers.js");
12
+ const index_ts_1 = require("../index.js");
13
+ /**
14
+ * Static constructor to create a block header from a header data dictionary
15
+ *
16
+ * @param headerData
17
+ * @param opts
18
+ */
19
+ function createBlockHeader(headerData = {}, opts = {}) {
20
+ return new index_ts_1.BlockHeader(headerData, opts);
21
+ }
22
+ /**
23
+ * Static constructor to create a block header from an array of bytes values
24
+ *
25
+ * @param values
26
+ * @param opts
27
+ */
28
+ function createBlockHeaderFromBytesArray(values, opts = {}) {
29
+ const headerData = (0, helpers_ts_1.valuesArrayToHeaderData)(values);
30
+ const { number, baseFeePerGas, excessBlobGas, blobGasUsed, parentBeaconBlockRoot, requestsHash } = headerData;
31
+ const header = createBlockHeader(headerData, opts);
32
+ if (header.common.isActivatedEIP(1559) && baseFeePerGas === undefined) {
33
+ const eip1559ActivationBlock = (0, util_1.bigIntToBytes)(header.common.eipBlock(1559));
34
+ if (eip1559ActivationBlock !== undefined &&
35
+ (0, util_1.equalsBytes)(eip1559ActivationBlock, number)) {
36
+ throw (0, util_1.EthereumJSErrorWithoutCode)('invalid header. baseFeePerGas should be provided');
37
+ }
38
+ }
39
+ if (header.common.isActivatedEIP(4844)) {
40
+ if (excessBlobGas === undefined) {
41
+ throw (0, util_1.EthereumJSErrorWithoutCode)('invalid header. excessBlobGas should be provided');
42
+ }
43
+ else if (blobGasUsed === undefined) {
44
+ throw (0, util_1.EthereumJSErrorWithoutCode)('invalid header. blobGasUsed should be provided');
45
+ }
46
+ }
47
+ if (header.common.isActivatedEIP(4788) && parentBeaconBlockRoot === undefined) {
48
+ throw (0, util_1.EthereumJSErrorWithoutCode)('invalid header. parentBeaconBlockRoot should be provided');
49
+ }
50
+ if (header.common.isActivatedEIP(7685) && requestsHash === undefined) {
51
+ throw (0, util_1.EthereumJSErrorWithoutCode)('invalid header. requestsHash should be provided');
52
+ }
53
+ if (header.common.isActivatedEIP(7928) && header.blockAccessListHash === undefined) {
54
+ throw (0, util_1.EthereumJSErrorWithoutCode)('invalid header. blockAccessListHash should be provided');
55
+ }
56
+ if (header.common.isActivatedEIP(7843) && header.slotNumber === undefined) {
57
+ throw (0, util_1.EthereumJSErrorWithoutCode)('invalid header. slotNumber should be provided');
58
+ }
59
+ return header;
60
+ }
61
+ /**
62
+ * Static constructor to create a block header from a RLP-serialized header
63
+ *
64
+ * @param serializedHeaderData
65
+ * @param opts
66
+ */
67
+ function createBlockHeaderFromRLP(serializedHeaderData, opts = {}) {
68
+ const values = rlp_1.RLP.decode(serializedHeaderData);
69
+ if (!Array.isArray(values)) {
70
+ throw (0, util_1.EthereumJSErrorWithoutCode)('Invalid serialized header input. Must be array');
71
+ }
72
+ return createBlockHeaderFromBytesArray(values, opts);
73
+ }
74
+ /**
75
+ * Creates a Clique block header with the seal applied during instantiation.
76
+ * @param headerData Header fields for the Clique block
77
+ * @param cliqueSigner Private key bytes used to sign the header
78
+ * @param opts {@link BlockOptions}
79
+ * @returns A sealed {@link BlockHeader}
80
+ */
81
+ function createSealedCliqueBlockHeader(headerData = {}, cliqueSigner, opts = {}) {
82
+ const sealedCliqueBlockHeader = new index_ts_1.BlockHeader(headerData, {
83
+ ...opts,
84
+ ...{ skipConsensusFormatValidation: true },
85
+ });
86
+ sealedCliqueBlockHeader.extraData = (0, clique_ts_1.generateCliqueBlockExtraData)(sealedCliqueBlockHeader, cliqueSigner);
87
+ if (opts.skipConsensusFormatValidation === false)
88
+ // We need to validate the consensus format here since we skipped it when constructing the block header
89
+ sealedCliqueBlockHeader['_consensusFormatValidation']();
90
+ return sealedCliqueBlockHeader;
91
+ }
92
+ /**
93
+ * Creates a new block header object from Ethereum JSON RPC.
94
+ *
95
+ * @param blockParams - Ethereum JSON RPC of block (eth_getBlockByNumber)
96
+ * @param options - An object describing the blockchain
97
+ */
98
+ function createBlockHeaderFromRPC(blockParams, options) {
99
+ const { parentHash, sha3Uncles, miner, stateRoot, transactionsRoot, receiptsRoot, logsBloom, difficulty, number, gasLimit, gasUsed, timestamp, extraData, mixHash, nonce, baseFeePerGas, withdrawalsRoot, blobGasUsed, excessBlobGas, parentBeaconBlockRoot, requestsHash, blockAccessListHash, slotNumber, } = blockParams;
100
+ const blockHeader = new index_ts_1.BlockHeader({
101
+ parentHash,
102
+ uncleHash: sha3Uncles,
103
+ coinbase: miner,
104
+ stateRoot,
105
+ transactionsTrie: transactionsRoot,
106
+ receiptTrie: receiptsRoot,
107
+ logsBloom,
108
+ difficulty: (0, helpers_ts_1.numberToHex)(difficulty),
109
+ number,
110
+ gasLimit,
111
+ gasUsed,
112
+ timestamp,
113
+ extraData,
114
+ mixHash,
115
+ nonce,
116
+ baseFeePerGas,
117
+ withdrawalsRoot,
118
+ blobGasUsed,
119
+ excessBlobGas,
120
+ parentBeaconBlockRoot,
121
+ requestsHash,
122
+ blockAccessListHash,
123
+ slotNumber,
124
+ }, options);
125
+ return blockHeader;
126
+ }
127
+ //# sourceMappingURL=constructors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constructors.js","sourceRoot":"","sources":["../../../src/header/constructors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,134 @@
1
+ import { Common } from '@feelyourprotocol/common';
2
+ import { Address } from '@feelyourprotocol/util';
3
+ import type { BlockHeaderBytes, BlockOptions, HeaderData, JSONHeader } from '../types.ts';
4
+ interface HeaderCache {
5
+ hash: Uint8Array | undefined;
6
+ }
7
+ /**
8
+ * An object that represents the block header.
9
+ */
10
+ export declare class BlockHeader {
11
+ readonly parentHash: Uint8Array;
12
+ readonly uncleHash: Uint8Array;
13
+ readonly coinbase: Address;
14
+ readonly stateRoot: Uint8Array;
15
+ readonly transactionsTrie: Uint8Array;
16
+ readonly receiptTrie: Uint8Array;
17
+ readonly logsBloom: Uint8Array;
18
+ readonly difficulty: bigint;
19
+ readonly number: bigint;
20
+ readonly gasLimit: bigint;
21
+ readonly gasUsed: bigint;
22
+ readonly timestamp: bigint;
23
+ readonly extraData: Uint8Array;
24
+ readonly mixHash: Uint8Array;
25
+ readonly nonce: Uint8Array;
26
+ readonly baseFeePerGas?: bigint;
27
+ readonly withdrawalsRoot?: Uint8Array;
28
+ readonly blobGasUsed?: bigint;
29
+ readonly excessBlobGas?: bigint;
30
+ readonly parentBeaconBlockRoot?: Uint8Array;
31
+ readonly requestsHash?: Uint8Array;
32
+ readonly blockAccessListHash?: Uint8Array;
33
+ readonly slotNumber?: bigint;
34
+ readonly common: Common;
35
+ protected keccakFunction: (msg: Uint8Array) => Uint8Array;
36
+ protected cache: HeaderCache;
37
+ /**
38
+ * EIP-4399: After merge to PoS, `mixHash` supplanted as `prevRandao`
39
+ */
40
+ get prevRandao(): Uint8Array<ArrayBufferLike>;
41
+ /**
42
+ * This constructor takes the values, validates them, assigns them and freezes the object.
43
+ *
44
+ * @deprecated Use the public static factory methods to assist in creating a Header object from
45
+ * varying data types. For a default empty header, use {@link createBlockHeader}.
46
+ *
47
+ */
48
+ constructor(headerData: HeaderData, opts?: BlockOptions);
49
+ /**
50
+ * Validates correct buffer lengths, throws if invalid.
51
+ */
52
+ protected _genericFormatValidation(): void;
53
+ /**
54
+ * Checks static parameters related to consensus algorithm
55
+ * @throws if any check fails
56
+ */
57
+ protected _consensusFormatValidation(): void;
58
+ /**
59
+ * Validates if the block gasLimit remains in the boundaries set by the protocol.
60
+ * Throws if out of bounds.
61
+ *
62
+ * @param parentBlockHeader - the header from the parent `Block` of this header
63
+ */
64
+ validateGasLimit(parentBlockHeader: BlockHeader): void;
65
+ /**
66
+ * Calculates the base fee for a potential next block
67
+ */
68
+ calcNextBaseFee(): bigint;
69
+ /**
70
+ * Returns the price per unit of blob gas for a blob transaction in the current/pending block
71
+ * @returns the price in gwei per unit of blob gas spent
72
+ */
73
+ getBlobGasPrice(): bigint;
74
+ /**
75
+ * Returns the total fee for blob gas spent for including blobs in block.
76
+ *
77
+ * @param numBlobs number of blobs in the transaction/block
78
+ * @returns the total blob gas fee for numBlobs blobs
79
+ */
80
+ calcDataFee(numBlobs: number): bigint;
81
+ /**
82
+ * Calculates the excess blob gas for next (hopefully) post EIP 4844 block.
83
+ */
84
+ calcNextExcessBlobGas(childCommon: Common): bigint;
85
+ /**
86
+ * Calculate the blob gas price of the block built on top of this one
87
+ * @returns The blob gas price
88
+ */
89
+ calcNextBlobGasPrice(childCommon: Common): bigint;
90
+ /**
91
+ * Returns a Uint8Array Array of the raw Bytes in this header, in order.
92
+ */
93
+ raw(): BlockHeaderBytes;
94
+ /**
95
+ * Returns the hash of the block header.
96
+ */
97
+ hash(): Uint8Array;
98
+ /**
99
+ * Checks if the block header is a genesis header.
100
+ */
101
+ isGenesis(): boolean;
102
+ /**
103
+ * Returns the canonical difficulty for this block.
104
+ *
105
+ * @param parentBlockHeader - the header from the parent `Block` of this header
106
+ */
107
+ ethashCanonicalDifficulty(parentBlockHeader: BlockHeader): bigint;
108
+ /**
109
+ * Returns the rlp encoding of the block header.
110
+ */
111
+ serialize(): Uint8Array;
112
+ /**
113
+ * Returns the block header in JSON format.
114
+ */
115
+ toJSON(): JSONHeader;
116
+ /**
117
+ * Validates extra data is DAO_ExtraData for DAO_ForceExtraDataRange blocks after DAO
118
+ * activation block (see: https://blog.slock.it/hard-fork-specification-24b889e70703)
119
+ */
120
+ protected _validateDAOExtraData(): void;
121
+ /**
122
+ * Return a compact error string representation of the object
123
+ */
124
+ errorStr(): string;
125
+ /**
126
+ * Helper function to create an annotated error message
127
+ *
128
+ * @param msg Base error message
129
+ * @hidden
130
+ */
131
+ protected _errorMsg(msg: string): string;
132
+ }
133
+ export {};
134
+ //# sourceMappingURL=header.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"header.d.ts","sourceRoot":"","sources":["../../../src/header/header.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAwD,MAAM,oBAAoB,CAAA;AAEjG,OAAO,EACL,OAAO,EAkBR,MAAM,kBAAkB,CAAA;AAWzB,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAEzF,UAAU,WAAW;IACnB,IAAI,EAAE,UAAU,GAAG,SAAS,CAAA;CAC7B;AAID;;GAEG;AACH,qBAAa,WAAW;IACtB,SAAgB,UAAU,EAAE,UAAU,CAAA;IACtC,SAAgB,SAAS,EAAE,UAAU,CAAA;IACrC,SAAgB,QAAQ,EAAE,OAAO,CAAA;IACjC,SAAgB,SAAS,EAAE,UAAU,CAAA;IACrC,SAAgB,gBAAgB,EAAE,UAAU,CAAA;IAC5C,SAAgB,WAAW,EAAE,UAAU,CAAA;IACvC,SAAgB,SAAS,EAAE,UAAU,CAAA;IACrC,SAAgB,UAAU,EAAE,MAAM,CAAA;IAClC,SAAgB,MAAM,EAAE,MAAM,CAAA;IAC9B,SAAgB,QAAQ,EAAE,MAAM,CAAA;IAChC,SAAgB,OAAO,EAAE,MAAM,CAAA;IAC/B,SAAgB,SAAS,EAAE,MAAM,CAAA;IACjC,SAAgB,SAAS,EAAE,UAAU,CAAA;IACrC,SAAgB,OAAO,EAAE,UAAU,CAAA;IACnC,SAAgB,KAAK,EAAE,UAAU,CAAA;IACjC,SAAgB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtC,SAAgB,eAAe,CAAC,EAAE,UAAU,CAAA;IAC5C,SAAgB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpC,SAAgB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtC,SAAgB,qBAAqB,CAAC,EAAE,UAAU,CAAA;IAClD,SAAgB,YAAY,CAAC,EAAE,UAAU,CAAA;IACzC,SAAgB,mBAAmB,CAAC,EAAE,UAAU,CAAA;IAChD,SAAgB,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnC,SAAgB,MAAM,EAAE,MAAM,CAAA;IAE9B,SAAS,CAAC,cAAc,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,UAAU,CAAA;IAEzD,SAAS,CAAC,KAAK,EAAE,WAAW,CAE3B;IAED;;OAEG;IACH,IAAI,UAAU,gCAQb;IAED;;;;;;OAMG;gBACS,UAAU,EAAE,UAAU,EAAE,IAAI,GAAE,YAAiB;IA4L3D;;OAEG;IACH,SAAS,CAAC,wBAAwB;IAqHlC;;;OAGG;IACH,SAAS,CAAC,0BAA0B;IAgFpC;;;;;OAKG;IACH,gBAAgB,CAAC,iBAAiB,EAAE,WAAW;IA2C/C;;OAEG;IACI,eAAe,IAAI,MAAM;IAkChC;;;OAGG;IACH,eAAe,IAAI,MAAM;IAOzB;;;;;OAKG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAQrC;;OAEG;IACI,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IA6BzD;;;OAGG;IACI,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAIxD;;OAEG;IACH,GAAG,IAAI,gBAAgB;IA+CvB;;OAEG;IACH,IAAI,IAAI,UAAU;IAQlB;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;;;OAIG;IACH,yBAAyB,CAAC,iBAAiB,EAAE,WAAW,GAAG,MAAM;IAoEjE;;OAEG;IACH,SAAS,IAAI,UAAU;IAIvB;;OAEG;IACH,MAAM,IAAI,UAAU;IA4CpB;;;OAGG;IACH,SAAS,CAAC,qBAAqB;IAqB/B;;OAEG;IACI,QAAQ;IAkBf;;;;;OAKG;IACH,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM;CAGhC"}