Chuyển đến nội dung chính
Change page

Ngôn ngữ hợp đồng thông minh

Một khía cạnh tuyệt vời của Ethereum là các hợp đồng thông minh có thể được lập trình bằng các ngôn ngữ tương đối thân thiện với nhà phát triển. Nếu bạn đã có kinh nghiệm với Python hoặc bất kỳ ngôn ngữ sử dụng dấu ngoặc nhọn (opens in a new tab) nào, bạn có thể tìm thấy một ngôn ngữ có cú pháp quen thuộc.

Hai ngôn ngữ hoạt động và được bảo trì nhiều nhất là:

  • Solidity
  • Vyper

Remix IDE cung cấp một môi trường phát triển toàn diện để tạo và thử nghiệm các hợp đồng bằng cả Solidity và Vyper. Hãy thử Remix IDE trên trình duyệt (opens in a new tab) để bắt đầu viết mã.

Các nhà phát triển giàu kinh nghiệm hơn cũng có thể muốn sử dụng Yul, một ngôn ngữ trung gian cho Máy ảo Ethereum (EVM), hoặc Yul+, một phần mở rộng của Yul.

Nếu bạn tò mò và muốn giúp thử nghiệm các ngôn ngữ mới vẫn đang trong quá trình phát triển mạnh mẽ, bạn có thể thử nghiệm với Fe, một ngôn ngữ hợp đồng thông minh mới nổi hiện vẫn đang ở giai đoạn sơ khai.

Điều kiện tiên quyết

Kiến thức trước đây về các ngôn ngữ lập trình, đặc biệt là JavaScript hoặc Python, có thể giúp bạn hiểu được sự khác biệt giữa các ngôn ngữ hợp đồng thông minh. Chúng tôi cũng khuyên bạn nên hiểu khái niệm về hợp đồng thông minh trước khi đi quá sâu vào việc so sánh các ngôn ngữ. Giới thiệu về hợp đồng thông minh.

Solidity

  • Ngôn ngữ bậc cao, hướng đối tượng để triển khai các hợp đồng thông minh.
  • Ngôn ngữ sử dụng dấu ngoặc nhọn chịu ảnh hưởng sâu sắc nhất từ C++.
  • Kiểu tĩnh (kiểu của một biến được biết tại thời điểm biên dịch).
  • Hỗ trợ:
    • Kế thừa (bạn có thể mở rộng các hợp đồng khác).
    • Thư viện (bạn có thể tạo mã có thể tái sử dụng mà bạn có thể gọi từ các hợp đồng khác nhau – giống như các hàm tĩnh trong một lớp tĩnh ở các ngôn ngữ lập trình hướng đối tượng khác).
    • Các kiểu dữ liệu phức tạp do người dùng định nghĩa.

Ví dụ về hợp đồng

Ví dụ này sẽ cho bạn hình dung về cú pháp hợp đồng Solidity. Để có mô tả chi tiết hơn về các hàm và biến, hãy xem tài liệu (opens in a new tab).

Vyper

  • Ngôn ngữ lập trình mang phong cách Python
  • Kiểu dữ liệu mạnh
  • Mã trình biên dịch nhỏ gọn và dễ hiểu
  • Tạo mã byte hiệu quả
  • Cố tình có ít tính năng hơn Solidity với mục đích làm cho các hợp đồng an toàn hơn và dễ kiểm toán hơn. Vyper không hỗ trợ:
    • Modifiers (Bộ sửa đổi)
    • Kế thừa
    • Inline assembly (Hợp ngữ nội tuyến)
    • Nạp chồng hàm
    • Nạp chồng toán tử
    • Gọi đệ quy
    • Vòng lặp vô hạn
    • Dấu phẩy tĩnh nhị phân

Để biết thêm thông tin, hãy đọc cơ sở lý luận của Vyper (opens in a new tab).

Ví dụ

Ví dụ này sẽ cho bạn hình dung về cú pháp hợp đồng Vyper. Để có mô tả chi tiết hơn về các hàm và biến, hãy xem tài liệu (opens in a new tab).

Yul và Yul+

Nếu bạn mới làm quen với Ethereum và chưa từng viết mã bằng các ngôn ngữ hợp đồng thông minh, chúng tôi khuyên bạn nên bắt đầu với Solidity hoặc Vyper. Chỉ nên tìm hiểu Yul hoặc Yul+ khi bạn đã quen thuộc với các phương pháp bảo mật hợp đồng thông minh tốt nhất và các đặc thù khi làm việc với EVM.

Yul

  • Ngôn ngữ trung gian cho Ethereum.
  • Hỗ trợ EVMEwasm (opens in a new tab), một WebAssembly mang phong cách Ethereum, và được thiết kế để trở thành mẫu số chung có thể sử dụng được cho cả hai nền tảng.
  • Mục tiêu tốt cho các giai đoạn tối ưu hóa cấp cao có thể mang lại lợi ích như nhau cho cả nền tảng EVM và Ewasm.

Yul+

  • Một phần mở rộng cấp thấp, hiệu quả cao cho Yul.
  • Ban đầu được thiết kế cho một hợp đồng Rollup lạc quan.
  • Yul+ có thể được xem như một đề xuất nâng cấp thử nghiệm cho Yul, bổ sung thêm các tính năng mới cho nó.

Ví dụ về hợp đồng

Ví dụ đơn giản sau đây triển khai một hàm lũy thừa. Nó có thể được biên dịch bằng cách sử dụng solc --strict-assembly --bin input.yul. Ví dụ này nên được lưu trữ trong tệp input.yul.

Nếu bạn đã có nhiều kinh nghiệm với các hợp đồng thông minh, bạn có thể tìm thấy một bản triển khai ERC-20 đầy đủ bằng Yul tại đây (opens in a new tab).

Fe

  • Ngôn ngữ kiểu tĩnh cho Máy ảo Ethereum (EVM).
  • Lấy cảm hứng từ Python và Rust.
  • Hướng tới mục tiêu dễ học -- ngay cả đối với các nhà phát triển mới làm quen với hệ sinh thái Ethereum.
  • Quá trình phát triển Fe vẫn đang ở giai đoạn đầu, ngôn ngữ này đã có bản phát hành alpha vào tháng 1 năm 2021.

Ví dụ về hợp đồng

Sau đây là một hợp đồng đơn giản được triển khai bằng Fe.

Cách lựa chọn

Giống như bất kỳ ngôn ngữ lập trình nào khác, điều quan trọng nhất là chọn đúng công cụ cho đúng công việc cũng như sở thích cá nhân.

Dưới đây là một vài điều cần cân nhắc nếu bạn chưa thử bất kỳ ngôn ngữ nào:

Điểm tuyệt vời của Solidity là gì?

  • Nếu bạn là người mới bắt đầu, có rất nhiều hướng dẫn và công cụ học tập ngoài kia. Xem thêm về điều đó trong phần Học qua việc viết mã.
  • Có sẵn các công cụ tốt cho nhà phát triển.
  • Solidity có một cộng đồng nhà phát triển lớn, điều đó có nghĩa là bạn rất có thể sẽ tìm thấy câu trả lời cho các câu hỏi của mình khá nhanh chóng.

Điểm tuyệt vời của Vyper là gì?

  • Cách tuyệt vời để bắt đầu cho các nhà phát triển Python muốn viết các hợp đồng thông minh.
  • Vyper có số lượng tính năng ít hơn, điều này làm cho nó trở nên tuyệt vời để tạo nguyên mẫu ý tưởng nhanh chóng.
  • Vyper hướng tới mục tiêu dễ kiểm toán và tối đa hóa khả năng đọc hiểu của con người.

Điểm tuyệt vời của Yul và Yul+ là gì?

  • Ngôn ngữ cấp thấp đơn giản và đầy đủ chức năng.
  • Cho phép tiếp cận gần hơn nhiều với EVM thô, điều này có thể giúp tối ưu hóa việc sử dụng Gas cho các hợp đồng của bạn.

So sánh các ngôn ngữ

Để so sánh cú pháp cơ bản, vòng đời hợp đồng, giao diện, toán tử, cấu trúc dữ liệu, hàm, luồng điều khiển và nhiều nội dung khác, hãy xem bảng tóm tắt này của Auditless (opens in a new tab)

Đọc thêm