2 个版本

0.1.1 2023 年 9 月 7 日
0.1.0 2023 年 9 月 6 日

#16 in #era

Download history 221/week @ 2024-04-28 50/week @ 2024-05-05 79/week @ 2024-05-12 45/week @ 2024-05-19 47/week @ 2024-05-26 48/week @ 2024-06-02 41/week @ 2024-06-09 37/week @ 2024-06-16 77/week @ 2024-06-23 51/week @ 2024-06-30 41/week @ 2024-07-07 27/week @ 2024-07-14 53/week @ 2024-07-21 68/week @ 2024-07-28 17/week @ 2024-08-04 6/week @ 2024-08-11

146 每月下载量

MIT 许可证

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 之后,大多数客户端应用程序将可以即插即用。

先决条件

在开始之前,请确保您具备以下先决条件

添加依赖项

将以下依赖项添加到您的 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