EpicDice Fairness

View this thread on: d.buzz | hive.blog | peakd.com | ecency.com
·@epicdice·
0.000 HBD
EpicDice Fairness
<center>![Artboard 5@20x.png](https://cdn.steemitimages.com/DQmbzs8Wbbm1WE5qwHTwd4iRqBwicQCdf5ETZtrAkozDRC4/Artboard%205@20x.png)</center>

EpicDice is a decentralized gaming platform built on top of Steem blockchain with absolute transparency and fairness. Join the most epic fun today!

<center>https://epicdice.io/</center>
---

---

## 

EpicDice has been online for about 4 months since its grand launching. The gaming platform has accumulated over 455,000 transactions and over 16.2M total volume with STEEM and SBD combined! Although the game has adopted the most simple randomness generation mechanism, yet not everyone possesses the knowledge of blockchain. With the considerably *large* data the game has generated thus far, we think this is a good opportunity for a walkthrough how EpicDice's fairness is being practised, in layman terms.

## Transaction ID is the only source to generate rolled number

When a user fires a bet(transaction) to the house account, the block contains that transaction has to be verified and signed by the Steem witness to be considered valid. In the process of block signing, various information of a particular transaction like `ref_block_num`, `ref_block_prefix`, `expiration` and so on, contributed in the generation of a fully random 40 hex digits `trx_id`. Read more about this process in [Steem Developer Portal](https://developers.steem.io/tutorials-recipes/understanding-transaction-status).

This very blockchain-generated `trx_id` is what EpicDice would solely use to generate a rolled number via formula below:

```
var transId ='<replace with trx_id>'

var result = 1000000
var offset = 0
var length = 5
var endValue = offset + length
var chop
var finalResult
while (result > 999999) {
chop = transId.substring(offset, endValue)
offset += 5
endValue = offset + length
result = parseInt(chop, 16)
finalResult = result % (10000) / 100
finalResult = Math.round(finalResult)
console.log("finalResult : " + finalResult)
if (finalResult === 0) {
result = 1000000
}
}
```

You can find this formula in "Fairness" section of the game site and verify all your bet result instantly.

For interested souls in finding out how technically a `trx_id` is computed, the answer lies in [Steem Official GitHub Repository](https://github.com/steemit/steem).

## But how is this system "provably-fair"?

Now you know how a transaction ID is generated. Unlike other platforms, EpicDice does not add a custom client/server seed or nuances in the random number generation. It shows that the house would have **zero possibility to manipulate the outcome**.

You placed a bet and get a rolled number from the game site. Retrieve the transaction ID from data explorer like [steemd.com](https://steemd.com), input the ID into the formula above in a javascript compiler like [playcode.io](https://playcode.io/online-javascript-editor) and run it. The generated rolled number from the script would be exactly same as the one you get from our gaming site. 

You confirmed that the house did not modify anything in the process. Hence, fairness is proven.

Or better yet, just utilize the fairness tool on the game site to make your life easier.

## Data analysis of rolled numbers occurrence in EpicDice since the very beginning

We've extracted the data from chain a few days ago for the data analysis we are about to present. This dataset recorded every single bet ever sent to @epicdice starting from `2019-02-28 16:24:10.967494` until `2019-06-13 13:37:26.029482`(UTC). Download the excel sheet [here](https://mega.nz/#!z8EDSYCY!yS_svuOIULFxBNZRNpo_nwMsczQPqaWNFmvMnZIfVek).

Key columns in the dataset as follows:
- `refTransactionId`: the `trx_id` which you can verify in data explorer
- `user`: name of the player
- `rollResult`: generated rolled number out of `refTransactionId`
- `winLost`: `0` is lost while `1` is win

![EXCEL_2019-06-15_18-05-20.png](https://cdn.steemitimages.com/DQmeoTRekzpu2mknKfA7YgaTqggHghgV1SnMekbbjxHiW5m/EXCEL_2019-06-15_18-05-20.png)

Over the period, EpicDice has received 455,519 transactions of wager and the total amount is 16,215,981.400(STEEM + SBD). The full range of rolling numbers (1 to 100) is divided into 10 groups with 10 numbers in each of it. The goal of this analysis is to verify whether the occurrence of rolled numbers is evenly distributed across the range groups. In the perfect world, a totally random and fair algorithm should grant 10% occurrence to the 10 groups.

![EXCEL_2019-06-15_18-05-47.png](https://cdn.steemitimages.com/DQmZqshYEZ32o7RNnSZttaf3ujtHgNVMVb27hoeCfANEnZk/EXCEL_2019-06-15_18-05-47.png)

The graph shows that each category had a fair distribution as the lowest percentage was 9.56% while the highest was 10.10%. Merely a 0.54% deviation proves that there is absolutely no bias in random number generation. **Each roll stands a fair chance of getting a number ranging from 1 to 100.**

Ironically, when EpicDice was only supporting "rolling under" most of the time before the latest upgrade a few days ago, higher numbers like 95,96,97,98,99,100 used to be the killers to any bet when they were rolled. But they had the lowest occurrence at 9.56%.

## Absolute fairness is real

Let's summarize what we have covered so far in a few points:

- **Random number is generated solely using blockchain-generated transaction ID that is impossible for the house to mess with.**
- **Wager history analysis proved that there is zero bias against a certain range of numbers. Every roll is a fair play.**
- **Fairness of EpicDice is bullet-proof.**

## Earn EPC via delegation

EPC is the only token to earn from the daily dividend and prize pool in STEEM. **Every 1 SP delegation earns 2 EPC daily**. It takes one day for the delegation to be effective in order to receive the dividend, from the moment of delegation. This is the only way to be part of the dividend pool shareholders besides betting.

<center> Quick delegation via Steemconnect links below:</center>

<center>[100 SP](https://app.steemconnect.com/sign/delegateVestingShares?delegatee=epicdice&vesting_shares=100%20SP) | [500 SP](https://app.steemconnect.com/sign/delegateVestingShares?delegatee=epicdice&vesting_shares=500%20SP) | [1000 SP](https://app.steemconnect.com/sign/delegateVestingShares?delegatee=epicdice&vesting_shares=1000%20SP) | [5000 SP](https://app.steemconnect.com/sign/delegateVestingShares?delegatee=epicdice&vesting_shares=5000%20SP) | [10000 SP](https://app.steemconnect.com/sign/delegateVestingShares?delegatee=epicdice&vesting_shares=10000%20SP)</center>

---

<center>Join our Discord server for better communication.</center>

<center><a href="https://discordapp.com/invite/TjSencE"><img src="https://cdn.steemitimages.com/DQmW3Pw4t1ykfEBfVjXJc9L7kxMnVof97oS9ArZWE9LQUaA/output-onlinepngtools.png"></a></center>
👍 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,