⚠️ 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.
Event pass and redemption
An attendee holding the event pass DigiAsset gets a DigiPass for entry. The pass is redeemed when the attendee burns it or the organiser checks them in; either fulfils the agreement.
event-pass v1Who enforces what
- Condition
holdsAsset heldDigiAsset-indexer-enforcedpreview - Condition
burnedBurn confirmedApplication-enforcedpreview - Condition
checkedInApproval givenCryptographically verifiable - Action
admitActivate a utilityApplication-enforcedpreview - Action
redeemRecord 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 pass DigiAsset id
- the Assets DigiPass definition id
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. | lapsed | none |
Holds the pass: issue entry happens The least that makes rule “Holds the pass: issue entry” true happens at block 24500005. | lapsed | admit: activate utility (preview) |
Pass redeemed happens The least that makes rule “Pass redeemed” true happens at block 24500005. | fulfilled | redeem: 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. Holds the pass: issue entry
When “holds”
- → Activate the DIGIPASS on Example pass for the attendee.Application-enforcedIrreversiblePreview
2. Pass redeemed
When “burned” OR “checkedIn”
- → Record the outcome: fulfilled. The contract ends.Application-enforcedIrreversible
Expiry
At DigiByte block 24,540,320 (20 confirmations), if no outcome has been recorded, the contract ends as lapsed. Nothing that happens at or after expiry counts.
Conditions
holdsAsset heldDigiAsset-indexer-enforcedPreview: monitored in a later releaseThe attendee holds at least 1 units of Example pass, with 20 confirmations.
Ownership is decided by DigiAsset indexers; Contracts reads it from its own DigiAsset Core and decides whether the condition holds.
- A confirmed DigiByte transaction is not always a valid DigiAsset transfer: indexers burn assets when an asset's rules are broken.
- Assets that carry on-chain rules (royalties, approvals, KYC, expiry) are treated as UNKNOWN until those rules are modelled.
burnedBurn confirmedApplication-enforcedPreview: monitored in a later releaseThe attendee burns at least 1 units of Example pass, with 20 confirmations.
A DGB burn is an OP_RETURN output carrying this contract's reference; a DigiAsset burn is the indexer's burn instruction from a named party. Contracts observes it.
- Burned value can never be recovered, by anyone.
checkedInApproval givenCryptographically verifiableThe organiser approves “The attendee was checked in” by signing an approval with their DigiByte wallet.
A DigiByte message signature by the party, naming this contract version and the subject. Anyone can verify it; Contracts records it and counts it from the next block.
- An approval cannot be withdrawn once recorded.
- An approval submitted after the expiry does not count.
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' DigiAsset Core indexer
- Contracts' evaluation
- Contracts' DigiByte node
- Contracts' DigiAsset Core (for asset burns)
- Contracts to record an approval when the party submits it
- DigiStamp Assets' Utility Engine
Irreversible once done
- Holds the pass: issue entry: Activate the DIGIPASS on Example pass for the attendee.
- Pass redeemed: 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.
Some parts are in preview: they are part of the agreement, but Contracts will monitor or perform them only once that feature launches.
Use it from code
The same template is available from the API (GET /api/contracts/v1/templates/event-pass) and the TypeScript SDK:
const { draft } = await client.templates.get("event-pass");
// fill in addresses, asset ids and amounts, then:
const { id } = await client.contracts.create(draft, { idempotencyKey: crypto.randomUUID() });