---
openapi: get /dwn/v1/encryption/vrf-contributions
title: Query VRF Contributions
description: Monitor validator participation in consensus key generation
og:title: DWN VRF Consensus Tracking
---
VRF contributions ensure distributed key generation where no single validator knows the complete key.
## VRF Consensus Process
### How It Works
1. **Round Initiation**: New consensus round begins
2. **VRF Generation**: Each validator generates random value
3. **Proof Creation**: Cryptographic proof of randomness
4. **Contribution Submit**: Broadcast to network
5. **Threshold Check**: Wait for minimum contributions
6. **Key Derivation**: Combine for consensus key
### Contribution Components
- **validatorAddress**: Contributing validator
- **randomness**: VRF output (32 bytes)
- **proof**: VRF proof for verification
- **blockHeight**: Submission height
- **timestamp**: Contribution time
## Query Filters
Filter by validator to track specific node participation.
### By Validator
```bash
?validatorAddress=sonrvaloper1abc...
```
### By Block Height
```bash
?blockHeight=1000000
```
### Current Round
```bash
# No filters shows current round
/dwn/v1/encryption/vrf-contributions
```
## Consensus Round Status
### Round States
- **waiting_for_contributions**: Collecting VRF inputs
- **complete**: Threshold reached, key generated
- **expired**: Timeout without consensus
- **single_node_mode**: Development mode
### Round Metadata
- **roundNumber**: Sequential round identifier
- **keyVersion**: Target key version
- **requiredContributions**: Threshold count
- **receivedContributions**: Current count
- **expiryHeight**: Timeout block height
Rounds expire if threshold isn't met. Monitor contribution progress.
## Validator Monitoring
### Participation Tracking
```javascript
// Calculate participation rate
const participationRate =
receivedContributions / requiredContributions * 100;
// Check specific validator
const hasContributed = contributions
.some(c => c.validatorAddress === myValidator);
// Time to expiry
const blocksRemaining = expiryHeight - currentHeight;
```
### Missing Validators
```bash
# Get active validator set
VALIDATORS=$(snrd query staking validators -o json | jq -r '.validators[].operator_address')
# Check contributions
CONTRIBUTIONS=$(snrd query dwn vrf-contributions -o json)
# Find missing validators
# (Compare lists to identify non-participants)
```
## Security Properties
### Verifiability
- Each contribution includes proof
- Proofs cryptographically verifiable
- Prevents manipulation
### Unpredictability
- Output unpredictable before threshold
- No single party controls result
- Combines all contributions
### Threshold Security
- Requires minimum participation
- Prevents minority attacks
- Ensures decentralization
VRF contributions are public but the derived key remains secure through threshold cryptography.
## Troubleshooting
### Low Participation
- Check validator connectivity
- Verify consensus parameters
- Review validator logs
### Expired Rounds
- Increase timeout parameters
- Improve validator coordination
- Check network latency
### Single-Node Fallback
- Enabled in development
- Bypasses consensus requirement
- Not for production use