Release 4.0 has implemented the shielded TRC-20 contract, which can hide the source address, destination address, and the token amount for TRC-20 transactions and provide users with better privacy. The shielded TRC-20 contract has three core functions: `mint`, `transfer` and `burn`. `mint` is used to transform the public TRC-20 token to shielded token; `transfer` is used for shielded token transactions; `burn` is used to transform the shielded token back to the public TRC-20 token. To support the shielded TRC-20 contract, four new zero-knowledge instructions (`verifyMintProof`, `verifyTransferProof`, `verifyBurnProof` and `pedersenHash`) are add in TVM, which make it convenient to provide privacy for arbitrary TRC-20 contract.

## Notices

Forced upgrade

## New features

  • Add 4 new instructions (`verifyMintProof`, `verifyTransferProof`, `verifyBurnProof` and `pedersenHash`) in TVM to support TRC20 shielded transactions based on zk-SNARKs (#3172).

    • `verifyMintProof`: used to validate the zero-knowledge proof for `mint` function.

    • `verifyTransferProof`: used to validate the zero-knowledge proof for `transfer` function.

    • `verifyBurnProof`: used to validate the zero-knowledge proof for `burn` function.

    • `pedersenHash`: used to compute the Pedersen hash.

  • Update the initial parameters of zk-SNARKs scheme generated by the MPC Torch (#3210).

  • Add the APIs to support shielded TRC-20 contract transaction (#3172).

    1. Create shielded contract parameters

    

    2. Create shielded contract parameters without ask

    

    3. Scan shielded TRC20 notes by ivk

    

    4. Scan shielded TRC20 notes by ovk

    

    5. Check if the shielded TRC20 note is spent

    

    6. Get the trigger input for the shielded TRC20 contract

    
  • Support the `ovk` to scan the transparent output of `burn` transaction (#3203).

  • Support the `burn` transaction with zero or one shielded output (#3224).

  • Add data field in transaction log trigger class for future memo note (#3200).

The following TIPs are implemented in this release:

  • [TIP-135](🔗): Shielded TRC-20 contract standards, guarantee the privacy of the shielded transfer of TRC-20 tokens.

  • [TIP-137](🔗): Implements three zero-knowledge proof instructions in TVM to support the shielded TRC-20 contract (#3172).

  • [TIP-138](🔗): Implements the Pedersen hash computation instruction in TVM to support the shielded TRC-20 contract (#3172).

## Changes

  • Check if null before getInstance when get transaction info from DB to fix exception of `getTransactioninfoByBlkNum` (#3165).