以太坊全节点部署

选型

目前有三类节点是使用最多的,go-ethereum(55%)、parity(22%)、ethereumjs-devp2p(15%),go-ethereum是官方版本,且占比最大,这里就选择go-ethereum来部署

为什么要部署全节点

以太坊有两种节点:全节点、轻节点。全节点存储区块链的全部状态,需要350G的存储空间和8G以上的内存。轻节点只存储最小量的状态,只下载区块头和与其交易相关的默克尔树“分支”,它只需要几百M存储空间和128-512M内存。当发起转账、合约部署的时候,轻节点是不能独立完成的,他需要借助其他全节点以他的名义来操作。这一切本省并没有什么问题,但当遇到交易量急剧上升,区块链升级的时候,它会找不到合适的全节点给它使用。因此我们再业务上使用的时候,建议使用全节点。

在Linux上部署

  • 官网下载合适的版本(建议选择带tools的版本),并解压到/usr/local/bin

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    [root@blockchain-server01 data]# tar -xzvf geth-alltools-linux-amd64-1.8.15-89451f7c -C /usr/local/bin/ -f
    [root@blockchain-server01 data]# geth version
    Geth
    Version: 1.8.15-stable
    Git Commit: 89451f7c382ad2185987ee369f16416f89c28a7d
    Architecture: amd64
    Protocol Versions: [63 62]
    Network Id: 1
    Go Version: go1.10.4
    Operating System: linux
    GOPATH=
    GOROOT=/home/travis/.gimme/versions/go1.10.4.linux.amd64
  • 启动参数:RCP接口

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    API AND CONSOLE OPTIONS:
    --rpc Enable the HTTP-RPC server
    --rpcaddr value HTTP-RPC server listening interface (default: "localhost")
    --rpcport value HTTP-RPC server listening port (default: 8545)
    --rpcapi value API's offered over the HTTP-RPC interface "db,eth,net,web3,miner,personal"
    --ws Enable the WS-RPC server
    --wsaddr value WS-RPC server listening interface (default: "localhost")
    --wsport value WS-RPC server listening port (default: 8546)
    --wsapi value API's offered over the WS-RPC interface
    --wsorigins value Origins from which to accept websockets requests
  • 启动参数:全局设置

    1
    2
    3
    ETHEREUM OPTIONS:
    --datadir "/Users/zzs/Library/Ethereum" Data directory for the databases and keystore
    --syncmode "fast" Blockchain sync mode ("fast", "full", or "light")
  • 启动参数:挖矿设置

    1
    2
    MINER OPTIONS:
    --mine Enable mining
  • 启动参数:网络属性

    1
    2
    NETWORKING OPTIONS:
    --port value Network listening port (default: 30303)
  • 启动命令,将geth运行到后台,/data/eth_data用来存放以太坊的数据;启动完毕后在/data/eth_data会产生一个geth.ipc文件,用于进程间的ipc通讯

    1
    2
    mkdir /data/eth_data
    nohup geth --datadir /data/eth_data --syncmode full --rpc --rpcaddr 0.0.0.0 --rpccorsdomain "*" --rpcapi eth,net,web3 --ws --wsaddr 0.0.0.0 --wsorigins "*" --wsapi eth,net,web3 &
  • 关闭命令

    1
    2
    # 或者kill 进程id
    kill geth

本地API操作

  • 启动命令行

    1
    2
    cd /data/eth_data
    geth attach geth.ipc
  • 命令行支持的API,这个可以在启动参数上设置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    admin:1.0 
    debug:1.0
    eth:1.0
    ethash:1.0
    miner:1.0
    net:1.0
    personal:1.0
    rpc:1.0
    txpool:1.0
    web3:1.0
  • 查看同步进程,当eth.syncing返回false的时候表示没开始同步,或者同步已经完毕

    1
    2
    3
    4
    5
    cd /data/eth_data
    geth attach geth.ipc
    # 获取区块高度
    > eth.blockNumber
    > eth.syncing