From 9423736d6bc41ea9e3b29e5ab02ef284ae32b75b Mon Sep 17 00:00:00 2001 From: Jon Michael Aanes Date: Wed, 9 Apr 2025 22:32:50 +0200 Subject: [PATCH] Upgradable NFT contract --- rust/notamon-nft/src/lib.rs | 2 ++ rust/notamon-nft/src/upgrade.rs | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+) create mode 100644 rust/notamon-nft/src/upgrade.rs diff --git a/rust/notamon-nft/src/lib.rs b/rust/notamon-nft/src/lib.rs index 417699e..3fbc99e 100644 --- a/rust/notamon-nft/src/lib.rs +++ b/rust/notamon-nft/src/lib.rs @@ -15,6 +15,8 @@ use read_write_state_derive::ReadWriteState; use notamon_common::{NotamonAttributes, AssetId}; +mod upgrade; + /// A permission to transfer and approve NFTs given from an NFT owner to a separate address, called an operator. #[derive(ReadWriteState, CreateTypeSpec, PartialEq, Copy, Clone, Ord, PartialOrd, Eq)] struct OperatorApproval { diff --git a/rust/notamon-nft/src/upgrade.rs b/rust/notamon-nft/src/upgrade.rs new file mode 100644 index 0000000..8030c0c --- /dev/null +++ b/rust/notamon-nft/src/upgrade.rs @@ -0,0 +1,20 @@ +//! Upgrade logic for allowing upgrade. + +use crate::NFTContractState; +use pbc_contract_codegen::upgrade_is_allowed; +use pbc_contract_common::context::ContractContext; +use pbc_contract_common::upgrade::ContractHashes; + +/// Checks whether the upgrade is allowed. +/// +/// This contract allows the [`ContractState::upgrader`] to upgrade the contract at any time. +#[upgrade_is_allowed] +pub fn is_upgrade_allowed( + context: ContractContext, + state: NFTContractState, + _old_contract_hashes: ContractHashes, + _new_contract_hashes: ContractHashes, + _new_contract_rpc: Vec, +) -> bool { + context.sender == state.contract_owner +}