搭建以太坊私有链环境

下载geth

https://geth.ethereum.org/downloads/

geth管理api说明:http://blog.hubwiz.com/2019/01/08/geth-admin-apis/

创建创世区块

新建 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"
}

部分配置说明

属性 说明
coinbase 矿工的账号
difficulty 设置当前区块的难度,如果难度过大,cpu挖矿就很难,这里设置较小难度
extraData 附加信息,随便填
gasLimit 该值设置对GAS的消耗总量限制,用来限制区块能包含的交易信息总和
nonce 就是一个64位随机数,用于挖矿
mixhash 与nonce配合用于挖矿,由上一个区块的一部分生成的hash
parentHash 上一个区块的hash值,创世块为0
timestamp 设置创世块的时间戳
alloc 用来预置账号以及账号的以太币数量,因为私有链挖矿比较容易,所以我们不需要预置有币的账号

cmd执行初始化
geth --datadir 私链的数据目录 init 配置

geth --datadir chain init genesis.json

如果用比较短的negative代码写初始块,会报错:

Fatal: Failed to write genesis block: unsupported fork ordering: eip150Block not enabled, but eip155Block enabled at 0

启动geth

启动执行

geth --datadir chain --port 30303 --networkid 99 --nodiscover  console

新建账户 personal.newAccount(“密码”)

personal.newAccount("123")

查看所有账户

personal.listAccounts

挖矿

开始挖矿

miner.start();

挖矿时默认的是创建的第一个账号的地址

停止挖矿

miner.stop()

查余额

可以声明变量

// 将创建的第一个账号赋值给my
my=eth.accounts[0]

查余额

eth.getBalance(my)
// 或者
eth.getBalance("0x60d8a1f85966b6c75634a6ef840fe3e0d64616f8")

转账交易

解锁

personal.unlockAccount("0x60d8a1f85966b6c75634a6ef840fe3e0d64616f8")
// 或者
personal.unlockAccount(my)

不解锁转账不了

创建另一个账户

personal.newAccount('456')
// 赋值方便操作
he=eth.accounts[1]

转账
将my的账户转账给he账户,数量为30

eth.sendTransaction({from:my, to:he, value:30})
// 执行之后会要求输入密码,密码是隐式的

转账之后一定要进行挖矿,挖矿成功才是转账成功

// 开始挖矿
miner.start()
// 结束挖矿
miner.stop()
// 查询账户余额
eth.getBalance(he)//30

猜你喜欢

转载自blog.csdn.net/weixin_43840202/article/details/118609466