标签:ethereum
Geth简单地与以太坊网络互动:创建账户; 转移资金; 部署和与合同交互。 对于这种特殊的使用情况,我们不会关心过去几年的历史数据,所以可以快速同步到当前的网络状态。 要做到这一点:
$ geth console
该命令将:
向开发人员过渡时,如果您想要创建以太坊合约,几乎可以肯定的是,除非您掌握整个系统,否则不需要真正的资金。 换句话说,您不想连接到主网络,而想要加入与您的节点相连的测试网络,该节点完全等同于主网络,但仅限于Play-Ether。
$ geth --testnet console
控制台子命令具有与上述完全相同的含义,它们在测试网上也同样有用。然而,指定--testnet标志会重新配置你的Geth实例:
上述测试网络是基于ethash工作证明共识算法的跨客户端网络。 因此,由于网络的低难度/安全性,它具有一定的额外开销并且更容易受到重组攻击。 Go Ethereum还支持连接到称为Rinkeby的权威证明测试网络(由社区成员运营)。 这个网络更轻,更安全,但只受到以太坊的支持。
$ geth --rinkeby console
作为将众多标志传递给geth二进制文件的替代方法,您还可以通过以下方式传递配置文件:
$ geth --config /path/to/your_config.toml
使用dumpconfig子命令来导出你现有的配置:
$ geth dumpconfig
注意:这只适用于geth v1.6.0及以上版本。
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和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 init path/to/genesis.json
如果所有要运行的节点都初始化为所需的生成状态,则需要启动引导程序节点,其他人可以使用它来在网络中和/或通过互联网找到彼此。干净的方法是配置和运行专用的引导节点:
$ bootnode --genkey = boot.key
$ bootnode --nodekey = boot.key
在bootnode联机的情况下,它会显示一个enode URL,其他节点可以使用它来连接它并交换对等信息。确保使用外部可访问的IP替换显示的IP地址信息(最可能是[::])以获取实际的enode URL。
注意:您也可以使用完全成熟的Geth节点作为引导节点,但这是不太推荐的方式。
在bootnode运行并可从外部访问的情况下(您可以尝试telnet <ip> <port>以确保它确实可以访问),请通过--bootnodes标志启动每个后续Geth节点,指向该对等方发现的bootnode。将私有网络的数据目录分开可能也是可取的,所以也要指定一个自定义--datadir标志。
$ geth --datadir = path / to / custom / data / folder --bootnodes = <bootnode-enode-url-from-above>
注意:由于您的网络将与主网络和测试网络完全隔离,因此您还需要配置矿工来处理事务并为您创建新块。
在公共以太坊网络上进行挖掘是一项复杂的任务,因为它只能使用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)接受价格交易来进一步调整采矿。
enumerate 英 [??nju:m?re?t] 美 [??nu:m?re?t] vt.列举,枚举,数
combo 英 [?k?mb??] 美 [?kɑ:mbo?] n.小型爵士乐队,小型伴舞乐队;<美口>套餐,如色拉、三明治、饮料等的组合食物
invoke 英 [?n?v??k] 美 [?n?vo?k] vt.乞灵,祈求;提出或授引…以支持或证明;召鬼;借助
equivalent 英 [??kw?v?l?nt] 美 [??kw?v?l?nt] adj.相等的,相当的,等效的;等价的,等积的;[化学]当量的
n.对等物;[化学]当量
nest 英 [nest] 美 [n?st] n.(鸟)窝;温床;(套叠在一起的)一套物件;藏匿处 vt.筑巢;嵌套 vi.筑巢
subvert 英 [s?b?v?:t] 美 [s?b?v?:rt] vt.破坏;颠覆,推翻;搅乱人心;败坏风化
malicious 英 [m??l???s] 美 [m??l???s] adj.恶意的,有敌意的;蓄意的;预谋的;存心不良的
rendezvous 英 [?r?nd?vu:] 美 [?rɑ:nd?vu:] n.约会;约会的地点;集结地 vi.会合;约会
vt.在指定地点与…相会
feasible 英 [?fi:z?bl] 美 [?fiz?b?l] adj. 可行的;可用的;可实行的;可能的
tune 英 [tju:n] 美 [tu:n] n.曲调,曲子;和谐,调谐;语调;心情
vt.调整;使和谐,使一致;调整(频率);为…调音
vi.协调;[无线]调谐
converge 英 [k?n?v?:d?] 美 [k?n?v?:rd?] vi.聚集;(线条、运动的物体等)会于一点;人或车辆汇集
vt.使聚集
solidity 英 [s??l?d?ti] 美 [s??l?d?ti] n.固性;硬度;可靠性;固态
标签:ethereum
原文地址:http://blog.51cto.com/12880687/2083406