wallet

wallet

多链钱包:EVM 和 Solana 余额、转账、签名及策略。 在查询余额、发送代币、签名结构化数据或提议钱包策略时使用(例如:在 Base 上发送 10 USDC、签名 EIP-712、查询 Solana 余额)。

18Star
9Fork
更新于 2026/7/14
SKILL.md
readonly只读
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 金额单位为 weiwallet_transfer / wallet_sign_transaction)。0.01 ETH = 10000000000000000。对于 ERC-20 代币发送,amount0(原生),转账编码在 data calldata 中。
  • EVM 链默认赞助 gas — 用户无需原生代币支付 gas。如果不可用则回退到用户自付。传递 sponsor=False 从钱包余额支付 gas。
  • 策略默认关闭(允许所有)。仅在策略启用时交易需要 UI 确认。
  • 支持的 EVM 链:所有 DeBank 支持的链。常见名称自动映射(例如 avalancheavaxbscbsczksyncera)。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 中渲染签名卡片 — 脚本无法做到)。

  1. 检查当前策略:
    python3 -c "from core.skill_tools import wallet; import json; print(json.dumps(wallet.wallet_get_policy(chain_type='ethereum')))"
    
  2. (可选)预验证规则:
    python3 -c "from core.skill_tools import wallet; import json; print(json.dumps(wallet.validate_and_clean_rules([...], 'ethereum')))"
    
  3. 提议 — 调用 frontend_action 工具(不是脚本):
    frontend_action(action_type="update_wallet_policy", chain_type="ethereum", rules=[...])
    
    用户在 UI 中确认并签名。每条链调用一次(EVM + Solana 共两次调用)。

标准通配符策略(需要时)

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: []
TX 方法需要条件 eth_sendTransactioneth_signTransactioneth_signTypedData_v4eth_signUserOperationsignAndSendTransaction 等均需至少一个条件
有效的 field_source EVM:ethereum_transaction(to/value/chain_id)、ethereum_calldata(function_name)、ethereum_typed_data_domain(chainId/verifyingContract)、ethereum_typed_data_messagesystem
有效的运算符 eqgtgteltltein(数组,最多 100 个值)
双链 为 EVM 和 Solana 分别调用 frontend_action(action_type="update_wallet_policy", ...) 两次

注意事项

  • 策略提议通过 frontend_action 工具进行 — 需要活跃的 SSE 会话(后台任务无法工作)。
  • wallet_balance 需要 chain — 使用 wallet_get_all_balances 进行发现。
  • 对于 EVM 和 Solana 策略,分别调用 frontend_action 两次(每条链类型一次)。