最近一直关注一个币 $INXT , 他们将代币合约升级了。
0xd09fa188c6f2a3b0ea6c3533e8c54d539c097337
pragma solidity ^0.8.3;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
contract INXTswap {
IERC20 public INXT;
address public ownerOfNewTokens;
IERC20 public INXTO;
constructor(
address _INXT,
address _ownerOfNewTokens,
) {
INXT = IERC20(_INXT);
ownerOfNewTokens = _ownerOfNewTokens;
INXTO = IERC20(_INXTO);
}
function swap(uint256 _amount) public {
require(
INXT.allowance(ownerOfNewTokens, address(this)) >= _amount,
"INXT token allowance too low (swap is completed)."
);
require(
INXTO.allowance(msg.sender, address(this)) >= _amount,
"INTXO token allowance too low."
);
_safeTransferFrom(INXT, ownerOfNewTokens, msg.sender, _amount);
_safeTransferFrom(INXTO, msg.sender, address(this), _amount);
}
function _safeTransferFrom(
IERC20 token,
address sender,
address recipient,
uint amount
) private {
bool sent = token.transferFrom(sender, recipient, amount);
require(sent, "Token transfer failed");
}
}
换币合约没有任何问题,扣除了用户的钱,然后从新合约转账过去,也没有办法重写定义的代币地址,妥妥的没有漏洞啊。
但是仔细观察发现并不是所有人都调用了swap方法,也有人直接转账了,那该怎么办呢?
https://etherscan.io/address/0xd09fa188c6f2a3b0ea6c3533e8c54d539c097337
您的旧 INXT 发送到我们的掉期合约地址
0xD09fA188c6F2a3b0eA6C3533E8C54d539c097337
并通过 hello@internxt.com 发送电子邮件给我们,并附上交易 ID。
您将在 24 小时内收到相同数量的更新的 Internxt 代币
居然人工审核?那有可能有几种情况
-
脚本自动处理邮件
-
人工审核
对于这两种情况,都有可能存在以下问题
-
没判断交易的状态
-
没判断交易的合约地址是否正确
因此我们可以部署一个假合约来钓鱼试试,直接部署一个同名合约
https://etherscan.io/token/0x406c220ceb3e05dfb3c0532588a41e809dbf4e8a
钓鱼成功,收到官方打的币,刷了2w多U,然后主动退款了(虽然用的钱从tornado出来的,但是有一些关联),项目方表示以后会严格核对合约地址。最后和他们CEO聊人生理想,成为好朋友。
投资建议:
1. INXT能不能买?
从200万U涨到现在2000WU的市值,已经十倍了,就不推荐买了,不过存在上大交易所的预期,如果上了还是可以看到50U的。
2. 项目方怎么样?
项目方不懂区块链,就只是做一个网盘,纯粹的ICO。CEO也不懂区块链,这种项目风险很大,并且他们在换合约的时候把以前已经销毁的代币重新启用了。
原文始发于微信公众号(弦断谁听):人工审核换币导致安全问题