Skip to main content

Deploy Your Smart Contracts

To deploy your smart contracts to a live network, there are a few things you need to adjust.

1. Configure your networkโ€‹

Scaffold-ETH 2 comes with a selection of predefined networks. To add your custom network:

Go to packages/hardhat/hardhat.config.ts and add your network to the networks object.

packages/hardhat/hardhat.config.ts
networks: {
// ... other networks
base: {
url: "https://mainnet.base.org",
accounts: [deployerPrivateKey]
},
}

Here are the Alchemy docs for information on specific networks.

You can also add your custom network by following the recipe here.

2. Generate a new account or add one to deploy the contract(s) from.โ€‹

The deployer account is the account that will deploy your contracts. Additionally, the deployer account will be used to execute any function calls that are part of your deployment script.

You can generate a random account / private key by running:

yarn generate

It will automatically add the encrypted private key (DEPLOYER_PRIVATE_KEY_ENCRYPTED) in your .env file.

You will be prompted to enter a password which will be used to encrypt your private key. Make sure to remember this password as you'll need it for future deployments and account queries.

Info

We are only storing the plain private key in memory, it's never stored in disk files for security reasons. Checkout the code here.

If you prefer to import your private key, run:

yarn account:import

You will get prompted to paste your private key and set the encryption password. It will store your encrypted private key in your .env file.

You can check the configured (generated or imported) account and balances with:

yarn account

You will need to enter your password to decrypt the private key and view the account information and balances.

3. Deploy your smart contract(s)โ€‹

By default yarn deploy will deploy all the contracts from your packages/hardhat/contracts folder to the local network. You can change defaultNetwork in:

packages/hardhat/hardhat.config.ts

3.1 Deploy specific contractsโ€‹

To deploy specific contracts instead of all of them, you can follow these steps:

  1. Add tags to the deploy scripts located in packages/hardhat/deploy. For example 01_deploy_my_contract.ts:
deployMyContract.tags = ["tagExample"];
  1. Run yarn deploy --tags tagExample to run all the scripts with the "tagExample" tag.

3.2 Deploy to specific networksโ€‹

Run the command below to deploy the smart contracts to the target network. Make sure to have your encryption password and some funds in your deployer account to pay for the transaction.

yarn deploy --network network_name

You can also specify a tag:

yarn deploy --network sepolia --tags tagExample

4. Verify your smart contractโ€‹

You can verify your smart contract on Etherscan by running:

yarn verify --network network_name

eg: yarn verify --network sepolia

This command works in both Hardhat and Foundry, verifying all the deployed contracts. However, the verification method differs depending on the Solidity framework you're using...

Hardhat uses etherscan-verify from hardhat-deploy.

Additionally, in Hardhat, there's an alternative method for contract verification. You can use hardhat-verify to verify your contracts, passing in the network name, contract address and constructor arguments (if any):

yarn hardhat-verify --network network_name contract_address "Constructor arg 1"`

If the chain you're using is not supported by any of the verifying methods, you can add new supported chains to your chosen method, either etherscan-verify or hardhat-verify.

Configuration of Third-Party Services for Production-Grade Apps.โ€‹

By default, Scaffold-ETH 2 provides predefined API keys for popular services such as Alchemy and Etherscan. This allows you to begin developing and testing your applications more easily, avoiding the need to register for these services.

For production-grade applications, it's recommended to obtain your own API keys (to prevent rate limiting issues). You can configure these at:

  • ALCHEMY_API_KEY variable in packages/hardhat/.env and packages/nextjs/.env.local. You can create API keys from the Alchemy dashboard.
  • ETHERSCAN_API_KEY variable in packages/hardhat/.env using your generated API key. You can get your key here.
Hint

It's recommended to store envs for nextjs in Vercel/system env config for live apps and use .env.local for local testing.