Solidity合约报Member "tranfer" not found错误如何解决
问题根因
该报错与Solidity 0.5版本要求收款地址为address payable类型的规则无关,是纯拼写错误导致的编译失败:address payable类型内置的ETH转账方法标准名称为transfer,你的代码第35行将方法名错写为tranfer(漏写了字母s),编译器无法在地址类型上匹配到这个不存在的成员方法,因此抛出对应类型错误。
修复步骤
- 核心错误修复
将第35行的错误方法名替换为正确写法,修正后的对应函数代码如下:function payout() private mustBeDeceased{ for(uint i = 0; i<familyWallets.length;i++){ familyWallets[i].transfer(inheritance[familyWallets[i]]); } } - 可选逻辑漏洞修复(建议同步处理,避免上线后出现资金风险)
- 给
setInheritance方法添加onlyOwner权限修饰符:当前该方法无访问限制,任意外部地址都可以随意修改继承地址列表和分配金额,存在严重逻辑缺陷。 - 在
payout函数执行转账前增加余额校验:确认合约当前持有的ETH总额不低于所有待分配继承金额的总和,避免转账过程中因余额不足触发全量回滚。 - 若需要支持合约地址作为收款方,替换
transfer为带返回值校验的call转账方式:transfer默认仅向接收地址转发2300gas,若收款方是合约且fallback/receive函数逻辑消耗超过2300gas,会直接导致转账失败。
- 给
内容的提问来源于stack exchange,提问作者Anvay Mishra
相关产品推荐
相关产品推荐

