Deploying with Truffle#
In this tutorial, we explain step-by-step how to create, compile and deploy a simple smart contract on the X Layer testnet using Truffle.
What is Truffle?#
Truffle is the most popular development tooling for Ethereum programmers.
Setting up the development environment#
There are a few technical requirements before we start. Please install the following:
- Node.js v18 LTS or later
- Git
Recommendations for Windows users: If you’re running Truffle on Windows, you may encounter some naming conflicts that could prevent Truffle from executing properly. Please see the section on resolving naming conflicts for solutions. Once we have those installed, we only need one command to install Truffle:
npm install -g truffle
To verify that Truffle is installed properly, type truffle version
on a terminal. If you see an error, make sure that your npm modules are added to your path.
Creating a project#
The first step is to create a Truffle project. We’ll use MegaCoin as an example, which allows you to create a token that can be transferred between accounts:
- Create a new directory for your Truffle project:
mkdir MegaCoin
cd MegaCoin
- Initialize your project:
truffle init
Once this operation is completed, you’ll now have a project structure with the following items:
contracts/
: Directory for Solidity contractsmigrations/
: Directory for scriptable deployment filestest/
: Directory for test files for testing your application and contractstruffle-config.js
: Truffle configuration file
Creating a contract#
You can write your own smart contract or download the ERC-20 token smart contract template.
Compiling a contract#
To compile a Truffle project, change to the root of the directory where the project is located and then type the following into a terminal:
truffle compile
Config Truffle for X Layer#
- Go to truffle-config.js
- Update the truffle-config with XLayer-network-crendentials
const HDWalletProvider = require('truffle-hdwallet-provider');
const fs = require('fs');
const mnemonic = fs.readFileSync(".secret").toString().trim();
module.exports = {
networks: {
development: {
host: "127.0.0.1", // Localhost (default: none)
port: 8545, // Standard X Layer port (default: none)
network_id: "*", // Any network (default: none)
},
testnet: {
provider: () => new HDWalletProvider(mnemonic, `https://testrpc.xlayer.tech`),
network_id:195 ,
confirmations: 10,
timeoutBlocks: 200,
skipDryRun: true
},
},
// Set default mocha options here, use special reporters etc.
mocha: {
// timeout: 100000
},
// Configure your compilers
compilers: {
solc: {
}
}
}
.secret
file in the root directory and enter your 12 word mnemonic seed phrase to get started. To get the seedphrase 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 seedphrase.Deploying your contract#
Run this command in the root of the project directory:
$ truffle migrate --network testnet
The contract will be deployed on X Layer Chapel Testnet. It looks like this:
1_initial_migration.js
======================
Deploying 'Migrations'
----------------------
> transaction hash: 0xaf4502198400bde2148eb4274b08d727a17080b685cd2dcd4aee13d8eb954adc
> Blocks: 3 Seconds: 9
> contract address: 0x81eCD10b61978D9160428943a0c0Fb31a5460466
> block number: 3223948
> block timestamp: 1604049862
> account: 0x623ac9f6E62A8134bBD5Dc96D9B8b29b4B60e45F
> balance: 6.24574114
> gas used: 191943 (0x2edc7)
> gas price: 20 gwei
> value sent: 0 ETH
> total cost: 0.00383886 ETH
Pausing for 5 confirmations...
------------------------------
> confirmation number: 2 (block: 3223952)
> confirmation number: 3 (block: 3223953)
> confirmation number: 4 (block: 3223954)
> confirmation number: 6 (block: 3223956)
> Saving migration to chain.
> Saving artifacts
-------------------------------------
> Total cost: 0.00383886 ETH
Summary
=======
> Total deployments: 1
> Final cost: 0.00383886 ETH
address
, transaction_hash
and other details provided would differ. The above is to provide an idea of the structure as an example.Congratulations! You have successfully deployed your Smart Contract. Now you can interact with the Smart Contract.