Solidity
我無法完全理解 nonce 在solidity 範例中的用法
我正在閱讀來自solidity docs的一些範例:docs。我遇到了這個功能:
function claimPayment(uint256 amount, uint256 nonce, bytes memory signature) external { require(!usedNonces[nonce]); usedNonces[nonce] = true; // this recreates the message that was signed on the client bytes32 message = prefixed(keccak256(abi.encodePacked(msg.sender, amount, nonce, this))); require(recoverSigner(message, signature) == owner); payable(msg.sender).transfer(amount); }
我的問題是:如何處理來自前端的隨機數?它是我使用 Math.random() 生成的隨機數嗎?還是 ethers.js 處理這個?如果是這樣,當我呼叫這個合約函式時,我必須傳遞什麼作為參數?
謝謝。
編輯#1:固定錯字
一般來說,乙太坊中有兩種類型的賬戶。EOA 和契約賬戶。
EOA 是錢包,合約賬戶是用於儲存合約的賬戶。
對於 EOA,nonce 等於 EOA 賬戶發送的交易數量。
而對於合約賬戶,nonce 等於合約賬戶保存的合約數量。
在乙太坊區塊鏈中,一個 EOA 賬戶不能用相同的 nonce 簽署兩個交易,這是為了防止重放攻擊。
您共享的連結中提到了它。
solidity 文件中的合約僅供參考如何驗證簽名。實際上,他們只是試圖解釋我們如何通過 ecrecover 在solidity 中驗證簽名。
如果你想提供唯一的隨機數,你可以在鏈下編寫一個唯一的數字生成器並從前端提供它。
告訴我它是否有幫助!