区块链技术学习(1 ):搭建以太坊私链

来源:互联网 发布:淘宝售假降权多久恢复 编辑:程序博客网 时间:2024/06/14 20:49

搭建以太坊私链

    虽然以太坊是一个公有链系统,但是我们可以通过设置一些参数来运行自己的私有链节点,在自己的私有链上进行开发和测试不需要同步公有链数据,也不需要花钱来买以太币,节省存储空间和成本,而且很灵活很方便。本文介绍使用geth客户端搭建私有链的操作步骤,同时会解释在这个过程中用到的各个命令及选项的含义和作用,最后会介绍geth的Javascript Console中的一些常用功能。

系统环境:macOS


一、安装go-ethereum客户端

1、安装ethereum
首先确保已安装 homebrew,没有安装过的可以在命令行下执行/usr/bin/ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)” 进行安装
brew tap ethereum/ethereum
brew install ethereum

2、安装solc
首先确保安装过npm, 没有安装过的可以访问 npm网站下载安装
npm install -g solc
如果使用npm太慢,可以翻墙,或者使用国内的淘宝镜像cnpm
这里写图片描述

二、搭建私链

1、准备创世块配置文件
以太坊支持自定义创世区块,要运行私有链,我们就需要定义自己的创世区块,创世区块信息写在一个json格式的配置文件中。
新建文件夹ethereumTest,在此文件夹下创建genesis.json文件和data文件夹

代码块

代码块语法遵循标准markdown代码,例如:

{"config": {            "chainId": 123456,            "homesteadBlock": 0,            "eip155Block": 0,            "eip158Block": 0            },"nonce": "0x0000000000000042","difficulty": "0x020000","mixhash":"0x000000000000000000000000000000000000000000  0000000000000000000000","coinbase":"0x000000000000000000000000000000000000000","timestamp": "0x00","parentHash":"0x0000000000000000000000000000000000000000000000000000000000000000","extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa","gasLimit": "0x4c4b40","alloc": {}}

2、初始化
在命令行下进入刚才创建的文件夹,输入如下命令:
geth –datadir data init genesis.json
这里写图片描述

初始化成功后,会在数据目录data中生成geth和keystore两个文件夹:
这里写图片描述

3、启动节点

geth --datadir data --networkid 123456 --rpc --rpccorsdomain "*" --nodiscover console

各参数代表的含义如下:

networkid 设置当前区块链的网络ID,用于区分不同的网络,1表示公链
rpc 表示启动rpc通信,可以进行智能合约的部署和调试
console 表示启动命令行模式,可以在Geth中执行命令

执行成功后将进入区块链的JavaScript控制台环境
这里写图片描述

4、 Geth JavaScript控制台环境使用说明

进入以太坊Javascript Console后,就可以使用里面的内置对象做一些操作,这些内置对象提供的功能很丰富,比如查看区块和交易、创建账户、挖矿、发送交易、部署智能合约等。 接下来介绍几个常用功能,下面的操作中,前面带>的表示在Javascript Console中执行的命令。
创建新账号
personal.newAccount()
或者 personal.newAccount(“123456”)

查看节点信息
admin.nodeInfo

挖矿
开始挖矿 miner.start(1)
停止挖矿 miner.stop()

查看当前矿工账号
eth.coinbase 默认为第一个账户

修改矿工账号
miner.setEtherbase(eth.accounts[1])

查看账户信息
eth.accounts[0]

查看账户余额
eth.getBalance(eth.accounts[0])
或者 web3.fromWei(eth.getBalance(eth.accounts[0]), “ether”)

解锁账号
personal.unlockAccount(eth.accounts[0])
使用账户资金前都需要先解锁账号

转账eth.sendTransaction({from:eth.accounts[0],to:”0x587e57a516730381958f86703b1f8e970ff445d9”,value:web3.toWei(3,”ether”)})
使用 txpool.status 可以看到交易状态

查看区块数据
eth.blockNumber
eth.getTransaction(“0x0c59f431068937cbe9e230483bc79f59bd7146edc8ff5ec37fea6710adcab825”)
eth.getBlock(1) //通过区块号查看区块
这里写图片描述

这里写图片描述

这里写图片描述

参考文章

1、https://my.oschina.net/u/2349981/blog/865256
2、http://8btc.com/article-4537-1.html

阅读全文
0 0