noob-ethereum
Version:
A simple Ethereum library
54 lines (53 loc) • 2.2 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.verifyBlockHeader = exports.calculateBlockHeader = void 0;
// @ts-nocheck
const constants_1 = require("../../constants");
const rlp_1 = require("../../lib/rlp/rlp");
const keccak_1 = __importDefault(require("keccak"));
function prepareBlockTuple(block) {
const blockNumber = parseInt(block.number, 16);
const tuple = [
block.parentHash,
block.sha3Uncles,
block.miner,
block.stateRoot,
block.transactionsRoot,
block.receiptsRoot,
block.logsBloom,
block.difficulty,
block.number,
block.gasLimit,
block.gasUsed,
block.timestamp,
block.extraData,
block.mixHash,
block.nonce,
];
// If a block after London Hardfork, add base fee to block tuple prior to encoding
if (blockNumber >= constants_1.LONDON_HARDFORK_BLOCK)
tuple.push(block.baseFeePerGas);
return tuple;
}
function calculateBlockHeader(block) {
const tuple = prepareBlockTuple(block);
const encoded = Buffer.from((0, rlp_1.encode)(tuple));
const calculated = (0, keccak_1.default)('keccak256').update(encoded).digest('hex');
return '0x' + calculated;
}
exports.calculateBlockHeader = calculateBlockHeader;
function verifyBlockHeader(block) {
const expected = block.hash;
const calculated = calculateBlockHeader(block);
return expected === calculated;
}
exports.verifyBlockHeader = verifyBlockHeader;
const _12964874_json_1 = __importDefault(require("../../seeder/blocks/legacy/12964874.json"));
console.log('calculated block header:', calculateBlockHeader(_12964874_json_1.default));
console.log('is a valid block header:', verifyBlockHeader(_12964874_json_1.default));
const _15122367_json_1 = __importDefault(require("../../seeder/blocks/1559/15122367.json"));
console.log('calculated block header:', calculateBlockHeader(_15122367_json_1.default));
console.log('is a valid block header:', verifyBlockHeader(_15122367_json_1.default));