Trong hợp đồng thông minh Tezos, Lưu trữ giống như bộ nhớ của hợp đồng. Đây là nơi lưu giữ tất cả các dữ liệu liên quan đến hợp đồng. Về cơ bản, nó hoạt động như trạng thái hợp đồng của chúng tôi, lưu trữ các giá trị tồn tại trong các giao dịch khác nhau và cho phép hợp đồng thông minh 'ghi nhớ' thông tin. Chính khả năng này cho phép chúng tôi xây dựng các ứng dụng phi tập trung phức tạp và hấp dẫn trên chuỗi khối Tezos.
Trước khi đi sâu vào mã của bài học này, hãy chia nhỏ khái niệm lưu trữ thêm một chút. Việc lưu trữ hợp đồng là trạng thái tồn tại giữa các lệnh gọi hàm. Nếu bạn xuất phát từ nền tảng lập trình truyền thống, bạn có thể coi đó là 'trạng thái toàn cầu' của hợp đồng. Đó là thứ cho phép người dùng tương tác liên tục với hợp đồng theo thời gian.
Bây giờ, chúng ta hãy xem mã hợp đồng của chúng tôi cho bài học này:
Python
import smartpy as sp
@sp.module
def main():
class StoreValue(sp.Contract):
def __init__(self, value):
self.data.storedValue = value
@sp.entrypoint
def thay thế(self, params):
self.data.storedValue = params.value
@sp.entrypoint
def double(self):
self.data.storedValue *= 2
@sp.entrypoint
def chia(self , params):
khẳng định params.divisor > 5
self.data.storedValue /= params.divisor
nếu "templates" không có trong __name__:
@sp.add_test(name="StoreValue")
def test() :
c1 = main.StoreValue(12)
kịch bản = sp.test_scenario(main)
script.h1("Cửa hàng Value")
kịch bản += c1
c1.replace(value=15)
kịch bản.p("Một số tính toán").show(c1.data.storedValue * 12)
c1.replace(value=25)
c1.double()
c1.divide(divisor=2).run(
valid=False, ngoại lệ="WrongCondition: params.divisor > 5"
)
script.verify(c1.data.storedValue == 50)
c1.divide(divisor=6)
script.verify(c1.data.storedValue == 8)
Trong ví dụ về hợp đồng lưu trữ, chúng tôi có một số điểm nhập - replace
, double
và divide
. Sau khi triển khai hợp đồng này, người dùng có thể gọi các điểm vào này để tương tác với hợp đồng.
Đối với các điểm vào replace
và divide
, người dùng phải cung cấp các tham số trong giao dịch. Đối với replace
, cần có một value
tham số và đối với divide
, cần có divisor
tham số.
Khi bạn chạy hợp đồng này trên SmartPy IDE, ở phía bên phải, bạn sẽ thấy phần trình bày trực quan về hoạt động và lưu trữ của hợp đồng. Bạn thực sự có thể mô phỏng tương tác của người dùng ở đây. Đây là hướng dẫn từng bước:
Triển khai hợp đồng của bạn bằng cách nhấp vào nút Deploy
.
Sau khi triển khai, bạn sẽ thấy hợp đồng được thể hiện trong Contracts
. Nhấn vào nó.
Bây giờ bạn sẽ thấy các điểm vào cho hợp đồng được liệt kê.
Để gọi replace
, hãy nhập giá trị cho params.value
vào trường, sau đó nhấp vào nút replace
.
Để gọi double
, chỉ cần nhấp vào nút double
.
Để gọi divide
, hãy nhập giá trị cho params.divisor
vào trường rồi bấm vào nút divide
.
Mỗi tương tác này sẽ tạo ra một hoạt động mới được liệt kê trong hợp đồng và bạn có thể xem trạng thái cập nhật của bộ nhớ hợp đồng sau mỗi hoạt động.
Trong hợp đồng này, chúng tôi nhấn mạnh khái niệm lưu trữ bằng dòng self.data.storedValue = value
. Ở đây, self.data
đề cập đến việc lưu trữ hợp đồng của chúng tôi. Đây là nơi chúng tôi lưu giữ trạng thái hợp đồng của mình: một tham số duy nhất có tên là storedValue
.
Chúng tôi cũng có một số điểm vào trong hợp đồng này. Điểm vào về cơ bản là các chức năng công cộng cho phép các bên bên ngoài tương tác với hợp đồng. Ở đây, điểm vào của chúng tôi cho phép sửa đổi storedValue
theo nhiều cách khác nhau. Chúng ta có thể thay thế nó bằng một giá trị mới, nhân đôi nó hoặc chia nó cho một ước số nhất định.
Tiếp theo, hãy xem xét kịch bản thử nghiệm mà chúng tôi đã thiết lập. Chúng tôi tạo một phiên bản hợp đồng của mình với giá trị ban đầu 12
cho storedValue
. Sau đó, chúng tôi gọi các điểm vào để sửa đổi giá trị của storedValue
theo nhiều cách khác nhau và xác thực kết quả.
Khả năng lưu trữ và cập nhật các giá trị trong kho lưu trữ của hợp đồng là nền tảng để xây dựng hợp đồng thông minh Tezos. Nó cho phép duy trì dữ liệu qua các tương tác khác nhau với hợp đồng. Cho dù đó là duy trì số dư trong hợp đồng mã thông báo, lưu trữ thông tin người dùng trong ứng dụng phi tập trung hay giữ trạng thái của trò chơi trên blockchain, lưu trữ là tính năng cốt lõi hỗ trợ các chức năng này.
Bộ lưu trữ trong hợp đồng thông minh có thể chứa các giá trị đơn giản như số nguyên, chuỗi và boolean hoặc các cấu trúc dữ liệu phức tạp hơn như danh sách, bản đồ và các đối tượng được xác định tùy chỉnh. Điều này cho phép chúng tôi xây dựng các chuyển đổi trạng thái và logic phức tạp trong hợp đồng của mình.
Trong bài học tiếp theo, chúng ta sẽ tiếp tục xây dựng dựa trên các khái niệm cốt lõi này, giới thiệu các phép tính phức tạp hơn trong hợp đồng thông minh và bắt đầu làm việc với các loại dữ liệu nâng cao hơn trong bộ lưu trữ hợp đồng của chúng ta. Vì vậy, hãy chú ý theo dõi và ghi nhớ: luyện tập tạo nên sự hoàn hảo. Đừng ngần ngại thử nghiệm mã, sửa đổi và quan sát kết quả!
Trong hợp đồng thông minh Tezos, Lưu trữ giống như bộ nhớ của hợp đồng. Đây là nơi lưu giữ tất cả các dữ liệu liên quan đến hợp đồng. Về cơ bản, nó hoạt động như trạng thái hợp đồng của chúng tôi, lưu trữ các giá trị tồn tại trong các giao dịch khác nhau và cho phép hợp đồng thông minh 'ghi nhớ' thông tin. Chính khả năng này cho phép chúng tôi xây dựng các ứng dụng phi tập trung phức tạp và hấp dẫn trên chuỗi khối Tezos.
Trước khi đi sâu vào mã của bài học này, hãy chia nhỏ khái niệm lưu trữ thêm một chút. Việc lưu trữ hợp đồng là trạng thái tồn tại giữa các lệnh gọi hàm. Nếu bạn xuất phát từ nền tảng lập trình truyền thống, bạn có thể coi đó là 'trạng thái toàn cầu' của hợp đồng. Đó là thứ cho phép người dùng tương tác liên tục với hợp đồng theo thời gian.
Bây giờ, chúng ta hãy xem mã hợp đồng của chúng tôi cho bài học này:
Python
import smartpy as sp
@sp.module
def main():
class StoreValue(sp.Contract):
def __init__(self, value):
self.data.storedValue = value
@sp.entrypoint
def thay thế(self, params):
self.data.storedValue = params.value
@sp.entrypoint
def double(self):
self.data.storedValue *= 2
@sp.entrypoint
def chia(self , params):
khẳng định params.divisor > 5
self.data.storedValue /= params.divisor
nếu "templates" không có trong __name__:
@sp.add_test(name="StoreValue")
def test() :
c1 = main.StoreValue(12)
kịch bản = sp.test_scenario(main)
script.h1("Cửa hàng Value")
kịch bản += c1
c1.replace(value=15)
kịch bản.p("Một số tính toán").show(c1.data.storedValue * 12)
c1.replace(value=25)
c1.double()
c1.divide(divisor=2).run(
valid=False, ngoại lệ="WrongCondition: params.divisor > 5"
)
script.verify(c1.data.storedValue == 50)
c1.divide(divisor=6)
script.verify(c1.data.storedValue == 8)
Trong ví dụ về hợp đồng lưu trữ, chúng tôi có một số điểm nhập - replace
, double
và divide
. Sau khi triển khai hợp đồng này, người dùng có thể gọi các điểm vào này để tương tác với hợp đồng.
Đối với các điểm vào replace
và divide
, người dùng phải cung cấp các tham số trong giao dịch. Đối với replace
, cần có một value
tham số và đối với divide
, cần có divisor
tham số.
Khi bạn chạy hợp đồng này trên SmartPy IDE, ở phía bên phải, bạn sẽ thấy phần trình bày trực quan về hoạt động và lưu trữ của hợp đồng. Bạn thực sự có thể mô phỏng tương tác của người dùng ở đây. Đây là hướng dẫn từng bước:
Triển khai hợp đồng của bạn bằng cách nhấp vào nút Deploy
.
Sau khi triển khai, bạn sẽ thấy hợp đồng được thể hiện trong Contracts
. Nhấn vào nó.
Bây giờ bạn sẽ thấy các điểm vào cho hợp đồng được liệt kê.
Để gọi replace
, hãy nhập giá trị cho params.value
vào trường, sau đó nhấp vào nút replace
.
Để gọi double
, chỉ cần nhấp vào nút double
.
Để gọi divide
, hãy nhập giá trị cho params.divisor
vào trường rồi bấm vào nút divide
.
Mỗi tương tác này sẽ tạo ra một hoạt động mới được liệt kê trong hợp đồng và bạn có thể xem trạng thái cập nhật của bộ nhớ hợp đồng sau mỗi hoạt động.
Trong hợp đồng này, chúng tôi nhấn mạnh khái niệm lưu trữ bằng dòng self.data.storedValue = value
. Ở đây, self.data
đề cập đến việc lưu trữ hợp đồng của chúng tôi. Đây là nơi chúng tôi lưu giữ trạng thái hợp đồng của mình: một tham số duy nhất có tên là storedValue
.
Chúng tôi cũng có một số điểm vào trong hợp đồng này. Điểm vào về cơ bản là các chức năng công cộng cho phép các bên bên ngoài tương tác với hợp đồng. Ở đây, điểm vào của chúng tôi cho phép sửa đổi storedValue
theo nhiều cách khác nhau. Chúng ta có thể thay thế nó bằng một giá trị mới, nhân đôi nó hoặc chia nó cho một ước số nhất định.
Tiếp theo, hãy xem xét kịch bản thử nghiệm mà chúng tôi đã thiết lập. Chúng tôi tạo một phiên bản hợp đồng của mình với giá trị ban đầu 12
cho storedValue
. Sau đó, chúng tôi gọi các điểm vào để sửa đổi giá trị của storedValue
theo nhiều cách khác nhau và xác thực kết quả.
Khả năng lưu trữ và cập nhật các giá trị trong kho lưu trữ của hợp đồng là nền tảng để xây dựng hợp đồng thông minh Tezos. Nó cho phép duy trì dữ liệu qua các tương tác khác nhau với hợp đồng. Cho dù đó là duy trì số dư trong hợp đồng mã thông báo, lưu trữ thông tin người dùng trong ứng dụng phi tập trung hay giữ trạng thái của trò chơi trên blockchain, lưu trữ là tính năng cốt lõi hỗ trợ các chức năng này.
Bộ lưu trữ trong hợp đồng thông minh có thể chứa các giá trị đơn giản như số nguyên, chuỗi và boolean hoặc các cấu trúc dữ liệu phức tạp hơn như danh sách, bản đồ và các đối tượng được xác định tùy chỉnh. Điều này cho phép chúng tôi xây dựng các chuyển đổi trạng thái và logic phức tạp trong hợp đồng của mình.
Trong bài học tiếp theo, chúng ta sẽ tiếp tục xây dựng dựa trên các khái niệm cốt lõi này, giới thiệu các phép tính phức tạp hơn trong hợp đồng thông minh và bắt đầu làm việc với các loại dữ liệu nâng cao hơn trong bộ lưu trữ hợp đồng của chúng ta. Vì vậy, hãy chú ý theo dõi và ghi nhớ: luyện tập tạo nên sự hoàn hảo. Đừng ngần ngại thử nghiệm mã, sửa đổi và quan sát kết quả!