High Stakes
Maximum security for high-value outcomes
Security
9.5
1
Commit
Hash your secret
2
Wait
VEO fulfills
3
Reveal
Show your secret
4
Use
Get bond back
Secret
#
CommitVEO
FulfillR
RevealE
CombinedYour secret + VEO entropy = nobody can cheat
Cost
10K
PLS
Bond
10M
PLS (returned)
Reveal
~1m
window
Difficulty
Expert
integration
Why It's Secure
Commit-Reveal
No last-mover cheating
Bonded
Can't quit if losing
Dual Source
You + VEO combined
MEV Proof
Secret hidden upfront
Great For
Casinos
Real money games
Big Lotteries
Prizes over $10,000
DeFi
Financial outcomes
Premium NFTs
High-value drops
Overkill For
Small Games
Use Medium tier
Quick Actions
Reveal adds delay
Low Value
Bond too expensive
Simple Apps
Too complex
Bond Required
You must post a 10M PLS bond (~$167) when committing. If you reveal your secret on time, you get it all back. If you don't reveal (trying to avoid a bad result), you lose the bond. This stops people from cheating.
Note: Bond amount (10M-1B PLS) and reveal window (42s-5min) can be adjusted by protocol governance as PLS price changes.
For Developers
Integration Guide
Commit-reveal pattern for maximum security
2Quick Start
Solidity
// PHASE 1: Generate secret and commit
bytes32 secret = keccak256(abi.encodePacked(
msg.sender, block.timestamp, someUniqueData
));
bytes32 commitment = keccak256(abi.encodePacked(secret));
// Store secret somewhere safe! You need it later.
storedSecrets[requestId] = secret;
// Request with bond (10M PLS returned on reveal)
uint256 price = veo.getSecurePrice(); // 10,010,000 PLS
bytes32 requestId = veo.requestEntropySecure{value: price}(
consumer, actionId, commitment
);
// PHASE 2: Wait for VEO to fulfill (keepers do this)
require(veo.isReadyForReveal(requestId), "Not ready");
// PHASE 3: Reveal your secret (bond returned)
veo.revealSecretAndComplete(requestId, secret);
// PHASE 4: Consume the combined entropy
bytes32 entropy = veo.consumeEntropy(requestId, salt);3Frontend Secret Generation
JavaScript
import { ethers } from 'ethers';
// Generate a cryptographically secure secret
const secret = ethers.utils.randomBytes(32);
const commitment = ethers.utils.keccak256(secret);
// IMPORTANT: Store secret safely until reveal!
localStorage.setItem('veo_secret_' + requestId,
ethers.utils.hexlify(secret));
// Later, retrieve and reveal
const storedSecret = localStorage.getItem('veo_secret_' + requestId);
await veo.revealSecretAndComplete(requestId, storedSecret);4Secure Functions
Request (Secure)
getSecurePrice() → uint256secureBond() → uint256revealWindow() → uint256requestEntropySecure(consumer, actionId, commitment)Reveal
isReadyForReveal(id) → boolrevealSecretAndComplete(id, secret)getSecureRequestDetails(id)Consume
consumeEntropy(id, salt) → bytes32canConsume(id) → (bool, string)Slash (Penalty)
slashExpiredSecure(id)Anyone can call this after reveal deadline passes
5Secure ABI
VEO.sol (Secure Functions)
[ "function getSecurePrice() view returns (uint256)", "function secureBond() view returns (uint256)", "function revealWindow() view returns (uint256)", "function requestEntropySecure(address, bytes32, bytes32) payable returns (bytes32)", "function revealSecretAndComplete(bytes32, bytes32)", "function slashExpiredSecure(bytes32)", "function isReadyForReveal(bytes32) view returns (bool)", "function getSecureRequestDetails(bytes32) view returns (bool, bytes32, uint256, uint256, uint8)", "function consumeEntropy(bytes32, bytes32) returns (bytes32)", "function canConsume(bytes32) view returns (bool, string)", "event SecureEntropyRequested(bytes32, address, address, bytes32, uint256, uint256)", "event SecretRevealed(bytes32, bytes32)", "event BondSlashed(bytes32, address, uint256)" ]
For lower stakes, check out Low or Medium Stakes tiers.