Contents

A Relevant History of Mental Poker
A Relevant Overview of Mental Poker Implementations
Extending the Philosophy of Lightning Channels to Mental/P2P Poker
Solving Implementation Problems of Mental Poker via Lightning Channels
A Possible Solution to Habitual Renegers
A Possible Mental Poker Implementation Rough Thoughts
Two Possibly Useful Thoughts for the Implementation of Mental Poker

Here we can return to the understanding that money has the practical value of creating games for traders.  These are games with transferable utility, but if the money were not available, the game of the traders would be a game without transferable utility and thus naturally a game with less efficiency with regards ot the possibilities for the participants to maximize their combined gains.~Ideal Money


A General Summary for John Nash’s Proposal: Ideal Money

How John Nash Solved the Impossible Trinity
The Totality of the Proposal: Ideal Money
“The Special Commodity or Medium We Call Money…”
Ideal Money and Its’ Relation to Bitcoin
Hayek’s Incredible Machine
The (Relevant) History of Money and Economics
How to ‘Complete a Kula Ring’
How the Pyramids WEREN’T Built 
Futures the Markets Can’t Foresee
The Search for a Sound Basis for Money
Bridging Game Theory With The Euro/Greece Crisis
Problems with Implementing Bitcoin as a Solution to the Greece Crisis: How do Currencies Arise and/or Become Adopted
How to Effectively Solve Unsolvable Problems

Effectively Solving Collusion
What does “Ju-Jitsu” mean?

“Nash, Szabo, Smith teach us economics is the study of natural evolution in relation to the unfolding of our cosmos and our existence within it…”

The Future Model For Poker Sites
Decentralized Server-less Poker

Letting Habitual Depositors Own the Poker Network
The Levation of “Ideal Money”
Perhaps ‘Stability and Consensus’ is “Ideal”?
Bitcoin and Coffee

The History of Money and Playing Cards in “Canada”
HU vs Sauce
EZ Pass, Roads, Decisions, Game Theory, and Money
Money and Mental Illness
There is No Such Thing as a Bluff in Poker
The Credible Bluff
RE: Coaching
On the Future of Language
Note (Wholeness and Language)
Twoplustwo Player’s Forum and Sanity Re: Pokersites under attack?
Gresham’s Law, and Honest, Stable, Good Money

Featured: From Colonial Lotteries to Satoshi Dice: The 4th and 5th Wave of Gambling is Upon Us

“In a free society nobody can become a monopolist or a dictator the system itself, the free market will destroy you.
…Nobody in a free society, now we are talking about a free market, in which the government doesn’t interfere, nobody can become a monopolist.  All monopolies are created by a special privilege for government.” ~Ayn Rand
the wealth of chips wordle

***Note: To the Players of 2 + 2 Community***

Rise of the Bots: Comments on “Pokereum: An Efficient Smart Contract Dependent Decentralized Poker Platform”
Shinichi and the Dimensional Paradox
Did Adam Smith Need “Re-Vision”?
Multiple Cryptographers Interested in Ideal Money and Baskets of Commodities
On Adding Antes to Existing Fields/Structures
An Inquiry into Gambling Addiction
Example/Case Study of Smart Contracts: Playshares
Greece and 7 reform proposals (letter to Euro Group): Highlighting the Significance and Relevance of iGaming and iPoker
Another Possible (Fundamental) Formalization of “An Inquiry into the Nature and Causes of the Wealth of Nations”

4th wave gambling wordle

The Two Most Important Threads On Two Plus Two are Locked!!!
PokerStars/2+2 Meeting Oct 15-17 2014:  A Thread Every 2 + 2er Should Read

F.A.Q’S

Intro

Welcome to The Wealth Of Chips: Introduction
The Coming Poker Revolution
What is “Ideal Poker”? What is “Asymptotically Ideal Poker?”
Notes/explanation of Ideal Poker and Asymptotically Ideal Poker

Ideal Poker

ideal poker wordle

Ideal Poker
Ideal Rake: “How do `raked poker’ and `rakeless poker’ differ”
Esoteric Notes: Ideal Rake
EV as a “utility”: the Global Rake Standard
Example/explanation of Ideal Poker
The Problem of Measuring Effective Rake

Asymptotically Ideal Poker

naj coin wordle

Asymptotically Ideal Poker
The “Achilles’ heel” of the Centralized Poker Industry
Poker Forum Coin
Naz Coin
The Intrinsic Value of “Effective Rake”Coin
Creating Assets as Single Unique Identifiers for Decentralized Poker
Poker Chips 2.0: Digital Assets

Decentralized Poker

decentralized poker

Strike Committee: A Players Union
Decentralized Autonomous Poker
Poker as a micro kernal DAO
Quick Note on Collusion and Third Party Trust
Mental poker protocol, rough sketch outline
Decentralized Mental Poker
Maintaining the BitFrog Network: Free market and Negative Rake
A rough example of the value of “smart contracts” and the value of bitcoin as an investment option in relation to poker
Generalizing Satoshi’s Pdf for the application of decentralized poker
Poker’s decentralized protocol (solution to poker’s Byzantine general problem)
The Missing Link to Decentralized Poker (RIO’s inherited issue)
On the Hidden Value of Decentralized Poker
Why a Decentralized Poker Bankroll is More Stable Than Keeping Your Money on any Centralized Site, on any Island, or in any Type of Fiat Currency.

Poker

Though the principles of the banking trade may appear somewhat abstruse, the practice is capable of being reduced to strict rules. To depart upon any occasion from these rules, in consequence of some flattering speculation of extraordinary gain, is almost always extremely dangerous, and frequently fatal to the banking company which attempts it.
Chapter I, Part III, p. 820. ~Adam Smith TWON

poker wordle

A Brief History of Poker
Moral Poker
Cooperative Poker: a Moral Extension
Case study: Staking Dispute
Meta Game and Mixing Strategies
Game Theory Exercise: Sitting out to Protest, “What is Optimal?”
Global Player Pool Vs Monopoly and Regulatory Controls: HU4Rollz
Josem, the Players are Not Happy with Thee
Red Wednesday: Remember, Remember; the 5th of November
Pokers’ Problem, and its Solution
Don’t ever say to me “Don’t tap on the glass”
What collusion REALLY is and so what its solution REALLY is
Poker’s staking foundation
Poker players constitution
B – ratio
Why Mt Gox Scandal is Comparable to Online Poker’s Black Frida
Poker Journalism and Creative Education
The Importance of Poker and the Freedom to Gamble in Society
Overview of history of Gambling in the US 
Did Poker Stars and Isai Know of the Coming Crypto Revolution?
Observations on 180 Man Turbo MTTSNG Variance: Comparing 2013 with 2014 Leaderboards
Poker Refugees is The Future of Poker
Bitnplay: The Beginning of the Asymptotic Decline of the Centralized Poker Site Model
The Psychology of a “Poker Player”
The Global State of Online Poker: Why Taxation and Regulation of Poker Sites is Not Feasible and Poker as an E-currency Network
The Importance of Relating Online Poker to an E-currency Network and Hidden Factor of Effective Rake

Rebuttals

DNegs rebuttal via Me
‘Dnegs’ Rebuttal
Michael Josem Rebuttal vs (Alleged) “Rationale” Behind PS changes via John Nash lecture and Ideal Poker
Customer Management: Poker Stars Rebuttal of Eric Hollresier (via Ideal Poker)
Re: Mason Malmuth on PokerStars Effective Rake and the Overall Poker Economy
Phil Galfond: consider “Ideal Poker”
Do Players Have a Right to Reasonable or Decreased Rake?-”The Players Right to Play Cooperative Poker”

Ideal Money

ideal money wordle

What is “Ideal Money?”
How Bitcoin Is and Isn’t Ideal Money
An Interesting Biography, an Interesting Blog, and an Interesting Lecture on ‘Ideal’ Money
Satoshi’s Choice: Decoding Bitcoin’s Money Supply

Other

To the Canadian senate committee for the regulation considerations of digital currency, and in specific regards to discussion and question period with Andreas Antonopoulos
Money 2.0
The Next Wave of “Enlightenment”
US Congressional Research Service on Bitcoin rebuttal via John Nash’s lecture Ideal Money

Links

Forum 2.0
Nick Szabo Blog

Definitions

Definition: Effective Rake
Definition: Ideal Poker

Future Research

future wordle

The Evolution and Purpose of the 52 Card Deck
The Effective Skilled Game Generator: Why Poker is Fun to Lose
The Future of Poker, Games, Game Theory, Rng Objects, and Other “Subjects”
The Generalization of a “Deck of Cards” (and in Relation to “Relatable” Games)
The Deconstruction of the History of Playing Cards
The Heart of AI: Minimum Dialog Protocols for Establishing Duck Duck Goose
Why Bots and Solving Poker Won’t Kill the Game
The (Best) Effective Random Number Generator

rabbithole wordle

Rabbit Hole

“…Shinichi Mochizuki uses inter-universal philosophy to extend our understanding of mathematics.”

Welcome to The Wealth Of Chips: Introduction

The Wealth of Chips: An esoteric key to “Ideal Poker” & “Ideal Money

Dear Reader (theWealthofChips):

The author and John Nash have been implicitly colluding for quite some time now, and we would like to extend our strategy to you. I realize that we are not used to helping each other and we usually react to change with avarice and fear. I do not believe I am being egotistical, nor am I particularly concerned with that, I enjoy the game and the wealth it brings us and I see an incredibly +ev opportunity with in our reach. The problem (to be solved) is that we have to work together cooperatively to achieve it.

For the last couple years I have been engaged in dialog with many members about the Nash Equilibrium and its true implications and ramifications. I have put out the argument (to great ridicule) that the true beauty and discovery of the NE was the peace it should bring about from cooperative efforts and strategies. We, especially as poker players, tend to think of NE in respect to war and war type games. But the man who created it, John Nash did not intend it for that, and it’s easier for me to publicly declare that, with the advent of Ideal money: http://sites.stat.psu.edu/~babu/nash/money.pdf Bitcoin: https://bitcoin.org/bitcoin.pdf and looking through various works of his on cooperative games, and notes on changing from non-cooperative to cooperative games.

We should be able to see a story here, a very well defined story, as well as we should be re writing our current story we have on both this man and the subjects which he has touched so far (he’s redefined them all). But I want to discuss something a lot more tangible, and something that is a lot harder to argue with. Now to be clear, I am not proposing something, nor am I trying to sway anyone’s mind. I simply want to point out what has already happened, and clarify it so that the players all know what has happened and what is going to happen with this game.

I should address one issue first, since it has already come up anyways and something I hadn’t realized in the past. 2 + 2 (why don’t we just make it 4?) generates ad revenue from the major sites. Although we can work within the rules of this forum, I would still like to suggest this is not ideal for both the players and the owners of this forum. I shouldn’t have to spend any time explaining that this gives stars a vote in the player’s public community forum, and it effects the way the forum is mod’d. We simply should all agree there is a non 0% of bias or privateness to this forum in this regard. And it’s probably not insignificant. So the topic I want to address must not depreciate the value of this site in that regard. I understand that, and I agree to it, therefore I wish to start out with the assumption, that we all value this site as both a studying and networking tool, and the monies used as a utility for the owners and benefiters to keep it running should remain. I morally agree with it, therefore the change I wish to discuss should affect the revenues in an equal or more +ev way.

I wish to pose a question to the community, and it’s going to seem strange at first but we should know that times have changed since Nash introduced bitcoin (I don’t care who believes me its obvious). This change is here, and I’m going to outline it, we simply must reinvent our paradigms on the game and on money and what that word means. We have already exposed a giant leak in every online poker company’s business plan. This leak is not pluggable, and it’s accessible to every single player. Also, I have been argued by almost every player here, that markets self-adjust and act naturally (with a force) to the conditions posed to them. This is an axiom we all agree with, we cannot then use it to suggest that the change bitcoin has brought to the game will not naturally affect the cost of exchanging money for chips.

Poker is no longer profitable for big industry. The reason is they charge too much for rake, while the rest of their business plan tries to create a breakeven environment for the players. It’s these two factors combined that have increased the cost to play poker dramatically over time. If we only look at rake % we might feel that things have remained equal, but like learning to read a hand range instead of a hand, we need to learn how to value our money in exchange for chips. Understanding this, every player should know and feel that they got screwed on black Friday by both the government AND the sites. As the field gets harder, players should expect that rake goes down. Otherwise the sites profit more per rec dollar spent over time. Furthermore since a business becomes more efficient over time, we expect the cost of running such a business to go down. So what is the excuse then for the players allowing for rake to rise dramatically (we are talking about a true rake, one that measures both the skill of the field and rake %)? We must admit to our own ignorance on the subject, and know that the markets will adjust their equilibrium in proportion to the amount of players that admit their faults to this.

It was Nash that made me realize and understand this as he points out if our governments can target inflation then they must have a system to target it with. The same can be said about poker, which is always the first target of his examples. The sites have a way of calculating how much rake they should charge. And this is how we know that they have been price gouging us (unless you can claim the game hasn’t gotten harder). We know it’s because of misconceived notions of what a Nash Equilibrium can and should be used for. We have been taught to fight amongst ourselves while we increasingly give up a higher % of rake as time goes by (the game isn’t getting easier in the future either). And we can understand that all sites have an increasing drive to make poker a breakeven/high raked environment.

But these days are over and rake is now on the asymptotic decrease. I want us to be aware of it and start to get the idea in our head. If you have studied this game for quite some time you must have realized by now it is not the game that you thought it was when you first started. Poker is very special like that and I know myself I have be redefining what poker is almost on a daily basis by now. I encourage any willing learners of the game to do the same and I would like you all to consider changing the way you view this game one more time. I know your first thought is a competitive one, but you might not know that nash has outlined (in ideal money), that when you change a game from competitive to cooperative then everyone stands to gain (+ev for all). This is a type of ev most of us have never considered and many have never heard of.

I want to put a few questions to the community, they are very big questions, but that should not in itself make it laughable. I should remind us at this point, we HAVE bitcoin NOW and the world has changed and it’s not going back I want to highlight what this change means with these questions as silly as the might seem.

How much would/should the player community pay for the poker stars software, knowing that as the markets slide to equilibrium, that the software as a business model is now essentially worthless?

Knowing that the players got screwed in terms of cost of exchange of money for chips since Black Friday, and knowing that stars model is not fixable by a private standpoint, what do we feel is an acceptable rake to be charging these days?

If we understand these questions we should be able to understand one that is slightly more slippery. How does the value of the software change in relation to player’s opinion on buying it? We expect a certain direct ratio in this respect, for example if a large majority of players decide the poker stars model is worthless to poker stars and they should buy it, then how much can poker stars convince the players to pay for it knowing its worthless to stars?

This leads to another question about the feasibility of the players creating their own ‘rakeless’ bitpoker site. A site running on bitcoin we must understand is not regulatable. In fact the more regulations against bitcoin governments impose, the more likely players are to use bitcoin and not convert their coin back to government issued tender. I hope you understand this, we have this now, it’s here we are just discussing the inevitable.

And then I guess (or maybe first) we should look at the amount of monies the players would keep in the game and the effects that might have on both the morality and integrity of the game. I don’t know if you understand me, Stars is dead, Nash killed it but the game of poker is very very thriving and we should expect poker to get easier as time goes by even though players are getting better and better. As we keep more and more money in the game, we all win more.

As for today, we should study our individual spots a little less, and spend at least SOME time looking for ev in terms of a reduced rake, as it Is far more +EV then plugging any individual leak one might have have. Because of this we should understand if you don’t reinvent your view on the game, you don’t like money, and the future players are going to crush you, trust me, I would know. I know I’m going to catch a lot of flak for this. But understand I am not claiming I did anything intelligent here, I am simply conveying a message from the master of games himself let’s not be too hard on the messenger. And let us appreciate this man for the wealth he’s brought into our lives again (and again).

Please browse around TWOC, ask questions, spread the word, and open your mind to the knowledge I channel towards us, Good Luck ALL!!!

~Author J.Smith

CypherPoker Lounge Contract

I think it’d be great if they turned to CypherPoker as a technology solution — the costs easily justify themselves as long as one is willing to move away from the centralized model. Exposure will be very important and having celebrity endorsement, of a sort, would go a long way.

No reason why they couldn’t run a hybrid either — do centralized until they’re comfortable with CypherPoker, then switch.~Patrick Bay

(Dialogue Collected Via Patrick Bay, this is Patrick Explaining his concept of the Lounge Contract)

Actually, I think that that contract I mentioned is absolutely necessary for version 2.0 (or VERY soon afterward).

I can point the compiled version to that as the default contract — here are all of the existing, CypherPoker-vetted smart contracts available for your discounted play (of course you may also publish your own contracts if you wish), and here’s a list of registered accounts and their ratings (but you’re free to play with anyone, of course).

The contract must be open source and anyone can modify their own, make changes, deploy on any network _freely_ (in any sense of the word).

This is why I broke CypherPoker up into the Lounge and GameEngine components. The Lounge can now take care of connecting to “Lounge” contracts (probably a better name in hindsight), which can point to hand contracts and provide lists/stats of registered players. The game client can very easily switch between Lounge contracts and it would be nice to be able to provide a way to join new ones easily.

If you wanted to run a Lounge contract, for example, you would control which hand contracts are considered kosher (allowed to interact with the Lounge for updating ratings), and you could also publish those hand contracts if you wanted to have full ownership.

And you set any fees that may be required for interacting with any pieces you own.

Some hand contracts could be made rentable so they can be shared between Lounges with variable splits of any fees.

And it won’t be hard to get started. I’m including the poker hand contract with the game client and it pretty much takes care of fully deploying it onto any network for you. A Lounge contract would be even easier to deploy, though you may have to update the parameters to your own specifications.

You could offer special features, tournaments, whatever … stuff like that shouldn’t be complicated to code.

But the contract would come prepared with basics like sign-up fees, insurance escrow collection at regular intervals, and of course easy registered account look-up.

Players could then enter the address of Lounge contracts to get access to the host’s entire range of offerings

Contracts can collect minuscule fees per hand. Contract owners can access those fees and with some extra coding those fees can be split in more complex ways (for example, owner gets access to 2/3 and Lounge owner gets 1/3).

I suspect that there may be minor rounding leftovers in certain situations so occasionally contracts will end up with extra value even when they don’t collect fees. It’s good for the contract’s owner to retain some control such as the ability to empty any non-accounted-for funds or destroy the contract altogether.

With P2P networking players are able to verify their presence online so the Lounge can be seen as providing the list of players to check for on the P2P the network. Players have full control over how this handled — they can be online and simply not respond (private mode), or they can respond and even flag themselves as being available for a game.

As part of my “are you there?” messages I would include my own stats (perhaps with all the Lounges I’m registered with), that anyone can easily verify, and can determine up front if they want to play me; how good should my up-to-down rating ratio be, what should the lifetime (number of ratings), be — is this even a reputable Lounge or do I not recognize its ratings?

Lounges would have their own reputations, mediated culturally beyond the blockchain.

The default CypherPoker Lounge would be the one that is accessed through the game software “out-of-the-box”, otherwise players are 100% free to sign-up with and use whatever Lounges they like.

If you strike up a friendship with another player, one of you can publish a private hand contract (no need for a Lounge), and be completely untethered to anything CypherPoker. The game client software can also be anything that’s capable of the P2P communication and Ethereum integration – I’m certain that a Node.js version that plays in the browser (without any plugins) is doable.

Hopefully some _official_ CypherPoker client can always something a little extra that people may be willing to pay for if they’re not satisfied with the free, open-source version. However, it needn’t be the only stream of revenue out of all the moving pieces that make CypherPoker tick.

The design is something I’m keeping very fluid. I’ve decided on a high-performance UI framework named Starling Feathers UI which, on top of being very skinnable, looks and moves very nicely. I’ve put in lots of code to handle as much of the styling from external XML data as possible so a designer can very easily update the config data and reload the game to see the results. Most of the UI is split into widgets which have their own independent functions, and widgets live in sliding panels.

Some of the wireframes are here: http://patrickbay.ca/blog/?p=1253

I’m only really making one client Lounge that’s fully skinnable.

There are containers for objects like widgets and they all do their own things in there. Object-Oriented Coding embraced :slightly_smiling_face:

I spent some time writing the translation system that takes the XML and converts it to the appropriate skins for various widget components but it’s as close to freeform as I could get. Anything can be just about anywhere and it’ll organize itself when it needs to

Now I’m putting together the basic compoments. Have the “Enable Ethereum Integration” button completed and a nice Ethereum account management interface.

You don’t need to code (just some basic XML knowledge), to make your own fully custom skins. And everything’s open-source so you can create your own widgets that perform some useful function for the CypherPoker console.

It’s still somewhat server based except that the servers are contract based and will reward you for either not bothering them or for notifying them of genuine problems.

Well, this model can be worked out over time. If a Lounge fails it’s not expensive to start a one, and even though they’re quite costly to put on the blockchain the poker hand and validator contracts are a one-time cost and still reasonably priced for most people.

If I had to put a dollar amount on it, I believe you could start your own Lounge with its own hand and validator for between CDN$2 to $3

The hand and validator contracts would be the more expensive components. If you got an agreement with other contract owners you could just publish a Lounge for under CDN$1.

Yes, everyone can openly compete. Well, “openly” as much as cryptocurrency accounts will provide.

Nothing to stop people from doing something similar but incompatible with the CypherPoker protocols too.

I think it would be a massive shift. Plus I’ve already tested Tor integration with that slot game I produced so we can mix in some good anonymity. This should help to mix that free market stew a little.

Bitcoin is as good as done. Early after v2.0 I’ll work on a widget that will convert between the various cryptocurrencies, at least Bitcoin, so that will provide a good on-ramp.

And there needn’t be cartels, and they can be easily bypassed. If, for example, I play with some very trusted people and we just need an electronic card deck to play one night (we just need a way to detect if someone cheated at the end), CypherPoker solo would do fine because it’s fast, provable, and it can work on a private network. The dealer punches in the fiat buy-in that everyone tossed in the hat, no physical chips needed. In the end we paid 0 fees for the game but still had excellent assurance that everyone played fairly.

It would also be possible to play on a private blockchain if we wanted a little more cryptographic certainty.

Finally, we can also use the Ethereum testnet (Ropsten), either for free or for *much much* cheaper than the Ethereum mainnet, although that’s still not as secure as the full mainnet.

Just because the number of mining nodes is fairly small there (in the testnet).

So we pay for our security, all the way up to a full-cost, on-the-Ethereum-blockchain hand.

But once we start interacting with Ethereum we need to come armed with a bit of extra cash since we may have to pay our way through to the end, which may include validation costs & deposit.

Dialogue w/P.Bay On Cypher Poker 2.0 and Beyond

Escrow, Challenges, and Validation, and Vexations Player Attacks

Patrick Bay

The promissory notes work with just about every message except for the initial contract setup. To my knowledge there is no signed message that will allow me to send funds from your account to a smart contract – this is a step that every player must go through when they’re agreeing. Once the smart contract is able to manage the funds then signed messages can take over but if the contract has no funds to manage then there’s not much point. The contract becomes the effective third-party and it can arbitrate our disputes, know when actions have timed out, perform refunds, and so on.

As long as everyone’s cooperating then the contract needn’t be invoked (except for the initial agreement), and split between players a game would run just under a penny per hand which I think is a pretty reasonable cost. If everyone doesn’t cooperate then players need to turn to the third party – the smart contract – to arbitrate, and it does so using a very strict procedure that ensures that all players do what they’re supposed to do, when they’re supposed to do it.

This is the more expensive approach and even if a contract is being re-used could still run a few dollars per hand so it’s something that I imagine most players would want to avoid. Unfortunately, if someone decides to be a dick by either withholding messages or sending false ones (while retaining correct ones for the contract), then I don’t see much choice except to drop down from “cheap mode” (almost no contract interaction) to “full cost mode” (almost every action is recorded directly to the contract).

The contract will have the offending player’s funds (sent at agreement time), to work with, so if there are any problems those funds can be disbursed to honest players, but it has no good way of finding out what went on outside of its own environment.

For example, if we’re playing and I decide that I’ll get my customized CypherPoker game to _not_ send you any more messages if it looks like I’m going to lose, you must now turn to the smart contract and activate it, effectively forcing both of us to interact with the contract including doing so within specific time limits. I must now commit my messages to the smart contract (where you can read them), even if I sent nothing to you directly. If I fail to do so, fail to do so in a timely manner, or fail to do so correctly, I lose all my funds to you.

Now, instead of sending signed message to each other at a fairly quick pace we must interact with the contract, which is both slower and more expensive. However, since it’s the contract that decides who won and played fairly, and since we have no other third party to enforce these rules, we must use it to resolve what would otherwise be an impasse.

From the contract’s point of view, however, it has no way of knowing why it was called on to perform a “full cost” game – maybe I didn’t actually send you a message over our P2P channel or the message wasn’t signed correctly (it might even just be garbage). Alternatively, maybe you’re pretending that I didn’t send you anything or you’re claiming I sent you a wrong message. Since the contract can’t prove the veracity of our claims it can’t penalize anyone at this point. All it knows is that someone didn’t honour the gentlemen’s agreement of passing valid signed messages to each other so now it has to take over.

At the end of the “full cost” game the contract will either have all of our information (encrypted cards, decryptions, bets, etc.) so if anyone was cheating it can determine for itself who it was, or information will be missing for certain players which means that they didn’t play as required (i.e. they lose all their funds). That’s why the smart contract has to be able to perform all of the cryptographic functions, rule and winning hand evaluations as the game client (part of the reason it took me a while to put together); at the same time we want to prevent people from using these validation functions because they’re very expensive to run. It’s also fairly expensive to store or commit data to the contract but the final validation – where the contract decrypts all cards, checks them for validity, generates hand scores, and declares a winner – that’s the most expensive part. (edited)

Players have the option to challenge certain points in the game, whether during a game if they’ve been “dealt” incorrect card values (ones that don’t compute correctly) or have received incorrect betting messages, or at the end when it’s suspected that someone was cheating.

It’s the during-the-game part that the smart contract part can be left behind if everyone’s cooperating. Once activated, the contract can just sit there and await a player to announce that they’ve won. If no one challenges that claim within a specific timeout period the winner just calls the “resolve” function and the funds are paid out as described. This is the best scenario – only minimal interaction with the smart contract (i.e. cheap).

In the meantime, or if “resolve” is not triggered, players may challenge the game. This is a “Level 1” challenge where everyone needs to store their encryption/decryption keys to the contract. All the other game data must already be stored at this point (otherwise calling Level 1 does nothing). If there was something untoward happening in the game we would have stopped it and dropped into a “full cost” game which meant storing our values into the contract. If, on the other hand, we have all the valid signed transactions we can prove that a game happened a certain way so we could feed the contract a cryptographic record of exactly how everything went down. Either way, the contract will have the entire hand ready and available for analysis and in a L1 we’re completing the hand by including our encryption/decryption keys along with all of the game data (encrypted cards, partially decrypted cards and who decrypted them, bets, pot, etc.)

Unfortunately, data storage is one of the more expensive Ethereum operations so this too isn’t cheap (but not too bad).

So at this point all players have full access to _committed_ game values. There’s no way for anyone to back out and we can perform all of the same calculations that the smart contract will do in order to determine the winner. The game client is set up to do this using two-pass system: in the first half we analyze the game using values that are known and recorded (in the game client) – if everything checks out then we know that the other players are holding verifiable cryptographic proof of how the game happened so I don’t need to challenge it on the smart contract, and failing that the game client calls a L1 challenge, waits for all data to have been committed, grabs that data, and re-runs the verification.

If there’s still a problem at this point a Level 2 is started. Currently I have it starting off by having players commit a refundable validation deposit equal to 0.6 Ether multiplied by the number of players minus 1. For example, if there are 3 players then my first call to L2 will require a 1.2 Ether deposit. This is a way to cover the costs of L2 for honest verifiers — if I start the L2 challenge (I’m the “challenger”) then I better have a good reason for doing so. Keep in mind that all of the game’s values are stored in the contract so I’m vouching for the fact that something is wrong with them — the math won’t work out. This means that someone will not be able to finish the L2 validation process because the contract will detect the mathematical error so as long as I finish to at least the same amount plus one extra step of L2 validation as anyone else then the contract can refund me both my validation deposit but also a cut (or potentially full mount), of the other player’s L2 validation deposit.

In this case I was being a good player, enforcing the integrity of the contract process.

On the other hand, I may be a vexatious player who tries to force others into full L2 validation because I’m a jerk. In that case it’s in everyone’s best interests to fully complete the L2 validation and I will almost certainly get burned. As a challenger I’m claiming that the contract’s stored values don’t work out but if everyone proves that theirs do (including me), or I stop the L2 validation at some point (the contract may stop it for me if the math doesn’t work out), while others are able to continue, then I have to cover the costs of the other player(s)’ validation(s). (edited)

In short, a player _correctly_ raises a challenge to a contract during L2 validation when they are sure that the stored contract values won’t compute correctly. (edited)

So, honest players will always be refunded the costs of their L2 validation while dishonest players or vexatious/frivolous challengers will pay the validation costs for other players.

Finally, it’s worth noting that L2 is relatively expensive to run, which makes it a nice penalty. To keep the number of operations within tolerable, albeit expensive, during L2 validation players must individually decrypt, verify, and convert the cards of their best hand. In other words, as a player each one of my best cards must be individually decrypted, cryptographically verified (each valid card becomes a [card index, suit, value] data item), and all valid cards from the previous step are used to generate a hand score. There’s an extra step I’ll be putting into the next version which will also check each card’s lineage — who dealt what to whom, and does that value decrypt correctly? (edited)

Since it’s going to be used to penalize frivolous challengers and cheating players I didn’t really focus much on keeping it cheap. The operations are expensive and it wouldn’t be possible to do an entire L2 validation in a single step. You wouldn’t be able to provide the contract with the necessary amount of gas without hitting the limit (at least not on the Ethereum mainnet). (edited)

So there’s an “index” that’s used instead with L2 as each step is completed. So the game client has to call the L2 validation function 5 times to decrypt each of their best cards, 5 times to validate/convert them, and finally once more to generate the hand score. Every individual call runs close to the Ethereum gas limit now so it’s possible that in the future I might have to split the operations into even smaller increments somehow.

In any event, it’s all pretty costly so you’d want to avoid it unless you’re sure that something with the contract’s data will fail.

That still leaves the problem of someone not cooperating _during_ a game. At that point we need to access the smart contract so that the offending player(s) are either forced to enter correct values or the time out (currently 12 blocks) in which case they lose their buy-in. Without a timeout, though, we now need to fully complete the contract including, potentially, L1 and L2. Either through malice or from an attempt to cheat all players are forced to pay more for the game than they would if everyone had cooperated.

Although there are ways to minimize the costs beyond what I’ve noted in the post, the potential for this to come up exists nonetheless and I don’t currently have a foolproof solution. However, there may be a good stop-gap solution that may also employ smart contracts as trust third-parties.

I’m thinking about setting up another contract that includes simply: player account, up ratings, down ratings

gmixxer

Just catching up thx! :stuck_out_tongue_winking_eye:

vexatious is good

“That still leaves the problem of someone not cooperating _during_ a game”

Now we are still solely referring to a vexatious player right?

And the player enter an initial escrow for the hand, and THEN if there is an L2 challenge they enter another escrow?

patrickb

Players would register themselves with this “Rating” contract, perhaps for a small fee (a small transaction cost is incurred anyway) which would contain a list of known/trusted hand contract addresses. Those contracts would report back to the Rating contract whenever they conclude a hand/game and if a player from the contract exists in the Rating contract their ratings are updated.

An up rating would be incremented by 1 anytime a player finished an uncontested contract – players simply agreed at the beginning and the contract was allowed to pay out uncontested. The up rating would be incremented by 0.5 for any game in which the player finished/validated farthest. If the player timed out the contract, failed to validate as far as possible, or otherwise failed to cooperate, they would register a 1 down rating. So each player would have a completed/incomplete ratio.

It’s slightly pricier than playing unranked but it should provide some good indicators for players

Regarding the “problem of someone not cooperating _during_ a game”, that could happen for many reasons. Maybe we had a temporary power failure. There’s a configurable grace period that the contract will allow so you can reconnect and continue if possible. Re-joining a game is something I still need to implement but it’s 100% doable.

While the player is away someone may believe that they can capitalize — if they call the contract and know that the other player can’t commit any values then they’ll have timed out the contract and lose their buy-in.

gmixxer

“Unfortunately, if someone decides to be a dick by either withholding messages or sending false ones (while retaining correct ones for the contract), then I don’t see much choice except to drop down from “cheap mode” (almost no contract interaction) to “full cost mode” (almost every action is recorded directly to the contract).”

When “dick” sendings false msgs they lose their escrow/deposit eventually right?

patrickb

But the other player has that grace period between actions in which they can still reply, but it must be a valid action at the valid time.

When said dick sends false messages we need to inform the contract that we’re only dealing with it now. Now all players will have to interact with the smart contract.

So the game is still enforced, just more expensively. Hence the player that caused it could be being a dick — just out to make things more expensive for people.

gmixxer

“Players would register themselves with this “Rating” contract, perhaps for a small fee (a small transaction cost is incurred anyway) which would contain a list of known/trusted hand contract addresses. Those contracts would report back to the Rating contract whenever they conclude a hand/game and if a player from the contract exists in the Rating contract their ratings are updated.

An up rating would be incremented by 1 anytime a player finished an uncontested contract – players simply agreed at the beginning and the contract was allowed to pay out uncontested. The up rating would be incremented by 0.5 for any game in which the player finished/validated farthest. If the player timed out the contract, failed to validate as far as possible, or otherwise failed to cooperate, they would register a 1 down rating. So each player would have a completed/incomplete ratio.

It’s slightly pricier than playing unranked but it should provide some good indicators for players”

This, as I understand what you are suggesting, is a separate problem of reputation management, not solvable by cypher poker etc. Have to modulate it out and solve it separately.

“Regarding the “problem of someone not cooperating _during_ a game”, that could happen for many reasons. Maybe we had a temporary power failure”

This can be solved by insurance companies (edited)

patrickb

Exactly. This is just a basic reputation rating and could be farmed out to anyone. What I’m proposing is using the smart contract as a trusted third-party.

gmixxer

yup
ok

patrickb

The rating would necessarily have to be simple, the contract too. If it took me more than a day to cobble together it’s too complicated.

gmixxer

“So the game is still enforced, just more expensively. Hence the player that caused it could be being a dick — just out to make things more expensive for people.”

I need to think if this can be a reasonable attack. Well I mean it can’t because there is no economic incentive

so as long as you can play with nice players

no thats not the right word

like we are thinking that is solved if poker star for example can provide the player FIELDs

ya the game can tolerate polite disonesty

something like that :stuck_out_tongue_winking_eye:

patrickb

So, up ratings are games that you have completed as you should have. Some of those games may have been costlier because someone wasn’t cooperating (or maybe they temporarily got disconnected), but at least the ranking is always positively up-moving. You would receive a down ranking, however if you didn’t complete each contract as specified, or you challenged the contract and everyone validated correctly (since you should be able to calculate that the contract won’t fail so you challenged for no reason).

gmixxer

its secure vs a polite cheater, but not a rude one

patrickb

Right. Sometimes you may actually not be able to continue. Your internet connection goes out — were you trying to cheat? Unfortunately it’ll count against you, but for most honest players the up ratings should _far_ outweigh the down ratings.

gmixxer

coo

amicable cheaters allowed :stuck_out_tongue_winking_eye:

patrickb

A very high up to down ratio indicates that thus far in your ranked career you’ve played most games honestly. You can count up the ratio numbers to get a “lifetime” rating, or total number of hands ranked.

gmixxer

its really interesting, that much of it is solely credible threat, like thats really gonna mess with people, its neat

now can one game that tho? Can’t people just create games to build reps?

patrickb

Cheating still won’t be allowed. I think that if there’s outright cheating detected by the contract (the values I committed, for example), that should count as a 2 down rating. Also keep in mind that I would probably also be penalized by losing my entire buy-in and, if I were being obstinate enough, I’d also lose my validation deposit. (edited)

gmixxer

yes I mean to say an amicable cheater is welcome at the tables

patrickb

No way to prevent cheaters from joining, lots of ways to detect that they’ve cheated 😉

gmixxer

yup, and we take their monies when they do

So there is the possibility that such a rep system could be used to build a block chain, not sure if that is useful at this point (edited)

patrickb

No way to know if a player is being a vexatious player or just someone with bad luck, but those who push the issue are guaranteed to lose their money.

gmixxer

correct

patrickb

Actually, I think that that contract I mentioned is absolutely necessary for version 2.0 (or VERY soon afterward).

I can point the compiled version to that as the default contract — here are all of the existing, CypherPoker-vetted smart contracts available for your discounted play (of course you may also publish your own contracts if you wish), and here’s a list of registered

accounts and their ratings (but you’re free to play with anyone, of course).

gmixxer

yes

and so that signals, as I understand, a modular part, that can be “upgraded” with others offering similar evolved versions of that contract
?

patrickb

Exactly. The contract must be open source and anyone can modify their own, make changes, deploy on any network _freely_ (in any sense of the word).

gmixxer

coo

On the CypherPoker Lounge Contract

patrickb

This is why I broke CypherPoker up into the Lounge and GameEngine components. The Lounge can now take care of connecting to “Lounge” contracts (probably a better name in hindsight), which can point to hand contracts and provide lists/stats of registered players. The game client can very easily switch between Lounge contracts and it would be nice to be able to provide a way to join new ones easily.
If you wanted to run a Lounge contract, for example, you would control which hand contracts are considered kosher (allowed to interact with the Lounge for updating ratings), and you could also publish those hand contracts if you wanted to have full ownership.

gmixxer

ah its so nice, I doubt anyone will consider this aspect better than you

yup okok

patrickb

And you set any fees that may be required for interacting with any pieces you own.

Some hand contracts could be made rentable so they can be shared between Lounges with variable splits of any fees.

And it won’t be hard to get started. I’m including the poker hand contract with the game client and it pretty much takes care of fully deploying it onto any network for you. A Lounge contract would be even easier to deploy, though you may have to update the parameters to your own specifications.

You could offer special features, tournaments, whatever … stuff like that shouldn’t be complicated to code.

gmixxer

yes

patrickb

But the contract would come prepared with basics like sign-up fees, insurance escrow collection at regular intervals, and of course easy registered account look-up.

gmixxer

so i have been, and will continue to canvass new independent/emerging sites like luckychewy pokerplayer how can sort of connect their front end to this back end

patrickb

Players could then enter the address of Lounge contracts to get access to the host’s entire range of offerings :slightly_smiling_face:

gmixxer

kk

patrickb

Yeah, there are investment opportunities.

Contracts can collect minuscule fees per hand. Contract owners can access those fees and with some extra coding those fees can be split in more complex ways (for example, owner gets access to 2/3 and Lounge owner gets 1/3).

I suspect that there may be minor rounding leftovers in certain situations so occasionally contracts will end up with extra value even when they don’t collect fees. It’s good for the contract’s owner to retain some control such as the ability to empty any non-accounted-for funds or destroy the contract altogether.

gmixxer

but anyone can copy a contract right? maybe you are referring to sort of someone that puts a game together?

patrickb

With P2P networking players are able to verify their presence online so the Lounge can be seen as providing the list of players to check for on the P2P the network. Players have full control over how this handled — they can be online and simply not respond (private mode), or they can respond and even flag themselves as being available for a game.

gmixxer

right

ah youve been thinking about this, this is killer stuff people want to know, and im not gonna show/tell them right now :stuck_out_tongue_winking_eye:

patrickb

As part of my “are you there?” messages I would include my own stats (perhaps with all the Lounges I’m registered with), that anyone can easily verify, and can determine up front if they want to play me; how good should my up-to-down rating ratio be, what should the lifetime (number of ratings), be — is this even a reputable Lounge or do I not recognize its ratings?

Lounges would have their own reputations, mediated culturally beyond the blockchain.

gmixxer

k

the video and articles I posted in general, at first they might not seem relevant, but they are going to blow your mind open on how we might solve and evolve this.

its all on proof of stake

and that the solution requires escrow :stuck_out_tongue_winking_eye:

patrickb

The default CypherPoker Lounge would be the one that is accessed through the game software “out-of-the-box”, otherwise players are 100% free to sign-up with and use whatever Lounges they like.

gmixxer

yes, we might evolve it into an immortal immutable block chain or something in between

patrickb

If you strike up a friendship with another player, one of you can publish a private hand contract (no need for a Lounge), and be completely untethered to anything CypherPoker. The game client software can also be anything that’s capable of the P2P communication and Ethereum integration – I’m certain that a Node.js version that plays in the browser (without any plugins) is doable.

Hopefully some _official_ CypherPoker client can always something a little extra that people may be willing to pay for if they’re not satisfied with the free, open-source version. However, it needn’t be the only stream of revenue out of all the moving pieces that make CypherPoker tick.

The design is something I’m keeping very fluid. I’ve decided on a high-performance UI framework named Starling Feathers UI which, on top of being very skinnable, looks and moves very nicely. I’ve put in lots of code to handle as much of the styling from external XML data as possible so a designer can very easily update the config data and reload the game to see the results. Most of the UI is split into widgets which have their own independent functions, and widgets live in sliding panels.

gmixxer

Yes now we (you) might make a base layer, basically the protocols that never really need to change, and then perhaps with the ability to setup different lounges and connect different UI’s

And I think that you could run this layer with a finite amount of stakes.

ok yup thats inline

patrickb

Some of the wireframes are here: http://patrickbay.ca/blog/?p=1253

gmixxer

yup i was just reading that the other day

patrickb

Right. I’m only really making one client Lounge that’s fully skinnable.

There are containers for objects like widgets and they all do their own things in there. Object-Oriented Coding embraced :slightly_smiling_face:

I spent some time writing the translation system that takes the XML and converts it to the appropriate skins for various widget components but it’s as close to freeform as I could get. Anything can be just about anywhere and it’ll organize itself when it needs to :slightly_smiling_face:

gmixxer

So there is a base that doesn’t change much and then a layer that has to provide a team of devs the incentive to continually evolve what would connect the base to different implementations/games/offerings/lounges

patrickb

Now I’m putting together the basic compoments. Have the “Enable Ethereum Integration” button completed and a nice Ethereum account management interface.

gmixxer

ya i’m interested in that but ill really ask about it probably later

the skins and stuff i mean

yes so if you can encapsulate the part that will always need a dev team, that part I think will be controlled by stake.

patrickb

Right, exactly. You don’t need to code (just some basic XML knowledge), to make your own fully custom skins. And everything’s open-source so you can create your own widgets that perform some useful function for the CypherPoker console.

gmixxer

yup ok

was hoping you were thinking that but we never discussed

ill have lots of questions about it

not necessarily right now :stuck_out_tongue_winking_eye:

patrickb

I’m thinking ahead. I want to put as few roadblocks in front of people to make this their own in whatever capacity they want.

gmixxer

so you have patrick bay’s cypher poker, which can be an infrastructure to take the whole server model industry to be serverless

patrickb

I’m _trying_ to think ahead :stuck_out_tongue:

gmixxer

yes i trust you to do that, which is why i am here :slightly_smiling_face:

i know you are, ive known it for a long time :slightly_smiling_face:

so if we understand cypher poker to eventually evolve for the whole industry to move to, then we encapsulate that with a finiteness and that offer it as stake.

patrickb

It’s still somewhat server based except that the servers are contract based and will reward you for either not bothering them or for notifying them of genuine problems.

gmixxer

the PROPER balance of owners, investors, devs etc. will produce a nice product

yes but it solves some problems that equate to massive cost savings

security problems = cost etc.

For the players it breaks a monopoly and payment processing restrictions which has killed the games

patrickb

Well, this model can be worked out over time. If a Lounge fails it’s not expensive to start a one, and even though they’re quite costly to put on the blockchain the poker hand and validator contracts are a one-time cost and still reasonably priced for most people.

gmixxer

and in that sense the problems come because the servers reside in places such that

there is massive regulation compliance costs etc

well with the industry working off of one core, the costs are combated cooperatively

patrickb

If I had to put a dollar amount on it, I believe you could start your own Lounge with its own hand and validator for between CDN$2 to $3

gmixxer

haha

patrickb

The hand and validator contracts would be the more expensive components. If you got an agreement with other contract owners you could just publish a Lounge for under CDN$1. (edited)

gmixxer

So is it too far of a stretch for me to suggest, you have some boundary that is the core, like a globe, and that can have a finite amount of “space” and so “new poker stars” and “new fulltilt” and “cypher poker” and “gmixxer poker” can each have stake in it?

patrickb

Yes, everyone can openly compete. Well, “openly” as much as cryptocurrency accounts will provide :slightly_smiling_face:

gmixxer

yes

patrickb

Nothing to stop people from doing something similar but incompatible with the CypherPoker protocols too.

gmixxer

same with bitcoin 😉

patrickb

I think it would be a massive shift. Plus I’ve already tested Tor integration with that slot game I produced so we can mix in some good anonymity. This should help to mix that free market stew a little :slightly_smiling_face:

gmixxer

If we can be allowed to view it that way, and you check out that video and those articles on Pos, they are suggesting that its most transmutable to cartel and cooperativce game theory

yes I agree

thats sick

so we are imagining a few “big players” pick up this project as the core of their operations. We sort of NEED a cartel to arise to secure the proof of stake

patrickb

Bitcoin is as good as done. Early after v2.0 I’ll work on a widget that will convert between the various cryptocurrencies, at least Bitcoin, so that will provide a good on-ramp.

gmixxer

but its safe because the players can just fork the project if the cartel destroys the games

ya bitcoin is fine

other business will auto-convert instantly :stuck_out_tongue_winking_eye:

So in other words we can frame this in a way that is compatible with emerging theory from Vitalik and crew. Dunno if you know “casper” I don’t really but its relevant and discussed in the article.

patrickb

Exactly. And there needn’t be cartels, and they can be easily bypassed. If, for example, I play with some very trusted people and we just need an electronic card deck to play one night (we just need a way to detect if someone cheated at the end), CypherPoker solo would do fine because it’s fast, provable, and it can work on a private network. The dealer punches in the fiat buy-in that everyone tossed in the hat, no physical chips needed. In the end we paid 0 fees for the game but still had excellent assurance that everyone played fairly.

gmixxer

yes

patrickb

If I only use CypherPoker in such a hyper-local way then why pay any fees for Lounge or on-blockchain hand/validator contracts?

gmixxer

amicable cheaters welcome: aka friends

right

patrickb

It would also be possible to play on a private blockchain if we wanted a little more cryptographic certainty.

Finally, we can also use the Ethereum testnet (Ropsten), either for free or for *much much* cheaper than the Ethereum mainnet, although that’s still not as secure as the full mainnet.

Just because the number of mining nodes is fairly small there.

(in the testnet)

gmixxer

Well we might introduce one, I have another friend that has ideas for a community/site with a strong algorithm similar to “steemit” and they have their own block chain for that reason.

And for example you might want some of the hand histories to be immortal and immutable so that you can analyze the history of the game with ultra confidence

oh

also!

patrickb

So we pay for our security, all the way up to a full-cost, on-the-Ethereum-blockchain hand.

But once we start interacting with Ethereum we need to come armed with a bit of extra cash since we may have to pay our way through to the end, which may include validation costs & deposit.

 

On Randomness

gmixxer

lets say this works and incentivizes really good game theory and players. With each player providing their own randomness, and the security protected by competition, IF we assume that all players are fighting to win (and therefore protecting their random sources), then the flops generated are the high random source we have available…no? :slightly_smiling_face:

yes

but that can also be provided by insurance companies

and so if you never defect and the insurance companies pick honest players then the cost is low

patrickb

I believe that yes, they could work as good source of entropy. That could be a microservice provided by some other contract that’s able to access hands.

gmixxer

yes my conjecture is that this provides EFFECTIVELY the best source. Sort of that you have to corrupt the whole “industry” to attack that source and if we do our job the system won’t be gameable in that way

patrickb

The entropy source for CypherPoker is pretty good and I’ve tried to add a few others for good measure but if you wanted to use a solid random generator contract, why not?

gmixxer

we as in YOU but I am already thinking about a team of who can bring this to life

patrickb

The randomness is needed primarily at the beginning when keys and other cryptographic values are being generated.

gmixxer

entropy meaning, each players shuffle right?

patrickb

entropy as in randomness

gmixxer

I mean that in a game with honest smart secure players…their flops will be random

patrickb

Can be used for a shuffle, yes.

gmixxer

you can use their flops as seed for randomness, maybe, if i understand right

patrickb

Also used to generate encryption/decryption keys and also the initial shared modulus value.

gmixxer

im saying you can’t corrupt the flops in these games cause players in competition won’t allow it

patrickb

Yes, you could use it that way but if everyone knows where the seed is coming from, and how it’s used, you might run into problems :slightly_smiling_face:

gmixxer

are you saying because its public its bad, or because you could then corrupt the players and therefore corrupt the seed?

patrickb

Unless this was designed correctly, a flaw in such generator would allow anyone to have a completely unobstructed view of all encrypted values in the game — which includes your private/hole cards. It’s not something I’m planning to explore any time soon :slightly_smiling_face: (edited)

For example, consider a hashing function like SHA256…

The entire proof-of-work system is based around how a value, when hashed, will produce a specific value. In Bitcoin I believe that this output must start with a certain number of 0s. (edited)

gmixxer

yup

patrickb

So if we don’t know the seed, the input, it makes a pretty good number number generator. Technically we should be saying pseudo-random number generator because that “randomness” can easily be repeated if we know the input.

gmixxer

right now a flop is like a multi sig generated random number.

patrickb

So if we know the input to even the best hashing function on earth we know how it’s related to the output. If I know which card value from which hand is being put into the “random” number generator then I know the output because I can run exactly the same calculation. This is especially true on a public blockchain like Ethereum.

Who would do the signing?

gmixxer

well each play shuffles the deck right?

patrickb

Yes, correct.

But that order can be determined in the final analysis.

In other words, at the end you can see that the Ace appeared as card #23 in my shuffled deck, for example, while it appeared as card #50 in your shuffled deck output. No one will know this while the game is active but anyone looking at the contract at the end of the game will see this.

I’ve already written some analysis tools that run in Node.js so there are many ways to independently get this information.

The game client also runs an analysis.

gmixxer

You are saying you can reverse engineer SOME information?

patrickb

So you know which cards are where and at which point.

gmixxer

but then the players can change their input

patrickb

Yes, they can reverse engineer all of the information. That’s the whole point — the game is provable or, to put it another way, there’s a way to “unwind” everything that happened during the game (and as you’re doing this you can detect problems).

gmixxer

right but not their input seeds?

patrickb

If all of this information is public and I know that it’s the source to your random generator, I simply copy the contract and run it locally to make it faster, then feed it those card values so that I have a peek into anything being generated by the live contract.

If you don’t know what the contract’s input seed is, then you’ve got a good setup. You still need a good hash function but otherwise it’s possible.

But if I can read it then I can grab a sample of values that you may have used (since this is your randomness source), and pre-calculate some possible outputs. It would only take

me seconds to successfully break your encryption and see your private/hole cards.

I would: take the input card from an existing contract, hash it, produce an output, decrypt a private card I know only has your encryption applied, and try to match it to a plaintext card. If I’ve successfully done that for both cards then I’m extremely confident that I have your keys. At my leisure I can then run decryptions on other cards and see if they match expected results.

gmixxer

ok if me and you make a bet based on a random outcome thought we can use a flop…maybe that’s not useful

patrickb

So using a known entropy source like cards from existing and publicly-accessible contracts just won’t work.

gmixxer

right

patrickb

The problem of where to get your randomness is as old as cryptography itself :slightly_smiling_face: (edited)

gmixxer

yes szabo has some amazing stuff on it too and ill dig it up

patrickb

However, there are some excellent sources if you want to be extra paranoid. Stuff like this: http://www.idquantique.com/random-number-generation/quantis-random-number-generator/

or maybe this :slightly_smiling_face: : http://physicsworld.com/cws/article/news/2014/may/16/how-to-make-a-quantum-random-number-generator-from-a-mobile-phone
IDQ
Quantis TRNG (True Random Number Generator)
Quantis TRNG is a physical random number generator (RNG) exploiting quantum optics. It is available in USB, PCI and PCI Express versions.
physicsworld.com
How to make a quantum random-number generator from a mobile phone – physicsworld.com
Cheap, high-quality cameras could improve cryptography

There could be a CypherPoker “accessory pack” under some people’s trees for Christmas :stuck_out_tongue:

gmixxer

http://unenumerated.blogspot.ca/2006/03/shared-key-generation-using-quasars.html#links

http://szabo.best.vwh.net/perfect_compression.html

http://szabo.best.vwh.net/statistics.html

links are broken for me

last two i mean

ya cool

So you will REALLY wanna catch up on those articles or video (ideally both) I think and it will get you thinking on how to structure the whole of this.

because once you introduce stake with the competition of sites, then its completely comparable to what they are working on and I think that will get a lot of people excited

patrickb

I know that when I run the full setup my machine really revs up. Faster hardware would definitely be a plus when playing. If your rig is powerful enough you can even mine while playing — contributing both to the security of Ethereum and also your own bottom line.

gmixxer

ya thats special :slightly_smiling_face: I suggests sort of some poker specific hardware which is fine, as long as you have “pros” which means the games need to be profitable which they will be.

but you also have bot farms that could arise.

Now I have a proposed solution of a botnet that is a randomized player field (zoom poker)…

and an equillbrium is created that allows the bots to offer private games on the side that are effectively bot free

its a long way of saying that such hardware will be used to secure ethereum rather than collude the game

(and therefore secure cypher poker)

with proper checks and security its more profitable to secure the network than it is to infiltrate the industry with bots hardware/software to profit from the players.

gmixxer

I’m gonna save much of this dialogue onto my blog and maybe clean it up especially so I can show it to my friend.

He will be quite interested because he has a model for a site/governance that could be the crux of the implementation of cypherpoker.

I won’t advertise all this too much by there is some nice stuff I can send to some emerging indepent sites/owners and they can pass it to their devs…

the idea is to get a couple reputable projects working off of this. phil galfond, if you know of him, announced he would release a site in Q1. This back-end would save an immense hassle, eliminating a barrier he probably can’t otherwise surpass

Dialogue w/P.Bay On Cypher Poker 2.0 and Beyond

The promissory notes work with just about every message except for the initial contract setup. To my knowledge there is no signed message that will allow me to send funds from your account to a smart contract – this is a step that every player must go through when they’re agreeing. Once the smart contract is able to manage the funds then signed messages can take over but if the contract has no funds to manage then there’s not much point. The contract becomes the effective third-party and it can arbitrate our disputes, know when actions have timed out, perform refunds, and so on.

[6:22]
As long as everyone’s cooperating then the contract needn’t be invoked (except for the initial agreement), and split between players a game would run just under a penny per hand which I think is a pretty reasonable cost. If everyone doesn’t cooperate then players need to turn to the third party – the smart contract – to arbitrate, and it does so using a very strict procedure that ensures that all players do what they’re supposed to do, when they’re supposed to do it.

[6:25]
This is the more expensive approach and even if a contract is being re-used could still run a few dollars per hand so it’s something that I imagine most players would want to avoid. Unfortunately, if someone decides to be a dick by either withholding messages or sending false ones (while retaining correct ones for the contract), then I don’t see much choice except to drop down from “cheap mode” (almost no contract interaction) to “full cost mode” (almost every action is recorded directly to the contract).

[6:28]
The contract will have the offending player’s funds (sent at agreement time), to work with, so if there are any problems those funds can be disbursed to honest players, but it has no good way of finding out what went on outside of its own environment.

[6:33]
For example, if we’re playing and I decide that I’ll get my customized CypherPoker game to _not_ send you any more messages if it looks like I’m going to lose, you must now turn to the smart contract and activate it, effectively forcing both of us to interact with the contract including doing so within specific time limits. I must now commit my messages to the smart contract (where you can read them), even if I sent nothing to you directly. If I fail to do so, fail to do so in a timely manner, or fail to do so correctly, I lose all my funds to you.

[6:34]
Now, instead of sending signed message to each other at a fairly quick pace we must interact with the contract, which is both slower and more expensive. However, since it’s the contract that decides who won and played fairly, and since we have no other third party to enforce these rules, we must use it to resolve what would otherwise be an impasse.

patrickb [6:48 AM]
From the contract’s point of view, however, it has no way of knowing why it was called on to perform a “full cost” game – maybe I didn’t actually send you a message over our P2P channel or the message wasn’t signed correctly (it might even just be garbage). Alternatively, maybe you’re pretending that I didn’t send you anything or you’re claiming I sent you a wrong message. Since the contract can’t prove the veracity of our claims it can’t penalize anyone at this point. All it knows is that someone didn’t honour the gentlemen’s agreement of passing valid signed messages to each other so now it has to take over.

[6:50]
At the end of the “full cost” game the contract will either have all of our information (encrypted cards, decryptions, bets, etc.) so if anyone was cheating it can determine for itself who it was, or information will be missing for certain players which means that they didn’t play as required (i.e. they lose all their funds). That’s why the smart contract has to be able to perform all of the cryptographic functions, rule and winning hand evaluations as the game client (part of the reason it took me a while to put together); at the same time we want to prevent people from using these validation functions because they’re very expensive to run. It’s also fairly expensive to store or commit data to the contract but the final validation – where the contract decrypts all cards, checks them for validity, generates hand scores, and declares a winner – that’s the most expensive part. (edited)

patrickb [6:57 AM]
Players have the option to challenge certain points in the game, whether during a game if they’ve been “dealt” incorrect card values (ones that don’t compute correctly) or have received incorrect betting messages, or at the end when it’s suspected that someone was cheating.

patrickb [7:03 AM]
It’s the during-the-game part that the smart contract part can be left behind if everyone’s cooperating. Once activated, the contract can just sit there and await a player to announce that they’ve won. If no one challenges that claim within a specific timeout period the winner just calls the “resolve” function and the funds are paid out as described. This is the best scenario – only minimal interaction with the smart contract (i.e. cheap).

patrickb [7:11 AM]
In the meantime, or if “resolve” is not triggered, players may challenge the game. This is a “Level 1” challenge where everyone needs to store their encryption/decryption keys to the contract. All the other game data must already be stored at this point (otherwise calling Level 1 does nothing). If there was something untoward happening in the game we would have stopped it and dropped into a “full cost” game which meant storing our values into the contract. If, on the other hand, we have all the valid signed transactions we can prove that a game happened a certain way so we could feed the contract a cryptographic record of exactly how everything went down. Either way, the contract will have the entire hand ready and available for analysis and in a L1 we’re completing the hand by including our encryption/decryption keys along with all of the game data (encrypted cards, partially decrypted cards and who decrypted them, bets, pot, etc.)

[7:12]
Unfortunately, data storage is one of the more expensive Ethereum operations so this too isn’t cheap (but not too bad).

[7:17]
So at this point all players have full access to _committed_ game values. There’s no way for anyone to back out and we can perform all of the same calculations that the smart contract will do in order to determine the winner. The game client is set up to do this using two-pass system: in the first half we analyze the game using values that are known and recorded (in the game client) – if everything checks out then we know that the other players are holding verifiable cryptographic proof of how the game happened so I don’t need to challenge it on the smart contract, and failing that the game client calls a L1 challenge, waits for all data to have been committed, grabs that data, and re-runs the verification.

patrickb [7:26 AM]
If there’s still a problem at this point a Level 2 is started. Currently I have it starting off by having players commit a refundable validation deposit equal to 0.6 Ether multiplied by the number of players minus 1. For example, if there are 3 players then my first call to L2 will require a 1.2 Ether deposit. This is a way to cover the costs of L2 for honest verifiers — if I start the L2 challenge (I’m the “challenger”) then I better have a good reason for doing so. Keep in mind that all of the game’s values are stored in the contract so I’m vouching for the fact that something is wrong with them — the math won’t work out. This means that someone will not be able to finish the L2 validation process because the contract will detect the mathematical error so as long as I finish to at least the same amount plus one extra step of L2 validation as anyone else then the contract can refund me both my validation deposit but also a cut (or potentially full mount), of the other player’s L2 validation deposit.

[7:27]
In this case I was being a good player, enforcing the integrity of the contract process.

patrickb [7:33 AM]
On the other hand, I may be a vexatious player who tries to force others into full L2 validation because I’m a jerk. In that case it’s in everyone’s best interests to fully complete the L2 validation and I will almost certainly get burned. As a challenger I’m claiming that the contract’s stored values don’t work out but if everyone proves that theirs do (including me), or I stop the L2 validation at some point (the contract may stop it for me if the math doesn’t work out), while others are able to continue, then I have to cover the costs of the other player(s)’ validation(s). (edited)

[7:35]
In short, a player _correctly_ raises a challenge to a contract during L2 validation when they are sure that the stored contract values won’t compute correctly. (edited)

[7:39]
So, honest players will always be refunded the costs of their L2 validation while dishonest players or vexatious/frivolous challengers will pay the validation costs for other players.

patrickb [7:49 AM]
Finally, it’s worth noting that L2 is relatively expensive to run, which makes it a nice penalty. To keep the number of operations within tolerable, albeit expensive, during L2 validation players must individually decrypt, verify, and convert the cards of their best hand. In other words, as a player each one of my best cards must be individually decrypted, cryptographically verified (each valid card becomes a [card index, suit, value] data item), and all valid cards from the previous step are used to generate a hand score. There’s an extra step I’ll be putting into the next version which will also check each card’s lineage — who dealt what to whom, and does that value decrypt correctly? (edited)

[7:52]
Since it’s going to be used to penalize frivolous challengers and cheating players I didn’t really focus much on keeping it cheap. The operations are expensive and it wouldn’t be possible to do an entire L2 validation in a single step. You wouldn’t be able to provide the contract with the necessary amount of gas without hitting the limit (at least not on the Ethereum mainnet). (edited)

patrickb [7:58 AM]
So there’s an “index” that’s used instead with L2 as each step is completed. So the game client has to call the L2 validation function 5 times to decrypt each of their best cards, 5 times to validate/convert them, and finally once more to generate the hand score. Every individual call runs close to the Ethereum gas limit now so it’s possible that in the future I might have to split the operations into even smaller increments somehow.

[8:01]
In any event, it’s all pretty costly so you’d want to avoid it unless you’re sure that something with the contract’s data will fail.

patrickb [8:16 AM]
That still leaves the problem of someone not cooperating _during_ a game. At that point we need to access the smart contract so that the offending player(s) are either forced to enter correct values or the time out (currently 12 blocks) in which case they lose their buy-in. Without a timeout, though, we now need to fully complete the contract including, potentially, L1 and L2. Either through malice or from an attempt to cheat all players are forced to pay more for the game than they would if everyone had cooperated.

[8:19]
Although there are ways to minimize the costs beyond what I’ve noted in the post, the potential for this to come up exists nonetheless and I don’t currently have a foolproof solution. However, there may be a good stop-gap solution that may also employ smart contracts as trust third-parties.

[8:20]
I’m thinking about setting up another contract that includes simply: player account, up ratings, down ratings

gmixxer [8:23 AM]
just catching up thx! :stuck_out_tongue_winking_eye:

[8:26]
vexatious is good

[8:28]
“That still leaves the problem of someone not cooperating _during_ a game”

Now we are still solely referring to a vexatious player right?

[8:29]
And the player enter an initial escrow for the hand, and THEN if there is an L2 challenge they enter another escrow?

patrickb [8:29 AM]
Players would register themselves with this “Rating” contract, perhaps for a small fee (a small transaction cost is incurred anyway) which would contain a list of known/trusted hand contract addresses. Those contracts would report back to the Rating contract whenever they conclude a hand/game and if a player from the contract exists in the Rating contract their ratings are updated.

An up rating would be incremented by 1 anytime a player finished an uncontested contract – players simply agreed at the beginning and the contract was allowed to pay out uncontested. The up rating would be incremented by 0.5 for any game in which the player finished/validated farthest. If the player timed out the contract, failed to validate as far as possible, or otherwise failed to cooperate, they would register a 1 down rating. So each player would have a completed/incomplete ratio.

It’s slightly pricier than playing unranked but it should provide some good indicators for players

[8:31]
Regarding the “problem of someone not cooperating _during_ a game”, that could happen for many reasons. Maybe we had a temporary power failure. There’s a configurable grace period that the contract will allow so you can reconnect and continue if possible. Re-joining a game is something I still need to implement but it’s 100% doable.

[8:32]
While the player is away someone may believe that they can capitalize — if they call the contract and know that the other player can’t commit any values then they’ll have timed out the contract and lose their buy-in.

gmixxer [8:33 AM]
“Unfortunately, if someone decides to be a dick by either withholding messages or sending false ones (while retaining correct ones for the contract), then I don’t see much choice except to drop down from “cheap mode” (almost no contract interaction) to “full cost mode” (almost every action is recorded directly to the contract).”

When “dick” sendings false msgs they lose their escrow/deposit eventually right?

patrickb [8:33 AM]
But the other player has that grace period between actions in which they can still reply, but it must be a valid action at the valid time.

[8:34]
When said dick sends false messages we need to inform the contract that we’re only dealing with it now. Now all players will have to interact with the smart contract.

[8:35]
So the game is still enforced, just more expensively. Hence the player that caused it could be being a dick — just out to make things more expensive for people.

gmixxer [8:35 AM]
“Players would register themselves with this “Rating” contract, perhaps for a small fee (a small transaction cost is incurred anyway) which would contain a list of known/trusted hand contract addresses. Those contracts would report back to the Rating contract whenever they conclude a hand/game and if a player from the contract exists in the Rating contract their ratings are updated.

An up rating would be incremented by 1 anytime a player finished an uncontested contract – players simply agreed at the beginning and the contract was allowed to pay out uncontested. The up rating would be incremented by 0.5 for any game in which the player finished/validated farthest. If the player timed out the contract, failed to validate as far as possible, or otherwise failed to cooperate, they would register a 1 down rating. So each player would have a completed/incomplete ratio.

It’s slightly pricier than playing unranked but it should provide some good indicators for players”

This, as I understand what you are suggesting, is a separate problem of reputation management, not solvable by cypher poker etc. Have to modulate it out and solve it separately.

[8:35]

Regarding the “problem of someone not cooperating _during_ a game”, that could happen for many reasons. Maybe we had a temporary power failure”

This can be solved by insurance companies (edited)

patrickb [8:36 AM]
Exactly. This is just a basic reputation rating and could be farmed out to anyone. What I’m proposing is using the smart contract as a trusted third-party.

gmixxer [8:36 AM]
yup

[8:37]
ok

patrickb [8:37 AM]
The rating would necessarily have to be simple, the contract too. If it took me more than a day to cobble together it’s too complicated.

gmixxer [8:37 AM]
“So the game is still enforced, just more expensively. Hence the player that caused it could be being a dick — just out to make things more expensive for people.”

I need to think if this can be a reasonable attack. Well I mean it can’t because there is no economic incentive

[8:37]
so as long as you can play with nice players

[8:37]
no thats not the right word

[8:38]
like we are thinking that is solved if poker star for example can provide the player FIELDs

[8:38]
ya the game can tolerate polite disonesty

[8:39]
something like that :stuck_out_tongue_winking_eye:

patrickb [8:39 AM]
So, up ratings are games that you have completed as you should have. Some of those games may have been costlier because someone wasn’t cooperating (or maybe they temporarily got disconnected), but at least the ranking is always positively up-moving. You would receive a down ranking, however if you didn’t complete each contract as specified, or you challenged the contract and everyone validated correctly (since you should be able to calculate that the contract won’t fail so you challenged for no reason).

gmixxer [8:39 AM]
its secure vs a polite cheater, but not a rude one

patrickb [8:40 AM]
Right. Sometimes you may actually not be able to continue. Your internet connection goes out — were you trying to cheat? Unfortunately it’ll count against you, but for most honest players the up ratings should _far_ outweigh the down ratings.

gmixxer [8:41 AM]
coo

[8:41]
amicable cheaters allowed :stuck_out_tongue_winking_eye:

patrickb [8:42 AM]
A very high up to down ratio indicates that thus far in your ranked career you’ve played most games honestly. You can count up the ratio numbers to get a “lifetime” rating, or total number of hands ranked.

gmixxer [8:42 AM]
its really interesting, that much of it is solely credible threat, like thats really gonna mess with people, its neat

[8:43]
now can one game that tho? Can’t people just create games to build reps?

patrickb [8:43 AM]
Cheating still won’t be allowed. I think that if there’s outright cheating detected by the contract (the values I committed, for example), that should count as a 2 down rating. Also keep in mind that I would probably also be penalized by losing my entire buy-in and, if I were being obstinate enough, I’d also lose my validation deposit. (edited)

gmixxer [8:44 AM]
yes I mean to say an amicable cheater is welcome at the tables

patrickb [8:45 AM]
No way to prevent cheaters from joining, lots of ways to detect that they’ve cheated 😉

gmixxer [8:45 AM]
yup, and we take their monies when they do

[8:46]
So there is the possibility that such a rep system could be used to build a block chain, not sure if that is useful at this point (edited)

patrickb [8:46 AM]
No way to know if a player is being a vexatious player or just someone with bad luck, but those who push the issue are guaranteed to lose their money.

gmixxer [8:46 AM]
correct

patrickb [8:47 AM]
Actually, I think that that contract I mentioned is absolutely necessary for version 2.0 (or VERY soon afterward).

[8:48]
I can point the compiled version to that as the default contract — here are all of the existing, CypherPoker-vetted smart contracts available for your discounted play (of course you may also publish your own contracts if you wish), and here’s a list of registered

accounts and their ratings (but you’re free to play with anyone, of course).

gmixxer [8:49 AM]
yes

[8:49]
and so that signals, as I understand, a modular part, that can be “upgraded” with others offering similar evolved versions of that contract

[8:49]
?

patrickb [8:51 AM]
Exactly. The contract must be open source and anyone can modify their own, make changes, deploy on any network _freely_ (in any sense of the word).

gmixxer [8:51 AM]
coo

patrickb [8:54 AM]
This is why I broke CypherPoker up into the Lounge and GameEngine components. The Lounge can now take care of connecting to “Lounge” contracts (probably a better name in hindsight), which can point to hand contracts and provide lists/stats of registered players. The game client can very easily switch between Lounge contracts and it would be nice to be able to provide a way to join new ones easily.

[8:55]
If you wanted to run a Lounge contract, for example, you would control which hand contracts are considered kosher (allowed to interact with the Lounge for updating ratings), and you could also publish those hand contracts if you wanted to have full ownership.

gmixxer [8:56 AM]
ah its so nice, I doubt anyone will consider this aspect better than you

[8:56]
yup okok

patrickb [8:56 AM]
And you set any fees that may be required for interacting with any pieces you own.

[8:57]
Some hand contracts could be made rentable so they can be shared between Lounges with variable splits of any fees.

[8:59]
And it won’t be hard to get started. I’m including the poker hand contract with the game client and it pretty much takes care of fully deploying it onto any network for you. A Lounge contract would be even easier to deploy, though you may have to update the parameters to your own specifications.

[9:00]
You could offer special features, tournaments, whatever … stuff like that shouldn’t be complicated to code.

gmixxer [9:01 AM]
yes

patrickb [9:01 AM]
But the contract would come prepared with basics like sign-up fees, insurance escrow collection at regular intervals, and of course easy registered account look-up.

gmixxer [9:02 AM]
so i have been, and will continue to canvass new independent/emerging sites like luckychewy pokerplayer how can sort of connect their front end to this back end

patrickb [9:02 AM]
Players could then enter the address of Lounge contracts to get access to the host’s entire range of offerings :slightly_smiling_face:

gmixxer [9:02 AM]
kk

patrickb [9:02 AM]
Yeah, there are investment opportunities.

[9:04]
Contracts can collect miniscule fees per hand. Contract owners can access those fees and with some extra coding those fees can be split in more complex ways (for example, owner gets access to 2/3 and Lounge owner gets 1/3).

[9:06]
I suspect that there may be minor rounding leftovers in certain situations so occasionally contracts will end up with extra value even when they don’t collect fees. It’s good for the contract’s owner to retain some control such as the ability to empty any non-accounted-for funds or destroy the contract altogether.

gmixxer [9:07 AM]
but anyone can copy a contract right? maybe you are referring to sort of someone that puts a game together?

patrickb [9:10 AM]
With P2P networking players are able to verify their presence online so the Lounge can be seen as providing the list of players to check for on the P2P the network. Players have full control over how this handled — they can be online and simply not respond (private mode), or they can respond and even flag themselves as being available for a game.

gmixxer [9:11 AM]
right

[9:12]
ah youve been thinking about this, this is killer stuff people want to know, and im not gonna show/tell them right now :stuck_out_tongue_winking_eye:

patrickb [9:13 AM]
As part of my “are you there?” messages I would include my own stats (perhaps with all the Lounges I’m registered with), that anyone can easily verify, and can determine up front if they want to play me; how good should my up-to-down rating ratio be, what should the lifetime (number of ratings), be — is this even a reputable Lounge or do I not recognize its ratings?

[9:14]
Lounges would have their own reputations, mediated culturally beyond the blockchain.

gmixxer [9:14 AM]
k

[9:15]
the video and articles I posted in general, at first they might not seem relevant, but they are going to blow your mind open on how we might solve and evolve this.

[9:16]
its all on proof of stake

[9:16]
and that the solution requires escrow :stuck_out_tongue_winking_eye:

patrickb [9:16 AM]
The default CypherPoker Lounge would be the one that is accessed through the game software “out-of-the-box”, otherwise players are 100% free to sign-up with and use whatever Lounges they like.

gmixxer [9:17 AM]
yes, we might evolve it into an immortal immutable block chain or something in between

patrickb [9:20 AM]
If you strike up a friendship with another player, one of you can publish a private hand contract (no need for a Lounge), and be completely untethered to anything CypherPoker. The game client software can also be anything that’s capable of the P2P communication and Ethereum integration – I’m certain that a Node.js version that plays in the browser (without any plugins) is doable.

[9:22]
Hopefully some _official_ CypherPoker client can always something a little extra that people may be willing to pay for if they’re not satisfied with the free, open-source version. However, it needn’t be the only stream of revenue out of all the moving pieces that make CypherPoker tick.

[9:26]
The design is something I’m keeping very fluid. I’ve decided on a high-performance UI framework named Starling Feathers UI which, on top of being very skinnable, looks and moves very nicely. I’ve put in lots of code to handle as much of the styling from external XML data as possible so a designer can very easily update the config data and reload the game to see the results. Most of the UI is split into widgets which have their own independent functions, and widgets live in sliding panels.

gmixxer [9:27 AM]
Yes now we (you) might make a base layer, basically the protocols that never really need to change, and then perhaps with the ability to setup different lounges and connect different UI’s

And I think that you could run this layer with a finite amount of stakes.

[9:27]
ok yup thats inline

patrickb [9:27 AM]
Some of the wireframes are here: http://patrickbay.ca/blog/?p=1253

gmixxer [9:27 AM]
yup i was just reading that the other day

patrickb [9:28 AM]
Right. I’m only really making one client Lounge that’s fully skinnable.

[9:28]
There are containers for objects like widgets and they all do their own things in there. Object-Oriented Coding embraced :slightly_smiling_face:

[9:30]
I spent some time writing the translation system that takes the XML and converts it to the appropriate skins for various widget components but it’s as close to freeform as I could get. Anything can be just about anywhere and it’ll organize itself when it needs to :slightly_smiling_face:

gmixxer [9:31 AM]
So there is a base that doesn’t change much and then a layer that has to provide a team of devs the incentive to continually evolve what would connect the base to different implementations/games/offerings/lounges

patrickb [9:31 AM]
Now I’m putting together the basic compoments. Have the “Enable Ethereum Integration” button completed and a nice Ethereum account management interface.

gmixxer [9:31 AM]
ya i’m interested in that but ill really ask about it probably later

[9:31]
the skins and stuff i mean

[9:32]
yes so if you can encapsulate the part that will always need a dev team, that part I think will be controlled by stake.

patrickb [9:32 AM]
Right, exactly. You don’t need to code (just some basic XML knowledge), to make your own fully custom skins. And everything’s open-source so you can create your own widgets that perform some useful function for the CypherPoker console.

gmixxer [9:32 AM]
yup ok

[9:33]
was hoping you were thinking that but we never discussed

[9:33]
ill have lots of questions about it

[9:33]
not necessarily right now :stuck_out_tongue_winking_eye:

patrickb [9:34 AM]
I’m thinking ahead. I want to put as few roadblocks in front of people to make this their own in whatever capacity they want.

gmixxer [9:34 AM]
so you have patrick bay’s cypher poker, which can be an infrastructure to take the whole server model industry to be serverless

patrickb [9:34 AM]
I’m _trying_ to think ahead :stuck_out_tongue:

gmixxer [9:34 AM]
yes i trust you to do that, which is why i am here :slightly_smiling_face:

[9:34]
i know you are, ive known it for a long time :slightly_smiling_face:

[9:35]
so if we understand cypher poker to eventually evolve for the whole industry to move to, then we encapsulate that with a finiteness and that offer it as stake.

patrickb [9:35 AM]
It’s still somewhat server based except that the servers are contract based and will reward you for either not bothering them or for notifying them of genuine problems.

gmixxer [9:35 AM]
the PROPER balance of owners, investors, devs etc. will produce a nice product

[9:36]
yes but it solves some problems that equate to massive cost savings

[9:36]
security problems = cost etc.

[9:36]
For the players it breaks a monopoly and payment processing restrictions which has killed the games

patrickb [9:37 AM]
Well, this model can be worked out over time. If a Lounge fails it’s not expensive to start a one, and even though they’re quite costly to put on the blockchain the poker hand and validator contracts are a one-time cost and still reasonably priced for most people.

gmixxer [9:37 AM]
and in that sense the problems come because the servers reside in places such that

there is massive regulation compliance costs etc

[9:38]
well with the industry working off of one core, the costs are combated cooperatively

patrickb [9:38 AM]
If I had to put a dollar amount on it, I believe you could start your own Lounge with its own hand and validator for between CDN$2 to $3

gmixxer [9:38 AM]
haha

patrickb [9:40 AM]
The hand and validator contracts would be the more expensive components. If you got an agreement with other contract owners you could just publish a Lounge for under CDN$1. (edited)

gmixxer [9:40 AM]
So is it too far of a stretch for me to suggest, you have some boundary that is the core, like a globe, and that can have a finite amount of “space” and so “new poker stars” and “new fulltilt” and “cypher poker” and “gmixxer poker” can each have stake in it?

patrickb [9:41 AM]
Yes, everyone can openly compete. Well, “openly” as much as cryptocurrency accounts will provide :slightly_smiling_face:

gmixxer [9:41 AM]
yes

patrickb [9:42 AM]
Nothing to stop people from doing something similar but incompatible with the CypherPoker protocols too.

gmixxer [9:42 AM]
same with bitcoin 😉

patrickb [9:44 AM]
I think it would be a massive shift. Plus I’ve already tested Tor integration with that slot game I produced so we can mix in some good anonymity. This should help to mix that free market stew a little :slightly_smiling_face:

gmixxer [9:45 AM]
If we can be allowed to view it that way, and you check out that video and those articles on Pos, they are suggesting that its most transmutable to cartel and cooperativce game theory

[9:45]
yes I agree

[9:45]
thats sick

[9:45]
so we are imagining a few “big players” pick up this project as the core of their operations. We sort of NEED a cartel to arise to secure the proof of stake

patrickb [9:45 AM]
Bitcoin is as good as done. Early after v2.0 I’ll work on a widget that will convert between the various cryptocurrencies, at least Bitcoin, so that will provide a good on-ramp.

gmixxer [9:46 AM]
but its safe because the players can just fork the project if the cartel destroys the games

[9:46]
ya bitcoin is fine

[9:46]
other business will auto-convert instantly :stuck_out_tongue_winking_eye:

[9:47]
So in other words we can frame this in a way that is compatible with emerging theory from Vitalik and crew. Dunno if you know “casper” I don’t really but its relevant and discussed in the article.

patrickb [9:50 AM]
Exactly. And there needn’t be cartels, and they can be easily bypassed. If, for example, I play with some very trusted people and we just need an electronic card deck to play one night (we just need a way to detect if someone cheated at the end), CypherPoker solo would do fine because it’s fast, provable, and it can work on a private network. The dealer punches in the fiat buy-in that everyone tossed in the hat, no physical chips needed. In the end we paid 0 fees for the game but still had excellent assurance that everyone played fairly.

gmixxer [9:51 AM]
yes

patrickb [9:51 AM]
If I only use CypherPoker in such a hyper-local way then why pay any fees for Lounge or on-blockchain hand/validator contracts?

gmixxer [9:51 AM]
amicable cheaters welcome: aka friends

[9:51]
right

patrickb [9:51 AM]
It would also be possible to play on a private blockchain if we wanted a little more cryptographic certainty.

[9:53]
Finally, we can also use the Ethereum testnet (Ropsten), either for free or for *much much* cheaper than the Ethereum mainnet, although that’s still not as secure as the full mainnet.

[9:53]
Just because the number of mining nodes is fairly small there.

[9:53]
(in the testnet)

gmixxer [9:54 AM]
Well we might introduce one, I have another friend that has ideas for a community/site with a strong algorithm similar to “steemit” and they have their own block chain for that reason.

And for example you might want some of the hand histories to be immortal and immutable so that you can analyze the history of the game with ultra confidence

[9:54]
oh

[9:54]
also!

patrickb [9:54 AM]
So we pay for our security, all the way up to a full-cost, on-the-Ethereum-blockchain hand.

[9:55]
But once we start interacting with Ethereum we need to come armed with a bit of extra cash since we may have to pay our way through to the end, which may include validation costs & deposit.

gmixxer [9:55 AM]
lets say this works and incentivizes really good game theory and players. With each player providing their own randomness, and the security protected by competition, IF we assume that all players are fighting to win (and therefore protecting their random sources), then the flops generated are the high random source we have available…no? :slightly_smiling_face:

[9:56]
yes

[9:56]
but that can also be provided by insurance companies

[9:56]
and so if you never defect and the insurance companies pick honest players then the cost is low

patrickb [9:57 AM]
I believe that yes, they could work as good source of entropy. That could be a microservice provided by some other contract that’s able to access hands.

gmixxer [9:59 AM]
yes my conjecture is that this provides EFFECTIVELY the best source. Sort of that you have to corrupt the whole “industry” to attack that source and if we do our job the system won’t be gameable in that way

patrickb [9:59 AM]
The entropy source for CypherPoker is pretty good and I’ve tried to add a few others for good measure but if you wanted to use a solid random generator contract, why not?

gmixxer [9:59 AM]
we as in YOU but I am already thinking about a team of who can bring this to life

patrickb [10:00 AM]
The randomness is needed primarily at the beginning when keys and other cryptographic values are being generated.

gmixxer [10:00 AM]
entropy meaning, each players shuffle right?

patrickb [10:00 AM]
entropy as in randomness

gmixxer [10:00 AM]
I mean that in a game with honest smart secure players…their flops will be random

patrickb [10:00 AM]
Can be used for a shuffle, yes.

gmixxer [10:01 AM]
you can use their flops as seed for randomness, maybe, if i understand right

patrickb [10:01 AM]
Also used to generate encryption/decryption keys and also the initial shared modulus value.

gmixxer [10:01 AM]
im saying you can’t corrupt the flops in these games cause players in competition won’t allow it

patrickb [10:02 AM]
Yes, you could use it that way but if everyone knows where the seed is coming from, and how it’s used, you might run into problems :slightly_smiling_face:

gmixxer [10:02 AM]
are you saying because its public its bad, or because you could then corrupt the players and therefore corrupt the seed?

patrickb [10:03 AM]
Unless this was designed correctly, a flaw in such generator would allow anyone to have a completely unobstructed view of all encrypted values in the game — which includes your private/hole cards. It’s not something I’m planning to explore any time soon :slightly_smiling_face: (edited)

[10:03]
For example, consider a hashing function like SHA256…

[10:04]
The entire proof-of-work system is based around how a value, when hashed, will produce a specific value. In Bitcoin I believe that this output must start with a certain number of 0s. (edited)

gmixxer [10:05 AM]
yup

patrickb [10:06 AM]
So if we don’t know the seed, the input, it makes a pretty good number number generator. Technically we should be saying pseudo-random number generator because that “randomness” can easily be repeated if we know the input.

gmixxer [10:07 AM]
right now a flop is like a multi sig generated random number.

patrickb [10:07 AM]
So if we know the input to even the best hashing function on earth we know how it’s related to the output. If I know which card value from which hand is being put into the “random” number generator then I know the output because I can run exactly the same calculation. This is especially true on a public blockchain like Ethereum.

[10:09]
Who would do the signing?

gmixxer [10:09 AM]
well each play shuffles the deck right?

patrickb [10:10 AM]
Yes, correct.

[10:10]
But that order can be determined in the final analysis.

[10:12]
In other words, at the end you can see that the Ace appeared as card #23 in my shuffled deck, for example, while it appeared as card #50 in your shuffled deck output. No one will know this while the game is active but anyone looking at the contract at the end of the game will see this.

[10:13]
I’ve already written some analysis tools that run in Node.js so there are many ways to independently get this information.

[10:13]
The game client also runs an analysis.

gmixxer [10:13 AM]
You are saying you can reverse engineer SOME information?

patrickb [10:13 AM]
So you know which cards are where and at which point.

gmixxer [10:13 AM]
but then the players can change their input

patrickb [10:14 AM]
Yes, they can reverse engineer all of the information. That’s the whole point — the game is provable or, to put it another way, there’s a way to “unwind” everything that happened during the game (and as you’re doing this you can detect problems).

gmixxer [10:15 AM]
right but not their input seeds?

patrickb [10:16 AM]
If all of this information is public and I know that it’s the source to your random generator, I simply copy the contract and run it locally to make it faster, then feed it those card values so that I have a peek into anything being generated by the live contract.

[10:16]
If you don’t know what the contract’s input seed is, then you’ve got a good setup. You still need a good hash function but otherwise it’s possible.

[10:18]
But if I can read it then I can grab a sample of values that you may have used (since this is your randomness source), and pre-calculate some possible outputs. It would only take

me seconds to successfully break your encryption and see your private/hole cards.

[10:20]
I would: take the input card from an existing contract, hash it, produce an output, decrypt a private card I know only has your encryption applied, and try to match it to a plaintext card. If I’ve successfully done that for both cards then I’m extremely confident that I have your keys. At my leisure I can then run decryptions on other cards and see if they match expected results.

gmixxer [10:21 AM]
ok if me and you make a bet based on a random outcome thought we can use a flop…maybe that’s not useful

patrickb [10:21 AM]
So using a known entropy source like cards from existing and publicly-accessible contracts just won’t work.

gmixxer [10:21 AM]
right

patrickb [10:22 AM]
The problem of where to get your randomness is as old as cryptography itself :slightly_smiling_face: (edited)

gmixxer [10:23 AM]
yes szabo has some amazing stuff on it too and ill dig it up

patrickb [10:23 AM]
However, there are some excellent sources if you want to be extra paranoid. Stuff like this: http://www.idquantique.com/random-number-generation/quantis-random-number-generator/

or maybe this :slightly_smiling_face: : http://physicsworld.com/cws/article/news/2014/may/16/how-to-make-a-quantum-random-number-generator-from-a-mobile-phone
IDQ
Quantis TRNG (True Random Number Generator)
Quantis TRNG is a physical random number generator (RNG) exploiting quantum optics. It is available in USB, PCI and PCI Express versions.
physicsworld.com
How to make a quantum random-number generator from a mobile phone – physicsworld.com
Cheap, high-quality cameras could improve cryptography

[10:25]
There could be a CypherPoker “accessory pack” under some people’s trees for Christmas :stuck_out_tongue:

gmixxer [10:25 AM]
http://unenumerated.blogspot.ca/2006/03/shared-key-generation-using-quasars.html#links

[10:27]
http://szabo.best.vwh.net/perfect_compression.html

http://szabo.best.vwh.net/statistics.html

links are broken for me

[10:28]
last two i mean

[10:28]
ya cool

[10:29]
So you will REALLY wanna catch up on those articles or video (ideally both) I think and it will get you thinking on how to structure the whole of this.

[10:29]
because once you introduce stake with the competition of sites, then its completely comparable to what they are working on and I think that will get a lot of people excited

patrickb [10:32 AM]
I know that when I run the full setup my machine really revs up. Faster hardware would definitely be a plus when playing. If your rig is powerful enough you can even mine while playing — contributing both to the security of Ethereum and also your own bottom line.

gmixxer [10:33 AM]
ya thats special :slightly_smiling_face: I suggests sort of some poker specific hardware which is fine, as long as you have “pros” which means the games need to be profitable which they will be.

but you also have bot farms that could arise.

Now I have a proposed solution of a botnet that is a randomized player field (zoom poker)…

and an equillbrium is created that allows the bots to offer private games on the side that are effectively bot free

[10:34]
its a long way of saying that such hardware will be used to secure ethereum rather than collude the game

[10:34]
(and therefore secure cypher poker)

[10:35]
with proper checks and security its more profitable to secure the network than it is to infiltrate the industry with bots hardware/software to profit from the players.

gmixxer [10:46 AM]
I’m gonna save much of this dialogue onto my blog and maybe clean it up especially so I can show it to my friend.

He will be quite interested because he has a model for a site/governance that could be the crux of the implementation of cypherpoker.

I won’t advertise all this too much by there is some nice stuff I can send to some emerging indepent sites/owners and they can pass it to their devs…

the idea is to get a couple reputable projects working off of this. phil galfond, if you know of him, announced he would release a site in Q1. This back-end would save an immense hassle, eliminating a barrier he probably can’t otherwise surpass

Why RIO Poker Won’t Bootstrap and the Problem of LuckyChewyPoker

A few months ago Phil Galfond announced he would be launching a new poker site in the first quarter of 2017. Galfond gives his philosophy on what he thinks an ideal poker site should provide for the players which can be summed up in this point of his:

A poker site needs to believe in the dream of poker as a career.

However, and unfortunately, Galfond is yet to release any further details about anything related to this announcement.

Poker sites function like banks, and this suggests that their security must arise through evolution otherwise they won’t be able to securely store the accruing value. Since this evolution takes time its safe to suggest that either Galfond’s won’t be ready for any significant launch in early 2017 or Galfond’s team doesn’t understand this requirement for security.

Launching a site (or a bank!) involves a trial and error period akin to fixing a very badly/complexly damaged hot air balloon. It won’t fill up until its completely (or at least nearly) patched, but there is no way to tell if its patched enough but by trying to fill it up with air after each patch attempt is made (weak analogy perhaps but I suspect it serves its purpose).

LuckyChewy Poker

More recently Andrew Lichtenberger aka LuckyChewy released a play money site called LuckyChewyPoker. The first noticeable difference between Chewy’s venture and Galfonds, is there is already a working poker software and also a reasonable road map for future evolution:

chewy.JPG

That is to say there is at least a show of some understanding that a poker site MUST evolve in order to be secure enough to attract players. The players act as a market that audits the security of the site (which functions in this sense like a bank in that the more trusted* the more reserves it accrues etc.).

In this sense Phil Galfond has put the cart before the horse where as LuckyChewy poker has taken the more realistic (therefore plausible!) approach.

The Problem of LuckyChewyPoker

However, being a PLAY-MONEY only site, LuckyChewyPoker still suffers from the problem of not being able to evolve their security in regard to ACTUAL value accruing in their model from players deposits and rake etc. Security in many different vectors can still be evolved, but until the model can accept player deposits (fiat, bitcoin, or other types of value etc.) there can’t really be any evolution of the security in this regard.

This problem however could be completely mitigated if the project worked off the decentralized p2p infrastructure that Patrick Bay is creating aka Cypher Poker.

*trust in this sense is effectively transmuted to valued by the players

 

A Natural Solution to the Problem of Encumbrance

Dialogue in regard to The Problem of Encumbrance:

Yes so you can make it so they have to interact etc. Now that is useful, and to the point, but it doesn’t solve the problem, because there is still some implied encumbrance.

So here’s the thing.

If that problem is described well enough, and the description encapsulates it…

[10:29]
Then I’d invoke this rule that is an extension of szabo’s “trusted third parties are security holes”…

But rather that trustworthy 3rd parties are NOT security holes.

[10:30]
We’ve talked about 3rd parties for insurance on the escrow which is also an example, and here we could have a 3rd party do reputation management, set up games, and police this behavior.

Because its not fatal to the security or integrity of the game/protocol, it CAN be outsourced

[10:31]
Now if i haven’t described the problem well enough or encapsulated it, then this is a moot point, but since its getting simpler I suspect we have…

and so this would be an interesting point, very interesting….

[10:33]
because people will NOT want to agree with it, but its necessary and I think its necessary of bitcoin as well. Where people might say “But satoshi, you have to have a secure wallet and secure exchanges”.

Wallet providers and exchanges “trusted” third parties…

but because they arose on a market they are trustworthy.

[10:37]
So if this is neat and tidy enough, there is a solution with “promissory notes” which I think are best called something like a “committed promissory” (to imply there cannot be a reneg), and the only draw back is that you can encumber the game (I call it encumber because its slightly different than a player actually timebanking every hand).

But there is an mvp there, that works among friendly players.

This means for example, if two well known pros want to play a hu match, they can play essentially rake free, provided they trust each other enough not to encumber the game.

In this example encumbering the game would be pretty silly and pointless!

[10:38]
Trust isn’t really a big issue, and if a players acts malicious the cost to the honest player is effectively zero.

The problem of encumbrance in a mental poker implementation

It’s seems the philosophy of LC’s suits a mental poker implementation perfectly, with the assumption there is a sufficient escrow from all players that creates a disincentive for a player to hide their private key/secret (at anytime during or at the end of the hand).

Each player, on their turn, adds their action to the hand-history, sign’s it (hashes it with a private key), and passes the action and signed commitment through a fast messenger service.

There is no problem of integrity for the game because a challenge can be verified with a smart contract and escrows lost from the player that breaches the protocol/rules.

An action can be assumed verified if the next player acts upon it so the only consideration is ‘the player who’s turn it is and the next player to act after them’.

The problem then is only when a player, who’s turn it is to act, claims to have sent a fast msg, but the player next to act also claims to have never received it.

We can’t figure out who is the malicious player in any meaningful way, either the player to act or the subsequent player.

However the malicious attack is limited only to encumbering the game flow until the actions/transactions are confirmed via the block (and in relation to time allowed in a poker game to make a decision). <<< sorry for bad technical knowledge here.

In other words the only attack possible is timebanking every hand.

I wonder if problem is well encapsulated and explained because I think there might be a natural solution to it.

(some thoughts on different types of type arise such as being able to maliciously stalling the game beyond what the rules of the game normally allowed for a timebank)

To: playercouncil@runitonce.com

Please consider sect7G from 2p2, he is probably my number one choice from all of the posters on that forum. He is a moral player and understands the poker economy and the player’s perspective well enough.

Poker’s Value Measurement Problem

Do you know what it takes to make a successful site? Why can no other site rise to compete with PokerStars/Amaya?

Mason Malmuth suggests there is a “sweet spot” in regard to rake policies, do you know how to define this problem and solve it? http://www.twoplustwo.com/magazine/issue141/

The 180 mttsng turbo field was long thought to be an entry point for aspiring mtt pros, but I have shown that over the years the amount of games the highest volume players play in a year is such that their variance is TOO HIGH for it to be considered skilled money.

This suggests mtts are even more suspect since their variance is higher.

HOW can the “sweet spot” be targeted by sites, if there isn’t enough empirical data to formulate an optimal rake/winrate solution?

What is Security?

And how can it arise.

Do we know that the bitcoin project, that most people believe to be an impossible technology (money governments don’t control), has never been hacked for its 7 years of existence?

Why is bitcoin so secure?

If you want to build a SUCCESSFUL poker site, you have to be prepared to be GAMED from many different attack vectors.

Your site will be hacked from all angles, not just the software, but also your promotions, the games you offer, the rules you state. You will be attacked politically and through legislation.

How was bitcoin designed to be protected from all vectors?

Because of the pressure of a competitive and successful model, security must necessarily EVOLVE. Do we understand how to create a model based on the evolution of security?

Patrick Bay: Building A New Paradigm for Poker

Please consider reaching out to, and consulting with, Patrick Bay: https://ca.linkedin.com/in/patrickbay

Patrick worked for Amaya and has already helped bring products to the market. Lately he has been working on a decentralized infrastructure/platform for online poker which ALL sites can use in order to move beyond the legacy server models and centralized online poker.

Patrick’s work IS conjecturally secure from all such attack vectors mentioned above, but the paradigm is difficult to understand.

Reach out to him. He understands the future of poker better than anyone you will find.

Poker’s Greatest Lawyer

Also reach out to David Gzesh: https://www.youtube.com/watch?v=qcfhzcF6RcE

David Gzesh discusses online gambling at the Bitcoin 2013 Conference in San Jose, CA, May 19, 2013, hosted by the Bitcoin Foundation. For more information on joining …

He ALSO understands the future of poker better than anyone you will find. He has been around the industry since before black friday, and regularly engages in discussion and dialogue on the future technology that will shape poker.

Solving for Mason’s “Sweet Spot”

In order to find the optimal policies for fostering the poker economy there needs to be a new paradigm brought about.  This paradigm is both about changing the way we view that game but ALSO about translating that view, though programming language, into a software solution.

Who understands this evolution?

 

 

Re-Visiting 180 man Leaderboard Results (for 2015)

My most viewed article is Observations on 180 Man Turbo MTTSNG Variance. The article details a comparison between the 2013 leaderboards and the 2014 leaderboards on sharkscope. This writing compares those observations with the 2015 leaderboards.

 

ss leaderboards.JPG

By looking at the “count” which is games played we can see from the “Any Game 7 or More Tables” category and the “$5-$15” stakes level, the most games played is by Zombeeee @ ~15.6k games. The top 10 players for most count have between this and 10k games and the 20th player has played 8.6k.

In 2014 for the same category players lammas111 played 26k games, the top 10 players had at least over 16k games, and the 20th player played 12.6k games.

The conclusion of the original article was that players do not have a big enough sample size to show the games are (reasonably) profitable and there is no single player with a big enough sample size to give any confidence for a true winrate statistic.

It seems the popularity of the 180 games are declining and so this conclusion is only strengthened as less games are played/playable.

Therefore I conclude there are no longer any 180 man mttsng turbo professionals making a living on skilled money. That is to say the variance with the attainable sample sizes are such that no one can conclude with any empirical evidence that they are a skilled/winning player.

Escrow Function Consensus Game

Someone like the function(claim or refund).  That the players each put in their bets, and can refund them until the round is satisfied (either by meeting the number of players requirements or the amount of money in the “pot).

Once the “betting” round is over, the idea is there is a vote, and consensus of a certain threshold is needed in order to refund the money.

If no consensus is reached another round is played with the possibility of more players and equity added, and therefore  a possible shift in ability to meet a consensus.

There could be the possibility to make side deals or to use smart contracts to make such deals.

Would be interesting to think about with an asset that could appreciate a little or a lot over a short or long period of time.