ethereum搭建以太坊私有链

参考文章:
http://blog.fens.me/bitcoin-geth-testnet/
http://blog.luoyuanhang.com/2018/04/18/set-up-eth-private-chain-for-development

环境准备

安装golang

1、下载二进制包:go1.4.linux-amd64.tar.gz。

https://golang.google.cn/dl/

2、将下载的二进制包解压至 /usr/local目录。

tar xvf go1.15.5.linux-amd64.tar.gz -C /usr/local/  

3、将 /usr/local/go/bin 目录添加至PATH环境变量:

#vim /etc/profile
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin

4、环境变量:

source /etc/profile

安装ethereum

下载地址https://geth.ethereum.org/downloads/

解压

tar xvf geth-linux-amd64-1.9.24-cc05b050.tar.gz -C /usr/local/

改名

cd /usr/local/
mv geth-linux-amd64-1.9.24-cc05b050 geth

创建geth软连接

ln -s /usr/local/geth/geth /usr/bin

测试启动

geth -h

是否正常输出

以太坊私有测试链

自定义创世块

创建一个名为genesis.json文件

{
  "config": {
    "chainId": 666,
    "homesteadBlock": 0,
    "eip150Block": 0,
    "eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "eip155Block": 0,
    "eip158Block": 0,
    "byzantiumBlock": 0,
    "constantinopleBlock": 0,
    "petersburgBlock": 0,
    "istanbulBlock": 0,
    "ethash": {}
  },
  "nonce": "0x0",
  "timestamp": "0x5ddf8f3e",
  "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "gasLimit": "0x47b760",
  "difficulty": "0x00002",
  "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "coinbase": "0x0000000000000000000000000000000000000000",
  "alloc": {
        "7df9a875a174b3bc565e6424a0050ebc1b2d1d82": { "balance": "300" },
        "f41c74c9ae680c1aa78f42e5647a62f353b7bdde": { "balance": "400" }
   },

  "number": "0x0",
  "gasUsed": "0x0",
  "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
}

参数配置

config 区块链的相关参数
chainId 防止重放攻击(replay attack,简单来说就是未经授权的用户来假扮交易的发送者)
homesteadBlock Homestead^2是以太坊的第二个发行版本(Frontier^3是第一个发行版本),值为0表示的使用的是该版本的以太坊
difficult 初始挖矿难度
gasLimit 每一个区块所消耗的gas上限
alloc 可以往地址中预先分配以太币

生成创世块

geth --datadir /data init genesis.json

--datadir:指定区块链的数据目录(默认为~/.ethereum

init:创世块初始化JSON文件的目录

会报出以下错误 忽略即可

Failed to enumerate USB devices

看到Successfully wrote genesis state输出即可

启动测试

启动geth有如下主要参数(可以使用geth --help进行查看):

相关启动参数

参数 参数
--nodiscover 关闭节点的可发现性,可以防止使用了相同network id和创世块的节点连接到你的区块链网络中(只能通过手动来添加节点)
--maxpeers 0 指定网络中的最多节点数
--rpc MetaMask 连接节点需要启用RPC服务
--rpcapi "db,eth,net,web3" 指定启用的RPC API
--rpcport "8080" 指定RPC的端口
--rpccorsdomain 指定哪些URL可以连接到你的节点
--datadir 以太坊区块链的数据目录
--port 连接到其它节点的网络监听端口
--identity "FirstNode" 指定节点名称
--allow-insecure-unlock 新版本geth,出于安全考虑,默认禁止了HTTP通道解锁账户。如果已经了解打开此功能的风险,可通启动命令中添加参数
console 启动geth控制台程序
geth --identity "ACET" --rpc --rpcport "8545" --datadir /data --rpcaddr 0.0.0.0 --rpccorsdomain "*" --port "30303" --nodiscover --maxpeers 5 --rpcapi "admin,db,eth,debug,miner,net,shh,txpool,personal,web3" --allow-insecure-unlock --networkid 666 console

geth客户端登陆操作

#登陆
geth attach rpc:http://127.0.0.1:8545
#查看状态
eth
#查看最新区块高度
eth.blockNumber
# 查看同步状态,返回 false 未同步或同步到最新了
eth.syncing
#生成账户,密码 
password123personal.newAccount('password123')

节点连接

在节点的geth控制台中执行:

> admin.nodeInfo

我们得到该节点的信息:

{
  enode: "enode://e04ae6fa2784739fc06e4371a1a475507270520fb40f261752a1c7ea4bf641e95c27edfd246ac238a1d7361d63791b8110e4c7eea50f624f25185fd954648926@127.0.0.1:30303?discport=0",
  enr: "enr:-JO4QKd_wkQ_fzMFDkqGnmqvFAPgORGcHlaoc2qaWaUSJUPLBHE9x-VuRK0su64V2vyeHqS_jBaU7BEGyT03mm-FWUcBg2V0aMrJhPxk7ASDEYwwgmlkgnY0gmlwhH8AAAGJc2VjcDI1NmsxoQLgSub6J4Rzn8BuQ3GhpHVQcnBSD7QPJhdSocfqS_ZB6YN0Y3CCdl8",
  id: "3f5e29e26e7dc14582af0d6dd1a961fb9e23af52637e26f04e6adfd7f2bea77a",
  ip: "127.0.0.1",
  listenAddr: "[::]:30303",
  name: "Geth/ACET/v1.9.24-stable-cc05b050/linux-amd64/go1.15.5",
  ports: {
    discovery: 0,
    listener: 30303
  },
  protocols: {
    eth: {
      config: {
        byzantiumBlock: 4370000,
        chainId: 1,  ##与下方network必须一致否则无法正常连接
        constantinopleBlock: 7280000,
        daoForkBlock: 1920000,
        daoForkSupport: true,
        eip150Block: 2463000,
        eip150Hash: "0x2086799aeebeae135c246c65021c82b4e15a2c451340993aacfd2751886514f0",
        eip155Block: 2675000,
        eip158Block: 2675000,
        ethash: {},
        homesteadBlock: 1150000,
        istanbulBlock: 9069000,
        muirGlacierBlock: 9200000,
        petersburgBlock: 7280000
      },
      difficulty: 17179869184,
      genesis: "0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3",
      head: "0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3",
      network: 666 ##与上方必须一致否则无法正常连接
    }
  }
}

节点中创建账号:

> personal.newAccount()

设置密码后,得到地址:

Please remember your password! 
"0xc4e62bdf4f928f5f788e389904f868da9d96543c"

钱包进行解锁:

> personal.unlockAccount("0xa9436991e002986f58d948d79e737df190c4f26b")

MetaMask 连接节点

需要开启rpc 上面的启动命令已经开启了rpc

然后在 metamask 点击新加一个自定义 RPC

填写相对应的信息

注意这三处必须全部一样

点击保存后链ID会自动转换为0x29a

URL 使用:http://云服务器IP:8545

posted @ 2020-11-18 15:33  iXiAo9  阅读(722)  评论(0编辑  收藏  举报