Myetherwallet

如何為智能合約添加安全性?

  • August 14, 2018

我部署了這個合約並使用 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)將檢查嘗試執行功能的帳戶是否是您系統的管理員,如果不是,則會拋出並且不會執行該功能。

希望這可以幫助。

引用自:https://ethereum.stackexchange.com/questions/56475