Pages:
Author

Topic: Provably Fair Online Poker by Dabs (Beta Test 1) (Read 5902 times)

legendary
Activity: 3416
Merit: 1912
The Concierge of Crypto
5 months later, and I just want to bump this. Smiley And I still have the dealer seeds.
legendary
Activity: 3416
Merit: 1912
The Concierge of Crypto
Address: 1PokerUdZ36KMsg7rmp1ruAiufVT2jAFpf
Buy-in: 0.01 BTC
Small Blind / Big Blind = 0.001 / 0.002
Game: No Limit (Table Limit) Texas Hold'em

Seat #4 = gektek,

Pick a seat from 1 to 5. #1 is the first dealer button. But it will eventually rotate around, so it doesn't matter in the long run. (Although, with a 10 BB buy-in, the game might be over after 2 or 3 hands.)
b!z
legendary
Activity: 1582
Merit: 1010
@b!z, ok great! Pick a seat. From 1 to 6. I'm making this 6 max. Play starts when there are at least 3.

Small Blind / Big Blind = 0.001 / 0.002 and the Buy-in is only 0.01. No Limit Hold'em. Send your BTC to the 1Poker address somewhere in this thread. I'll hold on to it until you "stand up" and leave or everyone else lost.

Seat #4 = gektek

The others are still "watching".


Ok, I'll take a seat. What's the address? And what game is it? texas holdem?
legendary
Activity: 3416
Merit: 1912
The Concierge of Crypto
Well, the dealer can't play his own game. Obviously. Instead of rake, I'm going to call it a mandatory donation... heheheh.
legendary
Activity: 1176
Merit: 1005
Incidentally, a game in which every provably fair dealer was also a player would avoid a lot of legal issues, especially in the U.S., where the primary illegality of an "illegal gambling operation" is some business collecting a rake.  With no rake and players playing with each other fairly, especially when it's provable, there is no crime in most jurisdictions.

Sorry I haven't participated in the games to date, but I'd hate causing delays.
legendary
Activity: 3416
Merit: 1912
The Concierge of Crypto
Whats that dealer supposed to do if he doesn't know the cards he is dealing? Doesn't make sense to me. The dealer's job in a real card room is to deal, shuffle, take bets, enforce the rules, save your chips in case you stand up, get you more chips (thru a runner) if you run out.

It should be easier in a P2P setting where all he has to do is run a dealer program.
full member
Activity: 209
Merit: 100
Keep up the good work Dabs - I will sit at your tables at some point!

One more thought (naive thoughts as I am not too up to date on the concepts) - could multiple dealers be used somehow in a p2p scheme? Ie cards are shared between multiple dealers, with another dealer managing payouts and coordinating player actions? One dealer would therefore not know all the cards at any given time, which would make collusion more difficult, unless you happened to get dealers from the same crooked dealer pool on the same table? There would have to be some redundancy however, in case a dealer holding keys to a few cards went offline during a hand.
legendary
Activity: 3416
Merit: 1912
The Concierge of Crypto
@zachscope, the issue with heads up, is, uh, it's just the two of you. I guess you get rid of collusion there, but it's more fun in a ring game or 1 table tournament where there are two blinds, sometimes an ante, and 9 others contribute to the pot.

I am to set up something similar to what you describe, and I'll be one of the first "dealers".

There is that elusive "Mental Poker" but in my opinion too difficult to implement, and not something I would be willing to play if disconnects cause the deck to reshuffle (the disconnected player's cards go back to the deck.) It doesn't feel right to me.

The way I have it set now, you can clearly see where all the cards are. You just don't know what they are.
full member
Activity: 237
Merit: 100
I rave ... whats your excuse?!?
Here's the address:
https://blockchain.info/address/1PokerUdZ36KMsg7rmp1ruAiufVT2jAFpf

And no one has bought in yet. hehehe..

Sry...just got myself moved to a new place. Hoping to be organized later today or tomorrow...
full member
Activity: 209
Merit: 100
Just found this thread from my thread re the correspondance poker.
Unfortunately I'm not motivated enough to play your manual provably fair game but would eventually be interested in the outcomes from this.
Note heads up play is the easiest way to prevent collusion over time and removes a significant problem with anonymous online poker.

With regards to decentralised poker, would it be possible to have a P2P poker network where players can become 'anonymous dealers'. They basically hold some of the secret keys etc through the hand and reveal them at the end. They would hold the bitcoin balances for the tables but perhaps post an escrow in case their server went down during a hand / match . There could be a trust system built in so that players can rate the dealers. Over time and over many hands (ie a dealer would provie resources for many tables at a time) open player result stats might show crooked dealers who might also be communicating with crooked players. Each dealer could charge their own rake so that high trust might lead to higher rake, or more tables allowed, or higher stakes. 
As the dealer identity is a public key the 'dealer' servers/computer could move location or site if jurisdiction issues arise, with an inbuilt incentive to build up dealer trust. Perhaps player 'trust' could be built in so that suspicion of collusion or playing too much on dodgy dealers would become a flag in itself.

Perhaps this would work - my understanding is that there is no fully trustless poker possible so far for p2p poker without some kind of dealer function- or am I incorrect?
legendary
Activity: 3416
Merit: 1912
The Concierge of Crypto
Here's the address:
https://blockchain.info/address/1PokerUdZ36KMsg7rmp1ruAiufVT2jAFpf

And no one has bought in yet. hehehe..
legendary
Activity: 3416
Merit: 1912
The Concierge of Crypto
Code:
H:\stuff-01\dabs-sha-512>cardstat.EXE
Ac: 19415 1.94150%  Expected:19230.77  1.92308%
2c: 19374 1.93740%  Expected:19230.77  1.92308%
3c: 19269 1.92690%  Expected:19230.77  1.92308%
4c: 19136 1.91360%  Expected:19230.77  1.92308%
5c: 19419 1.94190%  Expected:19230.77  1.92308%
6c: 19082 1.90820%  Expected:19230.77  1.92308%
7c: 19048 1.90480%  Expected:19230.77  1.92308%
8c: 19359 1.93590%  Expected:19230.77  1.92308%
9c: 19234 1.92340%  Expected:19230.77  1.92308%
Tc: 19038 1.90380%  Expected:19230.77  1.92308%
Jc: 19338 1.93380%  Expected:19230.77  1.92308%
Qc: 19160 1.91600%  Expected:19230.77  1.92308%
Kc: 19450 1.94500%  Expected:19230.77  1.92308%
Ad: 19272 1.92720%  Expected:19230.77  1.92308%
2d: 19040 1.90400%  Expected:19230.77  1.92308%
3d: 19225 1.92250%  Expected:19230.77  1.92308%
4d: 18930 1.89300%  Expected:19230.77  1.92308%
5d: 19026 1.90260%  Expected:19230.77  1.92308%
6d: 19273 1.92730%  Expected:19230.77  1.92308%
7d: 19325 1.93250%  Expected:19230.77  1.92308%
8d: 19337 1.93370%  Expected:19230.77  1.92308%
9d: 19536 1.95360%  Expected:19230.77  1.92308%
Td: 19146 1.91460%  Expected:19230.77  1.92308%
Jd: 19292 1.92920%  Expected:19230.77  1.92308%
Qd: 19019 1.90190%  Expected:19230.77  1.92308%
Kd: 19415 1.94150%  Expected:19230.77  1.92308%
Ah: 19177 1.91770%  Expected:19230.77  1.92308%
2h: 19265 1.92650%  Expected:19230.77  1.92308%
3h: 19213 1.92130%  Expected:19230.77  1.92308%
4h: 18991 1.89910%  Expected:19230.77  1.92308%
5h: 19357 1.93570%  Expected:19230.77  1.92308%
6h: 19331 1.93310%  Expected:19230.77  1.92308%
7h: 19317 1.93170%  Expected:19230.77  1.92308%
8h: 19159 1.91590%  Expected:19230.77  1.92308%
9h: 19391 1.93910%  Expected:19230.77  1.92308%
Th: 19246 1.92460%  Expected:19230.77  1.92308%
Jh: 19125 1.91250%  Expected:19230.77  1.92308%
Qh: 19016 1.90160%  Expected:19230.77  1.92308%
Kh: 19335 1.93350%  Expected:19230.77  1.92308%
As: 19230 1.92300%  Expected:19230.77  1.92308%
2s: 19254 1.92540%  Expected:19230.77  1.92308%
3s: 19193 1.91930%  Expected:19230.77  1.92308%
4s: 19113 1.91130%  Expected:19230.77  1.92308%
5s: 19318 1.93180%  Expected:19230.77  1.92308%
6s: 19052 1.90520%  Expected:19230.77  1.92308%
7s: 19093 1.90930%  Expected:19230.77  1.92308%
8s: 19336 1.93360%  Expected:19230.77  1.92308%
9s: 19155 1.91550%  Expected:19230.77  1.92308%
Ts: 19310 1.93100%  Expected:19230.77  1.92308%
Js: 19071 1.90710%  Expected:19230.77  1.92308%
Qs: 19398 1.93980%  Expected:19230.77  1.92308%
Ks: 19396 1.93960%  Expected:19230.77  1.92308%
Decks : 1000000
 2772.909 seconds

45 Minutes just to tally a million cards from a million decks.

@b!z, ok great! Pick a seat. From 1 to 6. I'm making this 6 max. Play starts when there are at least 3.

Small Blind / Big Blind = 0.001 / 0.002 and the Buy-in is only 0.01. No Limit Hold'em. Send your BTC to the 1Poker address somewhere in this thread. I'll hold on to it until you "stand up" and leave or everyone else lost.

Seat #4 = gektek

The others are still "watching".
b!z
legendary
Activity: 1582
Merit: 1010
I'll be one of your first players :-)
hero member
Activity: 640
Merit: 771
BTC⇆⚡⇄BTC
I'm bored. Where are my players?



Ok, I grabbed a table from one of them games, then did some photo shop work on it.

Hey Dabs!

If you succeed in order to automate that provably fair Poker game, I volunteer to be your partner when the game's site is set up!  Cool

I'll try to find some place (garage) for us at Silicon Valley (some parties and some hot chicks too)!  Wink

BTW, this experiment is getting more interesting each day it evolves.

Congrats!

Cheers!
legendary
Activity: 3416
Merit: 1912
The Concierge of Crypto
Code:
Decks: 500000 41313.896 seconds

H:\stuff-01\dabs-sha-512>cardstat.EXE
Ac: 9701 1.94020%  Expected: 9615.38  1.92308%
2c: 9736 1.94720%  Expected: 9615.38  1.92308%
3c: 9643 1.92860%  Expected: 9615.38  1.92308%
4c: 9556 1.91120%  Expected: 9615.38  1.92308%
5c: 9743 1.94860%  Expected: 9615.38  1.92308%
6c: 9548 1.90960%  Expected: 9615.38  1.92308%
7c: 9522 1.90440%  Expected: 9615.38  1.92308%
8c: 9731 1.94620%  Expected: 9615.38  1.92308%
9c: 9642 1.92840%  Expected: 9615.38  1.92308%
Tc: 9555 1.91100%  Expected: 9615.38  1.92308%
Jc: 9554 1.91080%  Expected: 9615.38  1.92308%
Qc: 9623 1.92460%  Expected: 9615.38  1.92308%
Kc: 9661 1.93220%  Expected: 9615.38  1.92308%
Ad: 9585 1.91700%  Expected: 9615.38  1.92308%
2d: 9472 1.89440%  Expected: 9615.38  1.92308%
3d: 9579 1.91580%  Expected: 9615.38  1.92308%
4d: 9558 1.91160%  Expected: 9615.38  1.92308%
5d: 9617 1.92340%  Expected: 9615.38  1.92308%
6d: 9769 1.95380%  Expected: 9615.38  1.92308%
7d: 9669 1.93380%  Expected: 9615.38  1.92308%
8d: 9664 1.93280%  Expected: 9615.38  1.92308%
9d: 9826 1.96520%  Expected: 9615.38  1.92308%
Td: 9551 1.91020%  Expected: 9615.38  1.92308%
Jd: 9656 1.93120%  Expected: 9615.38  1.92308%
Qd: 9540 1.90800%  Expected: 9615.38  1.92308%
Kd: 9745 1.94900%  Expected: 9615.38  1.92308%
Ah: 9530 1.90600%  Expected: 9615.38  1.92308%
2h: 9543 1.90860%  Expected: 9615.38  1.92308%
3h: 9498 1.89960%  Expected: 9615.38  1.92308%
4h: 9484 1.89680%  Expected: 9615.38  1.92308%
5h: 9697 1.93940%  Expected: 9615.38  1.92308%
6h: 9615 1.92300%  Expected: 9615.38  1.92308%
7h: 9788 1.95760%  Expected: 9615.38  1.92308%
8h: 9480 1.89600%  Expected: 9615.38  1.92308%
9h: 9609 1.92180%  Expected: 9615.38  1.92308%
Th: 9617 1.92340%  Expected: 9615.38  1.92308%
Jh: 9550 1.91000%  Expected: 9615.38  1.92308%
Qh: 9410 1.88200%  Expected: 9615.38  1.92308%
Kh: 9619 1.92380%  Expected: 9615.38  1.92308%
As: 9574 1.91480%  Expected: 9615.38  1.92308%
2s: 9663 1.93260%  Expected: 9615.38  1.92308%
3s: 9596 1.91920%  Expected: 9615.38  1.92308%
4s: 9505 1.90100%  Expected: 9615.38  1.92308%
5s: 9690 1.93800%  Expected: 9615.38  1.92308%
6s: 9577 1.91540%  Expected: 9615.38  1.92308%
7s: 9573 1.91460%  Expected: 9615.38  1.92308%
8s: 9662 1.93240%  Expected: 9615.38  1.92308%
9s: 9538 1.90760%  Expected: 9615.38  1.92308%
Ts: 9711 1.94220%  Expected: 9615.38  1.92308%
Js: 9610 1.92200%  Expected: 9615.38  1.92308%
Qs: 9650 1.93000%  Expected: 9615.38  1.92308%
Ks: 9765 1.95300%  Expected: 9615.38  1.92308%
Decks : 500000
 652.190999999999 seconds

It took less than eleven and a half hours to generate and shuffle half a million decks.
It took almost 11 minutes to tally the numbers.
legendary
Activity: 3416
Merit: 1912
The Concierge of Crypto
H:\stuff-01\dabs-sha-512>cardstat.EXE
Ac: 2552 1.98414%  Expected: 2473.46  1.92308%
2c: 2445 1.90095%  Expected: 2473.46  1.92308%
3c: 2489 1.93516%  Expected: 2473.46  1.92308%
4c: 2440 1.89706%  Expected: 2473.46  1.92308%
5c: 2549 1.98181%  Expected: 2473.46  1.92308%
6c: 2434 1.89240%  Expected: 2473.46  1.92308%
7c: 2485 1.93205%  Expected: 2473.46  1.92308%
8c: 2469 1.91961%  Expected: 2473.46  1.92308%
9c: 2406 1.87063%  Expected: 2473.46  1.92308%
Tc: 2485 1.93205%  Expected: 2473.46  1.92308%
Jc: 2427 1.88695%  Expected: 2473.46  1.92308%
Qc: 2389 1.85741%  Expected: 2473.46  1.92308%
Kc: 2544 1.97792%  Expected: 2473.46  1.92308%
Ad: 2461 1.91339%  Expected: 2473.46  1.92308%
2d: 2607 2.02690%  Expected: 2473.46  1.92308%
3d: 2478 1.92661%  Expected: 2473.46  1.92308%
4d: 2453 1.90717%  Expected: 2473.46  1.92308%
5d: 2521 1.96004%  Expected: 2473.46  1.92308%
6d: 2461 1.91339%  Expected: 2473.46  1.92308%
7d: 2438 1.89551%  Expected: 2473.46  1.92308%
8d: 2469 1.91961%  Expected: 2473.46  1.92308%
9d: 2430 1.88929%  Expected: 2473.46  1.92308%
Td: 2366 1.83953%  Expected: 2473.46  1.92308%
Jd: 2413 1.87607%  Expected: 2473.46  1.92308%
Qd: 2349 1.82631%  Expected: 2473.46  1.92308%
Kd: 2544 1.97792%  Expected: 2473.46  1.92308%
Ah: 2548 1.98103%  Expected: 2473.46  1.92308%
2h: 2480 1.92816%  Expected: 2473.46  1.92308%
3h: 2429 1.88851%  Expected: 2473.46  1.92308%
4h: 2581 2.00669%  Expected: 2473.46  1.92308%
5h: 2541 1.97559%  Expected: 2473.46  1.92308%
6h: 2346 1.82398%  Expected: 2473.46  1.92308%
7h: 2567 1.99580%  Expected: 2473.46  1.92308%
8h: 2500 1.94371%  Expected: 2473.46  1.92308%
9h: 2470 1.92039%  Expected: 2473.46  1.92308%
Th: 2523 1.96159%  Expected: 2473.46  1.92308%
Jh: 2421 1.88229%  Expected: 2473.46  1.92308%
Qh: 2403 1.86829%  Expected: 2473.46  1.92308%
Kh: 2598 2.01990%  Expected: 2473.46  1.92308%
As: 2509 1.95071%  Expected: 2473.46  1.92308%
2s: 2522 1.96081%  Expected: 2473.46  1.92308%
3s: 2506 1.94838%  Expected: 2473.46  1.92308%
4s: 2473 1.92272%  Expected: 2473.46  1.92308%
5s: 2429 1.88851%  Expected: 2473.46  1.92308%
6s: 2417 1.87918%  Expected: 2473.46  1.92308%
7s: 2494 1.93905%  Expected: 2473.46  1.92308%
8s: 2416 1.87840%  Expected: 2473.46  1.92308%
9s: 2423 1.88384%  Expected: 2473.46  1.92308%
Ts: 2454 1.90795%  Expected: 2473.46  1.92308%
Js: 2546 1.97947%  Expected: 2473.46  1.92308%
Qs: 2401 1.86674%  Expected: 2473.46  1.92308%
Ks: 2519 1.95848%  Expected: 2473.46  1.92308%
Decks : 128620
 7.54599999999482 seconds


I took about 2 hours to generate 128620 decks, shuffle it, then grab the top card, put it in a file. Then it took about 7.5 seconds to count the cards from a file. I'll make it run some more and see what I get. Going for half a million decks.
legendary
Activity: 3416
Merit: 1912
The Concierge of Crypto
I'm doing a test run of SHA-512 hashing of at least 100,000 decks of 52 cards, sorting them, and only keeping the low hash card (the top of the deck). This is prior to any player cuts or shuffles. Then I'm going to take this data and do a frequency analysis of the card ranks and suits.

It takes my slow laptop about 1 second to create 10 shuffled decks. While not very accurate, as it uses a different RNG for the card secrets, it should be representative of what it will spit out whenever I get this online or on a server.

It is slow though. If I have 30 tables, it will take 30 seconds to shuffle their decks. Maybe you won't notice it right before the next hand, if it's only your table that needs a new deck. Maybe I should store the pre-shuffled decks in some file or database and have the server pull it from there. Sort of like the random entropy pool in most computer systems.

Anyway, I'll let my deck generator run for about an hour and use that. Later on if I have time, I'll make it run overnight so I get a million decks.
legendary
Activity: 3416
Merit: 1912
The Concierge of Crypto
And, ... I dunno, but this is taking longer than expected. Anyway, I've had time to think about further improvements to the poker protocol. These include using HMAC instead of just the regular hash functions. Although I don't see how this particular implementation can get affected by length or prefix attacks, using HMAC isn't that much more difficult to do.

I found some 3rd party sites that you can use to check but this one seems to use javascript:
http://myeasywww.appspot.com/easyweb?command=UTILITY&ID=2

And if you'd like, you can even use this http://code.google.com/p/crypto-js

Here is a summary of future changes, which, if I figure it out before people start playing, I might as well implement.

1. HMAC-SHA-512
2. Usage of 2 or more decks
3. Usage of 2 or more card secrets

So for example, the 4 of Hearts can be hashed as follows:

hmac-sha-512 ("cardsecret", "4h") =
8a0791801b9c656dc8f6eb842d4942128a6cdc32dda6d09e0a33c42cfd091c84e33df8014793ec5 562f0b8a1110c2d9ef52666f0a5d2daefeca6cbfa2e2041fe

Getting overkill huh? I could stick to just to SHA-1 while it's undergoing testing so I don't use too much string space.

hmac-sha-1 ("cardsecret", "4h") = 6e122d2b3414aad5cd09bf1ffd77358f0ea4c1e0

hmac-sha-1 is not considered broken, as in fact currently used in Google Authenticator. And if used in this manner, I'll add in either a salt, or concatenate the dealer secret inside the "message". Or use the dealer secret as the key and the card + card secret as the message. Either way, it goes towards making this Provably Fair.
legendary
Activity: 3416
Merit: 1912
The Concierge of Crypto
I was just thinking about how to prove that cards and decks can be almost provably fair without you ever seeing the deck that is used. One suggested method is to shuffle and prepare more than 1 deck of 52 cards. Then allow players to choose 1 deck to use, the rest are exposed or revealed.

That way, players can see that, if the site or dealer wanted to stack the deck or cheat or whatever.

For example, I use 2 decks of cards. I will reveal one deck at random, not at my choosing. The players choose or some provably fair method of determining this is used, such as hashes etc. That leaves one secret deck to be used for the actual game. Everyone now can see the other deck, and see that it is fairly shuffled and has 52 unique cards of the standard deck.

Do this for every hand, and there is a 50% chance that any unfairly shuffled decks or stacked or duplicated or cheated decks will be discovered at every hand.

Extend it to 4 decks. 3 decks are revealed. 75% chance of discovering the stacked deck. 75% certain the remaining deck is fair.
Extend it to 8 decks. 7 decks are revealed. 87.5%

If we use 128 decks, 127 of which are revealed to be fair, we have more than 99% certainty that the remaining deck must be fair.

However, all this takes computing power and time if I were to use so many decks (someone suggested 65535 / 65536 decks for 99.99847412%
.) Using just 2 should be enough, since I can not guess which deck will be used, therefore both decks have to be fair. If I were cheating or stacking the deck, I'd be found out half the time.

*edit* Of course decks can be uniquely identified. I will use a common secret for the same cards of the same deck, or a deck secret.

This can't be implemented now, unless I reset the whole game. I can do it for the next hand, although that might be too much work (this can be easy to implement in a proper client/server/website.)
legendary
Activity: 3416
Merit: 1912
The Concierge of Crypto
Yeah, how can you complain when I just fire up my mobile poker app, and I see
Quote
Dealer: Dabs it's your turn, you have 8 seconds to act.

But I've tried about 4 or 5 online poker rooms, they're all that fast.

So when I say this is just a test, and the buy in is only 10 BB (Big Blinds)... Think of it as almost a cash game, or a mini 3 or 4 player Sit n Go winner take all or whatever you have left when you decide to leave.

I just need 3 or 4 people to participate in this experiment, and hopefully more than once.

Also, I'm changing the buy-in / blind structure.

Quote
4. Buy-in 0.01 BTC. Big Blind 0.001, Small Blind 0.0005. No Limit.

Will become:

Small Blind / Big Blind = 0.001 / 0.002 and the Buy-in is only 0.01. No Limit. Don't buy in again, (not for now). That effectively limits this to 1 or 2 hands or maybe even 3. This is an experiment after all.

However, if majority of the players prefer a lower stake game, I can adjust it, to say 0.0002 / 0.0004. I don't want to run this for more than a month, or for more than 10 hands.
Pages:
Jump to: