Ethereum-Wallet-Dapp
我可以限制使用者在智能合約中只進行一次交易嗎?
例如,在一個投票 dapp 中,我只希望一個地址進行一票。我的疑問是我是否可以將消息發送者的所有地址儲存在一個數組中並在投票前進行檢查,從而只允許一個人投一票?/
無界數組循環很糟糕,一旦數組中有足夠多的元素,您最終可能會超過塊氣體限制。
您應該使用映射。
mapping(address => bool) alreadyVoted;
然後在您的契約中,您只需在他們投票時將布爾值翻轉為真。
modifier notVoted() { require(!alreadyVoted[msg.sender]); _; } function vote(uint option) public notVoted() { alreadyVoted[msg.sender] = true; ... }
您似乎在地址和使用者之間放置了等號。但是,如果您設置此限制(一個地址一票),則沒有什麼可以阻止使用者創建多個地址並繞過您的強制執行。身份管理是區塊鏈中一個正在進行的研究課題,希望可以幫助您完成這項任務。