Stylus Setup
Rust & Cargo Stylus Setup
Install the Rust toolchain and WASM target:
curl
--proto
'=https'
--tlsv1.2
-sSf
https://sh.rustup.rs
|
sh
rustup target
add
wasm32-unknown-unknown
Install the Cargo Stylus CLI:
cargo
install
--force
cargo-stylus
Create a new Stylus project:
cargo
stylus new my_project
A Rust nightly toolchain is required. The project should include a
rust-toolchain.toml
specifying the nightly channel,
rust-src
component, and
wasm32-unknown-unknown
target. Check the
rust-contracts-stylus repo
for the current recommended nightly date.
Adding OpenZeppelin Dependencies
Look up the current version from
crates.io/crates/openzeppelin-stylus
before adding. Add to
Cargo.toml
:
[
dependencies
]
openzeppelin-stylus
=
"=
[storage]
and
[entrypoint]
on the main struct, embedding OpenZeppelin components as fields:
[entrypoint]
[storage]
struct MyToken { erc20 : Erc20 , ownable : Ownable , } Public methods are exposed with
[public]
and
[implements(...)]
. The canonical pattern uses an empty impl block for dispatch registration, plus separate trait impl blocks:
[public]
[implements(IErc20, IOwnable)]
impl MyToken { }
[public]
impl
IErc20
for
MyToken
{
type
Error
=
erc20
::
Error
;
// delegate to self.erc20 ...
}
Top-level modules:
access
,
finance
,
proxy
,
token
,
utils
.
Build & Deploy Basics
Validate the contract compiles to valid Stylus WASM:
cargo
stylus check
Export the Solidity ABI:
cargo
stylus export-abi
Deploy to an Arbitrum Stylus endpoint:
cargo
stylus deploy
--endpoint
=
"