@mem-cash/validation
v0.0.4
Published
Stateless BCH transaction evaluator with BCHN-compatible consensus and policy checks
Maintainers
Readme
@mem-cash/validation
Stateless transaction evaluator for Bitcoin Cash. Validates raw transaction hex against consensus rules, policy checks, and libauth VM script verification.
Usage
import { createTxVerifier } from "@mem-cash/validation";
const verifier = await createTxVerifier({
vmVersion: "BCH_2025_05",
standard: true,
});
const result = verifier.verify(rawHex, sourceOutputs, chainState);
if (result.success) {
console.log(result.txid, result.fee, result.validatedTx);
} else {
console.log(result.code, result.error); // BCHN reject code + reason
}Verification Pipeline
Matches BCHN's AcceptToMemoryPool order:
- Decode transaction hex
- Null prevout check (
bad-txns-prevout-null) - Validate sourceOutputs count matches inputs (
bad-txns-inputs-missingorspent) - Locktime finality (
bad-txns-nonfinal) - Coinbase maturity (
bad-txns-premature-spend-of-coinbase) - Unspendable inputs (
bad-txns-input-scriptpubkey-unspendable) - Input value ranges (
bad-txns-inputvalues-outofrange) - Output value ranges and fee computation (
bad-txns-outputvalues-outofrange,bad-txns-in-belowout) -- per-output and cumulative sum checked againstMAX_MONEY - BIP68 sequence locks (
non-BIP68-final) - Min relay fee (
min relay fee not met) - Absurd fee guard (
absurdly-high-fee) - Dust check (
dust) - VM script verification (
mandatory-script-verify-flag-failed/non-mandatory-script-verify-flag)
All error strings and reject codes match BCHN exactly. The verifier implements BCHN's two-pass script verification to distinguish mandatory from non-mandatory failures.
Config Validation
createTxVerifier rejects non-positive minRelayFeePerKb and maxFee values at construction time to prevent bypassing fee policy checks.
