This table shows who signs each message, which ledgers keep it, and the status of the claim after each step. Example: First Trade runs these steps.
step signed by kept in claim status
offer seller seller ledger (offer open)
claim buyer buyer (sent), seller accepted, or rejected with a reason
receipt of the claim buyer buyer ledger (the third entry)
paid buyer buyer (sent), seller accepted, paid
received seller seller ledger accepted, received
delivered seller seller ledger accepted, delivered
confirmed buyer buyer (sent), seller closed (once received + delivered + confirmed)
dispute either seller ledger disputed
ruling arbiter seller ledger released, refunded or splitThe state tests the rejection reasons in this order: unknown_offer, offer_changed, withdrawn, expired, self_claim, not_allowed, bad_quantity, price_mismatch.
Some messages break no structure rule, but no state rule accepts them. Examples are a payment from a different key, a ruling by the wrong key, and a message that the seller records two times.
The ledger keeps these messages. The state lists them in ignored, with a reason. They never break the ledger.
To read the state of a ledger:
ledgdex state https://biobot.example
ledgdex state biobot | python3 -m json.tool