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, Humichau.com 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!!!!
Blockchain Ethereum – Ví dụ về hàm Delegatecall trong solidity
Blockchain Ethereum (P4) – Kết Nối Các Node Sử Dụng Bootnode
Blockchain Ethereum (P3) – Cài Đặt Private Blockchain trên nền tảng Ethereum
Install web3 and nodejs
Sử dụng Virtual Box
Đọc sách 2021