Implementing a fiat-based payment system

In a fiat-based payment processor, a buyer deposits fiat currency to their account using your application. The payment processor mints a corresponding amount of an off-chain token in the buyer’s vault, with the buyer’s public Stark key. The buyer can use those off-chain funds to pay a merchant for goods and services.

After the buyer has transferred a payment to the merchant, the merchant can withdraw the funds. Alternatively, the buyer can withdraw any unused funds at any time.

The payment processor defines the following:

  • the fiat currencies that the system supports

  • the corresponding StarkEx-based off-chain asset

The StarkEx version of the fiat currency is generated dynamically in StarkEx when executing a transaction, so it’s not based on any on-chain stable coin.


Alice uses your application to deposit 100 USD to her account. The application mints the equivalent of 100 USD in a StarkEx-based token, specifying a vault ID and Alice’s public Stark key. Alice now has what appears to her to be 100 USD in her account that she can use to pay for goods and services.

Transaction types

This type of payment processor uses the following types of transactions:

  • Mint

  • Transfer

The mechanism for depositing fiat currency into the system and withdrawing it from the system is not implemented with StarkEx.

Additional resources

For information on the flows and the API calls that you must implement in your payment system, see the following topics: