Sự kiện ra mắt coin mới 2022
viEnglish
BTC
USD
16,188
EUR
15,494
VND
401,128,297

Solidity, các kiến thức cơ bản để làm việc trên nền tảng Ethereum

Solidity là ngôn ngữ lập trình phổ biến nhất cho chuỗi khối Ethereum, là một ngôn ngữ lập trình mã nguồn mở với cộng đồng cộng tác viên ngày càng đông đảo và được tạo ra bởi tiến sĩ Gavin Wood. Solidity là một ngôn ngữ cấp cao dựa trên các ngôn ngữ lập trình khác, bao gồm C ++, Python và JavaScript. Nếu bạn quen thuộc với bất kỳ ngôn ngữ nào trong số đó, tiếp cận với Solidity sẽ cảm thấy quen thuộc.

Solidity được lập trình kiễu tĩnh, có nghĩa là việc kiểm tra diễn ra tại thời điểm biên dịch, không phải vào thời gian chạy thực thi như với các ngôn ngữ được lập trình động. Với ngôn ngữ nhập kiểu tĩnh, bạn cần chỉ định kiểu của từng biến. Ví dụ: Python và JavaScript là các ngôn ngữ được nhập động, trong khi C ++ được nhập tĩnh. Solidity hỗ trợ kế thừa, có nghĩa là các hàm, biến và các thuộc tính khác có trong một hợp đồng này có thể được sử dụng trong một hợp đồng khác. Và nó cũng hỗ trợ các kiểu phức tạp do người dùng định nghĩa như struct và enums, cho phép bạn nhóm các loại dữ liệu có liên quan lại với nhau. Hợp đồng solidity chạy trên Máy ảo Ethereum, gọi tắt là EVM. Đó là một môi trường hoàn toàn bị cô lập. Nó không truy cập bất kỳ thứ gì khác trên mạng ngoài các hợp đồng mà nó thực thi. Tất cả các hợp đồng Solidity thường bao gồm: 1) Chỉ thị Pragma (Pragma directives), 2) Biến trạng thái (state variable), 3) Chức năng (Functions), Sự kiện (Events)

1.Chỉ thị Pragma

Pragma là từ khóa mà bạn sử dụng để yêu cầu trình biên dịch kiểm tra xem phiên bản Solidity của nó có khớp với phiên bản được yêu cầu hay không. Phù hợp có nghĩa là tệp nguồn của bạn có thể chạy thành công. Nếu không khớp, trình biên dịch sẽ báo lỗi. Hãy luôn đảm bảo đã bao gồm phiên bản Solidity mới nhất trong định nghĩa hợp đồng của bạn. Để tìm phiên bản Solidity hiện tại, hãy truy cập trang web Solidity. Sử dụng phiên bản mới nhất trong tệp nguồn.

Pragma solidity ^ 0,7.0;

Dòng này có nghĩa là tệp nguồn sẽ biên dịch với trình biên dịch lớn hơn phiên bản 0.7.0, tối đa 0.7.9. Bắt đầu từ phiên bản 0.8.0, có thể sẽ có những thay đổi khiến tệp nguồn không thể biên dịch thành công.

2.Biến trạng thái

Các biến trạng thái là chìa khóa cho bất kỳ tệp nguồn Solidity nào. Giá trị biến trạng thái được lưu trữ vĩnh viễn trong bộ lưu trữ hợp đồng.

SolidityCopy
pragma solidity >0.7.0 <0.8.0;
contract Marketplace {
uint price; // State variable

Lưu ý: Các tệp nguồn luôn bắt đầu bằng tên định nghĩa hợp đồng contract ContractName.

Trong ví dụ này, biến trạng thái được đặt tên là price với kiểu uint. Kiểu số nguyên uint chỉ ra rằng biến này là một số nguyên không dấu với 256 bit. Điều đó có nghĩa là nó có thể lưu trữ các số dương trong phạm vi từ 0 đến (2^256) -1. Đối với tất cả các định nghĩa biến, bạn phải chỉ định kiểu và tên biến. Ngoài ra, bạn có thể chỉ định khả năng hiển thị của biến trạng thái là:

  • public: một phần của giao diện hợp đồng và có thể được truy cập từ các hợp đồng khác.
  • nội bộ: chỉ được truy cập nội bộ từ hợp đồng hiện tại.
  • riêng tư: chỉ hiển thị đối với hợp đồng mà chúng được xác định trong đó.
  • Chức năng: Functions

Trong một hợp đồng, các đơn vị có thể thực thi code được gọi là các hàm chức năng. Các hàm này mô tả một hành động duy nhất để đạt được một nhiệm vụ. Chúng có thể tái sử dụng các hàm và cũng có thể được gọi từ các tệp nguồn khác như thư viện. Các hàm trong Solidity hoạt động tương tự như các hàm trong các ngôn ngữ lập trình khác. Đây là một ví dụ đơn giản về việc xác định một hàm:

Solidity
pragma solidity >0.7.0 <0.8.0;
contract Marketplace {
function buy() public {
// …
}
}

Code này hiển thị một chức năng với tên ‘buy’ có khả năng hiển thị công khai, có nghĩa là nó có thể được truy cập bởi các hợp đồng khác. Các hàm có thể sử dụng một trong các chỉ số khả năng hiển thị sau: công khai, riêng tư, nội bộ và bên ngoài. Một hàm chức năng có thể được gọi trong nội bộ hoặc bên ngoài từ một hợp đồng khác. Các hàm có thể chấp nhận các tham số và trả về các biến để chuyển các tham số và giá trị giữa chúng. Đây là một ví dụ về một hàm chấp nhận một tham số – một số nguyên được gọi là giá – và trả về một số nguyên:

Solidity
pragma solidity >0.7.0 <0.8.0;
contract Marketplace {
function buy(uint price) public returns (uint) {
// …
}
}

3.Sự kiện

Sự kiện mô tả các hành động được thực hiện trong hợp đồng. Tương tự như các hàm, sự kiện có các tham số cần được chỉ định khi sự kiện được gọi. Để gọi một sự kiện, bạn phải sử dụng từ khóa ‘emit’ với tên sự kiện và các tham số của nó.

Solidity
pragma solidity >0.7.0 <0.8.0;
contract Marketplace {
event PurchasedItem(address buyer, uint price);
function buy() public {
// …
emit PurchasedItem(msg.sender, msg.value);
}
}

Khi bạn gọi một sự kiện, sự kiện đó được ghi lại dưới dạng giao dịch trong nhật ký giao dịch, đây là một cấu trúc dữ liệu đặc biệt trong chuỗi khối. Các nhật ký này được liên kết với địa chỉ của hợp đồng, được tích hợp vào blockchain và ở đó mãi mãi. Nhật ký và dữ liệu sự kiện của nó không thể truy cập được từ trong các hợp đồng và không thể sửa đổi được.

Hy vọng qua bài viết này đã giúp các bạn hiểu rõ hơn về một số kiến thức từ việc sử dụng ngôn ngữ lập trình Solidity để viết các hợp đồng thông minh trên nền tảng Ethereum. Mời các bạn tìm đọc các bài viết tiếp theo để làm bài tập trắc nghiệm về Solidity thử nhé.

Chủ đề liên quan

Để lại bình luận