/SKILL.md
Privacy-preserving payment and DeFi operations for the smolseek game on Monad testnet. Use this skill to interact with the Unlink escrow service: check escrow health and balance, verify private bids from players, list confirmed bids per round, distribute winnings to winners, and execute private token swaps via Uniswap. All transactions use ZK proofs via the Unlink protocol — sender, amount, and recipient are hidden on-chain. Requires the unlink-service to be running (default localhost:3001).
npx skillsauth add superposition/openclaw-unlink unlinkInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
This skill wraps the smolseek Unlink escrow service (game/unlink-service/) as agent-friendly shell scripts. The service manages privacy-preserving payments on Monad testnet using the @unlink-xyz/node SDK.
| Asset | Decimals | Description |
|-------|----------|-------------|
| MON | 18 | Native Monad testnet token |
| ERC20 | 18 | Any Unlink-supported ERC20 (set ESCROW_TOKEN) |
cd game/unlink-service
npm install
npm run dev
The service runs on http://localhost:3001 by default. Verify with:
curl http://localhost:3001/health
# → {"status":"ok","service":"smolseek-unlink"}
If the service runs on a different host/port, set:
export UNLINK_SERVICE_URL=http://your-host:3001
Default: http://localhost:3001
chmod +x skills/unlink/scripts/*.sh
skills/unlink/scripts/unlink-status.sh
Checks service health, displays escrow address and MON balance. Use this as the first call to verify everything is working.
skills/unlink/scripts/unlink-address.sh
Returns the raw Unlink escrow wallet address. Use when telling a player where to send funds.
# Simple balance (wei)
skills/unlink/scripts/unlink-balance.sh
# Combined pool info (address + balance)
skills/unlink/scripts/unlink-balance.sh --pool
skills/unlink/scripts/unlink-bid-verify.sh \
--relay-id 0xabc123... \
--player-id player_1 \
--cache-id cache_2 \
--round 1
Verifies that a player's private bid actually landed in escrow. This may take up to 30 seconds as the service polls the Unlink relay for confirmation.
Required args: --relay-id, --player-id, --cache-id
Optional args: --round (defaults to 0)
skills/unlink/scripts/unlink-bid-list.sh <round>
Returns all confirmed bids for the given round, sorted by amount descending (highest bidder first).
skills/unlink/scripts/unlink-distribute.sh \
--recipient 0xdef456... \
--amount 1000000000000000000 \
--round 1
Sends MON tokens from escrow to the winner. Includes double-send protection — if a distribution has already been made for this round+recipient, it returns an error instead of sending again.
Required args: --recipient, --amount (in wei)
Optional args: --round (defaults to 0)
skills/unlink/scripts/unlink-sync.sh
Re-scans the Unlink relay for incoming transfers. Call this after sending tokens to the escrow from an external wallet (e.g. unlink-cli send) to ensure the balance is up to date.
skills/unlink/scripts/unlink-pool.sh
Returns combined escrow address and balance as JSON. Convenience wrapper for agents needing the full pool state.
skills/unlink/scripts/unlink-tokens.sh
Lists all tokens available for swapping on Monad testnet, including their address, symbol, and decimals.
skills/unlink/scripts/unlink-swap.sh \
--token-in 0xaaa4e95d4da878baf8e10745fdf26e196918df6b \
--token-out 0x3bd359C1119dA7Da1D913D1C4D2B7c461115433A \
--amount-in 1000000000000000000 \
--min-out 0
Executes a private token swap via Uniswap V2 on Monad testnet. Tokens unshield from the privacy pool, swap atomically through Uniswap, and output tokens reshield back into the pool. No one sees what was swapped.
Required args: --token-in, --token-out, --amount-in (in wei)
Optional args: --min-out (minimum output amount in wei, defaults to 0)
Note: The swap timeout is 120 seconds. Swap will only succeed if there is liquidity in the Uniswap pool for the token pair. Use WMON pairs for best liquidity.
skills/unlink/scripts/unlink-burner.sh
Shows the burner EOA address and native MON balance. The burner wallet is used for public on-chain operations (deploy, mint, add liquidity). Fund it via the Monad faucet before deploying contracts.
skills/unlink/scripts/unlink-deploy-token.sh \
--name "Test Token" \
--symbol "TEST" \
--supply 1000000000000000000000000
Deploys a new mintable ERC20 token on Monad testnet from the burner wallet. Anyone can call mint() on the deployed token (testnet only, no access control).
Required args: --name, --symbol
Optional args: --supply (initial supply in wei, minted to deployer, default: 0)
skills/unlink/scripts/unlink-mint.sh \
--token 0x... \
--amount 1000000000000000000000 \
--to 0x...
Mints tokens on a previously deployed mintable ERC20.
Required args: --token, --amount (in wei)
Optional args: --to (recipient address, defaults to burner wallet)
skills/unlink/scripts/unlink-add-liquidity.sh \
--token-a 0x... \
--token-b 0x3bd359C1119dA7Da1D913D1C4D2B7c461115433A \
--amount-a 1000000000000000000000 \
--amount-b 1000000000000000000000
Adds liquidity to a Uniswap V2 pool on Monad testnet. Approves both tokens for the router, then calls addLiquidity. Creates the pair if it doesn't exist. The burner wallet must hold both tokens and native MON for gas.
Required args: --token-a, --token-b, --amount-a, --amount-b (all amounts in wei)
@unlink-xyz/node SDK reference| Variable | Default | Description |
|----------|---------|-------------|
| UNLINK_SERVICE_URL | http://localhost:3001 | Base URL of the escrow service |
| UNLINK_MNEMONIC | (none) | Import existing wallet (omit for fresh wallet) |
| ESCROW_TOKEN | 0xaaa4...df6b | Token address for escrow operations |
escrow.db (SQLite) alongside the service.bids.db (SQLite).unlink-sync.sh before checking balance..env files or database files to git.testing
Create, edit, improve, or audit AgentSkills. Use when creating a new skill from scratch or when asked to improve, review, audit, tidy up, or clean up an existing skill or SKILL.md file. Also use when editing or restructuring a skill directory (moving files to references/ or scripts/, removing stale content, validating against the AgentSkills spec). Triggers on phrases like "create a skill", "author a skill", "tidy up a skill", "improve this skill", "review the skill", "clean up the skill", "audit the skill".
testing
Host security hardening and risk-tolerance configuration for OpenClaw deployments. Use when a user asks for security audits, firewall/SSH/update hardening, risk posture, exposure review, OpenClaw cron scheduling for periodic checks, or version status checks on a machine running OpenClaw (laptop, workstation, Pi, VPS).
testing
Create, edit, improve, or audit AgentSkills. Use when creating a new skill from scratch or when asked to improve, review, audit, tidy up, or clean up an existing skill or SKILL.md file. Also use when editing or restructuring a skill directory (moving files to references/ or scripts/, removing stale content, validating against the AgentSkills spec). Triggers on phrases like "create a skill", "author a skill", "tidy up a skill", "improve this skill", "review the skill", "clean up the skill", "audit the skill".
testing
Host security hardening and risk-tolerance configuration for OpenClaw deployments. Use when a user asks for security audits, firewall/SSH/update hardening, risk posture, exposure review, OpenClaw cron scheduling for periodic checks, or version status checks on a machine running OpenClaw (laptop, workstation, Pi, VPS).