Skip to main content

Debugging locally

Logs and run events stream to the terminal where you run goldsky compose start. Output is formatted and colored so it’s easy to scan.

Chain forking

For testing against live on-chain state without spending gas, start your app with the --fork-chains flag:
This creates in-memory forks of all chains you interact with, powered by TEVM. All wallets are automatically funded with test ETH, so you can freely test contract interactions. Your task code stays exactly the same as in production — no special dev code needed. See Environments for more details.

Impersonating wallet addresses

If you need to test privileged contract methods that are restricted to a specific address (e.g. an owner or admin), you can impersonate that address on the fork without needing the private key:
Any wallet whose name matches the mapping will resolve to the impersonated address and all contract interactions will execute as that address on the local fork. Your task code doesn’t change at all. See Impersonated wallets for full details.

Testing individual tasks

callTask targets your deployed app by default. To test a task against your locally running app, pass --env local:
The payload must be valid JSON. The local port is resolved automatically (the --port flag, then .compose/.port, then 4000), so this works even when start picked a fallback port.

Debugging a Deployed Compose App

Once your app is running in the cloud, debug it from its details page in the web app at https://app.goldsky.com/dashboard/compose/{appName}. From there you can view logs and inspect task run records. See Monitoring your app via the webapp for a walkthrough. Every context function call (for example evm.wallet(), evm.writeContract(...), ctx.db.collection(...)) is automatically captured as a run event and shown in the task run view.

Using context.logger for run-aware logs

Use context.logger instead of console.log to get logs that are tagged with the task name and run ID. This unlocks a powerful debugging flow in the dashboard:
  1. Search for a log pattern in the app-level Logs tab (e.g. search for “payout failed”)
  2. Click “View run” on any matching log entry to jump directly to that task run
  3. Inspect the full trace — see every context function call, other logs, and the outcome of that specific run
Logs emitted with context.logger also appear in the run-specific Logs tab, so when you’re looking at a single task run you see only the logs from that execution. See the full logger reference for the API.

Examples

Next Steps

Deploying your App

Learn about deploying your app to the cloud for production use cases.

Full CLI Reference

View the full CLI command reference