#alloy #ethereum #stylus #arbitrum #building-block #smart-contracts #rust

rustmate

使用 Stylus 的 Rust 构建块,用于智能合约开发,速度快、现代且优化

1 个不稳定版本

0.1.0 2024 年 1 月 9 日

#11#arbitrum

AGPL-3.0

66KB
1.5K SLoC

🦀 rustmate

Run benchmarks License: AGPL v3

快速现代优化的 Rust 构建块,用于使用 Stylus 开发智能合约。

这是实验性软件,以“现状”和“可用性”提供。我们不提供任何保证,并且不对通过使用此代码库造成的任何损失承担责任。

📜 合约

auth
├─ Owned"Simple single owner authorization"
├─ Auth"Flexible and updatable auth pattern"
mixins
├─ ERC4626"Minimal ERC4626 tokenized Vault implementation"
tokens
├─ WETH"Minimalist and modern Wrapped Ether implementation"
├─ ERC20"Modern and gas efficient ERC20 + EIP-2612 implementation"
├─ ERC721"Modern, minimalist, and gas efficient ERC721 implementation"
├─ ERC1155"Minimalist and gas efficient standard ERC1155 implementation"
├─ ERC6909"Minimalist and gas efficient standard ERC6909 implementation"
utils
├─ CREATE3"Deploy to deterministic addresses without an initcode factor"
├─ Bytes32Address"Library for converting between addresses and bytes32 values"

🔧 如何使用

首先,安装 Rust 的 Stylus SDK 并创建一个新的项目

cargo stylus new my-project --minimal

然后,安装 rustmate

cargo install rustmate

导入您要使用的合约

use rustmate::tokens::erc20::{ERC20, ERC20Params};

✅ 气价基准

🧪 结果

ERC20
函数 Rustmate Solmate OpenZeppelin 合约 5.0
name() 23043 24504 24514
symbol() 22974 24571 24535
decimals() 22726 21512 21520
totalSupply() 25617 23562 23570
balanceOf() 26851 24292 24296
allowance() 28263 25011 25066
nonces() 26835 24302 N/A
approve() 50557 46683 46902
transfer() 74234 47133 27454
transferFrom() 60116 28993 29202
ERC721
函数 Rustmate Solmate OpenZeppelin 合约 5.0
name() 23286 24548 24556
symbol() 23225 24548 24556
ownerOf() 24212 24212 24308
balanceOf() 27094 24352 24352
getApproved() 26749 24132 26545
isApprovedForAll() 28447 25046 25104
tokenURI() 24293 23420 23420
approve() 48639 48693 49043
setApprovalForAll() 51279 46561 46669
transferFrom() 32777 32437 32947
safeTransferFrom() 32781 32643 31264
safeTransferFrom() 33146 33140 34139
supportsInterface() 21983 21983 21960
ERC1155
函数 Rustmate Solmate OpenZeppelin 合约 5.0
balanceOf() 28390 24631 24675
isApprovedForAll() 28474 25022 25081
uri() 24346 22291 24984
setApprovalForAll() 51321 46581 46690
safeTransferFrom() 30167 29793 31672
safeBatchTransferFrom() 33192 32054 33363
balanceOfBatch() 25094 22961 23735
supportsInterface() 22006 22006 22058
ERC6909
函数 Rustmate Solmate OpenZeppelin 合约 5.0
transfer() 77615 28656 N/A
transferFrom() 68799 29356 N/A
approve() 52110 47430 N/A
setOperator() 51152 46750 N/A
supportsInterface() 22376 21962 N/A

👷 如何复制

安装 PythonRust,然后使用 Cargo 安装 Stylus CLI 工具

RUSTFLAGS="-C link-args=-rdynamic" cargo install --force cargo-stylus

wasm32-unknown-unknown 构建目标添加到您的 Rust 编译器

rustup target add wasm32-unknown-unknown

然后,克隆仓库

git clone https://github.com/cairoeth/rustmate && cd rustmate

克隆支持 Stylus 的 Arbitrum Nitro 节点

git clone -b stylus --recurse-submodules https://github.com/OffchainLabs/nitro-testnode.git && cd nitro-testnode

运行节点并等待其启动

./test-node.bash --init --detach

在另一个终端窗口中为部署者地址提供资金

./test-node.bash script send-l2 --to address_0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266 --ethamount 100

回到 rustmate 并选择要运行的基准。例如,ERC20

cd ../benchmark/erc20_benchmark && python snapshot.py

在终端或 .gas-snapshot 文件中检查结果。

🙏🏼 致谢

此存储库受许多来源的启发或直接修改,主要是

🫡 贡献

查看 贡献指南

依赖

~11MB
~187K SLoC