当智能合同在同一块中得到几个类似的调用时,会发生什么情况?
例如,请考虑以下几个方面:
contract greeter {
string name;
function setName(string name_) {
name = name_;
}
function getName() constant returns(string) {
return name;
}
}如果鲍勃、艾丽斯和伊芙同时给希腊人打电话,而这三个电话都在同一个街区里怎么办?是否每个人都有自己的名字得到正确的回应?合同有三次吗?
发布于 2016-04-10 22:31:27
将调用这三个事务,而不一定按顺序调用,最后一个事务的名称将持久化在挖掘的块中。
不是的。getName()方法将返回被挖掘块中的持久化名称--这是由最后一个事务设置的。
是。setName()将运行三次。
提到在单个事务中,对合同的多个调用的顺序和并发行为是什么?:
所以:
setName(...),但首先执行事务的顺序是任意的,假设事务与: addresses (不同的帐户)不同。getName()的调用将在块被挖掘后返回该块中持久化的名称。getName(),将从Greeter契约以前运行的任何事务获得getName()值。谢谢@Tjaden澄清这个问题。下面是上面最后两点的例子:
getName()会把鲍勃还给他。getName()的调用现在将返回Alice。发布于 2016-05-28 15:04:45
简单回答:两个事务将在同一个块中执行。重要事项:矿工决定块内事务的顺序。
扩展:在Ethereum中,每个事务都会触发一个代码执行,以更新整个世界状态。对于块中的每个事务,n-事务的世界状态的输出成为n+1事务的输入状态。没有关于块内事务执行顺序的假设。当一个区块被开采时,由矿工来决定订单。任何契约都不应依赖于事务在其代码执行中的排序。
https://ethereum.stackexchange.com/questions/2856
复制相似问题