Tezos上的智能合約可以有多個入口點,入口點可以看作是麵曏對象編程中的方法或函數。每個入口點都可以有自己的參數,併且可以與合約的存儲進行交互。在我們的計算器合約中,每個數學運算都將是一個入口點。
需要註意的是,對存儲數據的任何修改都將記録在區塊鏈上。因此,我們執行的運算不像常規計算器中那樣隻能短暫存儲。在Tezos區塊鏈上,這些運算是不可篡改且可審計的。
此外,需要註意的是,由於Tezos區塊鏈是去中心化的,所有計算都應該是確定性的。因此,像除法這樣的運算可能與你所熟悉的稍有不衕。在Tezos合約中,除法是整數除法,因此3除以2將得到1,而不是1.5。
下麵是該計算器合約的代碼。Calculator
合約將運算結果保存在其存儲空間中。每個入口點都將接收一個參數,併使用存儲結果和輸入參數執行運算。
Python
import smartpy as sp
@sp.module
def main():
class Calculator(sp.Contract):
def __init__(self):
self.data.result = 0
@sp.entrypoint
def multiply(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):
assert x >= 0
y = x
while y * y > x:
y = (x / y + y) / 2
assert y * y <= x and x < (y + 1) * (y + 1)
self.data.result = y
@sp.entrypoint
def factorial(self, x):
self.data.result = 1
for y in range(1, x + 1):
self.data.result *= y
@sp.entrypoint
def log2(self, x):
self.data.result = 0
y = x
while y > 1:
self.data.result += 1
y /= 2
if "templates" not in __name__:
@sp.add_test(name="Calculator")
def test():
c1 = main.Calculator()
scenario = sp.test_scenario(main)
scenario.h1("Calculator")
scenario += 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)
scenario.verify(c1.data.result == 524)
我們來實際操作一下如何實現這份合約!
第一步:將合約代碼粘貼到SmartPy IDE中。
第二步:點擊右上角的Run
按鈕來編譯併模擬合約。
第三步:觀察IDE右側的模擬結果。你可以看到每次運算(如乘法、加法、平方根等)後合約存儲的狀態。
第4步:任意修改運算參數併觀察合約存儲的變化!
現在,你已經學會了構建和運行計算器智能合約,該合約能夠執行基本的運算!在下一課中,我們將學習更高級的概念,如FIFO合約創建。最後,再次勉勵大家,繼續探索,開啟愉快的編程之旅!
Tezos上的智能合約可以有多個入口點,入口點可以看作是麵曏對象編程中的方法或函數。每個入口點都可以有自己的參數,併且可以與合約的存儲進行交互。在我們的計算器合約中,每個數學運算都將是一個入口點。
需要註意的是,對存儲數據的任何修改都將記録在區塊鏈上。因此,我們執行的運算不像常規計算器中那樣隻能短暫存儲。在Tezos區塊鏈上,這些運算是不可篡改且可審計的。
此外,需要註意的是,由於Tezos區塊鏈是去中心化的,所有計算都應該是確定性的。因此,像除法這樣的運算可能與你所熟悉的稍有不衕。在Tezos合約中,除法是整數除法,因此3除以2將得到1,而不是1.5。
下麵是該計算器合約的代碼。Calculator
合約將運算結果保存在其存儲空間中。每個入口點都將接收一個參數,併使用存儲結果和輸入參數執行運算。
Python
import smartpy as sp
@sp.module
def main():
class Calculator(sp.Contract):
def __init__(self):
self.data.result = 0
@sp.entrypoint
def multiply(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):
assert x >= 0
y = x
while y * y > x:
y = (x / y + y) / 2
assert y * y <= x and x < (y + 1) * (y + 1)
self.data.result = y
@sp.entrypoint
def factorial(self, x):
self.data.result = 1
for y in range(1, x + 1):
self.data.result *= y
@sp.entrypoint
def log2(self, x):
self.data.result = 0
y = x
while y > 1:
self.data.result += 1
y /= 2
if "templates" not in __name__:
@sp.add_test(name="Calculator")
def test():
c1 = main.Calculator()
scenario = sp.test_scenario(main)
scenario.h1("Calculator")
scenario += 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)
scenario.verify(c1.data.result == 524)
我們來實際操作一下如何實現這份合約!
第一步:將合約代碼粘貼到SmartPy IDE中。
第二步:點擊右上角的Run
按鈕來編譯併模擬合約。
第三步:觀察IDE右側的模擬結果。你可以看到每次運算(如乘法、加法、平方根等)後合約存儲的狀態。
第4步:任意修改運算參數併觀察合約存儲的變化!
現在,你已經學會了構建和運行計算器智能合約,該合約能夠執行基本的運算!在下一課中,我們將學習更高級的概念,如FIFO合約創建。最後,再次勉勵大家,繼續探索,開啟愉快的編程之旅!