setup-stylus-contracts

Set up a Stylus smart contract project with OpenZeppelin Contracts for Stylus on Arbitrum. Use when users need to: (1) install Rust toolchain and WASM target for Stylus, (2) create a new Cargo Stylus project, (3) add OpenZeppelin Stylus dependencies to Cargo.toml, or (4) understand Stylus import conventions and storage patterns for OpenZeppelin.

Safety Notice

This listing is from the official public ClawHub registry. Review SKILL.md and referenced scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "setup-stylus-contracts" with this command: npx skills add OpenZeppelin/setup-stylus-contracts

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 = "=<VERSION>"

Enable the export-abi feature flag for ABI generation:

[features]
export-abi = ["openzeppelin-stylus/export-abi"]

The crate must be compiled as both a library and a cdylib:

[lib]
crate-type = ["lib", "cdylib"]

Import Conventions

Imports use openzeppelin_stylus (underscores) as the crate root:

use openzeppelin_stylus::token::erc20::{Erc20, IErc20};
use openzeppelin_stylus::access::ownable::{Ownable, IOwnable};
use openzeppelin_stylus::utils::pausable::{Pausable, IPausable};
use openzeppelin_stylus::utils::introspection::erc165::IErc165;

Contracts use #[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<Error = erc20::Error>, IOwnable<Error = ownable::Error>)]
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="<RPC_URL>" --private-key-path="<KEY_FILE>"

Private key security: Never use --private-key with a raw key on the command line — it will be visible in shell history and process lists. Always use --private-key-path with a file that has restrictive permissions (chmod 600), or use a hardware wallet / keystore.

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Web3

FiberAgent

Search 50,000+ merchants for products with cryptocurrency cashback, calculate effective prices, and provide affiliate links earning crypto rewards on Monad b...

Registry SourceRecently Updated
5190Profile unavailable
Web3

ClankerKit

Autonomous wallet operations for AI agents on Monad — swap, stake, deploy wallets, trade memecoins, and manage spending policies via natural language.

Registry SourceRecently Updated
5510Profile unavailable
Web3

Ship My Token

Launch Solana tokens on Pumpfun, create memecoins, mint crypto tokens, manage creator fee sharing, claim trading earnings, and track your portfolio. Deploy t...

Registry SourceRecently Updated
5190Profile unavailable
Web3

pocket-money

Give your AI agent crypto wallets on Base. Create purpose-specific wallets, ask your human to fund each one, check balances, and manage budgets. No accounts,...

Registry SourceRecently Updated
5840Profile unavailable