@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 @@
1
+ {"version":3,"file":"from-beacon-payload.js","sourceRoot":"","sources":["../../src/from-beacon-payload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAoC9C;;;GAGG;AACH,MAAM,UAAU,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,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACtD,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAChD,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC9C,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACjD,SAAS,EAAE,OAAO,CAAC,UAAU;QAC7B,aAAa,EAAE,WAAW,CAAC,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,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;YACpC,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC;YACvD,OAAO,EAAE,EAAE,CAAC,OAAO;YACnB,MAAM,EAAE,WAAW,CAAC,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,WAAW,CAAC,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,WAAW,CAAC,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,120 @@
1
+ import { RLP } from '@feelyourprotocol/rlp';
2
+ import { EthereumJSErrorWithoutCode, bigIntToBytes, equalsBytes } from '@feelyourprotocol/util';
3
+ import { generateCliqueBlockExtraData } from "../consensus/clique.js";
4
+ import { numberToHex, valuesArrayToHeaderData } from "../helpers.js";
5
+ import { BlockHeader } from "../index.js";
6
+ /**
7
+ * Static constructor to create a block header from a header data dictionary
8
+ *
9
+ * @param headerData
10
+ * @param opts
11
+ */
12
+ export function createBlockHeader(headerData = {}, opts = {}) {
13
+ return new BlockHeader(headerData, opts);
14
+ }
15
+ /**
16
+ * Static constructor to create a block header from an array of bytes values
17
+ *
18
+ * @param values
19
+ * @param opts
20
+ */
21
+ export function createBlockHeaderFromBytesArray(values, opts = {}) {
22
+ const headerData = valuesArrayToHeaderData(values);
23
+ const { number, baseFeePerGas, excessBlobGas, blobGasUsed, parentBeaconBlockRoot, requestsHash } = headerData;
24
+ const header = createBlockHeader(headerData, opts);
25
+ if (header.common.isActivatedEIP(1559) && baseFeePerGas === undefined) {
26
+ const eip1559ActivationBlock = bigIntToBytes(header.common.eipBlock(1559));
27
+ if (eip1559ActivationBlock !== undefined &&
28
+ equalsBytes(eip1559ActivationBlock, number)) {
29
+ throw EthereumJSErrorWithoutCode('invalid header. baseFeePerGas should be provided');
30
+ }
31
+ }
32
+ if (header.common.isActivatedEIP(4844)) {
33
+ if (excessBlobGas === undefined) {
34
+ throw EthereumJSErrorWithoutCode('invalid header. excessBlobGas should be provided');
35
+ }
36
+ else if (blobGasUsed === undefined) {
37
+ throw EthereumJSErrorWithoutCode('invalid header. blobGasUsed should be provided');
38
+ }
39
+ }
40
+ if (header.common.isActivatedEIP(4788) && parentBeaconBlockRoot === undefined) {
41
+ throw EthereumJSErrorWithoutCode('invalid header. parentBeaconBlockRoot should be provided');
42
+ }
43
+ if (header.common.isActivatedEIP(7685) && requestsHash === undefined) {
44
+ throw EthereumJSErrorWithoutCode('invalid header. requestsHash should be provided');
45
+ }
46
+ if (header.common.isActivatedEIP(7928) && header.blockAccessListHash === undefined) {
47
+ throw EthereumJSErrorWithoutCode('invalid header. blockAccessListHash should be provided');
48
+ }
49
+ if (header.common.isActivatedEIP(7843) && header.slotNumber === undefined) {
50
+ throw EthereumJSErrorWithoutCode('invalid header. slotNumber should be provided');
51
+ }
52
+ return header;
53
+ }
54
+ /**
55
+ * Static constructor to create a block header from a RLP-serialized header
56
+ *
57
+ * @param serializedHeaderData
58
+ * @param opts
59
+ */
60
+ export function createBlockHeaderFromRLP(serializedHeaderData, opts = {}) {
61
+ const values = RLP.decode(serializedHeaderData);
62
+ if (!Array.isArray(values)) {
63
+ throw EthereumJSErrorWithoutCode('Invalid serialized header input. Must be array');
64
+ }
65
+ return createBlockHeaderFromBytesArray(values, opts);
66
+ }
67
+ /**
68
+ * Creates a Clique block header with the seal applied during instantiation.
69
+ * @param headerData Header fields for the Clique block
70
+ * @param cliqueSigner Private key bytes used to sign the header
71
+ * @param opts {@link BlockOptions}
72
+ * @returns A sealed {@link BlockHeader}
73
+ */
74
+ export function createSealedCliqueBlockHeader(headerData = {}, cliqueSigner, opts = {}) {
75
+ const sealedCliqueBlockHeader = new BlockHeader(headerData, {
76
+ ...opts,
77
+ ...{ skipConsensusFormatValidation: true },
78
+ });
79
+ sealedCliqueBlockHeader.extraData = generateCliqueBlockExtraData(sealedCliqueBlockHeader, cliqueSigner);
80
+ if (opts.skipConsensusFormatValidation === false)
81
+ // We need to validate the consensus format here since we skipped it when constructing the block header
82
+ sealedCliqueBlockHeader['_consensusFormatValidation']();
83
+ return sealedCliqueBlockHeader;
84
+ }
85
+ /**
86
+ * Creates a new block header object from Ethereum JSON RPC.
87
+ *
88
+ * @param blockParams - Ethereum JSON RPC of block (eth_getBlockByNumber)
89
+ * @param options - An object describing the blockchain
90
+ */
91
+ export function createBlockHeaderFromRPC(blockParams, options) {
92
+ 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;
93
+ const blockHeader = new BlockHeader({
94
+ parentHash,
95
+ uncleHash: sha3Uncles,
96
+ coinbase: miner,
97
+ stateRoot,
98
+ transactionsTrie: transactionsRoot,
99
+ receiptTrie: receiptsRoot,
100
+ logsBloom,
101
+ difficulty: numberToHex(difficulty),
102
+ number,
103
+ gasLimit,
104
+ gasUsed,
105
+ timestamp,
106
+ extraData,
107
+ mixHash,
108
+ nonce,
109
+ baseFeePerGas,
110
+ withdrawalsRoot,
111
+ blobGasUsed,
112
+ excessBlobGas,
113
+ parentBeaconBlockRoot,
114
+ requestsHash,
115
+ blockAccessListHash,
116
+ slotNumber,
117
+ }, options);
118
+ return blockHeader;
119
+ }
120
+ //# 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"}