BURNFT

Burns (part of) a fungible UTXO. This effectively moves a certain balance of a fungible asset from a private ZEOS wallet to a transparent EOSIO/Antelope account. For this operation the entire ZEOS Action Circuit is used since one existing UTXO is being spent, part of its balance is publicly revealed and one new UTXO is being created by this action.

Privacy Implications

This action provides only limited privacy protection:

  • sender: untraceable - hidden in zk-SNARK
  • asset: traceable - quantity 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

Flow

The following steps specify the flow of BURNFT.

Step 0

The UTXO represents an amount of a fungible EOSIO/Antelope asset from which a certain (partial) is to be transmitted to the EOSIO/Antelope account . Therefore the following must apply: .

Step 1

Create a new UTXO tuple representing the 'change' to of :

  • Diversifier index of the sending¹ ZEOS wallet address
  • Public key of the sending¹ ZEOS wallet address
  • Choose a random value
  • Choose a random value
  • Choose a random value

¹ Note that it is also possible to choose a third wallet address for instead of the sender's address.

Step 2

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

Step 3

Calculate the Commitment of the two UTXOs and :

Step 4

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

Step 5

Calculate the Nullifier of :

Step 6

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 7

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 8

Set the public inputs of the arithmetic circuit:

Step 9

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 10

Generate UTXO ciphertext of for the receiver of the UTXO (see section 4.19.1 of the Zcash Protocol Specification)

Generate an additional 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.

Step 11

Execute the BURNFT 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 is transmitted to the receiver of
  • : 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 unset ()?

Step 12

If , the ZEOS smart contract performs the following operations:

If , cancel execution.