Solidity
鑄造代幣和 OnlyOwner - ERC20
我已經創建了一份基於標準鑄幣契約的契約,我的程式碼如下 -
modifier canMint() { require(!mintingFinished); _; } /** * Function to mint tokens * @param _to The address that will recieve the minted tokens. * @param _amount The amount of tokens to mint. * @return A boolean that indicates if the operation was successful. */ function mint(address _to, uint256 _amount) onlyOwner canMint returns (bool) { totalSupply = totalSupply.add(_amount); balances[_to] = balances[_to].add(_amount); Mint(_to, _amount); return true; } /** * Function to stop minting new tokens. * @return True if the operation was successful. */ function finishMinting() onlyOwner returns (bool) { mintingFinished = true; MintFinished(); return true; }
我直覺地理解 onlyOwner 的意思,但是這實際上是如何在實踐中強制執行的,以防止任何人只鑄造硬幣?
我打算通過 myetherwallet 進行部署。因此,我將擁有任何憑據,並可通過該系統獲得。
一旦我通過 myetherwallet 進行部署,我就需要以某種方式執行合約。通常在測試中我使用 geth 但對於完整的乙太坊系統我不能這樣做。
那麼我將如何實際執行finishMinting等?是否有用於生產乙太坊的命令行選項,或者我是否需要 React 中的 Web3 介面或類似的東西,然後我如何確認我是唯一的所有者?
如果您已從 Zeppelin Solidity 獲取契約,那麼應該有一個名為 Ownable 的契約。在該契約中,有一個名為 onlyOwner 的修飾符,契約應如下所示:
address public owner; function Ownable() public { owner = msg.sender; //ownership is assigned to the address used to deploy contract } modifier onlyOwner { require(owner == msg.sender); //if msg.sender != owner, then mint function will fail to execute. _; }
您會注意到 onlyOwner 在“mint”函式簽名中。修飾符用於在執行任何函式體之前檢查 msg.sender 是否是所有者。
我解決了這個問題 - 它是 coinbase 帳戶。實際上它是預設帳戶。我使用了 eth.defaultAccount = eth.coinbase。