@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,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"}
|