Dice

Blackjack

Plinko

Crash

Mines

Beef

Keno

Castle Roulette

Video Poker

Groomer's Van

Rock Paper Scissors

Limbo

Live Blackjack

Casino
Sports
High Scores
1,034 Online
$2m monthly and $25k daily leaderboards now live for slots and live games.
$2m monthly and $25k daily leaderboards now live for slots and live games.
MaxMultis :
joking im broke
UlleSH :
that's rough
Zkurvenejzivot :
duel.com/#bet=1166053821
Zkurvenejzivot :
lol
@Zkurvenejzivot: duel.com/#bet=1166053821
heilputin :
w wtf
@Zkurvenejzivot: duel.com/#bet=1166053821
YaraYaraPhonkk :
haha nice
@Zkurvenejzivot: duel.com/#bet=1166053821
peanut :
waste
YaraYaraPhonkk :
4 square
@UlleSH: that's rough
MaxMultis :
yh
MaxMultis :
being homeless is hard
anal :
nah its good
anal :
u close with nature
@MaxMultis: being homeless is hard
UlleSH :
being limitted on sportsbetting is harder
Iduot :
im close with faggots
peanut :
anal how come these niggas are allowed to tip their alts $5 to wager then passive beg
Iduot :
somehow
peanut :
just banish them
@UlleSH: being limitted on sportsbetting is harder
MaxMultis :
u can ask support to up it
@anal: u close with nature
MaxMultis :
yea i ate dirt for dinner
peanut :
russia is at civil war
@MaxMultis: u can ask support to up it
UlleSH :
They did, now I can bet 500 usd on big markets. They raised it 3 times. Was down to 0.2 cents
@UlleSH: They did, now I can bet 500 usd on big markets. They raised it 3 times. Was down to 0.2 cents
peanut :
u got limited cos ur up bank
peanut :
just make a new fucking account u low iq retard
@UlleSH: They did, now I can bet 500 usd on big markets. They raised it 3 times. Was down to 0.2 cents
MaxMultis :
nice
astonmartin :
hi
@peanut: just make a new fucking account u low iq retard
UlleSH :
no
peanut :
stop moaning then if ur retarded
@astonmartin: hi
MaxMultis :
wsg aston
peanut :
fucking brain dead nigger
@UlleSH: no
MaxMultis :
fr fuck that tard yh
UlleSH :
they will raise it eventually :-))
peanut :
italy mogs all countries in the world
fathergraphics :
a
peanut :
meloni :3
peanut :
vaffanculo
@MaxMultis
@peanut: vaffanculo @MaxMultis
MaxMultis :
huh
peanut :
porco dio, cazzo, madonna
IOnlyPlayRobloxOk :
up 6k on sports how
Mamoduel34 :
We’ll crash just paid. $450 to 13,000
@Mamoduel34: We’ll crash just paid. $450 to 13,000
MaxMultis :
i saw gng
@Mamoduel34: We’ll crash just paid. $450 to 13,000
peanut :
wtf
anal :
tuff
@Mamoduel34: We’ll crash just paid. $450 to 13,000
loveandlust :
great job my mamo nigger
peanut :
ggs
@Mamoduel34: We’ll crash just paid. $450 to 13,000
heilputin :
all heil putin
@Mamoduel34: We’ll crash just paid. $450 to 13,000
YaraYaraPhonkk :
nice job
peanut :
yo this mamo nigga printing
GayASSemble :
mamo is larping
GayASSemble :
larp larp sahur
Iduot :
winning on crash is impossible btw
Iduot :
you gotta be duel employee
@Iduot: winning on crash is impossible btw
peanut :
yh
peanut :
its probably monarch
Mamoduel34 :
Did it last time with $250 lol
peanut :
but u can bet when monarch is betting
@Mamoduel34: Did it last time with $250 lol
MaxMultis :
mamo ur crash stats are crazy
peanut :
innit
@IOnlyPlayRobloxOk: up 6k on sports how
UlleSH :
easy life
@Mamoduel34: Did it last time with $250 lol
GayASSemble :
good job fam
anal :
laaa laaa wait till i get my money right
loveandlust :
w niggers in the chat
@Mamoduel34: Did it last time with $250 lol
donk_Bisaya :
enjoy
loveandlust :
i hate jews
loveandlust :
can we learn to love again
merrykirkmas :
g
loveandlust :
i crashed my mclaren m1
@merrykirkmas: g
loveandlust :
hey charlie kirk
loveandlust :
we are charlie kirk
@anal: laaa laaa wait till i get my money right
Iduot :
never
@Iduot: never
anal :
"Tutto passa" bro
rayquazaaaa :
.
loveandlust :
crash gna hit 100x soon
@anal: "Tutto passa" bro
Iduot :
whatever that means
Iduot :
n igger
anal :
wow
anal :
ur such a nigger
loveandlust :
mamo get out at 8x
Iduot :
yes call me that daddy
VRChat :
: )
VRChat :
Hi Chat
Iduot :
bye chat
loveandlust :
75x crash ggs
Ismokealotofweed :
duel.com/#bet=1166094618
Ismokealotofweed :
80$ bonus buy
anal :
mhm
@Ismokealotofweed: duel.com/#bet=1166094618
Shiro01 :
not bad
@Ismokealotofweed: duel.com/#bet=1166094618
Iduot :
smoke more weed
anal :
ohmygod my penis
anal :
its so thiiiick
Ismokealotofweed :
Puffing right now
anal :
@Iduot
jerk it for me
@anal: @Iduot jerk it for me
Iduot :
sure
Iduot :
omw
Chooma :
haram
@Ismokealotofweed: duel.com/#bet=1166094618
loveandlust :
ok
Iduot :
welcum chooma si
jewhater69 :
not halal
Iduot :
sir
tylerftx :
bro i lost 1.5k
jewhater69 :
same’
1,034 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 Blackjack card from a SHA-256 hash (hex string)
// Uses rejection sampling to ensure fair distribution across 52 possible cards
function generateBlackjackCard(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 = generateBlackjackCard(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 Blackjack card from a SHA-256 hash (hex string)
// Uses rejection sampling to ensure fair distribution across 52 possible cards
function generateBlackjackCard(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 = generateBlackjackCard(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
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,034 Online
$2m monthly and $25k daily leaderboards now live for slots and live games.
$2m monthly and $25k daily leaderboards now live for slots and live games.
MaxMultis :
joking im broke
UlleSH :
that's rough
Zkurvenejzivot :
duel.com/#bet=1166053821
Zkurvenejzivot :
lol
@Zkurvenejzivot: duel.com/#bet=1166053821
heilputin :
w wtf
@Zkurvenejzivot: duel.com/#bet=1166053821
YaraYaraPhonkk :
haha nice
@Zkurvenejzivot: duel.com/#bet=1166053821
peanut :
waste
YaraYaraPhonkk :
4 square
@UlleSH: that's rough
MaxMultis :
yh
MaxMultis :
being homeless is hard
anal :
nah its good
anal :
u close with nature
@MaxMultis: being homeless is hard
UlleSH :
being limitted on sportsbetting is harder
Iduot :
im close with faggots
peanut :
anal how come these niggas are allowed to tip their alts $5 to wager then passive beg
Iduot :
somehow
peanut :
just banish them
@UlleSH: being limitted on sportsbetting is harder
MaxMultis :
u can ask support to up it
@anal: u close with nature
MaxMultis :
yea i ate dirt for dinner
peanut :
russia is at civil war
@MaxMultis: u can ask support to up it
UlleSH :
They did, now I can bet 500 usd on big markets. They raised it 3 times. Was down to 0.2 cents
@UlleSH: They did, now I can bet 500 usd on big markets. They raised it 3 times. Was down to 0.2 cents
peanut :
u got limited cos ur up bank
peanut :
just make a new fucking account u low iq retard
@UlleSH: They did, now I can bet 500 usd on big markets. They raised it 3 times. Was down to 0.2 cents
MaxMultis :
nice
astonmartin :
hi
@peanut: just make a new fucking account u low iq retard
UlleSH :
no
peanut :
stop moaning then if ur retarded
@astonmartin: hi
MaxMultis :
wsg aston
peanut :
fucking brain dead nigger
@UlleSH: no
MaxMultis :
fr fuck that tard yh
UlleSH :
they will raise it eventually :-))
peanut :
italy mogs all countries in the world
fathergraphics :
a
peanut :
meloni :3
peanut :
vaffanculo
@MaxMultis
@peanut: vaffanculo @MaxMultis
MaxMultis :
huh
peanut :
porco dio, cazzo, madonna
IOnlyPlayRobloxOk :
up 6k on sports how
Mamoduel34 :
We’ll crash just paid. $450 to 13,000
@Mamoduel34: We’ll crash just paid. $450 to 13,000
MaxMultis :
i saw gng
@Mamoduel34: We’ll crash just paid. $450 to 13,000
peanut :
wtf
anal :
tuff
@Mamoduel34: We’ll crash just paid. $450 to 13,000
loveandlust :
great job my mamo nigger
peanut :
ggs
@Mamoduel34: We’ll crash just paid. $450 to 13,000
heilputin :
all heil putin
@Mamoduel34: We’ll crash just paid. $450 to 13,000
YaraYaraPhonkk :
nice job
peanut :
yo this mamo nigga printing
GayASSemble :
mamo is larping
GayASSemble :
larp larp sahur
Iduot :
winning on crash is impossible btw
Iduot :
you gotta be duel employee
@Iduot: winning on crash is impossible btw
peanut :
yh
peanut :
its probably monarch
Mamoduel34 :
Did it last time with $250 lol
peanut :
but u can bet when monarch is betting
@Mamoduel34: Did it last time with $250 lol
MaxMultis :
mamo ur crash stats are crazy
peanut :
innit
@IOnlyPlayRobloxOk: up 6k on sports how
UlleSH :
easy life
@Mamoduel34: Did it last time with $250 lol
GayASSemble :
good job fam
anal :
laaa laaa wait till i get my money right
loveandlust :
w niggers in the chat
@Mamoduel34: Did it last time with $250 lol
donk_Bisaya :
enjoy
loveandlust :
i hate jews
loveandlust :
can we learn to love again
merrykirkmas :
g
loveandlust :
i crashed my mclaren m1
@merrykirkmas: g
loveandlust :
hey charlie kirk
loveandlust :
we are charlie kirk
@anal: laaa laaa wait till i get my money right
Iduot :
never
@Iduot: never
anal :
"Tutto passa" bro
rayquazaaaa :
.
loveandlust :
crash gna hit 100x soon
@anal: "Tutto passa" bro
Iduot :
whatever that means
Iduot :
n igger
anal :
wow
anal :
ur such a nigger
loveandlust :
mamo get out at 8x
Iduot :
yes call me that daddy
VRChat :
: )
VRChat :
Hi Chat
Iduot :
bye chat
loveandlust :
75x crash ggs
Ismokealotofweed :
duel.com/#bet=1166094618
Ismokealotofweed :
80$ bonus buy
anal :
mhm
@Ismokealotofweed: duel.com/#bet=1166094618
Shiro01 :
not bad
@Ismokealotofweed: duel.com/#bet=1166094618
Iduot :
smoke more weed
anal :
ohmygod my penis
anal :
its so thiiiick
Ismokealotofweed :
Puffing right now
anal :
@Iduot
jerk it for me
@anal: @Iduot jerk it for me
Iduot :
sure
Iduot :
omw
Chooma :
haram
@Ismokealotofweed: duel.com/#bet=1166094618
loveandlust :
ok
Iduot :
welcum chooma si
jewhater69 :
not halal
Iduot :
sir
tylerftx :
bro i lost 1.5k
jewhater69 :
same’
1,034 Online

Duel

Casino

Sports

Chat

IconSolana
IconMinesBomb
IconMinesDiamondBlue
IconMinesDiamondGreen
IconMinesExplosion
IconKenoGem

Forgot password?

or continue with

Duel is not available in your current location due to licensing limitations.

or continue with