美文网首页
以太坊-搭建私有链(Mac、Windows双节点)

以太坊-搭建私有链(Mac、Windows双节点)

作者: CrazySteven | 来源:发表于2018-07-26 22:49 被阅读204次

    网上虽然有很多资料了,但本文仅是作为学习笔记,况且自己也要敲一遍,就记录自己在学习路上的点点滴滴吧。。。

    下载钱包

    点击链接,找到对应的钱包文件,Mac就选Ethereum-Wallet-macosx-0-11-1.dmg,这是官方的,不用考虑安全问题了,下载安装即可。

    创世区块文件

    创建一个json文件,内容如下:

    {
        "nonce": "0x0000000000000042",     
        "timestamp": "0x00",
        "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
        "extraData": "0x00",     
        "gasLimit": "0x8000000",     
        "difficulty": "0x400",
        "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
        "coinbase": "0x3333333333333333333333333333333333333333",     
        "alloc": {
         },
         "config": {
            "chainId": 666,
            "homesteadBlock": 0,
            "eip155Block": 0,
            "eip158Block": 0
        }
    }
    
    参数 描述
    nonce 64位随机数
    timestamp 时间戳
    parentHash 上一个区块的hash值,创世区块就是第一个,所以是0
    extraData 附加信息,我把它理解成备注
    gasLimit 代表用户愿意花费在gas上的钱的最大值,并不是实际值,这个在以前的文章有写过
    difficulty 难度值,代表挖矿的难度
    mixhash 与随机数nonce一起用于挖矿,具体参见“PoW(工作量证明)”
    coinbase 矿工的账号,代表这个区块是哪个矿工挖出来的
    alloc 用来预置账号以及账号的以太币数量
    chainId 链的ID,networkid 参数需要与 chainId 的值一致,可用来防止replay attack重发攻击:恶意重复或拖延正确数据传输的一种网络攻击手段
    homesteadBlock Homestead 硬分叉区块高度
    eip155Block EIP 155 硬分叉高度
    eip158Block EIP 158 硬分叉高度
    • Homestead是以太坊发展蓝图中的一个阶段。第一阶段是以太坊区块链面世,代号为frontier,第二个阶段即为当前阶段,代号为Homestead(家园),第三阶段为Metropolis(大都会),大都会又细分为两个小阶段,第一个是Byzantium(拜占庭)硬分叉(引入新型零知识证明算法以及pos权益证明共识算法),第二个是Constantinople(君士坦丁堡)硬分叉(以太坊正式应用pow和pos混合链,解决拜占庭引发的问题)。最后一个阶段代号Serenity(宁静),最终版本的以太坊稳定运行。
    • EIPs(Ethereum Improvement Proposals),是以太坊更新改善的一些方案,对应后面的数字就是以太坊github源码issue的编号,其中EIP155主要内容是让不同的链定义不同的chainId, 防止同一笔交易在不同的共有链上进行两次交易,防止重放攻击

    初始化创世区块

    geth --datadir "/Users/apple/Desktop/ETH/" init Genesis.json
    其中--datadir是指定数据存放的目录,/Users/apple/Desktop/ETH/是我电脑上json文件的路径,Genesis.json是上一步的创世区块文件名

    启动私有链

    geth --datadir "/Users/apple/Desktop/ETH/" --networkid 666 --identity "node" --port 30303 --rpc --rpcport 8545 --rpcapi "db,eth,eth,net,web3,admin" --rpccorsdomain "*" --nodiscover --verbosity 4 console

    参数 描述
    networkid 与Genesis.json中的chainId一致
    identity 设置节点ID
    port 节点端口,默认是30303
    rpc 启用 rpc 服务
    rpcport rpc 服务端口,默认是8545
    rpcapi rpc的api
    rpccorsdomain “*”是允许通过任意域名访问,相当于域名白名单
    nodiscover 关闭节点自动发现
    verbosity 日志等级:0=silent, 1=error, 2=warn, 3=info, 4=debug, 5=detail (默认是3)
    console 进入控制台

    如果设置的是默认值的话可以省略参数,启动成功会进入控制台,在控制台下可以使用eth.getBlock(区块号)查看区块信息等命令,以后可以通过geth console命令再次进入控制台,这里也有个坑,默认用geth console命令进入的是第一步我们安装的以太坊钱包的控制台,如果需要进入我们刚才创建的控制台需要使用geth --datadir "/Users/apple/Desktop/ETH/" console

    创建账号

    personal.newAccount("Steven")创建的账号密码为Steven

    查看信息

    eth.accounts查看账号
    eth.getBalance(eth.accounts[0])查看第0个账户的余额,可以将eth.accounts[0]进行传值调用
    eth.blockNumber查看当前区块总数
    eth.getBlock(6)通过区块号查看区块
    eth.getTransaction("0xdc9d03b5f8798b4c29648fafb26b9bc0d03f141c876a182a6e4c32bfac64911d")通过哈希值来查看交易,没有交易会返回null
    net.listening查看是否在监听
    net.peerCount查看peer数量
    admin.peers查看peer信息
    admin.nodeInfo查看自己的网络信息

    发送交易

    personal.unlockAccount(eth.accounts[0])发送交易前要先解锁,解锁一段时间后也会自动再锁上
    eth.sendTransaction({from:address1,to:address2,value:amount})address1给address2发送amount个以太坊

    挖矿

    miner.start() 开始挖矿
    miner.stop() 停止挖矿
    miner.setEtherbase(eth.accounts[1])指定挖矿的奖励给哪个账户,默认给第0个
    miner.start(1);admin.sleepBlocks(1);miner.stop();挖出一个区块就停止挖矿

    添加节点

    admin.addPeer("enode://key@ip:port")添加静态节点可加快同步速度,key/ip/port需要替换

    还有个小坑不知道该怎么写,网上也有解决办法,我记录在另一篇文章里了。今天就到这,接下来开始智能合约了。


    上面是Mac节点,现在更新下Windows节点(Win10的虚拟机)

    下载钱包

    点击链接,找到对应的钱包文件,这里我选的是Mist-win64-0-11-1.zip,这是官方的,不用考虑安全问题了,下载点击Mist.exe安装即可。

    为了方便使用geth,将其加入环境变量中

    我的电脑右键属性-左侧高级系统设置-环境变量-Path-新建将geth的路径粘贴进去,由于用户不同,路径不一样,我的是C:\Users\steven\AppData\Roaming\Mist\binaries\Geth\unpacked

    复制json文件-初始化创世区块-启动私有链(cd到该路径下执行geth --datadir "./" console)-添加节点

    同mac,注意替换路径即可,添加节点成功会返回true,然后会自动同步数据,通过查询,区块数量一样,这样就创建了两个节点的私链了,在两个节点上创建账号,挖矿,发送交易也都没问题,相互会自动同步,就是虚拟机上挖矿比较慢。


    再次更新:由于终端的geth和客户端的geth并不是一个,所以在终端用的没问题,打开客户端就连到主链上去了,走了很多弯路就不说了,直接说解决方法(Mac):
    通过命令"/Applications/Ethereum Wallet.app/Contents/MacOS/Ethereum Wallet" --rpc /Users/apple/Desktop/ETH/geth.ipc启动客户端即可,需要注意我 装的是Ethereum Wallet,不是Mist其中/Users/apple/Desktop/ETH/geth.ipc这个是前文中我写的私链的路径,放个截图庆祝一下:

    Windows:
    Mist-win64-0-11-1\Mist.exe --rpc \\.\pipe\geth.ipc路径终端会显示, 只有一个路径是geth.ipc

    版权声明:本文为 Crazy Steven 原创出品,欢迎转载,转载时请注明出处!

    相关文章

      网友评论

          本文标题:以太坊-搭建私有链(Mac、Windows双节点)

          本文链接:https://www.haomeiwen.com/subject/pvvimftx.html