Five steps to create and test a custom stablecoin

5 min read
Ben Milne | Brale
Chase Merlin | Brale
Five steps to create and test a custom stablecoin | Brale Blog

Deploying a stablecoin can be daunting. It's a little like setting up your first website. The first time you do it, it's a little weird. After that, it's no big deal.

Stablecoins are like that, too, so we wanted to create an easy-to-start guide for deploying your first stable, using it, and setting the price. For this guide, we are going to use DZUSD. If you're going through this with your stablecoin, remember to replace DZUSD with your stablecoin ticker.

Step 1 - Deploy your new stablecoin

Log into the Brale dashboard, click + New Stablecoin, and deploy it. Type in your primitives, fund with $1 USDC, and you're off. The video below is perfect, because it displays the creation of DZUSD so you can see this stablecoin from creation to wherever it is when you find this article.

This reserves the namespace DZUSD. It also creates the smart contract and the first ticker, name, and logo associations. This will get reused everywhere. It's a bit like registering a domain name. Once the stablecoin is created, we'd suggest doing a $100 transfer into your stablecoin from a wire, ACH, or other stablecoin. We'll touch on why $100 in step 5.

It is helpful to have comparisons when creating a new stablecoin. Here is how the ticker/name plays out with popular stablecoins and ones created at Brale.

TickerNameBacking currency
USD Coin (USDC) logoUSDCUSD CoinUSD logoUSD
Stable Coin (SBC) logoSBCStable CoinUSD logoUSD
Pax Dollar (USDP) logoUSDPPax DollarUSD logoUSD
PayPal Dollar (PYUSD) logoPYUSDPayPal DollarUSD logoUSD
Day Zero Dollar (DZUSD) logoDZUSDDay Zero DollarUSD logoUSD

Step 2 - Claim the blockchain explorer asset

Why it matters

This effectively claims the project on the scanner. This is important because as your project grows, it will help people find your project and return to any associated materials. In this case, DZUSD leads back to brale.xyz/events.

This is important because this will be the ticker's first external registration. This also makes the logo something that scanners, wallets, and other token lists can index.

Email [email protected] and insert your stablecoin information into this template:

Subject:
  [REQUEST]: Claim my new stablecoin profile

Body:
  Ticker: DZUSD
  Name: Day Zero Dollar
  Contract: 0xcc18b41a0f63C67F17F23388c848aeC67b583422
  Explorer Link: https://basescan.org/token/0xcc18b41a0f63C67F17F23388c848aeC67b583422

Here are some examples of claimed profiles:

TickerNameLink
USD Coin (USDC) logoUSDCUSD CoinView on explorer
Stable Coin (SBC) logoSBCStable CoinView on explorer
Day Zero Dollar (DZUSD) logoDZUSDDay Zero DollarView on explorer

Step 3 - Add your stablecoin to your wallet

You can add this in two ways. First, visit your newly updated blockchain page and add it to your favorite wallet. If you're waiting for the page to update, you can get the smart contract from the Brale Dashboard.

Every asset has its smart contracts linked, so this is where you can find it when logging in.

DZUSD in Brale Dashboard

DZUSD smart contract on Base is 0xcc18b41a0f63C67F17F23388c848aeC67b583422.

Then, adding it to your wallet, such as MetMask, is extremely easy. Copy the contract address and click + Import tokens in MetaMask. Select Custom token, and add your smart contract address.

MetaMask UI of wallet without imported tokensMetaMask UI of wallet without imported tokens
MetaMask UI of Import tokens > Custom token screenMetaMask UI of Import tokens > Custom token screen
MetaMask UI of adding Token contract addressMetaMask UI of adding Token contract address

Once imported, you can see the asset in the wallet. There isn't anything in there yet, but now the wallet knows to look for your stablecoin smart contract when you open it.

MetaMask UI of wallet without imported tokensMetaMask UI of wallet without imported tokens
MetaMask UI of Import tokens > Custom token screenMetaMask UI of Import tokens > Custom token screen
Why it matters

Your stablecoin will not show up in the wallet by default. Wallets like MetaMask require you to add this manually, which ensures your asset shows up in the wallet with the right logo.

Step 4 - Build a token list for your stablecoin

For all of the chains you deploy your token on, we suggest having a token list prebuilt somewhere on your website or GitHub repo. Once deployed, your contact address and logo won't change. This exercise is important because, in the future, you'll run into applications that require you to add your tokens, and it's much faster to do it once in a list.

Here is an example of DZUSD token list:

{
  "name": "Day Zero Token List",
  "timestamp": "2025-03-03T00:00:00.000Z",
  "version": {
    "major": 1,
    "minor": 0,
    "patch": 0
  },
  "tokens": [
    {
      "chainId": 8453,
      "address": "0xcc18b41a0f63C67F17F23388c848aeC67b583422",
      "name": "Day Zero Dollar",
      "symbol": "DZUSD",
      "decimals": 18,
      "logoURI": "https://github.com/Brale-xyz/dayzero/blob/main/DZUSD/dzusd.png",
      "extensions": {
        "website": "https://brale.xyz/events"
      },
      "tags": ["stablecoin"]
    },
    {
      "chainId": 7565164,
      "address": "GjzwgGxhxa6VVVR8iFQ3QnzH89SNXxHgfY1xhCiSv5a8",
      "name": "Day Zero Dollar",
      "symbol": "DZUSD",
      "decimals": 9,
      "logoURI": "https://github.com/Brale-xyz/dayzero/blob/main/DZUSD/dzusd.png",
      "extensions": {
        "website": "https://brale.xyz/events"
      },
      "tags": ["stablecoin"]
    }
  ]
}

We've also made this available on GitHub. You can find a list of the chain IDs on chainid.network's comprehensive directory to use for best practice. We've also compiled Brale's curated list of supported chain IDs if you find the large list overwhelming. It's also worth noting that in your token list IPFS is a popular option for your logo. We did not do that for DZUSD for the sake of this example.

Token lists should be valid JSON, and you can test by using a free JSON testing tool. JSONLint is a solid one.

Step 5 - Seed a small liquidity pool

Side 1undefined (DZUSD) logoDZUSD0xcc18b41a0f63C67F17F23388c848aeC67b583422
Side 2undefined (SBC) logoSBC0xfdcC3dd6671eaB0709A4C0f3F53De9a333d80798

Now that you've got your smart contracts, fund your external wallet with $50 or so of each stablecoin. This is important because you want to have a balanced pool. This ensures that your first swaps will be as close to $1 to $1 as possible.

To use Uniswap, create a pool and add your smart contracts. It looks like this when using DZUSD and SBC on Base:

Uniswap liquidity pool UI of DZUSD and SBC on Base

We recommend using a custom range when creating the pool and starting with a bottom and top price that is very close together. With small pools, there will always be some small deviation, and that's okay. In this example, we are setting up the pool with $100 SBC and $100 DZUSD, respectfully.

Uniswap liquidity pool UI of DZUSD and SBC on Base setting price range and deposit amounts

Click Review, sign the transaction, and you've got a pool set up. This enables the asset to be used with the other asset it's paired with through popular wallets.

Here is what this pool looks like on the block explorer and in the Uniswap UI.

Uniswap live liquidity pool UI of DZUSD and SBC on Base

Why use SBC with your asset? The reason for this is twofold. The first is that SBC is already multichain, and there is a great deal of benefits. The second is that SBC is another bespoke project, and using it will help with your additional education in future learnings and guides. Because it is a custom stablecoin program, there is a lot to learn from using it. You can repeat this with USDC or any other asset you prefer. You can close the pools whenever you want when your testing is completed.

After those steps, you've created the stablecoin, set the logo for wallets to pick up, made your token list available for future testing, and created enough test liquidity to use your stablecoin in DeFi or in self-custody wallets.

Start testing

Log into your Brale dashboard and transfer your new stablecoin to your external wallet. Then, you can begin using it. You can even try the swap function with USDC or other native gas tokens. You should see the asset working correctly in your wallet, supporting a swap, and even some activity.

We suggest just doing the good ol' dollar test. Move $1 worth of your new stablecoin to your wallet and test it. If using MetaMask, open the Swap tab and test your asset. Because the pool is so small, things will never be perfectly 1:1 in DeFi, but that's ok. You're just testing. We'll talk about how to solve this in future blogs. Once you select Swap, add your asset and decide how much to buy. Go ahead and test it with different assets.

MetaMask UI of USDC to DZUSD swapMetaMask UI of USDC to DZUSD swap
MetaMask UI of SBC to DZUSD swapMetaMask UI of SBC to DZUSD swap
MetaMask UI of DZUSD swap confirmationMetaMask UI of DZUSD swap confirmation

Congratulations. You've got a usable stablecoin 🙂 You're well on your way.

DZUSD is a demonstration stablecoin. It was created at Brale's Day Zero event, a virtual conference series for folks building with stablecoins. It's free to attend, and if this entry was helpful, there is a standing breakout helping people deploy and test their first stablecoins. You can sign up for free here if that would be useful to your project.

Get started

Create your own stablecoin

Contributors

  • Ben Milne | Brale
    Ben Milne
    CEO
  • Chase Merlin | Brale
    Chase Merlin
    Sr Product Manager

Related posts