• 区块链开发学习第一章:Mac搭建以太坊私有链


    记录过程与问题

    一、安装

    以go版本的ethereum进行安装

    brew tap ethereum/ethereum
    brew install ethereum
    
    # 如果希望基于ethereum的develop分支安装,执行 brew install ethereum --devel

    问题:

    1、由于我的MacOS系统一直没有更新,导致安装不上,提示XCode版本过低,更新XCode时又提示OS版本过低,没办法重新更新了macos monterey到最新版,然后把所有软件都重新更新了一次

    2、go安装过程中出现问题,我是单独进行了go的安装才继续进行下去

    安装成功后,可通过 geth --help 查看是否安装好

    二、初始化(写入创世区块)

    自定义一个创世区块的json配置文件genesis.json,与保存数据目录data

    {
        "config": {
            "chainId": 15,
            "homesteadBlock": 0,
            "eip155Block": 0,
            "eip158Block": 0
        },
        "alloc": {},
        "nonce": "0x0000000000000042",
        "difficulty": "0x020000",
        "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
        "coinbase": "0x0000000000000000000000000000000000000000",
        "timestamp": "0x00",
        "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
        "extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa",
        "gasLimit": "0x4c4b40"
    }

     然后运行初始化命令:

    geth --datadir "./data" init ./genesis.json

    结果异常如下:

     原因:用比较短的negative代码写初始块,会报错。修改json如下:

    {
      "config": {
        "chainId": 1001,(原本这里是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": { },
      "number": "0x0",
      "gasUsed": "0x0",
      "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
    }

    重复运行初始化命令,初始化成功

     此时目录结构变成如下情况:

     其中,keystore用来保存账户信息,geth用来保存区块信息

    三、启动私有链节点

    geth --datadir "./data" --networkid 1001 console

    –networkid选项后面跟一个数字,这里是1108,表示指定这个私有链的网络id为1108。网络id在连接到其他节点的时候会用到,以太坊公网的网络id是1,为了不与公有链网络冲突,运行私有链节点的时候要指定自己的网络id

    完后一周来补充的:请注意!!!!!:这里的networkid一定要与genesis.json里面的chainid一致!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    输出如下内容即表示成功:

    为了避免JavaScript控制台命令与geth日志混淆,可以通过如下命令将日志输出到别的文件内:

    geth --datadir "./data" --networkid 1001 console 2> geth.log

    先记录到这里,下一章写创建账户与多私有节点挖矿

    --------2021-11-06更新----------

    当用MetaMask连接本地私有链时一直无法连接,然后telnet localhost 8545测试端口是否开启,发现根本没有开启,在网上找了一大堆,都说要在启动私有链的时候加上 --rpc等一系列参数,但是我的缺是报错,-rpc未定义

    这时我就是想不是我geth版本的原因,然后查了下资料发现:

    -rpc已经于今年6月份移除被弃用了,所以我改用--http启动

    geth --datadir "./data" --networkid 1001 --http console 2> geth.log

    然后telnet localhost 8545 成功!通过MetaMask连接也成功!

    geth相关命令详解此文档最新:

    https://www.cnblogs.com/kaifayuan/p/14970409.html

    ----------2021-11-07更新-----------

    由于需要通过metamask操作账户部署合约,但是遇到错误“invalid sender"”

    原因是账户没有解锁(好像是隔一段时间就要解锁),所以启动时新增参数:

    geth --datadir "./data" --networkid 1001 --http --http.api web3,eth,personal,miner,net,txpool --allow-insecure-unlock console 2> geth.log

    geth --datadir "./data" --networkid 1001 --http --allow-insecure-unlock console 2> geth.log (直接这样好像也行)

  • 相关阅读:
    2.4.6 处理表单 的 工作原理的解释
    nginx proxy模块
    nginx负载均衡模块
    Oracle正在执行和执行过的SQL语句
    nginx
    linux :故障提示:Error:No suitable device found: no device found for connection "System eth0"
    memcached
    一致性哈希算法(consistent hashing)(转)
    大规模网站sesson会话保持思路及实践配置
    AB压力测试工具
  • 原文地址:https://www.cnblogs.com/I-will-be-different/p/15501145.html
Copyright © 2020-2023  润新知