Localnet: trading bot swarm for frontend load testing #119

Closed
opened 2026-04-27 08:13:20 +00:00 by PlasticDigits · 12 comments
PlasticDigits commented 2026-04-27 08:13:20 +00:00 (Migrated from gitlab.com)

Motivation

Manual trading on LocalTerra is too slow and uniform to stress-test the dApp UI (swap, hybrid routes, limit orders, pool provide/withdraw, charts, indexer-backed lists, gas paths, and concurrent activity). A localnet-only scripted trading bot swarm should generate continuous, realistic on-chain activity so developers can run the frontend against a lively chain without hand-clicking every flow.

Scope

  • In scope: A script (or small script suite) used only for LocalTerra / localnet testing; multiple bot wallets; Poisson-distributed trade timing; mixed action types aligned with what the frontend exercises.
  • Out of scope: Testnet/mainnet automation, production keys, CI-by-default execution of the swarm (may be documented as optional manual QA).

Requirements

Environment and safety

  1. Localnet only: The entrypoint must refuse to run unless it detects the expected LocalTerra setup (e.g. CHAIN_ID=localterra, correct LCD/RPC from frontend-dapp/.env.local or explicit env, localterra container healthy). No default wiring to public RPCs.
  2. No secrets in repo: Bot mnemonics must be generated at runtime or supplied via env / gitignored local file — never committed. Document how this differs from the fixed TEST_MNEMONIC dev wallet in docker/init-chain.sh (optional: derive bot keys from a local-only seed phrase env var for reproducibility).
  3. Start / stop / monitor: One documented way to:
    • start the swarm (foreground or background with pid/log),
    • stop gracefully (SIGINT handler or stop subcommand),
    • monitor (structured logs: wallet alias, action type, tx hash, errors; optional --dry-run or verbosity levels).

Wallets and “profiles”

  1. Five distinct trading profiles (e.g. names or IDs in config): each profile has a different strategy mix (weights over action types, pair selection bias, size distribution, limit vs market bias, LP bias). All profiles must still be recognizably “traders” (non-trivial mix of swap-related activity — not one profile that only mints tokens).
  2. Concurrency: All five bots run concurrently (e.g. separate async workers or processes), each maintaining its own schedule and nonce sequence.

Timing model

  1. Poisson inter-arrival times: Time until the next action for each bot is drawn from an exponential distribution with mean 20 seconds (i.e. Poisson process rate λ = 1/20 s⁻¹). Document the sampling approach and add a sanity check in logs (e.g. rolling average inter-tx time ~20s over a long window).
  2. Jitter / collision: Optional small additional jitter is fine, but the nominal design target remains mean 20s between trades per bot (clarify in docs whether “between trades” is per-bot or global; default expectation: per bot).

Action types (must all appear across the swarm)

Across the swarm (not necessarily every profile on every tick), bots must execute on-chain flows that map to frontend features:

  1. Hybrid orders — swaps that exercise the hybrid path (native/LSD/wrapped logic the dApp and transactions.ts treat as hybrid), not only plain pool hops.
  2. Limit orders — submissions (and optionally cancellations/amends if supported by contracts/UI) so the limit-order views and indexer queries show live data.
  3. DEX “v2” / router swaps — execute_swap_operations (or equivalent) through the deployed router address from local env (VITE_ROUTER_ADDRESS), including multi-hop where sensible.
  4. Direct pair / pool swaps — at least some swaps executed against pair contracts (single-hop) to differ from router-only paths.
  5. Add liquidity — provide_liquidity on selected pairs within factory/router graph.
  6. Remove liquidity — withdraw_liquidity / burn LP on those pairs.

Funding

  1. Each bot wallet must be funded automatically by the script (idempotent top-up acceptable) with:
    • Native uluna (LUNC) for fees,
    • Native uusd (stand-in for USTC on LocalTerra genesis),
    • Both dApp trading CW20 tokens used as the primary swap/LP universe (minimum: the factory-pair tokens already deployed by scripts/deploy-dex-local.sh — align with VITE_CL8Y_TOKEN_ADDRESS, VITE_LUNC_C_TOKEN_ADDRESS, VITE_USTC_C_TOKEN_ADDRESS, and/or the Ember/Coral/… set as appropriate for realistic UI testing),
    • Sufficient depth to run for extended frontend sessions without manual terrad tx bank send / mint ops.

Document the funding mechanism (e.g. terrad tx bank send from genesis test1, CW20 Mint from minter if available, or factory owner paths — mirror patterns from scripts/e2e-provision-dev-wallet.sh and deploy-dex-local.sh).

Acceptance criteria

  • Running the script after a fresh deploy-dex-local produces five funded bot addresses and begins broadcasting txs without manual per-wallet funding.
  • Logs show all action categories over a reasonable window (hybrid, limit, router multi-hop, pool swap, add LP, remove LP), with attribution to profile/bot.
  • Inter-arrival statistics per bot are documented and verifiable (~20s mean; include how to measure in README or --stats flag).
  • Script exits non-zero on wrong chain / missing container / missing .env.local contracts, with actionable error messages.
  • README or docs/local-development.md (or a short scripts/README section) lists: prerequisites, start/stop, env vars, and explicit warning that this is for local testing only.
  • No new default mnemonics or private keys committed to the repository.

Code and files likely to be added or touched

Area Suggested addition
New script(s) scripts/localnet-trading-swarm.sh and/or scripts/localnet-trading-swarm/ (Node/TS or Python acceptable if team prefers — bash + terrad in docker matches existing deploy-dex-local.sh / e2e-provision-dev-wallet.sh).
Config YAML/JSON for five profiles: weights, allowed pairs, min/max trade sizes, hybrid vs router vs pool fractions.
Shared helpers Reuse docker exec … terrad tx patterns from scripts/deploy-dex-local.sh; optional small library for CW20 balance checks / mint (see scripts/e2e-provision-dev-wallet.sh factory enumeration).
Docs docs/local-development.md or docs/testing.md subsection: “Trading swarm for UI load.”
Makefile (optional) make swarm-local target that validates prerequisites then invokes the script.

Contract message shapes should follow existing integration docs (docs/contracts-terraclassic.md, docs/integrators.md) and the frontend services under frontend-dapp/src/services/terraclassic/.

Prerequisites and expected infra (before the script works)

  1. Docker LocalTerra running — e.g. make start / docker compose up -d localterra per docs/local-development.md and docker-compose.yml.
  2. Contracts + frontend env written — bash scripts/deploy-dex-local.sh (or make deploy-local) so frontend-dapp/.env.local contains VITE_FACTORY_ADDRESS, VITE_ROUTER_ADDRESS, token addresses, LCD/RPC, etc. The script should read from this file or documented env overrides (same pattern as scripts/e2e-provision-dev-wallet.sh).
  3. Optimized WASM artifacts — deploy script already enforces non-stale artifacts; swarm assumes pairs and liquidity from deploy exist on-chain.
  4. Indexer (recommended for full UI testing) — not strictly required for on-chain txs, but for pool lists/charts behaving like QA: start indexer per docs/qa-onboarding.md / scripts/qa/start-qa.sh or manual indexer env; document VITE_INDEXER_URL alignment.
  5. Genesis test wallet — test1 in the LocalTerra container (from docker/init-chain.sh) must remain funded to pay gas for provisioning txs that fund/mint for bots.

Open questions (for implementer)

  • Exact CW20 set labeled “both trading tokens” vs full factory enumeration for mint/funding.
  • Whether limit-order contract/indexer requires specific pair ordering or minimum liquidity before limits are accepted.
  • Preferred implementation language (bash-first vs small TS package using @terra-money/* or CosmJS) given maintenance cost.
  • scripts/deploy-dex-local.sh — deploy, pair creation, .env.local / .env.development, LUNC_C / USTC_C addresses.
  • scripts/e2e-provision-dev-wallet.sh — idempotent CW20 top-up pattern from factory pairs.
  • docker/init-chain.sh — TEST_MNEMONIC, genesis uluna / uusd balances.
  • docs/local-development.md, docs/testing.md, frontend-dapp/e2e/README.md — local workflow expectations.
## Motivation Manual trading on LocalTerra is too slow and uniform to stress-test the dApp UI (swap, hybrid routes, limit orders, pool provide/withdraw, charts, indexer-backed lists, gas paths, and concurrent activity). A **localnet-only** scripted **trading bot swarm** should generate continuous, realistic on-chain activity so developers can run the frontend against a lively chain without hand-clicking every flow. ## Scope - **In scope:** A script (or small script suite) used **only for LocalTerra / localnet** testing; multiple bot wallets; Poisson-distributed trade timing; mixed action types aligned with what the frontend exercises. - **Out of scope:** Testnet/mainnet automation, production keys, CI-by-default execution of the swarm (may be documented as optional manual QA). ## Requirements ### Environment and safety 1. **Localnet only:** The entrypoint must refuse to run unless it detects the expected LocalTerra setup (e.g. `CHAIN_ID=localterra`, correct LCD/RPC from `frontend-dapp/.env.local` or explicit env, localterra container healthy). No default wiring to public RPCs. 2. **No secrets in repo:** Bot mnemonics must be generated at runtime or supplied via env / gitignored local file — never committed. Document how this differs from the fixed `TEST_MNEMONIC` dev wallet in `docker/init-chain.sh` (optional: derive bot keys from a local-only seed phrase env var for reproducibility). 3. **Start / stop / monitor:** One documented way to: - start the swarm (foreground or background with pid/log), - stop gracefully (SIGINT handler or `stop` subcommand), - monitor (structured logs: wallet alias, action type, tx hash, errors; optional `--dry-run` or verbosity levels). ### Wallets and “profiles” 4. **Five distinct trading profiles** (e.g. names or IDs in config): each profile has a **different strategy mix** (weights over action types, pair selection bias, size distribution, limit vs market bias, LP bias). All profiles must still be recognizably “traders” (non-trivial mix of swap-related activity — not one profile that only mints tokens). 5. **Concurrency:** All five bots run concurrently (e.g. separate async workers or processes), each maintaining its own schedule and nonce sequence. ### Timing model 6. **Poisson inter-arrival times:** Time until the next action for each bot is drawn from an **exponential** distribution with mean **20 seconds** (i.e. Poisson process rate λ = 1/20 s⁻¹). Document the sampling approach and add a sanity check in logs (e.g. rolling average inter-tx time ~20s over a long window). 7. **Jitter / collision:** Optional small additional jitter is fine, but the **nominal** design target remains mean 20s between trades **per bot** (clarify in docs whether “between trades” is per-bot or global; default expectation: **per bot**). ### Action types (must all appear across the swarm) Across the swarm (not necessarily every profile on every tick), bots must execute on-chain flows that map to frontend features: 8. **Hybrid orders** — swaps that exercise the **hybrid** path (native/LSD/wrapped logic the dApp and `transactions.ts` treat as hybrid), not only plain pool hops. 9. **Limit orders** — submissions (and optionally cancellations/amends if supported by contracts/UI) so the limit-order views and indexer queries show live data. 10. **DEX “v2” / router swaps** — `execute_swap_operations` (or equivalent) through the **deployed router** address from local env (`VITE_ROUTER_ADDRESS`), including **multi-hop** where sensible. 11. **Direct pair / pool swaps** — at least some swaps executed against **pair** contracts (single-hop) to differ from router-only paths. 12. **Add liquidity** — `provide_liquidity` on selected pairs within factory/router graph. 13. **Remove liquidity** — `withdraw_liquidity` / burn LP on those pairs. ### Funding 14. Each bot wallet must be funded **automatically by the script** (idempotent top-up acceptable) with: - **Native `uluna`** (LUNC) for fees, - **Native `uusd`** (stand-in for USTC on LocalTerra genesis), - **Both dApp trading CW20 tokens** used as the primary swap/LP universe (minimum: the factory-pair tokens already deployed by `scripts/deploy-dex-local.sh` — align with `VITE_CL8Y_TOKEN_ADDRESS`, `VITE_LUNC_C_TOKEN_ADDRESS`, `VITE_USTC_C_TOKEN_ADDRESS`, and/or the Ember/Coral/… set as appropriate for realistic UI testing), - Sufficient depth to run for extended frontend sessions without manual `terrad tx bank send` / mint ops. Document the funding mechanism (e.g. `terrad tx bank send` from genesis `test1`, CW20 `Mint` from minter if available, or factory owner paths — mirror patterns from `scripts/e2e-provision-dev-wallet.sh` and `deploy-dex-local.sh`). ## Acceptance criteria - [ ] Running the script after a fresh `deploy-dex-local` produces **five** funded bot addresses and begins broadcasting txs without manual per-wallet funding. - [ ] Logs show **all** action categories over a reasonable window (hybrid, limit, router multi-hop, pool swap, add LP, remove LP), with attribution to profile/bot. - [ ] Inter-arrival statistics per bot are documented and verifiable (~20s mean; include how to measure in README or `--stats` flag). - [ ] Script exits non-zero on wrong chain / missing container / missing `.env.local` contracts, with actionable error messages. - [ ] README or `docs/local-development.md` (or a short `scripts/README` section) lists: prerequisites, start/stop, env vars, and **explicit warning** that this is for local testing only. - [ ] No new default mnemonics or private keys committed to the repository. ## Code and files likely to be added or touched | Area | Suggested addition | |------|-------------------| | New script(s) | `scripts/localnet-trading-swarm.sh` and/or `scripts/localnet-trading-swarm/` (Node/TS or Python acceptable if team prefers — bash + `terrad` in docker matches existing `deploy-dex-local.sh` / `e2e-provision-dev-wallet.sh`). | | Config | YAML/JSON for five profiles: weights, allowed pairs, min/max trade sizes, hybrid vs router vs pool fractions. | | Shared helpers | Reuse `docker exec … terrad tx` patterns from `scripts/deploy-dex-local.sh`; optional small library for CW20 balance checks / mint (see `scripts/e2e-provision-dev-wallet.sh` factory enumeration). | | Docs | `docs/local-development.md` or `docs/testing.md` subsection: “Trading swarm for UI load.” | | Makefile (optional) | `make swarm-local` target that validates prerequisites then invokes the script. | Contract message shapes should follow existing integration docs (`docs/contracts-terraclassic.md`, `docs/integrators.md`) and the frontend services under `frontend-dapp/src/services/terraclassic/`. ## Prerequisites and expected infra (before the script works) 1. **Docker LocalTerra running** — e.g. `make start` / `docker compose up -d localterra` per `docs/local-development.md` and `docker-compose.yml`. 2. **Contracts + frontend env written** — `bash scripts/deploy-dex-local.sh` (or `make deploy-local`) so `frontend-dapp/.env.local` contains `VITE_FACTORY_ADDRESS`, `VITE_ROUTER_ADDRESS`, token addresses, LCD/RPC, etc. The script should read from this file or documented env overrides (same pattern as `scripts/e2e-provision-dev-wallet.sh`). 3. **Optimized WASM artifacts** — deploy script already enforces non-stale artifacts; swarm assumes pairs and liquidity from deploy exist on-chain. 4. **Indexer (recommended for full UI testing)** — not strictly required for on-chain txs, but for pool lists/charts behaving like QA: start indexer per `docs/qa-onboarding.md` / `scripts/qa/start-qa.sh` or manual indexer env; document `VITE_INDEXER_URL` alignment. 5. **Genesis test wallet** — `test1` in the LocalTerra container (from `docker/init-chain.sh`) must remain funded to pay gas for provisioning txs that fund/mint for bots. ## Open questions (for implementer) - Exact CW20 set labeled “both trading tokens” vs full factory enumeration for mint/funding. - Whether limit-order contract/indexer requires specific pair ordering or minimum liquidity before limits are accepted. - Preferred implementation language (bash-first vs small TS package using `@terra-money/*` or CosmJS) given maintenance cost. ## Related references in-repo - `scripts/deploy-dex-local.sh` — deploy, pair creation, `.env.local` / `.env.development`, LUNC_C / USTC_C addresses. - `scripts/e2e-provision-dev-wallet.sh` — idempotent CW20 top-up pattern from factory pairs. - `docker/init-chain.sh` — `TEST_MNEMONIC`, genesis `uluna` / `uusd` balances. - `docs/local-development.md`, `docs/testing.md`, `frontend-dapp/e2e/README.md` — local workflow expectations.
PlasticDigits commented 2026-04-27 08:13:21 +00:00 (Migrated from gitlab.com)

assigned to @PlasticDigits

assigned to @PlasticDigits
PlasticDigits commented 2026-04-27 09:03:09 +00:00 (Migrated from gitlab.com)

mentioned in commit 4f7749063c

mentioned in commit 4f7749063cbe5abaeb06ea5b874cf3e411773e48
PlasticDigits commented 2026-04-27 09:04:03 +00:00 (Migrated from gitlab.com)

Implemented (merged to main)

@brouie please verify this fix when you have a moment (issue stays open).

Summary

  • New package packages/localnet-trading-swarm (@cl8y-dex/localnet-trading-swarm): five MnemonicWallet bots (indices 0–4), Poisson inter-arrival ~20s per bot, distinct profiles in src/profiles.json.
  • Funding: uluna / uusd bank sends from test1 + full factory CW20 enumeration (paginated pairs query) and idempotent Mint per bot — same pattern as scripts/e2e-provision-dev-wallet.sh.
  • Actions: router execute_swap_operations (prefers 2+ hops), direct pair swap, hybrid pair swap, place_limit_order, provide_liquidity, withdraw_liquidity.
  • Guards: src/liquidityGuards.ts documents PAIR_MINIMUM_LIQUIDITY (1000) and conservative reserve / leg floors so default deploy-dex-local pools stay tradeable.
  • Entry: ./scripts/localnet-trading-swarm.sh or make swarm-local; flags --dry-run, --stats.
  • Docs: packages/localnet-trading-swarm/README.md, docs/local-development.md, docs/testing.md, skills/AGENTS_LOCALNET_TRADING_SWARM.md; CI job localnet-trading-swarm in .github/workflows/test.yml.

Verification checklist

  1. docker compose up -d localterra and bash scripts/deploy-dex-local.sh (writes frontend-dapp/.env.local).
  2. cd packages/localnet-trading-swarm && npm ci && npm run test:run (Vitest, no chain).
  3. ./scripts/localnet-trading-swarm.sh -- --dry-run — exits 0 only when LCD reports localterra, container running, required VITE_* set.
  4. Run swarm (without --dry-run) several minutes — JSON logs should show all six action kinds across bots.
  5. ./scripts/localnet-trading-swarm.sh -- --stats, Ctrl+C — swarm_stats JSON: per-bot meanGapSec near 20 with enough samples.
  6. Wrong chain: temporarily set VITE_TERRA_LCD_URL to a non-localterra LCD — expect immediate refusal with clear error.

Commit: 4f77490 on main.

## Implemented (merged to `main`) @brouie please verify this fix when you have a moment (issue stays open). ### Summary - New package `packages/localnet-trading-swarm` (`@cl8y-dex/localnet-trading-swarm`): five `MnemonicWallet` bots (indices 0–4), Poisson inter-arrival ~20s **per bot**, distinct profiles in `src/profiles.json`. - **Funding:** `uluna` / `uusd` bank sends from `test1` + **full factory CW20 enumeration** (paginated `pairs` query) and idempotent `Mint` per bot — same pattern as `scripts/e2e-provision-dev-wallet.sh`. - **Actions:** router `execute_swap_operations` (prefers 2+ hops), direct pair swap, hybrid pair swap, `place_limit_order`, `provide_liquidity`, `withdraw_liquidity`. - **Guards:** `src/liquidityGuards.ts` documents `PAIR_MINIMUM_LIQUIDITY` (1000) and conservative reserve / leg floors so default `deploy-dex-local` pools stay tradeable. - **Entry:** `./scripts/localnet-trading-swarm.sh` or `make swarm-local`; flags `--dry-run`, `--stats`. - **Docs:** `packages/localnet-trading-swarm/README.md`, `docs/local-development.md`, `docs/testing.md`, `skills/AGENTS_LOCALNET_TRADING_SWARM.md`; CI job `localnet-trading-swarm` in `.github/workflows/test.yml`. ### Verification checklist 1. `docker compose up -d localterra` and `bash scripts/deploy-dex-local.sh` (writes `frontend-dapp/.env.local`). 2. `cd packages/localnet-trading-swarm && npm ci && npm run test:run` (Vitest, no chain). 3. `./scripts/localnet-trading-swarm.sh -- --dry-run` — exits 0 only when LCD reports `localterra`, container running, required `VITE_*` set. 4. Run swarm (without `--dry-run`) several minutes — JSON logs should show all six `action` kinds across bots. 5. `./scripts/localnet-trading-swarm.sh -- --stats`, Ctrl+C — `swarm_stats` JSON: per-bot `meanGapSec` near 20 with enough samples. 6. Wrong chain: temporarily set `VITE_TERRA_LCD_URL` to a non-localterra LCD — expect immediate refusal with clear error. Commit: `4f77490` on `main`.
PlasticDigits commented 2026-04-27 09:47:56 +00:00 (Migrated from gitlab.com)

QA run (infra + swarm) — 2026-04-27

What I ran

  1. docker compose up -d (LocalTerra + Postgres).
  2. Confirmed existing frontend-dapp/.env.local from a prior deploy-dex-local and factory smart-query works.
  3. cd packages/localnet-trading-swarm && npm ci
  4. Full swarm: SWARM_BOT_MNEMONIC="abandon … about" SWARM_FUNDING_TX_SLEEP_MS=1200 SWARM_MINT_SLEEP_MS=80 timeout 420 npm run start -- --stats (~7 min wall clock; SIGTERM at timeout).

Outcome: good for local load-testing

  • Funding: After fixes on main (1a862cc), genesis test1 can fund all five bots: default uluna/uusd top-ups were lowered to fit typical LocalTerra balances, and SWARM_FUNDING_TX_SLEEP_MS (default 2000 ms) pauses between each terrad tx from test1 so account sequence does not race under --broadcast-mode sync.
  • On-chain actions observed (successful txHash): hybrid_swap, router_multihop, pair_swap, limit_order, add_liquidity — all present in JSON logs within the window. ~40 successful txs in the monitored period (grep txHash hex lines in local log).
  • remove_liquidity: Often "note":"no_lp_balance" — expected until bots accumulate LP from add_liquidity; not a blocker for the swarm’s purpose.
  • Spread errors (pre-fix): Two router_multihop failures: Max spread assertion: actual spread (1) exceeds max allowed (0.5). Addressed on main by setting max_spread: "1" for router/pair/hybrid swap msgs in actions.ts (localnet-only load script).
  • Inter-tx stats (--stats on SIGTERM): With only ~5–10 samples per bot in this short window, per-bot meanGapSec was ~30–49s vs 20s target — variance is normal at low n; the design is still exponential with mean 20s (plus jitter). Longer runs should converge.

Ops notes

  • First attempts failed: top-ups too large vs genesis test1 (uluna / uusd insufficient funds) — fixed via saner defaults + env docs.
  • Sequence mismatch on rapid terrad tx bank send — fixed via inter-tx sleep for all test1 funding txs.

Commits

  • 1a862cc — funding defaults, SWARM_FUNDING_TX_SLEEP_MS, max_spread 1 for swaps.

@brouie — swarm verified end-to-end on live LocalTerra with deploy state; remaining noise is mostly LP-withdraw skips until LP builds up.

## QA run (infra + swarm) — 2026-04-27 ### What I ran 1. `docker compose up -d` (LocalTerra + Postgres). 2. Confirmed existing `frontend-dapp/.env.local` from a prior `deploy-dex-local` and factory smart-query works. 3. `cd packages/localnet-trading-swarm && npm ci` 4. Full swarm: `SWARM_BOT_MNEMONIC="abandon … about" SWARM_FUNDING_TX_SLEEP_MS=1200 SWARM_MINT_SLEEP_MS=80 timeout 420 npm run start -- --stats` (~7 min wall clock; SIGTERM at timeout). ### Outcome: **good for local load-testing** - **Funding:** After fixes on `main` (`1a862cc`), genesis `test1` can fund all five bots: default `uluna`/`uusd` top-ups were lowered to fit typical LocalTerra balances, and **`SWARM_FUNDING_TX_SLEEP_MS`** (default 2000 ms) pauses between each `terrad tx` from `test1` so **account sequence** does not race under `--broadcast-mode sync`. - **On-chain actions observed (successful `txHash`):** `hybrid_swap`, `router_multihop`, `pair_swap`, `limit_order`, `add_liquidity` — all present in JSON logs within the window. **~40 successful txs** in the monitored period (grep `txHash` hex lines in local log). - **`remove_liquidity`:** Often `"note":"no_lp_balance"` — **expected** until bots accumulate LP from `add_liquidity`; not a blocker for the swarm’s purpose. - **Spread errors (pre-fix):** Two `router_multihop` failures: `Max spread assertion: actual spread (1) exceeds max allowed (0.5)`. Addressed on `main` by setting **`max_spread: "1"`** for router/pair/hybrid swap msgs in `actions.ts` (localnet-only load script). - **Inter-tx stats (`--stats` on SIGTERM):** With only ~5–10 samples per bot in this short window, per-bot `meanGapSec` was **~30–49s** vs 20s target — variance is normal at low `n`; the design is still exponential with mean 20s (plus jitter). Longer runs should converge. ### Ops notes - First attempts failed: **top-ups too large** vs genesis `test1` (`uluna` / `uusd` insufficient funds) — fixed via saner defaults + env docs. - **Sequence mismatch** on rapid `terrad tx bank send` — fixed via inter-tx sleep for all `test1` funding txs. ### Commits - `1a862cc` — funding defaults, `SWARM_FUNDING_TX_SLEEP_MS`, `max_spread` 1 for swaps. @brouie — swarm verified end-to-end on live LocalTerra with deploy state; remaining noise is mostly LP-withdraw skips until LP builds up.
PlasticDigits (Migrated from gitlab.com) closed this issue 2026-05-02 05:34:59 +00:00
PlasticDigits commented 2026-05-31 12:29:12 +00:00 (Migrated from gitlab.com)

mentioned in issue #252

mentioned in issue #252
PlasticDigits commented 2026-06-12 11:10:25 +00:00 (Migrated from gitlab.com)

mentioned in issue #372

mentioned in issue #372
PlasticDigits commented 2026-06-12 11:39:21 +00:00 (Migrated from gitlab.com)

mentioned in merge request !886

mentioned in merge request !886
PlasticDigits commented 2026-06-13 03:05:42 +00:00 (Migrated from gitlab.com)

mentioned in merge request !894

mentioned in merge request !894
PlasticDigits commented 2026-08-22 12:26:36 +00:00 (Migrated from gitlab.com)

mentioned in issue #597

mentioned in issue #597
PlasticDigits commented 2026-08-22 12:26:46 +00:00 (Migrated from gitlab.com)

marked as related to #597

marked as related to #597
PlasticDigits commented 2026-08-24 05:54:09 +00:00 (Migrated from gitlab.com)

mentioned in issue #621

mentioned in issue #621
PlasticDigits commented 2026-08-24 05:54:09 +00:00 (Migrated from gitlab.com)

marked as related to #621

marked as related to #621
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
code/cl8y-dex-terraclassic#119
No description provided.