区块链go语言学习

(二)搭建私有链

2021-05-04  本文已影响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亿的币

各个参数的含义如下:

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():连接到其他节点;
上一篇下一篇

猜你喜欢

热点阅读