目前CKB的脚本能实现向外转账吗?

比如一个抽奖的脚本,多个地址向抽奖地址打币,满足某种条件(余额或时间)后,脚本自动抽出获奖者,并把币打回。

稍微研究了一下,感觉不借助链外的程序很难发起向外转账的交易,但我对CKB的脚本还一知半解,不确定是不是这样。求教!

首先,基于时间的自动化在大部分公链里面都无法实现,CKB 也无法实现,这是因为节点很难对此达成共识。

其次,基于余额的自动化在账户体系下很容易实现。例如以太坊中,收款余额超过 100,自动划转给另一个地址的实现是很简单的。在 ckb 下,由于链上无法直接统计某个地址的余额,因此不容易实现类似的功能。

但仔细想一下,以太坊实现类似的功能其实有问题。问题在于,用户在转账时并不知道会不会触发自动化的功能,因此 TA 支付的 gas 往往仅限于转账费用。因此用户实际上并不能真正将后面的自动化脚本处罚成功。基于账户模型的以太坊上的交易在发送时是不确定的,用户不知道它会不会成功、造成什么结果、消耗多少 gas。

对应地,CKB 的业务逻辑是确定性逻辑。交易发起人明确知道自己的交易造成的结果和消耗的 cycle,这笔交易要么失败不上链,要么以用户期待的结果运行。

我们再来看“自动化”这个需求,它意味着交易发起人对交易造成的后果无法预知。这件事情在 CKB 上是不被允许的。我们认为一切类似的需求不应该由公链处理,应该由 Layer2 来处理,仅将结果通知到 CKB 上(并经过验证)。这样才是正确的模式。去中心化在这个过程中并没有被削弱,只要我们对提交到 CKB 的状态来源不做限制,任何人都可以计算出结果提交。

3 Likes

以太坊的Gas计算也可以估算

先不说ckb脚本的问题。
这个需求就有两个难题。
一个是触发的问题。区块链是一个状态机, 没有交易的时候是不动的(仅就世界状态来说,出块不算)。类似抽奖这样的需求,最简单的做法就是最后一个人触发。但是这就有个问题,如果最后一个人不管因为什么原因,一直不发交易,那这个流程就一直结束不了。需要额外增加超时等处理,逻辑会变复杂。
二是随机数的问题。抽奖一般都要用到随机数。如果随机数是所有参与的人交易里带的,那么最后一个人发交易的时候,其实结果就是可以预期的了。他可以在链下反复尝试,找到对自己有利的随机数。这个叫“最后一手”问题。

2 Likes

哇,解释得好清楚!:+1:
之前也隐隐觉得我的这个问题在逻辑上好像有些说不通的地方,经你一点恍然大悟。
关于随机数,有没有可能让多方同时参与随机数产生的过程?

这个问题也是一个研究热点,相关的文章还挺多的,单是目前好像没有特别好的方法。
随便在网上搜的一篇 http://www.yibenchain.com/news/show/3646.html

这个论坛有很多

我以为你看过的 @rink1969

3 Likes