前面幾篇文章季春,我們談的都是技術(shù)問題馒胆;這篇文章,我想談?wù)勎覍apps中智能合約開源的觀點和立場問題讯沈。
為什么智能合約應(yīng)當(dāng)開源
任何代碼都可能存在貓膩
般渡,注意我沒有用漏洞
這個詞;這個貓膩
也可能是漏洞芙盘,也可能是合約開發(fā)者本身想從用戶的賬號上得到些什么驯用。
我們知道合約的執(zhí)行,是由用戶或者其他合約發(fā)送action消息而啟動的儒老。用戶在發(fā)送action消息的時候蝴乔,會用某個許可對該交易進行簽名;于是合約的對應(yīng)的action handler也就是在用戶的某個許可下進行的驮樊。不管這個許可是什么薇正、有什么權(quán)限片酝,如果這個許可下面有什么可以利用的貓膩,合約就可能因此而損害用戶的利益挖腰。就以上面的狼人殺案例來說雕沿,用戶很可能一不小心就把自己的某個權(quán)限比較大的許可授權(quán)給了合約。
再舉個具體的例子吧猴仑。比如目前EOSBet
這類游戲审轮,如何判斷輸贏,概率的計算是否真如官網(wǎng)說的是公平的呢辽俗?如果沒有把合約代碼開源疾渣,誰也無法肯定,說不定人家表面上說概率是49%崖飘,私下里卻把概率調(diào)到48%呢榴捡,這種微小的差距,用戶是很難感知的朱浴。
那么這類游戲如果不開源吊圾,就和采不采用區(qū)塊鏈沒有太大關(guān)系,采用區(qū)塊鏈就只是噱頭了翰蠢;雖然你能看到你的下注記錄项乒,但卻無法知道每局游戲中,你是怎么贏躏筏、怎么輸?shù)陌謇觯虼艘簿蜔o法判斷官方有沒有作惡。
開源還需源碼驗證功能
開源就夠了嗎趁尼?
還不夠埃碱,因為項目方很有可能公開的是一套代碼,而實際使用的是改了參數(shù)的另一套代碼酥泞。EOS有個功能挺好砚殿,它可以給每個編譯后的代碼都生成了一個hash,如果源碼有一點點改動芝囤,導(dǎo)致編譯后結(jié)果發(fā)生變化似炎,那么這個hash值也會發(fā)生變化。也就是說悯姊,我們可以通過hash值有沒有變化羡藐,來判斷項目方開源的和實際使用的代碼是否是同一個套。
荊凱大神有篇文章悯许,提到了eospark提供源碼驗證功能仆嗦。這對于社區(qū)來說,是個很好的功能先壕。eospark正是利用上面介紹的原理瘩扼,看檢測項目方提供的源碼是否與官方部署的合約一致谆甜。如果不一致,eospark會給出警告提示:
希望能有更多的站點提供這種源碼驗證功能集绰,也希望項目方都能把合約源碼公開出來规辱,接受社區(qū)的監(jiān)督。
合約開發(fā)者的準(zhǔn)則
作為合約的開發(fā)者來說栽燕,我們應(yīng)該堅持不作惡的原則罕袋,并敢于把代碼開源出來。纫谅;這樣炫贤,一方面溅固,用戶也會比較放心使用我們的服務(wù)付秕;另一方面,我們自己也能問心無愧侍郭。
簡介:不羈询吴,一名程序員;專研EOS技術(shù)亮元,玩轉(zhuǎn)EOS智能合約開發(fā)猛计。
微信公眾號:know_it_well
知識星球地址:https://t.zsxq.com/QvbuzFM