UNPKG

noob-ethereum

Version:
77 lines (76 loc) 3.09 kB
"use strict"; // newer version of testing compared to rlp-block-lib.ts var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; 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; const constants_1 = require("../../constants"); const rlp = __importStar(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 = rlp.encode(tuple); // could also do keccak256(encoded).toString('hex') using the ethereum library const calculated = (0, keccak_1.default)('keccak256').update(Buffer.from(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")); const calculated = calculateBlockHeader(_12964874_json_1.default); console.log(calculated); const isValid = verifyBlockHeader(_12964874_json_1.default); console.log(isValid);