# Send Stakingverse Lukso to your agent
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
## Fast path
- 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.
## Suggested prompts
### New install

```text
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.
```
### Upgrade existing

```text
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.
```
## Machine-readable fields
```json
{
  "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": {
    "downloadUrl": "/downloads/stakingverse-lukso",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=stakingverse-lukso",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "packageFormat": "ZIP package",
    "primaryDoc": "SKILL.md",
    "includedAssets": [
      "README.md",
      "SKILL.md",
      "scripts/balance.js",
      "scripts/claim.js",
      "scripts/stake.js",
      "scripts/unstake-request.js"
    ],
    "downloadMode": "redirect",
    "sourceHealth": {
      "source": "tencent",
      "slug": "stakingverse-lukso",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-03T21:37:39.078Z",
      "expiresAt": "2026-05-10T21:37:39.078Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=stakingverse-lukso",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=stakingverse-lukso",
        "contentDisposition": "attachment; filename=\"stakingverse-lukso-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null,
        "slug": "stakingverse-lukso"
      },
      "scope": "item",
      "summary": "Item download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this item.",
      "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."
      ]
    }
  },
  "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"
  }
}
```
## Documentation

### Stakingverse LUKSO Staking Skill

Stake LYX on Stakingverse and receive sLYX (liquid staking token). Earn ~8% APY while keeping your assets liquid.

### What This Skill Does

Stake LYX → Receive sLYX tokens immediately
Request unstake → Initiate withdrawal (requires oracle processing)
Claim unstaked LYX → After oracle processes withdrawal request
Check sLYX balance → View your staked position
Check claimable LYX → See if withdrawal is ready to claim

### Required Credentials

Set these environment variables or edit the scripts:

export STAKINGVERSE_VAULT="0x9F49a95b0c3c9e2A6c77a16C177928294c0F6F04"
export MY_UP="your_universal_profile_address"
export CONTROLLER="your_controller_address"
export PRIVATE_KEY="your_controller_private_key"
export RPC_URL="https://rpc.mainnet.lukso.network"

### Quick Start

# Stake 10 LYX
node scripts/stake.js 10

# Check sLYX balance
node scripts/balance.js

# Request unstake of 5 sLYX
node scripts/unstake-request.js 5

# Check if withdrawal is ready
node scripts/check-claim.js

# Claim unstaked LYX (after oracle processes)
node scripts/claim.js

### The Stakingverse Architecture

Stakingverse is a liquid staking protocol on LUKSO:

You stake LYX → Get sLYX tokens (1:1 ratio)
sLYX appreciates → As staking rewards accrue, 1 sLYX > 1 LYX
sLYX is liquid → Trade, transfer, or use in DeFi while earning
Unstaking is 2-step → Request → Wait for oracle → Claim

### Key Contracts

ContractAddressPurposeVault0x9F49a95b0c3c9e2A6c77a16C177928294c0F6F04Staking/unstaking logicsLYX Token0x8a3982f4abcdc30f777910e8b5b5d8242628290aLiquid staking token (LSP7)OracleMultipleValidates withdrawal requests

### Staking Flow

You (Controller)
    ↓
KeyManager.execute()
    ↓
UP.execute(CALL, Vault, 10 LYX, deposit())
    ↓
Vault receives LYX
    ↓
Vault mints sLYX to your UP
    ↓
You hold sLYX (earning rewards)

### Unstaking Flow (Two-Step)

Step 1: Request Withdrawal
    You (Controller)
        ↓
    KeyManager.execute()
        ↓
    UP.execute(CALL, Vault, 0, withdraw(sLYX_amount))
        ↓
    Vault burns sLYX
        ↓
    Oracle queue: withdrawal request created

Step 2: Wait for Oracle
    ↓ (Time passes - oracle processes)

Step 3: Claim LYX
    You (Controller)
        ↓
    KeyManager.execute()
        ↓
    UP.execute(CALL, Vault, 0, claim())
        ↓
    Oracle approves
        ↓
    Vault sends LYX to your UP

### Stake LYX

const { ethers } = require('ethers');

// Setup
const provider = new ethers.JsonRpcProvider(process.env.RPC_URL);
const wallet = new ethers.Wallet(process.env.PRIVATE_KEY, provider);

// Vault ABI (minimal)
const VAULT_ABI = [
  'function deposit() external payable',
  'function balanceOf(address) view returns (uint256)'
];

const LSP0_ABI = [
  'function execute(uint256 operation, address target, uint256 value, bytes calldata data) external'
];

const LSP6_ABI = [
  'function execute(bytes calldata payload) external payable returns (bytes memory)'
];

// Amount to stake
const stakeAmount = ethers.parseEther('10'); // 10 LYX

// Encode deposit call on Vault
const vaultInterface = new ethers.Interface(VAULT_ABI);
const depositData = vaultInterface.encodeFunctionData('deposit');

// Encode execute call on UP
const upInterface = new ethers.Interface(LSP0_ABI);
const executeData = upInterface.encodeFunctionData('execute', [
  0,                      // operation: CALL
  process.env.STAKINGVERSE_VAULT,  // target: Vault
  stakeAmount,            // value: LYX to stake
  depositData             // data: deposit()
]);

// Send via KeyManager
const keyManager = new ethers.Contract(process.env.KEY_MANAGER, LSP6_ABI, wallet);
const tx = await keyManager.execute(executeData);
const receipt = await tx.wait();

console.log(\`Staked ${ethers.formatEther(stakeAmount)} LYX\`);
console.log(\`Transaction: ${receipt.hash}\`);

### Check sLYX Balance

const SLYX_ABI = ['function balanceOf(address) view returns (uint256)'];

const slyx = new ethers.Contract(
  '0x8a3982f4abcdc30f777910e8b5b5d8242628290a',
  SLYX_ABI,
  provider
);

const balance = await slyx.balanceOf(process.env.MY_UP);
console.log(\`sLYX Balance: ${ethers.formatEther(balance)}\`);

### Request Unstake

const amountToUnstake = ethers.parseEther('5'); // 5 sLYX

// Encode withdraw call on Vault
const withdrawData = vaultInterface.encodeFunctionData('withdraw', [amountToUnstake]);

// Encode execute call on UP
const executeData = upInterface.encodeFunctionData('execute', [
  0,                              // operation: CALL
  process.env.STAKINGVERSE_VAULT, // target: Vault
  0,                              // value: 0 (no ETH sent)
  withdrawData                    // data: withdraw(amount)
]);

// Send via KeyManager
const tx = await keyManager.execute(executeData);
await tx.wait();

console.log(\`Unstake requested for ${ethers.formatEther(amountToUnstake)} sLYX\`);
console.log('Wait for oracle processing, then run claim.js');

### Check Claimable LYX

const VAULT_FULL_ABI = [
  'function getClaimableAmount(address) view returns (uint256)',
  'function getPendingWithdrawals(address) view returns (uint256)'
];

const vault = new ethers.Contract(
  process.env.STAKINGVERSE_VAULT,
  VAULT_FULL_ABI,
  provider
);

const claimable = await vault.getClaimableAmount(process.env.MY_UP);
const pending = await vault.getPendingWithdrawals(process.env.MY_UP);

console.log(\`Claimable LYX: ${ethers.formatEther(claimable)}\`);
console.log(\`Pending withdrawals: ${ethers.formatEther(pending)}\`);

### Claim Unstaked LYX

// Encode claim call on Vault (no parameters)
const claimData = vaultInterface.encodeFunctionData('claim');

// Encode execute call on UP
const executeData = upInterface.encodeFunctionData('execute', [
  0,
  process.env.STAKINGVERSE_VAULT,
  0,
  claimData
]);

// Send via KeyManager
const tx = await keyManager.execute(executeData);
const receipt = await tx.wait();

console.log(\`Claimed LYX to your UP\`);
console.log(\`Transaction: ${receipt.hash}\`);

### Standard Pattern: KeyManager → UP → Target

All transactions must follow this flow:

// 1. Encode the target contract call
const targetData = targetInterface.encodeFunctionData('functionName', [args]);

// 2. Encode UP.execute() wrapper
const upData = upInterface.encodeFunctionData('execute', [
  0,              // operation type (0 = CALL)
  targetAddress,  // target contract
  value,          // LYX to send (0 for most calls)
  targetData      // encoded function call
]);

// 3. Send via KeyManager
const tx = await keyManager.execute(upData);

### "Insufficient permissions"

Your controller needs CALL and TRANSFERVALUE permissions
Check: keyManager.getPermissions(controllerAddress)

### "Withdrawal not ready"

Oracle hasn't processed your request yet
Check claimable amount before calling claim()
Can take hours depending on oracle

### "Invalid amount"

Trying to unstake more sLYX than you have
Check balance first: sLYX.balanceOf(UP_ADDRESS)

### Important Notes

APY varies: Currently ~8%, but changes based on network conditions
sLYX is LSP7: Fungible token standard (like ERC20)
Rewards auto-compound: sLYX value increases, no need to claim
Oracle dependency: Unstaking requires oracle validation for security
Gas costs: Controller pays gas for all transactions

### Resources

Stakingverse App: https://app.stakingverse.io
Stakingverse Docs: https://docs.stakingverse.io
LUKSO Docs: https://docs.lukso.tech
sLYX Token: 0x8a3982f4abcdc30f777910e8b5b5d8242628290a
## Trust
- Source: tencent
- Verification: Indexed source record
- Publisher: LUKSOAgent
- Version: 1.0.0
## Source health
- Status: healthy
- Item download looks usable.
- Yavira can redirect you to the upstream package for this item.
- Health scope: item
- Reason: direct_download_ok
- Checked at: 2026-05-03T21:37:39.078Z
- Expires at: 2026-05-10T21:37:39.078Z
- Recommended action: Download for OpenClaw
## Links
- [Detail page](https://openagent3.xyz/skills/stakingverse-lukso)
- [Send to Agent page](https://openagent3.xyz/skills/stakingverse-lukso/agent)
- [JSON manifest](https://openagent3.xyz/skills/stakingverse-lukso/agent.json)
- [Markdown brief](https://openagent3.xyz/skills/stakingverse-lukso/agent.md)
- [Download page](https://openagent3.xyz/downloads/stakingverse-lukso)