Install
openclaw skills install broadcast-sign-transfer支持 EVM 多链的原生代币和 ERC20 转账,自动构造交易、本地签名并通过 OKX API 广播上链
openclaw skills install broadcast-sign-transfer这个 Skill 实现了完整的 EVM 链转账流程:
用户输入(私钥/地址/金额)
↓
构造交易(自动获取 nonce、gas)
↓
本地签名(私钥不离开本机)
↓
通过 OKX API 广播到链上
↓
返回 tx_hash 和区块浏览器链接
支持两种转账类型:
满足以下条件时使用:
不适用的情况:
Step 1: 检查输入参数
├── chain_index 是否在支持列表?
├── to_address 是否以 0x 开头?
└── amount 是否大于 0?
Step 2: 获取链上数据
├── 获取当前 nonce
└── 获取当前 gas price(Legacy 或 EIP-1559)
Step 3: 构造交易
├── 原生代币:直接构造 tx,gas 固定 21000
└── ERC20:调用 transfer(),动态估算 gas × 1.2 安全系数
Step 4: 本地签名
└── 使用私钥对交易签名,私钥不离开本机
Step 5: 广播到链上
└── 调用 OKX Broadcast API 发送签名交易
Step 6: 返回结果
├── 成功 → 返回 tx_hash 和 explorer_url
└── 失败 → 返回具体错误原因
类型:字符串 string
说明:区块链链 ID
当前支持:
| chain_index | 链名 | Gas 类型 | 支持 MEV |
|---|---|---|---|
"56" | BSC | Legacy | ✅ |
示例:"56"
注意:必须是字符串,56 ❌ "56" ✅
"0xaF3e6407073b2793271dA3d45A393397517ee3d9"0.01(表示 0.01 BNB),100.0(表示 100 USDT)"0x55d398326f99059fF775485246999027B3197955"(BSC 上的 USDT)false| 字段 | 类型 | 说明 |
|---|---|---|
| order_id | string | OKX 平台订单 ID |
| tx_hash | string | 链上交易哈希 |
| explorer_url | string | 区块浏览器链接 |
成功输出示例:
✅ BSC 广播成功
Order ID: 1234567890
Tx Hash: 0xabc123...
浏览器: https://bscscan.com/tx/0xabc123...
返回具体错误原因,见下方错误处理章节。
| 变量名 | 说明 |
|---|---|
WALLET_PRIVATE_KEY | 钱包私钥(0x 开头) |
OKX_ACCESS_KEY | OKX Web3 API Key |
OKX_SECRET_KEY | OKX Secret Key |
OKX_PASSPHRASE | OKX Passphrase |
⚠️ 必须使用 OKX Web3 API Key,普通交易 API Key 会返回 401 错误。
配置方式(写入 ~/.zshrc 永久生效):
export WALLET_PRIVATE_KEY="0x你的私钥"
export OKX_ACCESS_KEY="你的Key"
export OKX_SECRET_KEY="你的Secret"
export OKX_PASSPHRASE="你的Passphrase"
source ~/.zshrc
from scripts.broadcast_sign_transfer import BroadcastTransaction
bt = BroadcastTransaction(chain_index="56")
# 原生代币转账
result = bt.transfer_native(
to_address="0xRecipient...",
amount=0.01,
enable_mev_protection=False,
)
print(result.summary())
# ERC20 转账
result = bt.transfer_token(
token_address="0x55d398326f99059fF775485246999027B3197955", # BSC USDT
to_address="0xRecipient...",
amount=100.0,
enable_mev_protection=False,
)
print(result.summary())
# 原生代币转账
python3 scripts/broadcast_sign_transfer.py --chain 56 native \
--to 0xRecipient... \
--amount 0.01
# ERC20 转账
python3 scripts/broadcast_sign_transfer.py --chain 56 token \
--token 0x55d398326f99059fF775485246999027B3197955 \
--to 0xRecipient... \
--amount 100
# 开启 MEV 保护
python3 scripts/broadcast_sign_transfer.py --chain 56 native \
--to 0xRecipient... \
--amount 0.01 \
--mev
| 转账类型 | Gas 处理方式 |
|---|---|
| 原生代币 | 固定 21000(EVM 协议层常量) |
| ERC20 Token | eth_estimateGas 动态估算 × 1.2 安全系数 |
Gas 价格根据链类型自动切换:
gasPricemaxFeePerGas + maxPriorityFeePerGas| 错误信息 | 原因 | 解决方法 |
|---|---|---|
暂不支持链 {chain_index} | 链未在支持列表中 | 检查 chain_index 是否正确 |
to_address 格式错误 | 地址不以 0x 开头 | 检查地址格式 |
amount 必须大于 0 | 金额为负数或 0 | 输入正确金额 |
余额不足 | ERC20 余额不够 | 检查钱包余额 |
链 {chain_index} 不支持 MEV 保护 | 该链不支持 MEV | 关闭 enable_mev_protection |
401 Unauthorized | 使用了普通 API Key | 确认使用 OKX Web3 API Key |
广播失败(code=xxx) | OKX API 返回错误 | 检查 API 凭证和交易数据 |
缺少 OKX API 凭证 | 环境变量未配置 | 配置四个环境变量后重试 |
缺少钱包私钥 | WALLET_PRIVATE_KEY 未配置 | 配置私钥环境变量 |
explorer_url 确认链上状态~/.zshrc 是明文存储,确保只有自己能访问该文件pip3 install requests web3
broadcast-sign-transfer/
├── broadcast_sign_transfer.md ← 当前文件,AI 技能说明书
└── scripts/
└── broadcast_sign_transfer.py ← 可执行的 Python 客户端
| chain_index | 链名 | Gas 类型 | MEV 保护 | 浏览器 |
|---|---|---|---|---|
56 | BSC | Legacy | ✅ | bscscan.com |
v1.0.0 仅支持 BSC,更多链将在后续版本中陆续支持。