Lección 3

構建智能合約計算器

在本課中,我們將繼續學習SmartPy及其與Tezos區塊鏈的交互方式,創建一個基本的計算器。該合約將具有加法、減法、乘法和除法功能。

理論

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合約創建。最後,再次勉勵大家,繼續探索,開啟愉快的編程之旅!

Descargo de responsabilidad
* La inversión en criptomonedas implica riesgos significativos. Proceda con precaución. El curso no pretende ser un asesoramiento de inversión.
* El curso ha sido creado por el autor que se ha unido a Gate Learn. Cualquier opinión compartida por el autor no representa a Gate Learn.
Catálogo
Lección 3

構建智能合約計算器

在本課中,我們將繼續學習SmartPy及其與Tezos區塊鏈的交互方式,創建一個基本的計算器。該合約將具有加法、減法、乘法和除法功能。

理論

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合約創建。最後,再次勉勵大家,繼續探索,開啟愉快的編程之旅!

Descargo de responsabilidad
* La inversión en criptomonedas implica riesgos significativos. Proceda con precaución. El curso no pretende ser un asesoramiento de inversión.
* El curso ha sido creado por el autor que se ha unido a Gate Learn. Cualquier opinión compartida por el autor no representa a Gate Learn.