0
0
BlockchainHow-ToBeginner ยท 4 min read

How to Deploy a Smart Contract in Solidity: Step-by-Step Guide

To deploy a smart contract, first compile the Solidity code, then use a tool like Remix IDE or a JavaScript library such as ethers.js to send a deployment transaction to the blockchain. Deployment requires specifying the contract bytecode and paying gas fees with an Ethereum account.
๐Ÿ“

Syntax

Deploying a smart contract involves compiling the Solidity code and sending a deployment transaction. The basic syntax in JavaScript using ethers.js looks like this:

  • const factory = new ethers.ContractFactory(abi, bytecode, signer); creates a factory to deploy the contract.
  • const contract = await factory.deploy(...constructorArgs); sends the deployment transaction.
  • await contract.deployed(); waits for the contract to be mined and available.
javascript
const factory = new ethers.ContractFactory(abi, bytecode, signer);
const contract = await factory.deploy(...constructorArgs);
await contract.deployed();
console.log('Contract deployed at:', contract.address);
๐Ÿ’ป

Example

This example shows how to deploy a simple Solidity contract using Remix IDE and then using ethers.js in a Node.js script.

solidity and javascript
// Solidity contract (SimpleStorage.sol)
pragma solidity ^0.8.0;

contract SimpleStorage {
    uint256 public storedData;

    constructor(uint256 initVal) {
        storedData = initVal;
    }

    function set(uint256 x) public {
        storedData = x;
    }

    function get() public view returns (uint256) {
        return storedData;
    }
}

// JavaScript deployment script (deploy.js)
import { ethers } from 'ethers';
import fs from 'fs';

async function main() {
  // Connect to local Ethereum node
  const provider = new ethers.providers.JsonRpcProvider('http://localhost:8545');
  const signer = provider.getSigner();

  // Read compiled contract
  const abi = JSON.parse(fs.readFileSync('./SimpleStorage_abi.json', 'utf8'));
  const bytecode = fs.readFileSync('./SimpleStorage_bytecode.bin', 'utf8');

  // Create factory and deploy
  const factory = new ethers.ContractFactory(abi, bytecode, signer);
  const contract = await factory.deploy(123); // initial value
  await contract.deployed();

  console.log('Contract deployed at:', contract.address);
}

main().catch(console.error);
Output
Contract deployed at: 0x1234...abcd
โš ๏ธ

Common Pitfalls

  • Not waiting for deployment: Forgetting await contract.deployed() can cause errors because the contract is not yet ready.
  • Incorrect constructor arguments: Passing wrong or missing parameters to the constructor will fail deployment.
  • Insufficient gas or funds: Deployment requires gas fees paid by the deployer's account; low balance causes failure.
  • Using wrong network: Deploying on a testnet but interacting on mainnet or vice versa causes confusion.
javascript
/* Wrong way: Missing await causes contract not ready */
const contract = factory.deploy(123);
console.log(contract.address); // undefined or error

/* Right way: Await deployment */
const contract = await factory.deploy(123);
await contract.deployed();
console.log(contract.address); // valid address
๐Ÿ“Š

Quick Reference

StepDescription
Compile contractUse Solidity compiler to get ABI and bytecode
Connect to blockchainUse provider and signer (wallet)
Create ContractFactoryPass ABI, bytecode, and signer
Deploy contractCall deploy() with constructor args
Wait for deploymentUse await deployed() to confirm
Use contract addressInteract with deployed contract
โœ…

Key Takeaways

Compile your Solidity contract to get ABI and bytecode before deployment.
Use a provider and signer to connect and authorize deployment transactions.
Always await the deployment to ensure the contract is mined and ready.
Pass correct constructor arguments matching your contract's constructor.
Ensure your deployer account has enough funds to pay gas fees.