BURNNFT

Burns a non-fungible UTXO. This effectively moves a non-fungible asset from a private ZEOS wallet to a transparent EOSIO/Antelope account. For this operation only part A and B of the ZEOS Action Circuit is used since one existing UTXO is being spent and is publicly revealed by this action.

Privacy Implications

This action provides only limited privacy protection:

  • sender: untraceable - hidden in zk-SNARK
  • asset: traceable - asset id of the asset's smart contract's transfer¹ action
  • memo: traceable - memo of the asset's smart contract's transfer¹ action
  • receiver: traceable - the receiver's EOSIO/Antelope account

¹ refers to the transfer action of the AtomicAssets smart contract

Flow

The following steps specify the flow of BURNNFT.

Step 0

The UTXO represents a non-fungible EOSIO/Antelope asset which is to be transmitted to the EOSIO/Antelope account .

Step 1

Calculate the diversified transmission keys of all ZEOS wallet addresses involved (see section 5.4.1.6 of the Zcash Protocol Specification):

Step 2

Calculate the Commitment of the UTXO :

Step 3

Calculate the of the Commitment Tree based on the sister path of .

Step 4

Calculate the Nullifier of :

Step 5

Choose a random value and calculate the Spend Authority for this action (see section 4.17.4 of the Zcash Protocol Specification):

  • Choose a random value

where is the Spend Validating Key of which is part of the Full Viewing Key.

Step 6

Set the private inputs of the arithmetic circuit:

  • sister path of in the Commitment Tree
  • leaf index of in the Commitment Tree
  • Spend Validating Key of which is part of the Full Viewing Key
  • Nullifier Deriving Key of which is part of the Full Viewing Key
  • Randomness of which is part of the Full Viewing Key

Step 7

Set the public inputs of the arithmetic circuit:

Step 8

Generate a proof of knowledge of satisfying arguments so that

The pair is the zk-SNARK which attests to knowledge of private inputs without revealing them.

Step 9

Generate UTXO ciphertext of which is burned and therefore has the BURN flag set. This ciphertext is created only for the sender's wallet transaction history to detect burned UTXOs when scanning the ZEOS smart contract's state (see section 4.19.1 of the Zcash Protocol Specification).

Step 10

Execute the BURNNFT action of the ZEOS smart contract. This action takes the following arguments:

  • : The zero knowledge proof of satisfying arguments
  • : The public inputs of the zero knowledge proof
  • : The UTXO ciphertext which indicates the 'burned'

The ZEOS smart contract then performs the following checks:

  • Is the zero knowledge proof valid?
  • Is the NFT flag set ()?

Step 11

If , the ZEOS smart contract performs the following operations:

  • Add , the nullifier of to the Nullifier Set
  • Add ciphertext to the Transmitted UTXO Ciphertext List
  • Transfer the non-fungible asset represented by into the EOSIO/Antelope account .

If , cancel execution.