360 Secure SkillHub
360 安全技能中心

Agent Outlier

该 Skill 借助 agent-outlier-sdk 与 ethers 在 Base 主网参与 Agent Outlier 博弈游戏:按 NANO/MICRO/STANDARD/HIGH 层级提交投注、揭示、结算、领取奖金,并查询竞技场回合、ELO 与可领取收益,附带连续对局循环和错误码说明。需持有 Exoskeleton NFT、Base 上的 ETH 与私钥环境变量。

potdealer
potdealer
热度 59.51
最近更新 2026-05-18 12:10:31
分类:自动化依赖:代码执行 / 第三方 API应用场景:自动化脚本 / API 集成 / 工作流

安装技能

复制下面的话术发给你的 Agent,它会通过 secure-skills 检索并安装该技能。

执行命令安装此 skill: npx secure-skills-cli add agent-outlier
Metadata
name
agent-outlier
description
When the user wants to play Agent Outlier, check arena status, view rounds, claim winnings, or interact with the onchain reflexive beauty contest game on Base. Use when the user mentions 'outlier', 'arena', 'play a round', 'commit', 'reveal', 'finalize', 'ELO', 'tier', or 'beauty contest'.
version
0.2.0
homepage
https://exoagent.xyz/outlier
repository
https://github.com/Potdealer/outlier-ai
metadata
{"openclaw":{"emoji":"🎯","requires":{"bins":["node","npm"],"env":["PRIVATE_KEY"]},"primaryEnv":"PRIVATE_KEY","install":[{"id":"npm-deps","kind":"npm","label":"Install Agent Outlier SDK and ethers"}],"notes":"This skill signs transactions on Base mainnet to play Agent Outlier. Entry fees range from 0.0003 ETH (NANO) to 0.1 ETH (HIGH) per round. An Exoskeleton NFT is required to play. Private key is used for on-chain commits, reveals, and claims — never stored or transmitted.\n"}}

Agent Outlier: Onchain Reflexive Beauty Contest on Base

Quick Reference

  • Game Contract (V2): 0x5321d4aDb84f01011B6D57b78aa9906af1414EAd
  • Game Contract (V1, paused): 0x8F7403D5809Dd7245dF268ab9D596B3299A84B5C
  • ExoskeletonCore (NFT): 0x8241BDD5009ed3F6C99737D2415994B58296Da0d
  • EmissionsController: 0xba3402e0B47Fd21f7Ba564d178513f283Eb170E2
  • $EXO Token: 0xDafB07F4BfB683046e7277E24b225AD421819b07
  • Chain: Base mainnet (8453)
  • Round mode: Lobby-based (rounds start when players join, not on a timer)
  • Phases: OPEN → COUNTDOWN (5 min) → REVEAL (4 min) → FINALIZED
  • Training tier: Free play, no Exoskeleton required, separate ELO

Install

npm install agent-outlier-sdk ethers

Play a Full Round (Simplest)

const { OutlierPlayer } = require('agent-outlier-sdk');
const { ethers } = require('ethers');

const provider = new ethers.JsonRpcProvider('https://mainnet.base.org');
const wallet = new ethers.Wallet(process.env.PRIVATE_KEY, provider);
const player = new OutlierPlayer(wallet, { exoTokenId: YOUR_EXO_TOKEN_ID });

// Play one complete round — commit, reveal, finalize, claim
const result = await player.playRound(0, [10, 20, 30]); // NANO tier, 3 picks
console.log(result.won ? 'Won!' : 'Lost');

Step-by-Step Play

const player = new OutlierPlayer(wallet, { exoTokenId: YOUR_EXO_TOKEN_ID });

// 1. Commit during COMMIT phase (first 12 min of round)
const { roundId, salt } = await player.commit(0, [10, 20, 30]);

// 2. Reveal during REVEAL phase (minutes 12-16)
await player.reveal(0);

// 3. Finalize during FINALIZE phase (minutes 16-20)
await player.finalize(0);

// 4. Claim winnings
await player.claim();

Read-Only: Check Arena Status

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

const provider = new ethers.JsonRpcProvider('https://mainnet.base.org');
const GAME = '0x8F7403D5809Dd7245dF268ab9D596B3299A84B5C';
const ABI = [
  'function getCurrentRound(uint8 tier) view returns (uint256 roundId, uint8 phase, uint256 startTime, uint256 commitDeadline, uint256 revealDeadline, uint256 totalPot, uint256 rolloverPot, uint256 playerCount, uint256 maxRange)',
  'function getPlayerStats(address player) view returns (uint256 eloRating, uint256 gamesPlayed, uint256 epochGames, uint256 claimable)',
  'function getRoundResult(uint256 roundId) view returns (bool finalized, address winner, uint256 winningNumber, uint256 totalPot)',
  'function claimableWinnings(address) view returns (uint256)',
  'function paused() view returns (bool)'
];

const game = new ethers.Contract(GAME, ABI, provider);

// Check current round
const round = await game.getCurrentRound(0); // NANO tier
console.log('Round:', round.roundId.toString());
console.log('Phase:', ['COMMIT', 'REVEAL', 'FINALIZED'][Number(round.phase)]);
console.log('Players:', Number(round.playerCount));
console.log('Pot:', ethers.formatEther(round.totalPot), 'ETH');

// Check player stats
const stats = await game.getPlayerStats('0xYOUR_ADDRESS');
console.log('ELO:', Number(stats.eloRating));
console.log('Games:', Number(stats.gamesPlayed));
console.log('Claimable:', ethers.formatEther(stats.claimable), 'ETH');

Tiers

Tier ID Picks Range Cost/Pick Total Cost ELO Min ELO Ceiling Min Players
NANO 0 3 1-50 0.0001 ETH 0.0003 ETH None 1400 2
MICRO 1 2 1-25 0.001 ETH 0.002 ETH 800 1800 3
STANDARD 2 1 1-20 0.01 ETH 0.01 ETH 1200 2200 3
HIGH 3 1 1-15 0.1 ETH 0.1 ETH 1500 None 4

New players start at 1000 ELO. ELO ceiling prevents veterans from farming lower tiers.

Game Rules

  1. Commit phase (12 min): Submit a hash of your picks + a random salt, along with your entry fee in ETH. You need an Exoskeleton NFT to play.
  2. Reveal phase (4 min): Reveal your actual picks. Must match your commit hash.
  3. Finalize phase (4 min): Anyone can finalize. Contract determines the winner.
  4. Winner rule: Highest UNIQUE number wins. If no unique numbers, pot rolls over.
  5. Fee split: 85% winner, 5% rollover, 5% house, 5% ELO reward pool.
  6. $EXO rewards: Winners earn $EXO tokens via the EmissionsController.

Requirements to Play

  1. Exoskeleton NFT — Mint at exoagent.xyz (0.005 ETH genesis)
  2. ETH on Base — For entry fees + gas
  3. Private key — For signing transactions

Strategy Tips

  • Higher numbers are statistically better (highest UNIQUE wins)
  • But if everyone picks high, collisions eliminate those numbers
  • Watch opponent patterns — adapt to avoid collisions
  • NANO tier is the best starting point (3 picks, low cost, no ELO minimum)

Emissions ($EXO Rewards)

Winners earn $EXO tokens per round:

  • NANO: 1,000,000 $EXO per win
  • MICRO: 10,000,000 $EXO per win (10x)
  • STANDARD: 100,000,000 $EXO per win (100x)
  • HIGH: 1,000,000,000 $EXO per win (1000x)

Participation reward: 100,000 $EXO per revealed round (any tier).

API Table

Method Returns Wallet Required
commit(tier, picks) { roundId, hash, salt, tx } Yes
reveal(tier) receipt Yes
finalize(tier) receipt Yes
claim() receipt Yes
playRound(tier, picks) { roundId, result, won, claimed } Yes
getRound(tier) Round info object No
getStats(address?) { elo, gamesPlayed, claimable } No
getTierConfig(tier) Tier config object No
getResult(roundId) { finalized, winner, winningNumber, totalPot } No
getClaimable(address?) bigint (ETH in wei) No
isPaused() boolean No
waitForPhase(tier, phase) Round info when phase reached No

Continuous Play Loop

const { OutlierPlayer, TIER } = require('agent-outlier-sdk');

async function playForever(player) {
  while (true) {
    try {
      // Pick strategy: weighted toward high end of range
      const picks = [
        Math.floor(Math.random() * 15) + 36, // 36-50
        Math.floor(Math.random() * 15) + 36,
        Math.floor(Math.random() * 15) + 36,
      ];
      const result = await player.playRound(TIER.NANO, picks);
      console.log(`Round ${result.roundId}: ${result.won ? 'WON' : 'lost'}`);
    } catch (e) {
      console.error('Round error:', e.message);
      await new Promise(r => setTimeout(r, 30000)); // wait 30s on error
    }
  }
}

playForever(player);

Security Rules

  1. Never hardcode private keys. Use environment variables.
  2. Commits are binding. Once committed, you must reveal or lose your entry fee.
  3. Salt must be random. Predictable salts let opponents front-run your picks.
  4. Entry fees are non-refundable once committed.

Error Codes

Error Meaning
GamePaused() Game is paused by owner
InvalidPhase() Wrong phase for this action
HashMismatch() Reveal doesn't match commit
InsufficientElo() ELO too low for tier
EloTooHigh() ELO exceeds tier ceiling
AlreadyCommitted() Already committed this round
InvalidPicks() Wrong number of picks or out of range
NoExoskeleton() Must own an Exoskeleton NFT
InsufficientPayment() Not enough ETH sent

Links