Install
openclaw skills install token-approval-checker钱包授权管理工具,检查 ERC20/ERC721 代币授权风险,识别无限授权和高风险授权。每次调用收取 0.001 USDT。当用户提到"检查授权"、"撤销授权"、"Token Approval"、"高风险授权"、"MetaMask授权"时使用。Wallet authorization management to...
openclaw skills install token-approval-checker<a name="english"></a>
Check and manage your wallet's token approvals. Identify unlimited approvals and high-risk authorizations to protect your assets.
Pricing: 0.001 USDT per call
| Level | Icon | Condition | Action |
|---|---|---|---|
| Critical | 🔴 | Unlimited + Unverified Contract | Revoke Immediately |
| High | 🟠 | Unlimited + Low Liquidity Token | Revoke Recommended |
| Medium | 🟡 | Unlimited + Known Protocol | Consider Revoking |
| Low | 🟢 | Limited Amount + Known Protocol | Can Keep |
User: Check my wallet 0x1234...5678 for approval risks
Claude: [Charge 0.001 USDT] → [Analyze approvals] → [Generate risk report]
| Tool | Link | Features |
|---|---|---|
| Revoke.cash | https://revoke.cash | Multi-chain, Recommended |
| Unrekt | https://app.unrekt.net | Batch revoke |
| Etherscan | https://etherscan.io/tokenapprovalchecker | Official tool |
<a name="中文"></a>
检查和管理你的钱包代币授权,识别无限授权和高风险授权,保护资产安全。
费用: 每次调用 0.001 USDT
| 等级 | 图标 | 条件 | 建议 |
|---|---|---|---|
| 极高危 | 🔴 | 无限授权 + 未验证合约 | 立即撤销 |
| 高危 | 🟠 | 无限授权 + 低流动性代币 | 建议撤销 |
| 中危 | 🟡 | 无限授权 + 知名协议 | 可考虑撤销 |
| 低危 | 🟢 | 有限额度 + 知名协议 | 可保留 |
用户: 检查我的钱包 0x1234...5678 的授权风险
Claude: [扣费 0.001 USDT] → [分析授权] → [生成风险报告]
| 工具 | 链接 | 特点 |
|---|---|---|
| Revoke.cash | https://revoke.cash | 多链支持,推荐 |
| Unrekt | https://app.unrekt.net | 批量撤销 |
| Etherscan | https://etherscan.io/tokenapprovalchecker | 官方工具 |
以下协议的授权风险较低:
// ═══════════════════════════════════════════════════
// SkillPay Billing Integration / 计费接入
// ═══════════════════════════════════════════════════
const BILLING_API_URL = 'https://skillpay.me';
const BILLING_API_KEY = 'sk_b82c6ede30fbac400f2ccbaefc57a013270ab0af29e7cd06746511a51977a5aa';
const SKILL_ID = 'f6a281ea-7575-40f0-a6c3-25068de08bce';
// ① Check balance / 查余额
async function checkBalance(userId) {
const resp = await fetch(
`${BILLING_API_URL}/api/v1/billing/balance?user_id=${userId}`,
{ headers: { 'X-API-Key': BILLING_API_KEY } }
);
const data = await resp.json();
return data.balance; // USDT amount
}
// ② Charge per call / 每次调用扣费
async function chargeUser(userId) {
const resp = await fetch(`${BILLING_API_URL}/api/v1/billing/charge`, {
method: 'POST',
headers: {
'X-API-Key': BILLING_API_KEY,
'Content-Type': 'application/json',
},
body: JSON.stringify({
user_id: userId,
skill_id: SKILL_ID,
amount: 0.001, // USDT per call
}),
});
const data = await resp.json();
if (data.success) {
return { ok: true, balance: data.balance };
}
// Insufficient balance → get payment link
return { ok: false, balance: data.balance, paymentUrl: data.payment_url };
}
// ③ Generate payment link / 生成充值链接
async function getPaymentLink(userId, amount) {
const resp = await fetch(`${BILLING_API_URL}/api/v1/billing/payment-link`, {
method: 'POST',
headers: {
'X-API-Key': BILLING_API_KEY,
'Content-Type': 'application/json',
},
body: JSON.stringify({ user_id: userId, amount }),
});
const data = await resp.json();
return data.payment_url; // BNB Chain USDT payment link
}
// ═══════ Usage example / 使用示例 ═══════
async function handleApprovalCheck(userId, walletAddress) {
const result = await chargeUser(userId);
if (result.ok) {
// ✅ Execute skill logic - check approvals
return await checkWalletApprovals(walletAddress);
} else {
// ❌ Insufficient balance, return payment link
return {
success: false,
paymentUrl: result.paymentUrl,
message: "Insufficient balance / 余额不足"
};
}
}
const { ethers } = require('ethers');
async function revokeApproval(wallet, tokenAddress, spenderAddress) {
const ERC20_ABI = ['function approve(address, uint256) external returns (bool)'];
const token = new ethers.Contract(tokenAddress, ERC20_ABI, wallet);
// Set allowance to 0 to revoke / 设置额度为 0 即撤销
const tx = await token.approve(spenderAddress, 0);
return await tx.wait();
}