Across Bridge 技能用于在多个 EVM 链之间跨链转移 ETH 与 ERC-20 代币,底层使用 Across Protocol v3 SpokePool。
【支持的链与代币】 支持的链及其 Chain ID:Ethereum(1)、Arbitrum(42161)、Optimism(10)、Base(8453)、Polygon(137)、BSC(56)、Linea(59144)、zkSync Era(324)。支持代币:ETH(原生 ETH,内部通过 WETH 桥接)、USDC(在可用处使用原生 USDC)、USDT(主要链)、WBTC(Ethereum、Arbitrum、Optimism)、DAI(主要链)。
【工作流程】 第一步,获取报价并构建交易。先安装依赖:pip install requests eth-abi。运行脚本:python3 skills/across-bridge/scripts/bridge.py <from_chain_id> <to_chain_id> <amount_wei> <wallet_address> [token_symbol]。示例:从 Arbitrum 桥 0.01415 ETH 到 Ethereum,运行 python3 skills/across-bridge/scripts/bridge.py 42161 1 14150000000000000 0xYourWallet;从 Base 桥 100 USDC 到 Arbitrum,运行 python3 skills/across-bridge/scripts/bridge.py 8453 42161 100000000 0xYourWallet USDC。脚本输出 JSON,包含:to(源链上的 SpokePool 合约地址)、value(要发送的 ETH 值,ETH 桥为金额,ERC-20 为 "0")、data(编码后的 depositV3() 调用数据)、output_amount_wei(目标链上收到的金额)、estimated_fill_time_sec(预计收到资金的秒数)、note(针对 ERC-20,提示发送前先授权 SpokePool)。
第二步,ERC-20 授权(ETH 可跳过)。对于 ERC-20 代币(USDC、USDT 等),先授权 SpokePool 花费你的代币:调用 token.approve(spokePool, amount),使用钱包 wallet_transfer 携带代币合约的 approve() 调用数据。脚本输出在需要授权时会包含 note 字段,给出代币地址和 SpokePool 地址。
第三步,执行交易。调用 wallet_transfer(to="<脚本输出的 SpokePool 地址>", amount="<脚本输出的 value>",ETH 桥为 amount_wei,ERC-20 为 "0",chain_id=<源链 ID>, data="<脚本输出的 data>")。
第四步,跟踪存款状态。广播后,用存款交易哈希检查填充状态:python3 skills/across-bridge/scripts/bridge.py status <origin_chain_id> <deposit_tx_hash>。或直接验证到账:wallet_balance(chain=<destination_chain>)。Across 中继者通常在数秒到数分钟内完成填充,报价中的 estimated_fill_time_sec 给出每条路线的预估。
【使用示例】 用户说“从 Base 桥 50 USDC 到 Arbitrum”:以 token=USDC、from=8453、to=42161、amount=50000000 运行脚本;检查 note 字段,如需则先向 SpokePool 授权 USDC;用编码后的调用数据调用 wallet_transfer;交易确认后运行状态检查,或调用 wallet_balance(chain="arbitrum") 确认到账。
【注意事项】 ETH 桥:msg.value = amount,无需授权。ERC-20 桥:msg.value = 0,需先完成代币授权。费用从输出金额中扣除(通常约 0.01%–0.1%,随路线变化)。报价实时来自 app.across.to/api/suggested-fees,有效期约 30 秒。exclusivityDeadline 在 API 返回偏移量或绝对时间戳时均正确处理。
【依赖与安装】 依赖 requests 和 eth-abi,安装命令:pip install requests eth-abi。