{
  "schemaVersion": "1.0",
  "item": {
    "slug": "stakingverse-lukso",
    "name": "Stakingverse Lukso",
    "source": "tencent",
    "type": "skill",
    "category": "AI 智能",
    "sourceUrl": "https://clawhub.ai/LUKSOAgent/stakingverse-lukso",
    "canonicalUrl": "https://clawhub.ai/LUKSOAgent/stakingverse-lukso",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/stakingverse-lukso",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=stakingverse-lukso",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "README.md",
      "SKILL.md",
      "scripts/balance.js",
      "scripts/claim.js",
      "scripts/stake.js",
      "scripts/unstake-request.js"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/stakingverse-lukso"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/stakingverse-lukso",
    "agentPageUrl": "https://openagent3.xyz/skills/stakingverse-lukso/agent",
    "manifestUrl": "https://openagent3.xyz/skills/stakingverse-lukso/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/stakingverse-lukso/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Stakingverse LUKSO Staking Skill",
        "body": "Stake LYX on Stakingverse and receive sLYX (liquid staking token). Earn ~8% APY while keeping your assets liquid."
      },
      {
        "title": "What This Skill Does",
        "body": "Stake LYX → Receive sLYX tokens immediately\nRequest unstake → Initiate withdrawal (requires oracle processing)\nClaim unstaked LYX → After oracle processes withdrawal request\nCheck sLYX balance → View your staked position\nCheck claimable LYX → See if withdrawal is ready to claim"
      },
      {
        "title": "Required Credentials",
        "body": "Set these environment variables or edit the scripts:\n\nexport STAKINGVERSE_VAULT=\"0x9F49a95b0c3c9e2A6c77a16C177928294c0F6F04\"\nexport MY_UP=\"your_universal_profile_address\"\nexport CONTROLLER=\"your_controller_address\"\nexport PRIVATE_KEY=\"your_controller_private_key\"\nexport RPC_URL=\"https://rpc.mainnet.lukso.network\""
      },
      {
        "title": "Quick Start",
        "body": "# Stake 10 LYX\nnode scripts/stake.js 10\n\n# Check sLYX balance\nnode scripts/balance.js\n\n# Request unstake of 5 sLYX\nnode scripts/unstake-request.js 5\n\n# Check if withdrawal is ready\nnode scripts/check-claim.js\n\n# Claim unstaked LYX (after oracle processes)\nnode scripts/claim.js"
      },
      {
        "title": "The Stakingverse Architecture",
        "body": "Stakingverse is a liquid staking protocol on LUKSO:\n\nYou stake LYX → Get sLYX tokens (1:1 ratio)\nsLYX appreciates → As staking rewards accrue, 1 sLYX > 1 LYX\nsLYX is liquid → Trade, transfer, or use in DeFi while earning\nUnstaking is 2-step → Request → Wait for oracle → Claim"
      },
      {
        "title": "Key Contracts",
        "body": "ContractAddressPurposeVault0x9F49a95b0c3c9e2A6c77a16C177928294c0F6F04Staking/unstaking logicsLYX Token0x8a3982f4abcdc30f777910e8b5b5d8242628290aLiquid staking token (LSP7)OracleMultipleValidates withdrawal requests"
      },
      {
        "title": "Staking Flow",
        "body": "You (Controller)\n    ↓\nKeyManager.execute()\n    ↓\nUP.execute(CALL, Vault, 10 LYX, deposit())\n    ↓\nVault receives LYX\n    ↓\nVault mints sLYX to your UP\n    ↓\nYou hold sLYX (earning rewards)"
      },
      {
        "title": "Unstaking Flow (Two-Step)",
        "body": "Step 1: Request Withdrawal\n    You (Controller)\n        ↓\n    KeyManager.execute()\n        ↓\n    UP.execute(CALL, Vault, 0, withdraw(sLYX_amount))\n        ↓\n    Vault burns sLYX\n        ↓\n    Oracle queue: withdrawal request created\n\nStep 2: Wait for Oracle\n    ↓ (Time passes - oracle processes)\n\nStep 3: Claim LYX\n    You (Controller)\n        ↓\n    KeyManager.execute()\n        ↓\n    UP.execute(CALL, Vault, 0, claim())\n        ↓\n    Oracle approves\n        ↓\n    Vault sends LYX to your UP"
      },
      {
        "title": "Stake LYX",
        "body": "const { ethers } = require('ethers');\n\n// Setup\nconst provider = new ethers.JsonRpcProvider(process.env.RPC_URL);\nconst wallet = new ethers.Wallet(process.env.PRIVATE_KEY, provider);\n\n// Vault ABI (minimal)\nconst VAULT_ABI = [\n  'function deposit() external payable',\n  'function balanceOf(address) view returns (uint256)'\n];\n\nconst LSP0_ABI = [\n  'function execute(uint256 operation, address target, uint256 value, bytes calldata data) external'\n];\n\nconst LSP6_ABI = [\n  'function execute(bytes calldata payload) external payable returns (bytes memory)'\n];\n\n// Amount to stake\nconst stakeAmount = ethers.parseEther('10'); // 10 LYX\n\n// Encode deposit call on Vault\nconst vaultInterface = new ethers.Interface(VAULT_ABI);\nconst depositData = vaultInterface.encodeFunctionData('deposit');\n\n// Encode execute call on UP\nconst upInterface = new ethers.Interface(LSP0_ABI);\nconst executeData = upInterface.encodeFunctionData('execute', [\n  0,                      // operation: CALL\n  process.env.STAKINGVERSE_VAULT,  // target: Vault\n  stakeAmount,            // value: LYX to stake\n  depositData             // data: deposit()\n]);\n\n// Send via KeyManager\nconst keyManager = new ethers.Contract(process.env.KEY_MANAGER, LSP6_ABI, wallet);\nconst tx = await keyManager.execute(executeData);\nconst receipt = await tx.wait();\n\nconsole.log(`Staked ${ethers.formatEther(stakeAmount)} LYX`);\nconsole.log(`Transaction: ${receipt.hash}`);"
      },
      {
        "title": "Check sLYX Balance",
        "body": "const SLYX_ABI = ['function balanceOf(address) view returns (uint256)'];\n\nconst slyx = new ethers.Contract(\n  '0x8a3982f4abcdc30f777910e8b5b5d8242628290a',\n  SLYX_ABI,\n  provider\n);\n\nconst balance = await slyx.balanceOf(process.env.MY_UP);\nconsole.log(`sLYX Balance: ${ethers.formatEther(balance)}`);"
      },
      {
        "title": "Request Unstake",
        "body": "const amountToUnstake = ethers.parseEther('5'); // 5 sLYX\n\n// Encode withdraw call on Vault\nconst withdrawData = vaultInterface.encodeFunctionData('withdraw', [amountToUnstake]);\n\n// Encode execute call on UP\nconst executeData = upInterface.encodeFunctionData('execute', [\n  0,                              // operation: CALL\n  process.env.STAKINGVERSE_VAULT, // target: Vault\n  0,                              // value: 0 (no ETH sent)\n  withdrawData                    // data: withdraw(amount)\n]);\n\n// Send via KeyManager\nconst tx = await keyManager.execute(executeData);\nawait tx.wait();\n\nconsole.log(`Unstake requested for ${ethers.formatEther(amountToUnstake)} sLYX`);\nconsole.log('Wait for oracle processing, then run claim.js');"
      },
      {
        "title": "Check Claimable LYX",
        "body": "const VAULT_FULL_ABI = [\n  'function getClaimableAmount(address) view returns (uint256)',\n  'function getPendingWithdrawals(address) view returns (uint256)'\n];\n\nconst vault = new ethers.Contract(\n  process.env.STAKINGVERSE_VAULT,\n  VAULT_FULL_ABI,\n  provider\n);\n\nconst claimable = await vault.getClaimableAmount(process.env.MY_UP);\nconst pending = await vault.getPendingWithdrawals(process.env.MY_UP);\n\nconsole.log(`Claimable LYX: ${ethers.formatEther(claimable)}`);\nconsole.log(`Pending withdrawals: ${ethers.formatEther(pending)}`);"
      },
      {
        "title": "Claim Unstaked LYX",
        "body": "// Encode claim call on Vault (no parameters)\nconst claimData = vaultInterface.encodeFunctionData('claim');\n\n// Encode execute call on UP\nconst executeData = upInterface.encodeFunctionData('execute', [\n  0,\n  process.env.STAKINGVERSE_VAULT,\n  0,\n  claimData\n]);\n\n// Send via KeyManager\nconst tx = await keyManager.execute(executeData);\nconst receipt = await tx.wait();\n\nconsole.log(`Claimed LYX to your UP`);\nconsole.log(`Transaction: ${receipt.hash}`);"
      },
      {
        "title": "Standard Pattern: KeyManager → UP → Target",
        "body": "All transactions must follow this flow:\n\n// 1. Encode the target contract call\nconst targetData = targetInterface.encodeFunctionData('functionName', [args]);\n\n// 2. Encode UP.execute() wrapper\nconst upData = upInterface.encodeFunctionData('execute', [\n  0,              // operation type (0 = CALL)\n  targetAddress,  // target contract\n  value,          // LYX to send (0 for most calls)\n  targetData      // encoded function call\n]);\n\n// 3. Send via KeyManager\nconst tx = await keyManager.execute(upData);"
      },
      {
        "title": "\"Insufficient permissions\"",
        "body": "Your controller needs CALL and TRANSFERVALUE permissions\nCheck: keyManager.getPermissions(controllerAddress)"
      },
      {
        "title": "\"Withdrawal not ready\"",
        "body": "Oracle hasn't processed your request yet\nCheck claimable amount before calling claim()\nCan take hours depending on oracle"
      },
      {
        "title": "\"Invalid amount\"",
        "body": "Trying to unstake more sLYX than you have\nCheck balance first: sLYX.balanceOf(UP_ADDRESS)"
      },
      {
        "title": "Important Notes",
        "body": "APY varies: Currently ~8%, but changes based on network conditions\nsLYX is LSP7: Fungible token standard (like ERC20)\nRewards auto-compound: sLYX value increases, no need to claim\nOracle dependency: Unstaking requires oracle validation for security\nGas costs: Controller pays gas for all transactions"
      },
      {
        "title": "Resources",
        "body": "Stakingverse App: https://app.stakingverse.io\nStakingverse Docs: https://docs.stakingverse.io\nLUKSO Docs: https://docs.lukso.tech\nsLYX Token: 0x8a3982f4abcdc30f777910e8b5b5d8242628290a"
      }
    ],
    "body": "Stakingverse LUKSO Staking Skill\n\nStake LYX on Stakingverse and receive sLYX (liquid staking token). Earn ~8% APY while keeping your assets liquid.\n\nWhat This Skill Does\nStake LYX → Receive sLYX tokens immediately\nRequest unstake → Initiate withdrawal (requires oracle processing)\nClaim unstaked LYX → After oracle processes withdrawal request\nCheck sLYX balance → View your staked position\nCheck claimable LYX → See if withdrawal is ready to claim\nRequired Credentials\n\nSet these environment variables or edit the scripts:\n\nexport STAKINGVERSE_VAULT=\"0x9F49a95b0c3c9e2A6c77a16C177928294c0F6F04\"\nexport MY_UP=\"your_universal_profile_address\"\nexport CONTROLLER=\"your_controller_address\"\nexport PRIVATE_KEY=\"your_controller_private_key\"\nexport RPC_URL=\"https://rpc.mainnet.lukso.network\"\n\nQuick Start\n# Stake 10 LYX\nnode scripts/stake.js 10\n\n# Check sLYX balance\nnode scripts/balance.js\n\n# Request unstake of 5 sLYX\nnode scripts/unstake-request.js 5\n\n# Check if withdrawal is ready\nnode scripts/check-claim.js\n\n# Claim unstaked LYX (after oracle processes)\nnode scripts/claim.js\n\nHow It Works\nThe Stakingverse Architecture\n\nStakingverse is a liquid staking protocol on LUKSO:\n\nYou stake LYX → Get sLYX tokens (1:1 ratio)\nsLYX appreciates → As staking rewards accrue, 1 sLYX > 1 LYX\nsLYX is liquid → Trade, transfer, or use in DeFi while earning\nUnstaking is 2-step → Request → Wait for oracle → Claim\nKey Contracts\nContract\tAddress\tPurpose\nVault\t0x9F49a95b0c3c9e2A6c77a16C177928294c0F6F04\tStaking/unstaking logic\nsLYX Token\t0x8a3982f4abcdc30f777910e8b5b5d8242628290a\tLiquid staking token (LSP7)\nOracle\tMultiple\tValidates withdrawal requests\nStaking Flow\nYou (Controller)\n    ↓\nKeyManager.execute()\n    ↓\nUP.execute(CALL, Vault, 10 LYX, deposit())\n    ↓\nVault receives LYX\n    ↓\nVault mints sLYX to your UP\n    ↓\nYou hold sLYX (earning rewards)\n\nUnstaking Flow (Two-Step)\nStep 1: Request Withdrawal\n    You (Controller)\n        ↓\n    KeyManager.execute()\n        ↓\n    UP.execute(CALL, Vault, 0, withdraw(sLYX_amount))\n        ↓\n    Vault burns sLYX\n        ↓\n    Oracle queue: withdrawal request created\n\nStep 2: Wait for Oracle\n    ↓ (Time passes - oracle processes)\n\nStep 3: Claim LYX\n    You (Controller)\n        ↓\n    KeyManager.execute()\n        ↓\n    UP.execute(CALL, Vault, 0, claim())\n        ↓\n    Oracle approves\n        ↓\n    Vault sends LYX to your UP\n\nDetailed Usage\nStake LYX\nconst { ethers } = require('ethers');\n\n// Setup\nconst provider = new ethers.JsonRpcProvider(process.env.RPC_URL);\nconst wallet = new ethers.Wallet(process.env.PRIVATE_KEY, provider);\n\n// Vault ABI (minimal)\nconst VAULT_ABI = [\n  'function deposit() external payable',\n  'function balanceOf(address) view returns (uint256)'\n];\n\nconst LSP0_ABI = [\n  'function execute(uint256 operation, address target, uint256 value, bytes calldata data) external'\n];\n\nconst LSP6_ABI = [\n  'function execute(bytes calldata payload) external payable returns (bytes memory)'\n];\n\n// Amount to stake\nconst stakeAmount = ethers.parseEther('10'); // 10 LYX\n\n// Encode deposit call on Vault\nconst vaultInterface = new ethers.Interface(VAULT_ABI);\nconst depositData = vaultInterface.encodeFunctionData('deposit');\n\n// Encode execute call on UP\nconst upInterface = new ethers.Interface(LSP0_ABI);\nconst executeData = upInterface.encodeFunctionData('execute', [\n  0,                      // operation: CALL\n  process.env.STAKINGVERSE_VAULT,  // target: Vault\n  stakeAmount,            // value: LYX to stake\n  depositData             // data: deposit()\n]);\n\n// Send via KeyManager\nconst keyManager = new ethers.Contract(process.env.KEY_MANAGER, LSP6_ABI, wallet);\nconst tx = await keyManager.execute(executeData);\nconst receipt = await tx.wait();\n\nconsole.log(`Staked ${ethers.formatEther(stakeAmount)} LYX`);\nconsole.log(`Transaction: ${receipt.hash}`);\n\nCheck sLYX Balance\nconst SLYX_ABI = ['function balanceOf(address) view returns (uint256)'];\n\nconst slyx = new ethers.Contract(\n  '0x8a3982f4abcdc30f777910e8b5b5d8242628290a',\n  SLYX_ABI,\n  provider\n);\n\nconst balance = await slyx.balanceOf(process.env.MY_UP);\nconsole.log(`sLYX Balance: ${ethers.formatEther(balance)}`);\n\nRequest Unstake\nconst amountToUnstake = ethers.parseEther('5'); // 5 sLYX\n\n// Encode withdraw call on Vault\nconst withdrawData = vaultInterface.encodeFunctionData('withdraw', [amountToUnstake]);\n\n// Encode execute call on UP\nconst executeData = upInterface.encodeFunctionData('execute', [\n  0,                              // operation: CALL\n  process.env.STAKINGVERSE_VAULT, // target: Vault\n  0,                              // value: 0 (no ETH sent)\n  withdrawData                    // data: withdraw(amount)\n]);\n\n// Send via KeyManager\nconst tx = await keyManager.execute(executeData);\nawait tx.wait();\n\nconsole.log(`Unstake requested for ${ethers.formatEther(amountToUnstake)} sLYX`);\nconsole.log('Wait for oracle processing, then run claim.js');\n\nCheck Claimable LYX\nconst VAULT_FULL_ABI = [\n  'function getClaimableAmount(address) view returns (uint256)',\n  'function getPendingWithdrawals(address) view returns (uint256)'\n];\n\nconst vault = new ethers.Contract(\n  process.env.STAKINGVERSE_VAULT,\n  VAULT_FULL_ABI,\n  provider\n);\n\nconst claimable = await vault.getClaimableAmount(process.env.MY_UP);\nconst pending = await vault.getPendingWithdrawals(process.env.MY_UP);\n\nconsole.log(`Claimable LYX: ${ethers.formatEther(claimable)}`);\nconsole.log(`Pending withdrawals: ${ethers.formatEther(pending)}`);\n\nClaim Unstaked LYX\n// Encode claim call on Vault (no parameters)\nconst claimData = vaultInterface.encodeFunctionData('claim');\n\n// Encode execute call on UP\nconst executeData = upInterface.encodeFunctionData('execute', [\n  0,\n  process.env.STAKINGVERSE_VAULT,\n  0,\n  claimData\n]);\n\n// Send via KeyManager\nconst tx = await keyManager.execute(executeData);\nconst receipt = await tx.wait();\n\nconsole.log(`Claimed LYX to your UP`);\nconsole.log(`Transaction: ${receipt.hash}`);\n\nTransaction Flow Reference\nStandard Pattern: KeyManager → UP → Target\n\nAll transactions must follow this flow:\n\n// 1. Encode the target contract call\nconst targetData = targetInterface.encodeFunctionData('functionName', [args]);\n\n// 2. Encode UP.execute() wrapper\nconst upData = upInterface.encodeFunctionData('execute', [\n  0,              // operation type (0 = CALL)\n  targetAddress,  // target contract\n  value,          // LYX to send (0 for most calls)\n  targetData      // encoded function call\n]);\n\n// 3. Send via KeyManager\nconst tx = await keyManager.execute(upData);\n\nCommon Issues\n\"Insufficient permissions\"\nYour controller needs CALL and TRANSFERVALUE permissions\nCheck: keyManager.getPermissions(controllerAddress)\n\"Withdrawal not ready\"\nOracle hasn't processed your request yet\nCheck claimable amount before calling claim()\nCan take hours depending on oracle\n\"Invalid amount\"\nTrying to unstake more sLYX than you have\nCheck balance first: sLYX.balanceOf(UP_ADDRESS)\nImportant Notes\nAPY varies: Currently ~8%, but changes based on network conditions\nsLYX is LSP7: Fungible token standard (like ERC20)\nRewards auto-compound: sLYX value increases, no need to claim\nOracle dependency: Unstaking requires oracle validation for security\nGas costs: Controller pays gas for all transactions\nResources\nStakingverse App: https://app.stakingverse.io\nStakingverse Docs: https://docs.stakingverse.io\nLUKSO Docs: https://docs.lukso.tech\nsLYX Token: 0x8a3982f4abcdc30f777910e8b5b5d8242628290a"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/LUKSOAgent/stakingverse-lukso",
    "publisherUrl": "https://clawhub.ai/LUKSOAgent/stakingverse-lukso",
    "owner": "LUKSOAgent",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/stakingverse-lukso",
    "downloadUrl": "https://openagent3.xyz/downloads/stakingverse-lukso",
    "agentUrl": "https://openagent3.xyz/skills/stakingverse-lukso/agent",
    "manifestUrl": "https://openagent3.xyz/skills/stakingverse-lukso/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/stakingverse-lukso/agent.md"
  }
}