以太坊学习(一):利用Geth搭建私有链

在以太坊的多种语言实现的客户端中,推荐使用go语言版本的,也是使用最广的一个版本go-ethereum。geth是go-ethereum的缩写。

本次开发平台为Ubuntu 16.04版本64位的虚拟机。

一、安装Geth

安装文档:https://ethereum.github.io/go-ethereum/install/

ubuntu下的安装:

sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install ethereum
安装结束可以输入 geth version 查看版本信息。

本次安装使用的geth Version: 1.6.7-stable

二、创建一个新目录和添加创世块文件genesis.json

利用mkdir 创建一个新的目录,进入目录,创建文件genesis.json 。文件内容如下:

   {
        "config": {
            "chainId": 15,
            "homesteadBlock": 0,
            "eip155Block": 0,
            "eip158Block": 0
        },
        "difficulty": "10000",
        "gasLimit": "2100000",
        "alloc": {
            "7df9a875a174b3bc565e6424a0050ebc1b2d1d82": { "balance": "300000" },
            "f41c74c9ae680c1aa78f42e5647a62f353b7bdde": { "balance": "400000" }
        }
    }

这是官方给的一个示例文件。技术更新较快,不知道过多久,这个配置也许就不行了。

三、执行命令,创建创世块

geth --datadir "./" init genesis.json
geth中的命令较多,只提到部分要使用的参数。其余请读者自己查看文档。

datadir 指定数据存储的路径

init 初始化创世节点

此时当前目录下面会新增出两个文件夹geth和keystore

geth         中保存的是区块链的相关数据
keystore  中保存的是该链条中的用户信息

@ubuntu:~/share/testchain$ geth --datadir "./" init genesis.json
WARN [09-12|22:28:10] No etherbase set and no accounts found as default 
INFO [09-12|22:28:10] Allocated cache and file handles         database=/home/lqp/share/testchain/geth/chaindata cache=16 handles=16
INFO [09-12|22:28:10] Writing custom genesis block 
INFO [09-12|22:28:10] Successfully wrote genesis state         database=chaindata                             hash=416ae0…aaffbd
INFO [09-12|22:28:10] Allocated cache and file handles         database=/home/lqp/share/testchain/geth/lightchaindata cache=16 handles=16
INFO [09-12|22:28:10] Writing custom genesis block 
INFO [09-12|22:28:10] Successfully wrote genesis state         database=lightchaindata                        hash=416ae0…aaffbd

四、执行命令,创建自己的私有链

geth --datadir "./" --nodiscover console 2>>geth.log
该命令是最简单的生成方式,

nodiscover是指不被其他节点自动发现(可以手动添加节点),

console 是启动geth 控制台,不加该选项,geth启动之后成为一个后台进程不会自动结束,

最后把geth中的log信息导入geth.log中,方便了解geth运行的情况。

如果想在同一台物理机上面生成不同的节点,一起构建一个私有链,不同的节点只需在第四步创建私有链的时候,不同的节点指定不同的端口:

geth --identity "phoenix"  --rpc  --rpccorsdomain "*" --datadir "./" --port "30303"  --rpcapi "db,eth,net,web3" --networkid 98888 console 2>>geth.log

通过admin.nodeInfo 获取节点信息,已经通过手动admin.addpeer()添加节点,也可以通过创建静态节点文件,手动添加。

注意:请勿直接执行 geth 命令,因为会自动连入生产网络,会自动同步公有链中的几十万的节点信息。会显示的比较凌乱。

在私有链运行的时候,会生成一个geth.ipc的文件(停止运行就消失),此文件是以太坊钱包mist链接私有链时候的接口。


五、新开一个终端,输出geth.log日志信息

打开另一个终端,找到geth.log的所在目录,执行命令 tail -f geth.log 从而持续的输出以太坊的日志

六、创建新的账户

介绍几个常用的命令:

eth.accounts 以,为界限列举出所有账户的地址(公匙);

personal.newAccount("xxx") 新创建一个账户,xxx为密码,会加密生成一个私匙;

personal.unlockAccount("address")解锁一个地址,任何涉及货币交易的事件都需要先解锁账户,要输入密码。

更多命令请参考 geth help 和 web3.js接口

利用personal.newAccount("xxx")生成一个用户,重复执行可以生成多个账号对应eth.accounts[0..n]。

七、开始挖矿

在命令行中执行命令 miner.start(), 开始在我们的区块链上进行挖矿(第一次挖矿需要等待几分钟)。

只有开始挖矿,才能算正式运行起来,因为在以太坊中所有的事务都需要矿工挖矿打包确认。

注意:命令默认是使用所有核挖矿,会导致电脑发热严重,和影响流畅,除了第一次执行之外,建议使用miner.start(1),只使用一个核挖矿。


你可能感兴趣的:(区块链)