Spineth is an ethereum based guessing game where two players play head to head in an attempt to win ether from each other.
Would you like to read how to play now?
After someone joins a game you have created, you have 24 hours to reveal your bet. If, for some reason, you do not reveal your bet in time, your opponent can choose to expire the game. This causes you to lose the maximum amount of your bet. The detailed game rules can be found in the How to play section at the bottom of the page.
Spineth uses an ethereum smart contract to control interactions between the contract creator and players of the game. The Spineth smart contract does not allow its creator to withdraw any eth from the contract at any time, nor does it allow the creator to destroy the contract and pull out the remaining eth. The only thing the contract creator can do is adjust the min and max bet limits. Your bet can only be won/lost according to the rules of play. We encourage all users to read the Spineth smart contract code. You can find the verified source code on etherscan.io by using the link at the bottom of the Spineth page. When using your ethereum plugin/browser we also encourage you to verify the contract address you are interacting with is the same as the one associated with the verified code on etherscan.io.
The Spineth site has been tested with Mist, Parity Browser Extension, Metamask (chrome) and Metamask (firefox). If you are having trouble using Spineth with any other ethereum provider, please let us know and we will do our best to add support for it. You can either open a github issue here or send us an email at firstname.lastname@example.org.
Signing this message can have dangerous side effects. Only sign messages from sites you fully trust with your entire account. This dangerous method will be removed in a future version. Read more here.
Spineth protects the bet of a game creator from other prospective players by hashing it with a secret value that only the game creator knows. This ensures a joining player can't know the creator's bet until after they have joined the game and committed to a bet of their own. One straight forward way to produce a secret is to have the creator use a passphrase. The main problem with a passphrase is that the creator has to remember it. If it is forgotten, it can never be recovered and the creator will never be able to reveal their bet.
To avoid this problem, Spineth generates secrets a different way. The game creator signs the unique game id associated with the game they are creating using their private key. This data is then hashed to produce a secret. These steps are all performed off chain. This signed data is a secret because it is impossible for anyone else to produce it unless they have the creator's private key. It can also be reproduced at any time by the creator by simply signing the game id again, so the creator doesn't have to remember anything.
But what does any of this have to do with the Metamask warning?
Spineth currently uses the eth_sign method of the ethereum web3 api, because it is the most widely supported method for signing data. The main problem with this signing method is that it is possible for a malicious DApp to have you sign specific data that could result in mathematically revealing parts of your private key. For example, signing "0" data. The concern is that the average user will not understand that signing this kind of data is necessarily bad, so Metamask has opted to show this scary warning to ensure a user will do the research to understand what they are doing. This problem has been widely discussed on various github threads, the most complete discussion can be found here.
So we just have to trust that Spineth will not try to reveal our private key?
window.web3.sha3(window.web3.toHex("Signing Spineth Game ID: " + gameId));
In addition to this, the ethereum dev community appears to be close to reaching consensus on a new data signing method. You can read about it here. Once this method is implemented by the major ethereum web3 providers, Spineth is planning to upgrade to this new method.
If you are using Mist, there is currently no support for a graphical eth_sign workflow. In this case, Spineth falls back to a passphrase. There is a large amount of discussion around eth_sign and introducing a new signing method to replace it. You can read about the new method here. We are hopeful that Mist will support this new signing method once it is released. Once this method is implemented by the major ethereum web3 providers, Spineth is planning to upgrade to this new method.
You can either open an issue on github here or you can send us an email at email@example.com.
The random number in each game is produced by generating a hash from the wheel bets of the players along with some other game information. This hash is used as a seed to a PRNG to produce the winning number of the game.
hash(BetPlayer1, BetPlayer2, ...) → Seed
generate(Seed) → RandomNumber
The creator's bet is not published to the blockchain until after someone has joined their game in order to prevent precalculation of outcomes. This is achieved by hashing the creator's bet with a secret value that only the creator can reproduce. This secret is created by signing some game specific data with the creator's private key, or if your ethereum plugin does not support the Spineth method for signing data, the secret is provided as a passphrase.
sign(UniqueGameID) → Secret
hash(Secret, Bet) → BetHash
When it is time for the creator to reveal their bet, they sign the same data to recreate their secret, or provide the same passphrase, allowing the contract to determine the bet that was made when the game was created.
hash(Secret, [0..19]) → Hashes
findBet(BetHash, Hashes) → Bet
This process ensures that the hash used to generate the winning number can never be precalculated by either player before placing their bet.
In each game, two players wager an agreed upon amount of ether while each betting on a number of a 19 sector wheel.
The Spineth smart contract then selects a winning number at random. Whichever player is the closest to the winning number will win a portion of their opponent's wager. This portion is 10% for each sector of the wheel the winner is closer to the winning number than their opponent.
An example game where you bet on 6, your opponent bet on 14, and the outcome was 4. Since you are 2 sectors away from the outcome and your opponent is 9 sectors away, you would win (9 - 2) * 10% = 70% of your opponents wager
The size of the wheel limits the maximum wager amount that can be won or lost to 90%. The Spineth smart contract charges a flat 2% fee on all winnings. In the event of a tie or loss, a player is not charged any fees.
The same game as above with bets reversed. In this case you would lose 70% of your wager. Since you lost, you don't pay any fees.
You can play Spineth by either creating a new game or joining an existing game. The process for each is described below.
To create a new game, click on the new game button under the Open Games section.
You will then be prompted for a wager in ether. Use the slider to select the wager amount you would like. You can also edit the wager amount directly by clicking on the number.
Wagers are restricted to the range 0.001 ETH - 10 ETH. These numbers may be changed in the future.
You will then be prompted for the wheel bet you would like to make. Click the wheel sector corresponding to the number you want in order to select it.
Your ethereum browser plugin will now prompt you to sign some data associated with the game you are about to create. This signed data is used to protect your wheel bet until after an opponent has joined your game. If your ethereum plugin doesn't support the Spineth method of data signing, you will be asked to provide a passphrase instead.
The list of games that can be joined are under the Open Games section.
Each game is represented by a colored circle. The text inside the circle indicates the required wager to play that game. Once you have found a game you want to join, click on it and you will be prompted for the wheel bet you want to make.
Games that you have created or joined that are not yet complete will appear in the Active Games section. Games in this section can be in several states, indicated by their visible text and hover text. Games that are glowing indicate action required by you.
A game can be in the wait state if it was created by you and you are waiting for an opponent to join. During this state and before an opponent joins your game, it's possible to cancel the game and have your wager returned to you. A game can also be in the waiting state if you joined it and you are waiting for the opponent to reveal their bet. During this state, an opponent has 24 hours to reveal their bet before they can be forced to forfeit the game.
A game in the reveal state indicates that you are the creator of a game that has been joined by an opponent. You must now reveal your bet to determine the outcome of the game. Your ethereum browser plugin will prompt you to sign the same data you signed when creating this game. If your ethereum plugin does not support the Spineth method of data signing, you will need to provide the same passphrase you used when you created the game instead. This signature/passphrase is used to verify and reveal your original bet. Once a game enters this state it can no longer be cancelled. If you choose not to reveal your bet for more than 24 hours, you can be forced to forfeit the game by your opponent.
A game in the expire state indicates that you joined a game and the creator has not revealed their bet for more than 24 hours. Expiring the game causes your opponent to lose by default, rewarding you the maximum possible earnings.
A game in the done state indicates that the game has completed and you can now withdraw your earnings. A game enters the done state by either having the creator reveal their bet, or by expiring the game.
The completed games section contains all games you have previously completed. Each game's text indicates whether you won, lost, or tied. You can click the game to review the details of the game outcome.
The recent games section contains some of the most recent games that have been completed by others. You can click the game to review the details of the game outcome.
Spineth is an ethereum based game of chance that allows it's users to wager ether against one another. User's can win or lose ether as prescribed by the rules of play. The detailed rules of play are provided in the How to Play link at the bottom of the Spineth website.
The Spineth smart contract is a fully autonomous entity that executes within the ethereum platform. User's interact with the Spineth smart contract via the ethereum platform. The Spineth website is provided as a frontend to interact with the Spineth smart contract. Spineth does not require or maintain any account information associated with the user; however, by interacting with the Spineth smart contract, the user understands that the ethereum blockchain will record information about their interactions with the Spineth smart contract. The user agrees that it is solely their responsibility to understand how the ethereum platform and smart contracts work.
All users are encouraged to read, review, and understand the Spineth smart contract source code. Smart contract source code can be found using the link at the bottom of the Spineth website.
Spineth is a game of chance and therefore is only available to users from juristictions where online gambling is permitted by law, where the user is the required age to participate in online gambling by law, and where usage of the ethereum platform is permitted by law. The user agrees that it is solely their responsibility to ensure their usage of Spineth is permitted by the laws and regulations where they reside.
Spineth is a game of chance involving ether, and therefore may result in the loss of ether funds. It is solely the user's responsibility to understand the rules and risks before playing. The user accepts these risks and agrees that Spineth is in no way liable either expressly or implicitly for any loss of funds the user experiences as a result of using Spineth.
Spineth uses the ethereum platform, a relatively new blockchain technology. As such, from time to time vulnerabilities in the ethereum platform may be found and exploited, which may result in losses to the user's funds. Spineth has no control over vulnerabilities discovered in the ethereum platform and does not provide any guarantee about the security of the ethereum platform. Is it solely the user's responsibility to be aware of developments in the ethereum platform and to understand the risks associated with its use. The user accepts these risks and agrees that Spineth is in no way liable either expressly or implicitly for any loss of funds the user experiences as a result of using Spineth via the ethereum platform.
The Spineth smart contract and Spineth website are provided as is without any implicit or explicit warranty of any kind. The user accepts that any flaws, defects, or bugs found in the Spineth smart contract or Spineth website code could result in the loss of their ether funds. The user accepts these risks and agrees that Spineth is in no way liable either expressly or implicitly for any loss of funds the user experiences as a result of any such deficiency in any Spineth code.
Detailed game rules are available in the How to Play section of the website. The user agrees it is solely their responsibility to fully read and understand the rules of play before using Spineth.
The Spineth smart contract charges a flat 2% fee on all ether winnings. In the event of a loss or tie, the user does not pay any fees.