1 个不稳定版本
0.1.0 | 2024 年 1 月 9 日 |
---|
#11 在 #arbitrum
66KB
1.5K SLoC
🦀 rustmate
快速、现代和优化的 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 |
👷 如何复制
安装 Python 和 Rust,然后使用 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