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

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

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

Tuyên bố từ chối trách nhiệm
* Đầu tư tiền điện tử liên quan đến rủi ro đáng kể. Hãy tiến hành một cách thận trọng. Khóa học không nhằm mục đích tư vấn đầu tư.
* Khóa học được tạo bởi tác giả đã tham gia Gate Learn. Mọi ý kiến chia sẻ của tác giả không đại diện cho Gate Learn.
Danh mục
Bài học 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智能合衕時,存儲和更新值的能力非常重要。它允許數據在與合約的不衕交互中保持持久性。無論是維護代幣合約中的餘額,在去中心化應用中存儲用戶信息,還是在區塊鏈上保存游戲狀態,存儲都是實現這些功能的核心所在。

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

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

Tuyên bố từ chối trách nhiệm
* Đầu tư tiền điện tử liên quan đến rủi ro đáng kể. Hãy tiến hành một cách thận trọng. Khóa học không nhằm mục đích tư vấn đầu tư.
* Khóa học được tạo bởi tác giả đã tham gia Gate Learn. Mọi ý kiến chia sẻ của tác giả không đại diện cho Gate Learn.