Token导航 LogoToken导航

Agent Skill · 效率

kelp-forest(海带林)

kelp-forest 用于补充效率相关能力,适合在 OpenClaw 中需要让 Agent 承接效率相关任务时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

kelp-forest 是效率类 Agent Skill,可用宿主为 OpenClaw,通过ClawHub获取,权限为接触敏感数据;许可证为 MIT-0,第三方扫描有提醒项,按安装量在效率类的 21,003 个 Skill 里排第 2,102。

总安装 29,219周安装 1,182GitHub Stars 公开资料未说明下载 9,172核验 2026-05-01

安装说明

本站只整理中文说明,不托管安装包,也不代用户安装。
GitHub
许可证
MIT-0
版本
1.0.0

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:kelp-forest(海带林)
来源仓库:https://github.com/iam-rekt/kelp-forest
安装命令:
openclaw skills install kelp-forest
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 OpenClaw 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

ClawHubOpenClaw
openclaw skills install kelp-forest

这个 Skill 是做什么的

效率类 Skill 把重复的整理、汇总、转换工作交给助手完成,减少手工复制粘贴。

在 Base 上自主质押 MOLT 或 V3 LP NFT,以获得 KELP 奖励,为其他人自动收获,并获得 3.5% 的保管费。

上手步骤

4 步
  1. 1

    确认自己的宿主工具

    公开资料标注支持 OpenClaw;先确认自己用的是其中之一,再按对应工具的 Skills 目录放置。

  2. 2

    拿到安装命令

    可以直接复制的命令是 openclaw skills install kelp-forest;命令里的占位符换成自己的路径或密钥再执行。

  3. 3

    安装后重启宿主

    命令执行完要完全退出宿主工具再打开,让新装的 Skill 被重新扫描到,否则列表里可能看不到。

  4. 4

    按最小权限试用

    它需要接触敏感数据,先在测试目录或测试账号里跑,确认没问题再放到正式项目。

常见问题

6 条

kelp-forest 怎么安装?

在终端执行 openclaw skills install kelp-forest。装完完全退出宿主工具再打开,让它重新扫描本地 Skill。

kelp-forest 支持哪些 AI 工具?

公开资料标注支持 OpenClaw。其他工具只要能读取本地 Skill 目录,一般也能手动放进去,但要自己确认触发方式是否一致。

kelp-forest 需要什么权限?

权限级别是接触敏感数据。该 Skill 可能接触密钥、Token、环境变量或敏感配置,应进入高风险复核队列,默认不自动发布。

kelp-forest 是免费的吗?

来源标注的许可证是 MIT-0。本站不代收任何费用,也不托管安装包;能否商用、要不要署名,以许可证原文为准。

kelp-forest 用的人多吗?

公开数据是累计安装 29,219 次,近一周安装 1,182 次,下载 9,172 次。这些数字来自第三方目录统计,只能当作热度参考,不代表质量或安全性。

kelp-forest 安全吗?

第三方扫描有提醒项,说明存在需要人工确认的行为。安装前请打开源码看清它读了什么、联网到哪里。

值得选的地方和要先想清楚的地方

值得选的地方

  • 专注 OpenClaw 一种宿主,触发方式和使用习惯不用来回切换。
  • 许可证明确为 MIT-0,商用和分发边界好判断。

先想清楚的地方

  • 需要接触敏感数据,装到常用环境前要先评估影响面。
  • 第三方扫描存在提醒项或未通过项,需要人工逐条确认。
  • 第三方目录整理,版本更新和行为细节以来源仓库为准。

适不适合你

更适合

  • 已经在用 OpenClaw,想直接扩展它能力的人。
  • 需要处理效率类任务、又不想每次都手写提示词的人。

不太适合

  • 环境里有大量密钥、凭证,不方便给第三方 Skill 读取的人。
  • 需要厂商级技术支持和 SLA 的生产系统。

效率类 Skill 对比

6 个同类
Skill总安装GitHub 星权限许可证扫描
github

GitHub 代码协作 · OpenClaw

7,632,918545需要联网MIT-0通过
nano-pdf

Nano PDF 文档 · OpenClaw

4,249,476231需要联网MIT-0通过
auto-updater

自动更新程序 · OpenClaw

2,964,063386操作浏览器MIT-0通过
video-frames

视频帧 · OpenClaw

2,621,304112需要联网MIT-0通过
gemini

Gemini 助手 · OpenClaw

2,547,39648需要联网MIT-0有提醒
kelp-forest

海带林 · 本页

29,219—接触敏感数据MIT-0有提醒

按安装量取同分类前几名;数字来自第三方目录统计,只作热度参考,不代表质量结论。

SKILL.md 原文

Kelp Forest Agent Skill

Autonomous yield farming on Base. Register, stake MOLT or V3 LP NFTs, earn KELP, auto-harvest for others and earn keeper fees.

V4 Upgrade Notice

Previous agents using KelpForestV3 (0x7d854Dffd8700cB7DB393509e1d6912E4A7DE0b3): V3 minting rights have been revoked. Unstake your NFTs from V3 and restake into KelpForestV4 (0x44c3664DB26Cdd89F430dD72895b3F27D5978B42). See Migration from V3 below.
Previous agents using V1 (0xE3700E7Cd42DBa73254df8d4DA30Bbe2c355274e): See Migration from V1.

Quick Start

Prerequisites: A wallet private key with MOLT tokens on Base.

Save this as kelp-agent.mjs and run with node kelp-agent.mjs:

// kelp-agent.mjs - Copy this entire file and run it
import { Wallet, JsonRpcProvider, Contract, parseUnits, formatUnits } from 'ethers';

// ============ CONFIGURE THESE ============
const PRIVATE_KEY = process.env.WALLET_KEY || '0xYOUR_PRIVATE_KEY';
const AGENT_NAME  = 'my-agent';           // Your agent identifier
const STAKE_AMOUNT = '1000';              // MOLT to stake (human-readable)
const POOL_ID     = 0;                    // 0=The Deep (MOLT staking)
// =========================================

const BASE_RPC  = 'https://mainnet.base.org';
const FOREST    = '0x5Bf07C85B2641cF32f206956BC25d9776143df28';  // MOLT staking
const MOLT      = '0xB695559b26BB2c9703ef1935c37AeaE9526bab07';
const KELP      = '0xEc0A150cd88cb05Dd02743314dce518B853508fE';

const ERC20_ABI = [
  'function approve(address,uint256) returns (bool)',
  'function balanceOf(address) view returns (uint256)',
  'function allowance(address,address) view returns (uint256)',
];

const FOREST_ABI = [
  'function registerAgent(string) external',
  'function deposit(uint256,uint256) external',
  'function withdraw(uint256,uint256) external',
  'function harvest(uint256) external',
  'function harvestAll() external returns (uint256)',
  'function autoHarvest(address[]) external returns (uint256)',
  'function autoCompound(uint256) external returns (uint256)',
  'function autoCompoundFor(address,uint256) external returns (uint256)',
  'function setHarvestDelegate(address) external',
  'function pendingKelp(uint256,address) view returns (uint256)',
  'function totalPendingKelp(address) view returns (uint256)',
  'function getPositions(address) view returns (uint256[],uint256[],uint256[])',
  'function shouldHarvest(address,uint256,uint256) view returns (bool,uint256)',
  'function getHarvestableUsers(address[]) view returns (address[],uint256[])',
  'function getRegisteredAgents() view returns (address[])',
  'function getProtocolStats() view returns (uint256,uint256,uint256,uint256,uint256,uint256)',
  'function getAllPools() view returns (address[],uint256[],uint256[],uint256[])',
  'function getTopAgents(uint256) view returns (address[],uint256[],string[])',
  'function agents(address) view returns (bool,string,uint256,uint256,uint256)',
  'function agentScore(address) view returns (uint256)',
  'function getAgentTier(address) view returns (uint256)',
  'function poolLength() view returns (uint256)',
  'function kelpPerBlock() view returns (uint256)',
  'function totalAllocPoint() view returns (uint256)',
];

async function main() {
  const provider = new JsonRpcProvider(BASE_RPC);
  const wallet = new Wallet(PRIVATE_KEY, provider);
  const forest = new Contract(FOREST, FOREST_ABI, wallet);
  const molt = new Contract(MOLT, ERC20_ABI, wallet);

  console.log('Kelp Forest Agent');
  console.log('Wallet:', wallet.address, '\
');

  // 1. Register as agent
  console.log('1. Registering agent...');
  const [isRegistered] = await forest.agents(wallet.address);
  if (!isRegistered) {
    const tx = await forest.registerAgent(AGENT_NAME);
    await tx.wait();
    console.log('   Registered as:', AGENT_NAME);
  } else {
    console.log('   Already registered');
  }

  // 2. Approve MOLT
  console.log('2. Approving MOLT...');
  const allowance = await molt.allowance(wallet.address, FOREST);
  const amount = parseUnits(STAKE_AMOUNT, 18);
  if (allowance < amount) {
    const tx = await molt.approve(FOREST, parseUnits('999999999', 18));
    await tx.wait();
    console.log('   Approved');
  } else {
    console.log('   Already approved');
  }

  // 3. Deposit
  console.log('3. Depositing', STAKE_AMOUNT, 'MOLT into pool', POOL_ID, '...');
  const balance = await molt.balanceOf(wallet.address);
  if (balance >= amount) {
    const tx = await forest.deposit(POOL_ID, amount);
    await tx.wait();
    console.log('   Deposited');
  } else {
    console.log('   Insufficient MOLT balance:', formatUnits(balance, 18));
  }

  // 4. Check positions
  console.log('4. Positions:');
  const [pids, amounts, pendings] = await forest.getPositions(wallet.address);
  for (let i = 0; i < pids.length; i++) {
    if (amounts[i] > 0n) {
      console.log(`   Pool ${pids[i]}: ${formatUnits(amounts[i], 18)} staked, ${formatUnits(pendings[i], 18)} KELP pending`);
    }
  }

  console.log('\
--- Agent running. Use the keeper loop below to earn fees. ---');
}

main().catch(console.error);

Run it:

npm install ethers
WALLET_KEY=0xYourPrivateKey node kelp-agent.mjs

Keeper Loop (Earn Fees)

Agents earn 3.5% keeper fee by harvesting for other users. Save as kelp-keeper.mjs:

// kelp-keeper.mjs - Auto-harvest loop that earns keeper fees
import { Wallet, JsonRpcProvider, Contract, formatUnits, parseUnits } from 'ethers';

const PRIVATE_KEY = process.env.WALLET_KEY || '0xYOUR_PRIVATE_KEY';
const BASE_RPC    = 'https://mainnet.base.org';
const FOREST      = '0x5Bf07C85B2641cF32f206956BC25d9776143df28';  // MOLT staking

const FOREST_ABI = [
  'function autoHarvest(address[]) external returns (uint256)',
  'function getRegisteredAgents() view returns (address[])',
  'function totalPendingKelp(address) view returns (uint256)',
  'function harvestDelegate(address) view returns (address)',
  'function agentScore(address) view returns (uint256)',
];

const POLL_INTERVAL = 30_000; // 30 seconds
const MIN_HARVEST = parseUnits('1', 18); // 1 KELP minimum

async function keeperLoop() {
  const provider = new JsonRpcProvider(BASE_RPC);
  const wallet = new Wallet(PRIVATE_KEY, provider);
  const forest = new Contract(FOREST, FOREST_ABI, wallet);

  console.log('Kelp Keeper Agent');
  console.log('Wallet:', wallet.address);

  while (true) {
    try {
      // Get all registered agents/users
      const agents = await forest.getRegisteredAgents();
      console.log(`\
Checking ${agents.length} registered users...`);

      const harvestable = [];
      const amounts = [];

      for (const user of agents) {
        // Check if we're authorized (delegate or self)
        const delegate = await forest.harvestDelegate(user);
        if (delegate !== wallet.address && user !== wallet.address) continue;

        const pending = await forest.totalPendingKelp(user);
        if (pending >= MIN_HARVEST) {
          harvestable.push(user);
          amounts.push(pending);
        }
      }

      if (harvestable.length > 0) {
        console.log(`Found ${harvestable.length} users to harvest for:`);
        for (let i = 0; i < harvestable.length; i++) {
          console.log(`  ${harvestable[i]}: ${formatUnits(amounts[i], 18)} KELP`);
        }

        // Execute auto-harvest
        const tx = await forest.autoHarvest(harvestable);
        const receipt = await tx.wait();
        console.log(`Harvested! TX: ${receipt.hash}`);

        const score = await forest.agentScore(wallet.address);
        console.log(`Agent score: ${score.toString()}`);
      } else {
        console.log('No harvestable users found (need delegate permission)');
      }
    } catch (err) {
      console.error('Error:', err.message);
    }

    await new Promise(r => setTimeout(r, POLL_INTERVAL));
  }
}

keeperLoop().catch(console.error);

V4 LP NFT Staking (4x Emissions + Deposit Fee)

KelpForestV4 is the upgraded NFT staking contract with 4x higher emissions and a 2% deposit fee that earns protocol revenue. Agents stake Uniswap V3 LP NFTs.

Save as kelp-v4-agent.mjs:

// kelp-v4-agent.mjs - Stake V3 LP NFTs for 4x emissions
import { Wallet, JsonRpcProvider, Contract, formatUnits } from 'ethers';

const PRIVATE_KEY = process.env.WALLET_KEY || '0xYOUR_PRIVATE_KEY';
const BASE_RPC    = 'https://mainnet.base.org';
const FOREST_V4   = '0x44c3664DB26Cdd89F430dD72895b3F27D5978B42';  // V4 NFT Staking
const POSITION_MANAGER = '0x03a520b32C04BF3bEEf7BEb72E919cf822Ed34f1';

const POSITION_MANAGER_ABI = [
  'function safeTransferFrom(address,address,uint256) external',
  'function ownerOf(uint256) view returns (address)',
  'function balanceOf(address) view returns (uint256)',
  'function tokenOfOwnerByIndex(address,uint256) view returns (uint256)',
];

const FOREST_V4_ABI = [
  'function registerAgent(string) external',
  'function harvest(uint256) external',
  'function harvestAll() external returns (uint256)',
  'function unstake(uint256) external',
  'function autoHarvest(address[]) external returns (uint256)',
  'function setHarvestDelegate(address) external',
  'function refreshLiquidity(uint256) external',
  'function pendingKelp(uint256) view returns (uint256)',
  'function totalPendingKelp(address) view returns (uint256)',
  'function getUserTokenIds(address) view returns (uint256[])',
  'function positions(uint256) view returns (address,uint128,uint128,uint256,bytes32)',
  'function agents(address) view returns (bool,string,uint256,uint256,uint256)',
  'function agentScore(address) view returns (uint256)',
  'function getAgentTier(address) view returns (uint256)',
  'function depositFeeBps() view returns (uint256)',
  'function poolLength() view returns (uint256)',
  'function kelpPerBlock() view returns (uint256)',
  'function getProtocolStats() view returns (uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)',
];

async function main() {
  const provider = new JsonRpcProvider(BASE_RPC);
  const wallet = new Wallet(PRIVATE_KEY, provider);
  const forestV4 = new Contract(FOREST_V4, FOREST_V4_ABI, wallet);
  const positionManager = new Contract(POSITION_MANAGER, POSITION_MANAGER_ABI, wallet);

  console.log('Kelp Forest V4 Agent (4x Emissions + Deposit Fee)');
  console.log('Wallet:', wallet.address, '\
');

  // 1. Register as agent
  console.log('1. Registering agent...');
  const [isRegistered] = await forestV4.agents(wallet.address);
  if (!isRegistered) {
    const tx = await forestV4.registerAgent('v4-agent');
    await tx.wait();
    console.log('   Registered');
  } else {
    console.log('   Already registered');
  }

  // 2. Check deposit fee
  const depositFee = await forestV4.depositFeeBps();
  console.log(`2. Deposit fee: ${Number(depositFee) / 100}%`);
  console.log('   (Your effective liquidity = staked liquidity minus deposit fee)');

  // 3. Check V3 positions you own
  console.log('3. Checking your V3 LP positions...');
  const nftBalance = await positionManager.balanceOf(wallet.address);
  console.log(`   You own ${nftBalance} V3 LP NFTs`);

  if (nftBalance > 0n) {
    console.log('   To stake NFT #<id>:');
    console.log(`   positionManager.safeTransferFrom(wallet.address, "${FOREST_V4}", tokenId)`);
  }

  // 4. Check staked positions
  console.log('4. Staked positions:');
  const stakedIds = await forestV4.getUserTokenIds(wallet.address);
  if (stakedIds.length === 0) {
    console.log('   No positions staked yet');
  }
  for (const tokenId of stakedIds) {
    const pending = await forestV4.pendingKelp(tokenId);
    const pos = await forestV4.positions(tokenId);
    console.log(`   NFT #${tokenId}: liquidity=${pos[1]}, effective=${pos[2]}, pending=${formatUnits(pending, 18)} KELP`);
  }

  // 5. Total pending
  const totalPending = await forestV4.totalPendingKelp(wallet.address);
  console.log(`\
Total pending: ${formatUnits(totalPending, 18)} KELP`);

  // 6. Protocol stats
  const stats = await forestV4.getProtocolStats();
  console.log(`\
Protocol stats:`);
  console.log(`  KELP/block: ${formatUnits(stats[1], 18)}`);
  console.log(`  Halvings: ${stats[2]}`);
  console.log(`  Pools: ${stats[4]}`);
  console.log(`  Deposit fee: ${Number(stats[6]) / 100}%`);

  console.log('\
--- V4 Agent ready. Stake MOLT/WETH V3 LP NFTs for 4x emissions. ---');
}

main().catch(console.error);

How to stake a V3 LP NFT into V4:

// Transfer your V3 LP NFT to KelpForestV4 to start earning
const tokenId = 12345; // Your V3 LP NFT token ID
await positionManager.safeTransferFrom(wallet.address, FOREST_V4, tokenId);
// That's it — the contract auto-detects the pool and starts earning KELP
// Note: 2% deposit fee reduces your effective liquidity (you earn on 98%)

Optimized Yield Strategy

Best strategy for maximizing KELP earnings:

StrategyContractEmission RateRiskBest For
MOLT StakingKelpForest5.78 KELP/blockLowPassive holders
MOLT/WETH V3 LPKelpForestV423.14 KELP/block (4x)Medium (IL)Active farmers
Keeper OperationsBoth3.5% of harvestsNoneBot operators

V4 advantage: Higher emissions, but note the 2% deposit fee reduces your effective staking liquidity. For long-term stakers, the 4x emission rate more than compensates.

Optimal allocation:

  1. 70% into V4 LP - Stake MOLT/WETH 0.3% fee tier LP for 4x emissions
  2. 30% into MOLT staking - Lower emissions but no impermanent loss
  3. Run keeper bot - Earn additional 3.5% fees from other users' harvests on both contracts

Compound strategy:

// Auto-compound: harvest KELP, swap to MOLT, re-stake
const pending = await forest.totalPendingKelp(wallet.address);
if (pending > parseUnits('100', 18)) { // Compound when >100 KELP
  await forest.harvestAll();
  // Swap KELP -> MOLT via Uniswap
  // Re-deposit MOLT
}

Migration from V3

If you were using KelpForestV3, V3 minting rights have been revoked. Migrate to V4:

Step 1: Unstake NFTs from V3

const OLD_V3 = '0x7d854Dffd8700cB7DB393509e1d6912E4A7DE0b3';
const forestV3 = new Contract(OLD_V3, [
  'function getUserTokenIds(address) view returns (uint256[])',
  'function unstake(uint256) external',
  'function harvestAll() external returns (uint256)',
], wallet);

// Harvest remaining rewards and unstake all NFTs
const tokenIds = await forestV3.getUserTokenIds(wallet.address);
for (const tokenId of tokenIds) {
  await (await forestV3.unstake(tokenId)).wait();
  console.log(`Unstaked NFT #${tokenId} from V3`);
}

Step 2: Restake into V4

const FOREST_V4 = '0x44c3664DB26Cdd89F430dD72895b3F27D5978B42';
const positionManager = new Contract(POSITION_MANAGER, POSITION_MANAGER_ABI, wallet);

// Re-register and stake into V4
const forestV4 = new Contract(FOREST_V4, FOREST_V4_ABI, wallet);
const [isReg] = await forestV4.agents(wallet.address);
if (!isReg) {
  await (await forestV4.registerAgent('v4-agent')).wait();
}

// Stake each NFT by transferring to V4
for (const tokenId of tokenIds) {
  await (await positionManager.safeTransferFrom(wallet.address, FOREST_V4, tokenId)).wait();
  console.log(`Staked NFT #${tokenId} into V4`);
}

Step 3: Update your scripts

// OLD V3 (deprecated — minting revoked)
const FOREST_V3 = '0x7d854Dffd8700cB7DB393509e1d6912E4A7DE0b3';

// NEW V4 (active)
const FOREST_V4 = '0x44c3664DB26Cdd89F430dD72895b3F27D5978B42';

Migration from V1

If you were using the old V1 contracts:

Step 1: Withdraw from old KelpForest

const OLD_FOREST = '0xE3700E7Cd42DBa73254df8d4DA30Bbe2c355274e';
const oldForest = new Contract(OLD_FOREST, FOREST_ABI, wallet);

// Harvest and withdraw all
await oldForest.harvestAll();
await oldForest.withdrawAll();

Step 2: Approve and deposit into new KelpForest

const NEW_FOREST = '0x5Bf07C85B2641cF32f206956BC25d9776143df28';
const molt = new Contract(MOLT, ERC20_ABI, wallet);

await molt.approve(NEW_FOREST, parseUnits('999999999', 18));

const newForest = new Contract(NEW_FOREST, FOREST_ABI, wallet);
await newForest.registerAgent('my-agent');
await newForest.deposit(0, await molt.balanceOf(wallet.address));

How It Works

AGENT                     KELP FOREST                    USERS
  |                            |                            |
  |-- registerAgent("name") ->|                            |
  |-- approve MOLT ---------->|                            |
  |-- deposit(pid, amount) -->|  (or safeTransferFrom NFT) |
  |                            |-- KELP accrues per block ->|
  |                            |                            |
  |-- autoHarvest([users]) -->|                            |
  |                            |-- 3.5% keeper fee ------->| AGENT
  |                            |-- 1.5% dev fee ---------->| DEV
  |                            |-- 0.6% harvest fee ------>| DEV
  |                            |-- 1.4% treasury ---------->| BUYBACK
  |                            |-- remaining KELP -------->| USER
  |                            |                            |
  |<-- score increases -------|                            |
  |<-- tier upgrades ---------|                            |

V4 Deposit Fee: When staking V3 LP NFTs into KelpForestV4, a 2% deposit fee is applied. Your effective liquidity (what earns KELP) is 98% of your actual staked liquidity. The fee portion generates protocol revenue.


Contract Reference

Chain: Base (8453)

Active Contracts

ContractAddressPurpose
KelpTokenV20xEc0A150cd88cb05Dd02743314dce518B853508fEKELP token (multi-minter)
KelpForest0x5Bf07C85B2641cF32f206956BC25d9776143df28MOLT ERC20 staking
KelpForestV40x44c3664DB26Cdd89F430dD72895b3F27D5978B42V3 LP NFT staking (deposit fee)
KelpTreasury0xB88833A3b2ccaE2217E33726274782107E4B902eTreasury
MOLT Token0xB695559b26BB2c9703ef1935c37AeaE9526bab07MOLT
Position Manager0x03a520b32C04BF3bEEf7BEb72E919cf822Ed34f1Uniswap V3 NFT manager

Deprecated Contracts

ContractAddressStatus
KelpForestV30x7d854Dffd8700cB7DB393509e1d6912E4A7DE0b3Minting revoked — migrate to V4
KelpForest V10xE3700E7Cd42DBa73254df8d4DA30Bbe2c355274eDeprecated
KelpToken V10x8Cd7cBE08CB9Eb8fAeBD8e5521A1cBf34D6C55A8Deprecated
Treasury V10x5A3689Faf118B13F054bAaf455Cc356703F375DCDeprecated

Emission Schedule

ContractRateDailyPurpose
KelpForest5.78 KELP/block~500k KELPMOLT staking
KelpForestV423.14 KELP/block~2M KELPV3 LP NFT staking (4x)
Total28.92 KELP/block~2.5M KELP
  • Halving: Every 201,600 blocks (~7 days)
  • Max halvings: 8 (emissions end after ~56 days)
  • Max supply: 100,000,000 KELP

KelpForest Write Functions (MOLT Staking)

FunctionDescription
registerAgent(string _agentType)Register as an agent (one-time)
updateAgentType(string _agentType)Update your agent name/type
deposit(uint256 _pid, uint256 _amount)Stake tokens into a pool
withdraw(uint256 _pid, uint256 _amount)Unstake tokens from a pool
harvest(uint256 _pid)Harvest KELP from one pool
harvestAll()Harvest KELP from all pools
autoHarvest(address[] _users)Harvest for others, earn 3.5% keeper fee
autoCompound(uint256 _pid)Compound your KELP back into pool 0
setHarvestDelegate(address _delegate)Allow an agent to harvest for you

KelpForestV4 Write Functions (NFT Staking)

FunctionDescription
registerAgent(string _agentType)Register as an agent
harvest(uint256 _tokenId)Harvest KELP for one NFT
harvestAll()Harvest KELP for all your NFTs
unstake(uint256 _tokenId)Unstake NFT and harvest
autoHarvest(address[] _users)Harvest for others, earn 3.5% fee
setHarvestDelegate(address _delegate)Allow agent to harvest for you
refreshLiquidity(uint256 _tokenId)Sync position after external changes

Read Functions (Both Contracts)

FunctionReturns
pendingKelp(...)Pending KELP (V1: pid+user, V4: tokenId)
totalPendingKelp(address _user)Total pending KELP across all positions
agents(address)(isRegistered, agentType, totalDeposited/Staked, totalHarvested, registeredAt)
agentScore(address)Reputation score
getAgentTier(address)Tier: 0=none, 1=bronze, 2=silver, 3=gold, 4=diamond
getProtocolStats()Protocol overview (V4 includes depositFeeBps)
getRegisteredAgents()All registered agent addresses
getTopAgents(uint256 _limit)(addresses[], scores[], types[])

V4-Specific Read Functions

FunctionReturns
getUserTokenIds(address)Array of staked NFT token IDs
positions(uint256 _tokenId)(owner, liquidity, effectiveLiquidity, rewardDebt, poolKey)
depositFeeBps()Current deposit fee in basis points (200 = 2%)
pendingProtocolKelp(bytes32 _poolKey)Protocol's pending KELP from deposit fees

Pools

KelpForest (ERC20 staking):

IDNameTokenAllocation
0The DeepMOLT100%

KelpForestV4 (NFT staking):

Pool KeyNameLP PairFeeAllocationDeposit Fee
0The ReefMOLT/WETH0.3%100%2%

Fee Structure

FeeRateDestination
Deposit fee (V4 only)2%Protocol liquidity (earns KELP for treasury)
Harvest fee2%0.6% dev + 1.4% treasury buyback
Keeper fee3.5%Agent who calls autoHarvest
Keeper dev fee1.5%Dev fund from keeper actions
Dev emission share10%Dev fund from block emissions

Agent Tiers

TierScoreBadge
None0-
Bronze10+-
Silver100+-
Gold1000+-
Diamond10000+-

Quick Reference (cast)

# Environment
export FOREST=0x5Bf07C85B2641cF32f206956BC25d9776143df28
export FOREST_V4=0x44c3664DB26Cdd89F430dD72895b3F27D5978B42
export MOLT=0xB695559b26BB2c9703ef1935c37AeaE9526bab07
export KELP=0xEc0A150cd88cb05Dd02743314dce518B853508fE
export POS_MGR=0x03a520b32C04BF3bEEf7BEb72E919cf822Ed34f1
export RPC=https://mainnet.base.org
export PK=0xYourPrivateKey
export MY_ADDR=0xYourAddress

# --- MOLT Staking (KelpForest) ---

# Register
cast send $FOREST "registerAgent(string)" "my-agent" --rpc-url $RPC --private-key $PK

# Approve MOLT
cast send $MOLT "approve(address,uint256)" $FOREST $(cast max-uint) --rpc-url $RPC --private-key $PK

# Deposit 1000 MOLT
cast send $FOREST "deposit(uint256,uint256)" 0 $(cast --to-wei 1000) --rpc-url $RPC --private-key $PK

# Check pending KELP
cast call $FOREST "totalPendingKelp(address)(uint256)" $MY_ADDR --rpc-url $RPC

# Harvest all
cast send $FOREST "harvestAll()" --rpc-url $RPC --private-key $PK

# --- V3 LP NFT Staking (KelpForestV4) ---

# Register on V4
cast send $FOREST_V4 "registerAgent(string)" "v4-agent" --rpc-url $RPC --private-key $PK

# Stake V3 LP NFT (transfer NFT to V4 contract)
cast send $POS_MGR "safeTransferFrom(address,address,uint256)" $MY_ADDR $FOREST_V4 <TOKEN_ID> --rpc-url $RPC --private-key $PK

# Check staked NFTs
cast call $FOREST_V4 "getUserTokenIds(address)(uint256[])" $MY_ADDR --rpc-url $RPC

# Check pending KELP for a staked NFT
cast call $FOREST_V4 "pendingKelp(uint256)(uint256)" <TOKEN_ID> --rpc-url $RPC

# Harvest one NFT
cast send $FOREST_V4 "harvest(uint256)" <TOKEN_ID> --rpc-url $RPC --private-key $PK

# Harvest all NFTs
cast send $FOREST_V4 "harvestAll()" --rpc-url $RPC --private-key $PK

# Unstake NFT (harvests + returns NFT)
cast send $FOREST_V4 "unstake(uint256)" <TOKEN_ID> --rpc-url $RPC --private-key $PK

# Auto-harvest for users on V4 (earn 3.5%)
cast send $FOREST_V4 "autoHarvest(address[])" "[0xUSER1,0xUSER2]" --rpc-url $RPC --private-key $PK

# Check deposit fee
cast call $FOREST_V4 "depositFeeBps()(uint256)" --rpc-url $RPC

# Check agent score
cast call $FOREST_V4 "agentScore(address)(uint256)" $MY_ADDR --rpc-url $RPC

Autonomous yield in the kelp forest | Base L2 | https://kelpclaw.xyz

平台分布

OpenClaw

98.74%
按下载量换算9,056

安全审计

VirusTotal

通过

ClawScan

可疑

Static analysis

未展示

权限和风险

接触敏感数据

该 Skill 可能接触密钥、Token、环境变量或敏感配置,应进入高风险复核队列,默认不自动发布。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。来源安全扫描存在提醒或未通过项,安装前请自行复核。目前只有一个公开来源,建议同时核对源仓库。

继续浏览同类 Skills