Hợp đồng thông minh sử dụng Solidity (phần 1)

Tram Ho

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:

Vòng đời của Hợp đồng thông minh

Như thể hiện trong hình trên, vòng đời của hợp đồng thông minh tuân theo các bước bên dưới:

  • 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ìnhGiá trị mặc địnhThí dụ
int và uint (tất cả các kích thước)0số int; tuổi uint; // 0
boolsaicờ bool; // sai
sợi dâyChuỗi trốngtên chuỗi; // “”
byte1 đến byte32Tất cả các byte được đặt thành 0giới tính byte3; // 0x000000
Mảng tĩnhTất cả các mục được đặt thành giá trị mặc địnhint [3] số; // [0, 0, 0]
Mảng độngMảng trốngint [] số; // []
cấu trúcMỗi phần tử được đặt thành giá trị mặc địnhstruct 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:

Thí dụ:

Phạm vi biến trạng thái:

TênMô tả
Công cộngCó 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:

Thí dụ:

Phạm vi chức năng:

TênMô 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àiChỉ đượ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ử

Người giới thiệu

https://docs.soliditylang.org/en/v0.8.16/introduction-to-smart-contracts.html

https://remix.ethereum.org/

Cảm ơn vì đã đọc!!=
Chia sẻ bài viết ngay

Nguồn bài viết : Viblo