ethereum入门

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ethereum入门相关的知识,希望对你有一定的参考价值。

Geth

以太坊网络上的完整节点

简单地与以太坊网络互动:创建账户; 转移资金; 部署和与合同交互。 对于这种特殊的使用情况,我们不会关心过去几年的历史数据,所以可以快速同步到当前的网络状态。 要做到这一点:

$ geth console

该命令将:

  • 在快速同步模式下启动geth(默认情况下,可以使用--syncmode标志进行更改),导致它下载更多数据以避免处理以太网网络的整个历史记录,这是非常耗费CPU的。
  • 启动Geth的内置交互式javascript控制台(通过尾部控制台子命令),通过它可以调用所有官方web3方法以及Geth自己的管理API。 这也是可选的,如果你把它放在外面,你可以使用geth attach附加到已经运行的Geth实例。

以太坊测试网络上的完整节点

向开发人员过渡时,如果您想要创建以太坊合约,几乎可以肯定的是,除非您掌握整个系统,否则不需要真正的资金。 换句话说,您不想连接到主网络,而想要加入与您的节点相连的测试网络,该节点完全等同于主网络,但仅限于Play-Ether。

$ geth --testnet console

控制台子命令具有与上述完全相同的含义,它们在测试网上也同样有用。然而,指定--testnet标志会重新配置你的Geth实例:

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

Rinkeby测试网络上的完整节点

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

$ geth --rinkeby console

配置

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

$ geth --config /path/to/your_config.toml

使用dumpconfig子命令来导出你现有的配置:

 $ geth dumpconfig

注意:这只适用于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 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)接受价格交易来进一步调整采矿。

用法示例

  • 创建账户
    为了在以太坊网络上做任何事情,你需要ethr,并得到它,你需要创建一个帐户。 有很多方法可以解决这个问题,但最简单的方法是通过控制台。
    personal.newAccount("Write here a good, randomly generated, passphrase!")
    默认第一个创建的用户为主用户,查看用户命令:
    web3.eth.accounts
    账户的排序反映了他们创建的时间。 密钥文件存储在DATADIR / keystore下,可以通过复制其中包含的文件在客户端之间传输。 这些文件使用密码加密,如果它们包含任何数量的以太网,则应备份。 但是,请注意,如果您传输个别密钥文件,则提交的帐户顺序可能会发生变化,您可能无法在同一位置结束同一帐户。 因此请注意,只要您不将外部密钥文件复制到您的密钥存储区,只依赖帐户索引即可。

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入门的主要内容,如果未能解决你的问题,请参考以下文章

ethereum入门-常用命令示例(节点添加查看等)

推荐net开发cad入门阅读代码片段

以太坊智能合约开发工具 Truffle 最佳入门指导1

智能合约入门

Atom编辑器入门到精通 Atom使用进阶

Cg入门20:Fragment shader - 片段级模型动态变色(实现汽车动态换漆)