以太坊智能合约代币应用开发(2)-geth的基本应用

一、概述

本节将介绍geth私有链环境的搭建,在进行区块链开发时一般需要在私有链环境当中进行,一开始就在公链上开发所有的资源使用都需要支付相关费用,而且所有区块在同步数据时都会有延迟。

二、相关概念

1、共有链与私有链

公共区块链是指全世界任何人都可读取的、任何人都能发送交易且交易能获得有效确认的、任何人都能参与其中共识过程的区块链——共识过程决定哪个区块可被添加到区块链中和明确当前状态。私有的区块链是指其写入权限仅在一个组织手里的区块链。读取权限或者对外开放,或者被任意程度地进行了限制。

三、创建与连接节点

1、在私有网络上创建节点

使用下列命令可以在以太坊的私有网络中创建节点

geth --networkid 123 --dev  --datadir data1 --rpc --rpcaddr 127.0.0.1 --rpcport 8545 --rpcapi web3,eth,personal --port 3000 console

效果如下图所示:

以太坊智能合约代币应用开发(2)-geth的基本应用_第1张图片

参数说明:

    可以使用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

链接效果如下:

以太坊智能合约代币应用开发(2)-geth的基本应用_第2张图片

    注意:1、在链接成功之后注意提示信息中的module的列表项与启动时的rpcapi设置是一致的

3、使用IPC连接到节点

        在使用ipc连接到节点时需要指名ipc文件的路径,该文件默认存在节点目录的下:

以太坊智能合约代币应用开发(2)-geth的基本应用_第3张图片

        可以使用下列命令进行链接

geth attach ipc:/home/sunbaolong/data1/geth.ipc

        链接效果如下图所示:

以太坊智能合约代币应用开发(2)-geth的基本应用_第4张图片

        注意:在使用ipc进行连接其实是用linux的命名通道进行链接,相对于rpc的网络传输来讲更加安全。所有在使用ipc进行连接时所有的module都是可用的。

        使用ws方式链接到节点的方法是类似的。

四、基本命令

        在geth客户端可以使用的命令包含一下几个模块,在上面截图当中也能够看到

  1.    admin:节点管理相关功能
  2.    eth:区块链相关命令
  3.    net:网络传输相关命令
  4.    personal:账户管理相关命令
  5.    web3:web接口功能,包含以上全部模块,如web3.eth,web3.personal,我们使用web3的各种客户端使用的功能都是由该模块提供的

    1、查看账户

    区块链中的每一个账户都是由一个地址和一个钱包来构成的,可以使用下面命令查看账户的基本信息

eth.accounts


    或者使用下列命令

personal.listAccounts

   

   2、查看钱包

personal.listWallets

以太坊智能合约代币应用开发(2)-geth的基本应用_第5张图片

     3、查看钱包余额

eth.getBalance(eth.accounts[0])

     4、新建账户

    可以看到在节点被创建时,已经默认有一个账号存在,而且在该账号中已经存在了很多的以太币。我们可以使用下列命令创建新用户

personal.newAccount('123456')

    查看账户

以太坊智能合约代币应用开发(2)-geth的基本应用_第6张图片

    注意:目前账户的状态是锁定的,解锁的过程其实就是账户登陆的过程。在区块链中账户都有一个密钥存储在节点的keystore中,在上面的输出中也不难看到。

    5、交易

  

    可以发起以太币交易,这里的以太币是测试环境下的虚拟以太币

from  = eth.accounts[0]
to = eth.accounts[1]
eth.sendTransaction({from:from,to:to,value:2000})

    效果如下图所示:


    此时,查询用户一的钱包余额

    6、解锁用户

    新建一个user3并且使用第二个用户为其转账,如下图所示

以太坊智能合约代币应用开发(2)-geth的基本应用_第7张图片

    此时提示错误,因为无法锁定的账户进行转账处理,此时需要解锁转出账户,可以使用下面命令

personal.unlockAccount(user2)

    此时需要输入用户密码,如下图所示:

 

    7、挖矿

    

    此时再次进行转账

    此时可以看到提示gas不足,gas的概念就是区块链上的矿机在进行挖矿的时候需要的汽油,这个概念是和区块链的去中心化思想紧密结合在一起的,从账户1中给“to”用户转账足够的以太币。


    此时发现转账并没有成功,因为交易产生新的区块,需要矿机处理区块交易才能完成,可以使用下面命令开启挖矿。

miner.start()

    如下图,所示交易区块已经被挖出来并且成功处理


   此时再检查用于余额


    此时查询第一个用户的余额


    此时第一个账户的余额并没有减少,因为该账户是系统的默认账户,以太币是充足的。从第二个用户继续转账到第三个用户。


    此时仍然提示解锁,所以一次交易用户有一次被设置为锁定状态,这可以看成是区块链的一种安全机制

以太坊智能合约代币应用开发(2)-geth的基本应用_第8张图片

    此时成功转账,查询一个转出账户的余额


    有没有发现少了不止2000,少了部分就是支付的gas了

    8矿机账户

可以使用下面命令查看矿机账户

eth.coinbase

   geth的基本操作就是这样了,下一篇将介绍智能合约的部分





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