配置区块链网络并利用该技术

当前位置:首页 > 区块链 > 区块链知识 发布时间:2018-07-12编辑:来源:www.chgold.com阅读数: 手机阅读

如何使用开源工具建立一个私有的以太坊区块链,了解区块链技术可以增加价值的一些市场和行业。

在第一部分中,我花了很多时间探索加密货币以及使其成为可能的机制:区块链。我详细介绍了一下关于区块链如何工作以及为什么它如此安全和强大。在第二部分中,我将介绍如何使用开源工具设置和配置您自己的私有以太坊区块链。我也看在这个技术可以带来一些价值或帮助重新定义人们的方式在更开放的网络上进行交易。建立您自己的私有区块链网络在本节中,我将探讨基于以太坊的区块链网络机制 - 具体来说,如何创建一个私有的以太坊区块链,一个托管和共享此区块链的私人网络,一个帐户,然后如何做一些有趣的事情。什么是以太坊?以太坊是一个开源和公共区块链具有智能合约(即脚本)功能的平台。它类似于比特币,但不同之处在于它超越了货币交易。智能合约是用编程语言编写的,例如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.jsonWARN [02-10|15:11:41] No etherbase set and no accounts found↪as defaultINFO [02-10|15:11:41] Allocated cache and file handles ↪database=/home/petros/eth-evm/data/PrivateBlockchain/↪geth/chaindata cache=16 handles=16INFO [02-10|15:11:41] Writing custom genesis blockINFO [02-10|15:11:41] Successfully wrote genesis state ↪database=chaindatahash=d1a12d...4c8725INFO [02-10|15:11:41] Allocated cache and file handles ↪database=/home/petros/eth-evm/data/PrivateBlockchain/↪geth/lightchaindata cache=16 handles=16INFO [02-10|15:11:41] Writing custom genesis blockINFO [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 9999WARN [02-10|15:11:59] No etherbase set and no accounts found↪as defaultINFO [02-10|15:11:59] Starting peer-to-peer node ↪instance=Geth/v1.7.3-stable-4bb3c89d/linux-amd64/go1.9.2INFO [02-10|15:11:59] Allocated cache and file handles ↪database=/home/petros/eth-evm/data/PrivateBlockchain/↪geth/chaindata cache=128 handles=1024WARN [02-10|15:11:59] Upgrading database to use lookup entriesINFO [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=3INFO [02-10|15:11:59] Disk storage enabled for ethash DAGs↪dir=/home/petros/.ethash count=2INFO [02-10|15:11:59] Initialising Ethereum protocol ↪versions="[63 62]" network=9999INFO [02-10|15:11:59] Database deduplication successful ↪deduped=0INFO [02-10|15:11:59] Loaded most recent local header ↪number=0 hash=d1a12d...4c8725 td=1024INFO [02-10|15:11:59] Loaded most recent local full block ↪number=0 hash=d1a12d...4c8725 td=1024INFO [02-10|15:11:59] Loaded most recent local fast block ↪number=0 hash=d1a12d...4c8725 td=1024INFO [02-10|15:11:59] Regenerated local transaction journal ↪transactions=0 accounts=0INFO [02-10|15:11:59] Starting P2P networkingINFO [02-10|15:12:01] UDP listener up ↪self=enode://f51957cd4441f19d187f9601541d66dcbaf560↪770d3da1db4e71ce5ba3ebc66e60ffe73c2ff01ae683be0527b77c0f96↪[email protected][::]:30303INFO [02-10|15:12:01] IPC endpoint opened: /home/petros/eth-evm/↪data/PrivateBlockchain/geth.ipcINFO [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.ipcWelcome to the Geth JavaScript console!instance: Geth/v1.7.3-stable-4bb3c89d/linux-amd64/go1.9.2modules: 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=0INFO [02-10|15:14:47] Transaction pool price threshold↪updated price=18000000000INFO [02-10|15:14:47] Starting mining operationINFO [02-10|15:14:47] Commit new mining work ↪number=1 txs=0 uncles=0 elapsed=186.855usINFO [02-10|15:14:57] Generating DAG in progress ↪epoch=1 percentage=0 elapsed=7.083sINFO [02-10|15:14:59] Successfully sealed new block ↪number=1 hash=c81539...dc9691INFO [02-10|15:14:59] mined potential block ↪number=1 hash=c81539...dc9691INFO [02-10|15:14:59] Commit new mining work ↪number=2 txs=0 uncles=0 elapsed=211.208usINFO [02-10|15:15:04] Generating DAG in progress ↪epoch=1 percentage=1 elapsed=13.690sINFO [02-10|15:15:06] Successfully sealed new block ↪number=2 hash=d26dda...e3b26cINFO [02-10|15:15:06] mined potential block ↪number=2 hash=d26dda...e3b26cINFO [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.166sINFO [02-10|15:15:55] Successfully sealed new block ↪number=15 hash=d7979f...e89610INFO [02-10|15:15:55] block reached canonical chain ↪number=10 hash=aedd46...913b66INFO [02-10|15:15:55] mined potential block ↪number=15 hash=d7979f...e89610INFO [02-10|15:15:55] Commit new mining work ↪number=16 txs=0 uncles=0 elapsed=105.111usINFO [02-10|15:15:57] Successfully sealed new block ↪number=16 hash=61cf68...b16bf2INFO [02-10|15:15:57] block reached canonical chain ↪number=11 hash=6b89ff...de8f88INFO [02-10|15:15:57] mined potential block ↪number=16 hash=61cf68...b16bf2INFO [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嗯,你做到了。 你创建了自己的私有区块链并开采了一些以太币。谁将从今天和未来的技术中受益?尽管区块链最初是围绕加密货币开发的(更具体地说,比特币),它的用途不止于此。今天,看起来似乎就是这种情况,但还有未开发的行业区块链技术可以重新定义交易方式的市场被处理。以下是一些想到的例子。改善智能合约以太坊,部署了相同的开源区块链项目,很早就已经在做整个智能合约了,但是这个想法仍然处于起步阶段,随着它的成熟,它将逐步发展消费者需求。这方面有很大的增长空间区。它可能并最终将进入公司治理(如验证数字资产,股权等),交易股票,处理知识产权和管理财产所有权,如土地所有权登记。

上一篇FCoin交易所账户注册流程

下一篇HyperPay手机钱包 1.4 版本使用指南

区块链知识本月排行

区块链知识精选