Ethereum Tutorial – OpenZeppelin – Upgradeable Smart Contract

Upgradeable smart contract

Nhằm mục đích hỗ trợ việc tự học công nghệ 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

Trong phần 4 – upgradeable smart contract chúng ta thực hiện các bước như sau:

  • Cài đặt môi trường cần thiết và cài đặt OpenZeppelin
  • Viết và deploy smart contract Simple.sol
  • Kiểm tra send and call function
  • Thêm 1 function vào contract
  • Upgarade smart contract
  • Kiểm tra hàm vừa mới thêm vào

Let’s start with Part 4

Tại sao chúng ta cần upgrade smart contract?

Smart contract trong Ethereum Blockchain có tính chất bất biến (immutable), một khi đã tạo ra thì không thể thay đổi được. Tuy nhiên, trong yêu cầu thực tế chúng ta cần điều chỉnh Smart Contract cho phù hợp với yêu cầu thực tế hiện tại. Giống như trong hợp đồng thực tế khi 2 bên đồng ý sửa đổi hoặc bổ sung 1 số điều khoản thì hợp đồng phải cho phép thực hiện việc này. Việc sử dụng thư viện OppenZeppelin giúp chúng ta điều chỉnh Smart Contract nhưng vẫn giữ nguyên địa chỉ (address), số dư tài khoản (Balance), State.

Cài đặt môi trường cần thiết và cài đặt OppenZepplin tham khảo nội dung này trong phần 1: Install OpenZeppelin and Ganache, Compile và Deploy Smart Contract, Interact với Web3

Viết contract đơn giàn Simple.sol cho phép thêm vào 1 Person với nội dung như sau:

// contracts/Simple.sol
pragma solidity ^0.5.0;
contract Simple {

struct Person{
uint id;
string name;
bool _is;
}
mapping(uint => Person) public mapPerson;
uint public Personlength;
event LogaddPerson(string pname);
event LoggetPersonById(uint pid);
address public admin;

function initialize() public {
Personlength = 0;
admin = msg.sender;
}

function addPerson( string memory pname) public {
mapPerson[Personlength] = Person(Personlength, pname,true);
Personlength += 1;

}

Deploy contract với lệnh “create”. Trong bài viết này chúng ta quan tâm đến việc hiệu chỉnh smart contract, để contract đơn giản cho việc thực hành chúng ta bỏ qua khía cạnh tối ưu smart contract.

$ npx openzeppelin create

Kiểm tra send transaction bằng cách gọi hàm addPerson với câu lệnh

$ npx oz send-tx

Kiểm tra dữ liệu thêm vào bằng lệnh

$ npx oz call

Thêm 1 hàm mới getPersonById vào Simple contract

contract Simple {
…………………..
function getPersonById(uint pid) public view returns (string memory){
require(mapPerson[pid]._is==true, “Person doesn’t exist”);
Person memory person=mapPerson[pid];
return person.name;
}
}

Upgrade smart contract bằng lệnh

$ npx openzeppelin upgrade

Upgrade smart contract thành công, bây giờ chúng ta kiểm tra kết quả hàm
getPersonById mới thêm vào

$ npx oz call

Done !!! Chúng ta đã upgrade smart contract thành công !!!!

Link to refer

https://ethereum.stackexchange.com/questions/75890/pros-and-cons-of-smart-contract-upgradable-patterns

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 *