
July 30, 2025
Học blockchain P2
Học blockchain P2
🧠 GIAI ĐOẠN 2: LÀM QUEN VỚI ETHEREUM VÀ SMART CONTRACT
1. Ethereum & Smart Contract là gì?
-
Ethereum: Blockchain phi tập trung cho phép chạy smart contract (hợp đồng thông minh).
-
Smart Contract: Chương trình chạy trên blockchain, tự động thực hiện khi các điều kiện được thỏa mãn.
-
Lợi ích:
- Không cần bên trung gian.
- Tự động và minh bạch.
- Chạy mãi mãi (miễn phí lưu trữ không tồn tại).
📌 Ví dụ: Hợp đồng thông minh để nhận tiền góp vốn từ nhiều người, khi đủ số ETH sẽ tự động gửi cho chủ dự án.
2. Solidity – Ngôn ngữ viết Smart Contract phổ biến nhất
Solidity có cú pháp giống JavaScript + TypeScript, nhưng chạy trên EVM.
File Solidity có đuôi .sol
, ví dụ MyContract.sol
.
a) Biến (Variables)
Trong Solidity có 3 loại biến chính:
pragma solidity ^0.8.0; contract Example { uint public number = 10; // state variable string private name = "Vu"; // private state variable function setNumber(uint _num) public { number = _num; // thay đổi biến } }
- State variable: lưu trên blockchain (tốn gas khi thay đổi).
- Local variable: chỉ tồn tại khi hàm chạy.
- Global variable: cung cấp thông tin về blockchain (msg.sender, block.timestamp…).
b) Struct
Cho phép nhóm nhiều thuộc tính thành một kiểu dữ liệu mới:
struct Student {
string name;
uint age;
}
Student public student;
function setStudent(string memory _name, uint _age) public {
student = Student(_name, _age);
}
c) Mapping
Kiểu dữ liệu lưu trữ key-value, giống object trong JS:
mapping(address => uint) public balances;
function deposit(uint amount) public {
balances[msg.sender] += amount;
}
📌 Ưu: Tìm kiếm O(1). 📌 Nhược: Không iterate qua toàn bộ mapping được.
3. Function Visibility & Modifier
Function visibility:
- public: gọi được từ mọi nơi.
- private: chỉ gọi được bên trong contract.
- internal: chỉ contract hiện tại và contract kế thừa gọi được.
- external: chỉ gọi từ bên ngoài (không từ bên trong contract).
Modifier:
Modifier là cách viết logic kiểm tra/tái sử dụng cho nhiều hàm.
modifier onlyOwner() {
require(msg.sender == owner, "Not owner");
_;
}
function withdraw() public onlyOwner {
// chỉ owner mới gọi được
}
4. Events, Constructor, Inheritance
Event:
Gửi thông tin ra ngoài blockchain, giúp DApp bắt sự kiện.
event Transfer(address indexed from, address indexed to, uint value);
function send(address to, uint value) public {
emit Transfer(msg.sender, to, value);
}
Constructor:
Hàm chạy một lần khi deploy contract.
constructor() {
owner = msg.sender;
}
Inheritance:
Kế thừa từ contract khác.
contract A { function foo() public {} } contract B is A { function bar() public {} }
5. Deploy & Test với Remix IDE
- Vào https://remix.ethereum.org.
- Tạo file
.sol
. - Viết code smart contract.
- Chọn compiler và compile.
- Deploy trên Remix VM (test) hoặc Injected Web3 (MetaMask).
- Test bằng cách gọi các hàm trong UI của Remix.
6. 📚 Tài liệu học thêm
- Solidity by Example: https://solidity-by-example.org – Có code mẫu ngắn gọn.
- Remix IDE Docs: https://remix-ide.readthedocs.io
- Ethereum Docs: https://ethereum.org
Learn blockchain part2
Learn blockchain part2
🧠 GIAI ĐOẠN 2: LÀM QUEN VỚI ETHEREUM VÀ SMART CONTRACT
1. Ethereum & Smart Contract là gì?
-
Ethereum: Blockchain phi tập trung cho phép chạy smart contract (hợp đồng thông minh).
-
Smart Contract: Chương trình chạy trên blockchain, tự động thực hiện khi các điều kiện được thỏa mãn.
-
Lợi ích:
- Không cần bên trung gian.
- Tự động và minh bạch.
- Chạy mãi mãi (miễn phí lưu trữ không tồn tại).
📌 Ví dụ: Hợp đồng thông minh để nhận tiền góp vốn từ nhiều người, khi đủ số ETH sẽ tự động gửi cho chủ dự án.
2. Solidity – Ngôn ngữ viết Smart Contract phổ biến nhất
Solidity có cú pháp giống JavaScript + TypeScript, nhưng chạy trên EVM.
File Solidity có đuôi .sol
, ví dụ MyContract.sol
.
a) Biến (Variables)
Trong Solidity có 3 loại biến chính:
pragma solidity ^0.8.0; contract Example { uint public number = 10; // state variable string private name = "Vu"; // private state variable function setNumber(uint _num) public { number = _num; // thay đổi biến } }
- State variable: lưu trên blockchain (tốn gas khi thay đổi).
- Local variable: chỉ tồn tại khi hàm chạy.
- Global variable: cung cấp thông tin về blockchain (msg.sender, block.timestamp…).
b) Struct
Cho phép nhóm nhiều thuộc tính thành một kiểu dữ liệu mới:
struct Student {
string name;
uint age;
}
Student public student;
function setStudent(string memory _name, uint _age) public {
student = Student(_name, _age);
}
c) Mapping
Kiểu dữ liệu lưu trữ key-value, giống object trong JS:
mapping(address => uint) public balances;
function deposit(uint amount) public {
balances[msg.sender] += amount;
}
📌 Ưu: Tìm kiếm O(1). 📌 Nhược: Không iterate qua toàn bộ mapping được.
3. Function Visibility & Modifier
Function visibility:
- public: gọi được từ mọi nơi.
- private: chỉ gọi được bên trong contract.
- internal: chỉ contract hiện tại và contract kế thừa gọi được.
- external: chỉ gọi từ bên ngoài (không từ bên trong contract).
Modifier:
Modifier là cách viết logic kiểm tra/tái sử dụng cho nhiều hàm.
modifier onlyOwner() {
require(msg.sender == owner, "Not owner");
_;
}
function withdraw() public onlyOwner {
// chỉ owner mới gọi được
}
4. Events, Constructor, Inheritance
Event:
Gửi thông tin ra ngoài blockchain, giúp DApp bắt sự kiện.
event Transfer(address indexed from, address indexed to, uint value);
function send(address to, uint value) public {
emit Transfer(msg.sender, to, value);
}
Constructor:
Hàm chạy một lần khi deploy contract.
constructor() {
owner = msg.sender;
}
Inheritance:
Kế thừa từ contract khác.
contract A { function foo() public {} } contract B is A { function bar() public {} }
5. Deploy & Test với Remix IDE
- Vào https://remix.ethereum.org.
- Tạo file
.sol
. - Viết code smart contract.
- Chọn compiler và compile.
- Deploy trên Remix VM (test) hoặc Injected Web3 (MetaMask).
- Test bằng cách gọi các hàm trong UI của Remix.
6. 📚 Tài liệu học thêm
- Solidity by Example: https://solidity-by-example.org – Có code mẫu ngắn gọn.
- Remix IDE Docs: https://remix-ide.readthedocs.io
- Ethereum Docs: https://ethereum.org