返回顶部
t

tokendraftTokenDraft 套件

Full suite for TokenDraft fantasy crypto tournaments — authenticate with a Solana wallet, query/join/auto-join tournaments, and manage auto-draft asset priority rankings.

作者: admin | 来源: ClawHub
源自
ClawHub
版本
V 1.0.1
安全检测
已通过
454
下载量
免费
免费
2
收藏
概述
安装方式
版本历史

tokendraft

TokenDraft 身份验证

两步挑战-响应流程。私钥永远不会离开本地环境。

登录成功后,将 TOKENDRAFTUSERID(来自 user.id)和 TOKENDRAFT_JWT(来自 token)存储为环境变量。所有其他 TokenDraft 端点都需要这些变量。

如果任何 TokenDraft 端点返回 401,自动重新运行此身份验证流程并重试失败的请求。

步骤 1:请求一次性随机数

bash
curl -X POST https://tokendraft-production.up.railway.app/api/v2/agents/nonce \
-H Content-Type: application/json \
-d {walletPublicKey: <钱包公钥>}

返回 { nonce, message }。message 是需要签名的确切字符串。Nonce 在 5 分钟后过期,一次性使用。

步骤 2:签名并登录

使用 Ed25519 在本地对 message 进行签名,将签名进行 base58 编码:

bash
curl -X POST https://tokendraft-production.up.railway.app/api/v2/agents/login \
-H Content-Type: application/json \
-d {
walletPublicKey: <钱包公钥>,
nonce: <随机数>,
signature:
}

返回 { token, user }。首次登录自动创建账户。

首次登录时(用户的 displayName 是像 a3F9x 这样的短哈希),询问用户是否要设置显示名称。如果是,请调用下面的更新显示名称端点。

更新显示名称

bash
curl -X POST https://tokendraft-production.up.railway.app/api/v2/users/displayName \
-H Authorization: Bearer $TOKENDRAFT_JWT \
-H Content-Type: application/json \
-d {displayName: <新名称>}

约束条件:显示名称在所有用户中必须唯一。每 24 小时只能更改一次。如果受到速率限制,将返回 HTTP 429 并附带 retryAfterMs。

签名参考

javascript
import nacl from tweetnacl;
import bs58 from bs58;

const secretKey = bs58.decode(process.env.SOLANAPRIVATEKEY);
const keyPair = nacl.sign.keyPair.fromSecretKey(secretKey);
const walletPublicKey = bs58.encode(keyPair.publicKey);

// 步骤 1
const { nonce, message } = await fetch(https://tokendraft-production.up.railway.app/api/v2/agents/nonce, {
method: POST,
headers: { Content-Type: application/json },
body: JSON.stringify({ walletPublicKey }),
}).then(r => r.json());

// 步骤 2
const messageBytes = new TextEncoder().encode(message);
const signature = nacl.sign.detached(messageBytes, keyPair.secretKey);
const signatureBase58 = bs58.encode(signature);

const { token, user } = await fetch(https://tokendraft-production.up.railway.app/api/v2/agents/login, {
method: POST,
headers: { Content-Type: application/json },
body: JSON.stringify({ walletPublicKey, nonce, signature: signatureBase58 }),
}).then(r => r.json());

Token 使用

在所有经过身份验证的请求中包含:

Authorization: Bearer $TOKENDRAFT_JWT

Token 不会过期,但可能在服务器密钥轮换时失效。



TokenDraft 锦标赛

所有端点使用基础 URL https://tokendraft-production.up.railway.app,需要 Authorization: Bearer $TOKENDRAFT_JWT。遇到 401 时通过上述身份验证流程重新验证。

查询锦标赛

bash
curl https://tokendraft-production.up.railway.app/api/v2/agents/tournaments?<参数> \
-H Authorization: Bearer $TOKENDRAFT_JWT

参数类型描述
isOpenboolean接受注册
isInProgress
boolean | 正在进行中 | | isFinished | boolean | 已完成 | | isRegistered | boolean | 按用户注册状态筛选 | | finishedLookbackHours | number | 已完成比赛的回溯小时数(默认:24,0 = 全部) |

筛选条件以 AND 组合。无状态筛选默认仅返回开放的锦标赛。

返回 TournamentSummary 数组:

typescript
{ id: string, name: string, buyInAmountSol: number, registrationStartTime: string,
registrationEndTime: string, state: string, numPlayersRegistered: number,
maxPlayers: number, amIRegistered: boolean,
draftType: snake | boosterPack | instantRoster,
rosterSlots: { Chain?: number, Meme?: number, Utility?: number, NFT?: number, Flex?: number } }

加入免费锦标赛

如果 buyInAmountSol 为 0:

bash
curl -X POST https://tokendraft-production.up.railway.app/api/v2/tournaments/join/<锦标赛ID> \
-H Authorization: Bearer $TOKENDRAFT_JWT

HTTP 200 = 已注册。将任何错误转发给用户。

如果是即时阵容锦标赛,更新资产优先级排名。

加入付费锦标赛(买入)

对于 buyInAmountSol > 0,首先验证 SOL 余额是否足以支付买入费和手续费。

1. 发起交易:

bash
curl -X POST https://tokendraft-production.up.railway.app/api/v2/buyIn/initiateTransaction \
-H Authorization: Bearer $TOKENDRAFT_JWT \
-H Content-Type: application/json \
-d {tournamentId: , walletPublicKey: <公钥>}

返回 { transaction (base64), expectedSignature, tournamentInfo }。

2. 签名: 将 transaction 反序列化为 VersionedTransaction,使用钱包密钥对签名,重新序列化为 base64。

3. 发送签名后的交易:

bash
curl -X POST https://tokendraft-production.up.railway.app/api/v2/buyIn/sendSignedTransaction \
-H Content-Type: application/json \
-d {
signedTransactionBase64: ,
tournamentId: ,
expectedSignature: <签名>,
walletPublicKey: <公钥>
}

HTTP 200 = 已注册。转发错误(锦标赛已满、已注册、链上失败)。

如果是即时阵容锦标赛,更新资产优先级排名。

即时阵容锦标赛

当 draftType 为 instantRoster 时,系统会根据玩家的资产优先级排名立即自动组建完整阵容。没有实时选秀——所有选择都以机器速度进行,回合时间为 0 秒。玩家之间允许重复(两个玩家可以拥有相同的代币),但一个玩家不能拥有相同的代币两次。

加入 instantRoster 锦标赛后,您必须设置资产优先级排名,以便自动选秀器知道选择什么。

如何构建满足阵容位置的排名

锦标赛的 rosterSlots 告诉您每种类型需要多少资产。来自 GET /api/v2/assets 的每个资产都有一个 assetType 字段(例如 Chain、Meme、Utility、NFT)。Flex 位置接受任何类型。

步骤:

  1. 1. 获取资产:GET /api/v2/assets — 返回 [{ id, name, ticker, assetType, priceUSD, marketcapUSD, dayChangePercent, dayVolumeUSD, ... }]
  2. 从锦标赛读取 rosterSlots(例如 { Chain: 2, Meme: 2, Utility: 1, NFT: 1, Flex: 1 })
  3. 对于每种位置类型(Flex 除外),根据用户策略选择该 assetType 的最佳资产
  4. 对于 Flex 位置,选择任何类型中剩余的最佳资产
  5. 如果某个位置不存在,或值 <= 0,则在排名时忽略该类型的所有资产
  6. 通过 PUT /api/v2/assetPriorityRankings 提交为排名列表

示例 — 给定 rosterSlots: { Chain: 2, Meme: 2, Utility: 1, NFT: 1, Flex: 1 } 和最高市值策略:

assets = GET /api/v2/assets
按每种 assetType 内的 marketcapUSD 降序排序资产:
chains = assets.filter(a => a.assetType === Chain).sort(

标签

skill ai

通过对话安装

该技能支持在以下平台通过对话安装:

OpenClaw WorkBuddy QClaw Kimi Claude

方式一:安装 SkillHub 和技能

帮我安装 SkillHub 和 tokendraft-1776314177 技能

方式二:设置 SkillHub 为优先技能安装源

设置 SkillHub 为我的优先技能安装源,然后帮我安装 tokendraft-1776314177 技能

通过命令行安装

skillhub install tokendraft-1776314177

下载

⬇ 下载 tokendraft v1.0.1(免费)

文件大小: 5.56 KB | 发布时间: 2026-4-16 18:04

v1.0.1 最新 2026-4-16 18:04
- Added structured env var documentation for SOLANA_PRIVATE_KEY, including its encoding, purpose, and sensitivity.
- No functional changes; usage and API flow remain the same.
- The environment variable requirement is now explicitly declared and described for easier configuration and clarity.

Archiver·手机版·闲社网·闲社论坛·智能体自动化市场· 多链控股集团有限公司 · 苏ICP备2025199260号-1

Powered by Discuz! X5.0   © 2024-2026 闲社网·AI智能体论坛·AI自动化解决方案·http://xianshe.com

p2p_official_large
返回顶部