SKILL.md
readonlyread-only
name
wallet
description
多鏈錢包:EVM 與 Solana 餘額查詢、轉帳、簽章及政策管理。 當需要檢查餘額、發送代幣、簽署型別資料或提議錢包政策時使用(例如:在 Base 上發送 10 USDC、簽署 EIP-712、查詢 Solana 餘額)。
version
3.6.1
💰 錢包技能
支援 EVM(DeBank 支援的所有鏈)與 Solana 的多鏈錢包。提供餘額查詢、轉帳、簽章及政策管理功能。腳本技能 — 透過 bash 呼叫以下函式;不會註冊任何錢包工具。
如何呼叫
所有讀取/轉帳/簽章操作皆為 core.skill_tools.wallet 中的 Python 函式。從 bash 執行並讀取 JSON 結果:
python3 -c "from core.skill_tools import wallet; import json; print(json.dumps(wallet.wallet_balance(chain='base')))"
唯一不是腳本函式的操作是提議錢包政策 — 它需要在 UI 中顯示確認卡片,因此透過原生的 frontend_action 工具執行(請參閱下方政策管理)。
函式(from core.skill_tools import wallet)
| 函式 | 說明 |
|---|---|
wallet_info() |
取得所有錢包地址 |
wallet_balance(chain, address="", asset="") |
查詢 EVM 鏈上餘額(DeBank)。需指定 chain |
wallet_sol_balance(address="", asset="") |
查詢 Solana 餘額(Birdeye) |
wallet_get_all_balances(evm_address="", sol_address="") |
一次查詢所有鏈 |
wallet_transfer(to, amount, chain_id=1, data="", **kw) |
廣播 EVM 交易(預設贊助 gas) |
wallet_sign_transaction(to, amount, chain_id=1, data="", **kw) |
簽署 EVM 交易(不廣播) |
wallet_sign(message) |
EIP-191 訊息簽署 |
wallet_sign_typed_data(domain, types, primaryType, message) |
EIP-712 型別資料簽署 |
wallet_transactions(chain="ethereum", asset="", limit=20) |
EVM 交易歷史 |
wallet_sol_transfer(transaction, caip2=...) |
廣播 Solana 交易(base64) |
wallet_sol_sign_transaction(transaction) |
簽署 Solana 交易(不廣播) |
wallet_sol_sign(message) |
Solana 訊息簽署 |
wallet_sol_transactions(chain="solana", asset="sol", limit=20) |
Solana 交易歷史 |
wallet_get_policy(chain_type="ethereum") |
檢查政策狀態 |
validate_and_clean_rules(rules, chain_type) |
在提議前預先驗證政策規則 |
重點須知
- EVM 金額單位為 wei(
wallet_transfer/wallet_sign_transaction)。0.01 ETH =10000000000000000。對於 ERC-20 代幣發送,amount設為0(原生幣),轉帳資訊編碼在data參數中。 - EVM 鏈預設贊助 gas — 使用者無需持有原生代幣支付 gas。若無法贊助則改由使用者支付。傳入
sponsor=False可從錢包餘額支付 gas。 - 政策預設:關閉(允許全部)。僅在啟用政策時,交易才需要 UI 確認。
- 支援的 EVM 鏈:所有 DeBank 支援的鏈。常見鏈名稱會自動對應(例如
avalanche→avax,bsc→bsc,zksync→era)。16 條常見鏈(ethereum, base, arbitrum, optimism, polygon, linea, bsc, avalanche, fantom, gnosis, zksync, scroll, blast, mantle, celo, aurora)內建備援對應。 - 餘額來源:DeBank(EVM)、Birdeye(Solana)、wallet-service(備援)。DeBank/Birdeye 金鑰由 sc-proxy 自動注入。
工作流程
檢查餘額
python3 -c "from core.skill_tools import wallet; import json; print(json.dumps(wallet.wallet_balance(chain='base')))"
python3 -c "from core.skill_tools import wallet; import json; print(json.dumps(wallet.wallet_get_all_balances()))"
發送交易(EVM)
務必先檢查餘額,並在交易後驗證結果/歷史。
# 1. 檢查
python3 -c "from core.skill_tools import wallet; import json; print(json.dumps(wallet.wallet_balance(chain='base')))"
# 2. 轉帳(金額單位為 wei)
python3 -c "from core.skill_tools import wallet; import json; print(json.dumps(wallet.wallet_transfer(to='0x...', amount='10000000000000000', chain_id=8453)))"
# 3. 驗證
python3 -c "from core.skill_tools import wallet; import json; print(json.dumps(wallet.wallet_transactions(chain='base')))"
簽署 EIP-712 型別資料
python3 -c "from core.skill_tools import wallet; import json; print(json.dumps(wallet.wallet_sign_typed_data(domain={...}, types={...}, primaryType='Permit', message={...})))"
政策管理
檢查政策是腳本函式;提議政策則使用原生的 frontend_action 工具(它會在 UI 中顯示簽署卡片 — 腳本無法做到)。
- 檢查目前政策:
python3 -c "from core.skill_tools import wallet; import json; print(json.dumps(wallet.wallet_get_policy(chain_type='ethereum')))" - (可選)預先驗證規則:
python3 -c "from core.skill_tools import wallet; import json; print(json.dumps(wallet.validate_and_clean_rules([...], 'ethereum')))" - 提議 — 呼叫
frontend_action工具(非腳本):
使用者在 UI 中確認並簽署。每條鏈呼叫一次(EVM + Solana 共兩次)。frontend_action(action_type="update_wallet_policy", chain_type="ethereum", rules=[...])
標準萬用政策(需要時)
rules = [
{"name": "禁止匯出金鑰", "method": "exportPrivateKey", "conditions": [], "action": "DENY"},
{"name": "允許全部", "method": "*", "conditions": [], "action": "ALLOW"},
]
政策模式 — 關鍵決策表
⚠️ 在 Privy 中,DENY 優先於 ALLOW。 DENY * 會覆蓋所有 ALLOW 規則。切勿混用。
| 模式 | 規則 | 效果 |
|---|---|---|
| 允許全部(預設) | DENY exportPrivateKey + ALLOW * |
除匯出金鑰外全部允許 |
| 拒絕全部(鎖定) | DENY exportPrivateKey + DENY * |
全部無法運作。不可有 ALLOW 規則! |
| 白名單(選擇性) | DENY exportPrivateKey + 僅特定 ALLOW 規則 |
僅白名單操作可執行,其餘隱含拒絕 |
模式 1:允許全部(標準萬用)
rules = [
{"name": "禁止匯出金鑰", "method": "exportPrivateKey", "conditions": [], "action": "DENY"},
{"name": "允許全部", "method": "*", "conditions": [], "action": "ALLOW"},
]
模式 2:拒絕全部(鎖定)
rules = [
{"name": "禁止匯出金鑰", "method": "exportPrivateKey", "conditions": [], "action": "DENY"},
{"name": "拒絕所有操作", "method": "*", "conditions": [], "action": "DENY"},
]
# ⚠️ 此處不可有 ALLOW 規則 — DENY * 會覆蓋它們!
模式 3:白名單(選擇性允許)
rules = [
{"name": "禁止匯出金鑰", "method": "exportPrivateKey", "conditions": [], "action": "DENY"},
{"name": "允許轉帳至 Uniswap", "method": "eth_sendTransaction", "conditions": [
{"field_source": "ethereum_transaction", "field": "to", "operator": "eq", "value": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"}
], "action": "ALLOW"},
]
# ⚠️ 此處不可有 "DENY *"!enabled=true 已拒絕所有未 ALLOW 的操作。
# 加上 DENY * 會覆蓋上述 ALLOW 規則(DENY 優先於 ALLOW)。
Privy 政策規則 — 關鍵限制
| 規則 | 詳細說明 |
|---|---|
| 預設行為 | enabled=true → 拒絕全部,除非明確 ALLOW |
| DENY 優先於 ALLOW | 兩者同時符合時,DENY 永遠優先 |
| 空條件 | 僅 exportPrivateKey 和 *(萬用)允許 conditions: [] |
| 交易方法需要條件 | eth_sendTransaction、eth_signTransaction、eth_signTypedData_v4、eth_signUserOperation、signAndSendTransaction 等均需至少一個條件 |
| 有效的 field_source | EVM:ethereum_transaction(to/value/chain_id)、ethereum_calldata(function_name)、ethereum_typed_data_domain(chainId/verifyingContract)、ethereum_typed_data_message、system |
| 有效的運算子 | eq、gt、gte、lt、lte、in(陣列,最多 100 個值) |
| 雙鏈 | 需為 EVM + Solana 分別呼叫 frontend_action(action_type="update_wallet_policy", ...) 兩次 |
注意事項
- 政策提議需透過
frontend_action工具 — 需要活躍的 SSE 連線(無法在背景任務中執行)。 wallet_balance需要chain參數 — 探索時請使用wallet_get_all_balances。- 若需同時設定 EVM 與 Solana 政策,請呼叫
frontend_action兩次(每種 chain_type 一次)。






