Solidity 中的抽象合约类型错误:没有参数传递给基本构造函数。指定参数或将“AssetAcquisition”标记为抽象

问题描述 投票:0回答:2

我遇到了一个 Solidity 合约的问题,其中的错误要求我将代码编写为摘要。摘要意味着我的代码将不可部署。

这是一份旨在转让资产和收购的合同。只是随机的东西!

import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol";
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol";
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol";
import './StringUtils.sol';

// @dev contract for rock,paper game0
contract AssetAcquisition is Ownable, ERC20 {
    string private _tokenname = "MATTokens";
    string private _tokensymbol = "MAT";
    address public _owner;
    uint randNonce = 0;
    uint modulus = 0;
    uint maxWaitTime = 100;

    struct Assets {
        address owner;
        address sender;
        address payable receiver;
        uint256 amountleft;
        uint256 datesent;
    }

    uint256 public _totalSupply = 1000000;
    mapping(address => uint256) balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => Assets) public assetstore;
    Assets newasset;
    Assets[] public assetstorage;

    event AssetTransferAndMergerEvent(address payable _companyaddress, address payable _mergeraddress, uint256 amount);
    event AssetTransferMergerDetails(address owner, address sender, address payable receiver, uint256 amountleft, uint256 datesent);

    constructor(address __owner, string memory _tokenName, string memory _tokenSymbol) ERC20(_tokenName, _tokenSymbol) {
        _owner = __owner;
    }

 
} ```
   
ethereum solidity smartcontracts abstract erc20
2个回答
2
投票

我用它替换了构造函数,因为它需要初始地址。

constructor(address initialOwner) Ownable(initialOwner) ERC20(_tokenname, _tokensymbol) {
_owner = initialOwner;

}

对于继承合约来说,这也是程序

constructor(address _themergeraddress, address _initialOwner) AssetAcquisition(_initialOwner) {
themergeraddress = _themergeraddress;

}


0
投票

在 Solidity 中,Contract 可以使用

is
关键字从另一个合约继承。在这种情况下,派生合约需要通过以下两种方式之一指定基本合约的参数:

contract Base {
    uint x;
    constructor(uint x_) { x = x_; }
}

// Either directly specify in the inheritance list...
contract Derived1 is Base(7) {
    constructor() {}
}

// or through a "modifier" of the derived constructor...
contract Derived2 is Base {
    constructor(uint y) Base(y * y) {}
}

示例

© www.soinside.com 2019 - 2024. All rights reserved.