0

我有一份使用 Open-Zeppelin SafeMath 的合同,但派生合同不承认该声明。

Base.sol

// SPDX-License-Identifier: MIT
pragma solidity ^0.7.4;

import "@openzeppelin/contracts-ethereum-package/contracts/math/SafeMath.sol";

contract Base  {
    using SafeMath for uint256;
}

测试.sol

// SPDX-License-Identifier: MIT
pragma solidity ^0.7.4;

import "Base.sol";

contract Test is Base {
    function getnum(uint256 _number) external view returns (uint256) {
        return _number.add(_number);
    }
}

但我不断收到此错误:

Member "add" not found or not visible after argument-dependent lookup in uint256.
4

1 回答 1

0

using A for B声明者在solidity 0.7中发生了变化,现在我们必须在所有派生合约中重复声明:

using A for B仅影响提及它的合同。以前,效果是继承的。using现在,您必须在使用该功能的所有派生合约中重复该 ​​语句。

https://solidity.readthedocs.io/en/v0.7.4/070-break-changes.html#functions-and-events

于 2020-11-12T16:57:36.230 回答