Truffle-Console
Truffle 控制台:使用所有者以外的帳戶訪問合約
我有以下契約:
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]})