Truffle-Console

Truffle 控制台:使用所有者以外的帳戶訪問合約

  • January 18, 2021

我有以下契約:

pragma solidity >= 0.5.0 < 0.7.0;

contract SimpleContract {
 string  public name;
 address private owner;
 constructor() public {
    name = 'abs'; 
    owner = msg.sender; 
 }
 function getName() public view returns(string memory) {
     return (name);
  }
  modifier onlyOwner(){
     require(msg.sender == owner);
     _;
  }

  function changeName(string memory _name) public onlyOwner{
     name = _name;
  }
}

如果我通過所有者的帳戶訪問它可以工作:

truffle(development)> await SimpleContract.getName()
‘abs’

但我想通過非所有者訪問這些功能。我正在嘗試以下操作:

松露(開發)>等待SimpleContract.start({from:web3.acc1})拋出:TypeError:SimpleContract.start不是evalmachine的函式。:1:24

松露(開發)> 等待 web3.eth.accounts

$$ 1 $$.SimpleContract.getName(); 拋出:TypeError:無法在 evalmachine 讀取未定義的屬性“SimpleContract”。:1:30 重入:

有人請指導我如何使用非所有者訪問契約。

祖爾菲。

首先,您需要檢索帳戶:

web3.eth.getAccounts().then(function(acc){ accounts = acc })

然後,例如,如果您嘗試changeName()從與合約創建者不同的地址呼叫該函式,則交易將恢復:

await SimpleContract.changeName('Sergi', {from: accounts[2]})

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