(二)搭建私有链

作者: 八爪星球 | 来源:发表于2021-05-04 23:34 被阅读0次

    NO.1 创建一个账户

    1.创建一个存储私有链数据的文件夹

    #mac
    
    mkdir ~/go/src/testChain/data0    # data0用于存放账户和区块数据
    cd ~/go/src/testChain
    

    2.连接节点

    geth --datadir data --nodiscover console
    

    进入geth控制台(交互式的 Javascript 执行环境),默认端口为8545和30303端口

    3. 创建1个账户

    personal.newAccount("123456")  # 123456为密码
    
    # 出现的以下一串字符,则为创建的账户
    "0x7B27Bf95Ad60b0362033DB45401058D57B1A7Cc3"
    

    4. 查询账户余额

    eth.getBalance(eth.accounts[0])
    
    # 此时会显示为 0
    

    NO.2 创建创世区块

    1. 退出geth的控制台

    > exit
    INFO [05-04|23:00:53.654] IPC endpoint closed                      url=/Users/dongyuhuang/go/src/testETH/data0/geth.ipc
    INFO [05-04|23:00:53.654] Blockchain manager stopped
    INFO [05-04|23:00:53.654] Stopping Ethereum protocol
    INFO [05-04|23:00:53.654] Ethereum protocol stopped
    INFO [05-04|23:00:53.654] Transaction pool stopped
    

    2. 在testChain目录下,新建gensis.json,内容如下:

    {  
       "alloc": {  
          "0x7B27Bf95Ad60b0362033DB45401058D57B1A7Cc3": {  
          "balance": "100000000000000000000000000"  
          }  
       },  
        "config":{  
            "chainId":10,  
            "homesteadBlock":0, 
            "eip150Block": 0, 
            "eip155Block":0,  
            "eip158Block":0  
        },  
        "nonce":"0x0000000000000042",  
        "mixhash":"0x0000000000000000000000000000000000000000000000000000000000000000",  
        "difficulty": "0x2000",  
        "alloc": {},  
        "coinbase":"0x0000000000000000000000000000000000000000",  
        "timestamp": "0x00",  
        "parentHash":"0x0000000000000000000000000000000000000000000000000000000000000000",  
        "extraData": "",  
        "gasLimit":"0xffffffff"  
    }  
    
    ////////////////////////////////////////////////////////////以下内容博主自己看的
    {
      "config": {
            "chainId": 628,    
            "homesteadBlock": 0,
            "eip150Block": 0,
            "eip155Block": 0,
            "eip158Block": 0
        },
      "alloc"      : {},
      "coinbase"   : "0x0000000000000000000000000000000000000000",
      "difficulty" : "0x20000",
      "extraData"  : "",
      "gasLimit"   : "0x2fefd8",
      "nonce"      : "0x0000000000000042",
      "mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000",
      "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
      "timestamp"  : "0x00"
    }
    
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    

    创世区块信息写在一个 JSON 格式的配置文件中
    此处我的配置,在"0xdff3488d4ba62cc6bd7180b58d33f9f9fe8bebe8"中预置了1亿的币

    各个参数的含义如下:

    • mixhash:与nonce配合用于挖矿,由上一个区块的一部分生成的hash。
    • nonce: nonce就是一个64位随机数,用于挖矿。
    • difficulty: 设置当前区块的难度,如果难度过大,cpu挖矿就很难,这里设置较小难度
    • alloc: 用来预置账号以及账号的以太币数量,因为私有链挖矿比较容易,所以我们也可以不预- 置有币的账号,需要的时候自己创建即可以。
    • coinbase: 矿工的账号,随便填
    • timestamp: 设置创世块的时间戳
    • parentHash: 上一个区块的hash值,因为是创世块,所以这个值是0
    • extraData: 附加信息,随便填,可以填你的个性信息
    • gasLimit: 该值设置对GAS的消耗总量限制,用来限制区块能包含的交易信息总和,因为我们是私有链,所以填最大。
    • chainId:区块链的ID,公链以太坊是1,我们要与其不同,以免冲突

    3. 创建创世块

    geth --datadir data init genesis.json
    

    初始化成功后,会在数据目录 data 中生成 geth 和 keystore 两个文件夹,此时目录结构如下:

    privatechain
    ├── data
    │   ├── geth
    │   │   ├── chaindata
    │   │   │   ├── 000001.log
    │   │   │   ├── CURRENT
    │   │   │   ├── LOCK
    │   │   │   ├── LOG
    │   │   │   └── MANIFEST-000000
    │   │   └── lightchaindata
    │   │       ├── 000001.log
    │   │       ├── CURRENT
    │   │       ├── LOCK
    │   │       ├── LOG
    │   │       └── MANIFEST-000000
    │   └── keystore
    └── genesis.json
    

    其中 geth/chaindata 中存放的是区块数据,keystore 中存放的是账户数据。

    NO.3更多操作

    1. 转账交易

    进入geth控制台

    geth --datadir data --networkid 10 console
    

    指定网络id(networkid)为上面设置的10

    2.解锁账户

    # 123456为密码
    personal.unlockAccount(eth.accounts[0],"123456") 
    

    3.创建第二个账户

    personal.newAccount("654321")  # 654321为密码
    
    0xb619729DaECDe98FF7ef9b749CB792B977671f1D
    

    4.发送交易

    amount = web3.toWei(10,'ether')
    eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:amount})
    
    
    控制台操作命令介绍
    控制台内置了一些用来操作以太坊的 Javascript 对象,可以直接使用这些对象。这些对象主要包括:
    
    eth:包含一些跟操作区块链相关的方法;
    net:包含一些查看p2p网络状态的方法;
    admin:包含一些与管理节点相关的方法;
    miner:包含启动&停止挖矿的一些方法;
    personal:主要包含一些管理账户的方法;
    txpool:包含一些查看交易内存池的方法;
    web3:包含了以上对象,还包含一些单位换算的方法。
    常用命令有:
    
    personal.newAccount():创建账户;
    personal.unlockAccount():解锁账户;
    eth.accounts:枚举系统中的账户;
    eth.getBalance():查看账户余额,返回值的单位是 Wei(Wei 是以太坊中最小货币面额单位,类似比特币中的聪,1 ether = 10^18 Wei);
    eth.blockNumber:列出区块总数;
    eth.getTransaction():获取交易;
    eth.getBlock():获取区块;
    miner.start():开始挖矿;
    miner.stop():停止挖矿;
    eth.coinbase:挖矿奖励的账户
    web3.fromWei():Wei 换算成以太币;
    web3.toWei():以太币换算成 Wei;
    txpool.status:交易池中的状态;
    admin.addPeer():连接到其他节点;
    

    相关文章

      网友评论

        本文标题:(二)搭建私有链

        本文链接:https://www.haomeiwen.com/subject/lkuufltx.html