CKB Studio “Hello World !”教程

CKB Studio — Hello World 教程

Source from Jonathan Caras以色列小哥的原文在此

在 Nervos 区块链上打印出“Hello ”World“

本教程将逐步向您展示如何将简单的文本,发布到 Nervos CKB 区块链本地开发链的实例。
我们将使用 Mac 10.15.4,但任何最新版本应该都可以。该 IDE 是来自 Obsidian 的 CKB Studio。如果您从未使用过CKB Studio,请按照我编写的本教程进行安装。我目前正使用的是CKB Studio v0.2.2。如果你不熟悉Nervos CKB,我建议你阅读我们的文章,为什么我们投资 NervoS CKB

步骤:1启动CKB Studio,确保一切都是最新的

Obsidian正在努力升级到 v1.0,所以您可能正在使用与我不同的版本(0.2.2)。对于本教程来说应该没有问题。
首先运行Docker。

我需要点击一下来升级 Docker

点击“安装更新”,你可能需要输入你的Mac密码。

升级很快就完成了,现在只要点击「Get Started」就好。

步骤二:获取本地端版本的 CKB 在你的计算机上运行

现在您已经启动并运行了 CKB Studio,是时候启动本地版本的CKB了。


点击右上角的「Network」

点击“CKB Version“

点击 「Install」,选择 v0.31.0(在写这篇文章的时候的最新版本)

你可能需要下载代码,这个会自动执行并且很快就结束。

现在,您的计算机上已经安装了一个最新的CKB版本。

这些请将您的眼睛向下移动到左下方的紫色按钮上的键。

现在,你将创建一个新的密钥对,这将创建一个钱包,一个矿工,和在创世区块中一些有着 CKB 的 cell,现在点击“ Create ”。

现在你已经拥有了公私钥对了,点击“Save”。
(翻译注:这个密钥储存在 Mac 的密钥管理系统里,建议在本地端测试使用就好)

你现在已经可以看到你的地址列在 Keypair 管理器中

现在看看右上角,点击一下那个绿色的“New Instance”按钮吧

在 New Instance 中,添加一个名为“HelloWorld”的档案吧(如果您尝试在实例名中放置空格,它将冻结,就是会一直转圈圈但跑不动)。
检查CKB版本是否与我们安装的匹配,miner是我们之前创建的帐户的地址。

现在回到主要的视窗,你会看到你的 CKB 专案已经准备好了
按下“Start“吧
你会看到齿轮开始转动,这代表 Nervos 区块链已经要启动了,并且会完备一个新钱包和矿工。

点击左下角的 miner 选项,看看你饥饿的 miner 找到了多少区块。(干得好,我的小矿工!)

步骤三:创建交易

我们需要做的第一件事,是搞一些代币来支付我们的交易费用。还好我们在创世区块里已经得到了一些,因为我们本地区块链中唯一的矿工,所以我们也能够得到甜蜜的区块奖励。


开启你备份的 Keypair 管理者(在左下角)并且复制你的地址

将此地址复制到屏幕中间灰色的地址窗口中。它可能会说“无效地址(Invalid Address)”或类似的东西。按下最左边的刷新按钮,你将看到你的矿工辛苦工作后得到的区块奖励。

将一个区块拖动到左上角的输入窗口。你应该看到它是这样的。

现在让我们再拖进来一个。

点击顶部中间的标签“TX constructor”(交易构造器)。

点击绿色的“+ New”按钮,他在“Output”的右边

现在,让我们填写capacity 为 4000 CKB。(我们从你之前拖的 cell 里得到的。)

现在在 lock script 下方贴上地址,你将可以看到本地的钱包地址,选择他吧。

现在我们在 data 栏位输入“Hello World!”。请确保您输入的是UTF 8格式。

步骤4:通过一个新交易将数据发到区块链上

你的屏幕应该看起来像我下面这样。有 2个cell ,每个cell 的 input 都是约2000个CKB,输出约4000个 CKB 的 capacity,并锁定作着您的地址还有“Hello ”World!“这个数据。


点击紫色的“Push Transaction”按钮

下面是将在交易中发送到区块链的原始数据。
本教程对两件事很感兴趣。首先是“outputsData”,它包含十六进制,相当于我们注入到区块链的数据。

“outputsData”: [

“0x2248656c6c6f20576f726c642122”

],

让我们打开一个十六进制到ASCII转换器,并验证我们放在链上的数据就是我们想要的数据。
https://www.rapidtables.com/convert/number/hex-to-ascii.html

太好了 我们准备好要提交我们的交易了

交易的第二个我们要看的是“Witness”,也就是我们的签名,注意这里是空的。因为我们还没有签署这笔交易。
但我们马上就会讲到这个了:

“witnesses”: [

]\

点击绿色按钮“签署【your address】”,然后通过紫色的“Push Transaction”按钮推送交易。

就是这个了!你应该有一个小弹窗 (它会消失得很快,可以看看我的屏幕截图)

步骤5: 验证数据已经提交到链上

现在,我们创建、签署并提交了一个交易,我们需要验证是否在链上得到了我们想要的。

点击右上角的“Explorer”。

再次复制你的地址,这是我们想要在本地浏览器中查看的地址。( CKB Studio 中带有建议版本的区块浏览器)

在灰色的格子中贴上你的地址
按一下左侧的“刷新 refresh‘”

Pic 38

你会看到许多在不同块高的 Cellbases ,注意他们的内含的 CKB 都是一样的
(翻译注:Cellbase 就是挖矿得到的 Cell )

Pic 39

按下“加载更多(load more)”的按钮会看到旧的区块,快点,因为这个区块链不断更新,我们正在手动寻找一个有我们那的4000 CKB的区块。
image
yay 我们找到了
image
这个区块还会有额外的数据。而这些数据会递交到区块链


注意,数据是十六进制的,它与我们想要提交的数据相匹配。

将鼠标高亮显示在十六进制上,以查看等价的ASCII码。

在那里我们看到了我们的“Hello World!”的字符串。

最后,非常感谢 Tannr 和 Matt Quinn 帮助我们制作了这个教程。
在下一篇教程中,我们将演示如何使用 CKB 编写智能合约。

请继续关注。

欢迎跟随我的 Twitter @madcapslaugh.还有加入我们的 Nervos VR meetup group (用手机和电脑或 VR 装置都可以 )

6 Likes

如何在 CKB Studio 中构造合约和用上 cell_deps

如果你已经知道怎么在交易里说 Hello world 了
你们可以来看看怎么用上 cell deps 来调用以前的合约,并来构造一笔新的合约

忘了说,cell_deps 是一个能够让你调用先前合约的一个 cell ,按造 RFC 19 : 数据结构 里头的话, Cell deps 是:

一个 outpoint 数组,指向此转账依赖的 cells。 只有 live 的 cells 才可以列在这里。这里列出的 cells 是 只可读取(read-only) 的。

他会在构造交易的时候和你的 cell input 以及 cell output 等等这些 cell 一起呈现,并且透过 Script 的 code hash 去引用先前 cell 中的数据,让 input / output 能执行 cell deps 的脚本 。因此你就不需要自己在你的 cell 中再写一次先前的人写过的合约逻辑在你的 cell 中了,也可以省去一些不必要的空间使用。

1.首先假设你已经把本地的开发链打开了,如下图


可以注意到的地方是,在 “Start”的绿色按钮边有一个选项是 Start without miner,其实你编译合约的时候是可以先用这个选项的,可以省去不必要的挖矿成本(电和存储空间),发送交易的时候再打开就好。

2.另外,你必须还必须在链上有内含合约的 live cell 可以引用啊!!!
因此我们必须先创建一笔交易,并在里面存一段逻辑

那要写什么合约呢?
这个时候 CKB Studio 贴心的地方就来了

看到下图左上角的的「小人像」了吧


在这里点击一下 My project

他会跳出一些目前已经写好的合约在 template 中,例如现在有 Carrot / sUDT / JavaScript 的简易合约等等(许愿:希望以后有更多),这次我们选择 carrot 合约做为范例,然后选好路径,按下 「Create Project」(记得资料夹里面不能不能有其他东西)

之后他就会跳进来,你可以看到 carrot 的合约内容

这是个简单的合约 代码就是你看到的这几行,大致的意思就是说
当今天读取到的 data 中的字是“carrot”会返回-1,表示合约执行失败,反之,如果不是“carrot”,那么就会显示正确,返回 0。

但你今天看到的这个代码是你看的懂的,机器其实看不懂,因此我们要把他写成二进制的方式
这时候你可以看到左上角有个锤子:hammer: (Build)的符号,点下去他会帮你编译合约,生成二进制的文件。
长相如下(对的,就是这个上面有 corrot.o的档案)

接着可以打开交易构造器了
首先点开左下角的钥匙,复制地址到这个灰色的栏位中(请确保这个地址是你之前挖矿的地址)
下方就会显示出目前你有多少 cell 了 (empty cell 表示里面都还没有任何人为添增脚本的 cell )。


3.把 carrot 合约装到某个 cell 之中
这时候我们必须要把我们创建的 carrot 合约放到某个 cell 中了,所以我们这时候必须要

  • 构造一个有 “carrot” 合约的 cell

  • 发送

所以这时我来点击在左下角的 +New Cell 绿色按钮,他会问我要在 cell 的 type script 中放入什么样的数据,我选择了 File,并且索引了“carrot.o”的二进制文件,此刻他会显示出我们需要 “10709” Capicity,因为 CKB Studio 已经帮你算好了,我们需要 10709 bytes 才能容纳这份 carrot 合约。


现在好像已经更新了 ,当你按下 Prwview之后,系统会自动帮你拿出一些 empty cell 作为输入,所以这时候你只要按下右边的紫色按钮“Push Transaction”就好了。

这时后只要交易成功发送了,会像上图一样显示绿色的 Transaction Pushed 字样。这时候在下方的 Live Cell 中,关掉“Show empty cell ”多按几次 “Load more”,就可以找到你部署合约的 cell。


点击一下这个 Cell,会显示出他的内容,你可以看的出来他就是里面含有 carrot 合约的 Cell ,和一般的 empty cell 是如此的不同,如此的耀眼~

这时候你可以按一下右上角有一个垃圾桶的 icon,对就是上面写着 clear 的,他会把你上一笔的合约的版面清掉。
然后这时你就能够开启下个交易,把你的含有 “carrot”的 合约的 cell 拖到 Deps 那个栏位中,作为新交易的 Cell deps了。


这时候我们可以点击右边 Outputs 旁边的 +New 绿色按钮,他可以让我们生成 output cell

这里要记得把 type script 中 Deps 的 code hash 选起来,他可以让这个 type script 透过 code hash 指向在 Deps 栏位中的 Cell 。我们这时候可以在 data 中填入 carrot。并且按下“Confirm”,然后推送交易。

你会发现他呈现“Failed”,因为“验证失败”。那我们现在来看看这个验证失败,到底是不是因为我们在 “Data” 中填写了 “”carrot“,我们这次试着点击“Data“,改一下data的字,把它改成 ”carro“

然后发送交易

可以发现这次成功了!!!!! :ghost: :ghost:

这时候我们再来回顾,确实在 carrot 的合约中,他写了

if (memcmp(buffer, "carrot", 6) == 0) {
      ckb_debug("Error: Data string starts from 'carrot'"); //只要你的Data 字符串是 “Carrot“,就返回 -1 表示错误
      return -1;
    }

这时候我们就能够确定我们已经成功的引用了 carrot 合约在我们的交易中了。

以后你可以试着想想其他好玩的合约,并且让其他人透过 Cell Deps 的方式来调用你的合约,作为验证的规则,那么很多的 Dapps 就有机会跑起来啰。