Cross-Chain
Randomness & Timelocked Transactions
for Web3
Powering provably fair games and dApps across any parachain.
Core Products
Everything you need for trustless coordination across chains
Verifiable Randomness-as-a-Service
Tamper-proof, publicly verifiable randomness powered by Drand. Perfect for lotteries, leader elections, NFT drops, and fair gaming mechanics.
Timelocked Transactions
"Encryption to the Future": execute encrypted transactions at precise future times with cryptographic guarantees. Enable sealed-bid auctions, eliminate MEV, and enable time-gated game mechanics.
Cross-Chain Integration
Deploy across any parachain or network with minimal changes. Coordinate across ecosystems using XCM without sacrificing security or speed.
Verifiable Randomness-as-a-Service
Tamper-proof, publicly verifiable randomness powered by Drand. Perfect for lotteries, leader elections, NFT drops, and fair gaming mechanics.
- • Backed by the Drand Quicknet randomness beacon
- • Subscription model with DOT as payment asset
- • Fresh verifiable randomness available every 6s
- • Ideal for gaming, governance, and DeFi applications
Built for Fairness
Stop front-running, ensure provably fair outcomes, and enable secure conditional execution for all dApps.
Web3 Gaming
Enables fair loot drops, transparent matchmaking, and the creation of unique digital assets for games.
DAO Governance
Brings verifiable fairness and transparency to decentralized autonomous organizations (DAOs).
DeFi Protocols
Creates a foundation for more transparent and secure decentralized financial applications.
NFT Projects
Ensures fairness in asset distribution and provides tools for verifiable, on-chain trait generation.
Simple Developer Experience
Integrate verifiable randomness in minutes, not days
Quick Integration
Get started with our SDK to integrate verifiable randomness with any Polkadot parachain or ink! smart contract, send MEV-resistant transactions, or deploy native contracts on the IDN.
// Get verifiable randomness from a Parachain runtime
pub struct PulseConsumerImpl;
impl PulseConsumer<Pulse, SubscriptionId, (), ()> for PulseConsumerImpl {
fn consume_pulse(pulse: Pulse, sub_id: SubscriptionId) -> Result<(), ()> {
let pk = hex::decode(BEACON_PUBKEY);
if pulse
.authenticate(pk.try_into().expect("The public key is well-defined; qed."))
{
// Randomness consumption logic goes here.
log::info!("IDN Consumer: Verified pulse: {:?} with sub id: {:?}", pulse, sub_id);
} else {
// This should never happen.
// If it does, you should immediately pause your subscription and contact Ideal Labs.
log::error!(
"IDN Consumer: Unverified pulse ingested: {:?} with sub id: {:?}",
pulse,
sub_id
);
}
Ok(())
}
}