Getting Started in Smart Contract Development with Solidity

This guide is prepared by @BunHouth.

Solidity is an object-oriented, high-level language for implementing smart contracts. Smart contracts are programs which govern the behaviour of accounts within the Ethereum state. Solidity is a curly-bracket language. It is influenced by C++, Python and JavaScript, and is designed to target the Ethereum Virtual Machine (EVM).

web3.js is a collection of libraries that allow you to interact with a local or remote ethereum node using HTTP, IPC or WebSocket.

Setup Development

Prerequisites

  • Operating system: OSX or Linux(Ubuntu, Cenos, ...etc)

  • Software: node js(npm, yarn) or python

Install node js

Ubuntu

 curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
 echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
 sudo apt-get update
 sudo apt-get install nodejs
 sudo apt install yarn

OSX

brew install node
brew install yarn

Setup smart contract project

Install Truffle

npm install -g truffle

Install Ganache Local Network

npm install -g ganache-cli

Generate smart contract

Reference generate blank project

mkdir web3together && cd web3together
truffle init

Structures:

  1. /contracts: store original codes of the smart contract. We will place our HelloWorld.sol file here.

  2. /migrations: deploy the smart contract in the “contracts” folder.

  3. /test: test codes for your smart contract, support both JavaScript and Solidity.

  4. truffle.js: configuration document.

  5. truffle-config.js: configuration of deployment.

Step 2: Create HelloWeb3Together contract. There are two ways to create a new contract: Directly place HelloWeb3Together.sol” file under “contracts” folder. In the “web3together” folder, run command:

truffle create contract Web3Together

Copy the following codes into HelloWeb3Together.sol”:

pragma solidity >=0.4.22 <0.9.0;

contract HelloWeb3Together {
    function ping() public pure returns (string memory) {
        return ("Web3Together - https://github.com/web3together/web3together");
    }

    function clock() public view returns (uint) {
        return block.timestamp;
    }
}

Step 3: Compile “HelloWeb3Together” with the following command.

truffle compile

This compiles the original code into Ethereum bytecode. If everything goes well, it will create .json file under build/contracts folder. Step 4: Deploy “HelloWeb3Together” contract.

  1. Create 2_deploy_contracts.js under migrations folders. Truffle is run following order

  2. Copy and past the following deploying content into the “2_deploy_contracts.js”.

const HelloWeb3Together = artifacts.require("./HelloWeb3Together.sol");
module.exports = (deployer) => {
  deployer.deploy(HelloWeb3Together);
}
  1. Modify truffle-config.js and add following content to network section. If you are using public chain or private chain please add many section as you want.

development: {
     host: "127.0.0.1",
     port: 8545,
     network_id: "*",
},
  1. Start Ganache Local network and run following command on other tab or new terminal

ganache-cli
  1. Deploy smart contract to local network

truffle migrate

if contract already deploy and want to redeploy please add --reset option After run truffle migrate we will see deploy log in the same terminal. 6. Additional setup for deploy contract to public chain testnet(rinkeby)

Additional dependency

yarn add @truffle/hdwallet-provider dotenv

Add following content into network sections. reference

    rinkeby: {
      provider: () => new HDWalletProvider("PrivateKeyToUnlockYourWallet", 'RPC_URL'),
      network_id: 4, //check here https://chainlist.org/
      gas: 5500000,
      confirmations: 2,
      timeoutBlocks: 200,
      skipDryRun: true,
    },

RPC Service

🎉Congrats! The “Web3Together” smart contract has been successfully deployed to Ganache.

Running Smart Contract online tool

Remix

Last updated