OpenZeppelin Contracts for Stylus
A secure, modular smart contract library for Stylus, written in Rust.
OpenZeppelin Contracts for Stylus brings time-tested smart contract patterns to Arbitrum’s WASM-based execution environment. This library provides no_std
-compatible modules for building secure, reusable contracts in Stylus.
Features
- ✨ Security-first contracts ported from
openzeppelin-contracts
. - 📦 Written in Rust with full
no_std
support. - 🧪 Tested with both unit and integration tests.
- 🚧 Actively developed.
Quick Start
Add the dependency to your Cargo.toml
:
[dependencies]
openzeppelin-stylus = "=0.2.0"
Enable the ABI export feature:
[features]
export-abi = ["openzeppelin-stylus/export-abi"]
Usage Example
A minimal ERC-20 implementation using the library:
use openzeppelin_stylus::token::erc20::self, Erc20, IErc20;
use stylus_sdk::
alloy_primitives::{Address, U256,
prelude::*,
};
#[entrypoint]
#[storage]
struct Erc20Example
erc20: Erc20,
#[public]
#[implements(IErc20<Error = erc20::Error>)]
impl Erc20Example {}
#[public]
impl IErc20 for Erc20Example
// ERC-20 logic implementation...
Explore more examples in the examples
directory.
Compatibility
This library is designed to work with no_std
. To keep your contracts compatible, disable default features for any dependencies that pull in the standard library:
[dependencies]
alloy-primitives = version = "=0.8.20", default-features = false
stylus-sdk = "=0.9.0"
Roadmap & Contributing
See what’s planned or in development in our roadmap.
Interested in contributing? Read the contribution guide.
Security
While this library is under active development, security remains a top priority. For past audits and security reports, see the audits
directory.
License
Released under the MIT License.