/

Errors

The full DiceError enum, grouped by subsystem. If you see one of these in an Anchor log, find it here.

All variants live in programs/dice/src/error.rs. Anchor returns them as Custom(code) in TX logs — the variant name and message are what you see in the explorer.

Round protocol errors

The errors your client code is most likely to encounter when driving rounds.

VariantMessageRoot cause
InsufficientNodesminimum 4 requiredFewer than 4 nodes online at request time. Retry or reduce node_count.
InvalidNodeCountmust be between 4 and 50You passed node_count < 4 or > 50. Clamp client-side.
RoundTimedOutRound has timed outNodes didn't reveal within the round window. Rare; coordinator retries automatically.
RoundAlreadyFinalizedalready been finalizedDouble finalisation attempted. Usually a coordinator bug, not caller-visible.
RoundNotCompletenot yet completeAttempted to finalise before all reveals are in. Transient.
EscrowInsufficientEscrow has insufficient fundsChannel is out of SOL. Call fund_channel.
UnauthorizedCoordinatornot the authorized coordinator for this channelThe TX signer doesn't match the channel's bound coordinator pubkey.
VariantMessageRoot cause
AlreadyCommittedNode has already committed for this roundDuplicate submit_round for the same device + round.
AlreadyRevealedNode has already revealed for this roundDuplicate submit_reveal for the same device + round.
RevealMismatchhash(entropy) does not match commitA node's reveal doesn't hash to its earlier commit. Hardware fault or malice.
InvalidSignatureInvalid ECDSA signatureThe reveal signature didn't verify against the device's registered pubkey.
UnauthorizedNodenot authorized for this roundA device tried to submit for a round it wasn't selected in.
InvalidDeviceIddevice_id does not match SHA-256(device_pubkey)Provisioning integrity check failed. The device is misregistered.

Callback errors

These surface when DICE tries to CPI into your program.

VariantMessageRoot cause
CallbackProgramMissingCallback program missing from remaining accountsCoordinator didn't include the callback program in the finalisation TX. Ops issue.
CallbackProgramMismatchCallback program ID does not match requestA different program was supplied than the channel's configured callback. Usually a client bug.
CallbackFailedCPI callback to developer program failedYour dice_callback reverted. See Callback handler → replay.

Streaming feed errors

Relevant only if you're consuming the streaming VRF feed PDA. See Streaming feed.

VariantMessageRoot cause
FeedPublishTooSoonbefore the configured interval has elapsedFeed crank ran faster than publish_interval_slots. Retry next interval.
FeedWrongCoordinatornot the coordinator bound to this feedThe signer doesn't match the feed's coordinator pubkey.
FeedInvalidIntervalbetween MIN and MAX_PUBLISH_INTERVAL_SLOTSInterval config out of bounds. Choose a value in the allowed range.
FeedNotActiveclosed or pausedFeed has been paused by its authority.
FeedChannelMismatchdoes not match the feed's configured bound_channelThe channel passed to publish doesn't match the feed's binding.
FeedChannelNotFinalizednot in Finalized statusAttempted to publish from a still-running round.
FeedRoundIdMismatchround_id does not matchThe round_id argument disagrees with the channel's last finalised round.
FeedRandomnessMismatchrandomness does not matchThe randomness argument disagrees with the channel's stored result.

Node vault errors

You'll see these only if you operate a node. Integrators don't call vault instructions.

VariantMessageRoot cause
VaultAlreadyBoundalready bound to a payout walletbind_payout_wallet called twice. Use rotate_payout_wallet instead.
VaultNotBoundno payout wallet bound yetWithdraw attempted before binding. Call bind_payout_wallet first.
VaultWrongPayoutWalletnot the vault's current payout walletSigner doesn't match the vault's bound wallet.
VaultInsufficientBalanceexceeds vault credited balanceWithdraw amount > credited. Reduce the amount.
VaultZeroAmountmust be greater than zeroWithdraw of 0 lamports.
VaultRotationCooldownbefore cooldown elapsedTried to rotate payout wallet before the cooldown window ended.
VaultBindingSignatureInvalidfailed secp256k1 verificationBinding message signature didn't verify. Check firmware key.
VaultCreditOverflowwould overflow vault totalsTheoretical u64 overflow on credit. Should not happen in practice.
VaultUnknownServiceIdUnknown service IDCredit path passed an unrecognised service tag.
VaultFrozenVault is frozenVault has been frozen by governance. Contact DICE ops.

Deprecated

VariantMessageRoot cause
V1ClaimRewardsDeprecateduse claim_rewards_v2 (v2 channel path)The v1 claim path had unfixable per-node payout semantics. Migrate to v2.