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的主要内容,如果未能解决你的问题,请参考以下文章
0基础教学_在BSC主链上部署智能合约并验证合约_BSC发币_币安发币