Flattening Smart Contracts with Truffle
Use Truffle to deploy and verify smart contract
🧭 Table of contents
📰 Overview
Truffle is a blockchain development environment, which you can use to create and test smart contracts by levering an Ethereum Virtual Machine.
What you will learn
In this tutorial, you will learn how to set up Truffle and use it to build, test and deploy smart contract on both the XDC Network mainnet and XDC Apothem testnet and verify it on Block Explorer.
What you will do
Install and set up Truffle
Create a complex smart contract with dependencies (like OpenZeppelin)
Compile the smart contract
Test the smart contract
Deploy the smart contract
Flatten the smart contract
Verify the smart contract
🚀 Setting up the development environment
There are a few technical requirements before we start. Please install the following:
Node.js v8+ LTS and npm (comes with Node)
Once we have those installed, we only need one command to install Truffle:
To verify that Truffle is installed properly, type truffle version
on a terminal. You should see something like:
If you see an error instead, make sure that your npm modules are added to your path.
⚒ Starting a new Truffle Project
Lets start by setting up our folder, we are creating a project called MyCounter
, create a new MyCounter
folder by running on terminal
And running truffle init
. If truffle is correctly installed on your local environment, you should see the following message:
And your folder files will look like this:
⚒ Configuring XDC Mainnet and Apothem Testnet on Truffle
In order to get started deploying new contracts on XDC Mainnet and/or Apothem, we need to install two new dependencies that will be used in the truffle-config.js
file. These dependencies are @truffle/hdwallet-provider
and dotenv
. First choose your preferred package manager. In this example we are using yarn
but you can also use npm
.
If you never used yarn
before, you might need to install it first.
‼️You can skip this step if you already have yarn installed‼️
Initialize your package manager on your folder and install the required dependencies:
You will also need a 24-Word Mnemonic Phrase. To configure your wallet, create a new .env
file and write your mnemonic by running:
Remember to change the 24-Word Mnemonic above for your own mnemonic. The contents of your .env
file should read as follow:
🚨 Do not use the mnemonic in the example above in production or you can risk losing your assets and/or the ownership of your smart contracts! 🚨
And finally, we can configure the truffle-config.js
file for both Apothem and XinFin Networks by writting:
⚒ Adding Testnet XDC to Development Wallet
It is possible to list all XDC addresses bound to your mnemonic on truffle by accessing the truffle console:
Once the truffle console CLI opens, you can run:
And the console should log all accounts bound to your mnemonic phrase as follow:
These accounts are on the Ethereum standard format starting with 0x
, but we can simply switch 0x
for xdc
. By default, the deployment account is the first account from the list above: xdcA4e66f4Cc17752f331eaC6A20C00756156719519
.
With this account in hand, we can head to the Apothem Faucet and claim some TXDC for development purposes:
💵 Writing Smart Contract
We will be using OpenZeppelin for this guide so lets install it first:
or using npm
Now lets create simple smart contract called MyCounter.sol
in contracts
folder:
💵 Compiling and Testing
We can compile our MyCounter.sol
by running:
If everything is correctly configured and there is no errors, you should see the following message on your console:
And your folder should look like this:
Testing
Now lets create a simple test to see everything works as intended before we deploy our contract to live network. This will save us time and gas fees, so it is recommended you do as much as possible tests for your smart contracts before deploying.
Create file MyCounter.js
under test
directory:
Then run
Your output should look like this:
💵 Deploying Contract
In order to deploy our newly compiled contract artifacts to the blockchain, we need to create a deployment script into the migrations folder:
And write the following migration script to the 1_token_migration.js
file:
If the migration script have no errors, we can go ahead and run the command:
For deployment on XDC mainet, or:
For deployment on the XDC Apothem Testnet. In either case, you need to have enough funds to pay for gas fees on the address that is being used for development.
If the deployment is sucessful, the console should log the following message after migrations complete processing:
💵 Flattening Contract
If smart contract imports external files like our, we need to flatten it before verifying on Block Explorer.
For that, install truffle-flattener
.
Or using npm
Now lets flatten our contract:
Then open MyCounterFlatten.sol
and remove every line which starts with // SPDX-License-Identifier
except the first one. We do this because Block Explorer does not accepts contracts with mutliple license definition.
🔍 Veryfing Contracts on the Block Explorer
Once you have successfully deployed your smart contract to the blockchain, it might be interesting to verify you contract on XinFin Block Explorer.
First lets check the address our contract is deployed to by running:
If you have a contract already deployed, the console should log something like this:
Here we have a MyCounter
contract deployed on XDC Mainnet at the 0x53bA8Cb12EaF09E6B0b671F39ac4798A6DA7d660
. This address is in the Ethereum standard but we can simply swap the 0x
prefix for xdc
and search for our newly deployed contract on XinFin Block Explorer:
And click in the Verify And Publish
Option.
We will be redirected to the Contract verification page where we need to fill out:
Contract Name: MyCounter
Compiler: Check your
truffle-config.js
file for Compiler VersionContract Code: Just paste everything from your
MyCounterFlatten.sol
file
❕ Keep in mind that Contract Code
should be MyCounterFlatten.sol
, not MyCounter.sol
. ❕
Once everything is filled out, press Submit!
If everything is correctly filled out, your contract page on the block explorer should display a new tab called Contract
:
For more information about Truffle Suite, Please Visit Truffle Suite Documentation. For more information about XinFin Network, Please Visit XDC Network Documentation on GitBook. Resources used during the deployment of the MyCounter can be found at MyCounter Contract Folder.
Last updated