By Enrique Piqueras 28/Aug/2018
如果方法不得当,在诸如游戏之类的抽签中计算动态投注额会消耗很高的算力。下面,让我们看一个比较合适的方案......
在去中心化的应用程序中,最普遍的抽签方式就是:使用与用户所持有的令牌数量成比例的一个随机数。 如果只允许增加用户持有量,这就非常简单。 但是,如果你想在所有抽签轮次中自由更改用户持有量时,抽签的随机计算就会变得非常复杂......
基本的方式
构建这样的系统最简单方法是创建一个虚拟列表,其中包含每个参与抽签地址的区段。 使用一个存储变量来跟踪列表大小,并且每当有人改变持有量时:
tokenHolder.segmentStart = segmentSize;
segmentSize += _stake;
tokenHolder.segmentEnd = segmentSize;
这种方法存在两大问题(尽管根据使用情况,可能不会很严重)。首先,如果持有人希望更改或删除他们的投入额,那么拼接这个列表的计算成本会很高。其次,获得被抽中者需要迭代每位持有者,如下所示: