diff --git a/docs/build/smart-contracts/getting-started/deploy-to-testnet.mdx b/docs/build/smart-contracts/getting-started/deploy-to-testnet.mdx index 73f605ad5a..ceefd4997d 100644 --- a/docs/build/smart-contracts/getting-started/deploy-to-testnet.mdx +++ b/docs/build/smart-contracts/getting-started/deploy-to-testnet.mdx @@ -129,6 +129,24 @@ The following output should appear. ["Hello", "RPC"] ``` +:::note + +You may also see a message like: + +``` +ℹ️ Simulation identified as read-only. Send by rerunning with `--send=yes`. +``` + +This is expected! The `hello` function is **read-only**—it doesn't modify any on-chain state. When the CLI detects a read-only function, it automatically runs it as a **local simulation** instead of submitting a transaction to the network. This means: + +- **No fees**: The simulation is free—no transaction is submitted to the ledger. +- **Instant result**: The output you see (`["Hello", "RPC"]`) is already the correct result. +- **Ignore `--send=yes`**: For read-only functions, the simulation already gave you what you need. + +The `--send=yes` flag is only needed for **state-changing functions**—those that write to contract storage. For those, the CLI first simulates the transaction (to estimate fees and check for errors), then you use `--send=yes` to actually submit and persist changes on-chain. + +::: + :::info The `--` double-dash is required!