在很多研究论文中,我都遇到过“状态”这个词,我想知道它们到底意味着什么是智能合同的状态。我知道下面的回答;但是,它只描述了状态更改的含义。
它储存的是什么,它存放在哪里?
发布于 2020-02-07 21:45:35
与其他形式的软件不同,在其他形式的软件中,数据(通常)位于管理它的软件之外,契约数据存储在逻辑上“在”契约本身内的名称空间(键/值存储)中。
在协议级别上,地址(包括合同)有余额。合同也有代码。该代码将在自己的命名空间中布局数据组织。这三者都包含在“国家”的概念中。在这种情况下,可以将其描述为条件或数据。
考虑一下这个简单的,人为的合同:
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试图帮助组织和验证的内容,它对物理存储、索引、缓存策略、轻量级客户端实现和其他客户端实现问题保持沉默。
希望能帮上忙。
发布于 2020-02-08 10:05:56
“状态”的定义是智能契约在其永久变量所描述的空间中所处的位置。
在smart契约只有一个bool变量的情况下,它可以假设两种状态。
在这种情况下,它有两个bool变量,没有更多,它可以假设四种状态(00-01-11-10)。
如果它应该有一个uint变量,那么它有2^256个状态。
诸若此类。
如果将每个可能的状态定义为变量空间中的单个点,则智能契约在其永久变量每次采用新值时从一个点移到另一个点,并且您可以完全描述它的状态,列出它的内部永久变量值。可能的轨迹取决于代码,其中一些是不允许的。
https://ethereum.stackexchange.com/questions/79692
复制相似问题