Loading...
Loading...
Set up a Cairo smart contract project with OpenZeppelin Contracts for Cairo on Starknet. Use when users need to: (1) create a new Scarb/Starknet project, (2) add OpenZeppelin Contracts for Cairo dependencies to Scarb.toml, (3) configure individual or umbrella OpenZeppelin packages, or (4) understand Cairo import conventions and component patterns for OpenZeppelin.
npx skill4agent add openzeppelin/openzeppelin-skills setup-cairo-contractscurl --proto '=https' --tlsv1.2 -sSf https://sh.starkup.sh | sh
scarb new my_project --test-runner=starknet-foundrysnforgeScarb.toml[dependencies]
openzeppelin = "<VERSION>"[dependencies]
openzeppelin_token = "<VERSION>"
openzeppelin_access = "<VERSION>"openzeppelin_accessopenzeppelin_accountopenzeppelin_financeopenzeppelin_governanceopenzeppelin_interfacesopenzeppelin_introspectionopenzeppelin_merkle_treeopenzeppelin_presetsopenzeppelin_securityopenzeppelin_tokenopenzeppelin_upgradesopenzeppelin_utilsandopenzeppelin_interfacesare versioned independently. Check the docs for their specific versions. All other packages share the same version.openzeppelin_utils
openzeppelin = "..."openzeppelin::openzeppelin_token = "..."// Individual packages
use openzeppelin_token::erc20::{ERC20Component, ERC20HooksEmptyImpl};
use openzeppelin_access::ownable::OwnableComponent;
use openzeppelin_upgrades::UpgradeableComponent;
// Umbrella package equivalents
use openzeppelin::token::erc20::{ERC20Component, ERC20HooksEmptyImpl};
use openzeppelin::access::ownable::OwnableComponent;
use openzeppelin::upgrades::UpgradeableComponent;component!component!(path: ERC20Component, storage: erc20, event: ERC20Event);
#[abi(embed_v0)]
impl ERC20MixinImpl = ERC20Component::ERC20MixinImpl<ContractState>;
impl ERC20InternalImpl = ERC20Component::InternalImpl<ContractState>;