Your first app ledger
Download and extract the JVM distribution, recommended for app ledgers for now. From its extracted directory:
./yano.sh start:devnet,appchainThis activates the bundled appchain profile, including orders-chain, a single-member ordered-log demo. Its deterministic key is for local testing only. It is not a multi-member security demonstration and does not turn on L1 anchoring by itself.
1. Submit an event
Section titled “1. Submit an event”curl -fsS -X POST \ http://localhost:7070/api/v1/app-chain/chains/orders-chain/messages \ -H 'Content-Type: application/json' \ -d '{"topic":"order-created","body":"order A-1001"}'Save the returned messageId. The response is HTTP 202: the event has been accepted, but may not yet be finalized. See submission responses for the 400, 429, and 503 cases.
2. Read the finalized message
Section titled “2. Read the finalized message”Replace <message-id> with the returned value. The message route returns HTTP 404 until the message is finalized, so curl -f fails until then; query again after the proposer has had time to create a block:
curl -fsS 'http://localhost:7070/api/v1/app-chain/chains/orders-chain/messages/<message-id>'curl -fsS \ http://localhost:7070/api/v1/app-chain/chains/orders-chain/status3. Follow the event stream
Section titled “3. Follow the event stream”curl -N 'http://localhost:7070/api/v1/app-chain/chains/orders-chain/stream?fromHeight=0&topic=order-created'SSE streams finalized messages. Design consumers for reconnects and duplicate delivery using durable application checkpoints.
What the chain guarantees
Section titled “What the chain guarantees”ordered-log records opaque bytes in a shared finalized order. It does not enforce unique order IDs, a JSON schema, balances, or an order lifecycle. Two submissions of the same payload can produce different message IDs because their envelopes include sender sequence and expiry.
Use a custom state machine when consensus must enforce business rules. See ordered-log in depth and extension development.