ETH开发1——私有链搭建与基本操作

环境安装过程详见前一篇。

这里利用geth命令创建一个私有区块链,然后自己挖矿,可以通过这个操作过程更深入理解以太坊和区块链的概念。

一、创建目录结构

创建完成后目录结构
geth
├── Private1
└── Block.json

 Block.json文件,一个完整的区块描述文件比较复杂,这里是一些基本设置,这些设置项的描述如下:

{
        "config": {
                "chainId": 15,
                "homesteadBlock": 0,
                "eip155Block": 0,
                "eip158Block": 0
        },
        "coinbase" : "0x0000000000000000000000000000000000000000",
        "difficulty" : "0x40000",
        "extraData" : "",
        "gasLimit" : "0xffffffff",
        "nonce" : "0x0000000000000042",
        "mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
        "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
        "timestamp" : "0x00",
        "alloc": { }
 }

 

二、初始化命令

geth init Block.js --datadir Private1

 执行后,产生的目录如下:

有两个子目录:geth和keystore。其中geth目录保存了同步区块链以及相关的数据,keystore目录保存了账户文件。由于私有链刚创建,还没有创建账户,所以keystore目录为空。

三、启动私有链

geth --datadir "Private1" --dev --dev.period 1 --nodiscover console 2>>geth.log

 启动后进入javascript命令行控制台,显示 :
    Welcome to the Geth JavaScript console!

 以太坊的javascript控制台中内置了一些以太坊交互对象:

    eth:提供了操作区块链相关的方法
    net:提供了查看p2p网络状态的方法
    admin:提供了管理节点相关的方法
    miner:提供启动和停止挖矿的方法
    personal:提供了管理账户的方法
    txpool:提供了查看交易内存池的方法
    web3:除了包含以上对象中有的方法,还包含了一些单位换算的方法
    ————————————————

四、以太坊私有链上的基本操作

1. 创建账号

查看账号列表:eth.accounts

创建账号密码:personal.newAccount("xxxxxxx")

2. 查看余额

以太币的最小单位为wei,1 ether = 10(18) wei,打不出来~

eth.getBalance(eth.accounts[0])

3. 账户与矿工绑定

绑定:miner.setEtherbase(eth.accounts[0])

查看:eth.coinbase

4. 开始挖矿

开挖:miner.start()

停止:miner.stop()

查看:eth.getBalance(eth.accounts[0])

5. 解锁账户

personal.unlockAccount(eth.accounts[2],"333333",300)

三个参数,三种方式

6. 交易

eth.sendTransaction({from: eth.accounts[2], to: eth.accounts[3],value: web3.toWei(1,"ether")})


五、参数说明参考

 1. block.json参数

chainID 指定了独立的区块链网络 ID。网络 ID 在连接到其他节点的时候会用到,以太坊公网的网络 ID 是 1,为了不与公有链网络冲突,运行私有链节点的时候要指定自己的网络 ID。不同 ID 网络的节点无法相互连接
homesteadBlock

取值为0表示正在使用homesteadBlock版本。

以太坊的发展分成了四个阶段:(每个阶段进步到下一个阶段都是通过硬分叉的方式实现的)

1.Frontier(前沿):2015年7月30日,以太坊发布了Frontier阶段,此时的软件还不太成熟,但可以进行基本的挖矿测试去中心化应用(Dapps),该阶段参与者主要为开发者。

2.HomesteadBlock(家园):在2016年3月14日(圆周率节),以太坊发布了HomesteadBlock阶段。以太坊开始平稳运行,提供了图形界面的钱包,普通用户也可以体验和使用以太坊。

3.Metropolis(大都会):Metropolis被分成了两个阶段:Byzantium(拜占庭)和Constantinople (居士坦丁堡)。

2017.10.16,以太坊拜占庭硬分叉成功,引入了包括:zk-SNARKs(简明非交互零知识证明)、revert功能、return和抽象账户。

2019年2月底,以太坊区块链的第7,080,000区块作为激活点正式开启君士坦丁堡硬分叉,点在于将以太坊的共识机制由PoW向PoW+PoS混合机制过渡,从而使整个以太坊网络更加的轻盈、快捷与安全。按官方说法,具体在现有以太坊PoW主网上进行升级的有以下5个方面:

(1).EIP 145:给EVM增加移位相关指令,包括左移SHL,逻辑右移SHR,算术右移SAR

(2).EIP 1014:产生合约地址的一种新规则,与状态通道有关。规则为keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]

(3).EIP 1052:为EVM增加EXTCODEHASH指令,这个指令可以获得一个合约bytecode的keccak256的hash值;

(4).EIP 1283:修改EVM的SSTORE指令gas计算方式,预计会减少许多合约的gas消耗,需要硬分叉支持;

(5).EIP 1234:将是潜在最有争议的提案,也需要硬分叉支持,它包括难度炸弹(Difficulty Bomb)协议推迟12个月和挖矿奖励调整,难度炸弹使挖矿难度随时间推移越来越高,挖矿奖励调整将挖矿奖励从3个降低到2个;

4.Serenity(宁静)
————————————————
版权声明:本文为CSDN博主「GDUYT」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/GDUYT_gduyt/article/details/88807348

eip155Block eip是ethereum improvement proposal的缩写,你的链不会因为因为这些提议分叉,故设置为“0”即可
eip158Block eip是ethereum improvement proposal的缩写,你的链不会因为因为这些提议分叉,故设置为“0”即可
mixhsah 与nonce配合用于挖矿,由上一个区块的一部分生成的哈希。注意它和nonce的设置需要满足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章节所描述的条件。
difficulty 设置设置当前区块难度,如果难度过大,CPU挖矿就很难
alloc 给某个账户预分配以太币
coinbase 矿工帐号
timestamp 创世块的时间戳
parentHash 上一个区块的哈希值,由于是创世区块,所以值为0
extraData 可以写入32Byte大小的任意数据,每个block都会有,由挖出block的miner来决定要不要在里面写什么
gasLimit 该值设置对GAS的消耗总量限制,用来限制区块能包含的交易信息总

 2. geth启动参数详解:

identity 区块链的标识,用于标识目前网络的名字
datadir 指明当前区块链私钥和网络数据存放的位置
port 指定以太坊网络监听端口,默认为30303
rpc 开启HTTP-RPC服务,可以进行智能合约的部署和调试
rpcaddr 指定HTTP-RPC服务监听地址,默认为“localhost”
rpcapi 设置允许连接的rpc的客户端,一般为db、eth、net、web3
rpcport 指定HTTP-RPC服务监听端口,默认为8545
networkid 指定以太坊id,其实就是区块链网络的身份标识,共有链为1,测试链为3,默认启动id为1
etherbase 指定矿工帐号,默认为keystory中首个帐号
mine 开启挖矿,默认为CPU挖矿

 

posted on 2021-08-15 00:46  欣静赏悦  阅读(876)  评论(0编辑  收藏  举报