@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,298 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createBlockFromJSONRPCProvider = void 0;
|
|
4
|
+
exports.createBlock = createBlock;
|
|
5
|
+
exports.createEmptyBlock = createEmptyBlock;
|
|
6
|
+
exports.createBlockFromBytesArray = createBlockFromBytesArray;
|
|
7
|
+
exports.createBlockFromRLP = createBlockFromRLP;
|
|
8
|
+
exports.createBlockFromRPC = createBlockFromRPC;
|
|
9
|
+
exports.createBlockFromExecutionPayload = createBlockFromExecutionPayload;
|
|
10
|
+
exports.createBlockFromBeaconPayloadJSON = createBlockFromBeaconPayloadJSON;
|
|
11
|
+
exports.createSealedCliqueBlock = createSealedCliqueBlock;
|
|
12
|
+
const mpt_1 = require("@feelyourprotocol/mpt");
|
|
13
|
+
const rlp_1 = require("@feelyourprotocol/rlp");
|
|
14
|
+
const tx_1 = require("@feelyourprotocol/tx");
|
|
15
|
+
const util_1 = require("@feelyourprotocol/util");
|
|
16
|
+
const clique_ts_1 = require("../consensus/clique.js");
|
|
17
|
+
const helpers_ts_1 = require("../helpers.js");
|
|
18
|
+
const index_ts_1 = require("../index.js");
|
|
19
|
+
/**
|
|
20
|
+
* Static constructor to create a block from a block data dictionary
|
|
21
|
+
*
|
|
22
|
+
* @param blockData
|
|
23
|
+
* @param opts
|
|
24
|
+
* @returns a new {@link Block} object
|
|
25
|
+
*/
|
|
26
|
+
function createBlock(blockData = {}, opts) {
|
|
27
|
+
const { header: headerData, transactions: txsData, uncleHeaders: uhsData, withdrawals: withdrawalsData, } = blockData;
|
|
28
|
+
const header = (0, index_ts_1.createBlockHeader)(headerData, opts);
|
|
29
|
+
// parse transactions
|
|
30
|
+
const transactions = [];
|
|
31
|
+
for (const txData of txsData ?? []) {
|
|
32
|
+
const tx = (0, tx_1.createTx)(txData, {
|
|
33
|
+
...opts,
|
|
34
|
+
// Use header common in case of setHardfork being activated
|
|
35
|
+
common: header.common,
|
|
36
|
+
});
|
|
37
|
+
transactions.push(tx);
|
|
38
|
+
}
|
|
39
|
+
// parse uncle headers
|
|
40
|
+
const uncleHeaders = [];
|
|
41
|
+
const uncleOpts = {
|
|
42
|
+
...opts,
|
|
43
|
+
// Use header common in case of setHardfork being activated
|
|
44
|
+
common: header.common,
|
|
45
|
+
// Disable this option here (all other options carried over), since this overwrites the provided Difficulty to an incorrect value
|
|
46
|
+
calcDifficultyFromHeader: undefined,
|
|
47
|
+
};
|
|
48
|
+
// Uncles are obsolete post-merge, any hardfork by option implies setHardfork
|
|
49
|
+
if (opts?.setHardfork !== undefined) {
|
|
50
|
+
uncleOpts.setHardfork = true;
|
|
51
|
+
}
|
|
52
|
+
for (const uhData of uhsData ?? []) {
|
|
53
|
+
const uh = (0, index_ts_1.createBlockHeader)(uhData, uncleOpts);
|
|
54
|
+
uncleHeaders.push(uh);
|
|
55
|
+
}
|
|
56
|
+
const withdrawals = withdrawalsData?.map(util_1.createWithdrawal);
|
|
57
|
+
return new index_ts_1.Block(header, transactions, uncleHeaders, withdrawals, opts);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Simple static constructor if only an empty block is needed
|
|
61
|
+
* (tree shaking advantages since it does not draw all the tx constructors in)
|
|
62
|
+
*
|
|
63
|
+
* @param headerData
|
|
64
|
+
* @param opts
|
|
65
|
+
* @returns a new {@link Block} object
|
|
66
|
+
*/
|
|
67
|
+
function createEmptyBlock(headerData, opts) {
|
|
68
|
+
const header = (0, index_ts_1.createBlockHeader)(headerData, opts);
|
|
69
|
+
return new index_ts_1.Block(header);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Static constructor to create a block from an array of Bytes values
|
|
73
|
+
*
|
|
74
|
+
* @param values
|
|
75
|
+
* @param opts
|
|
76
|
+
* @returns a new {@link Block} object
|
|
77
|
+
*/
|
|
78
|
+
function createBlockFromBytesArray(values, opts) {
|
|
79
|
+
if (values.length > 5) {
|
|
80
|
+
throw (0, util_1.EthereumJSErrorWithoutCode)(`invalid More values=${values.length} than expected were received (at most 5)`);
|
|
81
|
+
}
|
|
82
|
+
// First try to load header so that we can use its common (in case of setHardfork being activated)
|
|
83
|
+
// to correctly make checks on the hardforks
|
|
84
|
+
const [headerData, txsData, uhsData, ...valuesTail] = values;
|
|
85
|
+
const header = (0, index_ts_1.createBlockHeaderFromBytesArray)(headerData, opts);
|
|
86
|
+
// conditional assignment of rest of values and splicing them out from the valuesTail
|
|
87
|
+
const withdrawalBytes = header.common.isActivatedEIP(4895)
|
|
88
|
+
? valuesTail.splice(0, 1)[0]
|
|
89
|
+
: undefined;
|
|
90
|
+
if (header.common.isActivatedEIP(4895) &&
|
|
91
|
+
(withdrawalBytes === undefined || !Array.isArray(withdrawalBytes))) {
|
|
92
|
+
throw (0, util_1.EthereumJSErrorWithoutCode)('Invalid serialized block input: EIP-4895 is active, and no withdrawals were provided as array');
|
|
93
|
+
}
|
|
94
|
+
// parse transactions
|
|
95
|
+
const transactions = [];
|
|
96
|
+
for (const txData of txsData ?? []) {
|
|
97
|
+
transactions.push((0, tx_1.createTxFromBlockBodyData)(txData, {
|
|
98
|
+
...opts,
|
|
99
|
+
// Use header common in case of setHardfork being activated
|
|
100
|
+
common: header.common,
|
|
101
|
+
}));
|
|
102
|
+
}
|
|
103
|
+
// parse uncle headers
|
|
104
|
+
const uncleHeaders = [];
|
|
105
|
+
const uncleOpts = {
|
|
106
|
+
...opts,
|
|
107
|
+
// Use header common in case of setHardfork being activated
|
|
108
|
+
common: header.common,
|
|
109
|
+
// Disable this option here (all other options carried over), since this overwrites the provided Difficulty to an incorrect value
|
|
110
|
+
calcDifficultyFromHeader: undefined,
|
|
111
|
+
};
|
|
112
|
+
// Uncles are obsolete post-merge, any hardfork by option implies setHardfork
|
|
113
|
+
if (opts?.setHardfork !== undefined) {
|
|
114
|
+
uncleOpts.setHardfork = true;
|
|
115
|
+
}
|
|
116
|
+
for (const uncleHeaderData of uhsData ?? []) {
|
|
117
|
+
uncleHeaders.push((0, index_ts_1.createBlockHeaderFromBytesArray)(uncleHeaderData, uncleOpts));
|
|
118
|
+
}
|
|
119
|
+
const withdrawals = withdrawalBytes
|
|
120
|
+
?.map(([index, validatorIndex, address, amount]) => ({
|
|
121
|
+
index,
|
|
122
|
+
validatorIndex,
|
|
123
|
+
address,
|
|
124
|
+
amount,
|
|
125
|
+
}))
|
|
126
|
+
?.map(util_1.createWithdrawal);
|
|
127
|
+
return new index_ts_1.Block(header, transactions, uncleHeaders, withdrawals, opts);
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Static constructor to create a block from a RLP-serialized block
|
|
131
|
+
*
|
|
132
|
+
* @param serialized
|
|
133
|
+
* @param opts
|
|
134
|
+
* @returns a new {@link Block} object
|
|
135
|
+
*/
|
|
136
|
+
function createBlockFromRLP(serialized, opts) {
|
|
137
|
+
if (opts?.common?.isActivatedEIP(7934) === true) {
|
|
138
|
+
const maxRlpBlockSize = opts.common.param('maxRlpBlockSize');
|
|
139
|
+
if (serialized.length > maxRlpBlockSize) {
|
|
140
|
+
throw (0, util_1.EthereumJSErrorWithoutCode)(`Block size exceeds limit: ${serialized.length} > ${maxRlpBlockSize}`);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
const values = rlp_1.RLP.decode(Uint8Array.from(serialized));
|
|
144
|
+
if (!Array.isArray(values)) {
|
|
145
|
+
throw (0, util_1.EthereumJSErrorWithoutCode)('Invalid serialized block input. Must be array');
|
|
146
|
+
}
|
|
147
|
+
return createBlockFromBytesArray(values, opts);
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Creates a new block object from Ethereum JSON RPC.
|
|
151
|
+
*
|
|
152
|
+
* @param blockParams - Ethereum JSON RPC of block (eth_getBlockByNumber)
|
|
153
|
+
* @param uncles - Optional list of Ethereum JSON RPC of uncles (eth_getUncleByBlockHashAndIndex)
|
|
154
|
+
* @param opts - An object describing the blockchain
|
|
155
|
+
* @returns a new {@link Block} object
|
|
156
|
+
*/
|
|
157
|
+
function createBlockFromRPC(blockParams, uncles = [], options) {
|
|
158
|
+
const header = (0, index_ts_1.createBlockHeaderFromRPC)(blockParams, options);
|
|
159
|
+
const transactions = [];
|
|
160
|
+
const opts = { common: header.common };
|
|
161
|
+
for (const _txParams of blockParams.transactions ?? []) {
|
|
162
|
+
const txParams = (0, tx_1.normalizeTxParams)(_txParams);
|
|
163
|
+
const tx = (0, tx_1.createTx)(txParams, opts);
|
|
164
|
+
transactions.push(tx);
|
|
165
|
+
}
|
|
166
|
+
const uncleHeaders = uncles.map((uh) => (0, index_ts_1.createBlockHeaderFromRPC)(uh, options));
|
|
167
|
+
return createBlock({ header, transactions, uncleHeaders, withdrawals: blockParams.withdrawals }, options);
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Method to retrieve a block from a JSON-RPC provider and format as a {@link Block}
|
|
171
|
+
* @param provider either a url for a remote provider or an Ethers JSONRPCProvider object
|
|
172
|
+
* @param blockTag block hash or block number to be run
|
|
173
|
+
* @param opts {@link BlockOptions}
|
|
174
|
+
* @returns a new {@link Block} object specified by `blockTag`
|
|
175
|
+
*/
|
|
176
|
+
const createBlockFromJSONRPCProvider = async (provider, blockTag, opts) => {
|
|
177
|
+
let blockData;
|
|
178
|
+
const providerUrl = (0, util_1.getProvider)(provider);
|
|
179
|
+
if (typeof blockTag === 'string' && blockTag.length === 66) {
|
|
180
|
+
blockData = await (0, util_1.fetchFromProvider)(providerUrl, {
|
|
181
|
+
method: 'eth_getBlockByHash',
|
|
182
|
+
params: [blockTag, true],
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
else if (typeof blockTag === 'bigint') {
|
|
186
|
+
blockData = await (0, util_1.fetchFromProvider)(providerUrl, {
|
|
187
|
+
method: 'eth_getBlockByNumber',
|
|
188
|
+
params: [(0, util_1.bigIntToHex)(blockTag), true],
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
else if ((0, util_1.isHexString)(blockTag) ||
|
|
192
|
+
blockTag === 'latest' ||
|
|
193
|
+
blockTag === 'earliest' ||
|
|
194
|
+
blockTag === 'pending' ||
|
|
195
|
+
blockTag === 'finalized' ||
|
|
196
|
+
blockTag === 'safe') {
|
|
197
|
+
blockData = await (0, util_1.fetchFromProvider)(providerUrl, {
|
|
198
|
+
method: 'eth_getBlockByNumber',
|
|
199
|
+
params: [blockTag, true],
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
throw (0, util_1.EthereumJSErrorWithoutCode)(`expected blockTag to be block hash, bigint, hex prefixed string, or earliest/latest/pending; got ${blockTag}`);
|
|
204
|
+
}
|
|
205
|
+
if (blockData === null) {
|
|
206
|
+
throw (0, util_1.EthereumJSErrorWithoutCode)('No block data returned from provider');
|
|
207
|
+
}
|
|
208
|
+
const uncleHeaders = [];
|
|
209
|
+
if (blockData.uncles.length > 0) {
|
|
210
|
+
for (let x = 0; x < blockData.uncles.length; x++) {
|
|
211
|
+
const headerData = await (0, util_1.fetchFromProvider)(providerUrl, {
|
|
212
|
+
method: 'eth_getUncleByBlockHashAndIndex',
|
|
213
|
+
params: [blockData.hash, (0, util_1.intToHex)(x)],
|
|
214
|
+
});
|
|
215
|
+
uncleHeaders.push(headerData);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
return createBlockFromRPC(blockData, uncleHeaders, opts);
|
|
219
|
+
};
|
|
220
|
+
exports.createBlockFromJSONRPCProvider = createBlockFromJSONRPCProvider;
|
|
221
|
+
/**
|
|
222
|
+
* Method to retrieve a block from an execution payload
|
|
223
|
+
* @param payload Execution payload constructed from beacon payload data
|
|
224
|
+
* @param opts {@link BlockOptions}
|
|
225
|
+
* @returns The constructed {@link Block} object
|
|
226
|
+
*/
|
|
227
|
+
async function createBlockFromExecutionPayload(payload, opts) {
|
|
228
|
+
const { blockNumber: number, receiptsRoot: receiptTrie, prevRandao: mixHash, feeRecipient: coinbase, transactions, withdrawals: withdrawalsData, } = payload;
|
|
229
|
+
const txs = [];
|
|
230
|
+
for (const [index, serializedTx] of transactions.entries()) {
|
|
231
|
+
try {
|
|
232
|
+
const tx = (0, tx_1.createTxFromRLP)((0, util_1.hexToBytes)(serializedTx), {
|
|
233
|
+
common: opts?.common,
|
|
234
|
+
});
|
|
235
|
+
txs.push(tx);
|
|
236
|
+
}
|
|
237
|
+
catch (error) {
|
|
238
|
+
const validationError = `Invalid tx at index ${index}: ${error}`;
|
|
239
|
+
throw validationError;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
const transactionsTrie = await (0, helpers_ts_1.genTransactionsTrieRoot)(txs, new mpt_1.MerklePatriciaTrie({ common: opts?.common }));
|
|
243
|
+
const withdrawals = withdrawalsData?.map((wData) => (0, util_1.createWithdrawal)(wData));
|
|
244
|
+
const withdrawalsRoot = withdrawals
|
|
245
|
+
? await (0, helpers_ts_1.genWithdrawalsTrieRoot)(withdrawals, new mpt_1.MerklePatriciaTrie({ common: opts?.common }))
|
|
246
|
+
: undefined;
|
|
247
|
+
const header = {
|
|
248
|
+
...payload,
|
|
249
|
+
number,
|
|
250
|
+
receiptTrie,
|
|
251
|
+
transactionsTrie,
|
|
252
|
+
withdrawalsRoot,
|
|
253
|
+
mixHash,
|
|
254
|
+
coinbase,
|
|
255
|
+
};
|
|
256
|
+
// we are not setting setHardfork as common is already set to the correct hf
|
|
257
|
+
const block = createBlock({ header, transactions: txs, withdrawals }, opts);
|
|
258
|
+
// Verify blockHash matches payload
|
|
259
|
+
if (!(0, util_1.equalsBytes)(block.hash(), (0, util_1.hexToBytes)(payload.blockHash))) {
|
|
260
|
+
const validationError = `Invalid blockHash, expected: ${payload.blockHash}, received: ${(0, util_1.bytesToHex)(block.hash())}`;
|
|
261
|
+
throw Error(validationError);
|
|
262
|
+
}
|
|
263
|
+
return block;
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Method to retrieve a block from a beacon payload JSON
|
|
267
|
+
* @param payload JSON of a beacon block fetched from beacon APIs
|
|
268
|
+
* @param opts {@link BlockOptions}
|
|
269
|
+
* @returns The constructed {@link Block} object
|
|
270
|
+
*/
|
|
271
|
+
async function createBlockFromBeaconPayloadJSON(payload, opts) {
|
|
272
|
+
const executionPayload = (0, index_ts_1.executionPayloadFromBeaconPayload)(payload);
|
|
273
|
+
return createBlockFromExecutionPayload(executionPayload, opts);
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Creates a block for Clique networks with the seal applied during instantiation.
|
|
277
|
+
* @param blockData Block fields used to build the block
|
|
278
|
+
* @param cliqueSigner Private key bytes used to sign the header
|
|
279
|
+
* @param opts {@link BlockOptions}
|
|
280
|
+
* @returns A sealed Clique {@link Block} object
|
|
281
|
+
*/
|
|
282
|
+
function createSealedCliqueBlock(blockData = {}, cliqueSigner, opts = {}) {
|
|
283
|
+
const sealedCliqueBlock = createBlock(blockData, {
|
|
284
|
+
...opts,
|
|
285
|
+
...{ freeze: false, skipConsensusFormatValidation: true },
|
|
286
|
+
});
|
|
287
|
+
sealedCliqueBlock.header.extraData = (0, clique_ts_1.generateCliqueBlockExtraData)(sealedCliqueBlock.header, cliqueSigner);
|
|
288
|
+
if (opts?.freeze === true) {
|
|
289
|
+
// We have to freeze here since we can't freeze the block when constructing it since we are overwriting `extraData`
|
|
290
|
+
Object.freeze(sealedCliqueBlock);
|
|
291
|
+
}
|
|
292
|
+
if (opts?.skipConsensusFormatValidation === false) {
|
|
293
|
+
// We need to validate the consensus format here since we skipped it when constructing the block
|
|
294
|
+
sealedCliqueBlock.header['_consensusFormatValidation']();
|
|
295
|
+
}
|
|
296
|
+
return sealedCliqueBlock;
|
|
297
|
+
}
|
|
298
|
+
//# sourceMappingURL=constructors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constructors.js","sourceRoot":"","sources":["../../../src/block/constructors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/block/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,mBAAmB,CAAA"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./block.js"), exports);
|
|
18
|
+
__exportStar(require("./constructors.js"), exports);
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/block/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6CAA0B;AAC1B,oDAAiC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { Address } from '@feelyourprotocol/util';
|
|
2
|
+
import type { BlockHeader } from '../index.ts';
|
|
3
|
+
export declare const CLIQUE_EXTRA_VANITY = 32;
|
|
4
|
+
export declare const CLIQUE_EXTRA_SEAL = 65;
|
|
5
|
+
export declare function requireClique(header: BlockHeader, name: string): void;
|
|
6
|
+
/**
|
|
7
|
+
* PoA clique signature hash without the seal.
|
|
8
|
+
*/
|
|
9
|
+
export declare function cliqueSigHash(header: BlockHeader): Uint8Array<ArrayBufferLike>;
|
|
10
|
+
/**
|
|
11
|
+
* Checks if the block header is an epoch transition
|
|
12
|
+
* header (only clique PoA, throws otherwise)
|
|
13
|
+
*/
|
|
14
|
+
export declare function cliqueIsEpochTransition(header: BlockHeader): boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Returns extra vanity data
|
|
17
|
+
* (only clique PoA, throws otherwise)
|
|
18
|
+
*/
|
|
19
|
+
export declare function cliqueExtraVanity(header: BlockHeader): Uint8Array;
|
|
20
|
+
/**
|
|
21
|
+
* Returns extra seal data
|
|
22
|
+
* (only clique PoA, throws otherwise)
|
|
23
|
+
*/
|
|
24
|
+
export declare function cliqueExtraSeal(header: BlockHeader): Uint8Array;
|
|
25
|
+
/**
|
|
26
|
+
* Returns a list of signers
|
|
27
|
+
* (only clique PoA, throws otherwise)
|
|
28
|
+
*
|
|
29
|
+
* This function throws if not called on an epoch
|
|
30
|
+
* transition block and should therefore be used
|
|
31
|
+
* in conjunction with {@link cliqueIsEpochTransition}
|
|
32
|
+
*/
|
|
33
|
+
export declare function cliqueEpochTransitionSigners(header: BlockHeader): Address[];
|
|
34
|
+
/**
|
|
35
|
+
* Returns the signer address
|
|
36
|
+
*/
|
|
37
|
+
export declare function cliqueSigner(header: BlockHeader): Address;
|
|
38
|
+
/**
|
|
39
|
+
* Verifies the signature of the block (last 65 bytes of extraData field)
|
|
40
|
+
* (only clique PoA, throws otherwise)
|
|
41
|
+
*
|
|
42
|
+
* Method throws if signature is invalid
|
|
43
|
+
*/
|
|
44
|
+
export declare function cliqueVerifySignature(header: BlockHeader, signerList: Address[]): boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Generates the extraData from a sealed block header
|
|
47
|
+
* @param header block header from which to retrieve extraData
|
|
48
|
+
* @param cliqueSigner clique signer key used for creating sealed block
|
|
49
|
+
* @returns clique seal (i.e. extradata) for the block
|
|
50
|
+
*/
|
|
51
|
+
export declare function generateCliqueBlockExtraData(header: BlockHeader, cliqueSigner: Uint8Array): Uint8Array;
|
|
52
|
+
//# sourceMappingURL=clique.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clique.d.ts","sourceRoot":"","sources":["../../../src/consensus/clique.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,OAAO,EAUR,MAAM,kBAAkB,CAAA;AAIzB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAG9C,eAAO,MAAM,mBAAmB,KAAK,CAAA;AAErC,eAAO,MAAM,iBAAiB,KAAK,CAAA;AAGnC,wBAAgB,aAAa,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,QAO9D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,WAAW,+BAKhD;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAMpE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,UAAU,CAGjE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,GAAG,UAAU,CAG/D;AAED;;;;;;;GAOG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,EAAE,CAiB3E;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAYzD;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,OAAO,CAOzF;AAED;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,WAAW,EACnB,YAAY,EAAE,UAAU,GACvB,UAAU,CA4BZ"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CLIQUE_EXTRA_SEAL = exports.CLIQUE_EXTRA_VANITY = void 0;
|
|
4
|
+
exports.requireClique = requireClique;
|
|
5
|
+
exports.cliqueSigHash = cliqueSigHash;
|
|
6
|
+
exports.cliqueIsEpochTransition = cliqueIsEpochTransition;
|
|
7
|
+
exports.cliqueExtraVanity = cliqueExtraVanity;
|
|
8
|
+
exports.cliqueExtraSeal = cliqueExtraSeal;
|
|
9
|
+
exports.cliqueEpochTransitionSigners = cliqueEpochTransitionSigners;
|
|
10
|
+
exports.cliqueSigner = cliqueSigner;
|
|
11
|
+
exports.cliqueVerifySignature = cliqueVerifySignature;
|
|
12
|
+
exports.generateCliqueBlockExtraData = generateCliqueBlockExtraData;
|
|
13
|
+
const common_1 = require("@feelyourprotocol/common");
|
|
14
|
+
const rlp_1 = require("@feelyourprotocol/rlp");
|
|
15
|
+
const util_1 = require("@feelyourprotocol/util");
|
|
16
|
+
const secp256k1_js_1 = require("@noble/curves/secp256k1.js");
|
|
17
|
+
// Fixed number of extra-data prefix bytes reserved for signer vanity
|
|
18
|
+
exports.CLIQUE_EXTRA_VANITY = 32;
|
|
19
|
+
// Fixed number of extra-data suffix bytes reserved for signer seal
|
|
20
|
+
exports.CLIQUE_EXTRA_SEAL = 65;
|
|
21
|
+
// This function is not exported in the index file to keep it internal
|
|
22
|
+
function requireClique(header, name) {
|
|
23
|
+
if (header.common.consensusAlgorithm() !== common_1.ConsensusAlgorithm.Clique) {
|
|
24
|
+
const msg = header['_errorMsg'](`BlockHeader.${name}() call only supported for clique PoA networks`);
|
|
25
|
+
throw (0, util_1.EthereumJSErrorWithoutCode)(msg);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* PoA clique signature hash without the seal.
|
|
30
|
+
*/
|
|
31
|
+
function cliqueSigHash(header) {
|
|
32
|
+
requireClique(header, 'cliqueSigHash');
|
|
33
|
+
const raw = header.raw();
|
|
34
|
+
raw[12] = header.extraData.subarray(0, header.extraData.length - exports.CLIQUE_EXTRA_SEAL);
|
|
35
|
+
return header['keccakFunction'](rlp_1.RLP.encode(raw));
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Checks if the block header is an epoch transition
|
|
39
|
+
* header (only clique PoA, throws otherwise)
|
|
40
|
+
*/
|
|
41
|
+
function cliqueIsEpochTransition(header) {
|
|
42
|
+
requireClique(header, 'cliqueIsEpochTransition');
|
|
43
|
+
const epoch = BigInt(header.common.consensusConfig().epoch);
|
|
44
|
+
// Epoch transition block if the block number has no
|
|
45
|
+
// remainder on the division by the epoch length
|
|
46
|
+
return header.number % epoch === util_1.BIGINT_0;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Returns extra vanity data
|
|
50
|
+
* (only clique PoA, throws otherwise)
|
|
51
|
+
*/
|
|
52
|
+
function cliqueExtraVanity(header) {
|
|
53
|
+
requireClique(header, 'cliqueExtraVanity');
|
|
54
|
+
return header.extraData.subarray(0, exports.CLIQUE_EXTRA_VANITY);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Returns extra seal data
|
|
58
|
+
* (only clique PoA, throws otherwise)
|
|
59
|
+
*/
|
|
60
|
+
function cliqueExtraSeal(header) {
|
|
61
|
+
requireClique(header, 'cliqueExtraSeal');
|
|
62
|
+
return header.extraData.subarray(-exports.CLIQUE_EXTRA_SEAL);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Returns a list of signers
|
|
66
|
+
* (only clique PoA, throws otherwise)
|
|
67
|
+
*
|
|
68
|
+
* This function throws if not called on an epoch
|
|
69
|
+
* transition block and should therefore be used
|
|
70
|
+
* in conjunction with {@link cliqueIsEpochTransition}
|
|
71
|
+
*/
|
|
72
|
+
function cliqueEpochTransitionSigners(header) {
|
|
73
|
+
requireClique(header, 'cliqueEpochTransitionSigners');
|
|
74
|
+
if (!cliqueIsEpochTransition(header)) {
|
|
75
|
+
const msg = header['_errorMsg']('Signers are only included in epoch transition blocks (clique)');
|
|
76
|
+
throw (0, util_1.EthereumJSErrorWithoutCode)(msg);
|
|
77
|
+
}
|
|
78
|
+
const start = exports.CLIQUE_EXTRA_VANITY;
|
|
79
|
+
const end = header.extraData.length - exports.CLIQUE_EXTRA_SEAL;
|
|
80
|
+
const signerBytes = header.extraData.subarray(start, end);
|
|
81
|
+
const signerList = [];
|
|
82
|
+
const signerLength = 20;
|
|
83
|
+
for (let start = 0; start <= signerBytes.length - signerLength; start += signerLength) {
|
|
84
|
+
signerList.push(signerBytes.subarray(start, start + signerLength));
|
|
85
|
+
}
|
|
86
|
+
return signerList.map((buf) => new util_1.Address(buf));
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Returns the signer address
|
|
90
|
+
*/
|
|
91
|
+
function cliqueSigner(header) {
|
|
92
|
+
requireClique(header, 'cliqueSigner');
|
|
93
|
+
const extraSeal = cliqueExtraSeal(header);
|
|
94
|
+
// Reasonable default for default blocks
|
|
95
|
+
if (extraSeal.length === 0 || (0, util_1.equalsBytes)(extraSeal, new Uint8Array(65))) {
|
|
96
|
+
return (0, util_1.createZeroAddress)();
|
|
97
|
+
}
|
|
98
|
+
const r = extraSeal.subarray(0, 32);
|
|
99
|
+
const s = extraSeal.subarray(32, 64);
|
|
100
|
+
const v = (0, util_1.bytesToBigInt)(extraSeal.subarray(64, 65)) + util_1.BIGINT_27;
|
|
101
|
+
const pubKey = (0, util_1.ecrecover)(cliqueSigHash(header), v, r, s);
|
|
102
|
+
return (0, util_1.createAddressFromPublicKey)(pubKey);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Verifies the signature of the block (last 65 bytes of extraData field)
|
|
106
|
+
* (only clique PoA, throws otherwise)
|
|
107
|
+
*
|
|
108
|
+
* Method throws if signature is invalid
|
|
109
|
+
*/
|
|
110
|
+
function cliqueVerifySignature(header, signerList) {
|
|
111
|
+
requireClique(header, 'cliqueVerifySignature');
|
|
112
|
+
const signerAddress = cliqueSigner(header);
|
|
113
|
+
const signerFound = signerList.find((signer) => {
|
|
114
|
+
return signer.equals(signerAddress);
|
|
115
|
+
});
|
|
116
|
+
return !!signerFound;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Generates the extraData from a sealed block header
|
|
120
|
+
* @param header block header from which to retrieve extraData
|
|
121
|
+
* @param cliqueSigner clique signer key used for creating sealed block
|
|
122
|
+
* @returns clique seal (i.e. extradata) for the block
|
|
123
|
+
*/
|
|
124
|
+
function generateCliqueBlockExtraData(header, cliqueSigner) {
|
|
125
|
+
// Ensure extraData is at least length CLIQUE_EXTRA_VANITY + CLIQUE_EXTRA_SEAL
|
|
126
|
+
const minExtraDataLength = exports.CLIQUE_EXTRA_VANITY + exports.CLIQUE_EXTRA_SEAL;
|
|
127
|
+
if (header.extraData.length < minExtraDataLength) {
|
|
128
|
+
const remainingLength = minExtraDataLength - header.extraData.length;
|
|
129
|
+
header.extraData = (0, util_1.concatBytes)(header.extraData, new Uint8Array(remainingLength));
|
|
130
|
+
}
|
|
131
|
+
requireClique(header, 'generateCliqueBlockExtraData');
|
|
132
|
+
const msgHash = cliqueSigHash(header);
|
|
133
|
+
// Use custom ecsign if provided, otherwise use secp256k1.sign
|
|
134
|
+
const ecSignFunction = header.common.customCrypto?.ecsign ?? secp256k1_js_1.secp256k1.sign;
|
|
135
|
+
// Use noble/curves secp256k1.sign with recovered format (returns 65-byte Uint8Array)
|
|
136
|
+
// sigBytes format: [recovery (1 byte) | r (32 bytes) | s (32 bytes)]
|
|
137
|
+
const sigBytes = ecSignFunction(msgHash, cliqueSigner, { prehash: false, format: 'recovered' });
|
|
138
|
+
// clique format: [r (32 bytes) | s (32 bytes) | recovery (1 byte)]
|
|
139
|
+
const cliqueSignature = (0, util_1.concatBytes)(sigBytes.subarray(1), sigBytes.subarray(0, 1));
|
|
140
|
+
const extraDataWithoutSeal = header.extraData.subarray(0, header.extraData.length - exports.CLIQUE_EXTRA_SEAL);
|
|
141
|
+
const extraData = (0, util_1.concatBytes)(extraDataWithoutSeal, cliqueSignature);
|
|
142
|
+
return extraData;
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=clique.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clique.js","sourceRoot":"","sources":["../../../src/consensus/clique.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Block } from '../index.ts';
|
|
2
|
+
/**
|
|
3
|
+
* Returns the canonical difficulty for this block.
|
|
4
|
+
*
|
|
5
|
+
* @param block - the block whose difficulty should be calculated
|
|
6
|
+
* @param parentBlock - the parent of this `Block`
|
|
7
|
+
*/
|
|
8
|
+
export declare function ethashCanonicalDifficulty(block: Block, parentBlock: Block): bigint;
|
|
9
|
+
//# sourceMappingURL=ethash.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ethash.d.ts","sourceRoot":"","sources":["../../../src/consensus/ethash.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAExC;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,GAAG,MAAM,CAElF"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ethashCanonicalDifficulty = ethashCanonicalDifficulty;
|
|
4
|
+
/**
|
|
5
|
+
* Returns the canonical difficulty for this block.
|
|
6
|
+
*
|
|
7
|
+
* @param block - the block whose difficulty should be calculated
|
|
8
|
+
* @param parentBlock - the parent of this `Block`
|
|
9
|
+
*/
|
|
10
|
+
function ethashCanonicalDifficulty(block, parentBlock) {
|
|
11
|
+
return block.header.ethashCanonicalDifficulty(parentBlock.header);
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=ethash.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ethash.js","sourceRoot":"","sources":["../../../src/consensus/ethash.ts"],"names":[],"mappings":";;AAQA,8DAEC;AARD;;;;;GAKG;AACH,SAAgB,yBAAyB,CAAC,KAAY,EAAE,WAAkB;IACxE,OAAO,KAAK,CAAC,MAAM,CAAC,yBAAyB,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;AACnE,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { CLIQUE_EXTRA_SEAL, CLIQUE_EXTRA_VANITY, cliqueEpochTransitionSigners, cliqueExtraSeal, cliqueExtraVanity, cliqueIsEpochTransition, cliqueSigHash, cliqueSigner, cliqueVerifySignature, } from './clique.ts';
|
|
2
|
+
export * from './ethash.ts';
|
|
3
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/consensus/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,4BAA4B,EAC5B,eAAe,EACf,iBAAiB,EACjB,uBAAuB,EACvB,aAAa,EACb,YAAY,EACZ,qBAAqB,GACtB,MAAM,aAAa,CAAA;AACpB,cAAc,aAAa,CAAA"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.cliqueVerifySignature = exports.cliqueSigner = exports.cliqueSigHash = exports.cliqueIsEpochTransition = exports.cliqueExtraVanity = exports.cliqueExtraSeal = exports.cliqueEpochTransitionSigners = exports.CLIQUE_EXTRA_VANITY = exports.CLIQUE_EXTRA_SEAL = void 0;
|
|
18
|
+
var clique_ts_1 = require("./clique.js");
|
|
19
|
+
Object.defineProperty(exports, "CLIQUE_EXTRA_SEAL", { enumerable: true, get: function () { return clique_ts_1.CLIQUE_EXTRA_SEAL; } });
|
|
20
|
+
Object.defineProperty(exports, "CLIQUE_EXTRA_VANITY", { enumerable: true, get: function () { return clique_ts_1.CLIQUE_EXTRA_VANITY; } });
|
|
21
|
+
Object.defineProperty(exports, "cliqueEpochTransitionSigners", { enumerable: true, get: function () { return clique_ts_1.cliqueEpochTransitionSigners; } });
|
|
22
|
+
Object.defineProperty(exports, "cliqueExtraSeal", { enumerable: true, get: function () { return clique_ts_1.cliqueExtraSeal; } });
|
|
23
|
+
Object.defineProperty(exports, "cliqueExtraVanity", { enumerable: true, get: function () { return clique_ts_1.cliqueExtraVanity; } });
|
|
24
|
+
Object.defineProperty(exports, "cliqueIsEpochTransition", { enumerable: true, get: function () { return clique_ts_1.cliqueIsEpochTransition; } });
|
|
25
|
+
Object.defineProperty(exports, "cliqueSigHash", { enumerable: true, get: function () { return clique_ts_1.cliqueSigHash; } });
|
|
26
|
+
Object.defineProperty(exports, "cliqueSigner", { enumerable: true, get: function () { return clique_ts_1.cliqueSigner; } });
|
|
27
|
+
Object.defineProperty(exports, "cliqueVerifySignature", { enumerable: true, get: function () { return clique_ts_1.cliqueVerifySignature; } });
|
|
28
|
+
__exportStar(require("./ethash.js"), exports);
|
|
29
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/consensus/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,yCAUoB;AATlB,8GAAA,iBAAiB,OAAA;AACjB,gHAAA,mBAAmB,OAAA;AACnB,yHAAA,4BAA4B,OAAA;AAC5B,4GAAA,eAAe,OAAA;AACf,8GAAA,iBAAiB,OAAA;AACjB,oHAAA,uBAAuB,OAAA;AACvB,0GAAA,aAAa,OAAA;AACb,yGAAA,YAAY,OAAA;AACZ,kHAAA,qBAAqB,OAAA;AAEvB,8CAA2B"}
|