扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
Go Ethereum是以太坊协议的三个原始实现(以及C ++和Python)之一。 它是用Go编写的,完全开放源代码并在GNU LGPL v3下获得许可。
Go Ethereum可以作为独立的客户端Geth使用,您可以将其安装在任何操作系统上,也可以作为可以嵌入Go,Android或iOS项目的库。
在这里只介绍在Ubuntu环境下的源码安装,执行以下操作
geth缺省会连接到以太坊官方的正式网络上去,这个正式网络里的区块目前已经有多达500多万块,而且里面跑的都是要花真金白银的交易
$ geth console
该命令将:
向开发人员过渡时,如果您想要创建以太坊合约,几乎可以肯定的是,除非您掌握整个系统,否则不需要真正的资金。 换句话说,您不想连接到主网络,而想要加入与您的节点相连的测试网络,该节点完全等同于主网络,但仅限于Play-Ether。
$ geth --testnet console
控制台子命令具有与上述完全相同的含义,它们在测试网上也同样有用。然而,指定--testnet标志会重新配置你的Geth实例:
上述测试网络是基于ethash工作证明共识算法的跨客户端网络。 因此,由于网络的低难度/安全性,它具有一定的额外开销并且更容易受到重组***。 Go Ethereum还支持连接到称为Rinkeby的权威证明测试网络(由社区成员运营)。 这个网络更轻,更安全,但只受到以太坊的支持。
$ geth --rinkeby --datadir=path/to/your/databases/and/keystore --syncmode=fast --rpc console
示例 :
$geth --rinkeby --datadir=$HOME/rinkeby --syncmode=fast --rpc --ethstats='KenmyZhang:Respect my authoritah!@stats.rinkeby.io'
注意:这里的KenmyZhang是给我的机器起的名字,你需要改变成一个不会和别人重复的名字,否则会出错误,而后面不需要改动,这个Respect my authoritah!是密码,通用的,无需改动;成功运行起来后可以在https://www.rinkeby.io/#stats 查看到你的机器
配置替代flag启动方式使用dumpconfig子命令来导出你现有的配置:
$ geth --rinkeby --datadir=path/to/your/databases/and/keystore --syncmode=fast --rpc dumpconfig > ~/your_config.toml
这样以后我们再执行的时候,就直接执行
$ geth --config /path/to/your_config.toml
注意:这只适用于geth v1.6.0及以上版本。
Docker快速启动方式docker run -d --name ethereum-node -v /Users/alice/ethereum:/root \
-p 8545:8545 -p 30303:30303 \
ethereum/client-go
这将在快速同步模式下启动,具有1GB的DB内存容量,就像上述命令一样。 它还会在您的主目录中创建一个永久卷,以保存您的区块链以及映射默认端口。 还有一个alpine标签可用于图像的纤细版本。
如果您想从其他容器和/或主机访问RPC,请不要忘记--rpcaddr 0.0.0.0。 默认情况下,geth绑定到本地接口,RPC端点无法从外部访问。
以编程方式连接Geth节点作为一名开发人员,不久后你会想通过自己的程序开始与Geth和Ethereum网络进行交互,而不是通过控制台手动进行交互。 为了解决这个问题,Geth建立了对基于JSON-RPC的API(标准API和Geth特定API)的支持。 这些可以通过HTTP,WebSockets和IPC(基于unix的平台上的unix套接字,以及Windows上的命名管道)公开。
IPC接口默认启用并公开Geth支持的所有API,而HTTP和WS接口需要手动启用,并且由于安全原因而仅公开一部分API。 这些可以打开/关闭,并按照您的设定进行配置
基于HTTP的JSON-RPC API选项:
--rpc 启用HTTP-RPC服务器
--rpcaddr HTTP-RPC服务器侦听接口(默认值:“localhost”)
--rpcport HTTP-RPC服务器侦听端口(默认值:8545)
--rpcapi 通过HTTP-RPC接口提供的API(默认:“eth,net,web3”)
--rpccorsdomain 逗号分隔的接受跨源请求的域列表(浏览器强制执行)
--ws启用WS-RPC服务器
--wsaddr WS-RPC服务器监听接口(默认值:“localhost”)
--wsport WS-RPC服务器侦听端口(默认值:8546)
--wsapi 通过WS-RPC接口提供的API(默认:“eth,net,web3”)
--wsorigins接受websockets请求的起源
--ipcdisable禁用IPC-RPC服务器
--ipcapi 通过IPC-RPC接口提供的API(默认值:“admin,debug,eth,miner,net,personal,shh,txpool,web3”)
--ipcpath数据区中IPC套接字/管道的文件名(显式路径将其转义)
您需要使用您自己的编程环境的功能(库,工具等)通过HTTP,WS或IPC连接到配置有上述标志的Geth节点,并且您需要在所有传输中说出JSON-RPC。您可以对多个请求重复使用相同的连接!
注意:请理解在此之前打开基于HTTP / WS的传输所带来的安全隐患!互联网上的***正在积极尝试用暴露的API来颠覆以太节点!此外,所有浏览器选项卡都可以访问本地运行的Web服务器,因此恶意网页可能会尝试颠覆本地可用的API!
实战- 从零开始搭建以太坊私有网络维护您自己的专用网络更为重要,因为官方网络中许多理所当然的配置需要手动设置。
定义私有创世纪状态首先,您需要创建您的网络的创世纪状态,所有节点都需要了解并达成一致。 这包含一个小JSON文件(例如,将其称为genesis.json):
{
"config": {
"chainId": 0,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"alloc" : {},
"coinbase" : "0x0000000000000000000000000000000000000000",
"difficulty" : "0x20000",
"extraData" : "",
"gasLimit" : "0x2fefd8",
"nonce" : "0x0000000000000042",
"mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp" : "0x00"
}
上述字段对于大多数目的应该没问题,但我们建议将随机数更改为某个随机值,以防止未知的远程节点能够连接到您。 如果您想预先为某些帐户提供资金以便于测试,则可以使用帐户配置填充alloc字段:
"alloc": {
"0x0000000000000000000000000000000000000001": {"balance": "111111111"},
"0x0000000000000000000000000000000000000002": {"balance": "222222222"}
}
在上面的JSON文件中定义了Geneis状态之后,您需要在启动每个Geth节点之前初始化它,以确保正确设置所有区块链参数:
$ geth --datadir=path/to/your/databases/and/keystore init path/to/genesis.json
--datadir数据库和密钥库的数据目录,默认是在“~/.ethereum”
方法二:在执行启动命令的参数中添加以下参数
--datadir=path/to/your/databases/and/keystore init path/to/genesis.json
附-参数详解:
mixhash: 与nonce配合用于挖矿,由上一个区块的一部分生成的hash。注意他和nonce的设置需要满足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章节所描述的条件。
nonce: nonce就是一个64位随机数,用于挖矿,注意他和mixhash的设置需要满足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章节所描述的条件。
difficulty: 设置当前区块的难度,如果难度过大,cpu挖矿就很难,这里设置较小难度
alloc: 用来预置账号以及账号的以太币数量,因为私有链挖矿比较容易,所以我们不需要预置有币的账号,需要的时候自己创建即可以。
coinbase: 矿工的账号,随便填
timestamp: 设置创世块的时间戳
parentHash: 上一个区块的hash值,因为是创世块,所以这个值是0
extraData: 附加信息,随便填,可以填你的个性信息
gasLimit: 该值设置对GAS的消耗总量限制,用来限制区块能包含的交易信息总和,因为我们是私有链,所以填大。
创建会合点所有要运行的节点都初始化为所需的创世纪状态,则需要启动引导程序节点,其他人可以使用它来在网络中和/或通过互联网找到彼此。方法是配置和运行专用的引导节点:
$ bootnode --genkey=boot.key
$ bootnode --nodekey=boot.key
INFO [03-06|17:35:12] UDP listener up self=enode://4cd15426a69ebf094a1cdeda9e6c987752c1108d87bcc6331be10f464e0c5d9e14197495584e58a986d933ad5a39da5fa1dfa84b7f793b4bde94e1578bfaf57e@[::]:3030
在bootnode联机的情况下,它会显示一个enode URL,其他节点可以使用它来连接它并交换对等信息。确保使用外部可访问的IP替换显示的IP地址信息(最可能是[::])以获取实际的enode URL。
注意:您也可以使用完全成熟的Geth节点作为引导节点,但这是不太推荐的方式。
以太坊节点可以用URL方案“enode”来描述。
十六进制节点ID编码在URL的用户名部分,与主机通过@符号分隔。 主机名只能作为IP地址给出,不允许DNS域名。 主机名部分的端口是TCP侦听端口。 如果TCP和UDP(发现)端口不同,则将UDP端口指定为查询参数“discport”。
在以下示例中,节点URL描述了IP地址为10.3.58.6,TCP监听端口30303和UDP发现端口30301的节点。
enode://6f8a80d14311c39f35f516fa664deaaaa13e85b2f7493f37f6144d86991ec012937307647bd3b9a82abe2974e1407241d54947bbb39763a4cac9f77166ad92a0@10.3.58.6:30303 discport=30301
enode url方案由Node发现协议使用,可用于客户端的bootnodes命令行选项或作为JSRE中的suggestPeer(nodeURL)函数的参数。
在bootnode运行并可从外部访问的情况下(您可以尝试telnet
$ geth -port=listenPort --datadir=path/to/your/databases/and/keystore --bootnodes=
注意:由于您的网络将与主网络和测试网络完全隔离,因此您还需要配置矿工来处理事务并为您创建新块。
经营私人矿工在公共以太坊网络上进行挖掘是一项复杂的任务,因为它只能使用GPU,需要OpenCL或CUDA启用的ethminer实例。有关这种设置的信息,请查看https://www.reddit.com/r/EtherMining/ 或者https://github.com/ethereum-mining/ethminer矿工资源库。
但是,在专用网络设置中,单个CPU采集器实例对于实际应用来说已经足够了,因为它可以在不需要大量资源的情况下以正确的时间间隔产生稳定的数据块流(考虑在单个线程上运行,不需要多个)。要为挖掘启动Geth实例,请使用所有通常的标志运行它,并通过扩展:
$ geth <常见标志> --mine --minerthreads = 1 --etherbase = 0x0000000000000000000000000000000000000000
这将在单个CPU线程上开始挖掘块和事务,并将所有过程记录到由--etherbase指定的帐户。您可以通过将默认气体限制块更改为(--targetgaslimit)并在(--gasprice)接受价格交易来进一步调整采矿。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流