初始以太坊

Posted 龍龍哥

tags:

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

以太坊客户端

  • 以太坊客户端是一个软件应用程序,它实现以太坊规范并通过p2p网络与其他以太坊客户端进行通信。如果不同的以太坊客户端符合参考规范和标准化通信协议,则可以进行相互操作。
  • 以太坊是一个开源项目,由“黄皮书”正式规范定义。除了各种以太坊改进提案之外,此正式规范还定义了以太坊客户端的标准行为。
  • 因为以太坊有明确的正式规范,以太网客户端有了许多独立开发的软件实现,它们之间又可以彼此交互。

以太坊全节点

  • 全节点是整个主链的一个副本,存储并维护链上的所有数据,并随时验证新区块的合法性。
  • 区块链的健康和扩展弹性,取决于具有许多独立操作和地理上分散的全节点。每个全节点都可以帮助其他新节点获取区块数据,并提供所有交易和合约的独立验证。
  • 运行全节点将耗费巨大的成本,包括硬件资源和贷款。
  • 以太坊开发不需要在实时网络上运行的全节点。我们可以使用测试网络的节点来代替,也可以用本地私链,或者使用服务商提供的基于云的以太坊客户端;这些几乎都可以执行所有操作。

全节点的优缺点

优点

  • 为以太坊网络的灵活性和抗审查性提供有力的支持
  • 权威地验证所有的交易
  • 可以直接与公共区块链上的任何合约交互
  • 可以离线查询区块链状态(账户,合约等)
  • 可以直接把自己的合约部署到公共区块链中

缺点

  • 需要巨大的硬件和宽带资源,而且会不断增长
  • 第一次下载往往需要几天才能完全同步
  • 必须及时维护,升级并保持在线状态以同步区块

本地私链的优缺点

优点

  • 磁盘上几乎没有数据,也不同步别的数据,是一个完全“干净”的环境
  • 无需获取测试以太,你可以任意分配以太,也可以随时自己挖矿获得
  • 没有其他用户,也没有其他合约,没有任何外部干扰
    缺点
  • 没有其他用户意味着与公链的行为不同,发送的交易并不存在空间或交易顺序的竞争
  • 除自己之外没有矿工意味着挖矿更容易预测,因此无法测试公链上发生的某些情况
  • 没有其他合约,意味着你必须部署要测试的所有内容,包括所有的依赖项合约库

远程客户端和轻节点

  • 远程客户端
    不存储区块链的本地副本或验证块和交易。这些客户端一般只提供钱包的功能,可以创建和广播交易。远程客户端可用于连接到现有网络,MetaMask就是这样一个的客户端。
  • 轻节点
    不保存链上的区块历史数据,只保存区块链当前的状态。轻节点可以对块和交易进行验证。

搭建以太坊智能合约开发环境

搭建以太坊智能合约开发环境


相关概念

  • 什么是智能合约?

    如果我们把以太坊看作是一台"全球计算机",那么智能合约就是是运行在以太坊这个"全球计算机"上的"进程"。

    注:之所以有上述比喻,是因为以太坊网络的节点遍布全球,在这样的网络中运行计算就相当于在"一台全球计算机"中运行计算。

  • 为什么叫智能合约?

    智能:智能合约是可以自动运行的。

    合约:以太坊的合约代码多会涉及一些资产转移,而现实世界中签订合同也多是伴随着资产转移,因此把这样的代码叫合约。

以太坊智能合约开发环境介绍

以太坊智能合约是运行在以太坊节点上的,因此安装开发环境时,就需要安装至少一个以太坊节点(详见下文Geth安装步骤)。

注:不只是以太坊,学习其他区块链平台前,也是需要安装对应区块链平台的节点的。

以太坊针对多种语言(Go、C++、Rust、Java、Python),都开发了对应的客户端软件,其中最受欢迎的还是Gethgo-ethereum),它是由Go语言编写的。

Linux安装Geth

提示:本人的安装环境为Ubuntu18

官网安装说明见:https://geth.ethereum.org/docs/install-and-build/installing-geth

  • 以命令行的方式安装

    1. sudo add-apt-repository -y ppa:ethereum/ethereum

    2. sudo apt-get update

    3. sudo apt-get install ethereum

    4. 输入geth --help验证一下

  • 以压缩包的方式安装(略)

搭建私网并启动Geth

相关概念:

  • 主网:以太坊真是节点运行的网络,节点遍布全球,此网络中使用的ETH是真实的虚拟数字货币,部署合约时需要消耗真金白银。
  • 测试网:测试网的节点没有主网节点那么多,主要是为以太坊开发者提供一个测试的平台环境,此网络上的ETH可以通过做任务获得。
  • 私网:私网是由开发者自行组建的网络,不与主网及测试网连通,独立存在,仅用于个人测试或企业项目使用。

不论是主网、测试网还是私网,都可以使用Geth来启动;Geth默认连接的是以太网主网,如果想要连接测试网可以连接Ropstenrinkeby

// Ropsten测试网络
geth --testnet --fast --cache=512 console
// Rinkeby测试网络
geth --rinkeby --fast --cache=512 console

第一步:配置创世块文件

创建genesis.json文件:

{
    "config":{
        "chainId": 18,
        "homesteadBlock": 0,
        "eip150Block": 0,
        "eip155Block": 0,
        "eip158Block": 0
    },
    "alloc": {},
    "coinbase":"0x0000000000000000000000000000000000000000",
    "difficulty":"0x2",
    "extraData":"",
    "gasLimit":"0xffffffff",
    "nonce":"0x0000000000000042",
    "mixhash":"0x0000000000000000000000000000000000000000000000000000000000000000",
    "parentHash":"0x0000000000000000000000000000000000000000000000000000000000000000",
    "timestamp": "0x00"
}
  • coinbase:挖矿后获得奖励的账户地址
  • difficulty:挖矿难度
  • gasLimit:一个区块所能容纳gas的上限,智能合约指令在执行时需要消耗gas,,可通过以太币自动兑换
  • nonce:随机值
  • mixhash:一个256位的hash证明,与nonce相结合,验证本块的有效性
  • extraData:附加信息,随意填写
  • parentHash:前一块的hash值,创世块的parentHash值为0

第二步:数据初始化

初始化指令

geth init genesis.json --datadir ./data
  • init:初始化关键字
  • datadir:指定数据存储位置

效果如图:

第三步:启动Geth节点

geth --datadir ./data --networkid 18 --port 30303 --http --http.port 8545 --http.api 'db,net,eth,web3,personal' --http.corsdomain '*' --allow-insecure-unlock console 2> 1.log
  • datadir:指定之前第二步初始化的数据目录文件
  • networkid:配置成与第一步genesis.json配置文件config内的chainId相同值,代表加入哪个网络,私网随意编号即可
  • port:P2P端口,即:节点之间互相通信的端口
  • http:开启远程调用服务
  • http.port:远程服务端口,默认值为8545
  • http.api:远程服务提供的远程调用函数集
  • http.corsdomain:指定可以接收请求来源的域名列表(浏览器访问,必须开启)
  • allow-insecure-unlock:允许在Geth命令窗口解锁账户
  • console:进入控制台
  • 2 > 1.log:UNIX系统下的重定向,将Geth产生的日志输出都重定向到1.log中,以免刷日志影响操作

效果如图:



^_^ 整理自《Go语言区块链应用开发从入门到精通》高野 编著

^_^ 本文已经被收录进《程序员成长笔记》 ,笔者JustryDeng

以上是关于初始以太坊的主要内容,如果未能解决你的问题,请参考以下文章

区块链数字货币——以太坊黑色情人节事件

区块链-如何在以太坊上制作自己的数字货币

区块链2.0时代到底怎么商业化?以太坊联合创始人告诉你

区块链数字货币——以太坊黑色情人节事件

区块链数字货币——以太坊黑色情人节事件

以太坊挖矿的前景,以太坊挖矿还赚钱吗?