After creation, there is always single NFT token in existence.
The mint of an NFT token demands spending of a specific UTXO. Therefore there can be only one such token minted.
The NFT token should be locked at the UpgradeableOwners validator. Importantly this is not ensured by the policy.
If the NFT token gets indeed locked at the UpgradeableOwners validator, then the validator ensures that whenever it is spent it is also recreated in the continuing output.
The token is always held only at UpgradeableOwners script.
This is not checked by the NFT policy in the initial transaction, but later is enforced in all UpgradeableOwners transactions.
Initialization creates a correct datum.
This is not the case in the sense that it is not enforced by the policy. It is a role of offchain code to create a correct initialization transaction and up to the users to verify the protocol they are using was initialized correctly.
NFT Script
Protocol Requirements
After creation, there is always single NFT token in existence.
The mint of an NFT token demands spending of a specific UTXO. Therefore there can be only one such token minted. The NFT token should be locked at the
UpgradeableOwners
validator. Importantly this is not ensured by the policy. If the NFT token gets indeed locked at theUpgradeableOwners
validator, then the validator ensures that whenever it is spent it is also recreated in the continuing output.The token is always held only at UpgradeableOwners script.
This is not checked by the NFT policy in the initial transaction, but later is enforced in all
UpgradeableOwners
transactions.Initialization creates a correct datum.
This is not the case in the sense that it is not enforced by the policy. It is a role of offchain code to create a correct initialization transaction and up to the users to verify the protocol they are using was initialized correctly.