zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    JavaScript 正则表达式
    android源代码提示文本框还能输入多少个字符
    js实现鼠标点击input框后里面的内容就消失代码
    使用prompt输入一句英文句子和排序方式(升/降),将所有单词按排序方式排序后在网页上输出
    Javascript输出表格
    flutter 按键监听
    3.声明
    2.基础类型
    1.安装TypeScrpit
    苹果app证书
  • 原文地址:https://www.cnblogs.com/iXiAo9/p/14000147.html
Copyright © 2011-2022 走看看