区块链,第二部分:配置区块链网络并利用该技术

如何使用开源工具设置私有以太坊区块链,并了解区块链技术可以在哪些市场和行业中增加价值。

在第一部分中,我花了很多时间探讨加密货币及其实现机制:区块链。我详细介绍了区块链的工作原理以及它为何如此安全和强大。在第二部分中,我将描述如何使用开源工具设置和配置您自己的私有以太坊区块链。我还将探讨这项技术可以在哪些领域带来价值或帮助重新定义人们如何在更加开放的网络上进行交易。

设置您自己的私有区块链网络

在本节中,我将探讨基于以太坊的区块链网络的机制——具体而言,如何创建私有以太坊区块链、托管和共享此区块链的私有网络、一个账户,以及如何使用区块链做一些有趣的事情。

什么是以太坊?再说一遍?以太坊是一个开源的公共区块链平台,具有智能合约(即脚本)功能。它类似于比特币,但不同之处在于它超越了货币交易。

智能合约使用编程语言编写,例如 Solidity(类似于 C 和 JavaScript)、Serpent(类似于 Python)、LLL(类似于 Lisp 的语言)和 Mutan(基于 Go)。智能合约被编译成 EVM(见下文)字节码,并部署到以太坊区块链上执行。智能合约有助于交换货币、财产、股份或任何有价值的东西,并且以透明且无冲突的方式进行,避免了传统中间商。

如果您还记得第一部分,任何区块链的典型布局都是所有节点都连接到其他每个节点,从而创建一个网状网络。在以太坊的世界中,这些节点被称为以太坊虚拟机 (EVM),每个 EVM 都将托管整个区块链的副本。每个 EVM 还将竞争挖掘下一个区块或验证交易。一旦新区块被附加到区块链,更新就会传播到整个网络,以便每个节点都同步。

为了成为以太坊网络上的 EVM 节点,您需要下载并安装正确的软件。为了实现这一点,您将使用 Geth (Go Ethereum)。Geth 是以太坊协议的官方 Go 实现。它是三种实现之一;另外两种是用 C++ 和 Python 编写的。这些开源软件包根据 GNU 宽通用公共许可证 (LGPL) 版本 3 获得许可。适用于所有支持的操作系统和架构(包括 Linux)的独立 Geth 客户端软件包可在此处获取。该软件包的源代码托管在 GitHub 上。

Geth 是一个命令行界面 (CLI) 工具,用于与以太坊网络通信。它旨在充当您的计算机与以太坊网络上所有其他节点之间的链接。当网络上的另一个节点正在挖掘区块时,您的 Geth 安装将收到更新通知,然后传递信息以更新您本地的区块链副本。使用 Geth 实用程序,您将能够挖掘以太币(类似于比特币,但它是以太坊网络的加密货币)、在两个地址之间转移资金、创建智能合约等等。

下载和安装

在我的示例中,我是在最新的 Ubuntu LTS 版本上配置此以太坊区块链。请注意,这些工具本身不限于此发行版或版本。

从项目网站下载并安装二进制文件

下载最新的稳定版本,解压并复制到适当的目录


$ wget https://gethstore.blob.core.windows.net/builds/
↪geth-linux-amd64-1.7.3-4bb3c89d.tar.gz
$ tar xzf geth-linux-amd64-1.7.3-4bb3c89d.tar.gz
$ cd geth-linux-amd64-1.7.3-4bb3c89d/
$ sudo cp geth /usr/bin/

从源代码构建

如果您从源代码构建,则需要安装 Go 和 C 编译器


$ sudo apt-get install -y build-essential golang

切换到该目录并执行


$ make geth

从公共存储库安装

如果您在 Ubuntu 上运行并决定从公共存储库安装软件包,请运行以下命令


$ sudo apt-get install software-properties-common
$ sudo add-apt-repository -y ppa:ethereum/ethereum
$ sudo apt-get update
$ sudo apt-get install ethereum

入门

问题是,您没有任何以太币可以开始。考虑到这一点,让我们将此部署限制为“私有”区块链网络,该网络将作为主以太坊网络的开发或暂存版本运行。从功能角度来看,此私有网络将与主区块链相同,但例外的是,在此网络上部署的所有交易和智能合约将仅对此私有网络中连接的节点可访问。Geth 将帮助进行此私有或“测试网”设置。使用该工具,您将能够完成以太坊平台宣传的所有功能,而无需真正的以太币。

请记住,区块链只不过是一个数字化的公共账本,按时间顺序保存交易。当新的交易被验证并配置到一个区块中时,该区块然后被附加到链上,然后分发到整个网络。该网络上的每个节点都将更新其本地链副本到最新副本。但是您需要从某个点开始——一个起点或一个创世。每个区块链都从一个创世区块开始,即区块“零”或链的第一个区块。它将是唯一没有前任区块的区块。要创建您的私有区块链,您需要创建此创世区块。为此,您需要创建一个自定义创世文件,然后告诉 Geth 使用该文件来创建您自己的创世区块。

创建一个目录路径来托管所有与以太坊相关的数据和配置,并切换到 config 子目录


$ mkdir ~/eth-evm
$ cd ~/eth-evm
$ mkdir config data
$ cd  config

打开您喜欢的文本编辑器,并将以下内容保存到同一目录中名为 Genesis.json 的文件中


{
    "config": {
        "chainId": 999,
        "homesteadBlock": 0,
        "eip155Block": 0,
        "eip158Block": 0
    },
    "difficulty": "0x400",
    "gasLimit": "0x8000000",
    "alloc": {}
}

这就是您的创世文件的样子。这个简单的 JSON 格式字符串描述了以下内容

  • config — 此区块定义了您的自定义链的设置。

  • chainId — 这标识了您的区块链,并且由于主以太坊网络有自己的链 ID,因此您需要为您的私有链配置您自己的唯一值。

  • homesteadBlock — 定义了以太坊平台的版本和协议。

  • eip155Block / eip158Block — 这些字段为用于 Homestead 版本的非向后兼容协议更改添加了支持。就本示例而言,您不会利用这些,因此它们设置为“0”。

  • difficulty — 此值控制区块链的区块生成时间。值越高,矿工必须执行更多的计算才能发现有效的区块。由于此示例只是部署一个测试网络,因此让我们保持此值较低以减少等待时间。

  • gasLimit — gas 是以太坊在交易期间花费的燃料。由于您不希望在测试中受到限制,请保持此值较高。

  • alloc — 此部分预先资助账户,但由于您将在本地挖掘以太币,因此您不需要此选项。

现在是实例化数据目录的时候了。打开一个终端窗口,假设您已安装 Geth 二进制文件并且可以通过您的工作路径访问它,请键入以下内容


$ geth --datadir /home/petros/eth-evm/data/PrivateBlockchain
 ↪init /home/petros/eth-evm/config/Genesis.json
WARN [02-10|15:11:41] No etherbase set and no accounts found
 ↪as default
INFO [02-10|15:11:41] Allocated cache and file handles
    ↪database=/home/petros/eth-evm/data/PrivateBlockchain/
↪geth/chaindata cache=16 handles=16
INFO [02-10|15:11:41] Writing custom genesis block
INFO [02-10|15:11:41] Successfully wrote genesis state
    ↪database=chaindata
hash=d1a12d...4c8725
INFO [02-10|15:11:41] Allocated cache and file handles
    ↪database=/home/petros/eth-evm/data/PrivateBlockchain/
↪geth/lightchaindata cache=16 handles=16
INFO [02-10|15:11:41] Writing custom genesis block
INFO [02-10|15:11:41] Successfully wrote genesis state
    ↪database=lightchaindata

该命令需要引用一个工作数据目录来存储您的私有链数据。在这里,我在我的主目录中指定了 eth-evm/data/PrivateBlockchain 子目录。您还需要告诉实用程序使用您的创世文件进行初始化。

此命令用子目录和文件树填充您的数据目录


$ ls -R /home/petros/eth-evm/
.:
config  data

./config:
Genesis.json

./data:
PrivateBlockchain

./data/PrivateBlockchain:
geth  keystore

./data/PrivateBlockchain/geth:
chaindata  lightchaindata  LOCK  nodekey  nodes  transactions.rlp

./data/PrivateBlockchain/geth/chaindata:
000002.ldb  000003.log  CURRENT  LOCK  LOG  MANIFEST-000004

./data/PrivateBlockchain/geth/lightchaindata:
000001.log  CURRENT  LOCK  LOG  MANIFEST-000000

./data/PrivateBlockchain/geth/nodes:
000001.log  CURRENT  LOCK  LOG  MANIFEST-000000

./data/PrivateBlockchain/keystore:

您的私有区块链现已创建。下一步是启动私有网络,该网络将允许您挖掘新区块并将它们添加到您的区块链中。为此,请键入


petros@ubuntu-evm1:~/eth-evm$ geth --datadir
 ↪/home/petros/eth-evm/data/PrivateBlockchain --networkid 9999
WARN [02-10|15:11:59] No etherbase set and no accounts found
 ↪as default
INFO [02-10|15:11:59] Starting peer-to-peer node
    ↪instance=Geth/v1.7.3-stable-4bb3c89d/linux-amd64/go1.9.2
INFO [02-10|15:11:59] Allocated cache and file handles
    ↪database=/home/petros/eth-evm/data/PrivateBlockchain/
↪geth/chaindata cache=128 handles=1024
WARN [02-10|15:11:59] Upgrading database to use lookup entries
INFO [02-10|15:11:59] Initialised chain configuration
    ↪config="{ChainID: 999 Homestead: 0 DAO: <nil> DAOSupport:
 ↪false EIP150: <nil> EIP155: 0 EIP158: 0 Byzantium: <nil>
 ↪Engine: unknown}"
INFO [02-10|15:11:59] Disk storage enabled for ethash caches
    ↪dir=/home/petros/eth-evm/data/PrivateBlockchain/
↪geth/ethash count=3
INFO [02-10|15:11:59] Disk storage enabled for ethash DAGs
 ↪dir=/home/petros/.ethash count=2
INFO [02-10|15:11:59] Initialising Ethereum protocol
    ↪versions="[63 62]" network=9999
INFO [02-10|15:11:59] Database deduplication successful
    ↪deduped=0
INFO [02-10|15:11:59] Loaded most recent local header
    ↪number=0 hash=d1a12d...4c8725 td=1024
INFO [02-10|15:11:59] Loaded most recent local full block
    ↪number=0 hash=d1a12d...4c8725 td=1024
INFO [02-10|15:11:59] Loaded most recent local fast block
    ↪number=0 hash=d1a12d...4c8725 td=1024
INFO [02-10|15:11:59] Regenerated local transaction journal
    ↪transactions=0 accounts=0
INFO [02-10|15:11:59] Starting P2P networking
INFO [02-10|15:12:01] UDP listener up
    ↪self=enode://f51957cd4441f19d187f9601541d66dcbaf560
↪770d3da1db4e71ce5ba3ebc66e60ffe73c2ff01ae683be0527b77c0f96
↪a178e53b925968b7aea824796e36ad27@[::]:30303
INFO [02-10|15:12:01] IPC endpoint opened: /home/petros/eth-evm/
↪data/PrivateBlockchain/geth.ipc
INFO [02-10|15:12:01] RLPx listener up
    ↪self=enode://f51957cd4441f19d187f9601541d66dcbaf560
↪770d3da1db4e71ce5ba3ebc66e60ffe73c2ff01ae683be0527b77c0f96
↪a178e53b925968b7aea824796e36ad27@[::]:30303

请注意新参数 networkid 的使用。此 networkid 有助于确保您的网络的隐私。这里可以使用任何数字。我决定使用 9999。请注意,加入您网络的其他对等方将需要使用相同的 ID。

您的私有网络现在已启动!请记住,每次您需要访问您的私有区块链时,您都需要使用最后两个命令以及完全相同的参数(Geth 工具不会为您记住它)


$ geth --datadir /home/petros/eth-evm/data/PrivateBlockchain
 ↪init /home/petros/eth-evm/config/Genesis.json
$ geth --datadir /home/petros/eth-evm/data/PrivateBlockchain
 ↪--networkid 9999

配置用户账户

因此,现在您的私有区块链网络已启动并运行,您可以开始与之交互。但是为了做到这一点,您需要附加到正在运行的 Geth 进程。打开第二个终端窗口。以下命令将附加到在第一个终端窗口中运行的实例,并将您带到 JavaScript 控制台


$ geth attach /home/petros/eth-evm/data/PrivateBlockchain/geth.ipc
Welcome to the Geth JavaScript console!

instance: Geth/v1.7.3-stable-4bb3c89d/linux-amd64/go1.9.2
 modules: admin:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0
 ↪personal:1.0 rpc:1.0 txpool:1.0 web3:1.0

>

是时候创建一个新账户来操作区块链网络了


> personal.newAccount()
Passphrase:
Repeat passphrase:
"0x92619f0bf91c9a786b8e7570cc538995b163652d"

记住这个字符串。您很快就会需要它。如果您忘记了这个十六进制字符串,您可以通过键入以下内容将其重新打印到控制台


> eth.coinbase
"0x92619f0bf91c9a786b8e7570cc538995b163652d"

通过键入以下脚本来检查您的以太币余额


> eth.getBalance("0x92619f0bf91c9a786b8e7570cc538995b163652d")
0

这是另一种检查余额的方法,无需键入整个十六进制字符串


> eth.getBalance(eth.coinbase)
0

挖矿

在主以太坊区块链中进行真正的挖矿需要一些非常专业的硬件,例如专用图形处理单元 (GPU),例如第一部分中提到的高端显卡上的那些。但是,由于您是在难度级别较低的私有链上挖掘区块,因此您可以无需此要求。要开始挖矿,请在 JavaScript 控制台上运行以下脚本


> miner.start()
null

第一个终端窗口中的更新

您将在第一个终端窗口中显示的输出日志中观察到挖矿活动


INFO [02-10|15:14:47] Updated mining threads
    ↪threads=0
INFO [02-10|15:14:47] Transaction pool price threshold
 ↪updated price=18000000000
INFO [02-10|15:14:47] Starting mining operation
INFO [02-10|15:14:47] Commit new mining work
    ↪number=1 txs=0 uncles=0 elapsed=186.855us
INFO [02-10|15:14:57] Generating DAG in progress
    ↪epoch=1 percentage=0 elapsed=7.083s
INFO [02-10|15:14:59] Successfully sealed new block
    ↪number=1 hash=c81539...dc9691
INFO [02-10|15:14:59] mined potential block
    ↪number=1 hash=c81539...dc9691
INFO [02-10|15:14:59] Commit new mining work
    ↪number=2 txs=0 uncles=0 elapsed=211.208us
INFO [02-10|15:15:04] Generating DAG in progress
    ↪epoch=1 percentage=1 elapsed=13.690s
INFO [02-10|15:15:06] Successfully sealed new block
    ↪number=2 hash=d26dda...e3b26c
INFO [02-10|15:15:06] mined potential block
    ↪number=2 hash=d26dda...e3b26c
INFO [02-10|15:15:06] Commit new mining work
    ↪number=3 txs=0 uncles=0 elapsed=510.357us

[ ... ]

INFO [02-10|15:15:52] Generating DAG in progress
    ↪epoch=1 percentage=8 elapsed=1m2.166s
INFO [02-10|15:15:55] Successfully sealed new block
    ↪number=15 hash=d7979f...e89610
INFO [02-10|15:15:55] block reached canonical chain
    ↪number=10 hash=aedd46...913b66
INFO [02-10|15:15:55] mined potential block
    ↪number=15 hash=d7979f...e89610
INFO [02-10|15:15:55] Commit new mining work
    ↪number=16 txs=0 uncles=0 elapsed=105.111us
INFO [02-10|15:15:57] Successfully sealed new block
    ↪number=16 hash=61cf68...b16bf2
INFO [02-10|15:15:57] block reached canonical chain
    ↪number=11 hash=6b89ff...de8f88
INFO [02-10|15:15:57] mined potential block
    ↪number=16 hash=61cf68...b16bf2
INFO [02-10|15:15:57] Commit new mining work
    ↪number=17 txs=0 uncles=0 elapsed=147.31us

回到第二个终端窗口

等待 10-20 秒,然后在 JavaScript 控制台上,开始检查您的余额


> eth.getBalance(eth.coinbase)
10000000000000000000

再等待一段时间,然后再次列出它


> eth.getBalance(eth.coinbase)
75000000000000000000

请记住,这是假以太币,所以暂时不要打开香槟。您无法在主以太坊网络中使用此以太币。

要停止矿工,请调用以下脚本


> miner.stop()
true

好吧,您做到了。您创建了自己的私有区块链并挖掘了一些以太币。

谁将在今天和未来从这项技术中受益?

尽管区块链最初是围绕加密货币(更具体地说是比特币)开发的,但它的用途并不止于此。今天,看起来可能就是这种情况,但在未开发的行业和市场中,区块链技术可以重新定义交易的处理方式。以下是一些想到的例子。

改进智能合约

以太坊,即之前部署的开源区块链项目,已经在做整个智能合约的事情,但这个想法仍处于起步阶段,并且随着它的成熟,它将不断发展以满足消费者的需求。这个领域还有很大的增长空间。它可能会并最终会渗透到公司治理中(例如验证数字资产、股权等)、股票交易、处理知识产权和管理产权所有权,例如土地所有权登记。

启用市场和共享经济

想想 eBay,但重新聚焦为点对点。这将意味着不再有交易费用,但它也将强调您的个人声誉的重要性,因为不会有单一机构管理商品或服务交易或交换的市场。

众筹

与我之前关于去中心化市场的评论方向相同,个人或公司也有机会筹集必要的资金来帮助“启动”他们的计划。想想一个更开放和全球化的 Kickstarter 或 GoFundMe。

多媒体共享或托管

对于有抱负的或已成名的音乐家来说,点对点网络绝对可以在这里发挥重要作用——内容将直接到达其目标受众,并避免支付给工作室、唱片公司和内容分发商的巨额版税成本。这同样适用于视频和图像内容。

文件存储和数据管理

通过启用全球点对点网络,区块链技术将云计算提升到一个全新的水平。随着该技术不断将自身推向现有的云服务市场,它将挑战传统供应商,包括 Amazon AWS 甚至 Dropbox 等——而且价格仅为它们的一小部分。例如,冷存储数据产品如今是一个数千亿美元的市场。通过在全球去中心化网络中分发您的加密档案,可以显着减少单个实体维护本地数据中心设备的需求。

社交媒体以及您发布的内容的管理方式也将在这种模式下发生变化。在区块链下,Facebook 或 Twitter 或任何其他人都不能声称您选择分享的内容的所有权。

在这里利用区块链的另一个额外好处是利用密码学来保护您的宝贵数据免受黑客攻击或丢失。

物联网

什么是物联网 (IoT)?这是一个广泛的术语,描述了非常具体的电子设备的网络化管理,其中包括供暖和制冷恒温器、灯、车库门等。通过结合软件、传感器和网络设施,人们可以轻松地启用一个环境,他们可以在其中自动化和监控家庭和/或商业设备。

供应链审计

通过向消费者提供分布式公共账本,零售商无法伪造针对其产品的声明。消费者将有能力验证他们的来源,无论是食品、珠宝还是其他任何东西。

身份管理

这里没什么好解释的。威胁非常真实。身份盗窃永不停歇。今天的过时的用户名/密码系统已经走到了尽头,现在是时候让现有的身份验证框架利用区块链提供的密码学功能了。

总结

这项革命性的技术使组织能够以十年前不可能的方式运作。它的可能性是巨大的,似乎任何处理某种基于交易的模型的行业都将被该技术颠覆。这只是时间问题。

那么,区块链的未来会是什么样呢?在这个阶段,很难说。但有一件事是肯定的;IBM 等大型公司正在对这项技术进行巨额投资,并构建自己的区块链基础设施,可以出售给企业和金融机构并供其使用。然而,这可能会产生一些问题。随着这些大公司构建他们的区块链基础设施,他们将申请专利来保护他们的技术。并且凭借这些专利,他们有可能积极对抗竞争对手,试图诋毁他们及其价值。

无论如何,如果可以原谅我,我需要去制作一些加密货币。

Petros Koutoupis,LJ 特约编辑,目前是 Cray Lustre 高性能文件系统部门的高级性能软件工程师。他还是 RapidDisk 项目的创建者和维护者。Petros 在数据存储行业工作了十多年,并帮助开创了当今广泛使用的许多技术。

加载 Disqus 评论