Research/Solana

Solana Token Extensions: Programmable Compliance for Digital Payments

How Solana's Token Extensions add transfer hooks, confidential transfers, and compliance features directly into the token standard.

bcTanjiJul 20, 2026

Every stablecoin issuer on Ethereum has solved the same problems independently: blacklisting sanctioned addresses, freezing compromised accounts, enforcing transfer restrictions. Each solution lives in a bespoke smart contract, audited separately, with its own quirks and failure modes. Solana's Token Extensions take a different approach: compliance features are built directly into the token program itself, available as standardized, opt-in extensions that any issuer can activate at mint creation.

The result is a programmable compliance layer native to the token standard, not bolted on afterward. For digital payments, this distinction matters: wallets, DEXs, and payment processors interact with a single, protocol-audited interface rather than navigating dozens of issuer-specific contract implementations.

What Are Token Extensions?

Token Extensions (internally called Token-2022) is Solana's second-generation token program. It shipped to mainnet on January 24, 2024, as a superset of the original SPL Token Program that had powered all Solana tokens since the chain's launch. The original program handles the basics: minting, transferring, burning, and freezing tokens. Any feature beyond that required developers to build wrapper contracts or fork the token program entirely, fragmenting the ecosystem.

Token-2022 solves this by offering 27 optional extensions that issuers can enable at mint creation. Extensions range from compliance primitives (transfer hooks, permanent delegates) to privacy features (confidential transfers) to metadata standards. The two programs coexist on Solana: legacy tokens like USDC and USDT remain on the original SPL Token Program, while newer institutional tokens launch on Token-2022 to access the extended feature set.

Key distinction: Extensions are chosen at mint creation and cannot be added later. Issuers must anticipate their compliance and feature requirements upfront. This is the opposite of Ethereum's proxy upgrade pattern, where contract logic can be modified after deployment.

Transfer Hooks: Custom Logic on Every Transfer

The Transfer Hook extension is the most powerful compliance primitive in Token-2022. When enabled on a mint, every transfer of that token triggers a Cross-Program Invocation (CPI) from the Token-2022 program to a developer-specified hook program. This hook can execute arbitrary logic: checking a KYC allowlist, enforcing jurisdictional restrictions, calculating royalties, or logging transfers for regulatory reporting.

How Transfer Hooks Work

The hook program must implement a standardized Transfer Hook Interface, including an Execute instruction that receives the transfer amount. A critical security constraint applies: all accounts from the initial transfer are converted to read-only in the CPI context. The sender's signer privileges do not extend to the hook program, preventing malicious hooks from draining sender accounts.

Hook programs can declare additional required accounts through an Extra Account Metas PDA (Program Derived Address). These can be direct public keys, PDAs derived within the hook program, or PDAs from external programs. This mechanism allows hooks to reference on-chain state like allowlists or compliance registries without requiring changes to the core transfer instruction.

  • Every transfer invokes the hook: there is no way to bypass it
  • Hook programs can reject transfers by returning an error
  • Hooks introduce CPI depth, which has performance and composability implications for DeFi protocols
  • The hook address is set at mint creation and is immutable

Confidential Transfers: ZK-Based Amount Hiding

Confidential Transfers encrypt token balances and transfer amounts using Twisted ElGamal encryption, a scheme chosen for its linear homomorphism: the runtime can update encrypted balances (addition and subtraction) without ever decrypting them. Token account addresses and transaction participants remain public; only the amounts are hidden.

The Cryptographic Stack

Users generate an ElGamal keypair locally during account setup. The public key is stored on-chain so incoming transfers can be encrypted under it. Outgoing transfers require the sender to generate several zero-knowledge proofs, verified by a dedicated native program (the ZK ElGamal Proof Program):

  • Range proofs (using Bulletproofs): the sender proves transfer amounts are positive 64-bit integers that will not create negative balances
  • Equality proofs: since amounts are encrypted under both the sender's and receiver's keys, the sender proves both ciphertexts represent the same value
  • Ciphertext validity proofs and public-key validity proofs for structural correctness

Proof generation happens client-side and takes a few seconds on standard hardware. Encrypted balances split into two components: an "available balance" (decreased by outgoing transfers) and a "pending balance" (increased by incoming transfers). Users must explicitly call ApplyPendingBalance to merge pending into available. This two-balance architecture prevents cryptographic front-running, where an attacker could invalidate a sender's locally generated proofs by sending a micro-transfer that changes the encrypted balance between proof generation and on-chain submission.

Auditor keys: Confidential Transfers support an optional Global Auditor system. Issuers can designate an auditor key capable of decrypting all transfer amounts for compliance purposes, while amounts remain hidden from the general public. This balances regulatory requirements with user privacy.

Security Incidents

The ZK ElGamal Proof Program has experienced two significant security incidents. In April 2025, security researcher suneal_eth from zkSecurity reported a critical vulnerability where a component was omitted from a hash function in the Fiat-Shamir Transformation, potentially allowing forged proofs that could enable unlimited token minting. A supermajority of validators applied the fix privately before public disclosure on May 3, 2025. No known exploits occurred.

A second incident in June 2025 led to Confidential Transfers being temporarily disabled at epoch 805. The Solana Foundation stated re-enablement would require further audits taking "at least a few months." As of mid-2026, no major stablecoin issuer has activated Confidential Transfers for end users, though several (including Paxos for PYUSD and USDG) have initialized the extension on their mints.

Compliance Extensions for Stablecoin Issuers

Beyond transfer hooks and confidential transfers, Token-2022 offers several extensions specifically designed for regulated token issuers. These address the compliance requirements that fiat-backed stablecoin issuers face across jurisdictions.

Permanent Delegate

A mint-level authority that can transfer or burn tokens from any token account for that mint, without the account owner's signature. Account owners cannot revoke this authority. For regulated stablecoins, this is the mechanism for court-ordered seizures, sanctions compliance, and error recovery: the equivalent of the forceTransfer function that USDC and USDT implement in their Ethereum contracts.

The extension has become controversial because scam token creators exploit it to burn victims' tokens seconds after purchase. Tools like RugCheck now flag tokens with Permanent Delegate enabled, and Jupiter displays warnings when users attempt to trade them.

Default Account State

Allows the mint creator to specify that all newly created token accounts start in a frozen state. Token holders must be individually unfrozen before they can receive or send transfers. This enables a "whitelist-by-default" model where only verified (KYC'd) addresses can transact: a requirement under regulations like MiCA for certain token classifications.

Pausable

Added in 2025, this extension allows the mint authority to pause all transfers, mints, and burns globally with a single instruction. MiCA-compliant stablecoins need emergency pause capability, and this extension provides it natively rather than requiring issuers to implement their own pause mechanism.

Transfer Fees

Configured at the mint level with a designated fee authority. Fees are expressed in basis points and collected automatically on every transfer. Withheld fees are stored in a TransferFeeAmount extension on each recipient's token account. For payment tokens, this enables issuer-level fee collection without separate fee-routing contracts.

Extensions at a Glance

ExtensionPurposeCompliance Use Case
Transfer HookCustom logic on every transfer via CPIKYC/AML allowlist checks, jurisdictional restrictions
Confidential TransfersZK-encrypted amounts and balancesTransaction privacy with auditor key for regulators
Permanent DelegateAuthority to transfer/burn from any accountSanctions enforcement, court-ordered seizures
Default Account StateNew accounts start frozenWhitelist-only token transfers (KYC gating)
Transfer FeesAutomatic basis-point fees on transfersIssuer fee collection, regulatory surcharges
PausableGlobal pause on all token operationsEmergency halt for MiCA compliance
Non-TransferableTokens cannot be transferred after mintingSoulbound credentials, compliance attestations
Memo TransferRequires memo on incoming transfersTravel Rule compliance, payment reference tracking

Stablecoin Adoption on Token-2022

The adoption pattern is clear: legacy stablecoins remain on the original SPL Token Program, while every new institutional stablecoin launch on Solana chooses Token-2022. This split reflects the trade-off between ecosystem compatibility and compliance capabilities.

StablecoinIssuerToken StandardNotable Extensions
USDCCircleOriginal SPL TokenNone (legacy program)
USDTTetherOriginal SPL TokenNone (legacy program)
PYUSDPaxos (for PayPal)Token-2022Confidential Transfers, Permanent Delegate, Transfer Hook, Metadata
USDGPaxos Digital SingaporeToken-2022Permanent Delegate, Confidential Transfers, Transfer Hook, Metadata
EURCCircleToken-2022Metadata (MiCA-compliant issuance)

PYUSD launched on Solana in May 2024 as the first major stablecoin to fully leverage Token Extensions. USDG followed in 2025, regulated by the Monetary Authority of Singapore. Both initialize Confidential Transfers and Transfer Hook extensions on their mints, though neither has activated confidential transfers for end users as of mid-2026.

The fact that Circle chose Token-2022 for its euro-denominated EURC on Solana while keeping USDC on the original SPL Token Program illustrates the gradual migration path. New products adopt the new standard; migrating existing tokens with billions in circulation carries significant risk and coordination overhead.

Ethereum ERC-20 vs Solana Token Extensions

On Ethereum, compliance is implemented per-contract. USDC's blacklist is a mapping maintained by Circle inside the USDC contract. USDT's freeze mechanism works differently, coded by Tether in a separate implementation. Each issuer deploys and audits their own compliance logic, leading to ecosystem fragmentation: wallets and DeFi protocols must understand each token's specific compliance interface.

The ERC-20 standard itself defines only the basic interface: transfer, approve, balanceOf. Standards like ERC-3643 were developed to add KYC whitelist checks, investor limits, and jurisdictional restrictions at the contract level, but adoption remains limited and opt-in. Meanwhile, issuers rely on the proxy upgrade pattern (OpenZeppelin) to modify deployed contract logic, introducing its own trust assumptions around upgrade keys.

Solana's approach embeds compliance into the token program itself. The trade-off: Ethereum's per-contract model offers unlimited flexibility (issuers can implement any logic), while Solana's extension model offers standardization at the cost of requiring issuers to work within a predefined feature set. For regulated payment tokens, the standardized approach reduces audit burden and integration complexity. For novel DeFi primitives, Ethereum's flexibility may be preferable.

AspectEthereum (ERC-20 + Custom)Solana (Token-2022)
BlacklistingCustom mapping per contractFreeze authority (SPL) or Default Account State
Forced transfer / seizureCustom contract functionPermanent Delegate extension
KYC-gated transfersERC-3643 (limited adoption)Transfer Hook with allowlist program
UpgradabilityProxy upgrade patternExtensions are immutable after mint creation
Emergency pauseCustom pause() functionPausable extension
Audit scopeEach token contract audited separatelyExtensions audited once at the protocol level
Integration complexityPer-token interface discoveryStandardized extension interface

Implications for Payment Infrastructure

For stablecoin payment infrastructure, Token Extensions change the integration calculus. Payment processors no longer need to audit each token contract individually: if a stablecoin uses Token-2022, processors know exactly which compliance features are available and how they behave. This standardization reduces the cost of supporting new stablecoin payment rails.

What Transfer Hooks Enable

Transfer hooks are particularly relevant for payment use cases. An issuer can deploy a hook program that checks every transfer against an on-chain sanctions list, enforces per-account transaction limits, or routes a percentage of each transfer to a reserve account. Because the hook executes on every transfer with no bypass mechanism, compliance is enforced at the protocol level rather than relying on wallet or application-level checks.

The limitation: Confidential Transfers and Transfer Hooks cannot be enabled simultaneously on the same mint. Hooks need to read transfer amounts, which are encrypted under Confidential Transfers. This forces issuers to choose between programmable compliance and amount privacy: a trade-off that may be resolved in future protocol updates but represents a real constraint today.

DeFi Compatibility Challenges

Token-2022 tokens face friction in DeFi. Major Solana DEXs including Raydium CLMM, Orca Whirlpools, and FluxBeam support Token-2022, and Jupiter provides routing across both token programs. However, tokens with Transfer Hooks often route only through specialized pools, fragmenting liquidity. Hooks also introduce CPI depth that older AMM forks do not handle, creating composability challenges that did not exist with the original SPL Token Program.

The Permanent Delegate Problem

The Permanent Delegate extension deserves special attention because it illustrates the tension between regulatory compliance and user sovereignty. For regulated stablecoins, the ability to seize or burn tokens from any account is a legal requirement: issuers must comply with court orders and OFAC sanctions. The same mechanism that enables this compliance has been exploited at scale by scam token creators who burn victims' tokens seconds after purchase.

This is not a bug: the Permanent Delegate works exactly as designed. The issue is that the same power needed for regulatory compliance enables theft when granted to malicious actors. Ecosystem tools have adapted: RugCheck flags tokens with Permanent Delegate, Jupiter displays warnings, and wallets like Phantom surface extension metadata. But the fundamental design tension remains unresolved.

Comparing Approaches to Programmable Compliance

Solana's Token Extensions represent one approach to making digital payment tokens programmable and compliant. Other ecosystems take different paths. Solana and Bitcoin L2s address payment infrastructure from fundamentally different starting points: Solana optimizes for programmability at the token layer, while Bitcoin L2 solutions like Spark inherit Bitcoin's security model and add payment functionality through protocol-level design rather than token-level extensions.

Spark supports native token issuance through the BTKN standard, enabling stablecoins like USDB to operate with instant transfers and self-custody guarantees backed by Bitcoin's L1 security. Where Solana's compliance model relies on extensions embedded in its token program, Spark's approach anchors all value to Bitcoin's base layer with unilateral exit guarantees: users can always withdraw to L1 without permission from any third party.

For developers building payment applications, the choice depends on requirements. Token-2022's extensions offer fine-grained compliance controls for issuers operating within Solana's ecosystem. Spark offers a different value proposition: Bitcoin-secured payments with instant settlement and no channel management. Developers can explore Spark's capabilities through the Spark SDK and documentation, or see it in action in wallets like General Bread.

What Comes Next

Token-2022 adoption will likely accelerate as regulatory frameworks like the GENIUS Act and MiCA formalize requirements for e-money tokens. Extensions like Pausable and Default Account State map directly to regulatory mandates, giving Token-2022 issuers a head start on compliance.

The unresolved questions are significant. Confidential Transfers need to demonstrate production readiness after two security incidents. The mutual exclusion between Transfer Hooks and Confidential Transfers limits issuers who want both programmable compliance and amount privacy. And the Permanent Delegate abuse problem demands ecosystem-level solutions beyond wallet warnings.

For the broader stablecoin payment landscape, Token Extensions represent an important experiment: can compliance be standardized at the token layer rather than reimplemented by every issuer? The answer has implications not just for Solana but for every blockchain ecosystem building payment infrastructure.

This article is for educational purposes only. It does not constitute financial or investment advice. Bitcoin and Layer 2 protocols involve technical and financial risk. Always do your own research and understand the tradeoffs before using any protocol.