触发场景: address.send(ether_to_send) address.call().value(ether_to_send) ? 漏洞流程 ?
break # 删除联系人之后,该联系人的个人信息页就没了,所以就得跳回去 elif command == '4': Address.call break # 删除联系人之后,该联系人的个人信息页就没了,所以就得跳回去 elif command == '4': Address.call
bool send = _address.send(msg.value); // require(send, "sender error"); (bool succeess,) = _address.call
image.png 2.使用address.call()。 调用失败返回false,发起调用的函数可以继续执行。 image.png 3.代理调用delegatecall()。
Solidity 底层调用方法,(例如 address.call()) 不会抛出异常。而是在遇到错误,返回false。
6、错误处理 智能合约中,有一些涉及到address底层操作的方法 address.call() address.callcode() address.delegatecall() address.send
6、错误处理 智能合约中,有一些涉及到address底层操作的方法 address.call() address.callcode() address.delegatecall() address.send
msg.sender] = refund; // 如果转账错误还可以挽回 } } } (6) 错误处理 合约中涉及到call等在address底层操作的方法时,做好合理的错误处理 address.call
调用外部合约时要对错误进行处理 Solidity 提供了在原始地址上调用外部合约的低级别方法:address.call(), address.callcode(), address.delegatecall
处理外部调用错误 Solidity提供了一系列在raw address上执行操作的底层方法,比如: address.call(),address.callcode(), address.delegatecall
,安全相关的内建程序,globals,方法和用户/默许的信息,(address.call(), tx.origin, msg.data, block.