Skip to content

feat(ift): extend catalyst to support IFT messages#63

Closed
johnnylarner wants to merge 13 commits intomainfrom
plat-374/extended-ift-transfer-integration-test
Closed

feat(ift): extend catalyst to support IFT messages#63
johnnylarner wants to merge 13 commits intomainfrom
plat-374/extended-ift-transfer-integration-test

Conversation

@johnnylarner
Copy link
Copy Markdown
Contributor

@johnnylarner johnnylarner commented Mar 13, 2026

Summary

Adds end-to-end IFT transfer support to Catalyst. Senders can drive MsgIFTTransfer load from cosmos or EVM chains to cosmos or EVM destinations and configure Catalyst to forward transactions to an ibc relayer.

Changes

  • Extends txfactory to support creation of IFT cosmos or evm transactions. These perform a token a transfer using IBC and should be relayed. Recipient addresses are derived deterministically from the base mnemonic (see ift/accounts/{cosmos,evm}.go).
  • Extends catalyst to support optionally relaying transactions. The configs allow the operator to specify a relay host and what messages should be passed to the relayer.
  • For EVM gas estimation, use SuggestGasTipCap from the node rather than a hardcoded 2 gwei default — works on L2s without manual tuning.
  • Extends cosmos runner to choose a tx send interval based on time instead of just block based. It uses the send_interval config.

In a future PR, I will extend metric collection in the runners to capture relaying failures.

@linear
Copy link
Copy Markdown

linear Bot commented Mar 13, 2026

johnnylarner and others added 9 commits March 16, 2026 11:10
Remove the aggregate Err field from SentTx in both cosmos and ethereum
chains. Rename SourceErr to BroadcastErr and RelayerErr to
PostBroadcastErr to align with the txMode abstraction. Add Failed() and
Error() methods that derive overall status from the specific error
fields and TxResponse.
…elay config

- add MsgIFTTransfer as a case in both ethereum and cosmos TxFactory
  BuildTxs/CreateMsg, with baseline support for high-throughput runs
- replace implicit HandlePostBroadcast with explicit RelayConfig that
  specifies a relayer URL and which message types should be relayed
- remove txMode interface and mode.go from both chains
- move relayer config from ift.relayer to top-level relay in spec
- use SuggestGasTipCap instead of hardcoded 2 gwei default for EVM
  gas fee estimation
- fix EVM IFT timeout to use Unix seconds instead of nanoseconds
}

maxGas := params.ConsensusParams.Block.MaxGas
if maxGas == -1 {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Our test chain did not have max gas configured causing catalyst to fail on the maxGas check below in lin 196

r.logger.Debug("processing block", zap.Int64("height", block.Height),
zap.Time("timestamp", block.Timestamp), zap.Int64("gas_limit", block.GasLimit))

if r.spec.SendInterval > 0 && time.Since(lastSendTime) < r.spec.SendInterval {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Time based tx submission interval

Err: nil,
}

if err := r.relayTxHash(ctx, msgType, res.TxHash); err != nil {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This only executes if the operator has relaying configured.

wg := sync.WaitGroup{}
blockStats := make([]loadtesttypes.BlockStat, endBlock-startBlock+1)
receipts := make(map[uint64]gethtypes.Receipts)
msgTypeByHash := make(map[common.Hash]loadtesttypes.MsgType, len(sentTxs))
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Small refactor to store the msg type by tx hash in a map and look it up when building test stats later.

@dhfang dhfang marked this pull request as ready for review April 17, 2026 00:04
@dhfang dhfang requested a review from a team as a code owner April 17, 2026 00:04
@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented Apr 17, 2026

PR author is not in the allowed authors list.

@dhfang dhfang closed this Apr 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants