区块链之虚拟货币我爱编程

以太坊智能合约从入门到实战2(私链与挖矿)

2018-04-15  本文已影响149人  GoMoon

什么是私链

大家都知道,我们平时的转账交易,都是在主网进行的。主网就是由所有节点和矿工共同维护,唯一认定的区块链网络。

而私链,则是完全独立于主网以外的网络。和主网最大的不同是,私链一般没有其他人参与,你就是私链里唯一的用户和矿工,你可以随意设置参数,让挖矿变得很简单,从而轻松拥有大量的“以太币”,当然你也无法拿到主网上去交易。

私链相当于测试网络,进行各种操作以及获取以太币都是不需要成本的,给开发提供了必要的练习和测试场所。要知道,最后在主网上部署智能合约,可是需要消耗真正的以太币的。

了解完什么是私链,下面我们开始基于以太坊搭建自己的私链。

运行以太坊私链

1. 新建一个目录用于存放私链数据

如笔者新建的目录:E:\Ether\private

2. 配置初始化创世文件

在上面的目录下新建一个文本文件,命名为“genesis.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": { }
}

3 初始化网络

geth --datadir "E:\Ether\private" init "E:\Ether\private\genesis.json"

打开CMD界面,输入以上命令,回车。

如果目录下生成了“geth”和"keystore"两个文件夹,说明数据初始化成功

4 运行网络

geth --datadir "E:\Ether\private" --networkid 15 --port 61910 --rpc --rpcport 8545 --rpcapi "db,eth,net,web3" console

输入以上命令,回车。

image

到这一步,说明以太坊私链已经成功运行!

5. 参数说明

参数 说明
datadir 指定数据存储的目录
networkid 网络ID,比如主网的ID为1,搭建多节点时要用到
port 网络端口号
rpc 开启远程过程调用,即可以通过API方式与私链交互
rpcport rpc的端口号
rpcapi 要启用的远程调用API
console 打开控制台,这样我们才能通过命令行调用rpcapi

账户、挖矿和交易

上面我们已经成功运行起自己的私链网络,下面开始学习一些常用的操作。

注意,下面的命令都是要在控制台模式下进行的。

创建账户

personal.newAccount("123456")

创建账户需要传入密码(如果是主网,密码千万不能丢失)。创建成功后,返回该账户的地址,而地址对应的私钥是加密保存的,保存在keystore对应目录下。

查看账户列表

eth.accounts

可以创建多个账户,通过上面的命令可以查看客户端下存在的账户列表。

查看账户余额

eth.getBalance(eth.accounts[1])

上面表示查看账户列表中第二个账户的以太币余额(数组下标从0开始)。

为挖矿设置Coinbase地址

miner.setEtherbase(eth.accounts[1])

coinbase地址可以理解为,挖矿成功后,奖励的以太币要转入到哪个地址,不设置默认为第一个账户的地址。

查看当前设定的Coinbase地址

eth.coinbase

开始挖矿

miner.start()

第一次启动会比较慢,启动成功后,几乎都秒都能挖出一个区块,因为我们在genesis.josn中把难度(difficulty)设得很低。

停止挖矿

miner.stop()

停止挖矿后,再次查看账余余额,会发现已经有以太币在其中。

查看区块高度

eth.blockNumber

解锁账户

personal.unlockAccount(eth.accounts[1],"123456")

如果想要使用账户里面的资金,需要先解锁账户。

转账

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

转账要传三个参数,发送者,接收者,转账数量。

上面是从第二个账户转到第一个账户,但是转账完马上查看第一个账户的余额发现是0,因为交易还未打包进区块。

查看未打包的交易

txpool.status

刚转账完,会发现的确有一笔未打包的交易,那要怎么打包呢?当然是通过挖矿。

再次启动挖矿,挖出区块后停止挖矿,再次使用上面的命令查看,发现已经没有未打包的交易。再次查询第一个账户的余额,发现已经有以太币在其中,交易完成。

最后附上操作的截图,大家也可以多练习一下。

image image

通过控制台连接正在运行的节点

启动节点时,在命令语句最后加上“console”代表同时开启控制台。但由于控制台会不停打印消息,比如挖矿时,屏幕会不停地快速刷新,导致其它操作不好进行。

这里向大家提供一个小技巧。

还是按上面的方式启动节点网络,但语句最后不要加“console”

geth --datadir "E:\Ether\private" --networkid 15 --port 61910 --rpc --rpcport 8545 --rpcapi "db,eth,net,web3"

进入数据存储目录,即"geth"和“keystore”文件夹所在的目录,按住shift键,鼠标右击,选择“在此处打开命令窗口”

geth attach ipc:\\.\pipe\geth.ipc

在命令窗口输入以上命令,即可连接到刚才启动的节点网络,此时两个命令窗口是互不干扰的。

image
上一篇 下一篇

猜你喜欢

热点阅读