⚠️ NOTICE: Deployment Testing in Progress We have recently deployed a major platform update and are currently performing post-deployment testing and validation. Please do not use this website or submit any transactions until testing is complete. Some features may be unavailable or behave unexpectedly. Thank you for your patience as we work to ensure everything is functioning correctly.
Time-locked content release
Content sealed with a drand timelock (Signal's format) cannot be opened by anyone before its round. When the time comes it is revealed, checked against the signed commitment, and the contract is fulfilled.
sealed-reveal v2Who enforces what
- Condition
opensTime reachedApplication-enforced - Action
revealReveal sealed contentCryptographically verifiable - Action
revealRecord the outcomeApplication-enforced
- Consensus-enforced
- Every DigiByte node enforces it. Nobody can override it, including Contracts.
- DigiAsset-indexer-enforced
- DigiAsset indexers apply it after a transaction confirms. It is not DigiByte consensus: a valid DigiByte transaction can still be treated as burning assets.
- Application-enforced
- Contracts decides it in its own application, from data you can check. You trust Contracts' nodes, records and evaluation.
- Cryptographically verifiable
- Anyone can check it from public data and mathematics alone (wallet signatures, drand). Contracts records it; you need not trust Contracts to verify it.
Before it can be signed, fill in
- a DigiByte address for every party
- the sealed envelope's SHA-256 and drand round
- the release time
Simulation
The standard scenarios, run through the same rule engine the live service uses, with example values in every blank (addresses nobody holds keys for, and a format-valid example asset).
| Scenario | Outcome | Actions |
|---|---|---|
Nothing happens Everyone signs, then nobody does anything until expiry. | fulfilled | reveal: reveal content (execute) reveal: update contract state (execute) |
Reveal on time happens The least that makes rule “Reveal on time” true happens at block 24500005. | fulfilled | reveal: reveal content (execute) reveal: update contract state (execute) |
Data unavailable The rule conditions are met, but every outside data source is unreachable. Nothing irreversible may happen. | none | none |
Rules
1. Reveal on time
When “opens”
- → Reveal the sealed content (drand round 1).Cryptographically verifiableIrreversible
- → Record the outcome: fulfilled. The contract ends.Application-enforcedIrreversible
Expiry
When the chain's median time passes 2027-01-31 00:00:00 UTC (20 confirmations), if no outcome has been recorded, the contract ends as lapsed. Nothing that happens at or after expiry counts.
Conditions
opensTime reachedApplication-enforcedThe chain's median time passes 2026-12-31 00:00:00 UTC, with 20 confirmations.
Uses the chain's median time past, not a server clock, so anyone can recompute it.
- Median time past lags real time by a few minutes.
What you are trusting
DigiByte itself does not enforce these rules. Contracts evaluates them from public data and records the outcome; the parties’ signatures and any anchors can be checked by anyone.
- Contracts' evaluation and records
- Contracts' DigiByte node
- The drand network (League of Entropy)
Irreversible once done
- Reveal on time: Reveal the sealed content (drand round 1).
- Reveal on time: Record the outcome: fulfilled. The contract ends.
These run only when every condition they depend on is known. Missing or unconfirmed data never triggers them.
Use it from code
The same template is available from the API (GET /api/contracts/v1/templates/sealed-reveal) and the TypeScript SDK:
const { draft } = await client.templates.get("sealed-reveal");
// fill in addresses and amounts, then:
const { id } = await client.contracts.create(draft, { idempotencyKey: crypto.randomUUID() });