Todo app web3
Cài đặt môi trường
node 14.19.2
$ node -v
v14.19.2
ganache desktop
https://trufflesuite.com/ganache/
Hardhat
Biên dịch contract
yarn compile
Deploy contract local
yarn deploy:local
Tạo typechain cho web3
yarn compile:web3
Contract
Todo.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract TodoList {
uint256 public taskCount = 0;
struct Task {
uint256 id;
string content;
bool completed;
}
mapping(uint256 => Task) public tasks;
event TaskAdded(uint256 id, string content);
constructor() {
createTask("Learn smartcontract");
}
// function for create task
function createTask(string memory _content) public {
taskCount++;
tasks[taskCount] = Task(taskCount, _content, false);
emit TaskAdded(taskCount, _content);
}
function getTask(uint256 _id) public view returns (Task memory) {
return tasks[_id];
}
function completeTask(uint256 _id) public {
tasks[_id].completed = true;
}
}
Đây là một smart contract đơn giản viết trên nền tảng Ethereum bằng ngôn ngữ Solidity. Smart contract này định nghĩa một ứng dụng Todo List đơn giản, cho phép người dùng tạo mới một task, xem nội dung của task, và đánh dấu task đã hoàn thành.
Các thành phần chính của smart contract:
pragma solidity ^0.8.0;
: Khai báo phiên bản Solidity cần thiết để biên dịch smart contract.contract TodoList { ... }
: Định nghĩa smart contract với tên là TodoList.uint256 public taskCount = 0;
: Biến publictaskCount
lưu trữ số lượng task hiện tại.struct Task { ... }
: Định nghĩa struct Task gồm các thông tin về task bao gồm id, nội dung và trạng thái hoàn thành.mapping(uint256 => Task) public tasks;
: Mapping publictasks
lưu trữ các task theo id.event TaskAdded(uint256 id, string content);
: Sự kiện publicTaskAdded
được kích hoạt khi một task mới được tạo.constructor() { ... }
: Hàm khởi tạo của smart contract, được gọi khi contract được triển khai. Trong đó sẽ tạo một task mới để thử nghiệm.function createTask(string memory _content) public { ... }
: Hàm publiccreateTask
cho phép tạo một task mới. Trong đó tạo một task mới, tăng biếntaskCount
lên 1 và kích hoạt sự kiện TaskAdded.function getTask(uint256 _id) public view returns (Task memory) { ... }
: Hàm publicgetTask
cho phép xem thông tin của một task dựa trên id. Hàm này trả về một biến kiểu Task và chỉ có thể xem, không thể sửa.function completeTask(uint256 _id) public { ... }
: Hàm publiccompleteTask
cho phép đánh dấu một task đã hoàn thành. Hàm này sẽ thay đổi trạng thái hoàn thành của task tương ứng trong mappingtasks
.
Sourcecode
npv2k1/web3-todo-app: Learn and develop a simple web3 todo app (github.com)