fix: bcast messages - #91
Merged
Merged
Conversation
The vesting schedule shift and account migration were dropped before v1.6.1 shipped, so the handler is a no-op that only runs module migrations. The comment still advertised the removed behaviour.
Mark the changelog ready for release and name the target tag. Add a Rollout section: SPB has been running v1.6.1-beta.1 (evm fork tac.10) since 2026-07-30, while the stable v1.6.1 build carries tac.13, so the two are not byte-identical. Lists the three query-path-only changes that make up the difference.
The EVM mempool broadcasts a transaction to peers when it promotes it out of the queue, and built the message with FromEthereumTx, which fills in only the raw transaction. MsgEthereumTx.ValidateBasic rejects a message without a sender, so every such broadcast came back as rejected by mempool: code=18, log=sender address is missing: invalid request Recover the sender from the signature instead, the way SendRawTransaction already does on the direct path. Locally this went unnoticed: block proposal reads this node's own mempool, so the transactions landed anyway — 77 of 77 on a localnet, checked by receipt. What did not happen is the transactions reaching other validators, which is what this broadcast is for. The two tests here built unsigned transactions, so they could not have caught it. They now sign, and the first one asserts the broadcast message carries the sender and passes ValidateBasic.
Adds the tacchain-side fix to the bug list and to the beta/stable delta, and corrects the summary: the release is no longer entirely fork changes. Also narrows the delta note — the other three items are query-path only, this one is about how a node gossips a transaction, so "query-path only" no longer covers all of them.
With the sender in place the broadcast got one step further and was refused again: rejected by mempool: code=29, log=MsgEthereumTx needs to be contained within a tx with 'ExtensionOptionsEthereumTx' option: invalid type The ante handler routes a transaction to the EVM path by that extension option alone, and the fee and gas limit have to be carried over from the ethereum transaction. Filling a builder by hand here left all three out. BuildTx sets them, which is what SendRawTransaction already uses on the direct path. The test now also asserts the extension option, the gas limit and a non-zero fee on the decoded broadcast tx — without them it fails on the option.
With the message finally well-formed the broadcast reached Comet and came back with code=19, "tx already in mempool". That is expected: the submitting path has already handed the transaction over, so this node's own cache sees the peer broadcast as a duplicate. It is no longer reported as an error. Also stop abandoning a batch on the first bad transaction — failures are collected and returned together, so one of them no longer costs the rest their broadcast. Covers the three answers a node can give with a table test, and records the whole sequence in the changelog: the section only mentioned the sender.
Cut the changelog down to the facts: symptom, cause, fix, and a one-line note on what each change touches. Drops the walkthrough prose, the repeated summaries and the blow-by-blow of how the broadcast fix landed. The peer-broadcast work is now one entry covering all three commits (6759d93, 548387b, b87bd40) instead of a chronicle, the beta/stable delta is a table, and the gen_localnode.sh fix is recorded. Error codes, measured numbers, upstream PR references and fork commit tables are kept.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Broadcast messages to peers were built by hand and always refused by the receiving
mempool: no sender (
code=18), then noExtensionOptionsEthereumTx/ fee / gaslimit (
code=29). Now built throughMsgEthereumTx.BuildTx. Duplicates are notfailures, and one bad tx no longer aborts its batch. p2p only, no consensus change.
Also: v1.6.1 changelog,
gen_localnode.shstrayexit, stale v1.6.1 handler comment.