Trước khi có thể hiểu đầy đủ về Tezos và SmartPy, trước tiên chúng ta phải hiểu công nghệ nền tảng của tất cả: blockchain. Blockchain là một chuỗi các khối, trong đó mỗi khối chứa một danh sách các giao dịch. Công nghệ chuỗi khối cung cấp cơ sở dữ liệu phi tập trung hoặc “sổ cái kỹ thuật số” về các giao dịch mà tất cả những người tham gia mạng đều có thể nhìn thấy. Kiến trúc của nó đảm bảo rằng mọi giao dịch là duy nhất và một khi nó được ghi vào cơ sở dữ liệu thì không thể thay đổi.
Tezos là một trong những nền tảng blockchain như vậy. Điều khiến Tezos khác biệt so với nhiều nền tảng blockchain khác, chẳng hạn như Bitcoin hay Ethereum, là sự nhấn mạnh vào tính năng “tự sửa đổi”, cho phép giao thức tự nâng cấp mà không cần hard fork. Đây là một lợi ích đáng kể vì nó làm cho giao thức có khả năng thích ứng và phù hợp với tương lai.
Tezos cũng cung cấp nền tảng cho các hợp đồng thông minh, là những hợp đồng tự thực hiện với thỏa thuận giữa người mua và người bán được viết trực tiếp thành dòng mã. Khả năng quản lý và xác minh các thỏa thuận kỹ thuật số này cung cấp nhiều ứng dụng tiềm năng, từ dịch vụ tài chính đến chuỗi cung ứng cho đến các ứng dụng phi tập trung (DApps). Đọc thêm về Tezos: Tezos là gì? Tất cả những điều bạn cần biết về XTZ
Để tạo hợp đồng thông minh trên Tezos, chúng tôi sử dụng ngôn ngữ có tên SmartPy. SmartPy là thư viện Python để phát triển các hợp đồng thông minh cho chuỗi khối Tezos. Đó là một ngôn ngữ trực quan và hiệu quả để diễn đạt các hợp đồng và các kịch bản thử nghiệm liên quan của chúng.
Tính năng đáng chú ý nhất của SmartPy là tích hợp với Python, một trong những ngôn ngữ lập trình phổ biến nhất và phát triển nhanh nhất thế giới. Nếu bạn đã quen thuộc với Python, bạn sẽ thấy SmartPy khá dễ sử dụng.
SmartPy bao gồm Môi trường phát triển tích hợp (IDE) đầy đủ tính năng có thể truy cập được từ trình duyệt web của bạn. Đi tới SmartPy IDE để bắt đầu viết hợp đồng thông minh đầu tiên của bạn.
Trong SmartPy IDE, bạn sẽ tìm thấy một cửa sổ chỉnh sửa nơi bạn có thể nhập mã hợp đồng của mình. Hãy bắt đầu bằng cách viết một hợp đồng cơ bản. Sao chép và dán đoạn mã sau vào trình soạn thảo SmartPy:
Python
import smartpy as sp
# A SmartPy module
@sp.module
def main():
# Một lớp hợp đồng
lớp MyContract(sp.Contract):
def __init__(self, myParameter1, myParameter2):
self.data.myParameter1 = myParameter1
self.data.myParameter2 = myParameter2
# Một điểm vào, tức là người nhận tin nhắn
# (hợp đồng phản ứng với tin nhắn)
@sp.entrypoint
def myEntryPoint(self, params):
khẳng định self.data.myParameter1 <= 123
self.data.myParameter1 += thông số
Mã hợp đồng này có một số phần quan trọng:
import smartpy as sp
- Thao tác này sẽ nhập thư viện SmartPy để chúng ta có thể sử dụng nó để viết hợp đồng.@sp.module
- Trình trang trí này cho trình thông dịch SmartPy biết rằng hàm này sẽ chứa hợp đồng SmartPy.class MyContract(sp.Contract):
- Ở đây chúng ta định nghĩa một lớp mới (một bản thiết kế chi tiết để tạo các đối tượng mới) cho hợp đồng của chúng ta. Nó kế thừa từ siêu lớp sp.Contract
, cung cấp nhiều chức năng hữu ích để xử lý trạng thái của hợp đồng và xác định hành vi của nó.self.data.myParameter1 = myParameter1
và self.data.myParameter2 = myParameter2
- Ở đây chúng ta đang xác định trạng thái ban đầu của hợp đồng. Hai tham số này sẽ được chuyển vào hợp đồng khi nó được triển khai trên blockchain.@sp.entrypoint
- Trình trang trí này cho trình thông dịch biết rằng hàm sau (myEntryPoint
) là điểm vào trong hợp đồng của chúng ta. Điểm đầu vào là cách chúng ta tương tác với hợp đồng của mình sau khi nó được triển khai.self.data.myParameter1 += params
- Dòng mã này tăng myParameter1
theo số lượng được chuyển đến myEntryPoint
.Một phần quan trọng của việc viết hợp đồng là kiểm tra chúng một cách kỹ lưỡng. Thử nghiệm trong SmartPy được tích hợp vào quá trình phát triển. Đây là cách bạn có thể thêm các bài kiểm tra vào hợp đồng:
Python
# Tests
@sp.add_test(name="Welcome")
def test():
# Chúng tôi xác định một kịch bản thử nghiệm, cùng với một số đầu ra và kiểm tra
# Kịch bản lấy mô-đun làm tham số
script = sp .test_scenario(chính)
script.h1("Chào mừng")
# Đầu tiên chúng ta xác định một hợp đồng và thêm nó vào kịch bản
c1 = main.MyContract(12, 123)
kịch bản += c1
# Và gọi một số điểm vào của nó
c1.myEntryPoint(12)
c1.myEntryPoint(13)
c1.myEntryPoint(14)
c1.myEntryPoint(50)
c1.myEntryPoint(50)
c1.myEntryPoint(50).run(valid=False) # dự kiến điều này sẽ thất bại
# Cuối cùng, chúng tôi kiểm tra kịch bản lưu trữ cuối cùng
của nó.verify(c1.data.myParameter1 == 151)
# Chúng ta có thể xác định một hợp đồng khác bằng trạng thái hiện tại của c1
c2 = main.MyContract(1, c1.data.myParameter1)
kịch bản += c2
kịch bản.verify(c2.data.myParameter2 == 151)
Hợp đồng đầy đủ của bạn bây giờ sẽ như thế này:
Python
import smartpy as sp
# Đây là trình soạn thảo SmartPy.
# Bạn có thể thử nghiệm SmartPy bằng cách tải mẫu.
# (trong menu Lệnh phía trên trình soạn thảo này)
#
# Một chương trình SmartPy điển hình có dạng sau:
# Một mô-đun SmartPy
@sp.module
def main():
# Một lớp hợp đồng
lớp MyContract(sp .Contract):
def __init__(self, myParameter1, myParameter2):
self.data.myParameter1 = myParameter1
self.data.myParameter2 = myParameter2
# Một điểm vào, tức là người nhận tin nhắn
# (hợp đồng phản ứng với tin nhắn)
@sp.entrypoint
def myEntryPoint(self, params):
khẳng định self.data.myParameter1 <= 123
self.data.myParameter1 += params
# Tests
@sp.add_test(name="Welcome")
def test():
# Chúng tôi xác định một kịch bản thử nghiệm, cùng với một số đầu ra và kiểm tra
# Kịch bản lấy mô-đun làm kịch bản tham số
= sp.test_scenario(chính)
script.h1("Chào mừng")
# Đầu tiên chúng ta xác định một hợp đồng và thêm nó vào kịch bản
c1 = main.MyContract(12, 123)
kịch bản += c1
# Và gọi một số điểm vào của nó
c1.myEntryPoint(12)
c1.myEntryPoint(13)
c1.myEntryPoint(14)
c1.myEntryPoint(50)
c1.myEntryPoint(50)
c1.myEntryPoint(50).run(valid=False) # dự kiến điều này sẽ thất bại
# Cuối cùng, chúng tôi kiểm tra kịch bản lưu trữ cuối cùng
của nó.verify(c1.data.myParameter1 == 151)
# Chúng ta có thể xác định một hợp đồng khác bằng trạng thái hiện tại của c1
c2 = main.MyContract(1, c1.data.myParameter1)
kịch bản += c2
kịch bản.verify(c2.data.myParameter2 == 151)
Sau khi viết hợp đồng và kiểm thử, bạn có thể chạy chúng trực tiếp trong IDE. Nhấp vào nút “Chạy” ở góc trên cùng bên phải của IDE. IDE sẽ biên dịch hợp đồng của bạn, chạy thử nghiệm và hiển thị kết quả đầu ra cùng với lời giải thích chi tiết về từng thao tác và thay đổi trạng thái.
Tóm lại, bài học này đã giới thiệu cho bạn về chuỗi khối Tezos và SmartPy, ngôn ngữ hợp đồng thông minh dành cho Tezos. Bạn cũng đã viết, hiểu và thử nghiệm hợp đồng SmartPy đầu tiên của mình. Đây mới chỉ là khởi đầu - còn rất nhiều điều nữa để tìm hiểu và làm với SmartPy và Tezos. Chúng tôi hy vọng bạn sẽ hào hứng tiếp tục cuộc hành trình này cùng chúng tôi trong các bài học sắp tới!
Trước khi có thể hiểu đầy đủ về Tezos và SmartPy, trước tiên chúng ta phải hiểu công nghệ nền tảng của tất cả: blockchain. Blockchain là một chuỗi các khối, trong đó mỗi khối chứa một danh sách các giao dịch. Công nghệ chuỗi khối cung cấp cơ sở dữ liệu phi tập trung hoặc “sổ cái kỹ thuật số” về các giao dịch mà tất cả những người tham gia mạng đều có thể nhìn thấy. Kiến trúc của nó đảm bảo rằng mọi giao dịch là duy nhất và một khi nó được ghi vào cơ sở dữ liệu thì không thể thay đổi.
Tezos là một trong những nền tảng blockchain như vậy. Điều khiến Tezos khác biệt so với nhiều nền tảng blockchain khác, chẳng hạn như Bitcoin hay Ethereum, là sự nhấn mạnh vào tính năng “tự sửa đổi”, cho phép giao thức tự nâng cấp mà không cần hard fork. Đây là một lợi ích đáng kể vì nó làm cho giao thức có khả năng thích ứng và phù hợp với tương lai.
Tezos cũng cung cấp nền tảng cho các hợp đồng thông minh, là những hợp đồng tự thực hiện với thỏa thuận giữa người mua và người bán được viết trực tiếp thành dòng mã. Khả năng quản lý và xác minh các thỏa thuận kỹ thuật số này cung cấp nhiều ứng dụng tiềm năng, từ dịch vụ tài chính đến chuỗi cung ứng cho đến các ứng dụng phi tập trung (DApps). Đọc thêm về Tezos: Tezos là gì? Tất cả những điều bạn cần biết về XTZ
Để tạo hợp đồng thông minh trên Tezos, chúng tôi sử dụng ngôn ngữ có tên SmartPy. SmartPy là thư viện Python để phát triển các hợp đồng thông minh cho chuỗi khối Tezos. Đó là một ngôn ngữ trực quan và hiệu quả để diễn đạt các hợp đồng và các kịch bản thử nghiệm liên quan của chúng.
Tính năng đáng chú ý nhất của SmartPy là tích hợp với Python, một trong những ngôn ngữ lập trình phổ biến nhất và phát triển nhanh nhất thế giới. Nếu bạn đã quen thuộc với Python, bạn sẽ thấy SmartPy khá dễ sử dụng.
SmartPy bao gồm Môi trường phát triển tích hợp (IDE) đầy đủ tính năng có thể truy cập được từ trình duyệt web của bạn. Đi tới SmartPy IDE để bắt đầu viết hợp đồng thông minh đầu tiên của bạn.
Trong SmartPy IDE, bạn sẽ tìm thấy một cửa sổ chỉnh sửa nơi bạn có thể nhập mã hợp đồng của mình. Hãy bắt đầu bằng cách viết một hợp đồng cơ bản. Sao chép và dán đoạn mã sau vào trình soạn thảo SmartPy:
Python
import smartpy as sp
# A SmartPy module
@sp.module
def main():
# Một lớp hợp đồng
lớp MyContract(sp.Contract):
def __init__(self, myParameter1, myParameter2):
self.data.myParameter1 = myParameter1
self.data.myParameter2 = myParameter2
# Một điểm vào, tức là người nhận tin nhắn
# (hợp đồng phản ứng với tin nhắn)
@sp.entrypoint
def myEntryPoint(self, params):
khẳng định self.data.myParameter1 <= 123
self.data.myParameter1 += thông số
Mã hợp đồng này có một số phần quan trọng:
import smartpy as sp
- Thao tác này sẽ nhập thư viện SmartPy để chúng ta có thể sử dụng nó để viết hợp đồng.@sp.module
- Trình trang trí này cho trình thông dịch SmartPy biết rằng hàm này sẽ chứa hợp đồng SmartPy.class MyContract(sp.Contract):
- Ở đây chúng ta định nghĩa một lớp mới (một bản thiết kế chi tiết để tạo các đối tượng mới) cho hợp đồng của chúng ta. Nó kế thừa từ siêu lớp sp.Contract
, cung cấp nhiều chức năng hữu ích để xử lý trạng thái của hợp đồng và xác định hành vi của nó.self.data.myParameter1 = myParameter1
và self.data.myParameter2 = myParameter2
- Ở đây chúng ta đang xác định trạng thái ban đầu của hợp đồng. Hai tham số này sẽ được chuyển vào hợp đồng khi nó được triển khai trên blockchain.@sp.entrypoint
- Trình trang trí này cho trình thông dịch biết rằng hàm sau (myEntryPoint
) là điểm vào trong hợp đồng của chúng ta. Điểm đầu vào là cách chúng ta tương tác với hợp đồng của mình sau khi nó được triển khai.self.data.myParameter1 += params
- Dòng mã này tăng myParameter1
theo số lượng được chuyển đến myEntryPoint
.Một phần quan trọng của việc viết hợp đồng là kiểm tra chúng một cách kỹ lưỡng. Thử nghiệm trong SmartPy được tích hợp vào quá trình phát triển. Đây là cách bạn có thể thêm các bài kiểm tra vào hợp đồng:
Python
# Tests
@sp.add_test(name="Welcome")
def test():
# Chúng tôi xác định một kịch bản thử nghiệm, cùng với một số đầu ra và kiểm tra
# Kịch bản lấy mô-đun làm tham số
script = sp .test_scenario(chính)
script.h1("Chào mừng")
# Đầu tiên chúng ta xác định một hợp đồng và thêm nó vào kịch bản
c1 = main.MyContract(12, 123)
kịch bản += c1
# Và gọi một số điểm vào của nó
c1.myEntryPoint(12)
c1.myEntryPoint(13)
c1.myEntryPoint(14)
c1.myEntryPoint(50)
c1.myEntryPoint(50)
c1.myEntryPoint(50).run(valid=False) # dự kiến điều này sẽ thất bại
# Cuối cùng, chúng tôi kiểm tra kịch bản lưu trữ cuối cùng
của nó.verify(c1.data.myParameter1 == 151)
# Chúng ta có thể xác định một hợp đồng khác bằng trạng thái hiện tại của c1
c2 = main.MyContract(1, c1.data.myParameter1)
kịch bản += c2
kịch bản.verify(c2.data.myParameter2 == 151)
Hợp đồng đầy đủ của bạn bây giờ sẽ như thế này:
Python
import smartpy as sp
# Đây là trình soạn thảo SmartPy.
# Bạn có thể thử nghiệm SmartPy bằng cách tải mẫu.
# (trong menu Lệnh phía trên trình soạn thảo này)
#
# Một chương trình SmartPy điển hình có dạng sau:
# Một mô-đun SmartPy
@sp.module
def main():
# Một lớp hợp đồng
lớp MyContract(sp .Contract):
def __init__(self, myParameter1, myParameter2):
self.data.myParameter1 = myParameter1
self.data.myParameter2 = myParameter2
# Một điểm vào, tức là người nhận tin nhắn
# (hợp đồng phản ứng với tin nhắn)
@sp.entrypoint
def myEntryPoint(self, params):
khẳng định self.data.myParameter1 <= 123
self.data.myParameter1 += params
# Tests
@sp.add_test(name="Welcome")
def test():
# Chúng tôi xác định một kịch bản thử nghiệm, cùng với một số đầu ra và kiểm tra
# Kịch bản lấy mô-đun làm kịch bản tham số
= sp.test_scenario(chính)
script.h1("Chào mừng")
# Đầu tiên chúng ta xác định một hợp đồng và thêm nó vào kịch bản
c1 = main.MyContract(12, 123)
kịch bản += c1
# Và gọi một số điểm vào của nó
c1.myEntryPoint(12)
c1.myEntryPoint(13)
c1.myEntryPoint(14)
c1.myEntryPoint(50)
c1.myEntryPoint(50)
c1.myEntryPoint(50).run(valid=False) # dự kiến điều này sẽ thất bại
# Cuối cùng, chúng tôi kiểm tra kịch bản lưu trữ cuối cùng
của nó.verify(c1.data.myParameter1 == 151)
# Chúng ta có thể xác định một hợp đồng khác bằng trạng thái hiện tại của c1
c2 = main.MyContract(1, c1.data.myParameter1)
kịch bản += c2
kịch bản.verify(c2.data.myParameter2 == 151)
Sau khi viết hợp đồng và kiểm thử, bạn có thể chạy chúng trực tiếp trong IDE. Nhấp vào nút “Chạy” ở góc trên cùng bên phải của IDE. IDE sẽ biên dịch hợp đồng của bạn, chạy thử nghiệm và hiển thị kết quả đầu ra cùng với lời giải thích chi tiết về từng thao tác và thay đổi trạng thái.
Tóm lại, bài học này đã giới thiệu cho bạn về chuỗi khối Tezos và SmartPy, ngôn ngữ hợp đồng thông minh dành cho Tezos. Bạn cũng đã viết, hiểu và thử nghiệm hợp đồng SmartPy đầu tiên của mình. Đây mới chỉ là khởi đầu - còn rất nhiều điều nữa để tìm hiểu và làm với SmartPy và Tezos. Chúng tôi hy vọng bạn sẽ hào hứng tiếp tục cuộc hành trình này cùng chúng tôi trong các bài học sắp tới!