Set up development environment
The EVM sidechain testnet is EVM-compatible with most Ethereum software to develop and deploy smart contracts including:
Remix
This tutorial will show you how to deploy a Solidity smart contract to the EVM sidechain testnet using Remix. Remix is an online IDE to develop and deploy Solidity smart contracts.
Prerequisites
In this tutorial, you will use MetaMask as your wallet and Web3 provider. If you have not done so already, create or import an account with MetaMask and fund your wallet with testnet tokens using the faucet.
Step 1 - Configure Remix
- Visit the Remix IDE. The left-hand side has a menu [1] and a typical file explorer [2]. The
Solidity Compiler
[3] andDeploy and run transactions
[4] plugins should be active by default.
If the Solidity compiler and deploy plugins are not activated, you can search and activate them using the plugin manager [5] located in the bottom left of the screen.
Open MetaMask and double-check the sidechain testnet is the selected network. This will ensure Remix connects to the correct network when you configure your environment in the next step.
- In Remix, select the
Deploy and run transactions
plugin. Since you are using MetaMask as your Web3 provider, select 'Injected Provider' in the environment settings.
Step 2 - The smart contract
With Remix configured to the sidechain testnet, you can move on to your smart contract development and deployment.
- In the Remix file explorer, create an
erc20.sol
file in thecontracts/
directory and input the following Solidity statements:
// SPDX-License-Identifier: UNLICENSEDpragma solidity ^0.8.4;import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol";import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol";/*** @title {Mintable ERC20 Token}*/contract MintableERC20 is ERC20("Mintable Token", "MT"), Ownable {/*** @dev See (ERC20 - _mint) function for details.**/function mint(address to, uint256 amount) external payable onlyOwner() {_mint(to, amount);}}
This smart contract describes a mintable ERC20 token using the OpenZeppelin ERC20 contract libraries.
Step 3 - Compile and deploy
- Using the
Solidity compiler
plugin [1], select 'compile' the smart contract [2].
When the contract is compiled, you can view contract ABI, Bytecode, and more information located in 'Compilation Details' [3].
- Then, select the
Deploy and run transactions
plugin > select 'Deploy' [1] and confirm any MetaMask prompts to sign the transaction. If the deployment is successful, the Remix console should return a green checkmark with expandable details [2]. The 'Deployed Contracts' panel will contain the contract address and generate a contract interface to test functions [3].
To verify that the smart contract was deployed on the sidechain testnet you can:
- Search the transaction hash or contract address on the EVM sidechain testnet explorer.
- Open MetaMask and see if the contract deployment transaction was successfully signed.
- Check Remix logs for deployment details.
HardHat
This tutorial will show you how to deploy a Solidity smart contract to the EVM sidechain testnet using Hardhat. Hardhat is a popular development environment for Ethereum software.
Prerequisites
Hardhat is used in local NPM projects, so you will need NPM 7 or later.
- Install Node.js version 15 or later using NVM:
$ nvm install 15 --lts$ nvm alias default 15
- Check Node and NPM versions:
$ node -vv15.14.0$ npm -v7.7.6
Step 01 - Create a Hardhat project
This tutorial will create a new NPM project and initialize npx hardhat
to bootstrap a sample JavaScript project and configure it to deploy to the sidechain testnet.
- Create a new project:
$ mkdir Hardhat/$ cd Hardhat/
- Initialize a new NPM project and install Hardhat locally:
$ npm init$ npm install --save-dev hardhat
To create the sample JavaScript project, run npx hardhat
in your project folder and select Create a JavaScript project.
$ npx hardhat888 888 888 888 888888 888 888 888 888888 888 888 888 8888888888888 8888b. 888d888 .d88888 88888b. 8888b. 888888888 888 "88b 888P" d88" 888 888 "88b "88b 888888 888 .d888888 888 888 888 888 888 .d888888 888888 888 888 888 888 Y88b 888 888 888 888 888 Y88b.888 888 "Y888888 888 "Y88888 888 888 "Y888888 "Y888👷 Welcome to Hardhat v2.9.9 👷? What do you want to do? …❯ Create a JavaScript projectCreate a TypeScript projectCreate an empty hardhat.config.jsQuit
Running tasks
To view all options and commands with your Hardhat project, simply run npx hardhat
:
$ npx hardhatHardhat version 2.12.2Usage: hardhat [GLOBAL OPTIONS] <TASK> [TASK OPTIONS]GLOBAL OPTIONS:--config A Hardhat config file--emoji Use emoji in messages--flamegraph Generate a flamegraph of your Hardhat tasks--help Shows this message, or a task's help if its name is provided--max-memory The maximum amount of memory that Hardhat can use--network The network to connect to--show-stack-traces Show stack traces (always enabled on CI servers)--tsconfig A TypeScript config file--typecheck Enable TypeScript type-checking of your scripts/tests--verbose Enables Hardhat verbose logging--version Shows hardhat's versionAVAILABLE TASKS:check Check whatever you needclean Clears the cache and deletes all artifactscompile Compiles the entire project, building all artifactsconsole Opens a Hardhat consolecoverage Generates a code coverage report for testsflatten Flattens and prints contracts and their dependenciesgas-reporter:mergehelp Prints this messagenode Starts a JSON-RPC server on top of the Hardhat networkrun Runs a user-defined script after compiling the projecttest Runs mocha teststypechain Generates Typechain typings for compiled contractsverify Verifies contract on EtherscanTo get help for a specific task run: npx hardhat help [task]
If you need additional information on using Hardhat, see official Hardhat documentation.
Step 02 - Configure Hardhat
Our sample JavaScript project contains a hardhat.config.js
file. The networks
config field is an optional object where network names map to their configuration and we can set accounts
we want to sign transactions. For example:
require("@nomicfoundation/hardhat-toolbox");/** @type import('hardhat/config').HardhatUserConfig */const Private_Key = "INSERT_PRIV_KEY"module.exports = {networks: {evm-sidechain: {url: `https://faucet.sidechain.evmtestnet.iohkdev.io/`,accounts: [`0x${Private_Key}`]},},solidity: "0.8.17",};
Step 03 - Compile and deploy
- To compile Solidity files in the
contracts/
directory of your Hardhat project executenpx hardhat compile
:
$ npx hardhat compile
Deploying with Hardhat utilizes deployment scripts located in scripts/
.
- To deploy with Hardhat, execute the deploy script with
evm-sidechain
as the network option.
$ npx hardhat run scripts/deploy.js --network evm-sidechainGreeter deployed to: 0x95E1C8F6C00d8cB518faBA33c8Ae814fc12E3090
🎉 Hurray! You deployed your smart contract to EVM sidechain testnet and can search your deployment on the testnet explorer.
Truffle
This tutorial will show you how to deploy a Solidity smart contract to the EVM sidechain testnet using Truffle. Truffle is a popular development framework for EVM-based applications.
Prerequisites
Install the following dependencies:
- Node.js LTS version.
- Truffle Suite
Check Node.js and NPM are installed:
$ node --version$ npm --version
Install Truffle and check whether it installed:
$ npm install -g truffle$ truffle version
Step 1 - Configure Truffle
You need to create a Truffle project before configuring Truffle to deploy on the EVM sidechain testnet. This demonstration will use the React Truffle Box.
- Create a new project directory for your Truffle project and unbox the React Truffle Box:
$ mkdir React-Truffle$ cd React-Truffle$ truffle unbox react
- Configure Truffle to use the EVM sidechain testnet by adding the following in
React-Truffle/truffle/truffle-config.js
> Line 45. Remove the comment on Line 25. - Replace
YOUR_SEED_PHRASE
with your mnemonic phrase.
Step - Truffle Migrate
At this point, you've defined the EVM sidechain testnet and your testnet account to sign smart contract deployments. You are now ready to deploy!
- Within the
truffle/
directory of our project, executetruffle migrate
while passingevm-sidechain
for the--network
parameter:
$ truffle migrate --network evm-sidechain
Upon executing truffle migrate
, Truffle will return the transaction hash and contract address which can be searched on the EVM sidechain testnet explorer.