首发于极光日报
Blockshell —— 一个最小的学习区块链的命令行界面

Blockshell —— 一个最小的学习区块链的命令行界面

简评:Blockshell 是一个用于学习区块链技术概念的命令行工具(CLI)。对于任何想要了解区块链技术是如何工作的人,BlockShell 应该是一个很好的入手点。

简介

Blockshell 适用区块链概念,并在本地系统中创建一个小小的区块链,所以,你可以实际学习像区块、挖矿、哈希值和工作量证明等等的概念。所以,在 Blockshell 中,使用简单的命令创建区块,剩下的任务都将交由 Blockshell 处理。

接下来,我将尝试解释 Blockshell 是如何工作的。

初始化新的区块链

首先,我们将在 Blockshell CLI 中使用以下命令初始化新的区块链。

[BLOCKSHELL] $ blockshell init --difficulty 3 

上面的命令初始化新的区块链,并在工作目录中创建 chain.txt(用于存储区块链数据),你可以将这个 chain.txt 文件作为真实世界区块链的分类账。

-- -- difficulty number 表示区块链工作量证明的困难等级,数字(number)越大,在我们的区块链中挖掘新的区块需要的时间越多。

在我们的区块链中,有 Initial Zeros Proof of Work 算法,所以,当我们要挖掘新块时,PoW 将会寻找初始 3 个字符为零(0)的哈希,就像我们在初始化时我们的区块链的难度等级被设置为 3。

例:(hash)

0002fdd96ffec46277a753fa983773599c816dcf100c956afae0a4853fd1ce32 

挖第一个区块

让我们存储一些数据,之后通过 PoW 来挖掘我们区块链的第一个区块。

[BlockShell] $ dotx hello blockchain 

Blockshell 带有内置的用于创建一个新的事务的命令 dotx,这个命令会挖掘给定数据的新块(如 hello blockchain)

输出:

[Status] Mining block (1) with PoW ...
[ Info ] Time Elapsed : 0.0164740085602 seconds.
[ Info ] Mined Hash : 000eea381e45c9f6c1c330cf991b5b1e7d15f739da3894b703e412881b2c2edd 

挖掘这个区块取决于区块链的难度等级,现在是 3,这就是为什么我们的块在不到一秒钟的时候里面就开采出来了。在挖矿结束之后,我们收到了那个块的哈希,3 个字母的初始值为 0,难度为 3。

Genesis 区块(创始区块)

区块链中的第一个区块称为 Genesis 区块,它是在区块链开发时手动创建的。在我们的例子中,这个生成块的创建是由 Blockshell 来处理的,当我们初始化区块链时,它也创建了 Genesis 区块。

探索 Blockchain

现在,我们在区块链中有 2 个区块,首先是在前面的步骤中创建的 Genesis 块和其他数据,其中包含 hello blockchain数据。

使用以下命令列出区块链中的所有块:

[BlockShell] $ allblocks 

这会列出了所有区块的哈希值。输出:

338a2d1ac1b8135283ae19a304b2b426b69b9caba7ef462f246fc577a0297230
000eea381e45c9f6c1c330cf991b5b1e7d15f739da3894b703e412881b2c2edd 

查看区块数据

让我们来看看每个块里面的内容,可以使用 Blockshell 的 getblock 命令。

这里338a2d1ac1b8135283ae19a304b2b426b69b9caba7ef462f246fc577a0297230 是 Genesis 块,让我们来看看:

[BlockShell] $ getblock 338a2d1ac1b8135283ae19a304b2b426b69b9caba7ef462f246fc577a0297230 

输出:

{
  'nonce': 0,
  'index': 0,
  'hash': '338a2d1ac1b8135283ae19a304b2b426b69b9caba7ef462f246fc577a0297230',
  'previousHash': '',
  'timestamp': '2018-01-27 20:13:44.835930',
  'data': 'Genesis Block'
} 

同样,我们来看看自己创建的块里面有什么:

[BlockShell] $ getblock 000eea381e45c9f6c1c330cf991b5b1e7d15f739da3894b703e412881b2c2edd 

输出:

{
  'nonce': 1959,
  'index': 1,
  'hash': '000eea381e45c9f6c1c330cf991b5b1e7d15f739da3894b703e412881b2c2edd',
  'previousHash': '338a2d1ac1b8135283ae19a304b2b426b69b9caba7ef462f246fc577a0297230',
  'timestamp': '2018-01-27 20:15:01.515716',
  'data': 'hello blockchain'
} 

启动 Blockshell Web

Blockshell 内置了区块链 Web 浏览器,可以使用浏览器搜索区块链中的区块和数据。

打开一个新终端,进入克隆的 Blockshell 目录并运行 web.py python 脚本。

python web.py 

在浏览器中访问 127.0.0.1:5000一些非常有用的 VSCode 扩展在浏览器中访问 127.0.0.1:5000

原文:Get Started with BlockShell

扩展阅读:

一个好的 README 的些许建议
极光日报,极光开发者旗下媒体。
每天导读三篇英文技术文章。
编辑于 2018-02-02 14:28