Giới thiệu
Hợp đồng thông minh : Đơn giản là một chương trình chạy trên chuỗi khối Ethereum, có địa chỉ cụ thể trên chuỗi khối, không được kiểm soát bởi người dùng.
Máy ảo Ethereum (EVM): Đó là môi trường để tài khoản Ethereum và hợp đồng thông minh hoạt động.
Solidity : Một ngôn ngữ lập trình cấp cao, sử dụng để phát triển các hợp đồng thông minh.
Phối lại: Một IDE trực tuyến cho phép phát triển, biên dịch, triển khai các hợp đồng thông minh cho Ethereum.
Dưới đây là một ví dụ đơn giản về Hợp đồng thông minh:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | // SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.7.1 <0.9.0; contract Message { string private message; constructor() { message = "hello world1"; } function setMessage(string memory mes) public { message = mes; } function getMessage() view public returns(string memory) { return message; } } |
Vòng đời của Hợp đồng thông minh
- Hợp đồng thông minh được thực hiện bằng ngôn ngữ cấp cao như Solidity.
- Hợp đồng thông minh được biên dịch theo hai kết quả cụ thể là: Bytecode (là ngôn ngữ máy dựa trên ngăn xếp được biên dịch và thực thi bởi EVM) và ABI – Giao diện nhị phân ứng dụng (là tệp JSON mô tả hợp đồng phân tán và các chức năng của hợp đồng thông minh). ABI là cầu nối giữa Web2 và Web3.
- Sau đó, hợp đồng thông minh được triển khai. Điều này bao gồm việc tạo một giao dịch đóng gói mã bytecode của hợp đồng thông minh và gửi nó đến mạng. Giao dịch nhận được tài khoản hợp đồng của chính nó có địa chỉ, số dư, Nonce và giữ mã bytecode trong trường dữ liệu.
- Cuối cùng, một hợp đồng thông minh được gọi ra. Điều này bao gồm các cuộc gọi bên ngoài đến hợp đồng thông minh.
Lưu ý đặc biệt :
- Khi hợp đồng được tạo, hàm khởi tạo được thực thi một lần và lệnh gọi đầu tiên đó luôn được kích hoạt bởi tài khoản EOA (Tài khoản được sở hữu bên ngoài).
- Hợp đồng thông minh không thể tự thực thi . Nó yêu cầu một cuộc gọi bên ngoài được thực hiện.
- Khi nó được thực thi, các giao dịch phát sinh từ việc thực hiện sẽ được sao chép trên blockchain và cuối cùng, dữ liệu meta hợp đồng thông minh được cập nhật.
Tính vững chắc: Các biến và hàm
Biến
Các loại giá trị sau:
địa chỉ myAddress; // 0x00000000000000000000000000000000000000
trạng thái enum {hoạt động, không hoạt động, hủy bỏ};
ánh xạ (địa chỉ => đơn vị) số dư;
Loại hình | Giá trị mặc định | Thí dụ |
---|---|---|
int và uint (tất cả các kích thước) | 0 | số int; tuổi uint; // 0 |
bool | sai | cờ bool; // sai |
sợi dây | Chuỗi trống | tên chuỗi; // “” |
byte1 đến byte32 | Tất cả các byte được đặt thành 0 | giới tính byte3; // 0x000000 |
Mảng tĩnh | Tất cả các mục được đặt thành giá trị mặc định | int [3] số; // [0, 0, 0] |
Mảng động | Mảng trống | int [] số; // [] |
cấu trúc | Mỗi phần tử được đặt thành giá trị mặc định | struct Sinh viên {string name; uint age; bool giới tính;} |
địa chỉ (byte20) | ||
enum | ||
ánh xạ (dưới dạng bảng băm) |
Khái niệm về giá trị “ không xác định ” hoặc “ null ” không tồn tại trong Solidity.
Có ba loại biến:
- Biến trạng thái : Các biến có giá trị được lưu trữ vĩnh viễn trong bộ lưu trữ hợp đồng.
- Biến cục bộ: Các biến có giá trị hiện diện cho đến khi hàm đang thực thi.
- Biến toàn cầu : Các biến đặc biệt tồn tại trong không gian tên toàn cầu được sử dụng để lấy thông tin về blockchain.
Cú pháp:
1 2 | <type> <access-modifier> <variable-name> ; |
Thí dụ:
1 2 | uint public age; |
Phạm vi biến trạng thái:
Tên | Mô tả |
---|---|
Công cộng | Có thể được truy cập trong hợp đồng nội bộ. Trình biên dịch tự động tạo các hàm getter cho tất cả các biến trạng thái công khai. |
Nội bộ ( mặc định ) | Có thể được truy cập nội bộ từ hợp đồng hiện tại. Và hợp đồng kế thừa từ nó mà không sử dụng điều này. |
Riêng tư | Chỉ có thể được truy cập nội bộ từ hợp đồng hiện tại. |
Chức năng
Cú pháp:
1 2 3 4 | function <function-name>(<parameter-list>) <scope> returns(<return-type-list>) { // block code } |
Thí dụ:
1 2 3 4 | function getSender() public returns (address) { return msg.sender; } |
Phạm vi chức năng:
Tên | Mô tả |
---|---|
Riêng tư | Chỉ được gọi bằng chính hợp đồng chính. |
Nội bộ | Chỉ được gọi bằng chính hợp đồng chính. Và hợp đồng kế thừa từ nó. |
Bên ngoài | Chỉ được gọi từ bên thứ ba. |
Công khai ( mặc định ) | Bên ngoài và bên trong. |
Ví dụ về tiền điện tử
Hợp đồng sau đây thực hiện hình thức đơn giản nhất của tiền điện tử
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | // SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.7.1 <0.9.0; contract PBCoin { address private owner; mapping(address => uint) balances; event Sent(address from, address to, uint amount); constructor() { owner = msg.sender; balances[owner] = 1000000; } function send(address receiver, uint amount) public { require(amount <= balances[msg.sender]); balances[msg.sender] -= amount; balances[receiver] += amount; emit Sent(msg.sender, receiver, amount); } function getBalance(address receiver) view public returns(uint) { return balances[receiver]; } } |
Người giới thiệu
https://docs.soliditylang.org/en/v0.8.16/introduction-to-smart-contracts.html