Skip to main content
Block metadata: parent hash, state root, number, timestamp, gas limit, etc.
import * as BlockHeader from 'voltaire-effect/primitives/BlockHeader'
import * as Schema from 'effect/Schema'
import { Effect } from 'effect'

// Schema
const header = Schema.decodeSync(BlockHeader.JSON)(headerData)

// Effect: from parameters
const program = BlockHeader.from({
  parentHash,
  stateRoot,
  transactionsRoot,
  receiptsRoot,
  number: 19000000n,
  timestamp: 1700000000n,
})

// From RPC response (hex conversion)
const fromRpc = BlockHeader.fromRpc(rpcHeader)

// Calculate hash (RLP + Keccak-256)
const hash = BlockHeader.calculateHash(header)

Usage

const validateChain = (parent: BlockHeaderType, child: BlockHeaderType) =>
  Effect.gen(function* () {
    const parentHash = BlockHeader.calculateHash(parent)
    if (!equalBytes(child.parentHash, parentHash)) {
      return yield* Effect.fail(new Error('Invalid parent hash'))
    }
    return true
  })