@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.
- package/LICENSE +373 -0
- package/README.md +466 -0
- package/dist/cjs/block/block.d.ts +147 -0
- package/dist/cjs/block/block.d.ts.map +1 -0
- package/dist/cjs/block/block.js +415 -0
- package/dist/cjs/block/block.js.map +1 -0
- package/dist/cjs/block/constructors.d.ts +77 -0
- package/dist/cjs/block/constructors.d.ts.map +1 -0
- package/dist/cjs/block/constructors.js +298 -0
- package/dist/cjs/block/constructors.js.map +1 -0
- package/dist/cjs/block/index.d.ts +3 -0
- package/dist/cjs/block/index.d.ts.map +1 -0
- package/dist/cjs/block/index.js +19 -0
- package/dist/cjs/block/index.js.map +1 -0
- package/dist/cjs/consensus/clique.d.ts +52 -0
- package/dist/cjs/consensus/clique.d.ts.map +1 -0
- package/dist/cjs/consensus/clique.js +144 -0
- package/dist/cjs/consensus/clique.js.map +1 -0
- package/dist/cjs/consensus/ethash.d.ts +9 -0
- package/dist/cjs/consensus/ethash.d.ts.map +1 -0
- package/dist/cjs/consensus/ethash.js +13 -0
- package/dist/cjs/consensus/ethash.js.map +1 -0
- package/dist/cjs/consensus/index.d.ts +3 -0
- package/dist/cjs/consensus/index.d.ts.map +1 -0
- package/dist/cjs/consensus/index.js +29 -0
- package/dist/cjs/consensus/index.js.map +1 -0
- package/dist/cjs/from-beacon-payload.d.ts +36 -0
- package/dist/cjs/from-beacon-payload.d.ts.map +1 -0
- package/dist/cjs/from-beacon-payload.js +48 -0
- package/dist/cjs/from-beacon-payload.js.map +1 -0
- package/dist/cjs/header/constructors.d.ts +39 -0
- package/dist/cjs/header/constructors.d.ts.map +1 -0
- package/dist/cjs/header/constructors.js +127 -0
- package/dist/cjs/header/constructors.js.map +1 -0
- package/dist/cjs/header/header.d.ts +134 -0
- package/dist/cjs/header/header.d.ts.map +1 -0
- package/dist/cjs/header/header.js +699 -0
- package/dist/cjs/header/header.js.map +1 -0
- package/dist/cjs/header/index.d.ts +3 -0
- package/dist/cjs/header/index.d.ts.map +1 -0
- package/dist/cjs/header/index.js +19 -0
- package/dist/cjs/header/index.js.map +1 -0
- package/dist/cjs/helpers.d.ts +59 -0
- package/dist/cjs/helpers.d.ts.map +1 -0
- package/dist/cjs/helpers.js +172 -0
- package/dist/cjs/helpers.js.map +1 -0
- package/dist/cjs/index.d.ts +8 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +31 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/params.d.ts +3 -0
- package/dist/cjs/params.d.ts.map +1 -0
- package/dist/cjs/params.js +97 -0
- package/dist/cjs/params.js.map +1 -0
- package/dist/cjs/types.d.ts +228 -0
- package/dist/cjs/types.d.ts.map +1 -0
- package/dist/cjs/types.js +3 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/esm/block/block.d.ts +147 -0
- package/dist/esm/block/block.d.ts.map +1 -0
- package/dist/esm/block/block.js +411 -0
- package/dist/esm/block/block.js.map +1 -0
- package/dist/esm/block/constructors.d.ts +77 -0
- package/dist/esm/block/constructors.d.ts.map +1 -0
- package/dist/esm/block/constructors.js +286 -0
- package/dist/esm/block/constructors.js.map +1 -0
- package/dist/esm/block/index.d.ts +3 -0
- package/dist/esm/block/index.d.ts.map +1 -0
- package/dist/esm/block/index.js +3 -0
- package/dist/esm/block/index.js.map +1 -0
- package/dist/esm/consensus/clique.d.ts +52 -0
- package/dist/esm/consensus/clique.d.ts.map +1 -0
- package/dist/esm/consensus/clique.js +132 -0
- package/dist/esm/consensus/clique.js.map +1 -0
- package/dist/esm/consensus/ethash.d.ts +9 -0
- package/dist/esm/consensus/ethash.d.ts.map +1 -0
- package/dist/esm/consensus/ethash.js +10 -0
- package/dist/esm/consensus/ethash.js.map +1 -0
- package/dist/esm/consensus/index.d.ts +3 -0
- package/dist/esm/consensus/index.d.ts.map +1 -0
- package/dist/esm/consensus/index.js +3 -0
- package/dist/esm/consensus/index.js.map +1 -0
- package/dist/esm/from-beacon-payload.d.ts +36 -0
- package/dist/esm/from-beacon-payload.d.ts.map +1 -0
- package/dist/esm/from-beacon-payload.js +45 -0
- package/dist/esm/from-beacon-payload.js.map +1 -0
- package/dist/esm/header/constructors.d.ts +39 -0
- package/dist/esm/header/constructors.d.ts.map +1 -0
- package/dist/esm/header/constructors.js +120 -0
- package/dist/esm/header/constructors.js.map +1 -0
- package/dist/esm/header/header.d.ts +134 -0
- package/dist/esm/header/header.d.ts.map +1 -0
- package/dist/esm/header/header.js +695 -0
- package/dist/esm/header/header.js.map +1 -0
- package/dist/esm/header/index.d.ts +3 -0
- package/dist/esm/header/index.d.ts.map +1 -0
- package/dist/esm/header/index.js +3 -0
- package/dist/esm/header/index.js.map +1 -0
- package/dist/esm/helpers.d.ts +59 -0
- package/dist/esm/helpers.d.ts.map +1 -0
- package/dist/esm/helpers.js +161 -0
- package/dist/esm/helpers.js.map +1 -0
- package/dist/esm/index.d.ts +8 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +8 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/params.d.ts +3 -0
- package/dist/esm/params.d.ts.map +1 -0
- package/dist/esm/params.js +94 -0
- package/dist/esm/params.js.map +1 -0
- package/dist/esm/types.d.ts +228 -0
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/types.js +2 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/tsconfig.prod.cjs.tsbuildinfo +1 -0
- package/dist/tsconfig.prod.esm.tsbuildinfo +1 -0
- package/package.json +75 -0
- package/src/block/block.ts +526 -0
- package/src/block/constructors.ts +407 -0
- package/src/block/index.ts +2 -0
- package/src/consensus/clique.ts +171 -0
- package/src/consensus/ethash.ts +11 -0
- package/src/consensus/index.ts +12 -0
- package/src/from-beacon-payload.ts +82 -0
- package/src/header/constructors.ts +169 -0
- package/src/header/header.ts +890 -0
- package/src/header/index.ts +2 -0
- package/src/helpers.ts +223 -0
- package/src/index.ts +13 -0
- package/src/params.ts +95 -0
- 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"}
|