Skip to main content
Glama

OpenZeppelin Contracts MCP Server

Official
by OpenZeppelin
stablecoin.test.ts.md25.2 kB
# Snapshot report for `src/stablecoin.test.ts` The actual snapshot is saved in `stablecoin.test.ts.snap`. Generated by [AVA](https://avajs.dev). ## basic stablecoin > Snapshot 1 `// SPDX-License-Identifier: MIT␊ // Compatible with OpenZeppelin Contracts ^5.4.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ import {ERC20Permit} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol";␊ ␊ contract MyStablecoin is ERC20, ERC20Permit {␊ constructor() ERC20("MyStablecoin", "MST") ERC20Permit("MyStablecoin") {}␊ }␊ ` ## stablecoin burnable > Snapshot 1 `// SPDX-License-Identifier: MIT␊ // Compatible with OpenZeppelin Contracts ^5.4.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ import {ERC20Burnable} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol";␊ import {ERC20Permit} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol";␊ ␊ contract MyStablecoin is ERC20, ERC20Burnable, ERC20Permit {␊ constructor() ERC20("MyStablecoin", "MST") ERC20Permit("MyStablecoin") {}␊ }␊ ` ## stablecoin pausable > Snapshot 1 `// SPDX-License-Identifier: MIT␊ // Compatible with OpenZeppelin Contracts ^5.4.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ import {ERC20Pausable} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Pausable.sol";␊ import {ERC20Permit} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol";␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ ␊ contract MyStablecoin is ERC20, ERC20Pausable, Ownable, ERC20Permit {␊ constructor(address initialOwner)␊ ERC20("MyStablecoin", "MST")␊ Ownable(initialOwner)␊ ERC20Permit("MyStablecoin")␊ {}␊ ␊ function pause() public onlyOwner {␊ _pause();␊ }␊ ␊ function unpause() public onlyOwner {␊ _unpause();␊ }␊ ␊ // The following functions are overrides required by Solidity.␊ ␊ function _update(address from, address to, uint256 value)␊ internal␊ override(ERC20, ERC20Pausable)␊ {␊ super._update(from, to, value);␊ }␊ }␊ ` ## stablecoin pausable with roles > Snapshot 1 `// SPDX-License-Identifier: MIT␊ // Compatible with OpenZeppelin Contracts ^5.4.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol";␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ import {ERC20Pausable} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Pausable.sol";␊ import {ERC20Permit} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol";␊ ␊ contract MyStablecoin is ERC20, ERC20Pausable, AccessControl, ERC20Permit {␊ bytes32 public constant PAUSER_ROLE = keccak256("PAUSER_ROLE");␊ ␊ constructor(address defaultAdmin, address pauser)␊ ERC20("MyStablecoin", "MST")␊ ERC20Permit("MyStablecoin")␊ {␊ _grantRole(DEFAULT_ADMIN_ROLE, defaultAdmin);␊ _grantRole(PAUSER_ROLE, pauser);␊ }␊ ␊ function pause() public onlyRole(PAUSER_ROLE) {␊ _pause();␊ }␊ ␊ function unpause() public onlyRole(PAUSER_ROLE) {␊ _unpause();␊ }␊ ␊ // The following functions are overrides required by Solidity.␊ ␊ function _update(address from, address to, uint256 value)␊ internal␊ override(ERC20, ERC20Pausable)␊ {␊ super._update(from, to, value);␊ }␊ }␊ ` ## stablecoin pausable with managed > Snapshot 1 `// SPDX-License-Identifier: MIT␊ // Compatible with OpenZeppelin Contracts ^5.4.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ import {ERC20Pausable} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Pausable.sol";␊ import {ERC20Permit} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol";␊ ␊ contract MyStablecoin is ERC20, ERC20Pausable, AccessManaged, ERC20Permit {␊ constructor(address initialAuthority)␊ ERC20("MyStablecoin", "MST")␊ AccessManaged(initialAuthority)␊ ERC20Permit("MyStablecoin")␊ {}␊ ␊ function pause() public restricted {␊ _pause();␊ }␊ ␊ function unpause() public restricted {␊ _unpause();␊ }␊ ␊ // The following functions are overrides required by Solidity.␊ ␊ function _update(address from, address to, uint256 value)␊ internal␊ override(ERC20, ERC20Pausable)␊ {␊ super._update(from, to, value);␊ }␊ }␊ ` ## stablecoin burnable pausable > Snapshot 1 `// SPDX-License-Identifier: MIT␊ // Compatible with OpenZeppelin Contracts ^5.4.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ import {ERC20Burnable} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol";␊ import {ERC20Pausable} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Pausable.sol";␊ import {ERC20Permit} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol";␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ ␊ contract MyStablecoin is ERC20, ERC20Burnable, ERC20Pausable, Ownable, ERC20Permit {␊ constructor(address initialOwner)␊ ERC20("MyStablecoin", "MST")␊ Ownable(initialOwner)␊ ERC20Permit("MyStablecoin")␊ {}␊ ␊ function pause() public onlyOwner {␊ _pause();␊ }␊ ␊ function unpause() public onlyOwner {␊ _unpause();␊ }␊ ␊ // The following functions are overrides required by Solidity.␊ ␊ function _update(address from, address to, uint256 value)␊ internal␊ override(ERC20, ERC20Pausable)␊ {␊ super._update(from, to, value);␊ }␊ }␊ ` ## stablecoin preminted > Snapshot 1 `// SPDX-License-Identifier: MIT␊ // Compatible with OpenZeppelin Contracts ^5.4.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ import {ERC20Permit} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol";␊ ␊ contract MyStablecoin is ERC20, ERC20Permit {␊ constructor(address recipient)␊ ERC20("MyStablecoin", "MST")␊ ERC20Permit("MyStablecoin")␊ {␊ _mint(recipient, 1000 * 10 ** decimals());␊ }␊ }␊ ` ## stablecoin premint of 0 > Snapshot 1 `// SPDX-License-Identifier: MIT␊ // Compatible with OpenZeppelin Contracts ^5.4.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ import {ERC20Permit} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol";␊ ␊ contract MyStablecoin is ERC20, ERC20Permit {␊ constructor() ERC20("MyStablecoin", "MST") ERC20Permit("MyStablecoin") {}␊ }␊ ` ## stablecoin mintable > Snapshot 1 `// SPDX-License-Identifier: MIT␊ // Compatible with OpenZeppelin Contracts ^5.4.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ import {ERC20Permit} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol";␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ ␊ contract MyStablecoin is ERC20, Ownable, ERC20Permit {␊ constructor(address initialOwner)␊ ERC20("MyStablecoin", "MST")␊ Ownable(initialOwner)␊ ERC20Permit("MyStablecoin")␊ {}␊ ␊ function mint(address to, uint256 amount) public onlyOwner {␊ _mint(to, amount);␊ }␊ }␊ ` ## stablecoin mintable with roles > Snapshot 1 `// SPDX-License-Identifier: MIT␊ // Compatible with OpenZeppelin Contracts ^5.4.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol";␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ import {ERC20Permit} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol";␊ ␊ contract MyStablecoin is ERC20, AccessControl, ERC20Permit {␊ bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE");␊ ␊ constructor(address defaultAdmin, address minter)␊ ERC20("MyStablecoin", "MST")␊ ERC20Permit("MyStablecoin")␊ {␊ _grantRole(DEFAULT_ADMIN_ROLE, defaultAdmin);␊ _grantRole(MINTER_ROLE, minter);␊ }␊ ␊ function mint(address to, uint256 amount) public onlyRole(MINTER_ROLE) {␊ _mint(to, amount);␊ }␊ }␊ ` ## stablecoin callback > Snapshot 1 `// SPDX-License-Identifier: MIT␊ // Compatible with OpenZeppelin Contracts ^5.4.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC1363} from "@openzeppelin/contracts/token/ERC20/extensions/ERC1363.sol";␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ import {ERC20Permit} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol";␊ ␊ contract MyStablecoin is ERC20, ERC1363, ERC20Permit {␊ constructor() ERC20("MyStablecoin", "MST") ERC20Permit("MyStablecoin") {}␊ }␊ ` ## stablecoin permit > Snapshot 1 `// SPDX-License-Identifier: MIT␊ // Compatible with OpenZeppelin Contracts ^5.4.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ import {ERC20Permit} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol";␊ ␊ contract MyStablecoin is ERC20, ERC20Permit {␊ constructor() ERC20("MyStablecoin", "MST") ERC20Permit("MyStablecoin") {}␊ }␊ ` ## stablecoin custodian > Snapshot 1 `// SPDX-License-Identifier: MIT␊ // Compatible with OpenZeppelin Contracts ^5.4.0 and Community Contracts commit b0ddd27␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ import {ERC20Custodian} from "@openzeppelin/community-contracts/token/ERC20/extensions/ERC20Custodian.sol";␊ import {ERC20Permit} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol";␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ ␊ contract MyStablecoin is ERC20, ERC20Permit, ERC20Custodian, Ownable {␊ constructor(address initialOwner)␊ ERC20("MyStablecoin", "MST")␊ ERC20Permit("MyStablecoin")␊ Ownable(initialOwner)␊ {}␊ ␊ function _isCustodian(address user) internal view override returns (bool) {␊ return user == owner();␊ }␊ ␊ // The following functions are overrides required by Solidity.␊ ␊ function _update(address from, address to, uint256 value)␊ internal␊ override(ERC20, ERC20Custodian)␊ {␊ super._update(from, to, value);␊ }␊ }␊ ` ## stablecoin allowlist > Snapshot 1 `// SPDX-License-Identifier: MIT␊ // Compatible with OpenZeppelin Contracts ^5.4.0 and Community Contracts commit b0ddd27␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ import {ERC20Allowlist} from "@openzeppelin/community-contracts/token/ERC20/extensions/ERC20Allowlist.sol";␊ import {ERC20Permit} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol";␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ ␊ contract MyStablecoin is ERC20, ERC20Permit, ERC20Allowlist, Ownable {␊ constructor(address initialOwner)␊ ERC20("MyStablecoin", "MST")␊ ERC20Permit("MyStablecoin")␊ Ownable(initialOwner)␊ {}␊ ␊ function allowUser(address user) public onlyOwner {␊ _allowUser(user);␊ }␊ ␊ function disallowUser(address user) public onlyOwner {␊ _disallowUser(user);␊ }␊ ␊ // The following functions are overrides required by Solidity.␊ ␊ function _update(address from, address to, uint256 value)␊ internal␊ override(ERC20, ERC20Allowlist)␊ {␊ super._update(from, to, value);␊ }␊ ␊ function _approve(address owner, address spender, uint256 value, bool emitEvent)␊ internal␊ override(ERC20, ERC20Allowlist)␊ {␊ super._approve(owner, spender, value, emitEvent);␊ }␊ }␊ ` ## stablecoin blocklist > Snapshot 1 `// SPDX-License-Identifier: MIT␊ // Compatible with OpenZeppelin Contracts ^5.4.0 and Community Contracts commit b0ddd27␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ import {ERC20Blocklist} from "@openzeppelin/community-contracts/token/ERC20/extensions/ERC20Blocklist.sol";␊ import {ERC20Permit} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol";␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ ␊ contract MyStablecoin is ERC20, ERC20Permit, ERC20Blocklist, Ownable {␊ constructor(address initialOwner)␊ ERC20("MyStablecoin", "MST")␊ ERC20Permit("MyStablecoin")␊ Ownable(initialOwner)␊ {}␊ ␊ function blockUser(address user) public onlyOwner {␊ _blockUser(user);␊ }␊ ␊ function unblockUser(address user) public onlyOwner {␊ _unblockUser(user);␊ }␊ ␊ // The following functions are overrides required by Solidity.␊ ␊ function _update(address from, address to, uint256 value)␊ internal␊ override(ERC20, ERC20Blocklist)␊ {␊ super._update(from, to, value);␊ }␊ ␊ function _approve(address owner, address spender, uint256 value, bool emitEvent)␊ internal␊ override(ERC20, ERC20Blocklist)␊ {␊ super._approve(owner, spender, value, emitEvent);␊ }␊ }␊ ` ## stablecoin votes > Snapshot 1 `// SPDX-License-Identifier: MIT␊ // Compatible with OpenZeppelin Contracts ^5.4.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ import {ERC20Permit} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol";␊ import {ERC20Votes} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol";␊ import {Nonces} from "@openzeppelin/contracts/utils/Nonces.sol";␊ ␊ contract MyStablecoin is ERC20, ERC20Permit, ERC20Votes {␊ constructor() ERC20("MyStablecoin", "MST") ERC20Permit("MyStablecoin") {}␊ ␊ // The following functions are overrides required by Solidity.␊ ␊ function _update(address from, address to, uint256 value)␊ internal␊ override(ERC20, ERC20Votes)␊ {␊ super._update(from, to, value);␊ }␊ ␊ function nonces(address owner)␊ public␊ view␊ override(ERC20Permit, Nonces)␊ returns (uint256)␊ {␊ return super.nonces(owner);␊ }␊ }␊ ` ## stablecoin votes + blocknumber > Snapshot 1 `// SPDX-License-Identifier: MIT␊ // Compatible with OpenZeppelin Contracts ^5.4.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ import {ERC20Permit} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol";␊ import {ERC20Votes} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol";␊ import {Nonces} from "@openzeppelin/contracts/utils/Nonces.sol";␊ ␊ contract MyStablecoin is ERC20, ERC20Permit, ERC20Votes {␊ constructor() ERC20("MyStablecoin", "MST") ERC20Permit("MyStablecoin") {}␊ ␊ // The following functions are overrides required by Solidity.␊ ␊ function _update(address from, address to, uint256 value)␊ internal␊ override(ERC20, ERC20Votes)␊ {␊ super._update(from, to, value);␊ }␊ ␊ function nonces(address owner)␊ public␊ view␊ override(ERC20Permit, Nonces)␊ returns (uint256)␊ {␊ return super.nonces(owner);␊ }␊ }␊ ` ## stablecoin votes + timestamp > Snapshot 1 `// SPDX-License-Identifier: MIT␊ // Compatible with OpenZeppelin Contracts ^5.4.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ import {ERC20Permit} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol";␊ import {ERC20Votes} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol";␊ import {Nonces} from "@openzeppelin/contracts/utils/Nonces.sol";␊ ␊ contract MyStablecoin is ERC20, ERC20Permit, ERC20Votes {␊ constructor() ERC20("MyStablecoin", "MST") ERC20Permit("MyStablecoin") {}␊ ␊ function clock() public view override returns (uint48) {␊ return uint48(block.timestamp);␊ }␊ ␊ // solhint-disable-next-line func-name-mixedcase␊ function CLOCK_MODE() public pure override returns (string memory) {␊ return "mode=timestamp";␊ }␊ ␊ // The following functions are overrides required by Solidity.␊ ␊ function _update(address from, address to, uint256 value)␊ internal␊ override(ERC20, ERC20Votes)␊ {␊ super._update(from, to, value);␊ }␊ ␊ function nonces(address owner)␊ public␊ view␊ override(ERC20Permit, Nonces)␊ returns (uint256)␊ {␊ return super.nonces(owner);␊ }␊ }␊ ` ## stablecoin flashmint > Snapshot 1 `// SPDX-License-Identifier: MIT␊ // Compatible with OpenZeppelin Contracts ^5.4.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ import {ERC20FlashMint} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20FlashMint.sol";␊ import {ERC20Permit} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol";␊ ␊ contract MyStablecoin is ERC20, ERC20Permit, ERC20FlashMint {␊ constructor() ERC20("MyStablecoin", "MST") ERC20Permit("MyStablecoin") {}␊ }␊ ` ## stablecoin full > Snapshot 1 `// SPDX-License-Identifier: MIT␊ // Compatible with OpenZeppelin Contracts ^5.4.0 and Community Contracts commit b0ddd27␊ pragma solidity ^0.8.27;␊ ␊ import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol";␊ import {ERC1363} from "@openzeppelin/contracts/token/ERC20/extensions/ERC1363.sol";␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ import {ERC20Allowlist} from "@openzeppelin/community-contracts/token/ERC20/extensions/ERC20Allowlist.sol";␊ import {ERC20Bridgeable} from "@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Bridgeable.sol";␊ import {ERC20Burnable} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol";␊ import {ERC20Custodian} from "@openzeppelin/community-contracts/token/ERC20/extensions/ERC20Custodian.sol";␊ import {ERC20FlashMint} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20FlashMint.sol";␊ import {ERC20Pausable} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Pausable.sol";␊ import {ERC20Permit} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol";␊ import {ERC20Votes} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol";␊ import {Nonces} from "@openzeppelin/contracts/utils/Nonces.sol";␊ ␊ contract MyStablecoin is ERC20, ERC20Bridgeable, AccessControl, ERC20Burnable, ERC20Pausable, ERC1363, ERC20Permit, ERC20Votes, ERC20FlashMint, ERC20Custodian, ERC20Allowlist {␊ bytes32 public constant TOKEN_BRIDGE_ROLE = keccak256("TOKEN_BRIDGE_ROLE");␊ error Unauthorized();␊ bytes32 public constant PAUSER_ROLE = keccak256("PAUSER_ROLE");␊ bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE");␊ bytes32 public constant CUSTODIAN_ROLE = keccak256("CUSTODIAN_ROLE");␊ bytes32 public constant LIMITER_ROLE = keccak256("LIMITER_ROLE");␊ ␊ constructor(address defaultAdmin, address tokenBridge, address recipient, address pauser, address minter, address custodian, address limiter)␊ ERC20("MyStablecoin", "MST")␊ ERC20Permit("MyStablecoin")␊ {␊ _grantRole(DEFAULT_ADMIN_ROLE, defaultAdmin);␊ _grantRole(TOKEN_BRIDGE_ROLE, tokenBridge);␊ if (block.chainid == 10) {␊ _mint(recipient, 2000 * 10 ** decimals());␊ }␊ _grantRole(PAUSER_ROLE, pauser);␊ _grantRole(MINTER_ROLE, minter);␊ _grantRole(CUSTODIAN_ROLE, custodian);␊ _grantRole(LIMITER_ROLE, limiter);␊ }␊ ␊ function _checkTokenBridge(address caller) internal view override {␊ if (!hasRole(TOKEN_BRIDGE_ROLE, caller)) revert Unauthorized();␊ }␊ ␊ function pause() public onlyRole(PAUSER_ROLE) {␊ _pause();␊ }␊ ␊ function unpause() public onlyRole(PAUSER_ROLE) {␊ _unpause();␊ }␊ ␊ function mint(address to, uint256 amount) public onlyRole(MINTER_ROLE) {␊ _mint(to, amount);␊ }␊ ␊ function _isCustodian(address user) internal view override returns (bool) {␊ return hasRole(CUSTODIAN_ROLE, user);␊ }␊ ␊ function allowUser(address user) public onlyRole(LIMITER_ROLE) {␊ _allowUser(user);␊ }␊ ␊ function disallowUser(address user) public onlyRole(LIMITER_ROLE) {␊ _disallowUser(user);␊ }␊ ␊ // The following functions are overrides required by Solidity.␊ ␊ function _update(address from, address to, uint256 value)␊ internal␊ override(ERC20, ERC20Pausable, ERC20Votes, ERC20Custodian, ERC20Allowlist)␊ {␊ super._update(from, to, value);␊ }␊ ␊ function _approve(address owner, address spender, uint256 value, bool emitEvent)␊ internal␊ override(ERC20, ERC20Allowlist)␊ {␊ super._approve(owner, spender, value, emitEvent);␊ }␊ ␊ function supportsInterface(bytes4 interfaceId)␊ public␊ view␊ override(ERC20Bridgeable, AccessControl, ERC1363)␊ returns (bool)␊ {␊ return super.supportsInterface(interfaceId);␊ }␊ ␊ function nonces(address owner)␊ public␊ view␊ override(ERC20Permit, Nonces)␊ returns (uint256)␊ {␊ return super.nonces(owner);␊ }␊ }␊ `

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