Policy
Reason codes and context
A reject is credible only when it names the failure and shows the numbers. ReserveGrid OS emits stable codes plus policy context.
Reason codes
Stable names, stable meaning
| Code | Category | Description |
|---|---|---|
| AverageFeeTooLow | fees | Average fee rate is below the effective minimum for the selected fee tier. |
| TotalFeesTooLow | fees | Total fees implied by the template are below the policy minimum. |
| CoinbaseZero | template | coinbasevalue is missing or resolves to zero, so the template’s payout economics are invalid. |
| TooManyTransactions | limits | Template exceeds a configured transaction-count or size or weight limit. |
| PrevHashWrongLen | template | previousblockhash is missing or malformed, so the template cannot be anchored to a chain tip. |
| UnsupportedVersion | policy | Policy schema or protocol version is not supported by this verifier build. |
| EmptyTemplate | template | Template is missing required fields or contains no evaluable content. |
Sample policy.toml
Readable and diffable
# Example only. Match your repo schema. protocol_version = 1 [limits] max_weight = 4000000 max_sigops = 8000 [fees] mode = "dynamic_tiers" [fees.tiers.low] min_avg_fee_sat_vb = 2.0 [fees.tiers.mid] min_avg_fee_sat_vb = 8.0 [fees.tiers.high] min_avg_fee_sat_vb = 20.0
Tier input
mempool size, congestion, staleness
Tier output
low | mid | high
Traceable reject contract
What integrations can rely on
{
"verdict": "REJECT",
"reason_code": "MIN_AVG_FEE_TOO_LOW",
"policy_context": {
"fee_tier": "mid",
"threshold_used": 8.0,
"measured_value": 4.2
}
}