evstack / evstack/apex

Multi-account support for transaction submission

Open
#5 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Go
Stars
4
Forks
0
PR merge metrics
No merged PRs in 30d

Description

## Summary

Support submitting blobs from multiple funded accounts to avoid nonce contention when writing to a single namespace at high throughput.

## Problem

When a single account submits transactions concurrently, nonce (sequence number) conflicts cause failures:
- Tx A gets nonce 5, Tx B gets nonce 5 → one fails with "account sequence mismatch"
- Serial submission avoids this but kills throughput
- Mempool ordering is not guaranteed, so even sequential nonce assignment can race

## Design

### Account pool
- Configure multiple funded accounts (key/mnemonic per account)
- Round-robin or least-recently-used assignment when a submission is requested
- Each account manages its own nonce sequence independently

### Nonce management
- Track pending nonce per account locally (don't rely solely on on-chain query)
- Increment optimistically on broadcast, roll back on rejection
- Handle sequence mismatch errors by re-querying and retrying from the correct nonce

### Configuration
```toml
[submission]
enabled = true

[[submission.accounts]]
name = "submitter-1"
key_file = "./keys/submitter-1.json"

[[submission.accounts]]
name = "submitter-2"
key_file = "./keys/submitter-2.json"

[submission.pool]
strategy = "round-robin" # or "least-pending"
max_pending_per_account = 4
```

### Safety
- Monitor account balances, alert when low
- Cap max pending transactions per account to bound risk
- Graceful degradation: if an account is unhealthy (repeated failures, low balance), remove from rotation

## Dependencies

- Requires #4 (custom transaction submission client) — nonce management is tightly coupled with how we build and broadcast transactions

## References

- Cosmos SDK sequence/nonce model: `auth` module `BaseAccount.Sequence`

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.