关于 wallet-integration
wallet-integration 是用于在应用和脚本中加入区块链钱包操作的技能,介绍钱包连接、交易发送、资产查询与密钥处理,涵盖 Ethereum 和 Bitcoin 工作流。
主要功能
- 01连接区块链网络中的钱包
- 02发送 ETH 和 BTC 交易
- 03查询余额与代币
- 04处理密钥和硬件钱包
- 05监听钱包事件
适用场景
- 01为 dApp 加入钱包连接
- 02从应用发送加密货币
- 03跟踪支持网络中的余额
- 04响应收到的交易事件
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ alphaonedev/ openclaw-graph --skill wallet-integration安装后在 Claude Code 中输入/wallet-integration确认已加载。
详细介绍
用途
此技能集成区块链钱包,为 Ethereum 和 Bitcoin 等网络提供安全的加密货币交易、资产管理和密钥处理功能。它抽象化钱包交互,确保密钥安全管理和交易签名。
适用场景
构建需要连接钱包的应用程序时,例如用于代币转账、NFT 管理或查询区块链余额的 dApp,请使用此技能。在涉及使用钱包进行用户身份验证(例如集成 MetaMask)或用于资产跟踪的自动化脚本的场景中应用此技能。
主要功能
- 使用私钥或助记词连接区块链网络(例如通过 RPC 连接 Ethereum,通过 electrum 连接 Bitcoin)。
- 执行交易:发送 ETH 或 BTC,包括 Ethereum 的 Gas 费用估算。
- 管理资产:查询余额、列出代币并处理多链钱包。
- 安全存储密钥:在内存中加密密钥,并支持 Ledger 等硬件钱包。
- 监听事件:通过 WebSocket 订阅钱包事件,例如收到交易。
使用模式
始终使用网络和身份验证方式初始化钱包。使用环境变量存储密钥,避免将其硬编码。对于 CLI 命令,请在命令前加上 claw wallet。在代码中,导入 OpenClaw 库并创建钱包实例。使用 async/await 处理网络调用等异步操作。投入生产前,请在沙盒环境中测试集成。
常用命令/API
使用以下 CLI 命令或 API 端点执行钱包操作。通过 $WALLET_API_KEY 环境变量设置身份验证。
-
CLI 命令:
claw wallet connect --network ethereum --key $ETH_PRIVATE_KEY --rpc-url https://mainnet.infura.io/v3/your-project-id- 标志:
--network用于指定链(例如 ethereum、bitcoin);--key使用十六进制字符串;--rpc-url用于指定自定义节点。 - 示例:连接到 Ethereum 并返回会话 ID。
- 标志:
-
API 端点:POST /api/v1/wallet/connect
- 请求体:JSON 格式:
{"network": "ethereum", "privateKey": "$ETH_PRIVATE_KEY", "rpcUrl": "https://mainnet.infura.io/v3/your-project-id"} - 响应:包含
{ "status": "connected", "address": "0xYourAddress" }的 JSON。
- 请求体:JSON 格式:
-
CLI 命令:
claw wallet send --to 0xRecipientAddress --amount 0.1 --network ethereum- 标志:
--to用于指定收款方;--amount的单位为 ETH;添加--gas-limit 21000可自定义 Gas 限额。
- 标志:
-
API 端点:POST /api/v1/wallet/transaction
- 请求体:JSON:
{"to": "0xRecipientAddress", "amount": "0.1", "network": "ethereum", "gasLimit": 21000} - 代码片段:
import requests import os response = requests.post('https://api.openclaw.com/api/v1/wallet/transaction', json={"to": "0xRecipient", "amount": "0.1"}, headers={"Authorization": f"Bearer {os.environ['WALLET_API_KEY']}"}) print(response.json())
- 请求体:JSON:
-
CLI 命令:
claw wallet balance --address 0xYourAddress --network bitcoin- 标志:
--address用于查询;支持使用--unit satoshi提高精度。
- 标志:
配置格式:钱包配置使用 JSON,例如:
{
"network": "ethereum",
"rpcUrl": "https://mainnet.infura.io/v3/your-id",
"privateKeyEnv": "ETH_PRIVATE_KEY"
}
通过 CLI 加载:claw wallet load-config path/to/config.json。
集成说明
API 调用或 CLI 命令始终使用 $WALLET_API_KEY 进行身份验证,避免密钥暴露。使用 pip install openclaw-blockchain 安装依赖项,例如用于 Ethereum 的 web3.py 或用于 Bitcoin 的 bitcoinlib。要支持多条链,请在配置中明确指定网络。避免将密钥存储在代码中;请使用安全保险库或硬件设备。如果要与其他服务集成,请通过 WebSocket 将钱包事件接入 OpenClaw 的事件总线(例如 ws://api.openclaw.com/events)。操作前请验证输入(例如使用 web3.utils.isAddress() 检查地址格式)。
错误处理
捕获常见错误,例如网络故障、密钥无效或资金不足。对 API 调用使用 try-except 代码块。对于 CLI,检查退出代码。
-
错误:私钥无效 – 代码:400 Bad Request
- 处理方法:在代码中使用
if not wallet.validate_key(key): raise ValueError("Invalid key")进行检查 - 代码片段:
try: wallet.connect(key=os.environ['ETH_PRIVATE_KEY']) except ConnectionError as e: print(f"Network error: {e}. Retrying in 5s...") time.sleep(5)
- 处理方法:在代码中使用
-
错误:资金不足 – 代码:402 Payment Required
- 处理方法:先使用
claw wallet balance查询余额,余额不足时中止操作。 - CLI 示例:通过管道传递输出:
claw wallet balance --address 0xAddr && claw wallet send || echo "Funds low"
- 处理方法:先使用
始终记录包含上下文的错误(例如网络和时间戳),并对瞬时错误最多重试 3 次,每次重试采用指数退避。
具体使用示例
示例 1:连接并发送 ETH 连接钱包并发送 0.1 ETH:
- 设置环境变量:
export ETH_PRIVATE_KEY=0xYourHexKey - 运行 CLI:
claw wallet connect --network ethereum --key $ETH_PRIVATE_KEY - 发送交易:
claw wallet send --to 0xRecipient --amount 0.1- 代码:
import openclaw wallet = openclaw.Wallet(network='ethereum') wallet.connect(key=os.environ['ETH_PRIVATE_KEY']) tx_hash = wallet.send(to='0xRecipient', amount=0.1) print(f"Transaction sent: {tx_hash}")
- 代码:
示例 2:查询和管理比特币资产 检查余额并转移 BTC:
- 设置环境变量:
export BTC_PRIVATE_KEY=YourBitcoinKey - 查询余额:
claw wallet balance --address bc1YourAddress --network bitcoin - 转移:
claw wallet send --to bc1Recipient --amount 0.001 --network bitcoin- 代码:
import openclaw wallet = openclaw.Wallet(network='bitcoin') wallet.connect(key=os.environ['BTC_PRIVATE_KEY']) balance = wallet.get_balance(address='bc1YourAddress') if balance > 0.001: tx_id = wallet.send(to='bc1Recipient', amount=0.001) print(f"Transferred: {tx_id}")
- 代码:
图关系
- 相关:transaction-processing(用于交易后处理)
- 依赖:blockchain-explorer(用于查询区块数据)
- 聚类:smart-contracts(用于基于钱包的合约交互)