Current Version:

Odyssey-v4.0.0 Beta version    Branch name:develop


This version is a test version for opening anonymous transactions.


TRON shielded transaction uses zk-SNARK(Zero-Knowledge Succinct Non-Interactive Argument of Knowledge) to implement a completely anonymous transaction.

In TRON network, the sender and the receiver's address and transfer amount can both be completely confidential.

In TRON network, there are two types of address:

  • "t-addr" (Transparent Address)
  • "z-addr" (Shielded Address)

"t-addr" address uses TRON account model.

"z-addr" address uses Anonymous account model.

In TRON network, there are four types of transfer transaction:

  • From "t-addr" to "t-addr": All the transaction information of the two addresses can be tracked.
  • From "t-addr" to "z-addr": The transaction information of "t-addr" can be tracked, "z-addr" can not be tracked.
  • From "z-addr" to "z-addr": The transaction information of both "z-addr" can not be tracked.
  • From "z-addr" to "t-addr": The transaction information of both "t-addr" can be tracked, "z-addr" can not be tracked.


The branch that supports shielded transaction in wallet-cli is:feature/zk_snark_2.

Shielded transaction related commands in wallet-cli:

  • generateshieldaddress
  • sendshieldcoin
  • sendshieldcoinwithoutask
  • listshieldnote
  • scannotebyaddress
  • scannotebyovk
  • getshieldnullifier
  • scanandmarknotebyaddress

Details link

Click to see details of anonymous transactions

Historical Edition:



All the node must upgrade to this version.

Release note

New Features

  • #2070 Add create2 instruction for TVM, which returns a predictable contract address before deploy. TIP #26
  • #2069 Add bitwise shifting instructions for TVM to reduce energy consumption of shift. TIP #29
  • #2075 Add extcodehash instruction for TVM which returns the keccak256 hash of a contract's code. TIP#30
  • #2125 Add triggerConstantContract API to support contracts which have no ABI. TIP #31
  • #2125 Add clearABI API including http and grpc, contract's deployer can use this to clear his contract's existed ABI. TIP #32
  • #2093 Add built-in message queue for event subscribe. TIP #28
  • #2047 Add protocol data check
  • #2154 Add the Permission_id field when returning the created transaction, compatible with multi-signature transactions


  • #2142 Support event subscription without abi
  • #2173 Optimize erengy deduction strategy in TVM when transfer 、sendor transferToken failed
  • #2141 Optimize the HTTP interface by adding the visible parameter to support the convenience type of addresses and strings, and add the AccountID related interface
  • #2182 Optimize http/grpc broadcast transaction interface
  • #2155 Optimize the process of block broadcasting
  • #2219 Fix the problem that the http interface parses the long type value for a long time.


  • Add built-in message queue config. See here
    • use event.subscribe.native.useNativeQueue to control whether using built-in message queue . If true, use native message queue, else use event plugin.
    • use event.subscribe.native.bindport to control bind port.
    • use event.subscribe.native.sendqueuelength to control max length of send queue.
  • For smart contact without ABI (after clear ABI or deploy without ABI)
    • If you want to call the constant method, you must use the triggerConstantContract interface instead of triggerContract . More details: TIP #31
    • If you need event subscription, you need to subscribe to and upload ABI using version 3.6+. More details:
    • After clearABI, it is not possible to re-add ABI to the same contract address.
  • For create2 instruction
    • If you want to use create2 to genertate a new address . More details: TIP #31
    • After suicide, the storage of create2 addresses will be reset.
    • If deployed on a normal address (created by transfer trx), the address will be modified to the contract address. The resources (bandwidth and energy) previously delegated to this address are cleared, and do not affect the unfreeze operation of the client.