@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,169 @@
|
|
|
1
|
+
import { RLP } from '@feelyourprotocol/rlp'
|
|
2
|
+
import { EthereumJSErrorWithoutCode, bigIntToBytes, equalsBytes } from '@feelyourprotocol/util'
|
|
3
|
+
|
|
4
|
+
import { generateCliqueBlockExtraData } from '../consensus/clique.ts'
|
|
5
|
+
import { numberToHex, valuesArrayToHeaderData } from '../helpers.ts'
|
|
6
|
+
import { BlockHeader } from '../index.ts'
|
|
7
|
+
|
|
8
|
+
import type { BlockHeaderBytes, BlockOptions, HeaderData, JSONRPCBlock } from '../types.ts'
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Static constructor to create a block header from a header data dictionary
|
|
12
|
+
*
|
|
13
|
+
* @param headerData
|
|
14
|
+
* @param opts
|
|
15
|
+
*/
|
|
16
|
+
export function createBlockHeader(headerData: HeaderData = {}, opts: BlockOptions = {}) {
|
|
17
|
+
return new BlockHeader(headerData, opts)
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Static constructor to create a block header from an array of bytes values
|
|
22
|
+
*
|
|
23
|
+
* @param values
|
|
24
|
+
* @param opts
|
|
25
|
+
*/
|
|
26
|
+
export function createBlockHeaderFromBytesArray(values: BlockHeaderBytes, opts: BlockOptions = {}) {
|
|
27
|
+
const headerData = valuesArrayToHeaderData(values)
|
|
28
|
+
const { number, baseFeePerGas, excessBlobGas, blobGasUsed, parentBeaconBlockRoot, requestsHash } =
|
|
29
|
+
headerData
|
|
30
|
+
const header = createBlockHeader(headerData, opts)
|
|
31
|
+
if (header.common.isActivatedEIP(1559) && baseFeePerGas === undefined) {
|
|
32
|
+
const eip1559ActivationBlock = bigIntToBytes(header.common.eipBlock(1559)!)
|
|
33
|
+
if (
|
|
34
|
+
eip1559ActivationBlock !== undefined &&
|
|
35
|
+
equalsBytes(eip1559ActivationBlock, number as Uint8Array)
|
|
36
|
+
) {
|
|
37
|
+
throw EthereumJSErrorWithoutCode('invalid header. baseFeePerGas should be provided')
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
if (header.common.isActivatedEIP(4844)) {
|
|
41
|
+
if (excessBlobGas === undefined) {
|
|
42
|
+
throw EthereumJSErrorWithoutCode('invalid header. excessBlobGas should be provided')
|
|
43
|
+
} else if (blobGasUsed === undefined) {
|
|
44
|
+
throw EthereumJSErrorWithoutCode('invalid header. blobGasUsed should be provided')
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
if (header.common.isActivatedEIP(4788) && parentBeaconBlockRoot === undefined) {
|
|
48
|
+
throw EthereumJSErrorWithoutCode('invalid header. parentBeaconBlockRoot should be provided')
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
if (header.common.isActivatedEIP(7685) && requestsHash === undefined) {
|
|
52
|
+
throw EthereumJSErrorWithoutCode('invalid header. requestsHash should be provided')
|
|
53
|
+
}
|
|
54
|
+
if (header.common.isActivatedEIP(7928) && header.blockAccessListHash === undefined) {
|
|
55
|
+
throw EthereumJSErrorWithoutCode('invalid header. blockAccessListHash should be provided')
|
|
56
|
+
}
|
|
57
|
+
if (header.common.isActivatedEIP(7843) && header.slotNumber === undefined) {
|
|
58
|
+
throw EthereumJSErrorWithoutCode('invalid header. slotNumber should be provided')
|
|
59
|
+
}
|
|
60
|
+
return header
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Static constructor to create a block header from a RLP-serialized header
|
|
65
|
+
*
|
|
66
|
+
* @param serializedHeaderData
|
|
67
|
+
* @param opts
|
|
68
|
+
*/
|
|
69
|
+
export function createBlockHeaderFromRLP(
|
|
70
|
+
serializedHeaderData: Uint8Array,
|
|
71
|
+
opts: BlockOptions = {},
|
|
72
|
+
) {
|
|
73
|
+
const values = RLP.decode(serializedHeaderData)
|
|
74
|
+
if (!Array.isArray(values)) {
|
|
75
|
+
throw EthereumJSErrorWithoutCode('Invalid serialized header input. Must be array')
|
|
76
|
+
}
|
|
77
|
+
return createBlockHeaderFromBytesArray(values as Uint8Array[], opts)
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Creates a Clique block header with the seal applied during instantiation.
|
|
82
|
+
* @param headerData Header fields for the Clique block
|
|
83
|
+
* @param cliqueSigner Private key bytes used to sign the header
|
|
84
|
+
* @param opts {@link BlockOptions}
|
|
85
|
+
* @returns A sealed {@link BlockHeader}
|
|
86
|
+
*/
|
|
87
|
+
export function createSealedCliqueBlockHeader(
|
|
88
|
+
headerData: HeaderData = {},
|
|
89
|
+
cliqueSigner: Uint8Array,
|
|
90
|
+
opts: BlockOptions = {},
|
|
91
|
+
): BlockHeader {
|
|
92
|
+
const sealedCliqueBlockHeader = new BlockHeader(headerData, {
|
|
93
|
+
...opts,
|
|
94
|
+
...{ skipConsensusFormatValidation: true },
|
|
95
|
+
})
|
|
96
|
+
;(sealedCliqueBlockHeader.extraData as any) = generateCliqueBlockExtraData(
|
|
97
|
+
sealedCliqueBlockHeader,
|
|
98
|
+
cliqueSigner,
|
|
99
|
+
)
|
|
100
|
+
if (opts.skipConsensusFormatValidation === false)
|
|
101
|
+
// We need to validate the consensus format here since we skipped it when constructing the block header
|
|
102
|
+
sealedCliqueBlockHeader['_consensusFormatValidation']()
|
|
103
|
+
return sealedCliqueBlockHeader
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Creates a new block header object from Ethereum JSON RPC.
|
|
108
|
+
*
|
|
109
|
+
* @param blockParams - Ethereum JSON RPC of block (eth_getBlockByNumber)
|
|
110
|
+
* @param options - An object describing the blockchain
|
|
111
|
+
*/
|
|
112
|
+
export function createBlockHeaderFromRPC(blockParams: JSONRPCBlock, options?: BlockOptions) {
|
|
113
|
+
const {
|
|
114
|
+
parentHash,
|
|
115
|
+
sha3Uncles,
|
|
116
|
+
miner,
|
|
117
|
+
stateRoot,
|
|
118
|
+
transactionsRoot,
|
|
119
|
+
receiptsRoot,
|
|
120
|
+
logsBloom,
|
|
121
|
+
difficulty,
|
|
122
|
+
number,
|
|
123
|
+
gasLimit,
|
|
124
|
+
gasUsed,
|
|
125
|
+
timestamp,
|
|
126
|
+
extraData,
|
|
127
|
+
mixHash,
|
|
128
|
+
nonce,
|
|
129
|
+
baseFeePerGas,
|
|
130
|
+
withdrawalsRoot,
|
|
131
|
+
blobGasUsed,
|
|
132
|
+
excessBlobGas,
|
|
133
|
+
parentBeaconBlockRoot,
|
|
134
|
+
requestsHash,
|
|
135
|
+
blockAccessListHash,
|
|
136
|
+
slotNumber,
|
|
137
|
+
} = blockParams
|
|
138
|
+
|
|
139
|
+
const blockHeader = new BlockHeader(
|
|
140
|
+
{
|
|
141
|
+
parentHash,
|
|
142
|
+
uncleHash: sha3Uncles,
|
|
143
|
+
coinbase: miner,
|
|
144
|
+
stateRoot,
|
|
145
|
+
transactionsTrie: transactionsRoot,
|
|
146
|
+
receiptTrie: receiptsRoot,
|
|
147
|
+
logsBloom,
|
|
148
|
+
difficulty: numberToHex(difficulty),
|
|
149
|
+
number,
|
|
150
|
+
gasLimit,
|
|
151
|
+
gasUsed,
|
|
152
|
+
timestamp,
|
|
153
|
+
extraData,
|
|
154
|
+
mixHash,
|
|
155
|
+
nonce,
|
|
156
|
+
baseFeePerGas,
|
|
157
|
+
withdrawalsRoot,
|
|
158
|
+
blobGasUsed,
|
|
159
|
+
excessBlobGas,
|
|
160
|
+
parentBeaconBlockRoot,
|
|
161
|
+
requestsHash,
|
|
162
|
+
blockAccessListHash,
|
|
163
|
+
slotNumber,
|
|
164
|
+
},
|
|
165
|
+
options,
|
|
166
|
+
)
|
|
167
|
+
|
|
168
|
+
return blockHeader
|
|
169
|
+
}
|