什么是 Wallet 模块
Wallet 模块是 ZKsync Python SDK 的核心账户层,它封装了钱包创建、资产管理、跨链桥交互、交易发送等一系列高频操作。
开发者只需一次实例化,就能在 L1 与 L2 环境自由切换,实现资产无缝迁移,大幅提升 DApp 集成效率。
核心关键词:ZKsync Wallet、Python SDK、L1-L2 跨链、钱包管理、Bridge 合约
快速上手:5 行代码创建钱包
from eth_account import Account
from web3 import Web3
from zksync2.account.wallet import Wallet
from zksync2.module.module_builder import ZkSyncBuilder
zk_web3 = ZkSyncBuilder.build("https://sepolia.era.zksync.dev")
eth_web3 = Web3(Web3.HTTPProvider("https://rpc.ankr.com/eth_sepolia"))
account = Account.from_key("0xYourPrivateKey")
wallet = Wallet(zk_web3, eth_web3, account)安全提示
- 开发调试阶段,请使用burner 钱包(一次性私钥);
- 真实资金环境务必分离密钥管理,推荐硬件钱包 + 环境变量注入。
一步到位:获取钱包核心合约句柄
mainContract
参考智能合约的实例化入口,几乎所有系统调用都源于此合约。
contract = wallet.main_contract
print("合约地址:", contract.address)L1/L2 Bridge
l1_bridges = wallet.get_l1_bridge_contracts()
l2_bridges = await wallet.get_l2_bridge_contracts()说明:ETH 本身没有独立桥,统一映射到 mainContract 地址。
资产查询:一键查看全仓余额
| 方法 | 描述 | 链层级 |
|---|---|---|
get_balance | 任意代币 L2 余额 | L2 |
get_l1_balance | 任意代币 L1 余额 | L1 |
get_all_balances | L2 上已确认的全部代币 | L2 |
示例:快速检查 3 个维度资产
l2_balance = wallet.get_balance()
l1_balance = wallet.get_l1_balance()
all_balance = wallet.get_all_balances()👉 想实时跟踪盈亏?帮你完成 ZKsync 资产面板的一站式搭建](https://www.okx.com/join/8265080)
资产流转:转账、跨链、提现全流程
L2 → L2:转账 ETH 或 ERC20
from zksync2.core.types import TransferTransaction
tx_hash = wallet.transfer(
TransferTransaction(
to="0x31415...Receiver",
token_address="0x000...000", # Address(0) 代表 ETH
amount=Web3.to_wei(0.1, "ether")
)
)使用 paymaster 代付 gas:
tx_hash = wallet.transfer(
TransferTransaction(
to="0xReceiver",
amount=amount,
paymaster_params=... # 预先构造 Paymaster 逻辑
)
)L1 → L2:Deposit(充值)
from zksync2.core.types import DepositTransaction
tx_hash = wallet.deposit(
DepositTransaction(
token="0xYourToken",
amount=10_000,
approve_erc20=True # 首次需授权
)
)
eth_web3.eth.wait_for_transaction_receipt(tx_hash)L2 → L1:Withdraw(提现)
L2 发起提现
withdraw_hash = wallet.withdraw( WithdrawTransaction( token="0x000...000", amount=Web3.to_wei(1, "ether") ) )证明 & 最终完成
wallet.finalize_withdrawal(withdraw_hash)
👉 一步了解所有链上手续费成本,稳拿最优路径
](https://www.okx.com/join/8265080)
高级场景:桥接代币与权限管理
获取 L2 代币地址
开发者常把 L1 地址误当 L2 地址,导致交易失败。官方规则:非 ETH 必须查询映射。
l2_token_addr = wallet.l2_token_address(L1_ADDRESS)计算充值所需的批准额度
避免重复 approve 浪费 gas,SDK 封装了精准计算。
approve_params = wallet.get_deposit_allowance_params(token, amount)
wallet.approve_erc20(approve_params[0], approve_params[0])FAQ
Q1:为什么 deposit 迟迟不到账?
A: 检查两件事:1) L1 Tx 是否确认;2) 超过 360 秒可调用 get_l2_hash_from_priority_op 继续跟踪同步。
Q2:ERC20 首次跨链到底需要几次 approve?
- ETH 主链:1 次
- 非 ETH 主链:如果是 base token 同样 1 次;非 base token 可能需 2 次(base 桥 + 目标桥)。
Q3:Burner 私钥如何快速批量生成?
可利用 eth_account.Account.create(),循环写入 .env 文件,再把公钥列表同步到水龙头批量领取测试代币。
Q4:提现 gas 过高怎么办?
L2 阶段可启用 paymaster,用 DAI 或 USDC 支付 gas;L1 最终确认阶段建议等待 L1 低峰(周末清晨)以降低手续费。
Q5:如何验证提现是否最终完成?
is_done = wallet.is_withdrawal_finalized(l2_tx_hash)返回 True 即代表资金安全回到 L1,完全退出 ZKsync。
小结
ZKsync Wallet 模块把 L1、L2 两端交互抽象成链无关的 Python API,无论你是 DEX 聚合器、NFT 项目还是钱包工具,都能在 30 分钟之内完成资产跨链闭环。
带着这份速查表去实战:部署、测试、上线,玩转高并发、低成本的以太坊二层!