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

免責聲明
* 投資有風險,入市須謹慎。本課程不作為投資理財建議。
* 本課程由入駐Gate Learn的作者創作,觀點僅代表作者本人,絕不代表Gate Learn讚同其觀點或證實其描述。
目錄
第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合約創建。最後,再次勉勵大家,繼續探索,開啟愉快的編程之旅!

免責聲明
* 投資有風險,入市須謹慎。本課程不作為投資理財建議。
* 本課程由入駐Gate Learn的作者創作,觀點僅代表作者本人,絕不代表Gate Learn讚同其觀點或證實其描述。
It seems that you are attempting to access our services from a Restricted Location where Gate.io is unable to provide services. We apologize for any inconvenience this may cause. Currently, the Restricted Locations include but not limited to: the United States of America, Canada, Cambodia, Thailand, Cuba, Iran, North Korea and so on. For more information regarding the Restricted Locations, please refer to the User Agreement. Should you have any other questions, please contact our Customer Support Team.