0

我有一个 Eth 合约,称为控制器,用于:

  1. 生成新的 eth 存款地址,每个用户一个,这也是一个 eth 合约。
  2. 当用户向他们存入 eth 或 erc20 代币时,扫描这些存款合约。资金最终进入另一个中央 eth 账户。

许多 erc20 代币似乎运行良好,但 USDT 存款交易被恢复:https ://etherscan.io/address/0x3cd5a0dc36a8f22011193f2a03910aa8260e64db

如果没有这些合约的原始源代码(虽然我有 JSON ABI),很难说:

  1. 为什么 USDT 失败。
  2. 如果这些真的可以支持 USDT,或者这样做会涉及什么。

如果有人能指出正确的方向,将不胜感激!

控制器合约:0xEb818C6a48cCd60A8078aaa20997cC3CB2538C9E

另一个与控制器相关的合同,称为 defaultSweeper:0x8e7ABAF1316A0edB985e494F572Fdf148e8a7E93

编辑:似乎 USDT 合约缺少一些 erc20 方法。喜欢transfer看:https ://erc20-verifier.openzeppelin.com/这是为什么?

4

1 回答 1

0

在 ERC20 标准最终确定之前部署了 Tether 合约。有些函数不符合规范,例如 transfer 应该返回一个布尔值,但它没有。

最近版本的 solc 将检查返回的数据大小是否正确(我认为是 0.5)。

我的猜测是你的合约是用最新版本的solidity编译的,它使用标准的ERC20接口。它失败了,因为 Tether 什么都不返回,它期待一个 bool 值。

你能做的不多。Tether 应该升级其合约,或者必须修改控制器合约以不检查合约大小。请参阅OpenZepplin的 SafeERC20,他们实现了围绕 ERC20 的包装器,允许与不符合标准的令牌进行交互。

于 2020-04-08T21:31:49.020 回答