如何使用开源工具建立一个私有的以太坊区块链,了解区块链技术可以增加价值的一些市场和行业。
在第一部分中,我花了很多时间探索加密货币以及使其成为可能的机制:区块链。我详细介绍了一下关于区块链如何工作以及为什么它如此安全和强大。在第二部分中,我将介绍如何使用开源工具设置和配置您自己的私有以太坊区块链。我也看在这个技术可以带来一些价值或帮助重新定义人们的方式在更开放的网络上进行交易。
建立您自己的私有区块链网络
在本节中,我将探讨基于以太坊的区块链网络机制 - 具体来说,如何创建一个私有的以太坊区块链,一个托管和共享此区块链的私人网络,一个帐户,然后如何做一些有趣的事情。
什么是以太坊?以太坊是一个开源和公共区块链具有智能合约(即脚本)功能的平台。它类似于比特币,但不同之处在于它超越了货币交易。
智能合约是用编程语言编写的,例如Solidity(类似于C和JavaScript),Serpent(类似于Python),LLL(a类似Lisp的语言)和Mutan(Go-based)。编制智能合约进入EVM(见下文)字节码并部署在以太坊区块链中执行。智能合约有助于交换金钱,财产,股票或任何有价值的东西,它在透明和无冲突的情况下这样做避开传统中间人的方式。
如果你还记得第一部分,任何一个典型的布局区块链是所有节点都连接到每个其他节点的区块链,创建一个网格。在以太坊的世界中,这些节点被引用作为以太坊虚拟机(EVM),每个EVM将托管一份副本整个区块链。每个EVM也将竞争下一个阻止或验证交易。一旦新块被附加到区块链,更新传播到整个网络,这样每个节点都是同步的。
要成为以太坊网络上的EVM节点,您需要下载并安装适当的软件。要做到这一点,你会使用Geth(Go Ethereum)。 Geth是Go的官方实施以太坊协议。它是三个这样的实现工具之一;另外两个是用C ++和Python编写的。这些开源软件软件包根据GNU宽通用公共许可证(LGPL)获得第三个许可版本.所有人的独立Geth客户端软件包支持的操作系统和体系结构(包括Linux)可在这里使用,软件包的源代码托管在GitHub上。
Geth是一个用于通信的命令行界面(CLI)工具与以太坊网络。它旨在充当您的计算机和以太坊网络中的所有其他节点。当一块正在由网络上的另一个节点,即Geth安装中挖矿将通知更新,然后将信息传递给更新区块链的本地副本。有了Geth实用程序,你就可以了能够挖掘以太币(类似于比特币,但以太币可以在两个地址之间转移资金,创造智能合约等等。
下载和安装
在我的示例中,我正在配置此以太坊区块链最新的LTS版本的Ubuntu。 请注意,工具本身是不限于此分发或发布。
从项目网站下载和安装二进制文件
下载最新的稳定版本,将其解压缩并复制到适当的版本
目录:
$ 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会的帮助这个私人或“testnet”设置。使用该工具,你会能够做任何以太坊平台广告的一切,没有需要真正的以太网。
请记住,区块链只不过是数字和公共的分类帐按时间顺序保存交易。什么时候新事务被验证并配置成块,块然后附加到链,然后分布在链网络。该网络上的每个节点都将更新其本地副本链到最新的副本。但是你需要从某个方面开始 - a开始或起源。每个区块链都以一个创世块开头,也就是说,一个块“零”或链的第一个块。它将是没有前任的唯一街区。创造你的私人区块链,你需要创建这个创世块。至这样做,你需要创建一个自定义的创世纪文件,然后告诉Geth使用该文件来创建自己的genesis块。
创建一个目录路径来托管所有与以太坊相关的数据配置并更改到config子目录:
$ mkdir ~/eth-evm
$ cd ~/eth-evm
$ mkdir config data
$ cd config
打开首选文本编辑器并将以下内容保存到a在同一目录中名为Genesis.json的文件:
{
"config": {
"chainId": 999,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"difficulty": "0x400",
"gasLimit": "0x8000000",
"alloc": {}
}
这就是你的genesis文件的样子。 这个简单的JSON格式string描述以下内容:
config - 此块定义自定义链的设置。
chainId - 这标识你的区块链,因为主要的以太坊网络有自己的,你需要配置自己独特的您私链的价值。
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:
您的私人区块链现已创建。 下一步涉及开始允许您挖掘新块并拥有它们的专用网络添加到您的区块链。 为此,请输入:
[email protected]:~/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
↪[email protected][::]: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
↪[email protected][::]: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。
多媒体共享或托管
有抱负或成熟音乐家的点对点网络绝对可以在这里走很长的路 - 一个内容将达到的地方它的目标受众直接,并避免支付高额的特许权使用费去工作室,唱片公司和内容发行商。一样
适用于视频和图像内容。
文件存储和数据管理
通过启用全球点对点网络,区块链技术将云计算提升到一个全新的水平。随着技术的继续为了进入现有的云服务市场,它将面临挑战传统供应商,包括亚马逊AWS甚至Dropbox和其他人 - 它将以一小部分价格这样做。例如,冷存储数据产品今天是一个价值数千亿美元的市场。通过在全球和分散的地方分发加密档案网络,需要单一维护本地数据中心设备实体显着减少。
社交媒体以及您发布的内容的管理方式会发生变化这个模型也是如此。在区块链,Facebook或Twitter或任何人否则不能声称你选择分享的内容。
利用区块链的另一个好处就是利用密码学保护您的宝贵数据不被黑客入侵或丢失。
物联网
什么是物联网(IoT)?这是一个广义的术语描述网络化管理非常具体的电子设备,包括加热和冷却恒温器,灯,车库门等。运用人们可以将软件,传感器和网络设施相结合轻松实现可以自动化和监控家庭的环境和/或商业设备。
供应链审计
通过向消费者提供分布式公共分类帐,零售商不能伪造对其产品的索赔。消费者将有能力验证其来源,无论是食物,珠宝或其他任何东西。
身份管理
这里没有太多要解释的。威胁是非常真实的。个人信息的盗窃永远不会有停止的一天。今天的用户名/密码系统已经完成了他们的课程,现在是现有认证的时候了框架利用了提供的加密功能区块链。
概要
这种革命性的技术使组织能够以这种方式实现十年前不可能的事情。它的潜力是巨大的,似乎任何行业都在处理某种基于交易的行为模型将被技术破坏。这只是时间问题。
现在,区块链的未来会是什么样子?在这个阶段,很难说。但有一件事是肯定的;像IBM这样的大公司正在对这项技术进行大量投资并建立自己的区块链基础设施,可以出售给并由企业和金融机构使用。这个但是,可能会产生一些问题。随着这些大公司的建立区块链基础设施,他们将申请专利保护他们的技术。并且在他们的信息库库中有这些专利,存在他们可会积极地反对竞争对手企图诋毁他们及其价值。
来源:区块网