(二)搭建私有链

作者: 八爪星球 | 来源:发表于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