Introduction
Avalanche is an open-source platform for launching decentralized applications and enterprise blockchain deployments in one interoperable, highly scalable ecosystem. Avalanche gives you complete control on both the network and application layersโhelping you build anything you can imagine.
The Avalanche Network is composed of many blockchains. One of these blockchains is the C-Chain (Contract Chain), which is an Ethereum Virtual Machine instance. The C-Chain's API is almost identical to an Ethereum node's API. Avalanche offers the same interface as Ethereum but with higher speed, higher throughput, lower fees and lower transaction confirmation times. These properties considerably improve the performance of DApps and the user experience of smart contracts.
The goal of this guide is to lay out best practices regarding writing, testing and deployment of smart contracts to Avalanche's C-Chain. We'll be building smart contracts with development environment Hardhat.
Prerequisites
NodeJS and Yarn
First, install the LTS (long-term support) version of nodejs. This is 14.17.0
at the time of writing. NodeJS bundles npm
.
Next, install yarn:
npm install -g yarn
AvalancheGo and Avash
AvalancheGo is an Avalanche node implementation written in Go. Avash is a tool to quickly deploy local test networks. Together, you can deploy local test networks and run tests on them.
Solidity and Avalanche
It is also helpful to have a basic understanding of Solidity and Avalanche.
Dependencies
Clone the quickstart repository and install the necessary packages via yarn
.
$ git clone https://github.com/ava-labs/avalanche-smart-contract-quickstart.git
$ cd avalanche-smart-contract-quickstart
$ yarn
Write Contracts
Edit the Coin.sol
contract in contracts/
. Coin.sol
is an Open Zeppelin ERC20 contract. ERC20 is a popular smart contract interface. You can also add your own contracts.
Hardhat Config
Hardhat uses hardhat.config.js
as the configuration file. You can define tasks, networks, compilers and more in that file. For more information see here.
In our repository we use a pre-configured file hardhat.config.ts. This file configures necessary network information to provide smooth interaction with Avalanche. There are also some pre-defined private keys for testing on a local test network.
Hardhat Tasks
You can define custom hardhat tasks in hardhat.config.ts.
Documentation
There is a documentation under the Avalanche's official documentation repository: Using Hardhat with the Avalanche C-Chain