1. 程式人生 > >一種基於類區塊鏈網路的抽獎的簡單構思

一種基於類區塊鏈網路的抽獎的簡單構思

前段時間的一元抽獎鬧得沸沸揚揚,近來差不多已經銷聲匿跡了。背後的原因不言自明,國家政策是一方面,但我想更多的還是因為這種抽獎後臺操縱的空間太大。最近翻舊聞時又翻到了批判一元奪寶的文章,為人性的貪婪感嘆之餘,想到如果是我做這樣的東西的話,會怎樣實現一個靠譜點的方案,要求是過程可靠,結果公平。

下面記錄一點粗淺的想法

假設我們有這樣一個區塊鏈網路,m個成員,n個記賬節點,每個成員賬戶上有一定的虛擬貨幣金額R。要求組建k個成員(k<m)的抽獎系統。

一、成員K1向全系統廣播發起抽獎活動A的邀請,彩票金額為f,獎池金額f*k-x (x為記賬節點獎勵),等待其餘成員加入。

二、成員K2~Kh(h>=k)響應邀請,K1~Kh組成臨時網路,互相檢查成員賬戶金額R是否滿足R>=f*3。如果有滿足要求成員人數大於或等於k,則前k個響應的符合要求的成員進行活動A,確定時間戳T1,否則繼續等待。

三、活動A中所有成員各隨機出一個256位長整數Q,用自己的私鑰對Q進行加密,生成字串QS。然後用自己的私鑰對活動A特徵signA進行簽名,生成簽名signAS。

signA形式:T1 k,f  K1,K2,K3....Kk QS

四、成員交換各自的成簽名signAS,形成活動A總賬本signAT

signAT:T1 k,f  K1:R1:QS1:signAS1 K2:R2:QS2:signAS2 K3:R3:QS3:signAS3 .... Kk:Rk:QSk:signASk

五、將signAT傳送給所有記賬節點,加入總賬本。

記賬規則為:

1、檢查signAT上記錄的各成員金額是否正確

2、記錄賬本,並將活動A的所有成員賬戶金額清零

六、活動A的成員確認賬本已提交後,向記賬節點提交自己在步驟三生成的長整數Q,記賬節點對照QS和signAS確認Q是否正確,若正確,則將成員的賬戶金額恢復為R-x/k -f( x為活動A的獎勵金額,k為活動人數,f為A的彩票金額,R為賬本中signAT記錄的成員賬戶原始金額 )

七、所有活動A的成員將自己的Q提交完成後,記賬節點計算Q1+Q2+Q3+....+Qk的和,並與k取模,得值v,成員Kv賬戶金額獲得金額f*k,第一個計算出結果的記賬節點獲得獎勵金額x。活動A結束。

幾點解釋:

1、記賬的細節參照現有區塊鏈專案的實現

2、要求檢查成員賬戶初始金額R是否滿足R>=f*3,是為了儘量避免步驟六中,最後一個提交的成員在未中獎的情況下拒絕提交自己的Q,造成真正的中間者無法領獎。即成員未中獎的損失f+x/k,遠小不提交Q初始值的損失R-x/k -f

3、以上只是個人腦洞,個人不想也沒有時間做具體實現,請勿較真。賭博違法,珍愛生命。