Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Hardhat doc #27

Merged
merged 6 commits into from
Mar 17, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions docs/.vuepress/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ module.exports = {
["Endpoints", "endpoints"],
["Tools", "tools"],
["Migration", "migration"],
// ["Resources", "resources"]
["Evm", "evm"]
])
},
"/zh/": {
Expand Down Expand Up @@ -115,7 +115,7 @@ module.exports = {
["服务端点", "/zh/endpoints"],
["工具", "/zh/tools"],
["迁移", "/zh/migration"],
// ["资源", "/zh/resources"]
["evm", "/zh/evm"]
])
}
},
Expand Down
188 changes: 188 additions & 0 deletions docs/evm/hardhat.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,188 @@
---
order: 1
---

# Hardhat: Deploying a Smart Contract

Learn how to deploy a simple Solidity-based smart contract to Plug Chain 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](./../get-started/install.md)
- [Run a node](./../get-started/mainnet.md)

## 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:


Ubuntu

```bash
curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash -

sudo apt install -y nodejs
```

MacOS

```bash
# 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:

```bash
$ node -v
...

$ npm -v
...
```

> tip
If you haven't already, you will also need to install Plug Chain if you plan on deploying your smart contracts locally. Check this [document](./../get-started/install.md) for the full instructions.


## Create Hardhat Project

To create a new project, navigate to your project directory and run:

```bash
$ 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:

Local Node

```javascript
module.exports = {
defaultNetwork: "local",
networks: {
hardhat: {
},
local: {
url: "http://localhost:8545/",
accounts: [privateKey1, privateKey2, ...]
}
},
...
}
```

Testnet

```javascript
module.exports = {
defaultNetwork: "testnet",
networks: {
hardhat: {
},
testnet: {
url: "https://evmos-archive-testnet.api.bdnodes.net:8545/",
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:

```bash
$ 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:

```bash
npx hardhat run scripts/sample-script.js
```

Hardhat also lets you manually specify a target network via the `--network <your-network>` flag:

Local Node

```bash
npx hardhat run --network {{ $themeConfig.project.rpc_url_local }} scripts/sample-script.js
```
Testnet

```bash
npx hardhat run --network {{ $themeConfig.project.rpc_url_testnet }} scripts/sample-script.js
```


Finally, try running a Hardhat test:

```bash
$ 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)
```
159 changes: 159 additions & 0 deletions docs/evm/truffle.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,159 @@
---
order: 2
---

# Truffle: Deploying a Smart Contract

Learn how to deploy a simple Solidity-based smart contract to Plug Chain using the Truffle environment {synopsis}

## Pre-requisite Readings

- [Installation](./../get-started/install.md)
- [Run a node](./../get-started/mainnet.md)

[Truffle](https://www.trufflesuite.com/truffle) is a development framework for deploying and managing [Solidity](https://github.com/ethereum/solidity) smart contracts.

## Install Dependencies

First, install the latest Truffle version on your machine globally.

```bash
yarn install truffle -g
```

> tip
If you haven't already, you will also need to install Plug Chain if you plan on deploying your smart contracts locally. Check this [document](./../get-started/install.md) for the full instructions.


## Create Truffle Project

In this step we will create a simple counter contract. Feel free to skip this step if you already have your own compiled contract.

Create a new directory to host the contracts and initialize it:

```console
mkdir plugchain-truffle
cd plugchain-truffle
```

Initialize the Truffle suite with:

```bash
truffle init
```

Create `contracts/Counter.sol` containing the following contract:

```javascript
pragma solidity >=0.7.0 <0.9.0;

contract Counter {
uint256 counter = 0;

function add() public {
counter++;
}

function subtract() public {
counter--;
}

function getCounter() public view returns (uint256) {
return counter;
}
}
```

Compile the contract using the `compile` command:

```bash
truffle compile
```

Create `test/counter_test.js` containing the following tests in Javascript using [Mocha](https://mochajs.org/):

```javascript
const Counter = artifacts.require("Counter")

contract('Counter', accounts => {
const from = accounts[0]
let counter

before(async() => {
counter = await Counter.new()
})

it('should add', async() => {
await counter.add()
let count = await counter.getCounter()
assert(count == 1, `count was ${count}`)
})
})
```

## Truffle configuration

Open `truffle-config.js` and uncomment the `development` section in `networks`:

```javascript
development: {
host: "127.0.0.1", // Localhost (default: none)
port: 8545, // Standard Ethereum port (default: none)
network_id: "*", // Any network (default: none)
},
```

This will allow your contract to connect to your Plug Chain local node.

## Start Node

Start your local node using the following command on the Terminal

```bash
# from the ~/.plugchain/ directory
$ init.sh
```

> tip
For further information on how to run a node, please refer to the [quickstart guide](./../get-started/mainnet.md).


## Deploy contract

In the Truffle terminal, migrate the contract using:

```bash
truffle migrate --network development
```

You should see incoming deployment logs in the Plug Chain daemon Terminal tab for each transaction (one to deploy `Migrations.sol` and the other to deploy `Counter.sol`).

```bash
$ I[2020-07-15|17:35:59.934] Added good transaction module=mempool tx=22245B935689918D332F58E82690F02073F0453D54D5944B6D64AAF1F21974E2 res="&{CheckTx:log:\"[]\" gas_wanted:6721975 }" height=3 total=1
I[2020-07-15|17:36:02.065] Executed block module=state height=4 validTxs=1 invalidTxs=0
I[2020-07-15|17:36:02.068] Committed state module=state height=4 txs=1 appHash=76BA85365F10A59FE24ADCA87544191C2D72B9FB5630466C5B71E878F9C0A111
I[2020-07-15|17:36:02.981] Added good transaction module=mempool tx=84516B4588CBB21E6D562A6A295F1F8876076A0CFF2EF1B0EC670AD8D8BB5425 res="&{CheckTx:log:\"[]\" gas_wanted:6721975 }" height=4 total=1
```

## Run Truffle tests

Now, you can run the Truffle tests using the Plug Chain node using the `test` command:

```bash
$ truffle test --network development

Using network 'development'.


Compiling your contracts...
===========================
> Everything is up to date, there is nothing to compile.



Contract: Counter
✓ should add (5036ms)


1 passing (10s)
```
Loading