Are you an LLM? Read llms.txt for a summary of the docs, or llms-full.txt for the full context.
Skip to content

Receivers are a shared primitive across both lanes: a receiver is named by a receiverSalt (bytes32), and that salt deterministically implies a Tron receiver address.

Receiver salt

  • A receiver is identified by receiverSalt, not by an address.
  • The same salt can be referenced on the EVM hub for leasing, recognition, and reconciliation.

Address derivation (high level)

The receiver address is derived from:

  • Tron controller address
  • receiverSalt
  • receiver creation bytecode hash (receiver implementation embedded)
  • a Tron-specific CREATE2 prefix

The hub predicts this address so it can:

  • validate deposit recipients during preEntitle,
  • attribute deposits to a specific receiver salt and its active lease.

Late deployment

Deposits can arrive at a receiver address before code exists at that address.

Later:

  • the controller deploys the receiver contract at the deterministic address, and
  • pulls accumulated balances into the controller.

This pattern enables “address allocation” without deploying a contract per user up-front.

Sweeping (“pulling”) from receivers

Sweeping is permissionless on Tron:

  • For a given token and list of receiver salts:
    • compute the deterministic receiver address per salt
    • deploy the receiver if not deployed yet
    • pull balanceOf(receiver) - 1 (leaving 1 base unit)
    • transfer the swept amount into the controller
    • append an event into the controller event hash-chain

The EVM hub later learns about sweeps through the slow-path controller relay.

See: