2 个版本
0.1.1 | 2023 年 9 月 7 日 |
---|---|
0.1.0 | 2023 年 9 月 6 日 |
#16 in #era
146 每月下载量
195KB
4.5K SLoC
zksync-web3-rs
目录
使用 zkSync Web3 SDK 入门
尽管大多数现有的 SDK 都可以即插即用,但要部署智能合约或使用独特的 zkSync 功能,如账户抽象,则需要提供与以太坊交易默认字段不同的额外字段。
为了提供对 zkSync Era 所有功能的轻松访问,创建了 Rust SDK zksync-web3-rs
,其接口与 ethers 非常相似。事实上,ethers 是我们库的依赖项之一,并且大多数由 zksync-web3-rs
导出的对象(例如,Provider
等)继承自相应的 ethers
对象,并且仅覆盖需要更改的字段。
该库设计得很好,在用 ethers
替换 zksync-web3-rs
之后,大多数客户端应用程序将可以即插即用。
先决条件
在开始之前,请确保您具备以下先决条件
-
Rust:请确保您的系统已安装 Rust。您可以通过遵循 https://www.rust-lang.net.cn/tools/install 中的说明来安装 Rust。
-
Git:如果您尚未安装 Git,请安装 Git。您可以在 https://git.js.cn/book/en/v2/Getting-Started-Installing-Git 找到安装说明。
添加依赖项
将以下依赖项添加到您的 Cargo.toml
文件中
zksync-web3-rs = { git = "https://www.github.com/lambdaclass/zksync-web3-rs" }
考虑到我们使用了大量的异步/等待函数,可能需要将 tokio 作为依赖项添加。如果这个示例要在主函数中完成,则需要 tokio::main 注解。
第一步
在以下步骤中,我们将向您展示如何使用 zksync-web3-rs
库创建支付交易。
导入依赖项
通过在 main.rs
文件的顶部添加以下行来将 zksync-web3-rs
库导入到您的项目中
use zksync-web3-rs as zksync;
连接到 zkSync 网络
要连接到 zkSync 网络,您需要提供 zkSync 节点的 URL。本地网络在端口 8545
上运行一个 Ethereum 节点(L1),并在端口 3050
上运行一个 Era 节点(L2)。您可以使用以下代码连接到 zkSync Era 网络
let provider = zksync::Provider::try_from("https://127.0.0.1:3050").unwrap();
创建 ZK 钱包
我们设置链 ID 为 270,因为我们使用的是 zkSync Era 节点。如果您想使用主网,应将链 ID 设置为 9。请参阅 https://era.zksync.io/docs/tools/hardhat/testing.html#connect-wallet-to-local-nodes
use zksync::{Signer, k256::ecdsa::SigningKey};
let private_key: Wallet<SigningKey> = "0x7726827caac94a7f9e1b160f7ea819f172f7b6f9d2a97f992c38edeab82d4110".parse().unwrap();
let zksync_era_chain_id: u64 = 270;
let wallet = zksync::Wallet::with_chain_id(private_key, zksync_era_chain_id);
let zk_wallet = zksync::ZKSWallet::new(wallet, None, Some(provider), None).unwrap();
创建支付交易
要创建支付交易,您需要提供发送者的地址、接收者的地址以及要转移的金额。您可以使用以下代码创建支付交易
use zksync::zks_provider::ZKSProvider;
let receiver_address: zksync::Address = "0xa61464658AfeAf65CccaaFD3a512b69A83B77618".parse().unwrap();
let amount_to_transfer = zksync::U256::from(1);
let mut payment_request = zksync::zks_wallet::TransferRequest::new(amount_to_transfer)
.to(receiver_address)
.from(sender_address); // Use zk_wallet.l2_address() method to send it from the wallet address.
发送交易
要发送支付交易,您需要使用钱包和转账请求。您可以使用以下代码发送交易
如果您想知道,交易是在转账过程中的
send_transaction
方法中签名的。
let payment_transaction_id =
zk_wallet.transfer(payment_request, None).await.unwrap();
这将把交易发送到节点并返回其 ID(哈希)。要获取有关交易的更多信息,我们可以使用以下行请求 TransactionReceipt
let payment_transaction_receipt = provider
.get_transaction_receipt(payment_transaction_id)
.await
.unwrap()
.unwrap();
检查 zkSync 账户余额
let sender_balance = provider
.get_balance(sender_address, None)
.await
.unwrap();
简单转账示例
有关前面步骤的执行示例在 examples
文件夹中。要运行示例,请按照以下步骤操作
克隆仓库
要开始,从 GitHub 克隆 zksync-web3-rs
仓库。打开终端或命令提示符并执行以下命令
git clone https://github.com/lambdaclass/zksync-web3-rs.git
cd zksync-web3-rs
运行 zkSync 本地网络
要运行 zkSync 本地网络,克隆 local-setup
仓库并执行以下命令
git clone https://github.com/lambdaclass/local-setup
cd local-setup
docker-compose up
运行简单转账示例
要使用 zkSync Era 上的 EIP1559 交易运行支付交易示例,请运行以下命令
cargo run --example simple_payment -- --host <HOST> --port <PORT> --amount <AMOUNT> --from <SENDER_ADDRESS> --to <RECEIVER_ADDRESS> --private-key <PRIVATE_KEY>
HOST
:节点的 IP 地址或主机名。PORT
:节点的端口号。AMOUNT
:要转移的金额。SENDER_ADDRESS
:发送者以太坊账户的地址,以十六进制格式表示,带有0x
前缀。例如,0x123abc...
。RECEIVER_ADDRESS
:接收者以太坊账户的地址,以十六进制格式表示,带有0x
前缀。例如,0x456def...
。PRIVATE_KEY
:具有足够资金执行交易的以太坊账户的私钥,以十六进制格式表示,带有0x
前缀。NETWORK
:您想要连接的网络。有两个选项:era
将连接到 L2 节点,而eth
将连接到 L1 节点。
此命令使用提供的 Makefile 执行 simple_payment
二进制文件。
结论
恭喜!您已成功完成“入门指南”的 zksync-web3-rs
SDK。您已学习如何使用 zkSync Era 上的 EIP1559 交易发送简单的支付交易示例。
通过探索示例代码和仓库文档,您可以进一步加深对使用 zksync-web3-rs
SDK 与 zkSync Era 测试网交互的理解。
请随意尝试不同的配置,并探索 SDK 提供的其他功能。
如果您有任何问题或需要进一步的帮助,请不要犹豫,随时联系仓库社区或维护者。
祝您编码愉快!
依赖项
~28–45MB
~829K SLoC