Lição 2

Hiểu cú pháp và các khái niệm cơ bản của Vyper

Chuẩn bị đi sâu hơn vào thế giới hợp đồng thông minh Ethereum với Vyper trong tương lai. Trong Bài 3, chúng ta sẽ xem xét các nguyên tắc Vyper phức tạp hơn. Chúng tôi sẽ có cách tiếp cận thực tế hơn, tập trung vào thiết kế, triển khai và tương tác với các hợp đồng thông minh trên mạng Ethereum.

Giới thiệu về Cú pháp của Vyper

Máy tính, giống như con người, giao tiếp bằng nhiều ngôn ngữ khác nhau. Solidity và Vyper là hai ngôn ngữ đáng chú ý trong lĩnh vực chuỗi khối Ethereum. Chúng tôi đã giới thiệu Vyper, một ngôn ngữ lập trình hợp đồng thông minh Ethereum và so sánh nó với Solidity trong bài 1. Thay vào đó, trong phần này, chúng ta sẽ đi sâu hơn vào cú pháp của Vyper, nó rất giống với Python. Một trong những mục tiêu của Vyper là làm cho việc mã hóa hợp đồng thông minh trở nên dễ dàng hơn trong khi vẫn duy trì được tính bảo mật tốt. Cú pháp của nó được thiết kế đơn giản và dễ hiểu nhất có thể. Bạn sẽ cảm thấy hoàn toàn như ở nhà nếu bạn là một lập trình viên Python. Ngay cả khi bạn không biết thì cú pháp giống Python của Vyper vẫn rất dễ học. Hãy xem các thành phần cú pháp chính của Vyper.

Python 
 # Đây là một nhận xét trong Vyper 
 @external 
 def hello(name: string[10]) -> string[30]: 
 return concat("Xin chào, ", tên, "!")

Các kiểu dữ liệu cơ bản trong Vyper

Kiểu dữ liệu là khối xây dựng của bất kỳ ngôn ngữ lập trình nào. Chúng xác định loại dữ liệu nào có thể được lưu trữ và thao tác trong một chương trình. Hãy cùng điểm qua một số loại dữ liệu cơ bản mà Vyper cung cấp:

  • Boolean: Đây là kiểu dữ liệu nhị phân có thể có một trong hai giá trị có thể là đúng hoặc sai. Ví dụ: flag: bool = True
  • Số nguyên: Vyper hỗ trợ số nguyên, là số nguyên có thể dương, âm hoặc bằng 0. Chúng có nhiều kích cỡ khác nhau từ 8 đến 256 bit, trong đó phổ biến nhất là int128. Ví dụ: count: int128 = 10
  • Thập phân: Điều này được sử dụng để biểu thị các số dấu phẩy động, tức là các số có dấu thập phân. Ví dụ: price: decimal = 123.45
  • Byte và String: Byte là chuỗi dữ liệu byte, trong khi chuỗi là chuỗi ký tự unicode. Ví dụ: name: string[20] = 'Alice'
  • Danh sách và Mảng: Danh sách là tập hợp các mục có cùng kiểu dữ liệu. Mặt khác, mảng là một loại danh sách đặc biệt có độ dài cố định. Ví dụ: numbers: int128[5] = [1, 2, 3, 4, 5]
    Mỗi loại dữ liệu này có vị trí riêng trong việc viết hợp đồng thông minh. Bạn sẽ cần chọn loại dữ liệu phù hợp cho từng phần dữ liệu bạn muốn lưu trữ, dựa trên loại thao tác bạn muốn thực hiện trên dữ liệu đó.

Tóm lại, một số giá trị có sẵn trong Vyper:

  • bool
  • int128
  • uint256
  • số thập phân
  • Địa chỉ
  • byte32
  • Byte
  • Sợi dây
Python 
 # @version ^0.3.7 

 b: public(bool) 
 i: public(int128) # -2 ** 127 tới (2 ** 127 - 1) 
 u: public(uint256) # 0 đến 2 * * 256 - 1 
 dec: public(thập phân) # -2 ** 127 đến (2 ** 127 - 1), 10 chữ số thập phân 
 addr: public(địa chỉ) 
 b32: public(bytes32) 
 bs: public(Bytes [100]) 
 giây: public(String[100]) 


 @external 
 def __init__(): 
 self.b = Sai 
 tự.i = -1 
 tự.u = 123 
 self.dec = 3,14 
 self.addr = 0x704534A22F03Ea46f76A07a195568D115E2e6d52 
 self.b32 = 0xada1b75f8ae9a65dcc16f95678ac203030505c6b465c8206e2 6ae84b525cdacb 
 self.bs = b"\x01" 
 self.s = "Xin chào Vyper"

Các chức năng trong Vyper

Các hàm trong Vyper, giống như trong nhiều ngôn ngữ khác, là các khối mã có thể tái sử dụng để thực hiện một tác vụ cụ thể. Chúng cung cấp tính mô-đun tốt hơn cho ứng dụng của bạn và cho phép sử dụng lại mã.

Trong Vyper, bạn có thể xác định hàm bằng từ khóa def , giống như trong Python. Các hàm cũng có danh sách các tham số và kiểu trả về. Đây là một hàm Vyper đơn giản:

Python 
 @external 
 def add(a: int128, b: int128) -> int128: 
 return a + b

Trình trang trí @externallàm cho chức năng này có thể gọi được từ bên ngoài hợp đồng (bằng một giao dịch hoặc hợp đồng khác). Nếu không có trình trang trí này, hàm sẽ chỉ có thể gọi được trong hợp đồng được xác định.

Chức năng bên trong và bên ngoài

Các chức năng @internal chỉ có thể được gọi trong hợp đồng.

Các chức năng @external chỉ có thể được gọi từ bên ngoài hợp đồng.

Ví dụ:

Python 
 # @version ^0.3.7 

 # Chỉ có thể gọi các hàm nội bộ bên trong hợp đồng này 
 @internal 
 @pure 
 def _add(x: uint256, y: uint256) -> uint256: 
 return x + y 


 @external 
 @view 
 def extFunc() -> bool: 
 return True 


 # Các hàm bên ngoài chỉ có thể được gọi từ bên ngoài hợp đồng này 
 @external 
 @view 
 def avg(x: uint256, y: uint256) -> uint256: 
 # không thể gọi hàm bên ngoài khác 
 # self.extFunc()

    # có thể gọi các hàm bên trong 
 z: uint256 = self._add(x, y) 

 return (x + y) / 2 


 @internal 
 @pure 
 def _sqr(x: uint256) -> uint256: 
 return x * x 


 @external 
 @view 
 def sumOfSquares(x: uint256, y: uint256) -> uint256: 
 return self._sqr(x) + self._sqr(y)

Cấu trúc điều khiển trong Vyper

Cấu trúc điều khiển được sử dụng để thực hiện các hành động khác nhau dựa trên các quyết định khác nhau. Vyper cung cấp một số cấu trúc điều khiển bao gồm vòng lặp if, for và while.

Câu lệnh if là cấu trúc điều khiển cơ bản nhất. Nó chỉ thực thi một khối mã nếu một điều kiện được chỉ định là đúng.

Python 
 @external 
 def is_Greater_than_ten(a: int128) -> bool: 
 if a > 10: 
 return True 
 else: 
 return False

Vòng lặp for trong Vyper có cú pháp tương tự như trong Python. Bạn có thể thực thi một tập hợp các câu lệnh, một lần cho mỗi mục trong danh sách, bộ dữ liệu, bộ, v.v.

Số Python 
 : int128[5] = [1, 2, 3, 4, 5] 

 @external 
 def sum_numbers() -> int128: 
 sum: int128 = 0 
 for i in range(5): 
 sum + = self.numbers[i]
    trả lại số tiền

Vòng lặp while trong Vyper liên tục thực thi một câu lệnh đích miễn là điều kiện đã cho là đúng.

Python 
 @external 
 def count_to_ten() -> int128: 
 count: int128 = 0 
 while count < 10: 
 count += 1 
 return count

Xử lý lỗi trong Vyper

Trong lập trình, xử lý lỗi là rất quan trọng để xử lý các lỗi thời gian chạy và cung cấp các thông báo lỗi có ý nghĩa cho người dùng. Vyper sử dụng câu lệnh assert để xử lý lỗi.

Python 
 @external 
 def chia(a: thập phân, b: thập phân) -> thập phân: 
 khẳng định b != 0, "Không thể chia cho 0" 
 trả về a / b

Trong đoạn mã trên, nếu b bằng 0, một thông báo lỗi “Không thể chia cho 0” sẽ được đưa ra và giao dịch sẽ được hoàn nguyên. Ngược lại, nó sẽ tiến hành phép chia.

Vyper cũng cung cấp câu lệnh revert có thể được sử dụng để dừng việc thực hiện cuộc gọi hiện tại và hoàn nguyên các thay đổi trạng thái, đồng thời cung cấp thông báo lỗi.

Đó là bản tóm tắt nhanh về cú pháp và các nguyên tắc cơ bản của Vyper. Chìa khóa để thành thạo Vyper, cũng như bất kỳ ngôn ngữ lập trình nào, là thực hành. Tôi ủng hộ việc sử dụng những kỹ thuật này để viết các ứng dụng đơn giản. Trong phần tiếp theo, chúng ta sẽ tìm hiểu cách sử dụng Vyper để xây dựng và duy trì hợp đồng thông minh. Mở to mắt cảnh giác!

Chúc mừng bạn đã hoàn thành xuất sắc Bài 2! Bạn đã đạt được tiến bộ to lớn trong việc nắm bắt cú pháp Vyper và các cấu trúc cơ bản. Chúng ta đã giới thiệu về cú pháp Vyper, các kiểu dữ liệu và hàm cơ bản, cấu trúc điều khiển và xử lý lỗi trong Vyper. Hãy nhớ lại rằng mỗi thành phần này là nền tảng của bất kỳ chương trình Vyper nào. Điều quan trọng là phải có sự hiểu biết vững chắc về các thành phần cốt lõi này và cách tốt nhất để làm được điều đó là thực hành và khám phá. Tạo các chương trình đơn giản kết hợp những gì bạn đã học hôm nay. Không có sự thay thế nào cho trải nghiệm thực tế khi viết mã.

Chuẩn bị đi sâu hơn vào thế giới hợp đồng thông minh Ethereum với Vyper trong tương lai. Trong Bài 3, chúng ta sẽ xem xét các nguyên tắc Vyper phức tạp hơn. Chúng tôi sẽ có cách tiếp cận thực tế hơn, tập trung vào thiết kế, triển khai và tương tác với các hợp đồng thông minh trên mạng Ethereum. Hiểu rằng thế giới công nghệ blockchain rất rộng lớn và luôn thay đổi. Là một kỹ sư blockchain, hành trình khám phá và học hỏi của bạn không bao giờ thực sự kết thúc. Bạn đang trên con đường hướng tới sự thành thạo và mỗi bước tiến về phía trước, dù nhỏ đến đâu, cũng là một bước tiến về phía trước. Hãy tiếp tục nỗ lực xuất sắc của bạn và tôi sẽ gặp bạn ở Bài học 3!

Exclusão de responsabilidade
* O investimento em criptomoedas envolve riscos significativos. Prossiga com cuidado. O curso não pretende ser um conselho de investimento.
* O curso é criado pelo autor que se juntou ao Gate Learn. Qualquer opinião partilhada pelo autor não representa o Gate Learn.
Catálogo
Lição 2

Hiểu cú pháp và các khái niệm cơ bản của Vyper

Chuẩn bị đi sâu hơn vào thế giới hợp đồng thông minh Ethereum với Vyper trong tương lai. Trong Bài 3, chúng ta sẽ xem xét các nguyên tắc Vyper phức tạp hơn. Chúng tôi sẽ có cách tiếp cận thực tế hơn, tập trung vào thiết kế, triển khai và tương tác với các hợp đồng thông minh trên mạng Ethereum.

Giới thiệu về Cú pháp của Vyper

Máy tính, giống như con người, giao tiếp bằng nhiều ngôn ngữ khác nhau. Solidity và Vyper là hai ngôn ngữ đáng chú ý trong lĩnh vực chuỗi khối Ethereum. Chúng tôi đã giới thiệu Vyper, một ngôn ngữ lập trình hợp đồng thông minh Ethereum và so sánh nó với Solidity trong bài 1. Thay vào đó, trong phần này, chúng ta sẽ đi sâu hơn vào cú pháp của Vyper, nó rất giống với Python. Một trong những mục tiêu của Vyper là làm cho việc mã hóa hợp đồng thông minh trở nên dễ dàng hơn trong khi vẫn duy trì được tính bảo mật tốt. Cú pháp của nó được thiết kế đơn giản và dễ hiểu nhất có thể. Bạn sẽ cảm thấy hoàn toàn như ở nhà nếu bạn là một lập trình viên Python. Ngay cả khi bạn không biết thì cú pháp giống Python của Vyper vẫn rất dễ học. Hãy xem các thành phần cú pháp chính của Vyper.

Python 
 # Đây là một nhận xét trong Vyper 
 @external 
 def hello(name: string[10]) -> string[30]: 
 return concat("Xin chào, ", tên, "!")

Các kiểu dữ liệu cơ bản trong Vyper

Kiểu dữ liệu là khối xây dựng của bất kỳ ngôn ngữ lập trình nào. Chúng xác định loại dữ liệu nào có thể được lưu trữ và thao tác trong một chương trình. Hãy cùng điểm qua một số loại dữ liệu cơ bản mà Vyper cung cấp:

  • Boolean: Đây là kiểu dữ liệu nhị phân có thể có một trong hai giá trị có thể là đúng hoặc sai. Ví dụ: flag: bool = True
  • Số nguyên: Vyper hỗ trợ số nguyên, là số nguyên có thể dương, âm hoặc bằng 0. Chúng có nhiều kích cỡ khác nhau từ 8 đến 256 bit, trong đó phổ biến nhất là int128. Ví dụ: count: int128 = 10
  • Thập phân: Điều này được sử dụng để biểu thị các số dấu phẩy động, tức là các số có dấu thập phân. Ví dụ: price: decimal = 123.45
  • Byte và String: Byte là chuỗi dữ liệu byte, trong khi chuỗi là chuỗi ký tự unicode. Ví dụ: name: string[20] = 'Alice'
  • Danh sách và Mảng: Danh sách là tập hợp các mục có cùng kiểu dữ liệu. Mặt khác, mảng là một loại danh sách đặc biệt có độ dài cố định. Ví dụ: numbers: int128[5] = [1, 2, 3, 4, 5]
    Mỗi loại dữ liệu này có vị trí riêng trong việc viết hợp đồng thông minh. Bạn sẽ cần chọn loại dữ liệu phù hợp cho từng phần dữ liệu bạn muốn lưu trữ, dựa trên loại thao tác bạn muốn thực hiện trên dữ liệu đó.

Tóm lại, một số giá trị có sẵn trong Vyper:

  • bool
  • int128
  • uint256
  • số thập phân
  • Địa chỉ
  • byte32
  • Byte
  • Sợi dây
Python 
 # @version ^0.3.7 

 b: public(bool) 
 i: public(int128) # -2 ** 127 tới (2 ** 127 - 1) 
 u: public(uint256) # 0 đến 2 * * 256 - 1 
 dec: public(thập phân) # -2 ** 127 đến (2 ** 127 - 1), 10 chữ số thập phân 
 addr: public(địa chỉ) 
 b32: public(bytes32) 
 bs: public(Bytes [100]) 
 giây: public(String[100]) 


 @external 
 def __init__(): 
 self.b = Sai 
 tự.i = -1 
 tự.u = 123 
 self.dec = 3,14 
 self.addr = 0x704534A22F03Ea46f76A07a195568D115E2e6d52 
 self.b32 = 0xada1b75f8ae9a65dcc16f95678ac203030505c6b465c8206e2 6ae84b525cdacb 
 self.bs = b"\x01" 
 self.s = "Xin chào Vyper"

Các chức năng trong Vyper

Các hàm trong Vyper, giống như trong nhiều ngôn ngữ khác, là các khối mã có thể tái sử dụng để thực hiện một tác vụ cụ thể. Chúng cung cấp tính mô-đun tốt hơn cho ứng dụng của bạn và cho phép sử dụng lại mã.

Trong Vyper, bạn có thể xác định hàm bằng từ khóa def , giống như trong Python. Các hàm cũng có danh sách các tham số và kiểu trả về. Đây là một hàm Vyper đơn giản:

Python 
 @external 
 def add(a: int128, b: int128) -> int128: 
 return a + b

Trình trang trí @externallàm cho chức năng này có thể gọi được từ bên ngoài hợp đồng (bằng một giao dịch hoặc hợp đồng khác). Nếu không có trình trang trí này, hàm sẽ chỉ có thể gọi được trong hợp đồng được xác định.

Chức năng bên trong và bên ngoài

Các chức năng @internal chỉ có thể được gọi trong hợp đồng.

Các chức năng @external chỉ có thể được gọi từ bên ngoài hợp đồng.

Ví dụ:

Python 
 # @version ^0.3.7 

 # Chỉ có thể gọi các hàm nội bộ bên trong hợp đồng này 
 @internal 
 @pure 
 def _add(x: uint256, y: uint256) -> uint256: 
 return x + y 


 @external 
 @view 
 def extFunc() -> bool: 
 return True 


 # Các hàm bên ngoài chỉ có thể được gọi từ bên ngoài hợp đồng này 
 @external 
 @view 
 def avg(x: uint256, y: uint256) -> uint256: 
 # không thể gọi hàm bên ngoài khác 
 # self.extFunc()

    # có thể gọi các hàm bên trong 
 z: uint256 = self._add(x, y) 

 return (x + y) / 2 


 @internal 
 @pure 
 def _sqr(x: uint256) -> uint256: 
 return x * x 


 @external 
 @view 
 def sumOfSquares(x: uint256, y: uint256) -> uint256: 
 return self._sqr(x) + self._sqr(y)

Cấu trúc điều khiển trong Vyper

Cấu trúc điều khiển được sử dụng để thực hiện các hành động khác nhau dựa trên các quyết định khác nhau. Vyper cung cấp một số cấu trúc điều khiển bao gồm vòng lặp if, for và while.

Câu lệnh if là cấu trúc điều khiển cơ bản nhất. Nó chỉ thực thi một khối mã nếu một điều kiện được chỉ định là đúng.

Python 
 @external 
 def is_Greater_than_ten(a: int128) -> bool: 
 if a > 10: 
 return True 
 else: 
 return False

Vòng lặp for trong Vyper có cú pháp tương tự như trong Python. Bạn có thể thực thi một tập hợp các câu lệnh, một lần cho mỗi mục trong danh sách, bộ dữ liệu, bộ, v.v.

Số Python 
 : int128[5] = [1, 2, 3, 4, 5] 

 @external 
 def sum_numbers() -> int128: 
 sum: int128 = 0 
 for i in range(5): 
 sum + = self.numbers[i]
    trả lại số tiền

Vòng lặp while trong Vyper liên tục thực thi một câu lệnh đích miễn là điều kiện đã cho là đúng.

Python 
 @external 
 def count_to_ten() -> int128: 
 count: int128 = 0 
 while count < 10: 
 count += 1 
 return count

Xử lý lỗi trong Vyper

Trong lập trình, xử lý lỗi là rất quan trọng để xử lý các lỗi thời gian chạy và cung cấp các thông báo lỗi có ý nghĩa cho người dùng. Vyper sử dụng câu lệnh assert để xử lý lỗi.

Python 
 @external 
 def chia(a: thập phân, b: thập phân) -> thập phân: 
 khẳng định b != 0, "Không thể chia cho 0" 
 trả về a / b

Trong đoạn mã trên, nếu b bằng 0, một thông báo lỗi “Không thể chia cho 0” sẽ được đưa ra và giao dịch sẽ được hoàn nguyên. Ngược lại, nó sẽ tiến hành phép chia.

Vyper cũng cung cấp câu lệnh revert có thể được sử dụng để dừng việc thực hiện cuộc gọi hiện tại và hoàn nguyên các thay đổi trạng thái, đồng thời cung cấp thông báo lỗi.

Đó là bản tóm tắt nhanh về cú pháp và các nguyên tắc cơ bản của Vyper. Chìa khóa để thành thạo Vyper, cũng như bất kỳ ngôn ngữ lập trình nào, là thực hành. Tôi ủng hộ việc sử dụng những kỹ thuật này để viết các ứng dụng đơn giản. Trong phần tiếp theo, chúng ta sẽ tìm hiểu cách sử dụng Vyper để xây dựng và duy trì hợp đồng thông minh. Mở to mắt cảnh giác!

Chúc mừng bạn đã hoàn thành xuất sắc Bài 2! Bạn đã đạt được tiến bộ to lớn trong việc nắm bắt cú pháp Vyper và các cấu trúc cơ bản. Chúng ta đã giới thiệu về cú pháp Vyper, các kiểu dữ liệu và hàm cơ bản, cấu trúc điều khiển và xử lý lỗi trong Vyper. Hãy nhớ lại rằng mỗi thành phần này là nền tảng của bất kỳ chương trình Vyper nào. Điều quan trọng là phải có sự hiểu biết vững chắc về các thành phần cốt lõi này và cách tốt nhất để làm được điều đó là thực hành và khám phá. Tạo các chương trình đơn giản kết hợp những gì bạn đã học hôm nay. Không có sự thay thế nào cho trải nghiệm thực tế khi viết mã.

Chuẩn bị đi sâu hơn vào thế giới hợp đồng thông minh Ethereum với Vyper trong tương lai. Trong Bài 3, chúng ta sẽ xem xét các nguyên tắc Vyper phức tạp hơn. Chúng tôi sẽ có cách tiếp cận thực tế hơn, tập trung vào thiết kế, triển khai và tương tác với các hợp đồng thông minh trên mạng Ethereum. Hiểu rằng thế giới công nghệ blockchain rất rộng lớn và luôn thay đổi. Là một kỹ sư blockchain, hành trình khám phá và học hỏi của bạn không bao giờ thực sự kết thúc. Bạn đang trên con đường hướng tới sự thành thạo và mỗi bước tiến về phía trước, dù nhỏ đến đâu, cũng là một bước tiến về phía trước. Hãy tiếp tục nỗ lực xuất sắc của bạn và tôi sẽ gặp bạn ở Bài học 3!

Exclusão de responsabilidade
* O investimento em criptomoedas envolve riscos significativos. Prossiga com cuidado. O curso não pretende ser um conselho de investimento.
* O curso é criado pelo autor que se juntou ao Gate Learn. Qualquer opinião partilhada pelo autor não representa o Gate Learn.