How to Create Your First Smart Contract: A Step-by-Step Guide

Blockchain

A beginner-friendly guide to understanding and writing your first smart contract on the Ethereum blockchain using Solidity.

How to Create Your First Smart Contract: A Step-by-Step Guide


Smart contracts are self-executing agreements stored on a blockchain, forming the backbone of decentralized applications (dApps). This guide will walk you through the process of creating a simple smart contract on the Ethereum blockchain using Solidity, the most popular language for writing Ethereum smart contracts.

Prerequisites

Before you begin, ensure you have the following installed:

  • Node.js and npm: For managing project dependencies.
  • Hardhat or Truffle: Development environments for Ethereum. We’ll use Hardhat for this guide.
  • MetaMask: A browser extension wallet to interact with the blockchain.

Setting Up Your Development Environment (Hardhat)

  1. Create a new project directory:

    mkdir my-smart-contract
    cd my-smart-contract
  2. Initialize a Hardhat project:

    npm init --yes
    npm install --save-dev hardhat
    npx hardhat

    Choose “Create a basic sample project”.

Writing Your First Smart Contract (Solidity)

Create a new file contracts/HelloWorld.sol and add the following Solidity code:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract HelloWorld {
    string public message;

    constructor(string memory _message) {
        message = _message;
    }

    function updateMessage(string memory _newMessage) public {
        message = _newMessage;
    }
}

This simple contract stores a message and allows it to be updated.

Compiling the Contract

Open your terminal in the project directory and run:

npx hardhat compile

This will compile your Solidity code into bytecode and ABI (Application Binary Interface).

Deploying the Contract

Modify scripts/deploy.js to deploy your HelloWorld contract.

const hre = require("hardhat");

async function main() {
  const HelloWorld = await hre.ethers.getContractFactory("HelloWorld");
  const helloWorld = await HelloWorld.deploy("Hello, Hardhat!");

  await helloWorld.deployed();

  console.log("HelloWorld deployed to:", helloWorld.address);
}

main()
  .then(() => process.exit(0))
  .catch((error) => {
    console.error(error);
    process.exit(1);
  });

To deploy to a local Hardhat network:

npx hardhat node
# In a new terminal
npx hardhat run scripts/deploy.js --network localhost

Interacting with the Contract

You can interact with your deployed contract using a script or a tool like Etherscan (for testnets).

Example interaction in a script:

const hre = require("hardhat");

async function main() {
  const helloWorldAddress = "YOUR_DEPLOYED_CONTRACT_ADDRESS"; // Replace with actual address
  const HelloWorld = await hre.ethers.getContractFactory("HelloWorld");
  const helloWorld = await HelloWorld.attach(helloWorldAddress);

  console.log("Current message:", await helloWorld.message());

  const tx = await helloWorld.updateMessage("New message from interaction!");
  await tx.wait();

  console.log("Updated message:", await helloWorld.message());
}

main()
  .then(() => process.exit(0))
  .catch((error) => {
    console.error(error);
    process.exit(1);
  });

Conclusion

You’ve successfully created, compiled, and deployed your first smart contract! This is just the beginning of your journey into decentralized application development. Smart contracts are powerful tools that enable trustless and automated agreements on the blockchain.

Smart Contract Development *Fuente: Pexels*

References: