Skip to main content
Glama

OpenZeppelin Contracts MCP Server

Official
by OpenZeppelin
custom.test.ts.md15.2 kB
# Snapshot report for `src/custom.test.ts` The actual snapshot is saved in `custom.test.ts.snap`. Generated by [AVA](https://avajs.dev). ## custom non-upgradeable > Snapshot 1 `// SPDX-License-Identifier: MIT␊ // Compatible with OpenZeppelin Contracts for Cairo ^2.0.0␊ ␊ #[starknet::contract]␊ mod MyContract {␊ #[storage]␊ struct Storage {␊ }␊ }␊ ` ## custom defaults > Snapshot 1 `// SPDX-License-Identifier: MIT␊ // Compatible with OpenZeppelin Contracts for Cairo ^2.0.0␊ ␊ #[starknet::contract]␊ mod MyContract {␊ use openzeppelin::access::ownable::OwnableComponent;␊ use openzeppelin::upgrades::interface::IUpgradeable;␊ use openzeppelin::upgrades::UpgradeableComponent;␊ use starknet::{ClassHash, ContractAddress};␊ ␊ component!(path: UpgradeableComponent, storage: upgradeable, event: UpgradeableEvent);␊ component!(path: OwnableComponent, storage: ownable, event: OwnableEvent);␊ ␊ // External␊ #[abi(embed_v0)]␊ impl OwnableMixinImpl = OwnableComponent::OwnableMixinImpl<ContractState>;␊ ␊ // Internal␊ impl UpgradeableInternalImpl = UpgradeableComponent::InternalImpl<ContractState>;␊ impl OwnableInternalImpl = OwnableComponent::InternalImpl<ContractState>;␊ ␊ #[storage]␊ struct Storage {␊ #[substorage(v0)]␊ upgradeable: UpgradeableComponent::Storage,␊ #[substorage(v0)]␊ ownable: OwnableComponent::Storage,␊ }␊ ␊ #[event]␊ #[derive(Drop, starknet::Event)]␊ enum Event {␊ #[flat]␊ UpgradeableEvent: UpgradeableComponent::Event,␊ #[flat]␊ OwnableEvent: OwnableComponent::Event,␊ }␊ ␊ #[constructor]␊ fn constructor(ref self: ContractState, owner: ContractAddress) {␊ self.ownable.initializer(owner);␊ }␊ ␊ //␊ // Upgradeable␊ //␊ ␊ #[abi(embed_v0)]␊ impl UpgradeableImpl of IUpgradeable<ContractState> {␊ fn upgrade(ref self: ContractState, new_class_hash: ClassHash) {␊ self.ownable.assert_only_owner();␊ self.upgradeable.upgrade(new_class_hash);␊ }␊ }␊ }␊ ` ## pausable > Snapshot 1 `// SPDX-License-Identifier: MIT␊ // Compatible with OpenZeppelin Contracts for Cairo ^2.0.0␊ ␊ #[starknet::contract]␊ mod MyContract {␊ use openzeppelin::access::ownable::OwnableComponent;␊ use openzeppelin::security::pausable::PausableComponent;␊ use openzeppelin::upgrades::interface::IUpgradeable;␊ use openzeppelin::upgrades::UpgradeableComponent;␊ use starknet::{ClassHash, ContractAddress};␊ ␊ component!(path: PausableComponent, storage: pausable, event: PausableEvent);␊ component!(path: OwnableComponent, storage: ownable, event: OwnableEvent);␊ component!(path: UpgradeableComponent, storage: upgradeable, event: UpgradeableEvent);␊ ␊ // External␊ #[abi(embed_v0)]␊ impl PausableImpl = PausableComponent::PausableImpl<ContractState>;␊ #[abi(embed_v0)]␊ impl OwnableMixinImpl = OwnableComponent::OwnableMixinImpl<ContractState>;␊ ␊ // Internal␊ impl PausableInternalImpl = PausableComponent::InternalImpl<ContractState>;␊ impl OwnableInternalImpl = OwnableComponent::InternalImpl<ContractState>;␊ impl UpgradeableInternalImpl = UpgradeableComponent::InternalImpl<ContractState>;␊ ␊ #[storage]␊ struct Storage {␊ #[substorage(v0)]␊ pausable: PausableComponent::Storage,␊ #[substorage(v0)]␊ ownable: OwnableComponent::Storage,␊ #[substorage(v0)]␊ upgradeable: UpgradeableComponent::Storage,␊ }␊ ␊ #[event]␊ #[derive(Drop, starknet::Event)]␊ enum Event {␊ #[flat]␊ PausableEvent: PausableComponent::Event,␊ #[flat]␊ OwnableEvent: OwnableComponent::Event,␊ #[flat]␊ UpgradeableEvent: UpgradeableComponent::Event,␊ }␊ ␊ #[constructor]␊ fn constructor(ref self: ContractState, owner: ContractAddress) {␊ self.ownable.initializer(owner);␊ }␊ ␊ #[generate_trait]␊ #[abi(per_item)]␊ impl ExternalImpl of ExternalTrait {␊ #[external(v0)]␊ fn pause(ref self: ContractState) {␊ self.ownable.assert_only_owner();␊ self.pausable.pause();␊ }␊ ␊ #[external(v0)]␊ fn unpause(ref self: ContractState) {␊ self.ownable.assert_only_owner();␊ self.pausable.unpause();␊ }␊ }␊ ␊ //␊ // Upgradeable␊ //␊ ␊ #[abi(embed_v0)]␊ impl UpgradeableImpl of IUpgradeable<ContractState> {␊ fn upgrade(ref self: ContractState, new_class_hash: ClassHash) {␊ self.ownable.assert_only_owner();␊ self.upgradeable.upgrade(new_class_hash);␊ }␊ }␊ }␊ ` ## upgradeable > Snapshot 1 `// SPDX-License-Identifier: MIT␊ // Compatible with OpenZeppelin Contracts for Cairo ^2.0.0␊ ␊ #[starknet::contract]␊ mod MyContract {␊ use openzeppelin::access::ownable::OwnableComponent;␊ use openzeppelin::upgrades::interface::IUpgradeable;␊ use openzeppelin::upgrades::UpgradeableComponent;␊ use starknet::{ClassHash, ContractAddress};␊ ␊ component!(path: UpgradeableComponent, storage: upgradeable, event: UpgradeableEvent);␊ component!(path: OwnableComponent, storage: ownable, event: OwnableEvent);␊ ␊ // External␊ #[abi(embed_v0)]␊ impl OwnableMixinImpl = OwnableComponent::OwnableMixinImpl<ContractState>;␊ ␊ // Internal␊ impl UpgradeableInternalImpl = UpgradeableComponent::InternalImpl<ContractState>;␊ impl OwnableInternalImpl = OwnableComponent::InternalImpl<ContractState>;␊ ␊ #[storage]␊ struct Storage {␊ #[substorage(v0)]␊ upgradeable: UpgradeableComponent::Storage,␊ #[substorage(v0)]␊ ownable: OwnableComponent::Storage,␊ }␊ ␊ #[event]␊ #[derive(Drop, starknet::Event)]␊ enum Event {␊ #[flat]␊ UpgradeableEvent: UpgradeableComponent::Event,␊ #[flat]␊ OwnableEvent: OwnableComponent::Event,␊ }␊ ␊ #[constructor]␊ fn constructor(ref self: ContractState, owner: ContractAddress) {␊ self.ownable.initializer(owner);␊ }␊ ␊ //␊ // Upgradeable␊ //␊ ␊ #[abi(embed_v0)]␊ impl UpgradeableImpl of IUpgradeable<ContractState> {␊ fn upgrade(ref self: ContractState, new_class_hash: ClassHash) {␊ self.ownable.assert_only_owner();␊ self.upgradeable.upgrade(new_class_hash);␊ }␊ }␊ }␊ ` ## access control disabled > Snapshot 1 `// SPDX-License-Identifier: MIT␊ // Compatible with OpenZeppelin Contracts for Cairo ^2.0.0␊ ␊ #[starknet::contract]␊ mod MyContract {␊ #[storage]␊ struct Storage {␊ }␊ }␊ ` ## access control ownable > Snapshot 1 `// SPDX-License-Identifier: MIT␊ // Compatible with OpenZeppelin Contracts for Cairo ^2.0.0␊ ␊ #[starknet::contract]␊ mod MyContract {␊ use openzeppelin::access::ownable::OwnableComponent;␊ use openzeppelin::upgrades::interface::IUpgradeable;␊ use openzeppelin::upgrades::UpgradeableComponent;␊ use starknet::{ClassHash, ContractAddress};␊ ␊ component!(path: OwnableComponent, storage: ownable, event: OwnableEvent);␊ component!(path: UpgradeableComponent, storage: upgradeable, event: UpgradeableEvent);␊ ␊ // External␊ #[abi(embed_v0)]␊ impl OwnableMixinImpl = OwnableComponent::OwnableMixinImpl<ContractState>;␊ ␊ // Internal␊ impl OwnableInternalImpl = OwnableComponent::InternalImpl<ContractState>;␊ impl UpgradeableInternalImpl = UpgradeableComponent::InternalImpl<ContractState>;␊ ␊ #[storage]␊ struct Storage {␊ #[substorage(v0)]␊ ownable: OwnableComponent::Storage,␊ #[substorage(v0)]␊ upgradeable: UpgradeableComponent::Storage,␊ }␊ ␊ #[event]␊ #[derive(Drop, starknet::Event)]␊ enum Event {␊ #[flat]␊ OwnableEvent: OwnableComponent::Event,␊ #[flat]␊ UpgradeableEvent: UpgradeableComponent::Event,␊ }␊ ␊ #[constructor]␊ fn constructor(ref self: ContractState, owner: ContractAddress) {␊ self.ownable.initializer(owner);␊ }␊ ␊ //␊ // Upgradeable␊ //␊ ␊ #[abi(embed_v0)]␊ impl UpgradeableImpl of IUpgradeable<ContractState> {␊ fn upgrade(ref self: ContractState, new_class_hash: ClassHash) {␊ self.ownable.assert_only_owner();␊ self.upgradeable.upgrade(new_class_hash);␊ }␊ }␊ }␊ ` ## access control roles > Snapshot 1 `// SPDX-License-Identifier: MIT␊ // Compatible with OpenZeppelin Contracts for Cairo ^2.0.0␊ ␊ const UPGRADER_ROLE: felt252 = selector!("UPGRADER_ROLE");␊ ␊ #[starknet::contract]␊ mod MyContract {␊ use openzeppelin::access::accesscontrol::{AccessControlComponent, DEFAULT_ADMIN_ROLE};␊ use openzeppelin::introspection::src5::SRC5Component;␊ use openzeppelin::upgrades::interface::IUpgradeable;␊ use openzeppelin::upgrades::UpgradeableComponent;␊ use starknet::{ClassHash, ContractAddress};␊ use super::UPGRADER_ROLE;␊ ␊ component!(path: AccessControlComponent, storage: accesscontrol, event: AccessControlEvent);␊ component!(path: SRC5Component, storage: src5, event: SRC5Event);␊ component!(path: UpgradeableComponent, storage: upgradeable, event: UpgradeableEvent);␊ ␊ // External␊ #[abi(embed_v0)]␊ impl AccessControlMixinImpl = AccessControlComponent::AccessControlMixinImpl<ContractState>;␊ ␊ // Internal␊ impl AccessControlInternalImpl = AccessControlComponent::InternalImpl<ContractState>;␊ impl UpgradeableInternalImpl = UpgradeableComponent::InternalImpl<ContractState>;␊ ␊ #[storage]␊ struct Storage {␊ #[substorage(v0)]␊ accesscontrol: AccessControlComponent::Storage,␊ #[substorage(v0)]␊ src5: SRC5Component::Storage,␊ #[substorage(v0)]␊ upgradeable: UpgradeableComponent::Storage,␊ }␊ ␊ #[event]␊ #[derive(Drop, starknet::Event)]␊ enum Event {␊ #[flat]␊ AccessControlEvent: AccessControlComponent::Event,␊ #[flat]␊ SRC5Event: SRC5Component::Event,␊ #[flat]␊ UpgradeableEvent: UpgradeableComponent::Event,␊ }␊ ␊ #[constructor]␊ fn constructor(␊ ref self: ContractState,␊ default_admin: ContractAddress,␊ upgrader: ContractAddress,␊ ) {␊ self.accesscontrol.initializer();␊ ␊ self.accesscontrol._grant_role(DEFAULT_ADMIN_ROLE, default_admin);␊ self.accesscontrol._grant_role(UPGRADER_ROLE, upgrader);␊ }␊ ␊ //␊ // Upgradeable␊ //␊ ␊ #[abi(embed_v0)]␊ impl UpgradeableImpl of IUpgradeable<ContractState> {␊ fn upgrade(ref self: ContractState, new_class_hash: ClassHash) {␊ self.accesscontrol.assert_only_role(UPGRADER_ROLE);␊ self.upgradeable.upgrade(new_class_hash);␊ }␊ }␊ }␊ ` ## pausable with access control disabled > Snapshot 1 `// SPDX-License-Identifier: MIT␊ // Compatible with OpenZeppelin Contracts for Cairo ^2.0.0␊ ␊ #[starknet::contract]␊ mod MyContract {␊ use openzeppelin::access::ownable::OwnableComponent;␊ use openzeppelin::security::pausable::PausableComponent;␊ use starknet::ContractAddress;␊ ␊ component!(path: PausableComponent, storage: pausable, event: PausableEvent);␊ component!(path: OwnableComponent, storage: ownable, event: OwnableEvent);␊ ␊ // External␊ #[abi(embed_v0)]␊ impl PausableImpl = PausableComponent::PausableImpl<ContractState>;␊ #[abi(embed_v0)]␊ impl OwnableMixinImpl = OwnableComponent::OwnableMixinImpl<ContractState>;␊ ␊ // Internal␊ impl PausableInternalImpl = PausableComponent::InternalImpl<ContractState>;␊ impl OwnableInternalImpl = OwnableComponent::InternalImpl<ContractState>;␊ ␊ #[storage]␊ struct Storage {␊ #[substorage(v0)]␊ pausable: PausableComponent::Storage,␊ #[substorage(v0)]␊ ownable: OwnableComponent::Storage,␊ }␊ ␊ #[event]␊ #[derive(Drop, starknet::Event)]␊ enum Event {␊ #[flat]␊ PausableEvent: PausableComponent::Event,␊ #[flat]␊ OwnableEvent: OwnableComponent::Event,␊ }␊ ␊ #[constructor]␊ fn constructor(ref self: ContractState, owner: ContractAddress) {␊ self.ownable.initializer(owner);␊ }␊ ␊ #[generate_trait]␊ #[abi(per_item)]␊ impl ExternalImpl of ExternalTrait {␊ #[external(v0)]␊ fn pause(ref self: ContractState) {␊ self.ownable.assert_only_owner();␊ self.pausable.pause();␊ }␊ ␊ #[external(v0)]␊ fn unpause(ref self: ContractState) {␊ self.ownable.assert_only_owner();␊ self.pausable.unpause();␊ }␊ }␊ }␊ `

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/OpenZeppelin/contracts-wizard'

If you have feedback or need assistance with the MCP directory API, please join our Discord server