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, "!")
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:
flag: bool = True
int128
. Ví dụ: count: int128 = 10
price: decimal = 123.45
name: string[20] = 'Alice'
numbers: int128[5] = [1, 2, 3, 4, 5]
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 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í @external
là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.
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 đượ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
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!
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, "!")
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:
flag: bool = True
int128
. Ví dụ: count: int128 = 10
price: decimal = 123.45
name: string[20] = 'Alice'
numbers: int128[5] = [1, 2, 3, 4, 5]
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 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í @external
là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.
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 đượ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
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!