Ethereum Tutorial – OpenZeppelin – Install, Deploy Contract, Interact Web3

Nhằm mục đích hỗ trợ việc tự học công nhệ blockchain, trong series bài viết về blockchain Ethereum với thư viện OpenZeppelin, Biastek chia sẽ với 4 nội dung được trình bày trong 4 phần khác nhau như bên dưới. Tất cả những nội dung hướng dẫn này được thực hiện lại theo hướng dẫn của OpenZeppelin

Phần 1: Install OpenZeppelin and Ganache, Compile và Deploy Smart Contract, Interact với Web3

Phần 2: Write an Unit Test for Smart Contract

Phần 3: Connect to Public Blockchain ( testnet) with Infura API

Phần 4: Upgradeabe Smart Contract

Let’s start with Part 1: Install OpenZeppelin and Ganache, Compile và Deploy Smart Contract, Interact với Web3. We divide it into to 4 steps :

  • Cài đặt môi trường cần thiết
  • Cài đặt thư viện Zeppelin và Compile Smart Contract
  • Deploy smart contract
  • Interact với Web3

1.Cài đặt môi trường cần thiết

  • Install OS: Ubuntu 18.04
  • Install Node and Git

1.1 Installing Node
$ sudo apt update
$ curl -sL https://deb.nodesource.com/setup_10.x -o nodesource_setup.sh
$ sudo apt install nodejs

$ nodejs –v
Output
v10.14.0

$ npm –v
Output
6.4.1

1.2 Install Git
$ sudo apt install git
$ git –version
Output
git version 2.17.1

2. Cài đặt Zepplin và Compile Smart Contract

2.1 Create project
$ mkdir ZepplinProject
$ cd ZepplinProject
$ npm init –y


2.2 Install openzeppelin CLI
$ npm install –save -dev @openzeppelin/cli

$ npx openzeppelin init

2.3 Compile contract
$ npx oz compile or $ npx oz compile –solc-version=0.5.12 –optimizer on

3. Deploy Smart Contract

when we install Ganache, it will create for us 10 accounts which are used to deploy smart contract and execute the transactions

$ npm install –save -dev ganache-cli

$ npx ganache-cli –deterministic

Open another terminal, check default account with below command line

$ npx oz accounts

get balance command line, Gananache will allocate to an account 100 ETH

$ npx oz balance

Create simple smart contract Box.sol with the content like below:

/ contracts/Box.sol
pragma solidity ^0.5.0;

contract Box {
uint256 private value;

// Emitted when the stored value changes
event ValueChanged(uint256 newValue);

// Stores a new value in the contract
function store(uint256 newValue) public {
value = newValue;
emit ValueChanged(newValue);
}

// Reads the last stored value
function retrieve() public view returns (uint256) {
return value;
}
// Increments the stored value by 2
function increment() public {
value = value + 2;
emit ValueChanged(value);
}
}

Deploy smart contract with “create” command line

$ npx oz create

call the functions which write data to blockchain, in this example, it is store() function

$ npx oz send-tx

Call the functions which read data from blockchain, in this example, it is retrieve() function

$ npx oz call

4. Interact với Web3

$ npm install web3 @openzeppelin/contract-loader

Create a file src/index.js with the content like below

const Web3 = require(‘web3’);
const { setupLoader } = require(‘@openzeppelin/contract-loader’);

async function main() {
// Set up web3 object, connected to the local development network
const web3 = new Web3(‘http://localhost:8545’);
const loader = setupLoader({ provider: web3 }).web3;

// Set up a web3 contract, representing our deployed Box instance, using the contract loader
const address = ‘0xCfEB869F69431e42cdB54A4F4f105C19C080A601’;
const box = loader.fromArtifact(‘Box’, address);

// Retrieve accounts from the local node, we’ll use the first one to send the transaction
const accounts = await web3.eth.getAccounts();

// Send a transaction to store() a new value in the Box
await box.methods.store(20)
.send({ from: accounts[0], gas: 50000, gasPrice: 1e6 });

// Call the retrieve() function of the deployed Box contract
const value = await box.methods.retrieve().call();
console.log(“Box value is”, value);
}

main();

$ node src/index.js

Congratulations! We have done the part 1!!!!

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *