Nervos CKB 应用层优势1:自由的手续费模型

需求背景

和古典互联网不同,区块链世界里面的活动都需要支付某种形式的手续费才能顺利进行。这部分手续费一方面是作为吞吐量受限环境下交易执行的“插队”费用,一方面是作为补贴基础设施提供方的“激励”费用。尽管前者可以通过抵押获得交易执行权的方式绕开,后者可以通过增发通胀的方式隐形收取,但系统的 Native Token 作为交易的直接或间接手续费计价单位是目前公链无法绕开的设计原则。

但这种将交易费用与特定代币绑定不利于应用的开发和推广。典型的困难有两个。首先,习惯了免费模式的古典互联网用户对于每次玩游戏或者操作一个 dApp 都需要付费会非常迷惑。其次,用户必须持有系统代币才可以进行业务,这大大提升了用户的认知门槛和操作难度。

CKB 允许用户免费使用区块链网络

CKB 采用类似 UXTO 的 Cell 模型实现交易,它允许一笔完整的交易由多方共同构造。举例来说,Alice 调用某游戏合约,需要支付约 10 CK Bytes 的手续费,她可以构造一个 Open TX 发送给游戏的运营方。该 Open TX 包括了 Alice 关心的所有数据,比如调用人、合约信息、状态结果信息以及相关签名等等,但并不包括手续费的相关信息(也因此 miner 会选择性忽略它)。

游戏运营方从吸引用户的角度出发,愿意补贴所有使用该游戏合约的用户。当它收到 Alice 发出的 Open TX 后,运营发马上补充手续费信息,合并成一个完成的 TX。在这个完整的 TX 中,既包含了 Alice 指定的 input cells 和 output cells,又包含了运营方补充的 input cell 作为手续费。这样矿工收到这笔交易后就会将交易打包,实现交易确认。

这种模式使得运营方可以像古典互联网一样让用户“免费”使用自己的服务,提高用户体验,降低用户门槛。

CKB 允许任意代币支付手续费

相对与 defi ,中心化交易其实有很多优势,其中之一就是它的手续费模型比较简单。假设用户在交易所持有 1000 DAI,他/她 将资产提现到本地钱包只需要支付以 DAI 计价的手续费即可,例如到帐 995 DAI,手续费 5 DAI。但在 defi 中,任何的交易动作都需要 Native Token 支付,如果用户账户仅仅有 1000 个 DAI,他/她 是无法提现的,还需要想办法购买一点点 Native Token 才行。这个问题将是主流市场用户进入区块链世界的一个较大障碍。

Nervos CKB 的 Open TX 可以通过技术设计允许用户使用任意矿工愿意接受的币种支付手续费。例如上面的例子,在 CKB 中用户可以直接将矿工费定为 5 DAI,然后发起 Open TX 交易。矿工在愿意接受 DAI 的前提下会接受该笔交易,并获得 5 DAI 手续费。

这种模式的实现细节和运营方代付手续费类似,只不过用户创建的 Open TX 交易中包含了一个输入大于输出的 Uer Defined Token 额度,矿工通过对这个差额的收取来获得自定义币种的手续费。

小结

Nervos CKB 的 Cell Model 使得手续费收取模型非常灵活,应用层开发者可以利用这种灵活性为终端用户带来更多的方便。需要指出的是,很多公链无法实现类似的功能一方面是技术限制,很大的另一方面则是经济模型的限制。大部分公链将 Native Token 的价值建立在瞬时交易手续费上,一旦允许更灵活的手续费模型,这样的经济模型就会面临失去支撑的风险。而 Nervos CKB 的 Native Token 价值建构在全球共识状态空间上,它是一个长期的模型,与交易手续费耦合度不高,因此可以安全地实现灵活手续费模型。这点也是 CKB 和其他公链的本质区别之一。

10 Likes

关于第二点“任意代币支付手续费”有点疑问。
用户只要有input,占了部分状态空间,就需要有capacity(必须是ckb)。即使在outpu里面返还,不会消耗,毕竟还是需要一点原生代币的。
UDT肯定是以data的形式存在input cell里的。矿工还要去解析data。。。
当然还是可以做到的,只是麻烦一点。
另外,这是不是意味着ckb给矿工的手续费不是自动结算的,而是需要矿工自己插入output的方式完成?

是的,技术细节没有写。当 capacity 不够的时候,如果 UDT 的差额利益足够大,矿工(或者其他用户)会插入一条 input 并产生一个指向自己的 UDT output(对于非矿工)来帮助这个 open tx 完成。

UDT 的解析是矿工完成的,按照类似 ERC20 的标准。早期矿工可能不愿做,但后面随着矿池竞争加剧,这部分手续费会有矿工开发系统来支持收取。

在应用层矿工可以通过插入 output 来收取这部分手续费。不过技术上也可以增加一些 coinbase TX 的定义来特殊处理以提高效率。可能实际实现会倾向与后一种。

2 Likes