Solidity

鑄造代幣和 OnlyOwner - ERC20

  • December 6, 2020

我已經創建了一份基於標準鑄幣契約的契約,我的程式碼如下 -

 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。

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