日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

Solidity智能合约案例——投票存在的问题

發(fā)布時(shí)間:2023/12/18 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Solidity智能合约案例——投票存在的问题 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

通過(guò)對(duì)Solidity官方文檔的學(xué)習(xí),發(fā)現(xiàn)投票案例代碼有些不夠嚴(yán)謹(jǐn),簡(jiǎn)要做以下說(shuō)明。

1. 調(diào)用者問(wèn)題

在vote函數(shù)中,如果是一個(gè)沒(méi)有投票權(quán)的地址(假設(shè)A地址)調(diào)用了vote 函數(shù),代碼也能順利執(zhí)行。
首先,A地址雖然沒(méi)有被chairperson 賦予投票權(quán),但是代碼也能正常獲取Voter 對(duì)象sender ,只不過(guò)sender的所有屬性值是對(duì)應(yīng)類型的默認(rèn)值,函數(shù)可以繼續(xù)執(zhí)行。

表1 Voter對(duì)象屬性對(duì)應(yīng)的默認(rèn)值

類型屬性取值
uintweight0
boolvotedfalse
uintvote0
addressdelegate0x0

接下來(lái),代碼將A 的voted設(shè)為true (sender.voted = true;),權(quán)重被累加到了對(duì)應(yīng)的提案票數(shù)上,我們會(huì)發(fā)現(xiàn),這對(duì)于投票結(jié)果并沒(méi)有什么影響(A 的weight 值為0),但是因?yàn)榇藭r(shí)A.voted = true ,當(dāng)主持人chairperson 試圖給A 賦予投票權(quán)時(shí)將無(wú)法正常執(zhí)行,這就導(dǎo)致A永久不能擁有投票權(quán),顯然這是不合適的。

2. 提案不存在

同樣在vote函數(shù)中,如果調(diào)用者輸入的參數(shù)proposal 并不存在(即proposal >= proposals.length),導(dǎo)致數(shù)組越界,雖然這不會(huì)給合約的安全性帶來(lái)問(wèn)題,但是會(huì)造成調(diào)用執(zhí)行失敗,顯然這不是我們希望看到的。

注意:

在delegate函數(shù)中也出現(xiàn)了上面兩個(gè)問(wèn)題,具體不再描述。

3. 提案票數(shù)相同

在獲取最高票數(shù)的提案編號(hào)winningProposal 和提案名稱winnerName 的方法中,如果出現(xiàn)兩個(gè)或者多個(gè)提案的票數(shù)最高且相同時(shí),只會(huì)返回編號(hào)靠前的提案編號(hào)。

代碼優(yōu)化請(qǐng)點(diǎn)這里查看

總結(jié)

以上是生活随笔為你收集整理的Solidity智能合约案例——投票存在的问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。