• 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挖矿

    出处: http://www.cnblogs.com/windy2008

  • 相关阅读:
    php的源代码包构建一个空的php扩展。
    Web服务器上可能被包含或被请求的不同脚本源代码文件
    是否采用Sybase形式的自动字符串转义(用 '' 表示 ')
    数据库导入的大小是否要分段处理?
    Maven常用参数及其说明【转:http://blog.csdn.net/wangjunjun2008/article/details/18982089】
    bat常用命令,转【http://www.cnblogs.com/yplong/archive/2013/04/02/2996550.html】
    ftp链接、上传、下载、断开
    maven配置中国下载源【转:http://www.cnblogs.com/libingbin/p/5949483.html】
    经经经!!!!
    spring中quartz的使用。【转http://www.cnblogs.com/kay/archive/2007/11/02/947372.html】
  • 原文地址:https://www.cnblogs.com/windy2008/p/15119262.html
Copyright © 2020-2023  润新知