Hợp đồng thông minh trên Tezos có thể có nhiều điểm vào, có thể được coi là phương thức hoặc chức năng trong lập trình hướng đối tượng. Mỗi điểm vào này có thể có các tham số riêng và có thể tương tác với bộ lưu trữ của hợp đồng. Trong hợp đồng máy tính của chúng tôi, mỗi phép toán sẽ là một điểm vào.
Điều quan trọng cần lưu ý là tất cả các sửa đổi của bộ lưu trữ đều được ghi lại trên blockchain. Do đó, các thao tác chúng tôi thực hiện không nhất thời như trong máy tính thông thường. Thay vào đó, chúng là các hoạt động bất biến và có thể kiểm tra được trên chuỗi khối Tezos.
Ngoài ra, cần nhớ rằng vì chuỗi khối Tezos được phân cấp nên tất cả các tính toán phải mang tính xác định. Điều này có nghĩa là các phép tính như phép chia có thể hoạt động hơi khác so với cách bạn thường làm. Ví dụ: phép chia trong hợp đồng Tezos là phép chia số nguyên, vì vậy 3 chia cho 2 sẽ bằng 1 chứ không phải 1,5.
Dưới đây là mã hợp đồng cho máy tính. Hợp đồng Calculator
lưu trữ kết quả của các hoạt động trong bộ lưu trữ của nó. Mỗi điểm vào lấy một tham số và thực hiện thao tác với kết quả được lưu trữ và tham số đầu vào.
Python
import smartpy as sp
@sp.module
def main():
class Máy tính(sp.Contract):
def __init__(self):
self.data.result = 0
@sp.entrypoint
def nhân(self, x, y):
self.data.result = x * y
@sp.entrypoint
def add(self, x, y):
self.data.result = x + y
@sp.entrypoint
def Square(self, x):
self.data.result = x * x
@sp.entrypoint
def SquareRoot(self, x):
khẳng định x >= 0
y = x
while y * y > x :
y = (x / y + y) / 2
khẳng định y * y <= x và x < (y + 1) * (y + 1)
self.data.result = y
@sp.entrypoint
def giai thừa(self, x):
self.data.result = 1
cho y trong phạm vi(1, x + 1):
self.data.result *= y
@sp.entrypoint
def log2(self, x) :
khẳng định x > 0, "Đầu vào phải lớn hơn 0"
self.data.result = 0 # Khởi tạo bộ đếm
nếu x < 1: # Đối với khoảng 0 < x < 1
y = x
trong khi y < 1:
self.data.result -= 1 # Giảm bộ đếm
y *= 2 # Nhân y với 2 cho đến khi y >= 1
else: # Với x >= 1
y = x
trong khi y >= 2:
self.data.result += 1 # Tăng bộ đếm
y /= 2 # Chia y cho 2
nếu "mẫu" không có trong __name__:
@sp.add_test(name="Calculator")
def test( ):
c1 = main.Calculator()
kịch bản = sp.test_scenario(main)
script.h1("Máy tính")
kịch bản += c1
c1.multiply(x=2, y=5)
c1.add(x=2, y=5)
c1.add(x=2, y=5)
c1.square(12)
c1.squareRoot(0)
c1.squareRoot(1234)
c1.factorial(100)
c1.log2(c1.data.result)
script.verify(c1.data.result == 524)
Hãy thực hiện hợp đồng này!
Bước 1: Dán mã hợp đồng vào SmartPy IDE.
Bước 2: Nhấp vào nút Run
ở phía trên bên phải để biên dịch và mô phỏng hợp đồng.
Bước 3: Quan sát kết quả mô phỏng ở phía bên phải của IDE. Bạn có thể xem trạng thái của bộ lưu trữ hợp đồng sau mỗi thao tác, như nhân, cộng, căn bậc hai, v.v.
Bước 4: Vui lòng sửa đổi các tham số cho các thao tác và quan sát những thay đổi trong việc lưu trữ hợp đồng!
Bây giờ bạn đã xây dựng và tương tác với một hợp đồng thông minh thực hiện các thao tác máy tính cơ bản! Trong bài học tiếp theo, chúng ta sẽ xem xét các khái niệm nâng cao hơn như tạo hợp đồng FIFO. Hãy nhớ tiếp tục khám phá và viết mã vui vẻ!
Hợp đồng thông minh trên Tezos có thể có nhiều điểm vào, có thể được coi là phương thức hoặc chức năng trong lập trình hướng đối tượng. Mỗi điểm vào này có thể có các tham số riêng và có thể tương tác với bộ lưu trữ của hợp đồng. Trong hợp đồng máy tính của chúng tôi, mỗi phép toán sẽ là một điểm vào.
Điều quan trọng cần lưu ý là tất cả các sửa đổi của bộ lưu trữ đều được ghi lại trên blockchain. Do đó, các thao tác chúng tôi thực hiện không nhất thời như trong máy tính thông thường. Thay vào đó, chúng là các hoạt động bất biến và có thể kiểm tra được trên chuỗi khối Tezos.
Ngoài ra, cần nhớ rằng vì chuỗi khối Tezos được phân cấp nên tất cả các tính toán phải mang tính xác định. Điều này có nghĩa là các phép tính như phép chia có thể hoạt động hơi khác so với cách bạn thường làm. Ví dụ: phép chia trong hợp đồng Tezos là phép chia số nguyên, vì vậy 3 chia cho 2 sẽ bằng 1 chứ không phải 1,5.
Dưới đây là mã hợp đồng cho máy tính. Hợp đồng Calculator
lưu trữ kết quả của các hoạt động trong bộ lưu trữ của nó. Mỗi điểm vào lấy một tham số và thực hiện thao tác với kết quả được lưu trữ và tham số đầu vào.
Python
import smartpy as sp
@sp.module
def main():
class Máy tính(sp.Contract):
def __init__(self):
self.data.result = 0
@sp.entrypoint
def nhân(self, x, y):
self.data.result = x * y
@sp.entrypoint
def add(self, x, y):
self.data.result = x + y
@sp.entrypoint
def Square(self, x):
self.data.result = x * x
@sp.entrypoint
def SquareRoot(self, x):
khẳng định x >= 0
y = x
while y * y > x :
y = (x / y + y) / 2
khẳng định y * y <= x và x < (y + 1) * (y + 1)
self.data.result = y
@sp.entrypoint
def giai thừa(self, x):
self.data.result = 1
cho y trong phạm vi(1, x + 1):
self.data.result *= y
@sp.entrypoint
def log2(self, x) :
khẳng định x > 0, "Đầu vào phải lớn hơn 0"
self.data.result = 0 # Khởi tạo bộ đếm
nếu x < 1: # Đối với khoảng 0 < x < 1
y = x
trong khi y < 1:
self.data.result -= 1 # Giảm bộ đếm
y *= 2 # Nhân y với 2 cho đến khi y >= 1
else: # Với x >= 1
y = x
trong khi y >= 2:
self.data.result += 1 # Tăng bộ đếm
y /= 2 # Chia y cho 2
nếu "mẫu" không có trong __name__:
@sp.add_test(name="Calculator")
def test( ):
c1 = main.Calculator()
kịch bản = sp.test_scenario(main)
script.h1("Máy tính")
kịch bản += c1
c1.multiply(x=2, y=5)
c1.add(x=2, y=5)
c1.add(x=2, y=5)
c1.square(12)
c1.squareRoot(0)
c1.squareRoot(1234)
c1.factorial(100)
c1.log2(c1.data.result)
script.verify(c1.data.result == 524)
Hãy thực hiện hợp đồng này!
Bước 1: Dán mã hợp đồng vào SmartPy IDE.
Bước 2: Nhấp vào nút Run
ở phía trên bên phải để biên dịch và mô phỏng hợp đồng.
Bước 3: Quan sát kết quả mô phỏng ở phía bên phải của IDE. Bạn có thể xem trạng thái của bộ lưu trữ hợp đồng sau mỗi thao tác, như nhân, cộng, căn bậc hai, v.v.
Bước 4: Vui lòng sửa đổi các tham số cho các thao tác và quan sát những thay đổi trong việc lưu trữ hợp đồng!
Bây giờ bạn đã xây dựng và tương tác với một hợp đồng thông minh thực hiện các thao tác máy tính cơ bản! Trong bài học tiếp theo, chúng ta sẽ xem xét các khái niệm nâng cao hơn như tạo hợp đồng FIFO. Hãy nhớ tiếp tục khám phá và viết mã vui vẻ!