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

如何无需通过UI在Solidity中为Chainlink Keeper Upkeep充入LINK资金

可以,无需通过官方UI操作,直接通过合约调用即可完成充值,注意不要直接向Upkeep地址转账LINK,这类转账不会被计入Upkeep的可用余额,正确操作逻辑如下:

前置准备

  • 确认你要充值的Upkeep的唯一ID(uint256类型)
  • 确认你部署Upkeep的链对应的两个合约地址:LINK代币合约地址、对应版本的KeeperRegistry注册表合约地址

实现逻辑

  1. 首先调用LINK代币的approve方法,给KeeperRegistry合约授权不小于充值金额的LINK划转额度
  2. 调用KeeperRegistry合约的addFunds方法,传入Upkeep ID和充值金额即可完成充值,注意LINK的小数位为18,充值1个LINK对应的金额数值为1e18

简化合约示例

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@chainlink/contracts/src/v0.8/interfaces/LinkTokenInterface.sol";
import "@chainlink/contracts/src/v0.8/interfaces/KeeperRegistryInterface.sol";

contract UpkeepAutoFundContract {
    LinkTokenInterface public immutable linkToken;
    KeeperRegistryInterface public immutable keeperRegistry;

    constructor(address _linkTokenAddr, address _keeperRegistryAddr) {
        linkToken = LinkTokenInterface(_linkTokenAddr);
        keeperRegistry = KeeperRegistryInterface(_keeperRegistryAddr);
    }

    // 对外调用的充值方法,可对接你的自动归集系统
    function autoFundUpkeep(uint256 _upkeepId, uint256 _fundAmount) external {
        // 授权注册表合约划转对应数量的LINK
        bool approveSuccess = linkToken.approve(address(keeperRegistry), _fundAmount);
        require(approveSuccess, "LINK approve failed");
        // 执行充值
        keeperRegistry.addFunds(_upkeepId, _fundAmount);
    }

    // 可选:接收归集转入的LINK,根据你的业务逻辑调整
    receive() external payable {}
}

注意事项

  • 确保你使用的KeeperRegistry合约地址和你创建Upkeep时选择的注册表版本完全一致,不同版本注册表地址不同,传错地址会导致充值失败
  • 充值金额不能低于对应链要求的Upkeep最小余额阈值,否则充值后任务也可能无法正常触发执行
  • 若你的自动归集系统直接将LINK归集到某个固定地址(如多签钱包、归集合约),也可以直接在该地址的调用逻辑中直接执行上述授权+充值操作,无需单独部署充值合约

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 13:36:03