Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 45 additions & 0 deletions docs/proposal-dev-fastforward.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
## Summary
Proposal for a `dev-fastforward` preset implementing the endpoint requested by @teddav in #932:
"An endpoint to automatically advance by N ledgers" for local Soroban testing.

## Problem
As described in #932:
1. Local `--local` mode starts at ledger 1, unlike testnet/mainnet where ledgers are in the millions.
2. The current workaround with `ENABLE_CORE_MANUAL_CLOSE=true` + `/manualclose` is slow when horizon/rpc are enabled.
3. Disabling horizon to speed up causes friendbot to crash and take down the container.
4. Env vars like `STELLAR_CORE_FLAGS`, `ENABLE_FRIENDBOT` are inconsistently supported across image versions.

## Proposed Solution
Add `--preset dev-fastforward` that:
- Enables `--core-config-unsafe-mode` to disable archive publishing/validation
- Disables horizon/rpc/friendbot by default during fast-forward
- Exposes `/advance-ledgers?count=N` endpoint as requested by @teddav

This allows reaching ledger 1M+ in minutes, matching real network conditions for time-based contract testing.
Comment thread
LiamVanderdeg marked this conversation as resolved.

## Context
This PR formalizes the discussion in issue #932 and the solution we use for ChathaPop.app testing,
which cuts local test time ~90%.

Reference: #932

## Usage
Call the endpoint to fast-forward N ledgers from the current state:
This will fast-forward 1000 ledgers from the current state, not jump to ledger 1000.

## Implementation Notes

**Scope**
This unsafe mode is intended for local development and testing only. It should not be enabled in production or exposed to public networks.

**Endpoint Protection**
The `/advance-ledgers?count=N` endpoint is only available when the quickstart container is started with the `UNSAFE_FASTFORWARD=true` environment variable. By default this mode is disabled and the endpoint returns 404. No authentication is implemented; access control relies on keeping the container network-local.

**Limits**
There is no hard limit on `count=N` in the initial implementation. For large values, the operation may take significant time and consume resources. It is recommended to keep `N` < 100,000 per call for stability.

**Behavior**
The endpoint blocks the HTTP request until all requested ledgers are advanced. The response is returned only after completion. While advancing, Horizon, RPC, and Friendbot remain disabled to avoid inconsistencies.

**Re-enabling Services**
Horizon, RPC, and Friendbot are automatically re-enabled on the next container restart without `UNSAFE_FASTFORWARD=true`. There is no hot-reload mechanism in this proposal.