BSC 合约 Remix 上的 TypeError

Posted

技术标签:

【中文标题】BSC 合约 Remix 上的 TypeError【英文标题】:TypeError on Remix for BSC Contract 【发布时间】:2021-07-25 10:08:16 【问题描述】:

我有这个错误“TypeError:返回参数类型地址不能隐式转换为预期类型(第一个返回变量的类型)地址应付。--> Driven.sol:233:16: | 233 | return 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;
    

请帮忙!

【问题讨论】:

【参考方案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;

【讨论】:

我还有一个警告(不是错误):警告:构造函数的可见性被忽略。如果您希望合同不可部署,则将其设为“抽象”就足够了。 --> Driven.sol:732:5: |第732章构造函数 () 公共 | ^(相关源代码部分从这里开始并跨越多行)。对于这个功能 构造函数 () public _rOwned[_msgSender()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x05fF2B0DB69458A0750badebc4f9e13aDd608C7F); uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; _isExcludedFromFee[owner()] = true; _isExcludedFromFee[地址(this)] = true;发出传输(地址(0),_msgSender(),_tTotal); @Paul-ConstantinSocarde 构造函数在部署期间执行,以后无法调用,因此忽略可见性是有道理的。您可以从构造函数中删除 public 修饰符。 另外,如果合约的接口是IERC20,我可以在BSC上列出吗?还是应该是 BEP20? 我问这个是因为我看到 MoonPirate 的合约使用 IERC20 并且代币可以在 PancakeSwap(BEP20 平台)上交易

以上是关于BSC 合约 Remix 上的 TypeError的主要内容,如果未能解决你的问题,请参考以下文章

10分钟教会你如何在BSC发主链智能合约

币安链合约部署bsc智能链发布token|发币教程

0基础教学_在BSC主链上部署智能合约并验证合约_BSC发币_币安发币

如何在币安智能链BSC上发行代币

币安智能链BSC分红|通缩燃烧|回滚流动池|慈善钱包 合约部署

通过以太币与 BSC 上的智能合约进行通信会给出 -32603 错误代码