Lição 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智能合同时,存储和更新值的能力非常重要。它允许数据在与合约的不同交互中保持持久性。无论是维护代币合约中的余额,在去中心化应用中存储用户信息,还是在区块链上保存游戏状态,存储都是实现这些功能的核心所在。

智能合约中的存储可以包含简单的值,如整数、字符串和布尔值,也可以包含更复杂的数据结构,如列表、映射和自定义对象。这使我们能够在合约中构建复杂的逻辑和状态转换。

在下一课中,我们将继续探讨这些核心概念,在智能合约中引入更复杂的计算,并在我们的存储合约中使用更高级的数据类型。请继续关注。俗话说,熟能生巧。所以,不要犹豫,动手编写你的代码吧,尝试多多修改并观察结果,你一定能取得进步!

Isenção de responsabilidade
* O investimento em criptomoedas envolve grandes riscos. Prossiga com cautela. O curso não se destina a servir de orientação para investimentos.
* O curso foi criado pelo autor que entrou para o Gate Learn. As opiniões compartilhadas pelo autor não representam o Gate Learn.
Catálogo
Lição 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智能合同时,存储和更新值的能力非常重要。它允许数据在与合约的不同交互中保持持久性。无论是维护代币合约中的余额,在去中心化应用中存储用户信息,还是在区块链上保存游戏状态,存储都是实现这些功能的核心所在。

智能合约中的存储可以包含简单的值,如整数、字符串和布尔值,也可以包含更复杂的数据结构,如列表、映射和自定义对象。这使我们能够在合约中构建复杂的逻辑和状态转换。

在下一课中,我们将继续探讨这些核心概念,在智能合约中引入更复杂的计算,并在我们的存储合约中使用更高级的数据类型。请继续关注。俗话说,熟能生巧。所以,不要犹豫,动手编写你的代码吧,尝试多多修改并观察结果,你一定能取得进步!

Isenção de responsabilidade
* O investimento em criptomoedas envolve grandes riscos. Prossiga com cautela. O curso não se destina a servir de orientação para investimentos.
* O curso foi criado pelo autor que entrou para o Gate Learn. As opiniões compartilhadas pelo autor não representam o Gate Learn.