如何讓使用者信任我的合約和我?
我買了一張參加 StrangeLoop 2017 的門票(IMO,那裡最好的會議之一),但出現了一些問題,我不能再參加了。
由於我正在學習乙太坊,我認為使用可證明是公平且可公開審計的智能合約來抽獎可能是一個很好、有趣的主意。
這個想法是,人們會通過向合約發送 X 數量的乙太幣來購買抽獎券,一旦截止日期結束,合約本身就會隨機選擇一個獲勝者。但我想知道…
如果我是有興趣參加抽獎的人……我怎麼能相信如果中獎了我真的會收到會議門票?
換句話說,除了信任契約之外,在這種情況下,我還需要人們信任我。
為了獲得使用者的信任,我可以在契約本身中實施什麼嗎?
只是在這里大聲思考,但智能合約可以將錢存入託管,當使用者獲得 tix 時,他們可以釋放它。你可以說服他們信任你,但他們如何說服你信任他們釋放託管。你不能,除非智能合約將託管放在託管中……無限遞歸。
更糟糕的問題是您無法生成隨機數。看看它,你會發現這並不容易。
您也許可以存入相當於抽獎券(或彩票本身)價格的押金,未經購買者在收到彩票後的同意,您無法取回該押金。您不僅可以鎖定您的存款,還可以鎖定抽獎的所有收益;僅當抽獎獲勝者致電
releaseFunds
功能或類似的。如果您有現場兌換,您可以在抽獎獲勝者解鎖金額後將其贈送給他們。您還可以包含“故障轉移”機制,以便如果第一個人在特定時間範圍內未能解鎖帳戶,無論出於何種原因,都會選擇新的抽獎贏家,等等。不幸的是,您必須被信任不要購買多張門票,以便您最終贏得自己的抽獎……所以可能需要燒掉一部分門票價格。那麼您將沒有動力購買超過1 - x
合法買家購買的彩票數量,其中 x 是已燒毀的抽獎券的比例。如果您想降低抽獎購買者的風險,您還可以讓相互信任的第三方仲裁者(eep!)呼叫
releaseFunds
。這仍然不能解決您可能操縱抽獎的問題。