Rings
A ring is what a finished stretch leaves behind. It is written once, when the carrier is spent, and never edited.
- What the eight fields of a ring hold, and which two are null on the ring that ends an artifact.
- That one ring is written per confirmed spend of a carrier, never per block and never on request.
- Why the current stretch is not a ring, so an artifact deep at 13000 blocks can still have none.
- Why ring depths must never be summed, and which three numbers to show instead.
- Which endpoint answers which question about rings, and how the museum differs from the leaderboard.
The record
Eight fields, written once when the carrier is spent. The two successor fields are null exactly when
relic is true, and never otherwise.
Ring {
index position in the list, from 0
start_height height of the block that created the carrier
end_height height of the block that spent it
depth end_height - start_height
carried_value sats the carrier held during the stretch
successor_txid where the artifact went, or null
successor_vout which output, or null
relic true when this ring ended the artifact
}
When a ring is written
One ring per confirmed spend of a carrier. Not per block, not per year, not on request.
- An artifact that has never moved has zero rings, however deep it is.
- An artifact that has moved four times has four rings, and is on its fifth stretch.
- A relic's last ring has
relic: trueand no successor. - The current stretch is not a ring. It is live depth, and it becomes a ring only when it ends.
Worked example
An artifact born at height 880000, moved twice, currently alive.
| index | start | end | depth | carried | result |
|---|---|---|---|---|---|
| 0 | 880000 | 893000 | 13000 | 100000 | moved to a successor |
| 1 | 893000 | 894008 | 1008 | 96000 | moved again |
| live | 894008 | growing | 92000 | current stretch, not yet a ring |
Reading that record honestly: this holder once went 13000 blocks without moving, which is Verdigris tier, then moved twice. The current stretch started at 894008 and its depth is whatever the tip is minus that. The carried value drops each time because fees come out of the successor.
Depth is per stretch, never cumulative
13000 plus 1008 is not a depth of 14008. There is no lifetime total, and the protocol does not compute one. A ring is a claim about one continuous stretch, and stretches do not concatenate.
If you build a view that sums rings, you are inventing a number the protocol does not stand behind. Show the deepest ring, the ring count, and the live depth. Those are all real.
Why rings exist
Without rings, a move would erase the entire history and the artifact would be indistinguishable from one minted yesterday. That would make a single mistake, or a single sale, delete years of evidence.
With rings, the record is honest in both directions. It shows what was achieved, and it shows that it ended. Nothing is inflated and nothing is hidden. The public depth page walks one artifact through four stretches and leaves it sitting at depth 40 with three rings behind it.
Rings across a transfer
The buyer receives the seller's rings, because rings belong to the artifact and not to a holder. That is a design decision with a consequence worth stating plainly: a deep ring is not proof that the current holder earned it. Read What it does not promise.
Reading rings from the API
Three endpoints for three different questions: the history of one artifact, the stretches that closed recently, and the longest ever completed.
GET /patina/artifacts/:id rings, oldest first, inside the full record
GET /patina/shatter newest first
GET /patina/museum longest completed rings
The museum is history. The leaderboard is the present: deepest live stretches, which change as blocks arrive and drop to zero when someone moves.
What a ring does not contain
- No holder identity, no address history, no label.
- No price and no valuation.
- No reason for the move. The chain does not record why anyone spends anything.
- No score. Depth in blocks is the number, and readers can judge it themselves.