Bird
Raised Fist0
Blockchain / Solidityprogramming~5 mins

Hardhat deployment scripts in Blockchain / Solidity - Cheat Sheet & Quick Revision

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Recall & Review
beginner
What is the main purpose of a Hardhat deployment script?
A Hardhat deployment script automates the process of deploying smart contracts to a blockchain network, making it easier and repeatable.
Click to reveal answer
beginner
In a Hardhat deployment script, what does the function hre.ethers.getContractFactory do?
It creates a contract factory object that allows you to deploy new instances of a smart contract.
Click to reveal answer
beginner
Why do we use await when deploying contracts in Hardhat scripts?
Because deploying contracts is an asynchronous operation that takes time, await ensures the script waits for deployment to finish before moving on.
Click to reveal answer
intermediate
What is the role of the main function in a Hardhat deployment script?
The main function contains the deployment logic and is executed to deploy contracts. It is usually wrapped in a try-catch block to handle errors.
Click to reveal answer
intermediate
How can you pass constructor arguments to a contract during deployment in a Hardhat script?
You pass constructor arguments as parameters to the deploy method of the contract factory, e.g., Contract.deploy(arg1, arg2).
Click to reveal answer
What does hre stand for in Hardhat deployment scripts?
AHardhat Runtime Environment
BHardhat Remote Execution
CHardhat Resource Engine
DHardhat React Extension
Which keyword is used to wait for a contract deployment to complete in a Hardhat script?
Aawait
Bdefer
Cwait
Dpause
How do you handle errors in a Hardhat deployment script?
AUsing <code>if-else</code> statements
BUsing <code>try-catch</code> blocks
CUsing <code>switch-case</code>
DNo error handling is needed
What command runs a Hardhat deployment script?
Ahardhat deploy
Bnpm start <script>
Cnpx hardhat run <script>
Dnode deploy.js
Where do you usually specify the network to deploy to in Hardhat?
AIn the deployment script
BIn the package.json file
CIn the smart contract code
DIn the Hardhat config file
Explain the steps to write a basic Hardhat deployment script for a smart contract.
Think about how you prepare, deploy, and handle errors in the script.
You got /5 concepts.
    Describe how constructor arguments are passed during contract deployment in Hardhat scripts.
    Focus on the deploy method call and its parameters.
    You got /3 concepts.

      Practice

      (1/5)
      1. What is the main purpose of a Hardhat deployment script?
      easy
      A. To test smart contracts locally
      B. To write smart contract logic
      C. To automate deploying smart contracts to the blockchain
      D. To create user interfaces for contracts

      Solution

      1. Step 1: Understand deployment scripts

        Deployment scripts are used to automate the process of putting smart contracts on the blockchain.
      2. Step 2: Differentiate from other tasks

        Writing contract logic, testing, and UI creation are separate tasks from deployment.
      3. Final Answer:

        To automate deploying smart contracts to the blockchain -> Option C
      4. Quick Check:

        Deployment script = automate deployment [OK]
      Hint: Deployment scripts automate contract deployment fast [OK]
      Common Mistakes:
      • Confusing deployment with contract coding
      • Thinking deployment scripts test contracts
      • Assuming deployment scripts build UI
      2. Which of the following is the correct way to get a contract factory in a Hardhat deployment script?
      easy
      A. const Contract = await ethers.getContractFactory('MyContract');
      B. const Contract = ethers.getContract('MyContract');
      C. const Contract = await ethers.deployContract('MyContract');
      D. const Contract = ethers.createContractFactory('MyContract');

      Solution

      1. Step 1: Recall ethers.js method

        The correct method to prepare a contract for deployment is ethers.getContractFactory with await.
      2. Step 2: Check syntax correctness

        Options B, C, and D use incorrect method names or miss await keyword.
      3. Final Answer:

        const Contract = await ethers.getContractFactory('MyContract'); -> Option A
      4. Quick Check:

        Use getContractFactory with await [OK]
      Hint: Use await ethers.getContractFactory('Name') to prepare contract [OK]
      Common Mistakes:
      • Omitting await before getContractFactory
      • Using wrong method names like getContract or deployContract
      • Confusing contract factory with contract instance
      3. Consider this Hardhat deployment script snippet:
      const Token = await ethers.getContractFactory('Token');
      const token = await Token.deploy();
      await token.deployed();
      
      const Sale = await ethers.getContractFactory('Sale');
      const sale = await Sale.deploy(token.address);
      await sale.deployed();
      
      console.log(sale.address);

      What will be printed by console.log(sale.address)?
      medium
      A. The deployed address of the Token contract
      B. An error because token.address cannot be passed
      C. Undefined, because sale.address is not set
      D. The deployed address of the Sale contract

      Solution

      1. Step 1: Understand deployment sequence

        The Token contract is deployed first, then its address is passed to Sale contract deployment.
      2. Step 2: Identify sale.address value

        After deployment, sale.address holds the Sale contract's blockchain address, which is logged.
      3. Final Answer:

        The deployed address of the Sale contract -> Option D
      4. Quick Check:

        sale.address = Sale contract address [OK]
      Hint: Deployed contract instance has .address property [OK]
      Common Mistakes:
      • Confusing token.address with sale.address
      • Assuming sale.address is undefined before deployment
      • Thinking passing token.address causes error
      4. Identify the error in this Hardhat deployment script snippet:
      const Token = ethers.getContractFactory('Token');
      const token = await Token.deploy();
      await token.deployed();
      medium
      A. Missing await before ethers.getContractFactory
      B. Missing await before Token.deploy()
      C. Missing await before token.deployed()
      D. No error, the code is correct

      Solution

      1. Step 1: Check getContractFactory usage

        ethers.getContractFactory returns a promise, so it needs await.
      2. Step 2: Verify other awaits

        Token.deploy() and token.deployed() correctly use await.
      3. Final Answer:

        Missing await before ethers.getContractFactory -> Option A
      4. Quick Check:

        Always await getContractFactory [OK]
      Hint: Always await getContractFactory call [OK]
      Common Mistakes:
      • Forgetting await on getContractFactory
      • Confusing which calls need await
      • Assuming deploy() is synchronous
      5. You want to deploy two contracts, Token and Marketplace, where Marketplace needs the Token address in its constructor. Which is the correct way to write the deployment script?
      hard
      A. Deploy Marketplace first, then deploy Token passing marketplace.address
      B. Deploy Token first, then deploy Marketplace passing token.address
      C. Deploy both contracts simultaneously without passing addresses
      D. Deploy Token and Marketplace separately without constructor arguments

      Solution

      1. Step 1: Understand constructor dependency

        Marketplace requires Token's address, so Token must be deployed first to get its address.
      2. Step 2: Deploy in correct order

        Deploy Token, then deploy Marketplace passing token.address to its constructor.
      3. Step 3: Reject incorrect options

        Deploying Marketplace first or simultaneously won't provide Token's address; omitting constructor args breaks dependency.
      4. Final Answer:

        Deploy Token first, then deploy Marketplace passing token.address -> Option B
      5. Quick Check:

        Deploy dependencies first, then dependent contracts [OK]
      Hint: Deploy dependencies first, pass addresses to dependent contracts [OK]
      Common Mistakes:
      • Deploying dependent contract before dependency
      • Not passing required constructor arguments
      • Deploying contracts simultaneously ignoring dependencies