字节君带你深入了解 CKB 转账和各类 CKB 地址

大家好,我是字节君!

在上周的 YokaiSwap IDO 活动中,大家的参与热情远远超乎字节君的想象,24 小时冲进去了将近 22.37 亿 CKB,是目标额的 266 倍!

当然,也有一小部分小伙伴在参与的过程中遇到了一些小麻烦、小困惑,比如:

  • 为什么 CKB 有长地址、短地址之分?
  • 在某个交易所提现 CKB 时,为什么它不支持长地址?
  • 到底是用 L1 地址参与还是 L2 地址参与?

今天,字节君将给大家科普 CKB 转账和 CKB 地址相关的内容,相信大家看完文章以后,以上全部的疑问都会彻底搞懂。

在正式开始之前,字节君先给大家讲 2 个有关比特币的冷知识:1、比特币(BTC)转账的手续费(即矿工费)不是强制的;2、比特币也有最小转账金额限制。

天下没有免费的午餐,所以很多人想当然地认为,比特币转账一定需要手续费。其实,这是一个误解。在比特币的底层系统中,并没有对手续费做规定。也就是说,手续费并不是强制要收取的。

在早期,由于比特币价格低,链上转账数目少,很多矿工并不在意用户是否支付了手续费,所以很多没有支付手续费的比特币也被矿工打包确认了。比如下图,区块高度 10 万,这笔比特币转账就没有任何手续费。

但随着比特币价格的快速上扬,使用的人越来越多,链上转账也越来越多,为了让自己的利益最大化,矿工开始优先打包有手续费的成交。现在,如果转账不支付手续费,基本上不会被矿工打包确认。

再来说说第二个冷知识。

为了防止用户创建不经济的输出(Uneconomical Outputs,指价值低于交易费用的转账),从而增加 UTXO 集的大小,比特币核心(Bitcoin Core)和其他的一些比特币节点通常会拒绝转发或挖掘输出低于一定值(称为粉尘限制,dust limit)的交易。这个限制通常情况下是 546 聪,只不过因为这个数值实在太小,所以大家感觉不到这个限制而已。

回到正题,同比特币一样,CKB 也有最小转账金额限制——61CKB。 也就是说,你给任何 CKB 地址转账的时候,最少转 61 CKB。

看到这里,聪明的小伙伴或许想到了,如果你给一个新地址转入 61 CKB,那新地址的这 61 个 CKB 就无法转出了,因为转出的时候需要扣除手续费(即矿工费,虽然这个费用极其低,不到万分之一 CKB,但不能忽略不计),实际转出金额就小于 61 CKB 了,没有达到最小数额限制,因此无法转出。

那有没有解决方案呢?

有的。聪明的小伙伴或许也想到了,可以再往这个地址里转入 61 CKB 或者更多,然后将这个地址里的所有 CKB 一次性全部转出。当然,这样会比较麻烦,所以字节君建议大家在 CKB 转账的时候,最少转入 62 CKB,相当于预留了 1 个 CKB 当手续费。

CKB 设置最小转账金额限制的原因,和比特币有所不同。CKB 被誉为是「数字土地 」,因为在 Nervos CKB 区块链采用了 Cell 模型(比特币 UTXO 模型的改进版),在 CKB 链上存储任何东西(状态、合约信息、脚本等等),都需要占用链上空间,而在物理上 1 个 CKB 等于 1 个字节(Byte)的链上空间。

对于一个新的 CKB 地址而言,如果要在里面存 CKB,就需要部署相关信息,最少需要用到 61 个字节的链上空间(部署 type script 类型脚本,需要占用 8 个字节的空间;部署 lock script 锁定脚本,需要占用 53 个字节的空间,合计 61 个字节)。

因此,任何默认的 CKB 地址,其余额必须大于等于 61 CKB,或者为 0(相当于没有部署信息,或者已经抹去了之前部署的信息)。

CKB 转账,本质是 cell 的转让,每一次转账都会生成新的 cell,这和比特币转账本质是 UTXO 的转让类似。 如果你想更深入地理解,字节君推荐阅读《科普 | 没有 UTXO,比特币或不能如此稳定运行十多年》和《如何理解 Cell 模型》。

如果是 Nervos DAO,大家转入 CKB 的时候,最小转入金额限制是 102 CKB。 这是因为 Nervos DAO 需要在链上存储的信息更多,需要更大的容量的 cell,占用的链上空间也更多(容量占 8 个字节,锁定脚本占 53 个字节,类型脚本占 33 个字节,数据占 8 个字节,合计 102 字节)。

如果是 Nervos CKB 上的 sUDT(简单用户自定义代币,类似以太坊上的 ERC-20、ERC-721 代币),则最少需要容量为 142 CKB 的 cell。 无论是之前的 Coffee Token,还是秘宝的 NFT,转账时大家不需要额外支付手续费,这是因为它们的背后有 143 CKB,多出的 1 个 CKB 用作手续费。在目前手续费不到万分之一 CKB 的情况下,Coffee Token 和秘宝 NFT 可以「免费」转账上万次。

不同的应用,不同的操作,需要占用的链上空间不尽相同。 所以,大家在 BestDAS 上挂单,在 YokaiSwap 中从 L1 转入 L2,在 NexisDAO 上生成 dCKB 或者质押生成美元稳定币 TAI 等等,会看到不同的 CKB 最少转入金额限制或者是不同的 CKB 数量占用。

这么多数字相信大家很难记住,但如果不注意又可能会遇上类似「我钱包里明明有 61 个 CKB,为什么转不出去」这样的困境,那怎么解决呢?

字节君认为,目前最好的办法是,操作时(尤其是第一次操作时),对照着应用开发者给出的教程一步一步来,或者参考《Nervos 入门手册》中的教程来操作。 另外,大部分应用都会提示某些操作步骤对 CKB 有最少数量要求,需要大家在操作时细心留意。

《Nervos 入门手册》快捷网址:ckborg.bit.host

说完了 CKB 转账和 CKB 占用的内容,接下去字节君给大家聊聊 CKB 地址。

Nervos 在设计之初就采用了分层架构,所以会有 Layer 1 和各种不同的 Layer 2。 Layer 1 层是 CKB 区块链,类似于以太坊生态的 ETH 链。CKB 在 Layer 1 上的地址,遵循 BIP-173 规则,目前常用的有短地址和长地址两种格式。

  • 短地址格式:
    ckb1qypwvzc0pzu39zfw3yyaev84mexda04f80jsqscs9y
  • 长地址格式:
    ckb1qjl58smqy32hnrq6vxjedcxe2fugvnz497h7yvwqvwel40uh4rltcudl0qwf74tcvmc9t5fxasmu7vfm6qsucg6xtye

目前,Neuron 钱包和 imToken 钱包默认使用的都是 CKB 短地址格式,长度为 46 位。在 BestDAS 中,首选地址是长地址格式,备用地址是短地址格式。ckb.pw(Portal Wallet)可以将以太坊地址映射到 CKB 的长地址,从而实现用以太坊地址接收 CKB 的神奇功能。

参与过上周 YokaiSwap 某活动的小伙伴,可能遇到过自己的 CKB 在不支持长地址的交易所里,提现时输入地址会提示地址无效的情况。目前的解决方案有 2 种:

1、通过钱包中转的方式:比如 imToken,先提到 imToken 中的 CKB 钱包里,再从 imToken 转到长地址;

2、通过交易所中转的方式:比如,提到币安,再从币安提现到长地址。

当然,以上 2 种解决方案都不完美,字节君也觉得有点麻烦。完美的解决方案,是无论交易所还是钱包,都支持长地址和短地址转账。

好消息是,字节君了解到,Nervos 团队正在趁着即将到来的主网升级,让更多的交易所、钱包同时支持两种格式的地址。支持后,就没有这些烦恼了。

除了短地址和长地址两种格式外,Nervos 团队还在 CKB 主网上部署了 ACP lock 智能合约。 ACP 指的是 Anyone Can Pay,通过 ACP 地址你可以接收任意数量的 CKB 或者是 sUDT(简单用户自定义代币),而且事先钱包里不需要有任何数量的 CKB,非常方便。

对比之下,如果使用 CKB 短地址或者长地址,转账时至少转 61 个 CKB,在 Nervos 的其他生态应用中可能需要更多(上文字节君有给大家讲过,比如转入 Nervos DAO 时最少转 102 CKB);如果是接受 sUDT,钱包里还必须要有足够数量的 CKB。

因此,从用户体验的角度看,ACP 地址更加友好。

目前,第三方钱包中,比特派钱包已经支持并默认使用 ACP 地址了,但其他钱包、交易所暂时还不支持直接向新的 ACP 地址转账。如果你往比特派钱包里转入 CKB,但钱包余额一直没变化(没收到),不用担心,币没丢,你可以通过字节君之前写的教程找回:别慌,币没丢!用比特派钱包接收 CKB 需要注意的事项

无论是短地址、长地址还是 ACP 地址,都属于 Layer 1 地址(下文简称 L1 地址),因为 CKB 都是在 Layer 1 层。

随着 Nervos 上兼容 EVM 的 Layer 2 Rollup 高性能框架 Godwoken 上线 Mainnet Beta,会有越来越多的 Layer 2 项目出现。 这些 Layer 2 应用,比如 Nervos 上的首个 Layer 2 DEX YokaiSwap,会提供 CKB Layer 2 地址(下文简称 L2 地址)。如果你想参与到这些应用当中,就需要将 CKB 从 L1 地址充值(跨链)到 L2 地址。

细心的小伙伴可能已经发现,不同的 Nervos dApp,虽然都是用了同一个 ETH 钱包地址登录,但它们提供的 CKB 充值地址(通过 ETH 公私钥加密生成的 CKB 地址)却不尽相同,这让一些小伙伴感到困惑。

其实,这是 CKB 的底层太灵活造成的,它允许任意合约做 lock ,在这种情况下,会给 dApp 带来一个问题—— dApp 如何适配这些不同的 lock?也就是说,每个 dApp 要考虑我要不要适配单签?要不要适配 PW?要不要适配 UniPass ?对于每一个 identity 服务商,比如钱包,也要考虑要不要适配秘宝?要不要适配 Nervos DAO?

这里其实是一个 m dApp * n identity 如何匹配的问题。针对这个问题,目前也有 2 大解决方案:Mercury,以及建立属于 CKB 的,类似 Web3 的 universal protocol。

Mercury 的本质是抽象出地址中隐含的不同 lock 的差异,提供的是剥离 lock 差异后的抽象,给每一个 identity 服务商提供标准的接口,让他们在此标准基础上进行开发。其主要是提供一些方便开发者使用的接口,包括查询 CKB/UDT 余额、发起 CKB/UDT 转账、查询交易历史等等功能。

Mercury 首先会支持 CKB core 做的所有 lock,以及社区的一些 lock(比如 pw-lock)。Mercury 希望能做到生态里的所有钱包、交易所、矿池、dApp 都会跟 Mercury 打交道,而不是直接跟 CKB 打交道。

Mercury 于 11 月 初部署测试版,运行期间,不断优化其接口。上周,Mercury 已经稳定,并发布了正式版。 目前,Opera、MXC 均在集成测试过程中。同时,Mercury 团队也正在联系社区有关人士,让他们成为核心节点、indexer 和 Mercury 等设施的节点。

另一个解决方案,是 Nervos 开发者 xuejie 提出的。这个方案是构建一个属于 CKB, 类似 Web3 的 universal protocol,希望这样一个 protocol 能真正把生态中的 dApp 与身份提供方解耦。

实现后,大家通过 MetaMask 或者其他钱包连接,所有被 ETH 解锁的资产都被统一展示和控制(即便 lock 不同),看起来就像一个钱包的内部一样,而不是像现在的 DAS、NexisDAO 以及 YokaiSwap,虽然都使用相同的 ETH 公私钥连接了 MetaMask,但却有不同的地址和资产展示界面。让大家感受不到资产的割裂,是 Nervos 前进的方向。

最后,字节君最想说的是,Nervos 在很多方面做了非常具有前瞻性的创新,这些创新让它看起来和其他公链「格格不入」,甚至有些创新也带来了用户体验上的打折,但这些都是暂时性的。

一条一直在创新的公链,或许会走得慢,但长期来看,它会走得更远。


参考资料:

1、Uneconomical outputs | Bitcoin Optech

2、https://bitcoin.stackexchange.com/questions/86068/how-was-the-dust-limit-of-546-satoshis-was-chosen-why-not-550-satoshis

3、CKB 地址格式 | Welcome to CKB Docs

4、如何理解 Cell 模型 | Welcome to CKB Docs

5、https://bihu.com/article/1884386817

6、ACP Lock与check_onwer_mode的冲突 - #3 by xxuejie

1 Like