Gas refunds with EIP-3529 capping
import * as GasRefund from 'voltaire-effect/primitives/GasRefund'
import { Effect } from 'effect'
// Create refund
const refund = Effect.runSync(GasRefund.from(15000n))
// Capped refund (max = gasUsed / 5 per EIP-3529)
const capped = Effect.runSync(GasRefund.cappedRefund(30000n, 100000n))
// max for 100000 gas = 20000, so min(30000, 20000) = 20000n
const calculateNetGas = (gasUsed: bigint, accumulatedRefund: bigint) =>
Effect.gen(function* () {
const capped = yield* GasRefund.cappedRefund(accumulatedRefund, gasUsed)
return gasUsed - capped
})