Create Your First Smart Contract In Ethereum With Ganache And Remix IDE

Ethereum

Ethereum is most popular blockchain platform today. Let's see how to create, deploy and test smart contracts. In this, we will be using Ganache, Remix IDE & MyEtherWallet. We will be using use a local instance of Ethereum as a private blockchain for the sake of simplicity. Before that, let’s have a quick look at Smart Contracts.
 
What is Smart Contract ?
Ethereum

The above image explainss pretty much everything about Smart Contracts and its origin. Nick Szabo, who is a cryptography genius and legal scholar, coined the term Smart Contract back in 1994. He was trying to store and execute legal contracts with the help of cryptography. Since then there have been many implementations of Smart Contract, but nothing was widely accepted and popular like Ethereum Smart Contract.

Tools Used

Let’s understand what the above mentioned tools do exactly, and how to use them.

Ganache

Download and install Ganache from http://truffleframework.com/ganache/

Ethereum

Ganache runs a local instance of Ethereum, so we don’t need to struggle with Geth command line, along with this we get a few accounts created by default, which can be used in development and testing. Ganache has a built-in block explorer also, so we can easily track all the blocks and transactions.

Apart from this Ganache has many other useful features which you can see below, according to their website.

Ethereum

After installing, open Ganache and you will see this window.

Ethereum

 

You can see here a list of accounts along with their address, balance and other information. In the header you can see blocks, transaction information etc. Observe RPC SERVER Address here, with this address you will be interacting with this blockchain.
 
Remix IDE

Remix is an online IDE for solidity language, you can access it online at https://remix.ethereum.org/. We will use it to write and compile our smart contract code.

Ethereum
MyEtherWallet

MyEtherWallet is an online wallet & client side interface, which can interact with Ethereum blockchain & perform operations on the blockchain.

Ethereum

But here we are using private blockchain running in our local, which can’t be accessed by an online version, so we will download it from https://github.com/kvhnuke/etherwallet/releases and run it locally.

Ethereum

You can download the latest release, unzip it and open index.html.

Ethereum
 
Write Smart Contract in Solidity

A new language! No, don’t get scared, it’s very similar to the code you write in your day to day life, which a few keywords here and there. Here, I am not using any complex code but you can always go and check http://solidity.readthedocs.io for a complete reference.

Solidity is a high level, contract oriented language which runs on Ethereum Virtual Machine (EVM). Let’s understand the code, We are going to create a calculator here, which is capable of performing addition and subtraction operations.

The first line in any solidity program, tells the compiler the version of language it is targeting. In the second line, as you know this is a contract oriented language, contract keyword is used to define a contract. You may relate it with class in OOPS to understand.

Contracts will contain fields & function along with access modifier applied to them like any other language. In this code, I have used int in all the places but solidity does have a rich type of system which has many contract specific types as well like address and balance etc.

  1. pragma solidity ^0.4.24;  
  2. contract Calculator {  
  3.     int private lastValue = 0;  
  4.     function Add(int a, int b) public returns (int) {  
  5.         lastValue = a + b;  
  6.         return lastValue;  
  7.     }  
  8.     function Subtract(int a, int b) public returns (int) {  
  9.         lastValue = a - b;  
  10.         return lastValue;  
  11.     }  
  12.     function LastOperation() public constant returns (int) {  
  13.         return lastValue;  
  14.     }  
  15. }   

In the above code you can see there is one field lastValue, which stores the last operation performed. Here LastOperation has a constant keyword, but add and subtract do not. because LastOperation doesn’t change the state whether or not add and subtract are mutating it.

Open Remix IDE and replace existing code with the above one. Then click Start to compile and if it compiles successfully, you can see your contract name (Calculator here) in the green box, below the details button. On click of the details button, you can see all the data about the compiled contract, including generated byte code, which we will be using further.

Ethereum

Your code is compiled successfully, now let’s deploy and test it.

Deploy Smart Contract to Private Ethereum Blockcahin & Test It

We will deploy it to blockchain running in Ganache with the help of MyEtherWallet. Open Ganache and grab RPC SERVER URL.

Ethereum

Now, open index.html of MyEhterWallet, and connect to this blockchain. To do this click on dropdown as shown in the image and select Add Custom Network/Node

Ethereum

Give some name to Node and enter URL & post what you copied from Ganache, and hit Save & Use Cutom Node.

Ethereum

You will see the success message on the bottom.

Ethereum

Now go to contacts in the menu and click deploy contract, here you need Byte Code of your smart contract to deploy, which we will get from details of the contract in Remix IDE.

Ethereum

Go back to Remix IDE, click on details & copy BYTECODE.

Ethereum

We need to pick contents of an object, copy it and paste in Byte Code in Deploy Contract in MyEtherWallet.

  1. {  
  2.     "linkReferences": {},  
  3.     "object""60806040526000805534801561001457600080fd5b5061017e806100246000396000f300608060405260043610610057576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633e21f3961461005c578063830fb67c146100a7578063d3507d71146100f2575b600080fd5b34801561006857600080fd5b50610091600480360381019080803590602001909291908035906020019092919050505061011d565b6040518082815260200191505060405180910390f35b3480156100b357600080fd5b506100dc6004803603810190808035906020019092919080359060200190929190505050610133565b6040518082815260200191505060405180910390f35b3480156100fe57600080fd5b50610107610149565b6040518082815260200191505060405180910390f35b6000818303600081905550600054905092915050565b6000818301600081905550600054905092915050565b600080549050905600a165627a7a72305820ffa43bcf8db91f746657d0616346eaf4dcffe1e83be6d2ee91f6390f141bf47d0029",  
  4.     "opcodes""PUSstrong 0x80 PUSstrong 0x40 MSTORE PUSstrong 0x0 DUP1 SSTORE CALLVALUE DUP1 ISZERO PUSstrong 0x14 JUMPI PUSstrong 0x0 DUP1 REVERT JUMPDEST POP PUSstrong 0x17E DUP1 PUSstrong 0x24 PUSstrong 0x0 CODECOPY PUSstrong 0x0 RETURN STOP PUSstrong 0x80 PUSstrong 0x40 MSTORE PUSstrong 0x4 CALLDATASIZE LT PUSstrong 0x57 JUMPI PUSstrong 0x0 CALLDATALOAD PUSstrong9 0x100000000000000000000000000000000000000000000000000000000 SWAP1 DIV PUSH4 0xFFFFFFFF AND DUP1 PUSH4 0x3E21F396 EQ PUSstrong 0x5C JUMPI DUP1 PUSH4 0x830FB67C EQ PUSstrong 0xA7 JUMPI DUP1 PUSH4 0xD3507D71 EQ PUSstrong 0xF2 JUMPI JUMPDEST PUSstrong 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSstrong 0x68 JUMPI PUSstrong 0x0 DUP1 REVERT JUMPDEST POP PUSstrong 0x91 PUSstrong 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSstrong 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSstrong 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSstrong 0x11D JUMP JUMPDEST PUSstrong 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSstrong 0x20 ADD SWAP2 POP POP PUSstrong 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSstrong 0xB3 JUMPI PUSstrong 0x0 DUP1 REVERT JUMPDEST POP PUSstrong 0xDC PUSstrong 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSstrong 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSstrong 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSstrong 0x133 JUMP JUMPDEST PUSstrong 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSstrong 0x20 ADD SWAP2 POP POP PUSstrong 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSstrong 0xFE JUMPI PUSstrong 0x0 DUP1 REVERT JUMPDEST POP PUSstrong 0x107 PUSstrong 0x149 JUMP JUMPDEST PUSstrong 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSstrong 0x20 ADD SWAP2 POP POP PUSstrong 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSstrong 0x0 DUP2 DUP4 SUB PUSstrong 0x0 DUP2 SWAP1 SSTORE POP PUSstrong 0x0 SLOAD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSstrong 0x0 DUP2 DUP4 ADD PUSstrong 0x0 DUP2 SWAP1 SSTORE POP PUSstrong 0x0 SLOAD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSstrong 0x0 DUP1 SLOAD SWAP1 POP SWAP1 JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 SELFDESTRUCT LOG4 EXTCODESIZE 0xcf DUP14 0xb9 0x1f PUSstrong1 0x6657D0616346EAF4DCFFE1E83BE6D2EE91F6390F14 SHL DELEGATECALL PUSstrong0 0x2900000000000000000000000000000000000000000000000000000000 ",  
  5.     "sourceMap""26:391:0:-;;;77:1;53:25;;26:391;8:9:-1;5:2;;;30:1;27;20:12;5:2;26:391:0;;;;;;;"  
  6. }  

Right after pasting Byte Code, Gas Limit should appear. To access your wallet, MyEtherWallet needs a private key. Wallet? Yes, let me explain wallet to you in the next step.

Ethereum

As explained earlier Ganache will have a few accounts created by default. The place where the information about the account is stored is referred to as a wallet. We will use one of those accounts.

Ethereum

Open Ganache and copy a key from one of the wallets and use this in the above step, and click Unblock.

Ethereum
 
After adding byte code and giving wallet access, hit Sign Transaction button, this makes transaction verifiable. Now Deploy Contract button will appear, hit it and confirm transaction to deploy your smart contract to the blockchain.

Ethereum

 

Let’s verify in Ganache whether it’s deployed successfully. Go to transactions in Ganache, here you can see one Contract Creation transaction is created in a block. Congrats! Your smart contract is deployed successfully.

Ethereum

 

Let’s test it now, click to open the above shown transaction and copy CREATED CONTRACT ADDRESS. Goto MyEtherWallet & under Contracts, click Interact with Contract, paste the Contract Address here.

Ethereum

 

For ABI interface you need to go to Remix IDE then details, get ABI form here and paste. ABI interface contains information about functions available in smart contract.
 

Ethereum

 

  1. [  
  2.     {  
  3.         "constant"false,  
  4.         "inputs": [  
  5.             {  
  6.                 "name""a",  
  7.                 "type""int256"  
  8.             },  
  9.             {  
  10.                 "name""b",  
  11.                 "type""int256"  
  12.             }  
  13.         ],  
  14.         "name""Subtract",  
  15.         "outputs": [  
  16.             {  
  17.                 "name""",  
  18.                 "type""int256"  
  19.             }  
  20.         ],  
  21.         "payable"false,  
  22.         "stateMutability""nonpayable",  
  23.         "type""function"  
  24.     },  
  25.     {  
  26.         "constant"false,  
  27.         "inputs": [  
  28.             {  
  29.                 "name""a",  
  30.                 "type""int256"  
  31.             },  
  32.             {  
  33.                 "name""b",  
  34.                 "type""int256"  
  35.             }  
  36.         ],  
  37.         "name""Add",  
  38.         "outputs": [  
  39.             {  
  40.                 "name""",  
  41.                 "type""int256"  
  42.             }  
  43.         ],  
  44.         "payable"false,  
  45.         "stateMutability""nonpayable",  
  46.         "type""function"  
  47.     },  
  48.     {  
  49.         "constant"true,  
  50.         "inputs": [],  
  51.         "name""LastOperation",  
  52.         "outputs": [  
  53.             {  
  54.                 "name""",  
  55.                 "type""int256"  
  56.             }  
  57.         ],  
  58.         "payable"false,  
  59.         "stateMutability""view",  
  60.         "type""function"  
  61.     }  
  62. ]   

After clicking Access, you can see all available functions in your smart contract.

Ethereum

 

Let’s call them and test.

Ethereum

 

While calling Add or Subtract, it will show a warning before making a transaction, along with gas limit.

Ethereum

 

But in LastOperation no warning will appear because it adds no data to the blockchain.

Ethereum

 

You can see all those transactions in Ganache, along with gas used.

Ethereum
 
I hope it helps.