簡體   English   中英

Solidity 編譯錯誤。 (合同應標記為摘要。)

[英]Solidity compile error. (Contract should be marked as abstract.)

我有兩個問題。

1)我收到以下錯誤:

TypeError: Contract "MyToken" should be marked as abstract.
 --> contracts/MyToken.sol:8:1:

根據我的理解,當有一個未實現的 function 時,合約應該是抽象的。 在這里,我有 function foo。 但仍然收到此錯誤?

2)我還想編寫一個將 totalSupply_ 傳遞給合同的構造函數。 是否可以按照我的方式實施?

// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.0;

//import '@openzeppelin/contracts/token/ERC20/IERC20.sol';
import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

contract MyToken is ERC20 {

    uint256 private _totalSupply;
    string private _name;
    string private _symbol;
    constructor(string memory name_,string memory symbol_, uint totalSupply_ ) {
        _name = name_;
        _symbol = symbol_;
        _totalSupply = totalSupply_;
    }

    function foo() external  returns (uint) {
        uint temp;
        temp = 1+1;
        return temp;
    }
}

您是從ERC20繼承的,但您沒有調用它的構造函數

constructor(string memory name_,string memory symbol_,uint totalSupply_)ERC20("name","SYM") {
     _name = name_;
    _symbol = symbol_;
    _totalSupply = totalSupply_;
}

在您的情況下,您必須調用ERC20("name","SYM")因為ERC20是從abstract Context class 繼承的。

contract ERC20 is Context, IERC20, IERC20Metadata {

如果您沒有從Context繼承,則不必調用ERC20("name","SYM")

contract ERC20 is IERC20, IERC20Metadata {

由於您正在調用ERC20("name","SYM")您實際上是在設置名稱和符號,因此您不必在MyToken構造函數中設置它們:

uint256 private _totalSupply;
constructor(uint totalSupply_ )ERC20("name","SYM") {
    _totalSupply = totalSupply_;
}

嘗試這個:

// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.0;

//import '@openzeppelin/contracts/token/ERC20/IERC20.sol';
import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

contract MyToken is ERC20 {

    uint256 private _totalSupply;
    constructor(string memory name_,string memory symbol_, uint totalSupply_ )  ERC20(name_, symbol_) {
        _totalSupply = totalSupply_;
    }

    function foo() external  returns (uint) {
      uint temp;
      temp = 1+1;
      return temp;
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM