Tools You Will Use (all free, all browser-based)
ToolPurposeLink
MetaMaskBrowser wallet. Stores tokens, signs transactions.metamask.io
Sepolia FaucetDispenses free test ETH for transaction feesGoogle Cloud Faucet
OpenZeppelin WizardGenerates token code from checkboxeswizard.openzeppelin.com
Remix IDECompiles and deploys your code to the blockchainremix.ethereum.org
Sepolia EtherscanBlockchain explorer. Proves your token exists.sepolia.etherscan.io
What does "deploy a token" actually mean?

A token is a program (called a "smart contract") running on the Ethereum blockchain. It tracks who owns how many tokens and handles transfers. "Deploying" means uploading that program to the blockchain, where it becomes permanent and public. Anyone can then see your token on Etherscan, and the rules you set (total supply, who can mint more) are locked in.

The Sepolia testnet is a practice version of Ethereum. It works identically to the real thing, but the currency has no value. You can deploy, test, and redeploy as many times as you want at zero cost.

Phase 1 Install MetaMask ~10 min

A crypto wallet is your identity on the blockchain. Without it, you cannot sign transactions or prove you own anything. MetaMask creates a cryptographic key pair that becomes your on-chain identity: a public address that anyone can see and send tokens to, and a private key that only you control and that authorizes every transaction you make.

Step 1: Install the Extension

Search for "MetaMask" or go to metamask.io/download. Click "Add to Chrome" (or your browser).

Google search results showing MetaMask as the first result at metamask.io
Search for MetaMask. Use the official site (metamask.io), not third-party downloads.
MetaMask download page with Add to Chrome button
Click "Add to Chrome" in the Chrome Web Store.

After installation, click the puzzle piece icon in your toolbar to find MetaMask. Pin it to keep the fox visible.

Chrome extensions menu showing MetaMask with pin option
MetaMask in your extensions. Pin the fox to your toolbar for easy access.

Click the fox icon. MetaMask opens and asks how to set up your wallet. You'll see options for Google, Apple, or Secret Recovery Phrase.

MetaMask welcome screen with Continue with Google, Continue with Apple, and Use Secret Recovery Phrase buttons
The MetaMask welcome screen.

Click "Use Secret Recovery Phrase" (the black button at the bottom), not Google or Apple. This creates a standalone wallet that all crypto tools expect. The social login options work differently and may cause issues later.

Step 2: Create Your Wallet

Click "Create a new wallet."

MetaMask screen with Create a new wallet and I have an existing wallet buttons
Click "Create a new wallet."

Create a password (at least 8 characters). Write it down. MetaMask cannot recover it if you forget.

MetaMask password creation form with password fields and checkbox confirming MetaMask cannot reset it
Create a password and check the acknowledgment box. Click "Create password."

MetaMask now shows your Secret Recovery Phrase: 12 random words. Click "tap to reveal" to see them. Write these down on paper. This phrase is the master key to your wallet. For this class exercise the stakes are low (test tokens have no value), but in real crypto, losing this phrase means losing everything in the wallet permanently.

MetaMask Secret Recovery Phrase screen with 12 words hidden behind a reveal button
Your 12-word recovery phrase. Write it down. Every student's phrase is unique.
Save your Secret Recovery Phrase screen with Tap to reveal button and security warning
Before revealing: MetaMask warns you to make sure no one is watching your screen.

Click "Continue." MetaMask asks you to confirm the phrase by filling in the missing words in the correct order.

MetaMask confirmation screen with blanks to fill in recovery phrase words
Click the words in the correct order to prove you saved your phrase.

Decline data sharing if asked. Click "Open wallet."

Your wallet is ready screen with Open wallet button
"Your wallet is ready!" Click "Open wallet."
MetaMask opens as a sidebar in the browser showing 0 ETH balance
MetaMask opens as a sidebar. Tip: click the hamburger menu and "Open Full Screen" for a better view.
MetaMask full-screen dashboard showing Fund your wallet prompt, Buy, Swap, Send, Receive buttons, and All popular networks dropdown at bottom
MetaMask in full-screen mode. Ignore the "Fund your wallet" prompt (that is for buying real ETH). Look for the network selector at the bottom.
What is a "wallet" in crypto?

A crypto wallet does not hold money the way a physical wallet does. It holds keys: a public key (your wallet address, which you share freely) and a private key (derived from your recovery phrase, which you never share). The blockchain itself holds your balances. The wallet is the tool that proves you are the owner and lets you authorize transactions.

Step 3: Switch to Sepolia Test Network

By default MetaMask shows the real Ethereum network where transactions cost real money. You need to switch to Sepolia, the free practice network.

MetaMask dashboard close-up showing Account 1, 0 ETH balance, and All popular networks dropdown with filter and menu icons
The network selector is the "All popular networks" dropdown near the bottom of the Tokens tab.

Look for the network dropdown in MetaMask. You'll see a list of "Popular" networks. Sepolia is not there.

MetaMask Popular networks list showing Ethereum, Linea, Base, Arbitrum but no Sepolia
The Popular networks list. Sepolia is not here.

Click the "Custom" tab at the top of the network selector.

Custom network tab with Add custom network button
Click Custom, then "+ Add custom network."

Click "+ Add custom network." In the form, type the Chain ID: 11155111. MetaMask recognizes this as Sepolia and shows: "This Chain ID is currently used by the Sepolia network." Click the "edit the original network" link.

Add network form with Chain ID 11155111 entered, showing message that this ID is used by Sepolia with edit the original network link
Type 11155111 as the Chain ID. MetaMask recognizes Sepolia. Click "edit the original network."

All fields auto-populate with Sepolia's configuration. Click Save.

Edit network form with Sepolia details auto-filled: name Sepolia, RPC Infura, Chain ID 11155111, symbol SepoliaETH, explorer sepolia.etherscan.io
Everything fills in automatically. Click Save.

Now select Sepolia from the network list. MetaMask shows "0 SepoliaETH."

MetaMask main screen showing Sepolia network selected with 0 SepoliaETH balance
MetaMask is now on the Sepolia test network.
Troubleshooting: Sepolia not showing in MetaMask network list

Go to the network selector, click Custom, then "+ Add custom network." Enter Chain ID 11155111. MetaMask recognizes Sepolia and shows "edit the original network." Click that, then Save. Sepolia appears in your network list.

Step 4: Copy Your Wallet Address

Under "Account 1," you'll see small colored circles and a copy icon. Click them to reveal your addresses across networks.

MetaMask account section showing colored network icons with an expanded popup displaying the Ethereum address 0x316cE...7Aa73 with a copy button
Your Ethereum address works on Sepolia too (all Ethereum-compatible networks share the same address). Click copy.

Your address looks like 0x316cEa4e...7Aa73. Copy the Ethereum address and save it somewhere accessible. You will paste it several times.

Your wallet address is public, like an email address. Share it freely. The things you never share are your password and your 12-word recovery phrase.

Checkpoint: MetaMask installed, Sepolia network selected, wallet address copied and saved.

Phase 2 Get Free Test ETH ~5 min

Every blockchain transaction costs a small fee called "gas" to compensate the network for processing it. Even deploying code costs gas. On Ethereum mainnet, gas fees are paid in real ETH. The Sepolia testnet gives you free ETH so you can experiment, make mistakes, and redeploy as many times as you need without spending anything.

Step 5: Request Test ETH from a Faucet

Try these in order. You only need one to work:

  1. Google Cloud Faucet (easiest): Go to cloud.google.com/application/web3/faucet/ethereum/sepolia. Log in with Google. Paste your wallet address. Click "Receive." ~0.05 ETH arrives in about 30 seconds.
  2. Chainlink Faucet: faucets.chain.link/sepolia. Connect MetaMask, complete the captcha. 0.1 ETH.
  3. QuickNode Faucet: faucet.quicknode.com/ethereum/sepolia. Paste address, click drip.

If none work (faucets occasionally go down), search "Sepolia faucet" and try whatever comes up. You need at least 0.01 ETH.

Google Cloud Web3 faucet page with wallet address pasted and Receive button ready to click
The Google Cloud faucet. Paste your wallet address, click Receive.
MetaMask showing 0.0500 SepoliaETH balance after receiving test ETH from faucet
MetaMask now shows a SepoliaETH balance. You are funded.

Checkpoint: MetaMask shows a SepoliaETH balance greater than 0. Any amount above 0.01 is enough.

Phase 3 Generate Your Token Code ~10 min

Smart contracts are programs that run on the blockchain. Your token IS a smart contract -- a set of rules governing who can hold it, how many exist, and how they move between wallets. You do not write this code yourself. OpenZeppelin Wizard generates production-quality Solidity code from checkboxes. OpenZeppelin is the industry-standard library used by real companies. You configure what your token does; the Wizard writes the smart contract.

Step 6: Configure Your Token

Go to wizard.openzeppelin.com. Click the ERC20 tab at the top.

Fill in:

  • Name: Your token's display name (appears on Etherscan and in wallets)
  • Symbol: 3-5 uppercase letters, like a stock ticker
  • Premint: Initial token supply. Use a round number like 1000000
OpenZeppelin Wizard interface with ERC20 selected, showing token name, symbol, and premint fields on the left, and generated Solidity code on the right
The OpenZeppelin Wizard. Your selections on the left generate real Solidity code on the right.

Step 7: Choose Features

Under "Features," check:

  • Mintable: Lets the token owner create more tokens later
  • Burnable: Lets holders permanently destroy tokens

Leave everything else unchecked. The code on the right updates live as you click.

OpenZeppelin Wizard with Mintable and Burnable checked, showing updated Solidity code with mint and burn functions
Mintable and Burnable checked. The generated code includes these features.
Can I customize beyond these checkboxes?

Yes. The Wizard produces standard, audited code, but you can edit it freely in Remix (the next tool). If your token economics require custom logic (vesting schedules, dynamic fees, governance mechanisms), you can modify the Solidity directly or ask an LLM to help. Example prompt:

"I want my ERC-20 token to charge a 1% fee on transfers that goes to a treasury address. Here is my current code from OpenZeppelin Wizard. How do I modify it?"

For this course, the standard Wizard features are sufficient. The intellectual work is in your white paper's argument for why you chose these parameters.

Step 8: Send Code to Remix

Click "Open in Remix" at the top of the code panel. A new tab opens with Remix IDE and your code loaded.

Remix IDE code editor showing the generated Solidity smart contract with token name and import statements visible
Remix IDE with your token code. You do not need to understand the code.

Checkpoint: Remix is open with your .sol file. You have not changed anything.

Phase 4 Compile and Deploy ~15 min

Compiling checks your code for errors and converts it into something the blockchain can execute. Deploying uploads that compiled code to Sepolia, where it becomes permanent and public. Once deployed, the rules you set are locked in -- the supply cap, the mint permissions, everything. On a testnet this does not matter (you can redeploy freely), but on mainnet it is irreversible. This is where your token goes from an idea to a real on-chain asset.

Step 9: Compile

In Remix's left sidebar, click the Solidity Compiler icon (an "S" shape). Click the blue "Compile contract..." button.

Remix Solidity Compiler panel showing the blue Compile contract button
Click the blue "Compile contract" button (not "Compile and Run Script").

A green checkmark appears, confirming success.

Remix compiler panel showing a green checkmark next to the compiler icon and the token name in the CONTRACT dropdown
Green checkmark: compilation succeeded. Your token name appears in the CONTRACT dropdown.
Troubleshooting: Compilation errors (red text in Remix)

The most common cause is the Solidity compiler version being too old. Change the version dropdown to 0.8.20 or higher. Click Compile again.

Step 10: Connect MetaMask to Remix

Click the Deploy & Run Transactions icon in the sidebar (Ethereum diamond shape). In the Environment dropdown, select "Browser Extension."

Remix Environment dropdown showing options including Browser Extension, Remix VM, WalletConnect, and others
Select "Browser Extension" from the Environment dropdown.

A second dropdown appears. Select "MetaMask."

Second dropdown showing MetaMask as a provider option
Select MetaMask from the provider list.

MetaMask pops up asking to connect to remix.ethereum.org. Click Connect.

MetaMask connection popup asking to connect to remix.ethereum.org
Approve the connection.

Verify the Deploy panel shows your wallet address, your SepoliaETH balance, and Sepolia (11155111) network.

If it says "Ethereum Mainnet" instead of Sepolia, stop. Switch MetaMask to Sepolia first. Deploying on mainnet costs real money.

Troubleshooting: MetaMask popup does not appear when connecting to Remix

Click the fox icon in your toolbar to open MetaMask manually. Make sure it is unlocked. If you have other wallet extensions (Coinbase Wallet, Phantom), disable them temporarily. Then reselect "Browser Extension" and "MetaMask" in Remix.

Step 11: Deploy Your Token

In the Deploy panel, paste your wallet address into both fields:

  • recipient: who receives the initial tokens (you)
  • initialOwner: who can mint more later (also you)
Remix Deploy panel showing Browser Extension with MetaMask connected, Account with 0.050 ETH on Sepolia network, and both recipient and initialOwner fields filled with the wallet address
Both fields filled with your wallet address. Everything else auto-populated. Ready to deploy.
Close-up of recipient and initialOwner address fields both filled with the same Ethereum wallet address starting with 0x316c
Close-up: both recipient and initialOwner contain your wallet address. This makes you the token owner who receives the initial supply.

Click the blue Deploy button. MetaMask pops up showing the gas fee. Click Confirm.

MetaMask transaction confirmation popup showing a small gas fee in SepoliaETH with a Confirm button
Confirm the deployment transaction. The gas fee is paid in free SepoliaETH.

Wait 15-30 seconds. A green checkmark appears in the Remix terminal.

Troubleshooting: "Gas estimation errored" when deploying

Both the recipient and initialOwner fields must contain valid Ethereum addresses starting with 0x. Confirm your SepoliaETH balance is above 0.01. If the error persists, check that the Solidity compiler version is 0.8.20 or higher.

Troubleshooting: Transaction stuck for more than 2 minutes

Wait up to 5 minutes. If still pending: MetaMask, then Settings, then Advanced, then "Clear activity tab data." Redeploy. On a testnet, redeploying is free.

Step 12: Copy Your Contract Address

Scroll down to "Deployed Contracts." Your token appears with an address. Click the copy icon.

Remix Deployed Contracts section showing SamuelTestToken with address 0x36D...0836F on Sepolia, with a Copy address tooltip visible
Your token is deployed. Copy the contract address. This is the permanent address of your token on the blockchain.

Save this address. You will include it in your white paper's Deployment Documentation section.

Checkpoint: Contract deployed. Contract address copied. The hard part is done.

Phase 5 Verify It Worked ~10 min

Etherscan is a public record of everything on the blockchain. When you look up your contract, you are seeing the same data that every other person on the network sees -- your token's name, supply, creator address, and every transaction it has ever been part of. This transparency is what makes blockchain useful for the problems you studied in this course: when the ledger is public and immutable, trust becomes verifiable instead of assumed.

Step 13: View Your Token on Etherscan

Go to sepolia.etherscan.io. Paste your contract address in the search bar.

Sepolia Etherscan page showing the deployed token contract with creator address, transaction hash, and token tracker information
Your token on Etherscan. This page proves your token exists on the blockchain. Screenshot this for your white paper.

For your white paper: Save a screenshot of this page and copy the Etherscan URL. Both go in your Deployment Documentation section.

Step 14: See Your Tokens in MetaMask

MetaMask does not automatically show new tokens. You need to import yours. In MetaMask, click the three dots (⋮) next to the filter icon in the Tokens tab, then "Import tokens."

MetaMask three-dot menu expanded showing Import tokens and Refresh list options
Click the three dots next to the filter icon, then select "Import tokens."
MetaMask three-dot menu expanded showing Import tokens option
Click the three dots, then "Import tokens."

Paste your contract address (not your wallet address). MetaMask auto-fills the symbol and decimals.

MetaMask Import tokens form with contract address pasted and token symbol auto-detected
Paste your contract address. MetaMask recognizes your token.

Click Import. Your tokens appear.

MetaMask main screen showing SepoliaETH balance of 0.0481 and STT token balance of 1.00M
Your tokens in MetaMask. You now own 1,000,000 of the token you created.
Troubleshooting: Tokens not visible in MetaMask after deployment

MetaMask does not auto-detect new tokens. Click the three dots in the Tokens tab, then "Import tokens," then paste your contract address (not your wallet address).

Checkpoint: Token deployed on Sepolia, visible on Etherscan, tracked in MetaMask. You have a contract address, an Etherscan link, and screenshots for your white paper.

Help General Troubleshooting

I need to start over

Go back to OpenZeppelin Wizard, generate new code, open in Remix, recompile, redeploy. Everything on the testnet is free. Deploy as many times as you need.

Something else went wrong

Use this prompt with your preferred LLM:

"I am a student deploying an ERC-20 token on the Sepolia testnet using MetaMask, OpenZeppelin Wizard (Solidity ^0.8.20), and Remix IDE. I am stuck at [describe the step]. The error says [paste exact error]. I already tried [list what you did]. Can you explain what is wrong in simple terms?"

Optional Deploy on Ethereum Mainnet

You just built a real cryptocurrency. On Sepolia it is practice. On mainnet it is permanent, public, and verifiable by anyone in the world.

Deploying your token on Ethereum mainnet means it gets a real Etherscan page. Other people can hold it, trade it, and interact with it. It exists on the same network as ETH, USDC, and every other production token.

A live deployed token in your portfolio demonstrates that you can go from concept to execution -- the same skill set that fintech employers and VC firms look for. This is one of the most concrete things you can put in a pitch deck or a job application: not a slide about blockchain, but a real contract on a real network with a real address anyone can verify.

This is optional and exceeds the assignment requirements. But if you built something you believe in, deploying it for real is worth considering.

How to do it

The process is identical to what you just did, with three changes:

  1. Switch MetaMask to "Ethereum Mainnet" instead of Sepolia
  2. Use real ETH (buy from Coinbase, Kraken, or another exchange; send $10-$20 to your MetaMask)
  3. Verify on etherscan.io instead of sepolia.etherscan.io

This costs real money. Mainnet deployment costs $1-$50+ in ETH depending on network congestion. Check gas prices at etherscan.io/gastracker: if "Standard" is above 20 gwei, wait for a cheaper period (evenings and weekends are usually lower).

Triple-check everything before deploying. The transaction is irreversible and the contract is permanent.