nebulasio / neb.js

GNU Lesser General Public License v3.0
83 stars 46 forks source link

存储区变量赋值操作生效时机及是否是原子操作的问题? #49

Closed hiliushuo closed 6 years ago

hiliushuo commented 6 years ago

现在有个需求是想【满足某个条件的时候触发一方法执行,且该方法只允许执行一次】

目前实现思路是在中心化 server 判断当区块高度变化时轮询合约runGame方法,runGame方法中通过修改gameStatus的值

case 2:
if ( nowBlockH > openPrizeH) {
      this.gameStatus = 3;
}
break;
case 3:
if( !hasEnterOpenPriceMethod(period)) {    //hasEnterOpenPriceMethod方法中修改了一个存储区的变量用来标记当期游戏已进入过开奖方法
      openPrizeH();
}
break;

问题 this.gameStatus = 3; 这个操作的生效是需要整个 tx success 之后呢 还是说方法体中执行过这个语句之后立即生效呢? 这个赋值操作是原子操作吗?(会立即反应到存储区吗?)

感谢!~

hiliushuo commented 6 years ago

@yupnano 召唤大神!~

zhangzq94 commented 6 years ago

召唤大神

hiliushuo commented 6 years ago

问题用一句话描述就是 如何在合约里保证某一方法只能被执行一次😂,求大神帮忙~

yupnano commented 6 years ago

合约的链上数据的更改是在交易执行成功之后才会生效的,不过对同一合约的调用不会并发执行的,所以不用担心数据的同步问题。

hiliushuo commented 6 years ago

好的,感谢~~

hiliushuo commented 6 years ago

我们对事务的控制是Serializable级别的吗?

ChengOrangeJu commented 6 years ago

@hiliushuo 是的,可以理解为是Serializable级别

hiliushuo commented 6 years ago

好的,感谢