在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)
在我們的存儲合約中,有多個入口點——replace
、double
和divide
。部署合約後,用戶可以調用這些入口點與合約進行交互。
對於replace
和divide
入口點,用戶必鬚在交易中提供參數。對於replace
,需要參數value
,對於divide
,需要參數divisor
。
在SmartPy IDE上運行此合約時,你可以在右側看到合約運算和存儲的可視化錶示。你可以在這裡嘗試運行合約,具體步驟如下:
點擊Deploy
按鈕,部署你的合約。
部署後,你將在Contracts
下看到該合約。點擊該合約。
現在可以看到所列合約的入口點。
要調用replace
,請在字段中輸入params.value
的值,然後單擊replace
按鈕。
要調用double
,隻需單擊double
按鈕。
要調用divide
,請在字段中輸入params.divisor
的值,然後單擊divide
按鈕。
每一次運行都會創建一個新運算,可以在每次運算後看到更新的合約存儲狀態。
在這個合約中,我們通過self.data.storedValue = value
命令行強調了存儲的概念。其中,self.data
指的是我們合約的存儲。這是我們保存合約狀態的地方:一個名爲storedValue
的單一參數。
本合約也包含多個入口點。入口點本質上是允許外部方與合約交互的公共函數。這裡的入口點允許以各種方式修改storedValue
。我們可以用一個新值替換它,或者將其翻倍,也可以用給定的除數除以它。
最後,我們可以試驗一下如下場景:爲storedValue
創建一個初始值爲12
的合約實例,然後調用入口點以各種方式修改storedValue
的值併驗證結果。
在構建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)
在我們的存儲合約中,有多個入口點——replace
、double
和divide
。部署合約後,用戶可以調用這些入口點與合約進行交互。
對於replace
和divide
入口點,用戶必鬚在交易中提供參數。對於replace
,需要參數value
,對於divide
,需要參數divisor
。
在SmartPy IDE上運行此合約時,你可以在右側看到合約運算和存儲的可視化錶示。你可以在這裡嘗試運行合約,具體步驟如下:
點擊Deploy
按鈕,部署你的合約。
部署後,你將在Contracts
下看到該合約。點擊該合約。
現在可以看到所列合約的入口點。
要調用replace
,請在字段中輸入params.value
的值,然後單擊replace
按鈕。
要調用double
,隻需單擊double
按鈕。
要調用divide
,請在字段中輸入params.divisor
的值,然後單擊divide
按鈕。
每一次運行都會創建一個新運算,可以在每次運算後看到更新的合約存儲狀態。
在這個合約中,我們通過self.data.storedValue = value
命令行強調了存儲的概念。其中,self.data
指的是我們合約的存儲。這是我們保存合約狀態的地方:一個名爲storedValue
的單一參數。
本合約也包含多個入口點。入口點本質上是允許外部方與合約交互的公共函數。這裡的入口點允許以各種方式修改storedValue
。我們可以用一個新值替換它,或者將其翻倍,也可以用給定的除數除以它。
最後,我們可以試驗一下如下場景:爲storedValue
創建一個初始值爲12
的合約實例,然後調用入口點以各種方式修改storedValue
的值併驗證結果。
在構建Tezos智能合衕時,存儲和更新值的能力非常重要。它允許數據在與合約的不衕交互中保持持久性。無論是維護代幣合約中的餘額,在去中心化應用中存儲用戶信息,還是在區塊鏈上保存游戲狀態,存儲都是實現這些功能的核心所在。
智能合約中的存儲可以包含簡單的值,如整數、字符串和布爾值,也可以包含更覆雜的數據結構,如列錶、映射和自定義對象。這使我們能夠在合約中構建覆雜的邏輯和狀態轉換。
在下一課中,我們將繼續探討這些核心概念,在智能合約中引入更覆雜的計算,併在我們的存儲合約中使用更高級的數據類型。請繼續關註。俗話説,熟能生巧。所以,不要猶豫,動手編寫你的代碼吧,嘗試多多修改併觀察結果,你一定能取得進步!