mcpField
S
setup-cairo-contracts

setup-cairo-contracts

github.com/openzeppelin开发219205 次安装2 天前更新
代码仓库

关于 setup-cairo-contracts

面向使用 OpenZeppelin Contracts for Cairo 的开发者,指导创建 Cairo 和 Starknet 合约项目,涵盖项目脚手架、依赖选择与导入方式,包括总包和独立包。

主要功能

  1. 01创建预配置 snforge 的 Starknet 项目
  2. 02添加 OpenZeppelin 依赖
  3. 03选择总包或独立包
  4. 04按包使用对应导入路径

适用场景

  1. 01启动 Starknet 合约项目
  2. 02在 Scarb.toml 中添加 OpenZeppelin 组件

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/openzeppelin/openzeppelin-skills --skill setup-cairo-contracts

安装后在 Claude Code 中输入/setup-cairo-contracts确认已加载。

详细介绍

Cairo 安装

项目脚手架

安装工具链并创建项目:

curl --proto '=https' --tlsv1.2 -sSf https://sh.starkup.sh | sh
scarb new my_project --test-runner=starknet-foundry

这会搭建一个完整的 Starknet 项目,并预先配置好 snforge 测试。

OpenZeppelin 依赖项

添加前,请从 https://docs.openzeppelin.com/contracts-cairo 查询当前版本。将其添加到 Scarb.toml:

完整库(汇总包):

[dependencies]
openzeppelin = "<VERSION>"

单独的包(构建更快——只编译你使用的内容):

[dependencies]
openzeppelin_token = "<VERSION>"
openzeppelin_access = "<VERSION>"

可用的单独包:openzeppelin_access、openzeppelin_account、openzeppelin_finance、openzeppelin_governance、openzeppelin_interfaces、openzeppelin_introspection、openzeppelin_merkle_tree、openzeppelin_presets、openzeppelin_security、openzeppelin_token、openzeppelin_upgrades、openzeppelin_utils。

openzeppelin_interfaces 和 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! 宏、嵌入式 impl 和子存储集成:

component!(path: ERC20Component, storage: erc20, event: ERC20Event);

#[abi(embed_v0)]
impl ERC20MixinImpl = ERC20Component::ERC20MixinImpl<ContractState>;
impl ERC20InternalImpl = ERC20Component::InternalImpl<ContractState>;

评论

支持 Markdown