Skip to main content
Glama

OpenZeppelin Contracts MCP Server

Official
by OpenZeppelin
stablecoin.test.ts.md32.3 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 Stellar Soroban Contracts ^0.4.1␊ #![no_std]␊ ␊ use soroban_sdk::{contract, contractimpl, Env, String};␊ use stellar_macros::default_impl;␊ use stellar_tokens::fungible::{Base, FungibleToken};␊ ␊ #[contract]␊ pub struct MyStablecoin;␊ ␊ #[contractimpl]␊ impl MyStablecoin {␊ pub fn __constructor(e: &Env) {␊ Base::set_metadata(e, 18, String::from_str(e, "MyStablecoin"), String::from_str(e, "MST"));␊ }␊ }␊ ␊ #[default_impl]␊ #[contractimpl]␊ impl FungibleToken for MyStablecoin {␊ type ContractType = Base;␊ ␊ }␊ ` ## stablecoin burnable > Snapshot 1 `// SPDX-License-Identifier: MIT␊ // Compatible with OpenZeppelin Stellar Soroban Contracts ^0.4.1␊ #![no_std]␊ ␊ use soroban_sdk::{Address, contract, contractimpl, Env, String};␊ use stellar_macros::default_impl;␊ use stellar_tokens::fungible::{Base, burnable::FungibleBurnable, FungibleToken};␊ ␊ #[contract]␊ pub struct MyStablecoin;␊ ␊ #[contractimpl]␊ impl MyStablecoin {␊ pub fn __constructor(e: &Env) {␊ Base::set_metadata(e, 18, String::from_str(e, "MyStablecoin"), String::from_str(e, "MST"));␊ }␊ }␊ ␊ #[default_impl]␊ #[contractimpl]␊ impl FungibleToken for MyStablecoin {␊ type ContractType = Base;␊ ␊ }␊ ␊ //␊ // Extensions␊ //␊ ␊ #[default_impl]␊ #[contractimpl]␊ impl FungibleBurnable for MyStablecoin {}␊ ` ## stablecoin pausable > Snapshot 1 `// SPDX-License-Identifier: MIT␊ // Compatible with OpenZeppelin Stellar Soroban Contracts ^0.4.1␊ #![no_std]␊ ␊ use soroban_sdk::{Address, contract, contractimpl, Env, String};␊ use stellar_access::ownable::{self as ownable, Ownable};␊ use stellar_contract_utils::pausable::{self as pausable, Pausable};␊ use stellar_macros::{default_impl, only_owner, when_not_paused};␊ use stellar_tokens::fungible::{Base, FungibleToken};␊ ␊ #[contract]␊ pub struct MyStablecoin;␊ ␊ #[contractimpl]␊ impl MyStablecoin {␊ pub fn __constructor(e: &Env, owner: Address) {␊ Base::set_metadata(e, 18, String::from_str(e, "MyStablecoin"), String::from_str(e, "MST"));␊ ownable::set_owner(e, &owner);␊ }␊ }␊ ␊ #[default_impl]␊ #[contractimpl]␊ impl FungibleToken for MyStablecoin {␊ type ContractType = Base;␊ ␊ #[when_not_paused]␊ fn transfer(e: &Env, from: Address, to: Address, amount: i128) {␊ Self::ContractType::transfer(e, &from, &to, amount);␊ }␊ ␊ #[when_not_paused]␊ fn transfer_from(e: &Env, spender: Address, from: Address, to: Address, amount: i128) {␊ Self::ContractType::transfer_from(e, &spender, &from, &to, amount);␊ }␊ }␊ ␊ //␊ // Utils␊ //␊ ␊ #[contractimpl]␊ impl Pausable for MyStablecoin {␊ fn paused(e: &Env) -> bool {␊ pausable::paused(e)␊ }␊ ␊ #[only_owner]␊ fn pause(e: &Env, caller: Address) {␊ pausable::pause(e);␊ }␊ ␊ #[only_owner]␊ fn unpause(e: &Env, caller: Address) {␊ pausable::unpause(e);␊ }␊ }␊ ␊ #[default_impl]␊ #[contractimpl]␊ impl Ownable for MyStablecoin {}␊ ` ## stablecoin burnable pausable > Snapshot 1 `// SPDX-License-Identifier: MIT␊ // Compatible with OpenZeppelin Stellar Soroban Contracts ^0.4.1␊ #![no_std]␊ ␊ use soroban_sdk::{Address, contract, contractimpl, Env, String};␊ use stellar_access::ownable::{self as ownable, Ownable};␊ use stellar_contract_utils::pausable::{self as pausable, Pausable};␊ use stellar_macros::{default_impl, only_owner, when_not_paused};␊ use stellar_tokens::fungible::{Base, burnable::FungibleBurnable, FungibleToken};␊ ␊ #[contract]␊ pub struct MyStablecoin;␊ ␊ #[contractimpl]␊ impl MyStablecoin {␊ pub fn __constructor(e: &Env, owner: Address) {␊ Base::set_metadata(e, 18, String::from_str(e, "MyStablecoin"), String::from_str(e, "MST"));␊ ownable::set_owner(e, &owner);␊ }␊ }␊ ␊ #[default_impl]␊ #[contractimpl]␊ impl FungibleToken for MyStablecoin {␊ type ContractType = Base;␊ ␊ #[when_not_paused]␊ fn transfer(e: &Env, from: Address, to: Address, amount: i128) {␊ Self::ContractType::transfer(e, &from, &to, amount);␊ }␊ ␊ #[when_not_paused]␊ fn transfer_from(e: &Env, spender: Address, from: Address, to: Address, amount: i128) {␊ Self::ContractType::transfer_from(e, &spender, &from, &to, amount);␊ }␊ }␊ ␊ //␊ // Extensions␊ //␊ ␊ #[contractimpl]␊ impl FungibleBurnable for MyStablecoin {␊ #[when_not_paused]␊ fn burn(e: &Env, from: Address, amount: i128) {␊ Base::burn(e, &from, amount);␊ }␊ ␊ #[when_not_paused]␊ fn burn_from(e: &Env, spender: Address, from: Address, amount: i128) {␊ Base::burn_from(e, &spender, &from, amount);␊ }␊ }␊ ␊ //␊ // Utils␊ //␊ ␊ #[contractimpl]␊ impl Pausable for MyStablecoin {␊ fn paused(e: &Env) -> bool {␊ pausable::paused(e)␊ }␊ ␊ #[only_owner]␊ fn pause(e: &Env, caller: Address) {␊ pausable::pause(e);␊ }␊ ␊ #[only_owner]␊ fn unpause(e: &Env, caller: Address) {␊ pausable::unpause(e);␊ }␊ }␊ ␊ #[default_impl]␊ #[contractimpl]␊ impl Ownable for MyStablecoin {}␊ ` ## stablecoin preminted > Snapshot 1 `// SPDX-License-Identifier: MIT␊ // Compatible with OpenZeppelin Stellar Soroban Contracts ^0.4.1␊ #![no_std]␊ ␊ use soroban_sdk::{Address, contract, contractimpl, Env, String};␊ use stellar_macros::default_impl;␊ use stellar_tokens::fungible::{Base, FungibleToken};␊ ␊ #[contract]␊ pub struct MyStablecoin;␊ ␊ #[contractimpl]␊ impl MyStablecoin {␊ pub fn __constructor(e: &Env, recipient: Address) {␊ Base::set_metadata(e, 18, String::from_str(e, "MyStablecoin"), String::from_str(e, "MST"));␊ Base::mint(e, &recipient, 1000000000000000000000);␊ }␊ }␊ ␊ #[default_impl]␊ #[contractimpl]␊ impl FungibleToken for MyStablecoin {␊ type ContractType = Base;␊ ␊ }␊ ` ## stablecoin premint of 0 > Snapshot 1 `// SPDX-License-Identifier: MIT␊ // Compatible with OpenZeppelin Stellar Soroban Contracts ^0.4.1␊ #![no_std]␊ ␊ use soroban_sdk::{contract, contractimpl, Env, String};␊ use stellar_macros::default_impl;␊ use stellar_tokens::fungible::{Base, FungibleToken};␊ ␊ #[contract]␊ pub struct MyStablecoin;␊ ␊ #[contractimpl]␊ impl MyStablecoin {␊ pub fn __constructor(e: &Env) {␊ Base::set_metadata(e, 18, String::from_str(e, "MyStablecoin"), String::from_str(e, "MST"));␊ }␊ }␊ ␊ #[default_impl]␊ #[contractimpl]␊ impl FungibleToken for MyStablecoin {␊ type ContractType = Base;␊ ␊ }␊ ` ## stablecoin mintable > Snapshot 1 `// SPDX-License-Identifier: MIT␊ // Compatible with OpenZeppelin Stellar Soroban Contracts ^0.4.1␊ #![no_std]␊ ␊ use soroban_sdk::{Address, contract, contractimpl, Env, String};␊ use stellar_macros::default_impl;␊ use stellar_tokens::fungible::{Base, FungibleToken};␊ ␊ #[contract]␊ pub struct MyStablecoin;␊ ␊ #[contractimpl]␊ impl MyStablecoin {␊ pub fn __constructor(e: &Env) {␊ Base::set_metadata(e, 18, String::from_str(e, "MyStablecoin"), String::from_str(e, "MST"));␊ }␊ }␊ ␊ #[default_impl]␊ #[contractimpl]␊ impl FungibleToken for MyStablecoin {␊ type ContractType = Base;␊ ␊ }␊ ` ## stablecoin ownable > Snapshot 1 `// SPDX-License-Identifier: MIT␊ // Compatible with OpenZeppelin Stellar Soroban Contracts ^0.4.1␊ #![no_std]␊ ␊ use soroban_sdk::{Address, contract, contractimpl, Env, String};␊ use stellar_access::ownable::{self as ownable, Ownable};␊ use stellar_macros::default_impl;␊ use stellar_tokens::fungible::{Base, FungibleToken};␊ ␊ #[contract]␊ pub struct MyStablecoin;␊ ␊ #[contractimpl]␊ impl MyStablecoin {␊ pub fn __constructor(e: &Env, owner: Address) {␊ Base::set_metadata(e, 18, String::from_str(e, "MyStablecoin"), String::from_str(e, "MST"));␊ ownable::set_owner(e, &owner);␊ }␊ }␊ ␊ #[default_impl]␊ #[contractimpl]␊ impl FungibleToken for MyStablecoin {␊ type ContractType = Base;␊ ␊ }␊ ␊ //␊ // Utils␊ //␊ ␊ #[default_impl]␊ #[contractimpl]␊ impl Ownable for MyStablecoin {}␊ ` ## stablecoin roles > Snapshot 1 `// SPDX-License-Identifier: MIT␊ // Compatible with OpenZeppelin Stellar Soroban Contracts ^0.4.1␊ #![no_std]␊ ␊ use soroban_sdk::{Address, contract, contractimpl, Env, String};␊ use stellar_access::access_control::{self as access_control, AccessControl};␊ use stellar_macros::default_impl;␊ use stellar_tokens::fungible::{Base, FungibleToken};␊ ␊ #[contract]␊ pub struct MyStablecoin;␊ ␊ #[contractimpl]␊ impl MyStablecoin {␊ pub fn __constructor(e: &Env, admin: Address) {␊ Base::set_metadata(e, 18, String::from_str(e, "MyStablecoin"), String::from_str(e, "MST"));␊ access_control::set_admin(e, &admin);␊ }␊ }␊ ␊ #[default_impl]␊ #[contractimpl]␊ impl FungibleToken for MyStablecoin {␊ type ContractType = Base;␊ ␊ }␊ ␊ //␊ // Utils␊ //␊ ␊ #[default_impl]␊ #[contractimpl]␊ impl AccessControl for MyStablecoin {}␊ ` ## stablecoin allowlist > Snapshot 1 `// SPDX-License-Identifier: MIT␊ // Compatible with OpenZeppelin Stellar Soroban Contracts ^0.4.1␊ #![no_std]␊ ␊ use soroban_sdk::{Address, contract, contractimpl, Env, String};␊ use stellar_access::ownable::{self as ownable, Ownable};␊ use stellar_macros::{default_impl, only_owner};␊ use stellar_tokens::fungible::{␊ allowlist::{AllowList, FungibleAllowList}, Base, FungibleToken␊ };␊ ␊ #[contract]␊ pub struct MyStablecoin;␊ ␊ #[contractimpl]␊ impl MyStablecoin {␊ pub fn __constructor(e: &Env, owner: Address) {␊ Base::set_metadata(e, 18, String::from_str(e, "MyStablecoin"), String::from_str(e, "MST"));␊ ownable::set_owner(e, &owner);␊ }␊ }␊ ␊ #[default_impl]␊ #[contractimpl]␊ impl FungibleToken for MyStablecoin {␊ type ContractType = AllowList;␊ ␊ }␊ ␊ //␊ // Extensions␊ //␊ ␊ #[contractimpl]␊ impl FungibleAllowList for MyStablecoin {␊ fn allowed(e: &Env, account: Address) -> bool {␊ AllowList::allowed(e, &account)␊ }␊ ␊ #[only_owner]␊ fn allow_user(e: &Env, user: Address, operator: Address) {␊ AllowList::allow_user(e, &user);␊ }␊ ␊ #[only_owner]␊ fn disallow_user(e: &Env, user: Address, operator: Address) {␊ AllowList::disallow_user(e, &user);␊ }␊ }␊ ␊ //␊ // Utils␊ //␊ ␊ #[default_impl]␊ #[contractimpl]␊ impl Ownable for MyStablecoin {}␊ ` ## stablecoin blocklist > Snapshot 1 `// SPDX-License-Identifier: MIT␊ // Compatible with OpenZeppelin Stellar Soroban Contracts ^0.4.1␊ #![no_std]␊ ␊ use soroban_sdk::{Address, contract, contractimpl, Env, String};␊ use stellar_access::ownable::{self as ownable, Ownable};␊ use stellar_macros::{default_impl, only_owner};␊ use stellar_tokens::fungible::{␊ Base, blocklist::{BlockList, FungibleBlockList}, FungibleToken␊ };␊ ␊ #[contract]␊ pub struct MyStablecoin;␊ ␊ #[contractimpl]␊ impl MyStablecoin {␊ pub fn __constructor(e: &Env, owner: Address) {␊ Base::set_metadata(e, 18, String::from_str(e, "MyStablecoin"), String::from_str(e, "MST"));␊ ownable::set_owner(e, &owner);␊ }␊ }␊ ␊ #[default_impl]␊ #[contractimpl]␊ impl FungibleToken for MyStablecoin {␊ type ContractType = BlockList;␊ ␊ }␊ ␊ //␊ // Extensions␊ //␊ ␊ #[contractimpl]␊ impl FungibleBlockList for MyStablecoin {␊ fn blocked(e: &Env, account: Address) -> bool {␊ BlockList::blocked(e, &account)␊ }␊ ␊ #[only_owner]␊ fn block_user(e: &Env, user: Address, operator: Address) {␊ BlockList::block_user(e, &user);␊ }␊ ␊ #[only_owner]␊ fn unblock_user(e: &Env, user: Address, operator: Address) {␊ BlockList::unblock_user(e, &user);␊ }␊ }␊ ␊ //␊ // Utils␊ //␊ ␊ #[default_impl]␊ #[contractimpl]␊ impl Ownable for MyStablecoin {}␊ ` ## stablecoin full - ownable, allowlist > Snapshot 1 `// SPDX-License-Identifier: MIT␊ // Compatible with OpenZeppelin Stellar Soroban Contracts ^0.4.1␊ #![no_std]␊ ␊ use soroban_sdk::{Address, contract, contractimpl, Env, String};␊ use stellar_access::ownable::{self as ownable, Ownable};␊ use stellar_contract_utils::pausable::{self as pausable, Pausable};␊ use stellar_macros::{default_impl, only_owner, when_not_paused};␊ use stellar_tokens::fungible::{␊ allowlist::{AllowList, FungibleAllowList}, Base, burnable::FungibleBurnable, FungibleToken␊ };␊ ␊ #[contract]␊ pub struct MyStablecoin;␊ ␊ #[contractimpl]␊ impl MyStablecoin {␊ pub fn __constructor(e: &Env, recipient: Address, owner: Address) {␊ Base::set_metadata(e, 18, String::from_str(e, "MyStablecoin"), String::from_str(e, "MST"));␊ Base::mint(e, &recipient, 2000000000000000000000);␊ ownable::set_owner(e, &owner);␊ }␊ ␊ #[only_owner]␊ #[when_not_paused]␊ pub fn mint(e: &Env, account: Address, amount: i128) {␊ Base::mint(e, &account, amount);␊ }␊ }␊ ␊ #[default_impl]␊ #[contractimpl]␊ impl FungibleToken for MyStablecoin {␊ type ContractType = AllowList;␊ ␊ #[when_not_paused]␊ fn transfer(e: &Env, from: Address, to: Address, amount: i128) {␊ Self::ContractType::transfer(e, &from, &to, amount);␊ }␊ ␊ #[when_not_paused]␊ fn transfer_from(e: &Env, spender: Address, from: Address, to: Address, amount: i128) {␊ Self::ContractType::transfer_from(e, &spender, &from, &to, amount);␊ }␊ }␊ ␊ //␊ // Extensions␊ //␊ ␊ #[contractimpl]␊ impl FungibleAllowList for MyStablecoin {␊ fn allowed(e: &Env, account: Address) -> bool {␊ AllowList::allowed(e, &account)␊ }␊ ␊ #[only_owner]␊ fn allow_user(e: &Env, user: Address, operator: Address) {␊ AllowList::allow_user(e, &user);␊ }␊ ␊ #[only_owner]␊ fn disallow_user(e: &Env, user: Address, operator: Address) {␊ AllowList::disallow_user(e, &user);␊ }␊ }␊ ␊ #[contractimpl]␊ impl FungibleBurnable for MyStablecoin {␊ #[when_not_paused]␊ fn burn(e: &Env, from: Address, amount: i128) {␊ Base::burn(e, &from, amount);␊ }␊ ␊ #[when_not_paused]␊ fn burn_from(e: &Env, spender: Address, from: Address, amount: i128) {␊ Base::burn_from(e, &spender, &from, amount);␊ }␊ }␊ ␊ //␊ // Utils␊ //␊ ␊ #[contractimpl]␊ impl Pausable for MyStablecoin {␊ fn paused(e: &Env) -> bool {␊ pausable::paused(e)␊ }␊ ␊ #[only_owner]␊ fn pause(e: &Env, _caller: Address) {␊ pausable::pause(e);␊ }␊ ␊ #[only_owner]␊ fn unpause(e: &Env, _caller: Address) {␊ pausable::unpause(e);␊ }␊ }␊ ␊ #[default_impl]␊ #[contractimpl]␊ impl Ownable for MyStablecoin {}␊ ` ## stablecoin full - ownable, blocklist > Snapshot 1 `// SPDX-License-Identifier: MIT␊ // Compatible with OpenZeppelin Stellar Soroban Contracts ^0.4.1␊ #![no_std]␊ ␊ use soroban_sdk::{Address, contract, contractimpl, Env, String};␊ use stellar_access::ownable::{self as ownable, Ownable};␊ use stellar_contract_utils::pausable::{self as pausable, Pausable};␊ use stellar_macros::{default_impl, only_owner, when_not_paused};␊ use stellar_tokens::fungible::{␊ Base, blocklist::{BlockList, FungibleBlockList}, burnable::FungibleBurnable, FungibleToken␊ };␊ ␊ #[contract]␊ pub struct MyStablecoin;␊ ␊ #[contractimpl]␊ impl MyStablecoin {␊ pub fn __constructor(e: &Env, recipient: Address, owner: Address) {␊ Base::set_metadata(e, 18, String::from_str(e, "MyStablecoin"), String::from_str(e, "MST"));␊ Base::mint(e, &recipient, 2000000000000000000000);␊ ownable::set_owner(e, &owner);␊ }␊ ␊ #[only_owner]␊ #[when_not_paused]␊ pub fn mint(e: &Env, account: Address, amount: i128) {␊ Base::mint(e, &account, amount);␊ }␊ }␊ ␊ #[default_impl]␊ #[contractimpl]␊ impl FungibleToken for MyStablecoin {␊ type ContractType = BlockList;␊ ␊ #[when_not_paused]␊ fn transfer(e: &Env, from: Address, to: Address, amount: i128) {␊ Self::ContractType::transfer(e, &from, &to, amount);␊ }␊ ␊ #[when_not_paused]␊ fn transfer_from(e: &Env, spender: Address, from: Address, to: Address, amount: i128) {␊ Self::ContractType::transfer_from(e, &spender, &from, &to, amount);␊ }␊ }␊ ␊ //␊ // Extensions␊ //␊ ␊ #[contractimpl]␊ impl FungibleBlockList for MyStablecoin {␊ fn blocked(e: &Env, account: Address) -> bool {␊ BlockList::blocked(e, &account)␊ }␊ ␊ #[only_owner]␊ fn block_user(e: &Env, user: Address, operator: Address) {␊ BlockList::block_user(e, &user);␊ }␊ ␊ #[only_owner]␊ fn unblock_user(e: &Env, user: Address, operator: Address) {␊ BlockList::unblock_user(e, &user);␊ }␊ }␊ ␊ #[contractimpl]␊ impl FungibleBurnable for MyStablecoin {␊ #[when_not_paused]␊ fn burn(e: &Env, from: Address, amount: i128) {␊ Base::burn(e, &from, amount);␊ }␊ ␊ #[when_not_paused]␊ fn burn_from(e: &Env, spender: Address, from: Address, amount: i128) {␊ Base::burn_from(e, &spender, &from, amount);␊ }␊ }␊ ␊ //␊ // Utils␊ //␊ ␊ #[contractimpl]␊ impl Pausable for MyStablecoin {␊ fn paused(e: &Env) -> bool {␊ pausable::paused(e)␊ }␊ ␊ #[only_owner]␊ fn pause(e: &Env, _caller: Address) {␊ pausable::pause(e);␊ }␊ ␊ #[only_owner]␊ fn unpause(e: &Env, _caller: Address) {␊ pausable::unpause(e);␊ }␊ }␊ ␊ #[default_impl]␊ #[contractimpl]␊ impl Ownable for MyStablecoin {}␊ ` ## stablecoin full - roles, allowlist > Snapshot 1 `// SPDX-License-Identifier: MIT␊ // Compatible with OpenZeppelin Stellar Soroban Contracts ^0.4.1␊ #![no_std]␊ ␊ use soroban_sdk::{Address, contract, contractimpl, Env, String, Symbol};␊ use stellar_access::access_control::{self as access_control, AccessControl};␊ use stellar_contract_utils::pausable::{self as pausable, Pausable};␊ use stellar_macros::{default_impl, only_role, when_not_paused};␊ use stellar_tokens::fungible::{␊ allowlist::{AllowList, FungibleAllowList}, Base, burnable::FungibleBurnable, FungibleToken␊ };␊ ␊ #[contract]␊ pub struct MyStablecoin;␊ ␊ #[contractimpl]␊ impl MyStablecoin {␊ pub fn __constructor(␊ e: &Env,␊ recipient: Address,␊ admin: Address,␊ pauser: Address,␊ minter: Address,␊ manager: Address,␊ ) {␊ Base::set_metadata(e, 18, String::from_str(e, "MyStablecoin"), String::from_str(e, "MST"));␊ Base::mint(e, &recipient, 2000000000000000000000);␊ access_control::set_admin(e, &admin);␊ access_control::grant_role_no_auth(e, &admin, &pauser, &Symbol::new(e, "pauser"));␊ access_control::grant_role_no_auth(e, &admin, &minter, &Symbol::new(e, "minter"));␊ access_control::grant_role_no_auth(e, &admin, &manager, &Symbol::new(e, "manager"));␊ }␊ ␊ #[only_role(caller, "minter")]␊ #[when_not_paused]␊ pub fn mint(e: &Env, account: Address, amount: i128, caller: Address) {␊ Base::mint(e, &account, amount);␊ }␊ }␊ ␊ #[default_impl]␊ #[contractimpl]␊ impl FungibleToken for MyStablecoin {␊ type ContractType = AllowList;␊ ␊ #[when_not_paused]␊ fn transfer(e: &Env, from: Address, to: Address, amount: i128) {␊ Self::ContractType::transfer(e, &from, &to, amount);␊ }␊ ␊ #[when_not_paused]␊ fn transfer_from(e: &Env, spender: Address, from: Address, to: Address, amount: i128) {␊ Self::ContractType::transfer_from(e, &spender, &from, &to, amount);␊ }␊ }␊ ␊ //␊ // Extensions␊ //␊ ␊ #[contractimpl]␊ impl FungibleAllowList for MyStablecoin {␊ fn allowed(e: &Env, account: Address) -> bool {␊ AllowList::allowed(e, &account)␊ }␊ ␊ #[only_role(operator, "manager")]␊ fn allow_user(e: &Env, user: Address, operator: Address) {␊ AllowList::allow_user(e, &user);␊ }␊ ␊ #[only_role(operator, "manager")]␊ fn disallow_user(e: &Env, user: Address, operator: Address) {␊ AllowList::disallow_user(e, &user);␊ }␊ }␊ ␊ #[contractimpl]␊ impl FungibleBurnable for MyStablecoin {␊ #[when_not_paused]␊ fn burn(e: &Env, from: Address, amount: i128) {␊ Base::burn(e, &from, amount);␊ }␊ ␊ #[when_not_paused]␊ fn burn_from(e: &Env, spender: Address, from: Address, amount: i128) {␊ Base::burn_from(e, &spender, &from, amount);␊ }␊ }␊ ␊ //␊ // Utils␊ //␊ ␊ #[contractimpl]␊ impl Pausable for MyStablecoin {␊ fn paused(e: &Env) -> bool {␊ pausable::paused(e)␊ }␊ ␊ #[only_role(caller, "pauser")]␊ fn pause(e: &Env, caller: Address) {␊ pausable::pause(e);␊ }␊ ␊ #[only_role(caller, "pauser")]␊ fn unpause(e: &Env, caller: Address) {␊ pausable::unpause(e);␊ }␊ }␊ ␊ #[default_impl]␊ #[contractimpl]␊ impl AccessControl for MyStablecoin {}␊ ` ## stablecoin full - roles, blocklist > Snapshot 1 `// SPDX-License-Identifier: MIT␊ // Compatible with OpenZeppelin Stellar Soroban Contracts ^0.4.1␊ #![no_std]␊ ␊ use soroban_sdk::{Address, contract, contractimpl, Env, String, Symbol};␊ use stellar_access::access_control::{self as access_control, AccessControl};␊ use stellar_contract_utils::pausable::{self as pausable, Pausable};␊ use stellar_macros::{default_impl, only_role, when_not_paused};␊ use stellar_tokens::fungible::{␊ Base, blocklist::{BlockList, FungibleBlockList}, burnable::FungibleBurnable, FungibleToken␊ };␊ ␊ #[contract]␊ pub struct MyStablecoin;␊ ␊ #[contractimpl]␊ impl MyStablecoin {␊ pub fn __constructor(␊ e: &Env,␊ recipient: Address,␊ admin: Address,␊ pauser: Address,␊ minter: Address,␊ manager: Address,␊ ) {␊ Base::set_metadata(e, 18, String::from_str(e, "MyStablecoin"), String::from_str(e, "MST"));␊ Base::mint(e, &recipient, 2000000000000000000000);␊ access_control::set_admin(e, &admin);␊ access_control::grant_role_no_auth(e, &admin, &pauser, &Symbol::new(e, "pauser"));␊ access_control::grant_role_no_auth(e, &admin, &minter, &Symbol::new(e, "minter"));␊ access_control::grant_role_no_auth(e, &admin, &manager, &Symbol::new(e, "manager"));␊ }␊ ␊ #[only_role(caller, "minter")]␊ #[when_not_paused]␊ pub fn mint(e: &Env, account: Address, amount: i128, caller: Address) {␊ Base::mint(e, &account, amount);␊ }␊ }␊ ␊ #[default_impl]␊ #[contractimpl]␊ impl FungibleToken for MyStablecoin {␊ type ContractType = BlockList;␊ ␊ #[when_not_paused]␊ fn transfer(e: &Env, from: Address, to: Address, amount: i128) {␊ Self::ContractType::transfer(e, &from, &to, amount);␊ }␊ ␊ #[when_not_paused]␊ fn transfer_from(e: &Env, spender: Address, from: Address, to: Address, amount: i128) {␊ Self::ContractType::transfer_from(e, &spender, &from, &to, amount);␊ }␊ }␊ ␊ //␊ // Extensions␊ //␊ ␊ #[contractimpl]␊ impl FungibleBlockList for MyStablecoin {␊ fn blocked(e: &Env, account: Address) -> bool {␊ BlockList::blocked(e, &account)␊ }␊ ␊ #[only_role(operator, "manager")]␊ fn block_user(e: &Env, user: Address, operator: Address) {␊ BlockList::block_user(e, &user);␊ }␊ ␊ #[only_role(operator, "manager")]␊ fn unblock_user(e: &Env, user: Address, operator: Address) {␊ BlockList::unblock_user(e, &user);␊ }␊ }␊ ␊ #[contractimpl]␊ impl FungibleBurnable for MyStablecoin {␊ #[when_not_paused]␊ fn burn(e: &Env, from: Address, amount: i128) {␊ Base::burn(e, &from, amount);␊ }␊ ␊ #[when_not_paused]␊ fn burn_from(e: &Env, spender: Address, from: Address, amount: i128) {␊ Base::burn_from(e, &spender, &from, amount);␊ }␊ }␊ ␊ //␊ // Utils␊ //␊ ␊ #[contractimpl]␊ impl Pausable for MyStablecoin {␊ fn paused(e: &Env) -> bool {␊ pausable::paused(e)␊ }␊ ␊ #[only_role(caller, "pauser")]␊ fn pause(e: &Env, caller: Address) {␊ pausable::pause(e);␊ }␊ ␊ #[only_role(caller, "pauser")]␊ fn unpause(e: &Env, caller: Address) {␊ pausable::unpause(e);␊ }␊ }␊ ␊ #[default_impl]␊ #[contractimpl]␊ impl AccessControl for MyStablecoin {}␊ ` ## stablecoin full - complex name > Snapshot 1 `// SPDX-License-Identifier: MIT␊ // Compatible with OpenZeppelin Stellar Soroban Contracts ^0.4.1␊ #![no_std]␊ ␊ use soroban_sdk::{Address, contract, contractimpl, Env, String};␊ use stellar_access::ownable::{self as ownable, Ownable};␊ use stellar_contract_utils::pausable::{self as pausable, Pausable};␊ use stellar_macros::{default_impl, only_owner, when_not_paused};␊ use stellar_tokens::fungible::{Base, burnable::FungibleBurnable, FungibleToken};␊ ␊ #[contract]␊ pub struct CustomToken;␊ ␊ #[contractimpl]␊ impl CustomToken {␊ pub fn __constructor(e: &Env, recipient: Address, owner: Address) {␊ Base::set_metadata(e, 18, String::from_str(e, "Custom $ Token"), String::from_str(e, "MST"));␊ Base::mint(e, &recipient, 2000000000000000000000);␊ ownable::set_owner(e, &owner);␊ }␊ ␊ #[only_owner]␊ #[when_not_paused]␊ pub fn mint(e: &Env, account: Address, amount: i128) {␊ Base::mint(e, &account, amount);␊ }␊ }␊ ␊ #[default_impl]␊ #[contractimpl]␊ impl FungibleToken for CustomToken {␊ type ContractType = Base;␊ ␊ #[when_not_paused]␊ fn transfer(e: &Env, from: Address, to: Address, amount: i128) {␊ Self::ContractType::transfer(e, &from, &to, amount);␊ }␊ ␊ #[when_not_paused]␊ fn transfer_from(e: &Env, spender: Address, from: Address, to: Address, amount: i128) {␊ Self::ContractType::transfer_from(e, &spender, &from, &to, amount);␊ }␊ }␊ ␊ //␊ // Extensions␊ //␊ ␊ #[contractimpl]␊ impl FungibleBurnable for CustomToken {␊ #[when_not_paused]␊ fn burn(e: &Env, from: Address, amount: i128) {␊ Base::burn(e, &from, amount);␊ }␊ ␊ #[when_not_paused]␊ fn burn_from(e: &Env, spender: Address, from: Address, amount: i128) {␊ Base::burn_from(e, &spender, &from, amount);␊ }␊ }␊ ␊ //␊ // Utils␊ //␊ ␊ #[contractimpl]␊ impl Pausable for CustomToken {␊ fn paused(e: &Env) -> bool {␊ pausable::paused(e)␊ }␊ ␊ #[only_owner]␊ fn pause(e: &Env, _caller: Address) {␊ pausable::pause(e);␊ }␊ ␊ #[only_owner]␊ fn unpause(e: &Env, _caller: Address) {␊ pausable::unpause(e);␊ }␊ }␊ ␊ #[default_impl]␊ #[contractimpl]␊ impl Ownable for CustomToken {}␊ `

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