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: UNLICENSED
pragma 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 -v
v15.14.0
$npm -v
7.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 hardhat
888 888 888 888 888
888 888 888 888 888
888 888 888 888 888
8888888888 8888b. 888d888 .d88888 88888b. 8888b. 888888
888 888 "88b 888P" d88" 888 888 "88b "88b 888
888 888 .d888888 888 888 888 888 888 .d888888 888
888 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 project
Create a TypeScript project
Create an empty hardhat.config.js
Quit
Running tasks
To view all options and commands with your Hardhat project, simply run npx hardhat:
$ npx hardhat
Hardhat version 2.12.2
Usage: 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 version
AVAILABLE TASKS:
check Check whatever you need
clean Clears the cache and deletes all artifacts
compile Compiles the entire project, building all artifacts
console Opens a Hardhat console
coverage Generates a code coverage report for tests
flatten Flattens and prints contracts and their dependencies
gas-reporter:merge
help Prints this message
node Starts a JSON-RPC server on top of the Hardhat network
run Runs a user-defined script after compiling the project
test Runs mocha tests
typechain Generates Typechain typings for compiled contracts
verify Verifies contract on Etherscan
To get help for a specific task run: npx hardhat help [task]
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 execute npx 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-sidechain
Greeter 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, execute truffle migrate
while passing evm-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.