Skip to content

Commit 587ddbe

Browse files
docs: remove subjective language from README
Replace promotional/subjective phrasing with objective, verifiable statements (e.g. drop "headline feature", "advanced debugging capabilities", "perfect for", "(recommended)"). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 8486366 commit 587ddbe

1 file changed

Lines changed: 53 additions & 24 deletions

File tree

README.md

Lines changed: 53 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,13 @@
1616

1717
## 🌟 Overview
1818

19-
`komet-node` is designed for Soroban developers who need advanced debugging capabilities. It extends the standard Stellar RPC with a `traceTransaction` method that provides instruction-level execution traces. The node's ledger state can be saved to and restored from a single file, enabling developers to reproduce exact network conditions and deterministically replay transactions.
19+
`komet-node` extends the standard Stellar RPC with a `traceTransaction` method that provides instruction-level execution traces. The node's ledger state can be saved to and restored from a single file, allowing the same ledger state to be reproduced and transactions to be replayed.
2020

2121
## 🚀 Quick Start
2222

2323
### Installation
2424

25-
Pick the method that matches how you intend to use `komet-node`:
26-
27-
| You are a… | Use |
28-
|---|---|
29-
| User who wants the `komet-node` binary | [**kup**](#install-with-kup-recommended) (recommended) |
30-
| User who prefers containers | [**Docker**](#run-with-docker) |
31-
| Developer hacking on `komet-node` | [**Dev Container**](#develop-with-the-dev-container) |
32-
33-
#### Install with kup (recommended)
25+
#### Install with kup
3426

3527
`komet-node` is distributed through [`kup`](https://github.com/runtimeverification/kup), Runtime Verification's Nix-based package manager. It pulls prebuilt binaries (including the matching K Framework and kompiled semantics) from RV's binary cache, so there is nothing to compile.
3628

@@ -49,7 +41,7 @@ To upgrade later, run `kup update komet-node`.
4941

5042
#### Run with Docker
5143

52-
A prebuilt image is published to Docker Hub for each release. It bundles K, the kompiled semantics, and `komet-node` ready to serve.
44+
Alternatively, a prebuilt image is published to Docker Hub for each release. It bundles K, the kompiled semantics, and `komet-node` ready to serve.
5345

5446
```bash
5547
# Pull the image (replace the tag with the release you want)
@@ -87,7 +79,7 @@ On first start the server creates an empty `state.kore`. Delete that file to res
8779

8880
#### Verify the server with `curl`
8981

90-
The server is operated via the Stellar RPC protocol. The read-only methods below take no transaction payload, which makes them perfect for a quick health check:
82+
The server is operated via the Stellar RPC protocol. The read-only methods below take no transaction payload and can be used as a quick health check:
9183

9284
```bash
9385
# Is the server alive?
@@ -113,23 +105,60 @@ curl -s http://localhost:8000 \
113105
# => {"jsonrpc":"2.0","id":1,"result":{"id":"00...00","protocolVersion":"22","sequence":0}}
114106
```
115107

116-
Submitting transactions uses the standard two-step Stellar pattern — `sendTransaction` with a base64 XDR envelope, then poll `getTransaction` by hash:
108+
Submitting transactions uses the standard two-step Stellar pattern — `sendTransaction` with a base64 XDR envelope, then poll `getTransaction` by hash. Because there is no mempool, `komet-node` executes the transaction synchronously inside `sendTransaction`, so the result is already available by the time you poll. The trace example below shows this flow end-to-end with ready-to-run envelopes; see [docs/server.md](docs/server.md) for the full RPC reference.
109+
110+
#### Trace a transaction
111+
112+
`traceTransaction` executes a transaction and returns an instruction-level execution trace inline, in a single call. Tracing only applies to contract invocations, so the server must be started with `--trace`:
117113

118114
```bash
119-
# Submit a signed transaction (XDR envelope produced by a Stellar SDK)
120-
curl -s http://localhost:8000 \
121-
-H 'Content-Type: application/json' \
122-
-d '{"jsonrpc":"2.0","id":1,"method":"sendTransaction","params":{"transaction":"<base64-XDR-envelope>"}}'
123-
# => {... "result":{"hash":"<64-char hex>","status":"PENDING", ...}}
115+
komet-node --trace
116+
```
124117

125-
# Poll for the result using the returned hash
126-
curl -s http://localhost:8000 \
127-
-H 'Content-Type: application/json' \
128-
-d '{"jsonrpc":"2.0","id":1,"method":"getTransaction","params":{"hash":"<64-char hex>"}}'
129-
# => {... "result":{"status":"SUCCESS","ledger":"1", ...}}
118+
A trace requires a deployed contract. The four envelopes below are pre-built and signed (a tiny contract whose `foo()` returns void, deployed from a fixed key) so you can paste them straight in — the local node does not check signatures, sequence numbers, or timebounds, so they work as-is on a fresh chain. Run them in order against the server above.
119+
120+
```bash
121+
# 1. Create the deployer account
122+
curl -s http://localhost:8000 -H 'Content-Type: application/json' \
123+
-d '{"jsonrpc":"2.0","id":1,"method":"sendTransaction","params":{"transaction":"AAAAAgAAAAADoQe/884Qvh1w3RjnS8CZZ+TWMJulDV8d3IZkElUxuAAAAGQAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAADoQe/884Qvh1w3RjnS8CZZ+TWMJulDV8d3IZkElUxuAAAAAJUC+QAAAAAAAAAAAESVTG4AAAAQMOMXdUuK9E9tF0pgpqX+z+nXFlE6Mn5e7rqOFL8jIolInsXc7XHPgvYs4VWDqlCGI/fom9SpYiHOQYUqKTvDAc="}}'
124+
125+
# 2. Upload the contract wasm
126+
curl -s http://localhost:8000 -H 'Content-Type: application/json' \
127+
-d '{"jsonrpc":"2.0","id":1,"method":"sendTransaction","params":{"transaction":"AAAAAgAAAAADoQe/884Qvh1w3RjnS8CZZ+TWMJulDV8d3IZkElUxuAAAAGQAAAAAAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAGAAAAAIAAABzAGFzbQEAAAABCAJgAAF+YAAAAwMCAAEFAwEAEAYZA38BQYCAwAALfwBBgIDAAAt/AEGAgMAACwcvBQZtZW1vcnkCAANmb28AAAFfAAEKX19kYXRhX2VuZAMBC19faGVhcF9iYXNlAwIKCQIEAEICCwIACwAAAAAAAAAAAAAAAAESVTG4AAAAQOk89R0Qlko4dCBI3XziT3XTjdm4kyKtpy9ky3uVksIYsSFWXKHTHOiCDaxNKdecQKbhQnD/9ELWxxr98D5ecQ4="}}'
128+
129+
# 3. Deploy a contract instance
130+
curl -s http://localhost:8000 -H 'Content-Type: application/json' \
131+
-d '{"jsonrpc":"2.0","id":1,"method":"sendTransaction","params":{"transaction":"AAAAAgAAAAADoQe/884Qvh1w3RjnS8CZZ+TWMJulDV8d3IZkElUxuAAAAGQAAAAAAAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAGAAAAAMAAAAAAAAAAAAAAAADoQe/884Qvh1w3RjnS8CZZ+TWMJulDV8d3IZkElUxuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFdPOLtg6vmmrgodRyN6P3wk1UfHrQxVekpbnsYYOcpvAAAAAAAAAAAAAAAAAAAAARJVMbgAAABAnLtNirBI7XdD2xwH3ws3rTDEhCxJ8mCRNU66d7b4MR2Ih9WtZzqb6akBqK6yA1GIavzVa7ahq2FNBflk+JpOBg=="}}'
132+
133+
# 4. Invoke foo() via traceTransaction — the trace comes back inline
134+
curl -s http://localhost:8000 -H 'Content-Type: application/json' \
135+
-d '{"jsonrpc":"2.0","id":1,"method":"traceTransaction","params":{"transaction":"AAAAAgAAAAADoQe/884Qvh1w3RjnS8CZZ+TWMJulDV8d3IZkElUxuAAAAGQAAAAAAAAABAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAGAAAAAAAAAABaiD+wakIF3Ol8jzjcPkl8jY0blEEON3W1A9rJxHBNOAAAAADZm9vAAAAAAAAAAAAAAAAAAAAAAESVTG4AAAAQKB9w/QmdK59UzXVbxXJp+5qfNpFSa495yajOyPM5KmYblE3/AbWqnnZMxTiBea0ShGZehgvo12AIyw48Lb1Xw0="}}'
136+
```
137+
138+
The final call returns the result inline. The `trace` field is itself a JSONL string (one JSON record per executed WebAssembly instruction); it is shown decoded here for readability:
139+
140+
```jsonc
141+
{
142+
"jsonrpc": "2.0",
143+
"id": 1,
144+
"result": {
145+
"hash": "c7099cbe10a9bfa1cdf9c9d368e1e1c932f535a70e4403b7aa409ce19fc36805",
146+
"status": "SUCCESS",
147+
"ledger": "4",
148+
"latestLedger": "4",
149+
"latestLedgerCloseTime": "1716000000",
150+
"trace": [
151+
{"pos": 3, "instr": ["const", "i32", 1048576], "stack": [], "locals": {}},
152+
{"pos": 11, "instr": ["const", "i32", 1048576], "stack": [], "locals": {}},
153+
{"pos": 19, "instr": ["const", "i32", 1048576], "stack": [], "locals": {}},
154+
{"pos": null, "instr": ["block"], "stack": [], "locals": {}},
155+
{"pos": 3, "instr": ["const", "i64", 2], "stack": [], "locals": {}}
156+
]
157+
}
158+
}
130159
```
131160

132-
Because there is no mempool, `komet-node` executes the transaction synchronously inside `sendTransaction`; the result is already available by the time you poll. See [docs/server.md](docs/server.md) for the full RPC reference, including the `traceTransaction` method.
161+
Each trace record captures the VM state at instruction entry: `pos` is the instruction's byte offset in the binary (`null` for synthetic instructions), `instr` is the instruction and its operands, and `stack`/`locals` are the value stack and locals as `[type, value]` pairs. See [docs/interpreter.md](docs/interpreter.md) for the full trace format.
133162

134163
#### Walk through a contract lifecycle
135164

0 commit comments

Comments
 (0)