zoukankan      html  css  js  c++  java
  • 以太坊中私有链的搭建

    一. 安装环境

    1. Ubuntu 64位 阿里云服务器
    2. geth 在线安装

      $ sudo add-apt-repository -y ppa:ethereum/ethereum
      $ sudo apt-get update
      $ sudo apt-get install ethereum

    二. 准备创世区块配置文件

    1. 将下面内容保存在一个json格式的配置文件 中,命名为genesis.json

      {
      "coinbase"   : "0x0000000000000000000000000000000000000000",
      "difficulty" : "0x400",
      "extraData"  : "0x0",
      "gasLimit"   : "0x2fefd8",
      "nonce"      : "0xdeadbeefdeadbeef",
      "mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000",
      "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
      "timestamp"  : "0x00",    
      "alloc"      : {}
      }

    三. 初始化:写入创世区块

    1. 新建一个目录来存放区块链数据,假设新建的数据目录为~/privatechain/data0,genesis.json保存在~/privatechain中,此时目录结构应该是这样的:

      privatechain  
      ├── data0  
      └── genesis.json  
    2. 进入privatechain中,执行初始化命令,其中–datadir选项后面跟一个目录名,这里为data0,表示指定数据存放目录为data0

      $ cd privatechain  
      $ geth --datadir data0 init genesis.json 
    3. 当看到如下输出时,则说明初始化成功

      I0322 10:52:44.585282 cmd/geth/chaincmd.go:131] successfully wrote genesis block and/or chain rule set: b240e0678c2a8f87cf350225b528e3d97688aad6d4d84ee84e405c7fc9e37e4e  
    4. 初始化成功后,会在数据目录data0中生成geth和keystore两个文件夹,此时目录结构如下:其中geth/chaindata中存放的是区块数据,keystore中存放的是账户数据。

      privatechain  
      ├── data0  
      │   ├── geth  
      │   │   └── chaindata  
      │   │       ├── 000002.log  
      │   │       ├── CURRENT  
      │   │       ├── LOCK  
      │   │       ├── LOG  
      │   │       └── MANIFEST-000003  
      │   └── keystore  
      └── genesis.json  

    四. 启动私有链节点

    1. 输入以下命令启动第一个节点,–datadir选项指定使用data0作为数据目录,–networkid选项后面跟一个数字,这里是314590,表示指定这个私有链的网络id。在多个节点私有网络中,id应该相同。

      geth --datadir data0 --networkid 314590 --ipcdisable --port 61910 --rpcport 8200 console
    2. ps:用以上命令启动,因为geth版本原因,在后面挖矿时,会输出null,因此可以在启动命令后加–dev –dev.period 1。一般不需要,可以先检查一下当前系统中是否已经有用户。

    3. 当看到以下信息时,区块链节点运行成功

      Welcome to the Geth JavaScript console!  
      instance: Geth/v1.5.6-stable/linux/go1.7.3  
      modules: admin:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal: 1.0 rpc:1.0 txpool:1.0 web3:1.0  

    五. 账户的创建和管理

    1. eth.accounts 看当前节点上的所有用户
    2. 新建账户,输入密码,最后返回新建用户的id(公钥,账户地址)

      personal.newAccount()  
      Passphrase:   
      Repeat passphrase:   
      "0xc232e2add308136571bb8f9197ba4ae4e5ba9836"  
      查看账户余额 eth.getBalance(eth.accounts[0])

    六. 启动和停止挖矿

    1. 使用miner.start() 来启动挖矿,其中start的参数表示挖矿使用的线程数。第一次启动挖矿会先生成挖矿所需的DAG文件,这个过程有点慢,等进度达到100%后,就会开始挖矿,此时屏幕会被挖矿信息刷屏。

      miner.start(1) 
    2. 停止挖矿 miner.stop()

    3. 挖到一个区块会奖励5个以太币,挖矿所得的奖励会进入矿工的账户,这个账户叫做coinbase,默认情况下coinbase是本地账户中的第一个账户. 当前挖矿收益的用户

      eth.coinbase 
    4. 要想使挖矿奖励进入其他账户,通过miner.setEtherbase()将其他账户设置成coinbase即可
    5. miner.setEtherbase(eth.accounts[1])  

    七. 发送交易

      1. 创建交易

        amount = web3.toWei(5,'ether')
        eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:amount})  

    账户解锁操作,账户每隔一段时间就会被锁住,要发送交易,必须先解锁账户,然后重新发送交易

    personal.unlockAccount(eth.accounts[0])  
      • 1
    1. 查看区块链中交易情况,有一条pending的交易,pending表示已提交但还未被处理的交易。

      txpool.status  
      {  
      pending: 1,  
      queued: 0  
      }  
        使交易被处理,必须要挖矿。这里我们启动挖矿,然后等待挖到一个区块之后就停止挖矿:
    miner.start(1);admin.sleepBlocks(1);miner.stop();  
      • 1

    八. 查看交易和区块

    1. 查看当前区块总数 eth.blockNumber
    2. 通过交易hash查看交易

      eth.getTransaction("0x0c59f431068937cbe9e230483bc79f59bd7146edc8f f5ec37fea6710adcab825")  
      • 1
    3. 通过区块号查看区块 eth.getBlock(33)

    九. 连接到其它节点

      1. 查看当前节点信息 admin.nodeInfo.enode
      2. 可以在同一个服务器上建立另一个节点,在privatechain下,建立文件夹data1,然后输入初始化和启动命令.–bootndoes 是设置当前节点启动后,直接通过设置–bootndoes 的值来链接第一个节点, –bootnoedes 的值可以通过在第一个节的命令行中,输入:admin.nodeInfo.enode命令打印出来.

        geth --datadir data01 init ./genesis.json
        geth --datadir data01 --networkid 314590 --ipcdisable --port 61911 --rpcport 8101 --bootnodes "enode://ad307e052d0e04af519b8999fa870800df8a7a0cc2a91e6aea30e879b75c344dfa12c773a63a71677c2a3ea1254cf982815817f7ff58bd79e5837ea44d791a2d@192.168.1.2:61910" console

    另一种添加节点的方法 在节点一上admin.addPeer(),就可以连接到节点二

    admin.addPeer("enode://9e86289ea859ca041f235aed87a091d0cd594b377cbe13e1c5f5a08a8a280e62d4019ac54063ed6a1d0e3c3eaedad0b73c40b99a16a176993f0373ffe92be672@127.0.0.1:61910")
      • 1
    1. 通过net.peerCount可以查看已连接到的节点数量

    2. 如果在不同服务器上搭建节点,则需要安装geth,重新开始前面的步骤
  • 相关阅读:
    java1234初学maven
    解决maven创建web项目卡死在generator插件(转)
    maven下载速度慢的解决方法(转)
    git分支
    git基础
    oracle分析函数与over()(转)
    Oracle开窗函数 over()(转)
    Oracle计算时间函数(对时间的加减numtodsinterval、numtoyminterval) (转)
    selenium使用中遇到的问题
    selenium运行火狐报错FirefoxDriver : Unable to connect to host 127.0.0.1 on port 7055
  • 原文地址:https://www.cnblogs.com/qizhuocai/p/8927004.html
Copyright © 2011-2022 走看看