Deploy and test a smart contract on Gitshock Chain using Truffle

What is Truffle?

A world class development environment, testing framework and asset pipeline for blockchains using the Ethereum Virtual Machine (EVM), aiming to make life as a developer easier.


You've familiar with Gitshock's or Ethereum architecture


Install Node.js

Note: to install the latest version of npm, run npm i -g npm

Install Truffle

Warning: Avoid using the sudo command when installing Truffle, this can cause permission errors.

npm install -g truffle

You may receive a list of warnings during installation. To confirm that Truffle was installed correctly, run:

truffle version

Install Web3.js

npm install web3 -g

Create Truffle Directory

Open a new terminal tab to so we can create a truffle directory and install some further dependencies.

First, navigate to the directory within which you intend to create your truffle working directory:

cd /path/to/directory

Create and enter a new directory named truffle:
mkdir truffle
cd truffle 

Download the MetaCoin box:

truffle unbox metacoin

With that last step, you have created a Truffle project cointaining folders with contracts, deployment, testing, and configuration files.

This is the smart contract data from the metacoin.sol file:

// SPDX-License-Identifier: MIT
// Tells the Solidity compiler to compile only from v0.8.13 to v0.9.0
pragma solidity ^0.8.13;

import "./ConvertLib.sol";

// This is just a simple example of a coin-like contract.
// It is not ERC20 compatible and cannot be expected to talk to other
// coin/token contracts.

contract MetaCoin {
    mapping (address => uint) balances;

    event Transfer(address indexed _from, address indexed _to, uint256 _value);

    constructor() {
        balances[tx.origin] = 10000;

    function sendCoin(address receiver, uint amount) public returns(bool sufficient) {
        if (balances[msg.sender] < amount) return false;
        balances[msg.sender] -= amount;
        balances[receiver] += amount;
        emit Transfer(msg.sender, receiver, amount);
        return true;

    function getBalanceInEth(address addr) public view returns(uint){
        return ConvertLib.convert(getBalance(addr),2);

    function getBalance(address addr) public view returns(uint) {
        return balances[addr];

Note Notice that ConvertLib is being imported just after the pragma statement. In this project, there are actually two smart contracts that will be deployed at the end: one is Metacoin, contatining all the send and balance logic; the other is ConvertLib, a library used to convert values.

Testing the Contract

You can run Solidity and Javascript tests.

In a terminal, run the Solidity test:

truffle test ./contracts/MetaCoin.sol

You should see the following output:

Run the JavaScript test:

truffle test ./test/metacoin.js

You should see the following output:

Compiling the Contract​

Compile the smart contract using the following command:

truffle compile

Configuring the Smart Contract​

Before actually depolying the contract, you need to set up the truffle-config.js file, inserting network and compilers data.

Go to truffle-config.js and update the file with Gitshock Chain network details.

const HDWalletProvider = require('@truffle/hdwallet-provider');
const fs = require('fs');
const mnemonic = fs.readFileSync(".secret").toString().trim();

module.exports = {
  networks: {
    development: {
      host: "",     // Localhost (default: none)
      port: 8545,            // Standard Ethereum port (default: none)
      network_id: "*",       // Any network (default: none)
    gitshock: {
      provider: () => new HDWalletProvider(mnemonic, `https://rpc-testnet.gitshock.com/buitenzorg`),
      network_id: 212,
      confirmations: 2,
      timeoutBlocks: 200,
      skipDryRun: true

  // Set default mocha options here, use special reporters etc.
  mocha: {
    // timeout: 100000

  // Configure your compilers
  compilers: {
    solc: {
        version: "0.8.13",

Note Note that it requires mnemonic to be passed in for gitshock providers. This is the seed phrase (or private key) for the account you would like to deploy from. Create a new .secret file in the root directory and enter your 12-word mnemonic seed phrase to get started. To get the seed words from Metamask wallet, you can go to MetaMask settings, then from the menu, choose Security and Privacy where you will see a button that says reveal seed words.

Deploying on Gitshock Chain

Add GTFX to your wallet using Gitshock Faucet. Next, run this command in the root folder of the project directory:

truffle compile
truffle deploy --network gitshock

Note Remember your address, transaction_hash and other details provided would differ. Above is just to provide an idea of the structure. # You can find repo starter Smart Contract in here : https://github.com/gitshock-labs/smartcontract-starter

Congratulations! You have successfully deployed a Smart Contract using Truffle. Now you can interact with the contract and also check its deployment status on Gitshock Scan.

Last updated