首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Smart合同国

Smart合同国
EN

Ethereum用户
提问于 2020-02-07 20:40:59
回答 2查看 399关注 0票数 1

在很多研究论文中,我都遇到过“状态”这个词,我想知道它们到底意味着什么是智能合同的状态。我知道下面的回答;但是,它只描述了状态更改的含义。

它储存的是什么,它存放在哪里?

EN

回答 2

Ethereum用户

发布于 2020-02-07 21:45:35

与其他形式的软件不同,在其他形式的软件中,数据(通常)位于管理它的软件之外,契约数据存储在逻辑上“在”契约本身内的名称空间(键/值存储)中。

在协议级别上,地址(包括合同)有余额。合同也有代码。该代码将在自己的命名空间中布局数据组织。这三者都包含在“国家”的概念中。在这种情况下,可以将其描述为条件或数据。

考虑一下这个简单的,人为的合同:

代码语言:javascript
复制
pragma solidity 0.5.16;

contract State {

    uint256 public someVal;

    function set(uint v) public payable {
        someVal = v;
    }
}

有一个getter函数(public),它将返回someVal。有一个函数可以更新它并接受以太。因此,合同中存储了一个uint,合同的余额不一定为零。此外,部署契约字节码的地址有代码。

这三种方法都是通过处理事务和计算链的“状态”来建立的。

顺便说一句,我们可以用如下方式限制允许的状态转换:

require(v > 100, "no small numbers, please.");

这将是除了协议级别的限制,如不发送更多的钱,实际有。

如果您对它的布局感兴趣,这里有一个过于简化的摘要。编译器将读取someVal并将其指定为“槽0”,因为它是第一个。EVM将使用hash(contractAddress,0)计算(伪)密钥。在散列中包含契约地址可防止与其他合同发生冲突。键提供了存储32字节字(值)的逻辑位置."State“可以理解为一个密钥/值存储,其中所有契约都根据自己的需要管理自己的变量,协议负责协议级别的关注,如平衡。

当您考虑到这一点时,请记住这是一种逻辑描述,不包括Merkle/Patricia试图帮助组织和验证的内容,它对物理存储、索引、缓存策略、轻量级客户端实现和其他客户端实现问题保持沉默。

希望能帮上忙。

票数 1
EN

Ethereum用户

发布于 2020-02-08 10:05:56

“状态”的定义是智能契约在其永久变量所描述的空间中所处的位置。

在smart契约只有一个bool变量的情况下,它可以假设两种状态。

在这种情况下,它有两个bool变量,没有更多,它可以假设四种状态(00-01-11-10)。

如果它应该有一个uint变量,那么它有2^256个状态。

诸若此类。

如果将每个可能的状态定义为变量空间中的单个点,则智能契约在其永久变量每次采用新值时从一个点移到另一个点,并且您可以完全描述它的状态,列出它的内部永久变量值。可能的轨迹取决于代码,其中一些是不允许的。

票数 1
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/79692

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档