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

╰半橙微兮° 2022-09-05 00:19 486阅读 0赞

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

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

    • 相关概念
    • 以太坊智能合约开发环境介绍
    • Linux安装Geth
    • 搭建私网并启动Geth

      • 第一步:配置创世块文件
      • 第二步:数据初始化
      • 第三步:启动Geth节点
    • 相关资料

相关概念

  • 什么是智能合约?

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

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

  • 为什么叫智能合约?

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

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

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

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

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

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

Linux安装Geth

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

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

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

    1. 第一步:下载安装包

      wget https://gethstore.blob.core.windows.net/builds/geth-alltools-linux-amd64-1.9.10-58cf5686.tar.gz
      在这里插入图片描述

    2. 第二步:解压

      tar zxvf geth-alltools-linux-amd64-1.9.10-58cf5686.tar.gz geth-alltools-linux-amd64-1.9.10-58cf5686/
      \[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6uEgl4FE-1630258108496)(../repository/image-20210825022336560.png)\]

    3. 第三步:配置(临时)环境变量

      1. mv geth-alltools-linux-amd64-1.9.10-58cf5686 ~/geth-home
      2. export PATH=$HOME/geth-home:$PATH
      3. echo `export PATH=$HOME/geth-home:$PATH` >> ~/.bashrc

      注:root用户执行后,将geth-alltools-linux-amd64-1.9.10-58cf5686移动并重命名到了/root/geth-home位置在这里插入图片描述

    4. 第四步:输入geth versiongeth --help验证一下
      在这里插入图片描述

搭建私网并启动Geth

相关概念:

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

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

  1. // Ropsten测试网络
  2. geth --testnet --fast --cache=512 console
  3. // Rinkeby测试网络
  4. geth --rinkeby --fast --cache=512 console

第一步:配置创世块文件

创建genesis.json文件:

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

第二步:数据初始化

初始化指令

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

效果如图:
在这里插入图片描述

第三步:启动Geth节点

  1. # 添加环境变量(若已添加环境变量,可跳过此步)
  2. export PATH=$HOME/geth-home:$PATH
  3. echo `export PATH=$HOME/geth-home:$PATH` >> ~/.bashrc
  4. # 启动Geth节点
  5. geth --datadir ./data --networkid 18 --port 30303 --rpc --rpcport 8545 --rpcapi 'db,net,eth,web3,personal' --rpcaddr 192.168.19.129 --rpccorsdomain '*' --gasprice 0 --allow-insecure-unlock console 2> 1.log
  • datadir:指定之前第二步初始化的数据目录文件
  • networkid:配置成与第一步genesis.json配置文件config内的chainId相同值,代表加入哪个网络,私网随意编号即可
  • port:P2P端口,即:节点之间互相通信的端口
  • http:开启远程调用服务
  • rpcport:远程服务端口,默认值为8545
  • rpcapi:远程服务提供的远程调用函数集
  • rpcaddr:默认值为localhost,只允许本机连接;如果需要允许其他机器连接的话,这里要指定当前机器的ip
  • rpccorsdomain:指定可以接收请求来源的域名列表(浏览器访问,必须开启)
  • gasprice:gas的单价
  • allow-insecure-unlock:允许在Geth命令窗口解锁账户
  • console:进入控制台
  • 2 > 1.log:UNIX系统下的重定向,将Geth产生的日志输出都重定向到1.log中,以免刷日志影响操作

效果如图:
\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1hc2KWrm-1630258108502)(../repository/image-20210826015501221.png)\]


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

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

发表评论

表情:
评论列表 (有 0 条评论,486人围观)

还没有评论,来说两句吧...

相关阅读

    相关 智能合约 简介

    以太坊是一个分布式的计算平台。它会生成一个名为Ether的加密货币。程序员可以在以太坊区块链上写下“智能合约”,这些以太坊智能合约会根据代码自动执行。 以太坊是什么?

    相关 智能合约是什么?

    以太坊是最早提出做智能合约的平台。由于以太坊区块链被普遍接受,因此多数区块链的智能合约采取与以太坊相似的设计。本文将详细介绍以太坊的智能合约:它是什么?它有什么用? 以太...