GovParamChange task times out (never terminalizes) when the target node has tx-index disabled — /tx confirmation error mis-mapped to inclusion-undetermined

Open
#236 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
48/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Quiet
Tech stack
go
Domain
backend, devops

Research direction

Start with the marker-adoption path and /tx confirmation handling described in the issue, then trace how a committed DeliverTx result reaches wire.GovTxResult and status.outputs.govParamChange. Done means a committed non-zero code is terminal, is not re-broadcast, and preserves code, codespace, and raw_log instead of timing out; no test or file path is named in the issue.

Written by the indexing model from the issue text.

Description

bug

Summary

A GovParamChange submit whose tx commits with a non-zero DeliverTx code (e.g. code 5 insufficient funds) is retried until the controller task timeout instead of being classified terminal and surfaced with its raw_log. The operator sees only an opaque Failed / reason: Timeout after 10m, with an empty status.outputs — the real, immediate on-chain error is hidden.

This contradicts the intended completion contract (a committed tx whose DeliverTx code ≠ 0 should report Failed terminal with the decoded wire.GovTxResult).

Evidence (arctic-1, prod-use2, 2026-07-22)

  • SeiNodeTask arctic-1/govparam-disable-ibc-outbound, task id ed2391f6-3980-57e7-82f1-d1fed8f94421, spec.timeoutSeconds: 600.
  • Signed tx 8F8730FF8B60428B7C657782158336A8EFD709636028D6A376C46BCE7B2332F0 committed at height 175023023 with:
    • codespace: sdk, code: 5, raw_log: "80598000usei is smaller than 3500000000usei: insufficient funds" (proposer could not escrow the 3,500 SEI initial deposit; balance 80.6 SEI).
  • Sidecar log shows the engine re-adopting the same in-flight tx from the marker and re-broadcasting it every ~30srun=4run=19 — never detecting that the adopted tx had already committed with code != 0:
    msg="adopting in-flight tx from marker" ... txHash=8F8730FF...2332F0
    msg="proposal broadcast" ... changes=[ibc/OutboundEnabled] txHash=8F8730FF...
    
  • Final CR state: phase: Failed, conditions[Failed].reason: Timeout, status.task.err: timeout, no status.outputs / no txHash / no code.

Expected

When the marker-adopted tx is found committed on-chain with code != 0:

  1. classify the run terminal (Failed) immediately — do not re-broadcast;
  2. decode and surface code / codespace / raw_log into the wire.GovTxResultstatus.outputs.govParamChange so the controller/operator sees the real error;
  3. (controller side, sei-protocol/sei-k8s-controller) render that terminal error on the SeiNodeTask condition message instead of a generic Timeout.

Impact

Turns a ~5-second, self-explanatory insufficient funds into a 10-minute silent timeout. Directly cost investigation time on the arctic-1 IBC-outbound op and is the reason a straightforward deposit-sizing mistake was not obvious. Applies to any DeliverTx-rejected gov submit (fee, sequence, deposit, validation).

Related

  • Gov completion contract: seictl#219, sei-k8s-controller#453 (wire.GovTxResult consumer).
  • Operational guard added in gov-ops skill (deposit-affordability pre-submit gate + DeliverTx code-5 detector) so the bad submit is blocked before broadcast; this issue is the controller/sidecar-side fix so that when a bad tx does land, the failure is legible.
Dominant language
Go
Stars
1
Forks
3
Avg merge
2h 56m
Merged PRs (30d)
14

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from sei-protocol/seictl

All issues in sei-protocol/seictl

Similar issues

More Go issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.