创建自己的私链挖矿

一键安装脚本

待更新

部署环境Linux Centos 7

1、下载并配置geth

wget https://gethstore.blob.core.windows.net/builds/geth-linux-amd64-1.10.4-aa637fd3.tar.gz
tar zxvf geth-linux-amd64-1.10.4-aa637fd3.tar.gz
mv geth-linux-amd64-1.10.4-aa637fd3 geth && cd geth
cp geth /usr/bin/geth

2,创建创世文件genesis.json

我在根目录新建了geth文件夹。

cd /
mkdir geth && cd geth
vim 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": { },
  "number": "0x0",
  "gasUsed": "0x0",
  "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
}

初始化命令

geth --datadir /geth init genesis.json

3、启动

在/root下新建了gdata文件夹

cd /root && mkdir gdata

启动geth,参数含义参考之前的文章 Swarm中的GETH和RPC

geth --identity "Aven7Node" --http --http.addr 0.0.0.0 --http.port=8545 --http.vhosts="*" --http.api='personal,eth,net,web3,admin,txpool,miner' --ws --ws.addr=0.0.0.0 --ws.port=8546 --ws.api='eth,net,web3' --ws.origins="*"  --datadir "/root/gdata" --port "30303"  --networkid 666 console
参数 含义
--identity 指定节点,用于标示目前网络的名字
--networkid 设置当前区块链的网络ID,用于区分不同的网络,是一个数字
--nodiscover 关闭节点发现机制,防止加入有同样初始配置的陌生节点
--maxpeers 如果你不希望其他人连接到你的测试链,可以使用maxpeers 0
--http.corsdomain 这个可以指示什么URL能连接到你的节点来执行RPC定制端任务
输入一个特定的URL而不是wildcard ( * ),后者会使所有的URL都能连接到你的RPC实例
--console 启动命令行模式,可以在geth中执行命令

4,常用geth命令

本地连接控制台
geth attach http://localhost:8545

这是一个交互式的 JavaScript 执行环境,在这里面可以执行 JavaScript 代码,其中 > 是命令提示符。在这个环境里也内置了一些用来操作以太坊的 JavaScript 对象,可以直接使用这些对象。这些对象主要包括:

参数 含义
eth 包含一些跟操作区块链相关的方法
net 包含一些查看p2p网络状态的方法
admin 包含一些与管理节点相关的方法
miner 包含启动&停止挖矿的一些方法
personal 主要包含一些管理账户的方法
txpool 包含一些查看交易内存池的方法
web3 包含了以上对象,还包含一些单位换算的方法
  1. 查看当前有哪些账户

    > eth.accounts
    ["0x2f662e73674a1cec2031e5c3216b7cf0a650b31e", "0x8b28f287b1e9c6197edb35c753ef8b13d8f6f74c", "0x7c3e6c2544e3e4462e44530e9cda5e745c831c0b", "0xb05146ed865f0ab592dd763bd84a2191700f3dfb"]
    
  2. 创建一个新账户

    > personal.newAccount('111111')
    "0x17415a84c55154c91274517c11fb880e1b2e0c9e"
    
  3. 查看用户1和用户2的余额

    > eth.getBalance(eth.accounts[0])
    5000000000000000000
    > eth.getBalance(eth.accounts[1])
    0
    
  4. 启动和停止挖矿

    > miner.start()
    null
    > miner.stop()
    null
    
  5. 解锁账户

    解锁时出现GoError: Error: account unlock with HTTP access is forbidden at web3.js

    > personal.unlockAccount('0x17415a84c55154c91274517c11fb880e1b2e0c9e')
    Unlock account 0x17415a84c55154c91274517c11fb880e1b2e0c9e
    Passphrase: 
    GoError: Error: account unlock with HTTP access is forbidden at web3.js:6357:37(47)
            at native
            at <eval>:1:24(3)
    

    解决方法:添加启动参数--allow-insecure-unlock

    原因:新版本geth,出于安全考虑,默认禁止了HTTP通道解锁账户

    重启后再解锁账户

    > personal.unlockAccount(eth.accounts[0])
    Unlock account 0x2f662e73674a1cec2031e5c3216b7cf0a650b31e
    Passphrase: 
    true
    
  6. 转账

    > amount = web3.toWei(1,'ether')
    "1000000000000000000"
    > eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:amount})
    
常用命令列表
命令 含义
personal.newAccount() 创建账户
personal.unlockAccount() 解锁账户
eth.accounts 查看账户
eth.getBalance() 查看余额
eth.blockNumber 列出区块总数
eth.getTransaction() 获取交易
eth.getBlock() 获取区块
miner.start() 开始挖矿
miner.stop() 停止挖矿
web3.fromWei() Wei 换算成以太币
web3.toWei() 以太币换算成 Wei
txpool.status 交易池中的状态
admin.addPeer() 连接到其他节点

Copyright © OneZos all right reserved,powered by Gitbook本书发布时间: 2021-11-16 19:25:17

results matching ""

    No results matching ""