背景
在線博彩一直是一個蓬勃發(fā)展向抢,屢禁不止的行業(yè)(在很多國家屬于合法行業(yè))固逗。然而左权,對于賭徒來說,除了可能受到可能的監(jiān)管限制以外褐墅,“莊家”作弊或者跑路也是其可能遭受損失的一大原因拆檬。區(qū)塊鏈集去中心化,不可篡改妥凳,可追溯等特性于一身竟贯,是解決類似信任問題的天然方法。
優(yōu)勢
在線博彩主要涉及到的重要數(shù)據(jù)包括逝钥,游戲結(jié)果屑那,輸贏判定,支付結(jié)算等艘款。區(qū)塊鏈的優(yōu)勢主要在于:
1. 透明度和信任持际。
中心化的應(yīng)用的數(shù)據(jù)完全是黑盒,用戶權(quán)益很難保證哗咆。而基于區(qū)塊鏈的智能合約技術(shù)蜘欲,由于不可篡改和公開透明性,任意用戶均可審計合約代碼和查看交易數(shù)據(jù)岳枷。
2. 減少詐騙芒填。
對于基于多節(jié)點共同維護的區(qū)塊鏈賬本而言,任何人無法單方面篡改數(shù)據(jù)空繁,而通過圖靈完備的智能合約添加相關(guān)限制殿衰,去除兌付風險。
3. 加密貨幣支付盛泡。
加密貨幣是區(qū)塊鏈的血液闷祥,所有結(jié)算可直接通過合約代幣直接結(jié)算。
4. 匿名性。
基于公私鑰技術(shù)凯砍,任何人可以隨意生成錢包地址箱硕,來作為用戶身份標識,不需要受到任何監(jiān)管以及KYC驗證悟衩。通過掌控錢包的私鑰剧罩,用戶可以完全控制這個賬戶的行為。當然座泳,也正是這種便捷的特性惠昔,一旦用戶丟失私鑰將徹底失去賬戶控制權(quán),丟失錢包數(shù)字資產(chǎn)挑势。此外镇防,由于監(jiān)管機構(gòu)無法進行有效監(jiān)管,加密貨幣在很多國家被禁止流通潮饱。
5. 增加可訪問性来氧。
中心化的博彩網(wǎng)站可直接通過封鎖IP、域名等進行查封香拉,此外啦扬,用戶很多時候需要通過中間代理商來進行投注。區(qū)塊鏈的多中心特性缕溉,使整個區(qū)塊鏈網(wǎng)絡(luò)始終具有可用性考传,用戶可直接向智能合約發(fā)起交易,不受任何第三方約束证鸥。
公平性證明
區(qū)塊鏈技術(shù)的核心在于密碼學(xué)上的可證明性,在應(yīng)用到博彩行業(yè)時勤晚,最重要的數(shù)據(jù)就是開獎結(jié)果枉层。因此,如何證明這個開獎結(jié)果是基于一個絕對公平的隨機源赐写,不管是莊家還是玩家都無法作弊呢鸟蜡?
筆者研究了bustabit和satoshidice等多個botcoin gambling項目,其原理都大同小異挺邀。
流程設(shè)計
- 生成服務(wù)器種子序列{
$serverSeed_i$
}揉忘。假設(shè)一個游戲有N
局,那么服務(wù)器先生成一個$serverSeed_0$
, 然后連續(xù)使用hash
函數(shù)N
次端铛,得到$serverSeed_0$
,$serverSeed_1$
,...,$serverSeed_N$
泣矛,此時公布$serverSeed_N$
出去,使用$serverSeed_{N-1}$
作為第一局的服務(wù)器種子 - 選定一個未發(fā)生的隨機源作為
clientSeed
- 基于1,2生成的兩個種子數(shù)據(jù)禾蚕,通過
hash
運算您朽,計算游戲結(jié)果。這里以bustabit為例:
function getResult(serverSeed, clientSeed) {
var hash = crypto.createHmac('sha256', serverSeed).update(clientSeed).digest('hex');
// In 1 of 101 games the game crashes instantly.
if (divisible(hash, 101))
return 0;
// Use the most significant 52-bit from the hash to calculate the crash point
var h = parseInt(hash.slice(0,52/4),16);
var e = Math.pow(2,52);
return Math.floor((100 * e - h) / (e - h));
};
- 公布游戲結(jié)果以及本輪使用的
serverSeed
换淆,并使用serverSeed
鏈的前一個種子來作為新的一局的serverseed
補充說明:這里
serverSeed
一般可選擇某個比特幣錢包的私鑰來作為初始值計算hash
鏈哗总。而對于確定clientSeed
所需的未發(fā)生的公共可信的隨機源的選取几颜,可選取未來某個比特幣區(qū)塊的blockHeight
,亦或者未到達的某一天的股市點數(shù)的hash
值讯屈,等等蛋哭。
公平性分析
基于上述的流程分析不難看出,“莊家”在確定了serverSeed
的hash
鏈之后涮母,此時由于clientSeed
尚未確定谆趾,因此他無法通過篩選合適的{$serverSeed_i$
}序列來使得開獎結(jié)果更符合自己的利益。
而一旦clientSeed
的值確定下來哈蝇,由于“莊家”一早就公布了$serverSeed_N$
,已無法更改或重置整個{$serverSeed_i$
}序列(基于hash
函數(shù)的不可碰撞性)棺妓。
當游戲結(jié)束時,服務(wù)器公布了本輪用到的serverSeed
, 用戶可驗證:
- 基于該
serverSeed
和clientSeed
炮赦,計算出來的游戲結(jié)果是否和開獎結(jié)果相符怜跑; - 由于上一輪游戲公布的
$serverSeed_{i+1}$
正是本輪的服務(wù)器種子的hash
值,因此用戶可驗證以下公式是否成立
hash(serverSeed_{i})==serverSeed_{i+1}
風險控制
我們不妨分析下流程設(shè)計中提到的getResult
函數(shù)的邏輯吠勘。首先基于本輪的serverSeed
和clientSeed
經(jīng)過hash
運算得到一個名為hash
的變量性芬,取其16進制表示的前13位(即2進制的前52位),因此它的值在0到$2^{52}$
之間剧防。而返回值是100到$2^{52}$
之間的一個雙曲函數(shù):
通過定積分計算植锉,其均值在36左右,而且當生成的h
值越接近$2^{52}$
時峭拘,取值接近無窮大俊庇。因此,莊家添加了以下風控邏輯:
Under some circumstances, the server will force people to cash out.
The most common reason is that the game multiplier has gotten so large that we are risking too much of our bankroll (1.125%). If a player has won more than 0.75% of the bankroll, that player is also forced to cash out his winnings.
Another possible reason is unexpected server problems. The server attempts to cash everyone out and then pause once it encounters an unexpected issue.
考慮到雙曲函數(shù)的特性鸡挠,在絕大部分取值區(qū)域得到的計算結(jié)果比較平均辉饱,添加以上風控邏輯,對單局用戶整體收益閥值和單用戶收益閥值做控制拣展,一旦超出就強制結(jié)束彭沼,極大的降低了賠付成本。而用戶在單局盈利較大的情況下對此也不會有明顯的反感备埃。
總結(jié)
區(qū)塊鏈的透明化姓惑,代幣支付能有效解決博彩行業(yè)的諸多痛點,目前博彩應(yīng)用也是dapp應(yīng)用的一大方向按脚。對于bustabit這種半中心化的博彩項目來說于毙,如何自證公平性是最重要的問題。本文分析了其公平性設(shè)計乘寒,從理論上保證了“莊家”無作弊的可能望众。隨機源的選取,哈希鏈種子序列的設(shè)計,以及開獎結(jié)果的設(shè)計烂翰,風控邏輯等夯缺,都有其精妙之處,值得學(xué)習(xí)甘耿。
參考文獻
bustabit1.0 seeding event topic