geth console下常用操作命令

定义创世区块

创建一个genesis.json文件,并保存

 mkdir ~/privatechain
 cd privatechain
 vi genesis.json 

内容如下:

{
  "config": {
        "chainId": 10, 
        "homesteadBlock": 0,
        "eip155Block": 0,
        "eip158Block": 0
    },
  "alloc"      : {},
  "coinbase"   : "0x0000000000000000000000000000000000000000",
  "difficulty" : "0x20000",
  "extraData"  : "",
  "gasLimit"   : "0x2fefd8",
  "nonce"      : "0x0000000000000042",
  "mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000",
  "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
  "timestamp"  : "0x00"
}

初始化-写入创世区块

geth init(初始化创世区块)

geth --datadir data0 init genesis.json

启动私有链节点

geth console(console启动命令行模式,即可以在Geth中执行命令)

geth --datadir data0 --networkid 110 --rpc console --port 3000 --nodiscover  

其中,--datadir后跟文件目录位置(datadir表示设置当前区块链网络数据存放的位置);
--networkid后跟一个数字,表示指定私有链的网络id为110,并且开启rpc服务。

注意:在以前的版本中,我们只用使用–dev然后执行miner.start()就可以挖矿,但是在后面的版本中,好像不管用了~~。
我miner.start()之后,返回null,查了资料才知道是因为新增了–dev.period value配置项。此配置默认值为0,也就是说只有有pending中的交易才会挖矿。
所以,之前的–dev参数依旧使用,然后再在后面添加–dev.period 1,注意,参数值为1,不是默认的0。
再重新启动节点,然后执行挖矿,先不管返回是否是null,执行之后,无论查看日志或执行eth.blockNumber都会发现块在不停的增高。
参考:https://blog.csdn.net/wo541075754/article/details/79260040

至此,就启动了区块链节点并进入了该节点的控制台,可以通过一些命令访问:

常用命令

personal.newAccount():创建账户;
personal.listAccounts:查看账户,同eth.accounts
personal.unlockAccount(eth.accounts[0]):解锁账户;
eth.accounts:枚举系统中的账户;
eth.getBalance(eth.accounts[0]):查看账户余额,返回值的单位是 Wei(Wei 是以太坊中最小货币面额单位,类似比特币中的聪,1 ether = 10^18 Wei);
miner.setEtherbase(eth.accounts[1]):将账户1设置成coinbase
eth.blockNumber:列出区块总数;
eth.getBlock():获取区块;
miner.start():开始挖矿;
miner.stop():停止挖矿;
eth.coinbase:挖矿奖励的账户
web3.fromWei(eth.getBalance(eth.accounts[0]),‘ether’):Wei 换算成以太币;
amount = web3.toWei(5,‘ether’):以太币换算成 Wei;
eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:amount}):发起交易
txpool.status:交易池中的状态;
eth.getTransaction():获取交易;
admin.addPeer():连接到其他节点;
admin.nodeInfo:查看节点摘要信息

  • 查询系统中的账户:
    >eth.accounts>personal.listAccounts
  • 创建账户:
    > personal.newAccount() Passphrase: Repeat passphrase: "0xb327a595dfbc769d73144c060b4f34c392021dad"
    账户默认会保存在数据目录的 data0/keystore 文件夹中。可以查看其中的文件
  • 查看账户余额:

> eth.getBalance(eth.accounts[0])
0
> eth.getBalance(eth.accounts[1])
0

获取余额的办法:1、从别的账户转过来;2、通过挖矿以获得以太币奖励。

  • 启动挖矿:>miner.start(1)
    (其参数表示挖矿使用的 线程数量)
    挖到一个区块会得到5个以太币的奖励,这些奖励会默认进入旷工账户coinbase,是本地第一个账户;
    我启动挖矿后,start给我返回null,我又查了一下区块高度eth.blockNumber,为0,这显然没有挖矿。:
    geth console下常用操作命令_第1张图片
    但是等了几分钟,挖矿就开始了,以下是我的截图,再次查询区块高度,它就上升了:
    geth console下常用操作命令_第2张图片
    我查询了账户0的余额,增加了,再查询账户1,发现还是0余额:
    在这里插入图片描述
    这里,如果你不想让奖励进入默认账户,可以使用miner.setEtherbase(eth.accounts[1])
    将账户1设置成coinbase(当然其他也可以)。
    在这里插入图片描述
    然后再次启动挖矿,会发现账户1中也出现了奖励。
    geth console下常用操作命令_第3张图片
  • 停止挖矿:>miner.stop()
  • wei换成以太币:
    getBalance()的返回值是wei,是以太币的最小单位,1以太币=10的18次方wei。要查看有多少个以太币,可以用web3.fromWei()将返回值换算成以太币:
> web3.fromWei(eth.getBalance(eth.accounts[0]),'ether')
8

> web3.fromWei(eth.getBalance(eth.accounts[1]),'ether')
12
  • 先解锁账户0(假设从账户0转移5个以太币到账户1):
> personal.unlockAccount(eth.accounts[0])
Unlock account Unlock account 0xdd00ebfa79050f5e3bec4b4f586977aff156d0f6
Passphrase: 
true
  • 发起交易:
> amount = web3.toWei(5,'ether')
"10000000000000000000"
> eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:amount})
INFO [02-22|20:05:04.454] Submitted transaction                     fullhash=0x52969edb7bccf6288d2c6690231e78cfefc03d8c0f6da6365 recipient=0x1816aa3Ce318DABDB266b7A72D8c06AF595D
"0x52969edb7b29ad918de1915ecccf6288d2c6690231e78cfefc03d8c0f6da6365"
  • 再次查询账户1
> web3.fromWei(eth.getBalance(eth.accounts[1]),'ether')
12

发现账户余额没有发生改变,此时交易已经提交到区块链,但还未被处理,这可以通过用 txpool.status命令可以看到本地交易池中有一个待确认的交易:


> txpool.status
{
  pending: 1,
  queued: 0
}

pending表示已提交但还未被处理的交易。要使交易被处理,必须要挖矿,启动挖矿,然后等挖到一个区块后stop

>miner.start(1);admin.sleepBlocks(1);miner.stop()
> 

再次查看余额,发现收到了10个以太币,还多了5个以太币(即挖矿奖励)

web3.fromWei(eth.getBalance(eth.accounts[1]),'ether')
22.000378

你可能感兴趣的:(智能合约,linux)