首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于同时调用智能契约来设置变量状态的技术细节是什么?

关于同时调用智能契约来设置变量状态的技术细节是什么?
EN

Ethereum用户
提问于 2023-03-08 08:02:12
回答 3查看 21关注 0票数 0

我有一个问题,就是同时要求订立一项明智的合约。如果有两个用户调用一个智能契约同时设置同一个变量的状态,那么矿工如何处理它们,以及智能契约的最终一致性是什么?

例如,由于事务是有序的,如果userA set variable1 = 1userB set variable1 = 2,当两个矿工按照不同的顺序安排这两个事务时,variable1的最终状态可能是不同的。这意味着minerAtransactionB之前安排transactionAvariable1最终将是2,而minerBtransactionA之前安排transactionBvariable1最终将是1。variable1的最终状态将不一致。

EN

回答 3

Ethereum用户

发布于 2023-03-09 06:44:34

所有块按顺序排列,以便事务处理。两个块共享相同的父块并具有相同的块号是不可能的。

以前是在合并之前发生的。在战俘时代,经常看到两个矿工几乎同时生产一块。在这些情况下,其中一个块必须是孤立的,这称为链reorg。

孤立块的事务重新输入内存池,并等待在以后的块中再次被挖掘。

票数 0
EN

Ethereum用户

发布于 2023-03-09 10:43:15

如果两个用户同时设置相同变量的状态,块链中将只包含一个事务。这是一种“种族状况”,可能导致意想不到的行为。开发人员可以使用锁或其他技术来确保一次只有一个事务可以修改变量,或者使用冲突解决机制来处理并发访问。

代码语言:javascript
复制
contract LockedCounter {
    uint256 private counter;
    bool private locked;

    function increment() public {
        require(!locked, "LockedCounter: contract is locked");
        locked = true;
        counter += 1;
        locked = false;
    }

    function getCounter() public view returns (uint256) {
        return counter;
    }
}
票数 0
EN

Ethereum用户

发布于 2023-03-19 01:24:51

合同的状态只能从交易中修改。事务按矿商/块投标人的顺序执行。

块链结构使得不可能同时执行两个事务以进入不一致状态。

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

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

复制
相关文章

相似问题

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