You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何自动将子钱包的ETH及ERC20代币转入父钱包?(已知ETH实现方法)

ERC20代币自动转入父钱包的实现方案

嘿,这个需求挺实用的,我来给你详细说说ERC20代币自动转发到父钱包的实现思路~

首先得明确:ERC20代币和ETH的转账机制不一样——ETH转入合约时会触发receive()或fallback()函数,但ERC20代币的transfer操作只会更新代币合约的余额,不会主动触发接收方合约的任何函数,所以没法像ETH那样完全被动自动转发,得结合主动调用或自动化工具来实现。

核心实现代码

首先我们需要基于ERC20的标准接口来编写转账逻辑,推荐用OpenZeppelin的安全库来避免非标准代币的坑:

1. 基础版(单个代币转发)

// 引入OpenZeppelin的安全ERC20工具,处理非标准代币
import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";

contract ChildWallet {
    // 用SafeERC20封装IERC20,自动处理转账安全检查
    using SafeERC20 for IERC20;
    
    // 父钱包地址,部署后不可修改
    address public immutable parentWallet;

    constructor(address _parentWallet) {
        parentWallet = _parentWallet;
    }

    // ETH自动转发逻辑(你已经掌握的部分)
    receive() external payable {
        payable(parentWallet).transfer(address(this).balance);
    }

    // 转发指定ERC20代币到父钱包
    function forwardERC20(address token) external {
        // 获取当前合约持有该代币的余额
        uint256 tokenBalance = IERC20(token).balanceOf(address(this));
        
        if (tokenBalance > 0) {
            // 用safeTransfer替代transfer,兼容不返回bool的非标准代币
            IERC20(token).safeTransfer(parentWallet, tokenBalance);
        }
    }
}

2. 进阶版(批量转发多个代币)

如果需要同时处理多种ERC20代币,可以加一个批量处理函数:

function forwardMultipleERC20(address[] calldata tokens) external {
    for (uint256 i = 0; i < tokens.length; i++) {
        address token = tokens[i];
        uint256 balance = IERC20(token).balanceOf(address(this));
        
        if (balance > 0) {
            IERC20(token).safeTransfer(parentWallet, balance);
        }
    }
}

实现“自动”转发的两种方式

因为ERC20不会主动触发合约函数,所以需要额外手段触发forwardERC20:

  • 前端主动调用:如果是你的用户向子钱包转代币,可以在前端转账完成后,自动调用子钱包的forwardERC20函数,实现即时转发。
  • 自动化工具触发:如果需要完全无人值守,可以用Chainlink Keepers这类链上自动化服务,设置一个检查条件:当子钱包持有某ERC20代币余额>0时,自动调用转发函数。也可以用外部服务(比如自己写个监听脚本)订阅链上Transfer事件,发现子钱包收到代币后触发转发逻辑。

注意事项

  • 一定要用SafeERC20的safeTransfer,避免遇到那些不遵循ERC20标准(比如转账不返回bool、失败不回滚)的代币,导致转账失败或资金卡住。
  • 如果你需要监听所有可能转入的ERC20代币,可以通过链上事件监听服务订阅所有转到子钱包地址的ERC20 Transfer事件,再触发转发逻辑。

内容的提问来源于stack exchange,提问作者Strikers

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:32:29