Rust 重要开发者 Brian 的搭建并运行 CKB 初体验

  • Post author:
  • Post category:未分类

在这篇文章中,他记录下了自己创建、运行 CKB 的测试网和 dev chain 时详细的操作过程和心路历程,当然还包括了很多有实质帮助的建(tu)议(cao)。同时这篇文章也是很棒的初入 CKB 的开发者体验报告,记录下了 CKB 文档、testnet、ckb-cli 等的使用路径是否友善,还有哪些值得再提升的设计,如何让更多的开发者更「无痛」 的加入 CKB 生态等等。

原文中,我们可以发现 confuse、stuck 等单词会时常地出没在眼前,可以感受到 Brian 的认真与贴心。文末我们也整理了一些他遇到的坑或者建议,欢迎参考。如果您是之前没有接触过 CKB,又想要在 Nervos CKB 上开发玩耍的盆友,那么非常欢迎您来围观 Brian 的实操思路,在这篇文章中,您可以看到他踩过的那些坑,也许这可以帮助你省去一些时间。

原文链接:

https://talk.nervos.org/t/experience-report-first-time-building-and-running-ckb/4518

翻译 校对:姆斯哥 凯莉姐

Hi,最近我花了一些时间学习如何构建以及运行 CKB。在创建这个项目的过程中,我建立了 ckb 和 ckb-cli 以及可以挖矿的 devnet,把它连接到了测试网,用 ckb-cli 创建账户并在测试网上转账。

我发现当我着手一个新项目时,这种记录下我所看到的一切的方法,有助于我更好地理解这个项目。而且在这个过程中,几乎总是会出现许多简单的问题,如果能修正这些问题,那么其他人的体验也将会得到改善。

我希望记录下的这些经验能够向开发团队说明哪些地方是可以改进的,同时也能够帮助其他人开始在 CKB 上进行开发。感谢Aimee在资源和测试方面提供的帮助。

写于 2020 年 3 月 12 日至 4 月 5 日

初次尝试运行 CKB

我想要写一个可以运行在 CKB 上的软件,但首先我必须先学习如何建立、运行 CKB 以及使用它的工具。虽然我没有任何的区块链开发经验,但根据我过去的学习,我对 CKB 还是有一定了解的。我之前还在 CKB VM 上创建了一个项目:

http://www.ferrisfencing.org/

我开始是在 Nervos 的 GitHub 上下载那些主要的仓库,并且因此也来到了 Nervos 官网。我需要找到那些在 CKB 上构建以及运行私人测试网的文档,因为一旦我运行了一个测试节点,我将需要那些关于如何编写、部署和测试脚本的文档。

搭建 CKB

我点击进入到 Nervos 的开发文档 (https://docs.nervos.org/introduction/welcome.html) 之后,惊讶的发现这里面没有任何和构建 CKB 相关的内容。我想这可能是因为这个文档面向的是在 CKB 上构建的开发者,并假定他们不需要自己构建 CKB。不过就我个人而言,我希望构建并理解我的整个开发堆栈,尤其是对于像 CKB 这样还处在开发阶段的平台。

我浏览了一下 GitHub 上的 README,也没有看到任何关于如何构建 CKB 的文档。

虽然有两个名为「Get CKB」和「Quick Start」的链接,「Get CKB」的文档还包含了「从源代码构建」的部分,这些文档说要用make prod来构建 CKB。但因为 CKB 是一个 Rust 项目,我并不想这样做,相反的我想试试用cargo build,于是我便这么做了,而且还成功了。

我总是很好奇它们的 Makefiles 中添加了哪些其它的项目来增强 cargo,在这个例子中它只添加了–cfg disable_faketime。我不知道这是什么,但我猜 faketime 应该是在开发过程中可以使用的字段。我注记了这是一个「negative」cargo 特性,通常并不鼓励。

探索开发者文档

我似乎马上就远离了探索文档的「快乐路径」,因为我已经忽略了文档网站,并深入研究了 GitHub Repo 的 markdown,所以我退了回来并重新开始研究文档网站。

为了确保我没有漏掉什么主文档中我正在寻找的东西,我打开了「开始/介绍」的页面。这是关于运行节点、使用钱包以及交易的,不是开发者文档。

我发誓我是通过点击「开发者文档」链接来到这里的。我又检查了一遍——我是在nervos.org上点击了「开发者」→「文档」,最终访问到的 docs.nervos.org,这个网站将自己描述为:

这是 Nervos CKB 的文档站点。在这里,您可以了解 Nervos CKB 的设计,以及如何运行节点和挖出 CKByte 代币。

我很困惑这个文档的读者会是谁。

在这个网站上还有另外一个叫做「开发者指引」的文档,这个页面上也没有任何关于如何构建 CKB 的提示。我还注意到它强调使用名为「Aggron」的测试网,这让我感觉到自己运行自己测试网的方法可能并不受欢迎。

阅读测试网文档

基于文档,我的新计划是学习使用 testnet。虽然我打算使用自己创建的 CKB,不管文档是否要求我下载一个版本。

「Testnet Aggron」页面的第一段真的把我搞糊涂了:

我们即将部署一个 POA 算法以在测试网中产生区块。然而,这将会耗费一些时间去开发。在这之前只要每超过一小时没有出块,我们就会常规性的重置测试网。用于启动 Aggron 的链上规范已经在此发布,请参阅 Aggron 链的文件信息。

我认为这里的「我们」应该指的是 Nervos 这个项目,而不是教程文档中经常用来表示「你」的「royal we」。而且这个似乎是很久以前,也就是测试网刚被部署的时候就写了。(译者注:该页面写于 2019 年 12 月 9 号)。

这个页面让我们下载一个 CKB 新版本,然后我查看了CKB release的页面,发现最新的版本是v0.29.0。

我查看了v0.29.0的 tag,并且在调试模式下重建了 CKB。

这时我发现ckb-cli并非 ckb repo 的一部分,我很轻易的就能找到ckb-clirepo,但却遇到一个绊脚石。

创建ckb—cli

在ckb-cli中并没有v0.29.0的 tag。我并不知道ckb-cli的哪个版本和ckb是匹配的。这个差异让我怀疑从ckbrepo 中释放的 tarballs 是否包含ckb-cli。

我下载了0.29 tarball并发现它确实包含ckb-cli。我想确认它的 ckb-cli 是哪一个版本,而我除了运行最新版之外似乎别无选择。于是我便这么做了,然后看到的返回是:

ckb-cli 0.27.1 (9d0bf90 2020-01-31)

所以ckb0.29.0 是适配ckb-cli0.27.1 的,我猜这两个版本是松散耦合的,我应该总是使用其中一个的最新版本。

我确认了ckb-cli的最新版本号并且开始构建。这似乎还涉及建立另一个副本的 ckb。有点恼人,不过就这样吧。

在新的视窗中,我建立了PATH来让我有权限进入ckb和ckb-cli。

~/ckb-testing$ export PATH=$PATH:$HOME/ckb/target/debug/:$HOME/ckb-cli/target/debug~/ckb-testing$ ckb –versionckb 0.29.0 (a6733e6 2020-02-26)~/ckb-testing$ ckb-cli –versionckb-cli0.27.1(9d0bf902020-01-31)

我注意到在 testnet 页面上,ckb和ckb-cli的示例版本是 2019 年 11 月的,并且有相同的版本号:

ckb 0.25.2 (dda4ed9 2019-11-17)ckb-cli 0.25.2 (6ca7bbb 2019-11-17)

使用测试网

现在我想要连接测试网并且验证我是否有能用的工具。

以下是最初的说明:

在包含 CKB 二进制文件的目录中创建 aggron.toml

用ckb init –import-spec./aggron.toml –chain testnet的指令来初始化 CKB 节点。

aggron.toml的链接指向的是一个去年 12 月的 gist。我希望它还是有效的。

我创建了一个新的目录ckb-testing来装载我们测试网的数据,并将aggron.toml的事例包含在其中。

运行ckb init:

~/ckb-testing$ckbinit–import-spec./aggron.tml–chaintestnet

输出了:

testing$ckbinit–import-spec./aggron.toml–chaintestnetWARN:miningfeatureisdisabledbecauseoflackingtheblockassemblerconfigoptionsInitializedCKBdirectoryin/home/brian/ckb-testing/devnetcp./aggron.tomlspecs/testnet.tomlcreateckb.tomlcreateckb-miner.toml

这看起来像是成功了,复制了aggron.toml到specs/testnet.toml中,并且创建ckb.toml和ckb-miner.toml。我在两个新的 toml 文件旁边摸索了一下。

ckb.toml包含了下面几行:

[chain]#Choosethekindofchainstorun,possiblevalues:#-{file=specs/dev.toml}#-{bundled=specs/testnet.toml}#-{bundled=specs/mainnet.toml}spec={file=specs/testnet.toml}

它表明有一个内置的 testnet 定义,这让我怀疑它是否与我们自己的 testnet 定义一致。让我们看看能不能找到内建的定义。

我用fd在ckbrepo 中搜索配置 :

~/ckb$fdtestnet.tomlresource/specs/testnet.toml

果然没错!

这个内置的定义和开发者文档推荐的aggron.toml是一样的吗?

~/ckb$diff../ckb-testing/aggron.tomlresource/specs/testnet.toml10c10<#run`cargorunclihashes-b`togetthegenesishash—>#run`cargorunlist-hashes-b`togetthegenesishash

是的,除了有一条过时的评论之外。

继续跟着测试网的文档看下去吧老铁们……

包含aggron.toml的 gist 中有另外一个说明:

请确认 log 输出中的创世哈希是0x184ac4658ed0c04a126551257990db132366cac22ab6270bbbc1f8c3220f302d

但它却没有说如何验证。创世哈希并不是由ckb init输出的。在测试网文档中的下一步是ckb run,我执行了。Windows 的防火墙需要请求我的许可,我同意了(我此刻正运行在 WSL 上)。我看到一大串的 log 输出,ckb 已经开始跑了:

2020-03-2015:10:22.445-06:00mainINFOsentry**Notice**:TheckbprocesswillsendstacktracetosentryonRustpanics.Thisisenabledbydefaultbeforemainnet,whichcanbeoptedoutbysettingtheoption`dsn`toemptyintheconfigfile.TheDSNisnowhttps://[email protected]/14227952020-03-2015:10:23.354-06:00mainINFOmainMinerisdisabled,editckb.tomltoenableit2020-03-2015:10:23.374-06:00mainINFOckb-dbInitializeanewdatabase2020-03-2015:10:23.624-06:00mainINFOckb-dbInitdatabaseversion201911271355212020-03-2015:10:23.636-06:00mainINFOckb-chainStart:loadinglivecells…2020-03-2015:10:23.636-06:00mainINFOckb-chainDone:total2transactions.2020-03-2015:10:23.653-06:00mainINFOmainckbversion:0.29.0(a6733e62020-02-26)2020-03-2015:10:23.654-06:00mainINFOmainchaingenesishash:0x184ac4658ed0c04a126551257990db132366cac22ab6270bbbc1f8c3220f302d2020-03-2015:10:23.654-06:00mainINFOckb-networkGeneraterandomkey2020-03-2015:10:23.655-06:00mainINFOckb-networkwriterandomsecretkeyto/home/brian/ckb-testing/data/network/secret_key2020-03-2015:10:23.668-06:00mainINFOckb-networkListenonaddress:/ip4/0.0.0.0/tcp/8115/p2p/Qme9oaLbtaqF6JyZnZhrNPoW3dSPkzJSW1PGag3fKdEuaj2020-03-2015:10:23.718-06:00NetworkRuntime-1INFOckb-networkp2pserviceevent:ListenStarted{address:/ip4/0.0.0.0/tcp/8115}2020-03-2015:10:24.415-06:00NetworkRuntime-1INFOckb-relayRelayProtocol(1).connectedpeer=SessionId(1)2020-03-2015:10:24.415-06:00NetworkRuntime-0INFOckb-syncSyncProtocol.connectedpeer=SessionId(1)2020-03-2015:10:24.474-06:00NetworkRuntime-2INFOckb-syncIgnoringgetheadersfrompeer=SessionId(1)becausenodeisininitialblockdownload2020-03-2015:10:25.319-06:00NetworkRuntime-5INFOckb-relayRelayProtocol(1).connectedpeer=SessionId(2)2020-03-2015:10:25.433-06:00NetworkRuntime-4INFOckb-relayRelayProtocol(1).connectedpeer=SessionId(3)2020-03-2015:10:25.712-06:00NetworkRuntime-3INFOckb-relayRelayProtocol(1).connectedpeer=SessionId(4)2020-03-2015:10:26.346-06:00NetworkRuntime-1INFOckb-syncSyncProtocol.connectedpeer=SessionId(2)2020-03-2015:10:26.346-06:00NetworkRuntime-1INFOckb-syncIgnoringgetheadersfrompeer=SessionId(2)becausenodeisininitialblockdownload2020-03-2015:10:26.347-06:00NetworkRuntime-1INFOckb-syncSyncProtocol.connectedpeer=SessionId(3)2020-03-2015:10:26.347-06:00NetworkRuntime-1INFOckb-syncIgnoringgetheadersfrompeer=SessionId(3)becausenodeisininitialblockdownload2020-03-2015:10:26.347-06:00NetworkRuntime-1INFOckb-syncSyncProtocol.connectedpeer=SessionId(4)2020-03-2015:10:26.348-06:00NetworkRuntime-1INFOckb-syncIgnoringgetheadersfrompeer=SessionId(4)becausenodeisininitialblockdownload2020-03-2015:10:28.039-06:00ChainServiceINFOckb-chainblock:1,hash:0xcfbc1525e97bdb6e3202ff19270bddc1fcd6d8f1aee14c719064a8b989909f5d,epoch:0(1/1000),total_diff:0x1800060,txs:1

这个日志说明测试网有正确的创世哈希,而且我们正在同步区块。

我目前正在 2704 这个区块高度。我想知道测试网上有多少个块,这样我就知道还需要等待多久。

这是测试网专用的区块浏览器吗?我 google 了「nervos block explorer」然后找到了:

https://explorer.nervos.org/

还有测试网的浏览器:

https://explorer.nervos.org/aggron/

测试网上有 567493 个区块,不过我并不会特别兴奋地等它下载完。

我的数据目录大小约为 7MB,所以我估计需要 (600_000/3000 * 7)= ~1.4GB的空间来进行测试网的开发,还是扛得住的。不过我真的不想等着同步,所以我们继续下个部分吧。

下一个文档是「Dev Chain」,希望它能告诉我们如何使用我们自己的链。

设置 dev chain

我暂时停止了正在同步测试网的ckb,将它的所有数据移动到ckb-testing/testnet,然后继续用ckb运行来同步测试网。

紧接着我创建了ckb-testing/devnet。根据 dev chain 的文档我执行了:

ckbinit–chaindev

它输出了:

~/ckb-testing/devnet$ckbinit–chaindevWARN:miningfeatureisdisabledbecauseoflackingtheblockassemblerconfigoptionsInitializedCKBdirectoryin/home/brian/ckb-testing/devnetcreatespecs/dev.tomlcreateckb.tomlcreateckb-miner.toml

dev chain 文档想要让我来定制specs/dev.toml,并设置genesis_epoch_length到 1000。我看了一下我的dev.toml还有genesis_epoch_length已经到 1000 了。

它想让我定制ckb-miner.toml来设置空闲时间间隔(常被称为value)到 500。我瞄了一眼ckb-miner.toml和value已经都到 500 了。这份文档似乎已经过时了。

译者注:文档中显示设定的值为 5000(截图为 2020/03/10 版)

在 dev chain 上挖矿

正如ckb init上所说,一个初始化的链尚未为挖矿进行配置。dev chain 文档的步骤 4 标题为「在 ckb.toml 中配置挖矿用的 block-assembler」,它提到:

我们使用 ckb-cli 生成 lock_arg 。需要 lock_arg 来配置挖矿功能,所以请将它备份。

我真希望它能解释到底lock_arg是什么,或者链接到更多的资讯。

紧接着我运行了ckb-cli account new。

它要求我设置密码,我便设置成了「foo」,但 CLI 端有很长一段时间没有给我任何反馈。我真想知道它是不是坏了。

Aimee 想知道为什么我们需要一个账户。我猜它是连接到我们矿工的公钥,并且该账号会提供权限让矿工存放挖到的 CKB。

这部分文档是有缺陷的。

最后,账户的创建命令已经完成并且输出:

~/ckb-testing/devnet$timeckb-cliaccountnewYournewaccountislockedwithapassword.Pleasegiveapassword.Donotforgetthispassword.Password:Repeatpassword:address:mainnet:ckb1qyq9u782efpvk8m3q88gplxlzadpct5d7ypqythss9testnet:ckt1qyq9u782efpvk8m3q88gplxlzadpct5d7ypqewf0uelock_arg:0x5e78eaca42cb1f7101ce80fcdf175a1c2e8df102lock_hash:0xe68befeae28e69dc658565be71bc7146fd33a9a4bea3f7edba8de8c8c46865ff

呃,看了一下输出,还需要做一些工作。你只能看到标签(地址、主网也是在我的终端机中看不到的深蓝色)。

我花了 168 秒来运行二进制文件的调试以及在后台同步测试网。

为了实验,我停止了对测试网的同步,在调试版本中再次运行ckb-cli account new;然后在 release 模式下重建ckb和ckb-cli。

debug:99 秒release:15 秒所以 debug 构建会慢 6.6 倍。我继续将测试网与 release build 同步。我想知道lock_arg和lock_hash是什么。我在网上搜索了一下,除了「需要配置您的挖矿软件以及导出您的私钥」之外,我找不到任何有用的东西。我稍后会继续。

测试网重置了!

我休息了几天,在这几天里测试网重置了。我会发现这个是因为我的 ckb 测试网开始看起来像这样:

2020-03-2421:50:22.644-06:00NetworkRuntime-3INFOckb-networkBanpeerPeerId(QmT6DFfm18wtbJz3y4aPNn3ac86N4d4p4xtfQRRPf73frC)for300seconds,reason:Thenodesarenotonthesamenetwork

仅仅删除测试网数据、重新初始化和重新同步是没用的。我看到包含 Aggron testnet 信息的 gist 现在显示测试网已经有一个不同的创世区块。我假定我需要一个新的测试网配置,并且假定 Nervos 已经发布了包含更新的测试网定义的新版本。我获取了ckb和ckb-cli,看到最新的 tag 分别是v0.30.1和v0.30.0。我检查了一下并在发布模式下构建他们。

继续 dev chain 的设置

下一个在 Dev Chain 文档的指示是:开启 ckb.toml 并配置[block_assembler]的部分。lock_arg必须要有 0x 作为前缀,并在后面加上 args 中的文字。message中填入 0x很神秘,ckb.toml有一堆细节附加在关于[block_assembler]注释的部分:(译者注:大概有两千字)

#SetthelockscripttoprotectminedCKB.##CKBusesCSarchitectureforminer.Minerprocess(ckbminer)getsblock#templatefromtheNodeprocess(ckbrun)viaRPC.Thusthelockscriptis#configuredinckb.tomlinsteadofckb-miner.toml,andtheconfigtakeseffect#afterrestartingNodeprocess.##The`code_hash`identifiesdifferentcryptographyalgorithm.Readthemanual#ofthelockscriptproviderabouthowtogeneratethisconfig.##CKBprovidesansecp256k1implementation,itrequiresahashonthe#compressedpublickey.Thehashalgorithmisblake2b,withpersonal#ckb-default-hash.Thefirst160bits(20bytes)areusedastheonlyarg.##YoucanuseanytoolyoutrusttogenerateaBitcoinprivatekeyandpublic#keypair,whichcanbeusedinCKBaswell.CKBCLIprovidesthefunctionfor#youtoconvertthepublickeyintoblockassemblerconfigurationparameters.##Hereisanexampleusingckb-clitogenerateanaccount,thiscommandwill#printtheblockassemblerargs(lock_arg)toscreen:##ckb-cliaccountnew##Ifyoualreadyhavearawsecp256k1privatekey,youcangetthelock_argby:##ckb-cliutilkey-info–privkey-path##Thecommand`ckbinit`alsoacceptsoptionstogeneratetheblockassembler#directly.See`ckbinit–help`fordetails.##ckbinit##secp256k1_blake160_sighash_allexample:#[block_assembler]#code_hash=0x9bd7e06f3ecf4be0f2fcd2188b23f1b9fcc88e5d4b65a8637b17723bbda3cce8#args=ckbcliblake160#hash_type=type#message=A0x-prefixedhexstring

好吧,这里还是有好多没解释清楚的地方:

「矿工的 CS 架构」是啥?不懂。「请参阅 lock script 提供者的手册(manual)」。我既不知道 lock script provider 是啥,也不知道这个手册在哪里。「哈希算法是带有个人“ckb-dafault-hash” 的 blake2b」什么是个人的「ckb-defualt-hash」?我到了最后一个部分:

#[block_assembler]#code_hash=0x9bd7e06f3ecf4be0f2fcd2188b23f1b9fcc88e5d4b65a8637b17723bbda3cce8#args=ckbcliblake160#hash_type=type#message=A0x-prefixedhexstring

这里也是一点解释也没有。在我展开ckb-cli account new的文档示例输出和它的示例[block_assembler]之后,我终于明白我需要做什么,并且我做了一些推论。文档中默认折叠的这些范例可能会不利于理解。我不加考虑的忽略了他们,但其实在这里我是需要他们的。我认为我应该做的是:别管code_hash了将所有的 args 用lock_arg的值去替换别再碰hash_type把message设置为「0x」我注意到文档指示我需要在lock_arg前面加上「0x」,但是ckb-cli在它自己的输出中增加了一个带有「0x」前缀的lock_arg。我不知道「massage」是什么,但显然「0x」加在前面可以安抚ckb啦。(译者注:Brian 没展开的范例如下图)

缺失

开发文档基本上就到此结束了,它表明我们可以使用ckb—cli完成一些工作,这里也有一些 SDK 可以与ckb后台自动通信(目前还没有 Rust SDK)。我最想做的是写一个可以在 CKB 上运行的合约,但不确定是否需要通过 SDK。我有点被卡住了,但我为自己制定了一个计划:

    探索ckb-cli的功能;尝试使用ckb-cli在 devnet 上进行交易。

    在测试网上发送 CKB

    (许多天后)今天 Aimee 和我试着在测试网上发送 CKB 交易。我们同时同步了测试网并且运行了ckb run。首先,我们用测试网的水龙头要来了一点 CKB,这就需要有钱包地址,所以我们首先需要一个钱包。文档有提到 Neuron Wallet。但身为一个开发者,我比较想用命令行的工具,并了解底层的工具集。因此我去深入的研究了一下ckb—cli。ckb-cli有个wallet的子命令。这里有个描述ckb-cli命令的 wiki 页面,但它已经足够让我相信ckb-cli能够提供更多的输出。我现在还不知道有没有其它遗漏的文档,所以我想我们必须通过 CLI,加上直觉和试错。当 Aimee 试图在 Mac 上运行ckb-cli时,一些系统级保护机制禁止了她运行非 App Store 的应用程序。在没有参数的情况下运行ckb-cli会产生一个交互式环境,其中的命令似乎直接对应于命令行子命令。我想知道这是否由他们的命令行解析器自动完成。我需要一个帐户来使用这个钱包,我研究了account子命令,我之前创建了一个 devnet 帐户,但是还没有测试网帐户。当我在运行account list时我得到了四个账户。当 Aimee 这么做时她得到了两个。我输入accunt new,并使用「foo」作为我的密码,Aimee 使用「hotsauce」作为密码。

      CKB>accountnewYournewaccountislockedwithapassword.Pleasegiveapassword.Donotforgetthispassword.Password:Repeatpassword:address:mainnet:ckb1qyq2p6jgd8pnqlngy4cf4h7c76p383rug9sqw9e2hptestnet:ckt1qyq2p6jgd8pnqlngy4cf4h7c76p383rug9sqnq84malock_arg:0xa0ea4869c3307e6825709adfd8f68313c47c4160lock_hash:0xb686ca47423942cd64f4d091829450ad3b968b485d922b773a4672616a084c0c

      运行account list,账户#4 是我的新账户。我在这个列表中也看到了以前生成的 devnet 帐户。我猜钱包账户是一个全局性的资源。我注意到这里有个~/.ckb-cli的目录。根据钱包的文档,我们可以用 lock script hash、地址、lock arg 或者 pubkey 授权进入我们的账户。从account new指令的输出,我目前已经有所有的 pubkey 了。但我目前还是不知道去哪里找到 pubkey。我用了 lock arg 来获取我钱包里的 capacity:

        CKB>walletget-capacity–lock-arg0xa0ea4869c3307e6825709adfd8f68313c47c4160total:0.0(CKB)

        我的 capacity 是 0 CKB。这个 capacity 代表的是我账户中的钱包总额吗?我想应该是在说这个吧,因为我一个 CKB 也没有,我在区块链上也没有任何存储容量。我的 CKB 余额是 0。Aimee 和我同时向水龙头要来了一些 CKB。大约 1 分钟后,我们都得到 5000 CKB。我想要知道给我 CKB 的那个区块长什么样子,于是我运行了:

          CKB>walletget-live-cells–address=ckt1qyq2p6jgd8pnqlngy4cf4h7c76p383rug9sqnq84macurrent_capacity:5000.0(CKB)current_count:1live_cells:-capacity:5000.0(CKB)data_bytes:0index:output_index:0tx_index:1lock_hash:0xb686ca47423942cd64f4d091829450ad3b968b485d922b773a4672616a084c0cmature:truenumber:55611tx_hash:0x1a8a1650dcf8bc21a210a970073b6d1a47eff13afdd649e5cb3ecc3d56c06083tx_index:0type_hashes:~total_capacity:5000.0(CKB)total_count:1

          我打开了测试网的浏览器上该交易的页面,Aimee 试着发送了一些 CKB:

          CKB>wallettransfer–capacity1000–from-account0x2af2ea2efbffce44f51cd4d7731507fdbbd63629–to-addressckt1qyq2p6jgd8pnqlngy4cf4h7c76p383rug9sqnq84ma–tx-fee1PassworD:0xc0a6973ac921cea95d27fa9e8a30ae6fca18de2404f768e3a077dd1e5f345ec0

          输出的那些数字是什么?这是交易哈希,30 秒后这交易出现在浏览器中。我查看一下我的账户:

          CKB>walletget-capacity–address=ckt1qyq2p6jgd8pnqlngy4cf4h7c76p383rug9sqnq84matotal:6000.0(CKB)CKB>walletget-live-cells–address=ckt1qyq2p6jgd8pnqlngy4cf4h7c76p383rug9sqnq84macurrent_capacity:6000.0(CKB)current_count:2live_cells:-capacity:5000.0(CKB)data_bytes:0index:output_index:0tx_index:1lock_hash:0xb686ca47423942cd64f4d091829450ad3b968b485d922b773a4672616a084c0cmature:truenumber:55611tx_hash:0x1a8a1650dcf8bc21a210a970073b6d1a47eff13afdd649e5cb3ecc3d56c06083tx_index:0type_hashes:~-capacity:1000.0(CKB)data_bytes:0index:output_index:0tx_index:1lock_hash:0xb686ca47423942cd64f4d091829450ad3b968b485d922b773a4672616a084c0cmature:true

          OK,我现在终于知道怎么设置测试网和 devnet,并且可以在测试网中通过命令行移转 CKB 啦!

          附录:CKB 文档

          这是我收集的一些链接的清单:

            https://docs.nervos.org

            https://github.com/nervosnetwork/ckb/blob/develop/docs/get-ckb.md

            https://github.com/nervosnetwork/ckb/tree/develop/docs

            RFC: Simple UDT Draft Spec

            RFC: anyone-can-pay lock

            https://gist.github.com/WilfredTA/bb1d2a80c420f0910d40ca881c2bd5d4

            https://github.com/nervosnetwork/ckb-cli/blob/develop/README.md

            https://github.com/nervosnetwork/ckb/wiki/Chains

            https://github.com/nervosnetwork/ckb/wiki

            Introducing Godwoken – A missing piece of the cell model

            SECBIT Labs – zkp-toolkit-ckb – a Zero-Knowledge Proof toolkit for CKB

            https://github.com/nervosnetwork/wasm-secp256k1-test

            Summa – Bitcoin SPV Utils

            https://github.com/nervosnetwork/ckb-cli/wiki/Sub-Commands

            正文结束

            以上就是 Rust 重量级开发者 Brian 搭建并运行 CKB 的初体验,让我们来总结一下 Brian 的开发思路:

            1.搭建自己的 CKB 链→下载 CKB GitHub repo→ 找开发文档,了解如何编写、部署和测试脚本→ 从文档最初开始寻找如何创建自己的私有链→ 找不到,那就先试试搭建测试网(是Aggron)吧→ 同步测试网→ 搭建 dev chain→ 在 dev chain 上挖矿→ 创建账户→ dev chain 完成。2.尝试发交易→从底层的 ckb-cli 的命令行如何使用开始→ 找到操作命令行的 wilki→ 产生账户→ 和水龙头要钱→ 发送交易给其他地址→ 查看浏览器确认是否完成。

            我们再来汇总一下 Brian 的槽点 :P

              在文档上找不到如何搭建自己的 CKB chain 的指示。文档 Getting Start 里面也没有怎么搭建 CKB 的指示ckb-cli 和 ckb 的版本号无法对应,可能一个是 v0.29.0 一个是 v0.27.1,但也没有特别说明Aggron test 的文档还是 12 月的没有指引告诉大家测试网的同步要多久或者可以去看区块浏览器等对于特殊含义的字段没有充足的解释,例如lock_arglock_hash hash_type干嘛的,都没有在文档中有解释 (p.s.可能像 rfc19 的一些内容会有帮助)dev chain 这边可以有一点指引让大家知道就是在这里搭建自己的 CKB 链ckb-cli在输入密码后并没有即时的反馈或者提示为什么要设定密码似乎也没说清楚测试网重置了没有足够的指引告诉开发者他们应该怎么做在ckb.toml的[block_assembler]突然出现上千字的注释,但注释本身就有些地方让人看不懂文档的 Example 默认是折叠的可能或让人不小心忽略似乎很多指令为什么要这么做在文档里没说清楚,像是为什么在lock_arg要有 0x 的前缀,massage为什么又要填 0x 等钱包里面 capacity 是什么,好像很多专有名词都觉得开发者已经知道一样。

            Brian 的这份搭建并运行 CKB 的初体验是一份非常详尽,非常值得参考和借鉴的开发者体验报告。看完之后你是否也想要来 CKB 上探索一番?从文章中可以看出,Nervos CKB 上还有很多需要改进的地方等着被发现和完善。事实上,CKB「Lina」还是一个出生未满五个月的孩子,需要聚集大家的智慧共同协助她成长。Nervos 一直崇尚开源精神,希望能够和社区一起来完善项目和生态,也非常愿意看到大家的反馈。在此,我们向所有的开发者发出邀请,欢迎你们来 CKB 上体验。不论是找 bug、搭应用,或是单纯的发交易,不论是赞美还是吐槽,我们都非常欢迎,这些都会是 Lina 最好的礼物。你在 CKB 上踩过哪些坑呢?欢迎在留言区告诉我们,也期待看到你们更多的「体验报告」哦!

            声明:此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。本网站所提供的信息,只供参考之用。

发表评论