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 的些许建议极光日报,极光开发者旗下媒体。
每天导读三篇英文技术文章。