TypeError в ремиксе для контракта BSC

У меня есть эта ошибка TypeError: адрес типа возвращаемого аргумента не может быть неявно преобразован в адрес ожидаемого типа (тип первой возвращаемой переменной). - ›Driven.sol: 233: 16: | 233 | вернуть msg.sender; | ^^^^^^^^^^

для следующей функции

abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

Пожалуйста помоги!


person Paul-Constantin Socarde    schedule 02.05.2021    source источник


Ответы (1)


Начиная с Solidity 0.8, msg.sender больше не payable. Сначала вам нужно преобразовать его в payable.

function _msgSender() internal view virtual returns (address payable) {
    return payable(msg.sender); // added payable
}

Или вы можете вернуть только address (не к оплате):

function _msgSender() internal view virtual returns (address) {  // removed payable
    return msg.sender;
}
person Petr Hejda    schedule 02.05.2021
comment
У меня есть еще одно предупреждение (не ошибка): Предупреждение: видимость конструктора игнорируется. Если вы хотите, чтобы контракт не подлежал развертыванию, достаточно сделать его абстрактным. - ›Driven.sol: 732: 5: | 732 | конструктор () public {| ^ (Соответствующая часть исходного кода начинается здесь и занимает несколько строк). для этой функции - person Paul-Constantin Socarde; 03.05.2021
comment
конструктор () общедоступный {_rOwned [_msgSender ()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02 (0x05fF2B0DB69458A0750badebc4f9e13aDd608C7F); uniswapV2Pair = IUniswapV2Factory (_uniswapV2Router.factory ()) .createPair (адрес (это), _uniswapV2Router.WETH ()); uniswapV2Router = _uniswapV2Router; _isExcludedFromFee [владелец ()] = истина; _isExcludedFromFee [адрес (этот)] = истина; отправить Transfer (адрес (0), _msgSender (), _tTotal); } - person Paul-Constantin Socarde; 03.05.2021
comment
@ Paul-ConstantinSocarde Конструктор выполняется только во время развертывания и не может быть вызван позже, поэтому имеет смысл игнорировать видимость. Вы можете удалить модификатор public из конструктора. - person Petr Hejda; 03.05.2021
comment
Также, если интерфейс контракта - IERC20, могу ли я разместить его на BSC? Или должен быть ВОП20? - person Paul-Constantin Socarde; 03.05.2021
comment
Я спрашиваю об этом, потому что я видел, что контракт MoonPirate использует IERC20, а токен торгуется на PancakeSwap (платформа BEP20). - person Paul-Constantin Socarde; 03.05.2021
comment
Как вы на самом деле называете интерфейс, не имеет отношения. Стандарт BEP20 расширяет ERC20 (исходный код), а в части кода вы просто нужно следовать ERC20. - person Petr Hejda; 03.05.2021