What if deploying your smart contract was as easy as running one simple script?
Why Hardhat deployment scripts in Blockchain / Solidity? - Purpose & Use Cases
Start learning this pattern below
Jump into concepts and practice - no test required
Imagine you want to deploy your smart contract to the blockchain. You open your wallet, copy the contract bytecode, manually send transactions, and set parameters one by one. Every time you want to update or redeploy, you repeat this tedious process.
This manual deployment is slow and error-prone. You might send the wrong transaction, forget to update an address, or waste gas by deploying multiple times. It's hard to keep track of what version is deployed and to automate testing or upgrades.
Hardhat deployment scripts automate this entire process. You write simple scripts that deploy your contracts with one command. These scripts handle all the details, keep track of deployments, and let you redeploy or upgrade easily and reliably.
Send transaction with bytecode manually Set constructor parameters manually Wait for confirmation Repeat for each contract
const Contract = await ethers.getContractFactory('MyContract'); const contract = await Contract.deploy(param1, param2); await contract.deployed(); console.log('Deployed at:', contract.address);
It enables fast, repeatable, and error-free smart contract deployments that can be integrated into your development workflow.
A developer can deploy a new version of a decentralized app's smart contract with a single command, ensuring users always interact with the latest, tested code without manual errors.
Manual deployment is slow and risky.
Hardhat scripts automate and simplify deployment.
This leads to faster, safer, and more reliable blockchain development.
Practice
Solution
Step 1: Understand deployment scripts
Deployment scripts are used to automate the process of putting smart contracts on the blockchain.Step 2: Differentiate from other tasks
Writing contract logic, testing, and UI creation are separate tasks from deployment.Final Answer:
To automate deploying smart contracts to the blockchain -> Option CQuick Check:
Deployment script = automate deployment [OK]
- Confusing deployment with contract coding
- Thinking deployment scripts test contracts
- Assuming deployment scripts build UI
Solution
Step 1: Recall ethers.js method
The correct method to prepare a contract for deployment is ethers.getContractFactory with await.Step 2: Check syntax correctness
Options B, C, and D use incorrect method names or miss await keyword.Final Answer:
const Contract = await ethers.getContractFactory('MyContract'); -> Option AQuick Check:
Use getContractFactory with await [OK]
- Omitting await before getContractFactory
- Using wrong method names like getContract or deployContract
- Confusing contract factory with contract instance
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)?Solution
Step 1: Understand deployment sequence
The Token contract is deployed first, then its address is passed to Sale contract deployment.Step 2: Identify sale.address value
After deployment, sale.address holds the Sale contract's blockchain address, which is logged.Final Answer:
The deployed address of the Sale contract -> Option DQuick Check:
sale.address = Sale contract address [OK]
- Confusing token.address with sale.address
- Assuming sale.address is undefined before deployment
- Thinking passing token.address causes error
const Token = ethers.getContractFactory('Token');
const token = await Token.deploy();
await token.deployed();Solution
Step 1: Check getContractFactory usage
ethers.getContractFactory returns a promise, so it needs await.Step 2: Verify other awaits
Token.deploy() and token.deployed() correctly use await.Final Answer:
Missing await before ethers.getContractFactory -> Option AQuick Check:
Always await getContractFactory [OK]
- Forgetting await on getContractFactory
- Confusing which calls need await
- Assuming deploy() is synchronous
Token and Marketplace, where Marketplace needs the Token address in its constructor. Which is the correct way to write the deployment script?Solution
Step 1: Understand constructor dependency
Marketplace requires Token's address, so Token must be deployed first to get its address.Step 2: Deploy in correct order
Deploy Token, then deploy Marketplace passing token.address to its constructor.Step 3: Reject incorrect options
Deploying Marketplace first or simultaneously won't provide Token's address; omitting constructor args breaks dependency.Final Answer:
Deploy Token first, then deploy Marketplace passing token.address -> Option BQuick Check:
Deploy dependencies first, then dependent contracts [OK]
- Deploying dependent contract before dependency
- Not passing required constructor arguments
- Deploying contracts simultaneously ignoring dependencies
