Myetherwallet
如何為智能合約添加安全性?
我部署了這個合約並使用 ganache 與之互動。
pragma solidity ^0.4.0; contract Counter { int private count = 0; function incrementCounter() public { count += 1; } function decrementCounter() public { count -= 1; } function getCount() public constant returns (int) { return count; } }
但是,在與合約互動時,Ganache 上的任何賬戶都可以與之互動並使用函式增量。如何僅從 Ganache 定義一個帳戶才能更改此功能?我只是想為契約添加一些安全性?
這是我遵循的智能合約的連結: https ://medium.com/crypto-currently/build-your-first-smart-contract-fc36a8ff50ca
看看
Ownable
圖書館https://github.com/OpenZeppelin/openzeppelin-solidity/blob/master/contracts/ownership/Ownable.sol。它為您提供了一個名為的修飾符onlyOwner
,您可以將其添加到需要限制訪問的所有函式中。使用
onlyOwner
修飾符會阻止除所有者之外的任何人的訪問。預設情況下,所有者是創建契約的人。還有其他替代方案,但
Ownable
可能是最廣泛使用和接受的解決方案。
您可以向函式添加約束,如下所示:
pragma solidity ^0.4.0; contract Counter { int private count = 0; address public admin; constructor() public { admin = msg.sender; } function incrementCounter() public { require(msg.sender==admin); count += 1; } function decrementCounter() public { require(msg.sender==admin); count -= 1; } function getCount() public constant returns (int) { return count; } }
在建構子中,admin 被設置為部署合約的賬戶。然後,
require(msg.sender==admin)
將檢查嘗試執行功能的帳戶是否是您系統的管理員,如果不是,則會拋出並且不會執行該功能。希望這可以幫助。