🍪

We use cookies for functional, analytical and personalisation purposes.

Read moreAccept

Dice

Blackjack

Plinko

Crash

Mines

Beef

Keno

Castle Roulette

Video Poker

Groomer's Van

Rock Paper Scissors

Limbo

Live Blackjack

Casino
Sports
Arena
High Scores
1,021 Online
$3m monthly and $25k daily leaderboards now live for slots and live games.
$3m monthly and $25k daily leaderboards now live for slots and live games.
nluu :
jthr
zbannana23 :
YAY NICOTINE I WON
Nicot1ne :
nice
Illiseyy :
Who wants to play something against me for 7.5 dola
lluwh123 :
duel.com/#bet=1461730740
lluwh123 :
duel.com/#bet=1461732353
Realgamer :
ds
Exo1234 :
tayy
ISIDRO40 :
$1000 poker any1
watchtsnbigwin :
has anybody actually hit the 1 cent to 31k on 15 mines
@watchtsnbigwin: has anybody actually hit the 1 cent to 31k on 15 mines
Nicot1ne :
duel.com/high-scores?category=luckiest_wins
watchtsnbigwin :
i got close to it i was 2 gems away but ive never seen anybody thats hit it
Nicot1ne :
not yet i think not sure
@Nicot1ne: duel.com/high-scores?category=luckiest_wins
watchtsnbigwin :
damnn
watchtsnbigwin :
2 million
watchtsnbigwin :
multiplier
watchtsnbigwin :
??
@watchtsnbigwin: has anybody actually hit the 1 cent to 31k on 15 mines
JackpotDream :
With hitler Symbol 🤣
@JackpotDream: With hitler Symbol 🤣
watchtsnbigwin :
lmaooo
acetheone93555 :
tedh
WildWezt :
anyone 20$ poker
@WildWezt: anyone 20$ poker
watchtsnbigwin :
50 cent tranny or not
watchtsnbigwin :
lmkk
WildWezt :
think not :D
ISIDRO40 :
poker $2000 who down
watchtsnbigwin :
duel.com/#bet=1461767308
watchtsnbigwin :
boiii
foidslayer764 :
hi
Muzmakesmonion6789 :
How did i lose 2720909051520230288
@Muzmakesmonion6789: How did i lose 2720909051520230288
Nicot1ne :
duel.com/transactions/bets-sports
Nicot1ne :
show the bet here, ill check
Realgamer :
ey
Realgamer :
im the goat
Muzmakesmonion6789 :
How do i show it here this is the sports id
duel.com/#bet=1461430098
Muzmakesmonion6789 :
I dont get it both my teams won
@Muzmakesmonion6789: How do i show it here this is the sports id duel.com/#bet=1461430098
Nicot1ne :
was it overtime?
Muzmakesmonion6789 :
yea
Nicot1ne :
if u bet on 1x2, overtime isnt included
Muzmakesmonion6789 :
ohhh
Muzmakesmonion6789 :
shit
Nicot1ne :
yeah, so u need to bet on the draw for that one
ISIDRO40 :
Hu poker $1k any1
Muzmakesmonion6789 :
Ale gotcha
Muzmakesmonion6789 :
alr
Captiansmash :
Captiansmash :
Someone join no chickens
ISIDRO40 :
$10000 hu poker who down
channn2 :
.
Docktormx :
Www
SportIsBetter :
GG
yomi :
anyone $10-$20 poker 1v1?
watchtsnbigwin :
i lost the first round all in do free bet second round get blackjack
watchtsnbigwin :
hm
watchtsnbigwin :
im starting to think sites rigged
Captiansmash :
ISIDRO40 :
$2k poker hmu
Captiansmash :
Someone join $5 can’t be that may brokees
Lvblank :
10 numbers is cancer 3 numbers is where it’s at
snoeBJ :
dealer 1, 11 player 15 insurance?
luckinglmao :
р
zombiezxg :
e
Nicot1ne :
no codes
@yomi: anyone $10-$20 poker 1v1?
WildWezt :
go
@Nicot1ne: no codes
uvb77 :
how do i invite ppl on ethnoguesr
Nicot1ne :
arena was made to be played w friends/ppl u trust g
Docktormx :
Fack zero
WildWezt :
20 usd poker anyone?
SANAS123 :
Hello
@SANAS123: Hello
Getsumei27 :
Hi
SANAS123 :
@Getsumei27 how are you buddy
Getsumei27 :
@yepe
my inyernet crashed for a sec
@Getsumei27: @yepe my inyernet crashed for a sec
yepe :
oh
@SANAS123: @Getsumei27 how are you buddy
Getsumei27 :
Im good. Gonna go to work soon
ISIDRO40 :
$10000 who wants poker
SANAS123 :
@
@Getsumei27: @yepe my inyernet crashed for a sec
yepe :
yo
@yepe: oh
Getsumei27 :
So what do u think about starlight princess super scatter
@Getsumei27: So what do u think about starlight princess super scatter
yepe :
i got u
@yepe: i got u
Getsumei27 :
W
wooliest :
Princess terrible
vkct78 :
.
@wooliest: Princess terrible
yepe :
all sluts are really
@wooliest: Princess terrible
Getsumei27 :
Lol
oErik :
Yo
@oErik: Yo
Itsmee :
Yo
@yepe: all sluts are really
wooliest :
Fr
WildWezt :
whats the duel discord name
WildWezt :
server
@WildWezt: whats the duel discord name
Nicot1ne :
https://discord.gg/duel
WildWezt :
whats the name
WildWezt :
this link doesnt work
WildWezt :
so i can manusally search on discord
Nicot1ne :
wdym it doesnt work
Nicot1ne :
literally works
WildWezt :
link doesnt work
WildWezt :
invalid
ISIDRO40 :
$1000 hu poker any1
wooliest :
Ban him lol
vkct78 :
.
ISIDRO40 :
$2000 poker any1
1,021 Online

Provably Fair

OverviewVerify

Calculation

Enter the required details below to independently verify the fairness of your game round.

Enter the details to verify your results.
Code
// Code written in javascript

// User input values
const clientSeed = '';
const serverSeed = '';
const nonce = 0;

// Suits: D -> Diamonds, H -> Hearts, S -> Spades, C -> Clubs

// Index of 0 to 51: 2D to AC
const CARDS = [
  '2D', '2H', '2S', '2C', '3D', '3H', '3S', '3C', '4D', '4H',
  '4S', '4C', '5D', '5H', '5S', '5C', '6D', '6H', '6S', '6C',
  '7D', '7H', '7S', '7C', '8D', '8H', '8S', '8C', '9D', '9H',
  '9S', '9C', '10D', '10H', '10S', '10C', 'JD', 'JH', 'JS',
  'JC', 'QD', 'QH', 'QS', 'QC', 'KD', 'KH', 'KS', 'KC', 'AD',
  'AH', 'AS', 'AC',
];

// Converts a hex string (e.g. "deadbeef") into a Uint8Array of bytes
function hexToBytes(hex) {
  const bytes = new Uint8Array(hex.length / 2);
  for (let i = 0; i < bytes.length; i++) {
    bytes[i] = parseInt(hex.slice(i * 2, i * 2 + 2), 16);
  }
  return bytes;
}

// Converts a Uint8Array of bytes back into a hex string (e.g. [222, 173, 190, 239] → "deadbeef")
function bytesToHex(bytes) {
  return Array.from(bytes)
    .map((b) => b.toString(16).padStart(2, '0'))
    .join('');
}

// Computes a HMAC-SHA256 using the Web Crypto API
// keyHex: hex-encoded key (e.g. server seed)
// message: Uint8Array to be signed
async function generateHMAC_SHA256(keyHex, message) {
  const keyBytes = hexToBytes(keyHex);

  // Import raw key for HMAC use
  const cryptoKey = await crypto.subtle.importKey(
    'raw',
    keyBytes,
    { name: 'HMAC', hash: 'SHA-256' },
    false,
    ['sign'],
  );

  // Generate HMAC signature
  const signature = await crypto.subtle.sign('HMAC', cryptoKey, message);
  return bytesToHex(new Uint8Array(signature)); // Return signature as hex
}

// Generates a single card from a SHA-256 hash (hex string)
// Uses rejection sampling to ensure fair distribution across 52 possible cards
function generateInfiniteDeckCard(hashHex) {
  const hashBytes = hexToBytes(hashHex);

  for (let i = 0; i <= hashBytes.length - 4; i += 4) {
    const view = new DataView(
      hashBytes.buffer,
      hashBytes.byteOffset + i,
      4,
    );
    const value = view.getUint32(0); // Read 4 bytes as big-endian unsigned integer
    const max = 52 * Math.floor(0x100000000 / 52); // Bias-free range
    if (value < max) {
      const index = value % 52; // Fair card index
      return CARDS[index];
    }
  }

  throw new Error('Failed to generate unbiased card value from hash');
}

// Combines all steps to return a Blackjack card result
// Inputs: serverSeed, clientSeed, nonce, cursor
async function getCard(serverSeed, clientSeed, nonce, cursor) {
  // Prepare input message for HMAC: public seed + nonce + cursor
  const message = new TextEncoder().encode(
    `${clientSeed}:${nonce}:${cursor}`
  );

  // Compute HMAC hash
  const hash = await generateHMAC_SHA256(serverSeed, message);

  // Generate and return card using the hash
  const card = generateInfiniteDeckCard(hash);
  return card;
}

async function validateBlackjackResult(serverSeed, clientSeed, nonce) {
  const cards = [];

  for (let cursor = 0; cursor < 50; cursor++) {
    cards.push(await getCard(serverSeed, clientSeed, nonce, cursor));
  }

  return cards;
}

// Run the validateBlackjackResult function if input values are provided
if (serverSeed && serverSeed.trim() !== '' && clientSeed && clientSeed.trim() !== '' && nonce >= 0) {
  validateBlackjackResult(serverSeed, clientSeed, nonce).then(result => {
    console.log("Suits: D -> Diamonds, H -> Hearts, S -> Spades, C -> Clubs");
    console.log("Next 50 cards in the deck:", result);
  });
} else {
  console.log("Please provide valid serverSeed, clientSeed, and nonce (>=0) before running.");
}
            
Enter the details to verify your results.
Code
// Code written in javascript

// User input values
const clientSeed = '';
const serverSeed = '';
const nonce = 0;

// Suits: D -> Diamonds, H -> Hearts, S -> Spades, C -> Clubs

// Index of 0 to 51: 2D to AC
const CARDS = [
  '2D', '2H', '2S', '2C', '3D', '3H', '3S', '3C', '4D', '4H',
  '4S', '4C', '5D', '5H', '5S', '5C', '6D', '6H', '6S', '6C',
  '7D', '7H', '7S', '7C', '8D', '8H', '8S', '8C', '9D', '9H',
  '9S', '9C', '10D', '10H', '10S', '10C', 'JD', 'JH', 'JS',
  'JC', 'QD', 'QH', 'QS', 'QC', 'KD', 'KH', 'KS', 'KC', 'AD',
  'AH', 'AS', 'AC',
];

// Converts a hex string (e.g. "deadbeef") into a Uint8Array of bytes
function hexToBytes(hex) {
  const bytes = new Uint8Array(hex.length / 2);
  for (let i = 0; i < bytes.length; i++) {
    bytes[i] = parseInt(hex.slice(i * 2, i * 2 + 2), 16);
  }
  return bytes;
}

// Converts a Uint8Array of bytes back into a hex string (e.g. [222, 173, 190, 239] → "deadbeef")
function bytesToHex(bytes) {
  return Array.from(bytes)
    .map((b) => b.toString(16).padStart(2, '0'))
    .join('');
}

// Computes a HMAC-SHA256 using the Web Crypto API
// keyHex: hex-encoded key (e.g. server seed)
// message: Uint8Array to be signed
async function generateHMAC_SHA256(keyHex, message) {
  const keyBytes = hexToBytes(keyHex);

  // Import raw key for HMAC use
  const cryptoKey = await crypto.subtle.importKey(
    'raw',
    keyBytes,
    { name: 'HMAC', hash: 'SHA-256' },
    false,
    ['sign'],
  );

  // Generate HMAC signature
  const signature = await crypto.subtle.sign('HMAC', cryptoKey, message);
  return bytesToHex(new Uint8Array(signature)); // Return signature as hex
}

// Generates a single card from a SHA-256 hash (hex string)
// Uses rejection sampling to ensure fair distribution across 52 possible cards
function generateInfiniteDeckCard(hashHex) {
  const hashBytes = hexToBytes(hashHex);

  for (let i = 0; i <= hashBytes.length - 4; i += 4) {
    const view = new DataView(
      hashBytes.buffer,
      hashBytes.byteOffset + i,
      4,
    );
    const value = view.getUint32(0); // Read 4 bytes as big-endian unsigned integer
    const max = 52 * Math.floor(0x100000000 / 52); // Bias-free range
    if (value < max) {
      const index = value % 52; // Fair card index
      return CARDS[index];
    }
  }

  throw new Error('Failed to generate unbiased card value from hash');
}

// Combines all steps to return a Blackjack card result
// Inputs: serverSeed, clientSeed, nonce, cursor
async function getCard(serverSeed, clientSeed, nonce, cursor) {
  // Prepare input message for HMAC: public seed + nonce + cursor
  const message = new TextEncoder().encode(
    `${clientSeed}:${nonce}:${cursor}`
  );

  // Compute HMAC hash
  const hash = await generateHMAC_SHA256(serverSeed, message);

  // Generate and return card using the hash
  const card = generateInfiniteDeckCard(hash);
  return card;
}

async function validateBlackjackResult(serverSeed, clientSeed, nonce) {
  const cards = [];

  for (let cursor = 0; cursor < 50; cursor++) {
    cards.push(await getCard(serverSeed, clientSeed, nonce, cursor));
  }

  return cards;
}

// Run the validateBlackjackResult function if input values are provided
if (serverSeed && serverSeed.trim() !== '' && clientSeed && clientSeed.trim() !== '' && nonce >= 0) {
  validateBlackjackResult(serverSeed, clientSeed, nonce).then(result => {
    console.log("Suits: D -> Diamonds, H -> Hearts, S -> Spades, C -> Clubs");
    console.log("Next 50 cards in the deck:", result);
  });
} else {
  console.log("Please provide valid serverSeed, clientSeed, and nonce (>=0) before running.");
}
            
About
  • wtf Duel?
  • High Scores
  • Referral FAQ
  • Provably Fair
  • Why Bonuses Suck
  • Fake Bets
  • Zero Edge
  • Careers
  • Merch
Legal
  • Terms of Service
  • Privacy Policy
  • Sports Betting Rules
  • Responsible Gaming
Community
Duel.com is owned and operated by Immortal Snail LLC, registration number: L22982, registered address: Arthur Evelyn Building, Suite 5, Main Street, Charlestown, Nevis, West lndies. Contact us at hey@duel.com. Duel.com is licensed and regulated by the Government of the Autonomous Island of Anjouan, Union of Comoros and operates under License No. ALSI-202411026-FI1. Duel.com has passed all regulatory compliance and is legally authorized to conduct gaming operations for any and all games of chance and wagering.Duel is dedicated to encouraging responsible gambling. To learn more, please visit: https://www.gambleaware.org
Copyright © 2026 duel.com. All rights reserved.
1,021 Online
$3m monthly and $25k daily leaderboards now live for slots and live games.
$3m monthly and $25k daily leaderboards now live for slots and live games.
nluu :
jthr
zbannana23 :
YAY NICOTINE I WON
Nicot1ne :
nice
Illiseyy :
Who wants to play something against me for 7.5 dola
lluwh123 :
duel.com/#bet=1461730740
lluwh123 :
duel.com/#bet=1461732353
Realgamer :
ds
Exo1234 :
tayy
ISIDRO40 :
$1000 poker any1
watchtsnbigwin :
has anybody actually hit the 1 cent to 31k on 15 mines
@watchtsnbigwin: has anybody actually hit the 1 cent to 31k on 15 mines
Nicot1ne :
duel.com/high-scores?category=luckiest_wins
watchtsnbigwin :
i got close to it i was 2 gems away but ive never seen anybody thats hit it
Nicot1ne :
not yet i think not sure
@Nicot1ne: duel.com/high-scores?category=luckiest_wins
watchtsnbigwin :
damnn
watchtsnbigwin :
2 million
watchtsnbigwin :
multiplier
watchtsnbigwin :
??
@watchtsnbigwin: has anybody actually hit the 1 cent to 31k on 15 mines
JackpotDream :
With hitler Symbol 🤣
@JackpotDream: With hitler Symbol 🤣
watchtsnbigwin :
lmaooo
acetheone93555 :
tedh
WildWezt :
anyone 20$ poker
@WildWezt: anyone 20$ poker
watchtsnbigwin :
50 cent tranny or not
watchtsnbigwin :
lmkk
WildWezt :
think not :D
ISIDRO40 :
poker $2000 who down
watchtsnbigwin :
duel.com/#bet=1461767308
watchtsnbigwin :
boiii
foidslayer764 :
hi
Muzmakesmonion6789 :
How did i lose 2720909051520230288
@Muzmakesmonion6789: How did i lose 2720909051520230288
Nicot1ne :
duel.com/transactions/bets-sports
Nicot1ne :
show the bet here, ill check
Realgamer :
ey
Realgamer :
im the goat
Muzmakesmonion6789 :
How do i show it here this is the sports id
duel.com/#bet=1461430098
Muzmakesmonion6789 :
I dont get it both my teams won
@Muzmakesmonion6789: How do i show it here this is the sports id duel.com/#bet=1461430098
Nicot1ne :
was it overtime?
Muzmakesmonion6789 :
yea
Nicot1ne :
if u bet on 1x2, overtime isnt included
Muzmakesmonion6789 :
ohhh
Muzmakesmonion6789 :
shit
Nicot1ne :
yeah, so u need to bet on the draw for that one
ISIDRO40 :
Hu poker $1k any1
Muzmakesmonion6789 :
Ale gotcha
Muzmakesmonion6789 :
alr
Captiansmash :
Captiansmash :
Someone join no chickens
ISIDRO40 :
$10000 hu poker who down
channn2 :
.
Docktormx :
Www
SportIsBetter :
GG
yomi :
anyone $10-$20 poker 1v1?
watchtsnbigwin :
i lost the first round all in do free bet second round get blackjack
watchtsnbigwin :
hm
watchtsnbigwin :
im starting to think sites rigged
Captiansmash :
ISIDRO40 :
$2k poker hmu
Captiansmash :
Someone join $5 can’t be that may brokees
Lvblank :
10 numbers is cancer 3 numbers is where it’s at
snoeBJ :
dealer 1, 11 player 15 insurance?
luckinglmao :
р
zombiezxg :
e
Nicot1ne :
no codes
@yomi: anyone $10-$20 poker 1v1?
WildWezt :
go
@Nicot1ne: no codes
uvb77 :
how do i invite ppl on ethnoguesr
Nicot1ne :
arena was made to be played w friends/ppl u trust g
Docktormx :
Fack zero
WildWezt :
20 usd poker anyone?
SANAS123 :
Hello
@SANAS123: Hello
Getsumei27 :
Hi
SANAS123 :
@Getsumei27 how are you buddy
Getsumei27 :
@yepe
my inyernet crashed for a sec
@Getsumei27: @yepe my inyernet crashed for a sec
yepe :
oh
@SANAS123: @Getsumei27 how are you buddy
Getsumei27 :
Im good. Gonna go to work soon
ISIDRO40 :
$10000 who wants poker
SANAS123 :
@
@Getsumei27: @yepe my inyernet crashed for a sec
yepe :
yo
@yepe: oh
Getsumei27 :
So what do u think about starlight princess super scatter
@Getsumei27: So what do u think about starlight princess super scatter
yepe :
i got u
@yepe: i got u
Getsumei27 :
W
wooliest :
Princess terrible
vkct78 :
.
@wooliest: Princess terrible
yepe :
all sluts are really
@wooliest: Princess terrible
Getsumei27 :
Lol
oErik :
Yo
@oErik: Yo
Itsmee :
Yo
@yepe: all sluts are really
wooliest :
Fr
WildWezt :
whats the duel discord name
WildWezt :
server
@WildWezt: whats the duel discord name
Nicot1ne :
https://discord.gg/duel
WildWezt :
whats the name
WildWezt :
this link doesnt work
WildWezt :
so i can manusally search on discord
Nicot1ne :
wdym it doesnt work
Nicot1ne :
literally works
WildWezt :
link doesnt work
WildWezt :
invalid
ISIDRO40 :
$1000 hu poker any1
wooliest :
Ban him lol
vkct78 :
.
ISIDRO40 :
$2000 poker any1
1,021 Online

Duel

Casino

Sports

Arena

Chat

IconSolana
IconMinesBomb
IconMinesDiamondBlue
IconMinesDiamondGreen
IconMinesExplosion
IconKenoGem

Forgot password?

or continue with
or continue with
  • United-Kingdom
    English
  • China
    汉语
  • Japan
    日本語
  • Korea,-South
    한국어
  • Thailand
    ภาษาไทย
  • Vietnam
    Tiếng Việt