第2課

合約存儲

歡迎回來!在第一課中,我們介紹了SmartPy和Tezos的基礎知識,創建了一個非常基礎的智能合約。在本課中,我們將深入探討Tezos智能合約中最重要的組成部分之一:存儲。

什麽是存儲?

在Tezos智能合約中,存儲就像合約的內存,是保存與合約相關的所有數據的地方。從本質上説,它充當我們合約的狀態,存儲在多筆交易中持續存在的值,併使智能合約能夠“記住”信息。正是這種能力使我們能夠在Tezos區塊鏈上構建覆雜且有趣的去中心化應用。

深入了解存儲

在分析本節課的代碼之前,我們將進一步了解存儲的概念。合約的存儲是在函數調用之間持續存在的狀態。如果你具有編程背景,可以將其視爲合約的“全局狀態”。它允許用戶與合約進行持續的互動。

我們來看看本節課的合約代碼:

Python
import smartpy as sp

@sp.module
def main():
    class StoreValue(sp.Contract):
        def __init__(self, value):
            self.data.storedValue = value

        @sp.entrypoint
        def replace(self, params):
            self.data.storedValue = params.value

        @sp.entrypoint
        def double(self):
            self.data.storedValue *= 2

        @sp.entrypoint
        def divide(self, params):
            assert params.divisor > 5
            self.data.storedValue /= params.divisor


if "templates" not in __name__:

    @sp.add_test(name="StoreValue")
    def test():
        c1 = main.StoreValue(12)
        scenario = sp.test_scenario(main)
        scenario.h1("Store Value")
        scenario += c1
        c1.replace(value=15)
        scenario.p("Some computation").show(c1.data.storedValue * 12)
        c1.replace(value=25)
        c1.double()
        c1.divide(divisor=2).run(
            valid=False, exception="WrongCondition: params.divisor > 5"
        )
        scenario.verify(c1.data.storedValue == 50)
        c1.divide(divisor=6)
        scenario.verify(c1.data.storedValue == 8)

代碼解析與合約運行

在我們的存儲合約中,有多個入口點——replacedoubledivide。部署合約後,用戶可以調用這些入口點與合約進行交互。

對於replacedivide入口點,用戶必鬚在交易中提供參數。對於replace,需要參數value,對於divide,需要參數divisor

在SmartPy IDE上運行此合約時,你可以在右側看到合約運算和存儲的可視化錶示。你可以在這裡嘗試運行合約,具體步驟如下:

  1. 點擊Deploy按鈕,部署你的合約。

  2. 部署後,你將在Contracts下看到該合約。點擊該合約。

  3. 現在可以看到所列合約的入口點。

  4. 要調用replace,請在字段中輸入params.value的值,然後單擊replace按鈕。

  5. 要調用double,隻需單擊double按鈕。

  6. 要調用divide,請在字段中輸入params.divisor的值,然後單擊divide按鈕。
    每一次運行都會創建一個新運算,可以在每次運算後看到更新的合約存儲狀態。

在這個合約中,我們通過self.data.storedValue = value命令行強調了存儲的概念。其中,self.data指的是我們合約的存儲。這是我們保存合約狀態的地方:一個名爲storedValue的單一參數。

本合約也包含多個入口點。入口點本質上是允許外部方與合約交互的公共函數。這裡的入口點允許以各種方式修改storedValue。我們可以用一個新值替換它,或者將其翻倍,也可以用給定的除數除以它。

最後,我們可以試驗一下如下場景:爲storedValue創建一個初始值爲12的合約實例,然後調用入口點以各種方式修改storedValue的值併驗證結果。

存儲的重要性

在構建Tezos智能合衕時,存儲和更新值的能力非常重要。它允許數據在與合約的不衕交互中保持持久性。無論是維護代幣合約中的餘額,在去中心化應用中存儲用戶信息,還是在區塊鏈上保存游戲狀態,存儲都是實現這些功能的核心所在。

智能合約中的存儲可以包含簡單的值,如整數、字符串和布爾值,也可以包含更覆雜的數據結構,如列錶、映射和自定義對象。這使我們能夠在合約中構建覆雜的邏輯和狀態轉換。

在下一課中,我們將繼續探討這些核心概念,在智能合約中引入更覆雜的計算,併在我們的存儲合約中使用更高級的數據類型。請繼續關註。俗話説,熟能生巧。所以,不要猶豫,動手編寫你的代碼吧,嘗試多多修改併觀察結果,你一定能取得進步!

免責聲明
* 投資有風險,入市須謹慎。本課程不作為投資理財建議。
* 本課程由入駐Gate Learn的作者創作,觀點僅代表作者本人,絕不代表Gate Learn讚同其觀點或證實其描述。
目錄
第2課

合約存儲

歡迎回來!在第一課中,我們介紹了SmartPy和Tezos的基礎知識,創建了一個非常基礎的智能合約。在本課中,我們將深入探討Tezos智能合約中最重要的組成部分之一:存儲。

什麽是存儲?

在Tezos智能合約中,存儲就像合約的內存,是保存與合約相關的所有數據的地方。從本質上説,它充當我們合約的狀態,存儲在多筆交易中持續存在的值,併使智能合約能夠“記住”信息。正是這種能力使我們能夠在Tezos區塊鏈上構建覆雜且有趣的去中心化應用。

深入了解存儲

在分析本節課的代碼之前,我們將進一步了解存儲的概念。合約的存儲是在函數調用之間持續存在的狀態。如果你具有編程背景,可以將其視爲合約的“全局狀態”。它允許用戶與合約進行持續的互動。

我們來看看本節課的合約代碼:

Python
import smartpy as sp

@sp.module
def main():
    class StoreValue(sp.Contract):
        def __init__(self, value):
            self.data.storedValue = value

        @sp.entrypoint
        def replace(self, params):
            self.data.storedValue = params.value

        @sp.entrypoint
        def double(self):
            self.data.storedValue *= 2

        @sp.entrypoint
        def divide(self, params):
            assert params.divisor > 5
            self.data.storedValue /= params.divisor


if "templates" not in __name__:

    @sp.add_test(name="StoreValue")
    def test():
        c1 = main.StoreValue(12)
        scenario = sp.test_scenario(main)
        scenario.h1("Store Value")
        scenario += c1
        c1.replace(value=15)
        scenario.p("Some computation").show(c1.data.storedValue * 12)
        c1.replace(value=25)
        c1.double()
        c1.divide(divisor=2).run(
            valid=False, exception="WrongCondition: params.divisor > 5"
        )
        scenario.verify(c1.data.storedValue == 50)
        c1.divide(divisor=6)
        scenario.verify(c1.data.storedValue == 8)

代碼解析與合約運行

在我們的存儲合約中,有多個入口點——replacedoubledivide。部署合約後,用戶可以調用這些入口點與合約進行交互。

對於replacedivide入口點,用戶必鬚在交易中提供參數。對於replace,需要參數value,對於divide,需要參數divisor

在SmartPy IDE上運行此合約時,你可以在右側看到合約運算和存儲的可視化錶示。你可以在這裡嘗試運行合約,具體步驟如下:

  1. 點擊Deploy按鈕,部署你的合約。

  2. 部署後,你將在Contracts下看到該合約。點擊該合約。

  3. 現在可以看到所列合約的入口點。

  4. 要調用replace,請在字段中輸入params.value的值,然後單擊replace按鈕。

  5. 要調用double,隻需單擊double按鈕。

  6. 要調用divide,請在字段中輸入params.divisor的值,然後單擊divide按鈕。
    每一次運行都會創建一個新運算,可以在每次運算後看到更新的合約存儲狀態。

在這個合約中,我們通過self.data.storedValue = value命令行強調了存儲的概念。其中,self.data指的是我們合約的存儲。這是我們保存合約狀態的地方:一個名爲storedValue的單一參數。

本合約也包含多個入口點。入口點本質上是允許外部方與合約交互的公共函數。這裡的入口點允許以各種方式修改storedValue。我們可以用一個新值替換它,或者將其翻倍,也可以用給定的除數除以它。

最後,我們可以試驗一下如下場景:爲storedValue創建一個初始值爲12的合約實例,然後調用入口點以各種方式修改storedValue的值併驗證結果。

存儲的重要性

在構建Tezos智能合衕時,存儲和更新值的能力非常重要。它允許數據在與合約的不衕交互中保持持久性。無論是維護代幣合約中的餘額,在去中心化應用中存儲用戶信息,還是在區塊鏈上保存游戲狀態,存儲都是實現這些功能的核心所在。

智能合約中的存儲可以包含簡單的值,如整數、字符串和布爾值,也可以包含更覆雜的數據結構,如列錶、映射和自定義對象。這使我們能夠在合約中構建覆雜的邏輯和狀態轉換。

在下一課中,我們將繼續探討這些核心概念,在智能合約中引入更覆雜的計算,併在我們的存儲合約中使用更高級的數據類型。請繼續關註。俗話説,熟能生巧。所以,不要猶豫,動手編寫你的代碼吧,嘗試多多修改併觀察結果,你一定能取得進步!

免責聲明
* 投資有風險,入市須謹慎。本課程不作為投資理財建議。
* 本課程由入駐Gate Learn的作者創作,觀點僅代表作者本人,絕不代表Gate Learn讚同其觀點或證實其描述。
It seems that you are attempting to access our services from a Restricted Location where Gate 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.