6 个版本
0.1.6 | 2024 年 7 月 4 日 |
---|---|
0.1.5 | 2023 年 9 月 19 日 |
0.1.3 | 2023 年 8 月 31 日 |
4 在 #arbitrum 中
每月 36 次下载
375KB
Stylus Hello World
使用 stylus-sdk 编写 Arbitrum Stylus 程序的起始模板。它包含一个基本的计数 Ethereum 智能合约的 Rust 实现。
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.13;
contract Counter {
uint256 public number;
function setNumber(uint256 newNumber) public {
number = newNumber;
}
function increment() public {
number++;
}
}
要设置更简洁的示例,同时仍然使用 Stylus SDK,请在 OffchainLabs/cargo-stylus 下使用以下 cargo stylus new --minimal <YOUR_PROJECT_NAME>
快速入门
安装 Rust,然后使用 Cargo 安装 Stylus CLI 工具
cargo install --force cargo-stylus cargo-stylus-check
将 wasm32-unknown-unknown
编译目标添加到您的 Rust 编译器
rustup target add wasm32-unknown-unknown
现在,它应该可以作为 Cargo 子命令使用
cargo stylus --help
然后,克隆模板
git clone https://github.com/OffchainLabs/stylus-hello-world && cd stylus-hello-world
测试网信息
所有测试网信息,包括水龙头和 RPC 端点,都可以在这里找到 这里。
ABI 导出
您可以使用以下 cargo stylus
工具导出您程序的 Solidity ABI
cargo stylus export-abi
输出如下
/**
* This file was automatically generated by Stylus and represents a Rust program.
* For more information, please see [The Stylus SDK](https://github.com/OffchainLabs/stylus-sdk-rs).
*/
interface Counter {
function setNumber(uint256 new_number) external;
function increment() external;
}
导出 ABIs 使用的是默认在您的 Cargo.toml 中启用的功能
[features]
export-abi = ["stylus-sdk/export-abi"]
部署
您可以使用 cargo stylus
命令将您的程序部署到 Stylus 测试网。我们可以使用此工具首先检查我们的程序是否编译为有效的 Stylus WASM,并且可以在链上成功部署而无需交易。默认情况下,这将使用 Stylus 测试网公共 RPC 端点。有关 Stylus 测试网信息,请参阅此处
cargo stylus check
如果成功,您应该看到
Finished release [optimized] target(s) in 1.88s
Reading WASM file at stylus-hello-world/target/wasm32-unknown-unknown/release/stylus-hello-world.wasm
Compressed WASM size: 8.9 KB
Program succeeded Stylus onchain activation checks with Stylus version: 1
接下来,我们可以在发送交易之前估计部署和激活我们程序的gas费用。查看cargo-stylus的README,了解这一步的不同钱包选项。
cargo stylus deploy \
--private-key-path=<PRIVKEY_FILE_PATH> \
--estimate-gas-only
然后您将看到交易前的部署估计gas费用。
Deploying program to address e43a32b54e48c7ec0d3d9ed2d628783c23d65020
Estimated gas for deployment: 1874876
上述内容默认仅估计部署交易的gas费用。要估计激活的gas费用,首先使用--mode=deploy-only
部署您的程序,然后运行带有--estimate-gas-only
标志的cargo stylus deploy
,使用--mode=activate-only
,并指定--activate-program-address
。
以下是部署的方法
cargo stylus deploy \
--private-key-path=<PRIVKEY_FILE_PATH>
CLI会发送2个交易来在链上部署和激活您的程序。
Compressed WASM size: 8.9 KB
Deploying program to address 0x457b1ba688e9854bdbed2f473f7510c476a3da09
Estimated gas: 1973450
Submitting tx...
Confirmed tx 0x42db…7311, gas used 1973450
Activating program at address 0x457b1ba688e9854bdbed2f473f7510c476a3da09
Estimated gas: 14044638
Submitting tx...
Confirmed tx 0x0bdb…3307, gas used 14044638
一旦这两个步骤都成功完成,您就可以像与任何以太坊智能合约一样与您的程序交互。
调用您的程序
此模板包含了一个使用ethers-rs在examples/counter.rs
中调用和与您的程序进行交易Rust的示例。然而,如果使用Stylus SDK,您的程序也是Ethereum ABI等价的。 它们可以用任何其他Ethereum工具进行调用和交易。
使用您上述部署步骤中的程序地址和您的钱包,您可以尝试调用计数程序并增加其存储中的值。
abigen!(
Counter,
r#"[
function number() external view returns (uint256)
function setNumber(uint256 number) external
function increment() external
]"#
);
let counter = Counter::new(address, client);
let num = counter.number().call().await;
println!("Counter number value = {:?}", num);
let _ = counter.increment().send().await?.await?;
println!("Successfully incremented counter via a tx");
let num = counter.number().call().await;
println!("New counter number value = {:?}", num);
要运行它,设置以下环境变量或将它们放置在此项目的.env
文件中,然后
STYLUS_PROGRAM_ADDRESS=<the onchain address of your deployed program>
PRIV_KEY_PATH=<the file path for your priv key to transact with>
RPC_URL=https://stylus-testnet.arbitrum.io/rpc
接下来,运行
cargo run --example counter --target=<YOUR_ARCHITECTURE>
您可以通过运行rustc -vV | grep host
找到YOUR_ARCHITECTURE
。例如,对于M1苹果电脑,这是aarch64-apple-darwin
,而对于大多数Linux x86,这是x86_64-unknown-linux-gnu
。
构建选项
默认情况下,cargo stylus工具会使用合理的优化为WASM构建您的项目,但您可以通过查看cargo stylus的完整README来控制编译过程。如果您想优化编译的WASM的大小,请查看这里提供的不同选项(在此处)。
深入了解
stylus-sdk包含许多功能,用于使用Rust编写Stylus程序。它还提供了有助于Solidity开发者的宏,使体验更容易。这些宏将您的代码扩展为纯Rust代码,然后可以将其编译为WASM。如果您想查看stylus-hello-world
模板扩展成什么样子,可以使用cargo expand
查看将要部署到链上的纯Rust代码。
首先,如果您还没有子命令,运行cargo install cargo-expand
,然后
cargo expand --all-features --release --target=<YOUR_ARCHITECTURE>
在运行以下命令后,您可以找到 YOUR_ARCHITECTURE
:rustc -vV | grep host
。例如,对于 M1 Apple 电脑,这将是 aarch64-apple-darwin
。
许可证
本项目完全开源,包括您自行选择在您自己的版权下的 Apache-2.0 或 MIT 许可证。
依赖项
~12MB
~203K SLoC