BURNFT2

Burns a fungible UTXO. This effectively moves the entire amount of a fungible UTXO from a private ZEOS wallet into two different transparent EOSIO/Antelope accounts. For this operation the entire ZEOS Action Circuit is used since one existing UTXO is being spent and its amount publicly revealed 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 actions
  • memo: traceable - memo of the asset's smart contract's transfer actions
  • receiver: traceable - the receiver's EOSIO/Antelope accounts

Flow

The following steps specify the flow of BURNFT2.

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 and the remaining is to be transmitted to the EOSIO/Antelope . Therefore the following must apply: .

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 ciphertexts of and of which are burned and therefore have the BURN flag set. These ciphertexts are 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 BURNFT2 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 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 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
  • Add ciphertext to the Transmitted UTXO Ciphertext List
  • Transfer of asset represented by into the EOSIO/Antelope account .
  • Transfer of asset represented by into the EOSIO/Antelope account .

If , cancel execution.