This repository has been archived by the owner on Apr 4, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 568
Add Ethereum Tooling Guides #474
Merged
Merged
Changes from 4 commits
Commits
Show all changes
8 commits
Select commit
Hold shift + click to select a range
b5b9904
Add Ethereum Tooling Guides
jolube 168c7b7
Apply suggestions from code review
fedekunze f000fcf
fix tabs
fedekunze f495943
Merge branch 'main' into jolube/docs-eth-tooling
fedekunze 1c684a1
Merge branch 'main' into jolube/docs-eth-tooling
fedekunze 0c1fe8b
Merge branch 'main' into jolube/docs-eth-tooling
fedekunze c7569cc
review comments addressed and some cleanup
jolube 5891482
Merge branch 'jolube/docs-eth-tooling' of github.com:jolube/ethermint…
jolube File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,199 @@ | ||
<!-- | ||
order: 3 | ||
--> | ||
|
||
# Hardhat: Deploying a Smart Contract | ||
|
||
Learn how to deploy a simple Solidity-based smart contract to Ethermint using the Hardhat environment {synopsis} | ||
|
||
[Hardhat](https://hardhat.org/) is a flexible development environment for building Ethereum-based smart contracts. It is designed with integrations and extensibility in mind | ||
|
||
## Pre-requisite Readings | ||
|
||
- [Installation](./../../quickstart/installation.md) {prereq} | ||
- [Run a node](./../../quickstart/run_node.md) {prereq} | ||
|
||
## Install Dependencies | ||
|
||
Before proceeding, you need to install Node.js (we'll use v16.x) and the npm package manager. You can download directly from [Node.js](https://nodejs.org/en/download/) or in your terminal: | ||
|
||
:::: tabs | ||
::: tab Ubuntu | ||
|
||
```shell | ||
$ curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash - | ||
|
||
$ sudo apt install -y nodejs | ||
``` | ||
::: | ||
::: tab MacOS | ||
|
||
```shell | ||
# You can use homebrew (https://docs.brew.sh/Installation) | ||
$ brew install node | ||
|
||
# Or you can use nvm (https://github.com/nvm-sh/nvm) | ||
$ nvm install node | ||
``` | ||
|
||
::: | ||
:::: | ||
|
||
You can verify that everything is installed correctly by querying the version for each package: | ||
|
||
```shell | ||
$ node -v | ||
... | ||
|
||
$ npm -v | ||
... | ||
``` | ||
|
||
::: tip | ||
If you haven't already, you will also need to install Ethermint if you plan on deploying your smart contracts locally. Check this [document](./../../quickstart/installation.md) for the full instructions. | ||
::: | ||
|
||
## Create Hardhat Project | ||
|
||
To create a new project, navigate to your project directory and run: | ||
|
||
```shell | ||
$ 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.0.8 | ||
|
||
? What do you want to do? … | ||
❯ Create a sample project | ||
Create an empty hardhat.config.js | ||
``` | ||
|
||
Following the prompts should create a new project structure in your directory. Consult the [Hardhat config page](https://hardhat.org/config/) for a list of configuration options to specify in `hardhat.config.js`. Most importantly, you should set the `defaultNetwork` entry to point to your desired JSON-RPC network: | ||
|
||
:::: tabs | ||
::: tab Local Node | ||
|
||
```javascript | ||
module.exports = { | ||
defaultNetwork: "local", | ||
networks: { | ||
hardhat: { | ||
}, | ||
local: { | ||
url: "http://localhost:8545/", | ||
accounts: [privateKey1, privateKey2, ...] | ||
} | ||
}, | ||
... | ||
} | ||
``` | ||
|
||
::: | ||
::: tab Testnet | ||
|
||
```javascript | ||
module.exports = { | ||
defaultNetwork: "testnet", | ||
networks: { | ||
hardhat: { | ||
}, | ||
testnet: { | ||
url: "", | ||
accounts: [privateKey1, privateKey2, ...] | ||
} | ||
}, | ||
... | ||
} | ||
``` | ||
|
||
::: | ||
:::: | ||
|
||
To ensure you are targeting the correct network, you can query for a list of accounts available to you from your default network provider: | ||
|
||
```shell | ||
$ npx hardhat accounts | ||
0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 | ||
0x70997970C51812dc3A010C7d01b50e0d17dc79C8 | ||
0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC | ||
0x90F79bf6EB2c4f870365E785982E1f101E93b906 | ||
... | ||
``` | ||
|
||
## Deploying a Smart Contract | ||
|
||
You will see that a default smart contract, written in Solidity, has already been provided under `contracts/Greeter.sol`: | ||
|
||
```javascript | ||
pragma solidity ^0.8.0; | ||
|
||
import "hardhat/console.sol"; | ||
|
||
contract Greeter { | ||
string private greeting; | ||
|
||
constructor(string memory _greeting) { | ||
console.log("Deploying a Greeter with greeting:", _greeting); | ||
greeting = _greeting; | ||
} | ||
|
||
function greet() public view returns (string memory) { | ||
return greeting; | ||
} | ||
|
||
function setGreeting(string memory _greeting) public { | ||
console.log("Changing greeting from '%s' to '%s'", greeting, _greeting); | ||
greeting = _greeting; | ||
} | ||
} | ||
``` | ||
|
||
This contract allows you to set and query a string `greeting`. Hardhat also provides a script to deploy smart contracts to a target network; this can be invoked via the following command, targeting your default network: | ||
|
||
```shell | ||
$ npx hardhat run scripts/sample-script.js | ||
``` | ||
|
||
Hardhat also lets you manually specify a target network via the `--network <your-network>` flag: | ||
|
||
:::: tabs | ||
::: tab Local Node | ||
|
||
```shell | ||
$ npx hardhat run --network {{ $themeConfig.project.rpc_url_local }} scripts/sample-script.js | ||
``` | ||
|
||
::: | ||
::: tab Testnet | ||
|
||
```shell | ||
$ npx hardhat run --network {{ $themeConfig.project.rpc_url }} scripts/sample-script.js | ||
``` | ||
|
||
::: | ||
:::: | ||
|
||
Finally, try running a Hardhat test: | ||
|
||
```shell | ||
$ npx hardhat test | ||
Compiling 1 file with 0.8.4 | ||
Compilation finished successfully | ||
|
||
|
||
Greeter | ||
Deploying a Greeter with greeting: Hello, world! | ||
Changing greeting from 'Hello, world!' to 'Hola, mundo!' | ||
✓ Should return the new greeting once it's changed (803ms) | ||
|
||
|
||
1 passing (805ms) | ||
``` |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
should we remove this one?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Kept this one and merged the other into it