去以太坊
官方Golang实施以太坊协议。

API参考 去报告卡 特拉维斯 不和

自动构建可用于稳定版本和不稳定的主分支。二进制存档发布在https://geth.ethereum.org/downloads/。

建立源头
有关先决条件和详细的构建说明,请阅读Wiki上的安装说明。

构建geth需要Go(版本1.10或更高版本)和C编译器。您可以使用自己喜欢的包管理器安装它们。安装依赖项后,运行

制造geth
或者,构建全套实用程序:

做所有
可执行文件
go-ethereum项目附带了cmd 目录中的几个包装器/可执行文件。

命令 描述
geth 我们的主要以太坊CLI客户端。它是进入以太坊网络(主网络,测试网络或专用网络)的入口点,能够作为完整节点(默认),归档节点(保留所有历史状态)或轻型节点(实时检索数据)运行。它可以被其他进程用作通过HTTP,WebSocket和/或IPC传输上公开的JSON RPC端点进入以太坊网络的网关。geth --help以及命令行选项的CLI Wiki页面。
abigen 源代码生成器将以太坊契约定义转换为易于使用,编译时类型安全的Go包。如果合同字节码也可用,它可以在简单的以太坊合约ABI上运行,并具有扩展功能。但是,它也接受Solidity源文件,使开发更加简化。有关详细信息,请参阅我们的Native DApps wiki页面。
bootnode 剥离我们的以太坊客户端实现版本,该版本仅参与网络节点发现协议,但不运行任何更高级别的应用程序协议。它可以用作轻量级引导节点,以帮助在私有网络中查找对等点。
evm EVM(以太坊虚拟机)的开发人员实用程序版本,能够在可配置环境和执行模式下运行字节码片段。其目的是允许对EVM操作码进行隔离的,细粒度的调试(例如evm --code 60ff60ff --debug)。
gethrpctest 开发人员实用工具,支持我们的以太坊/ rpc-test测试套件,该测试套件验证基准符合以太坊JSON RPC规范。有关详细信息,请参阅测试套件的自述文件。
rlpdump 开发人员实用工具将二进制RLP(递归长度前缀)转储(由以太网协议网络以及共识方式使用的数据编码)转换为用户友好的分层表示(例如rlpdump --hex CE0183FFFFFFC4C304050583616263)。
puppeth CLI向导,有助于创建新的以太坊网络。
运行 geth
浏览所有可能的命令行标志超出了范围(请参阅我们的 CLI Wiki页面),但我们列举了一些常见的参数组合,以帮助您快速了解如何运行自己的geth实例。

主以太坊网络上的完整节点
到目前为止,最常见的情况是人们想要简单地与以太坊网络进行交互:创建帐户; 转移资金; 部署并与合同互动。对于这个特定的用例,用户不关心多年的历史数据,因此我们可以快速快速同步到网络的当前状态。为此:

$ geth console
该命令将:

geth以快速同步模式启动(默认情况下,可以使用--syncmode标志进行更改),使其下载更多数据以换取避免处理以太网网络的整个历史记录,这是非常耗费CPU的。
启动geth内置的交互式JavaScript控制台(通过trailing console子命令),通过它可以调用所有官方web3方法 以及geth自己的管理API。此工具是可选的,如果您将其删除,您始终可以附加到已经运行的 geth实例geth attach。
以太坊测试网络上的完整节点
转向开发人员,如果你想要创建以太坊合约,你几乎肯定希望在没有任何真正的金钱的情况下这样做,直到你掌握了整个系统。换句话说,您希望将测试网络加入您的节点,而不是连接到主网络,该节点完全等同于主网络,但仅限播放以太网。

$ geth --testnet console
该console子命令的确切含义与上述相同,他们同样在testnet有用的。如果你在这里跳过,请参阅上面的解释。

--testnet但是,指定标志会geth稍微重新配置您的实例:

而不是使用默认数据目录(~/.ethereum例如在Linux上),geth 将自己嵌套到testnet子文件夹的一个更深层次(~/.ethereum/testnet在Linux上)。请注意,在OSX和Linux上,这也意味着连接到正在运行的testnet节点需要使用自定义端点,因为geth attach默认情况下会尝试连接到生产节点端点。例如 geth attach /testnet/geth.ipc。Windows用户不受此影响。
客户端将连接到测试网络,而不是连接主以太坊网络,测试网络使用不同的P2P引导节点,不同的网络ID和创建状态。
注意:虽然有一些内部保护措施可以防止交易在主网络和测试网络之间交叉,但您应该确保始终使用单独的帐户来进行游戏币和真钱游戏。除非您手动移动帐户,geth否则默认情况下会正确分隔两个网络,并且不会在它们之间建立任何帐户。

Rinkeby测试网络上的完整节点
上述测试网络是基于ethash工作证明一致性算法的跨客户端。因此,它具有一定的额外开销,并且由于网络的低难度/安全性而更容易受到重组攻击。Go Ethereum还支持连接到名为Rinkeby (由社区成员运营)的基于证明的权威测试网络。这个网络更轻,更安全,但只有go-ethereum支持。

$ geth --rinkeby console
组态
作为将众多标志传递给geth二进制文件的替代方法,您还可以通过以下方式传递配置文件:

$ geth --config /path/to/your_config.toml
要了解文件的外观,您可以使用dumpconfig子命令导出现有配置:

$ geth --your-favorite-flags dumpconfig
注意:这仅适用于gethv1.6.0及更高版本。

Docker快速启动
在您的计算机上运行以太坊的最快捷方法之一是使用Docker:

docker run -d --name ethereum-node -v / Users / alice / ethereum:/ root \
-p 8545:8545 -p 30303:30303
复仇/客户端去
这将以geth快速同步模式启动,DB内存容量为1GB,就像上面的命令一样。它还将在您的主目录中创建一个持久卷,用于保存区块链以及映射默认端口。还有一个alpine标签可用于图像的纤薄版本。

--rpcaddr 0.0.0.0如果要从其他容器和/或主机访问RPC,请不要忘记。默认情况下,geth绑定到本地接口并且无法从外部访问RPC端点。

以编程方式连接geth节点
作为开发人员,您很快就会想要geth通过自己的程序开始与以太坊网络进行交互,而不是通过控制台手动进行交互。为此,geth内置了对基于JSON-RPC的API(标准API 和geth特定API)的支持。这些可以通过HTTP,WebSockets和IPC(基于UNIX的平台上的UNIX套接字和Windows上的命名管道)公开。

IPC接口默认启用并公开所有支持的API geth,而HTTP和WS接口需要手动启用,并且由于安全原因仅暴露API的子集。这些可以打开/关闭并按照您的预期进行配置。

基于HTTP的JSON-RPC API选项:

--rpc 启用HTTP-RPC服务器
--rpcaddrHTTP-RPC服务器侦听端口(默认:localhost)
--rpcportHTTP-RPC服务器侦听端口(默认值:8545)
--rpcapiAPI的通过HTTP-RPC接口提供的(默认:eth,net,web3)
--rpccorsdomain 逗号分隔的域名列表,从中接受跨源请求(强制执行浏览器)
--ws 启用WS-RPC服务器
--wsaddrWS-RPC服务器侦听端口(默认:localhost)
--wsportWS-RPC服务器侦听端口(默认值:8546)
--wsapiAPI的在WS-RPC接口提供的(默认:eth,net,web3)
--wsorigins 接受websockets请求的起源
--ipcdisable 禁用IPC-RPC服务器
--ipcapiAPI的在IPC-RPC接口提供的(默认:admin,debug,eth,miner,net,personal,shh,txpool,web3)
--ipcpath datadir中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 ”,
“难度”: “ 0x20000 ”,
“ extraData ”: “ ”,
“ gasLimit ”: “ 0x2fefd8 ”,
“ nonce ”: “ 0x0000000000000042 ”,
“ mixhash ”:“0x0000000000000000000000000000000000000000000000000000000000000000 “,
” parentHash “:” 0x0000000000000000000000000000000000000000000000000000000000000000 “,
” timestamp “:” 0x00 “
}
上述字段对于大多数用途应该没问题,但我们建议将其更改nonce为某个随机值,以防止未知的远程节点能够连接到您。如果您想预先为某些帐户提供资金以便于测试,您可以alloc使用帐户配置填充该字段:

“ alloc ”:{
“ 0x0000000000000000000000000000000000000001 ”:{
“ balance ”: “ 111111111 ”
},
“ 0x0000000000000000000000000000000000000002 ”:{
“ balance ”: “ 222222222 ”
}
}
使用上述JSON文件中定义的genesis状态,您需要在启动它之前使用它初始化每个 geth节点,以确保正确设置所有区块链参数:

$ geth init path / to / genesis.json
创建集合点
将要运行的所有节点初始化为所需的创建状态,您需要启动一个其他人可以用来在您的网络和/或互联网上查找彼此的引导节点。干净的方法是配置和运行专用的bootnode:

$ bootnode --genkey = boot.key
$ bootnode --nodekey = boot.key
在bootnode在线的情况下,它将显示一个enodeURL ,其他节点可以使用该URL连接到它并交换对等信息。确保[::]使用外部可访问的IP 替换显示的IP地址信息(最有可能)以获取实际的enodeURL。

注意:您也可以使用完整的geth节点作为引导节点,但这是不太推荐的方式。

启动您的成员节点
如果bootnode可操作且可从外部访问(您可以尝试 telnet 确保它确实可以访问),请geth 通过--bootnodes标志启动指向引导节点的每个后续节点以进行对等体发现。可能还需要将您的专用网络的数据目录分开,因此还要指定自定义--datadir标志。

$ geth --datadir = path / to / custom / data / folder --bootnodes = < bootnode-enode-url-from-above >
注意:由于您的网络将完全与主网络和测试网络隔离,因此您还需要配置一个矿工来处理事务并为您创建新块。

经营私人矿工
公共以太坊网络上的挖掘是一项复杂的任务,因为它只能使用GPU,需要启用OpenCL或CUDA的ethminer实例。有关此类设置的信息,请参阅EtherMining subreddit 和Genoil miner存储库。

在专用网络设置中,单个CPU矿工实例对于实际目的来说绰绰有余,因为它可以以正确的间隔生成稳定的块流,而不需要大量资源(考虑在单个线程上运行,不需要多个) )。要启动一个geth挖掘实例,请使用所有常用标志运行它,扩展为:

$ geth < usual-flags > --mine --minerthreads = 1 --etherbase = 0x00000000000000000000000000000000000000000000
这将在单个CPU线程上开始挖掘块和事务,将所有过程记入到指定的帐户--etherbase。您可以通过将默认的气体限制块汇总更改为(--targetgaslimit)并在(--gasprice)接受价格交易来进一步调整挖掘。

贡献
感谢您考虑帮助解决源代码问题!我们欢迎任何人在互联网上的贡献,并感谢即使是最小的修复!

如果您想为go-ethereum做出贡献,请分叉,修复,提交并发送拉动请求,以便维护人员查看并合并到主代码库中。如果您希望提交更复杂的更改,请先在我们的gitter频道上查看核心开发人员, 以确保这些更改符合项目的一般理念和/或获得一些早期反馈,这些反馈可以使您的工作更加努力打火机以及我们的审查和合并程序快速而简单。

请确保您的贡献符合我们的编码指南:

代码必须遵守官方Go 格式 指南(即使用gofmt)。
必须遵守官方的Go 评论 指南来记录代码。
拉取请求需要基于master分支并基于分支打开。
提交消息应该以他们修改的包为前缀。
例如“eth,rpc:make trace configs optional”
有关配置环境,管理项目依赖关系和测试过程的更多详细信息,请参阅开发人员指南。

执照
go-ethereum库(即cmd目录之外的所有代码)根据GNU宽通用公共许可证v3.0获得 许可,该COPYING.LESSER文件也包含在我们的文件库中。

go-ethereum二进制文件(即cmd目录中的所有代码)都是在GNU通用公共许可证v3.0下获得 许可的,该COPYING文件也包含在我们的文件库中。
以太坊协议的官方Go实施地址https://geth.ethereum.org