Skip to main content

What is TIP-20

TIP-20 is Tempo’s native token standard. It shares the same interface as ERC-20 (transfer, approve, balanceOf all work the same way) but uses role-based access control (for example issuer, admin, and pause roles) instead of a single Ownable owner. TIP-20 is built for controlled tokens like stablecoins, where minting and burning require strict permissions. On Tempo, tokens like pathUSD are TIP-20 tokens.
This page covers TIP-20 from a LayerZero integration perspective. For the full TIP-20 specification, see the Tempo documentation.

TIP-20 vs ERC-20

AspectERC-20TIP-20
Interfacestandard ERC-20ERC-20 compatible (same read/transfer API)
Admin modelOwnable or customrole-based access control
Mintingowner or custom logicrequires ISSUER_ROLE
Burningowner, self, or customrequires ISSUER_ROLE
Fee paymentnot built-inbuilt-in stablecoin fee payment on Tempo
Payment lanesnot availablededicated blockspace for token transfers
Transfer memosnot built-in32-byte memo field on transfers
PermitEIP-2612 (optional extension)TIP-1004 (optional extension)
Compliancenot built-inTIP-403 policy registry integration

Role-based administration

TIP-20 tokens use ISSUER_ROLE to control mint and burn operations. This differs from the typical Ownable pattern:
  • ERC-20 with Ownable: a single owner address controls privileged operations
  • TIP-20 with ISSUER_ROLE: multiple addresses can hold the role, and role management follows a standard access control pattern
Any contract that needs to mint or burn a TIP-20 token, including OFTAlt adapters, must hold ISSUER_ROLE on that token.

Built-in features

TIP-20 extends the ERC-20 interface with Tempo-specific features:
  • Fee payment: TIP-20 stablecoins can pay Tempo transaction fees (no native gas token needed)
  • Payment lanes: dedicated blockspace for TIP-20 transfers, providing predictable throughput
  • Transfer memos: 32-byte memo field attached to transfers for payment references or metadata
  • Permit (TIP-1004): EIP-2612 permit functionality for gasless approvals via off-chain signatures
  • Burning: authorized contracts with ISSUER_ROLE can call burn

Compliance integration

Tempo provides the TIP-403 policy registry for whitelist/blacklist enforcement on token transfers. When a TIP-20 token registers a policy, the registry validates every transfer against the policy rules before execution.
  • Registry address: 0x403c... (on Tempo)
  • Supports compound policies with separate sender and recipient rules (TIP-1015)
  • Integrators should be aware that transfers may revert if either party is blacklisted by the token’s policy
For full TIP-403 details, see the Tempo documentation.

How TIP-20 and ERC-20 coexist on Tempo

Tempo supports both TIP-20 and ERC-20 tokens:
  • TIP-20 tokens are native to Tempo (e.g., pathUSD). They have built-in fee payment, payment lanes, and compliance features.
  • ERC-20 tokens can be deployed directly on Tempo or arrive via bridges. They follow standard ERC-20 semantics without TIP-20 extensions.
Standard EVM tooling works for both:
  • balanceOf, transfer, approve, and transferFrom behave the same way
  • Wallets, block explorers, and SDKs interact with both standards through the same ERC-20 interface
  • Role-gated operations (mint, burn) are only available on TIP-20 tokens and require ISSUER_ROLE

Integration with OFTAlt

When bridging a TIP-20 token cross-chain using LayerZero, the OFTAlt adapter on Tempo needs to mint tokens on receive and burn tokens on send. This requires ISSUER_ROLE:
  1. Deploy a TIP20MintBurnOFTAltAdapter on Tempo pointing to the TIP-20 token
  2. Grant ISSUER_ROLE to the adapter contract address on the TIP-20 token
  3. The adapter can now mint on receive and burn on send
// Contract must hold ISSUER_ROLE to mint/burn the TIP-20 token
import { OFTAltCore } from "@layerzerolabs/oft-alt-evm/contracts/OFTAltCore.sol";
import { ITIP20Minter } from "./interfaces/ITIP20Minter.sol";
import { IERC20Metadata } from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";

abstract contract TIP20MintBurnOFTAltAdapter is OFTAltCore {
    address public innerToken;

    constructor(
        address _token,
        address _lzEndpoint,
        address _delegate
    ) OFTAltCore(IERC20Metadata(_token).decimals(), _lzEndpoint, _delegate) {
        innerToken = _token;
    }

    // _debit: transfers tokens from sender to this contract, then burns them via ITIP20Minter
    // _credit: mints tokens directly to the recipient via ITIP20Minter
}
Without ISSUER_ROLE, the adapter’s mint and burn calls will revert. Ensure the role is granted before configuring cross-chain pathways.
On other chains, the same token uses a standard OFT or OFTAdapter. No TIP-20 awareness is needed outside of Tempo.

Whitelisted fee tokens

LZEndpointDollar (LZD) accepts whitelisted 6-decimal TIP-20 stablecoins for fee wrapping:
TokenTypeCan pay LZ fees
pathUSDTIP-20yes
USDC.eTIP-20yes
USDT0TIP-20yes
To pay fees, wrap any whitelisted token into LZD using LZD.wrap(). See the LZD reference for the complete flow.