本节将介绍geth私有链环境的搭建,在进行区块链开发时一般需要在私有链环境当中进行,一开始就在公链上开发所有的资源使用都需要支付相关费用,而且所有区块在同步数据时都会有延迟。
公共区块链是指全世界任何人都可读取的、任何人都能发送交易且交易能获得有效确认的、任何人都能参与其中共识过程的区块链——共识过程决定哪个区块可被添加到区块链中和明确当前状态。私有的区块链是指其写入权限仅在一个组织手里的区块链。读取权限或者对外开放,或者被任意程度地进行了限制。
1、在私有网络上创建节点
使用下列命令可以在以太坊的私有网络中创建节点
geth --networkid 123 --dev --datadir data1 --rpc --rpcaddr 127.0.0.1 --rpcport 8545 --rpcapi web3,eth,personal --port 3000 console
效果如下图所示:
参数说明:
可以使用geth --help命令来获取geth命令的详细使用,这里将上面命令的主要参数说明一下
1、networkid是网络标识,具有同一网络标识的区块原则上可以互通,id为1为以太坊主网络,1-4网络已经被以太坊自行占用,为了说有这是一个私有网络我们将其设置为123
2、--dev 说明在开放模式下进项
3、datadir 节点的存储位置,由于连接到区块链的各个节点必须下载链上的数据,由于区块链采用分布式存储,所以没有中心化的存储设备,数据存储在区块链的各个节点当中。
4、rpc 开启rpc,rpc是使用http方式访问节点的方式,除此之外系统还提供了 ipc,ws(websocket)等方式。
5、rpcaddr 设置http访问的服务器地址默认是localhost,可以设置为本机的ip地址
6、rpcport 设置http访问的端口,默认是8545
7、rpcapi 设置通过http访问的api列表,在默认情况下personal 是不开启的,需手动开启
8、console 使用该选项在节点建立完成之后直接进入交互式界面。否则服务启动之后将处于监听状态,无法直接交互。
2、使用rpc连接到节点
在节点启动之后可以使用 geth attach 命令连接到节点,链接方式可以使用rpc,ipc,ws之中一种关键看节点服务设置了哪一种链接方式。
geth attach rpc:http://127.0.0.1:8545
链接效果如下:
注意:1、在链接成功之后注意提示信息中的module的列表项与启动时的rpcapi设置是一致的
3、使用IPC连接到节点
在使用ipc连接到节点时需要指名ipc文件的路径,该文件默认存在节点目录的下:
可以使用下列命令进行链接
geth attach ipc:/home/sunbaolong/data1/geth.ipc
链接效果如下图所示:
注意:在使用ipc进行连接其实是用linux的命名通道进行链接,相对于rpc的网络传输来讲更加安全。所有在使用ipc进行连接时所有的module都是可用的。
使用ws方式链接到节点的方法是类似的。
在geth客户端可以使用的命令包含一下几个模块,在上面截图当中也能够看到
1、查看账户
区块链中的每一个账户都是由一个地址和一个钱包来构成的,可以使用下面命令查看账户的基本信息
eth.accounts
或者使用下列命令
personal.listAccounts
2、查看钱包
personal.listWallets
3、查看钱包余额
eth.getBalance(eth.accounts[0])
4、新建账户
可以看到在节点被创建时,已经默认有一个账号存在,而且在该账号中已经存在了很多的以太币。我们可以使用下列命令创建新用户
personal.newAccount('123456')
查看账户
注意:目前账户的状态是锁定的,解锁的过程其实就是账户登陆的过程。在区块链中账户都有一个密钥存储在节点的keystore中,在上面的输出中也不难看到。
可以发起以太币交易,这里的以太币是测试环境下的虚拟以太币
from = eth.accounts[0]
to = eth.accounts[1]
eth.sendTransaction({from:from,to:to,value:2000})
效果如下图所示:
此时,查询用户一的钱包余额
6、解锁用户
新建一个user3并且使用第二个用户为其转账,如下图所示
此时提示错误,因为无法锁定的账户进行转账处理,此时需要解锁转出账户,可以使用下面命令
personal.unlockAccount(user2)
此时需要输入用户密码,如下图所示:
7、挖矿
此时再次进行转账
此时可以看到提示gas不足,gas的概念就是区块链上的矿机在进行挖矿的时候需要的汽油,这个概念是和区块链的去中心化思想紧密结合在一起的,从账户1中给“to”用户转账足够的以太币。
此时发现转账并没有成功,因为交易产生新的区块,需要矿机处理区块交易才能完成,可以使用下面命令开启挖矿。
miner.start()
如下图,所示交易区块已经被挖出来并且成功处理
此时再检查用于余额
此时查询第一个用户的余额
此时第一个账户的余额并没有减少,因为该账户是系统的默认账户,以太币是充足的。从第二个用户继续转账到第三个用户。
此时仍然提示解锁,所以一次交易用户有一次被设置为锁定状态,这可以看成是区块链的一种安全机制
此时成功转账,查询一个转出账户的余额
有没有发现少了不止2000,少了部分就是支付的gas了
8、矿机账户
可以使用下面命令查看矿机账户
eth.coinbase
geth的基本操作就是这样了,下一篇将介绍智能合约的部分