DAPP(1)- geth开发

511 阅读3分钟

安装GETH

brew tap ethereum/ethereum
brew install ethereum

tip: 如遇安装报错--No such file or directory  @  dir_chdir -  /usr/local/Cellar

手动创建/usr/local/Cellar文件,并添加权限即可解决

使用GETH搭建私链

1、初始化配置文件,工程根目录添加文件genesis.json

{
  "config": {
    "chainId": 123,
    "homesteadBlock": 0,
    "eip150Block": 0,
    "eip155Block": 0,
    "eip158Block": 0,
    "byzantiumBlock": 0,
    "constantinopleBlock": 0,
    "petersburgBlock": 0,
    "istanbulBlock": 0
  },
  "alloc": {},
  "coinbase": "0x0000000000000000000000000000000000000000",
  "difficulty": "0x2000",
  "extraData": "",
  "gasLimit": "0x2fefd8",
  "nonce": "0x0000000000000042",
  "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "timestamp": "0x00"
}

2、工程目录下初始化私链

geth --datadir "chain" init genesis.json

3、启动私链

 geth --datadir "chain" --http --http.api personal,eth,net,web3 console --allow-insecure-unlock

geth 参数通过geth help查看

console配置是打开js交互控制台,进入控制台后,命令参考web3js.readthedocs.io/en/v1.5.2/ 此时会启动web服务,默认端口为8545

常用命令

命令含义
eth.blockNumber区块数量
eth.accounts区块账户信息
miner.start(1)开始挖矿,参数为挖矿线程数
eth.mining挖矿状态
personal.newAccount()新建账户

测试新建账户, 123456为密码

personal.newAccount('123456')

查看账户

eth.accounts

此时命令行会输出一个账号

完成上面的基本操作,开始尝试通过geth完成两个账户之间的转账。

基于geth链,完成一笔交易

再添加一个账户

personal.newAccount('123456')

默认挖矿的收益都归属于第一个账户,也可以手动配置

miner.setEtherbase(eth.accounts[0])

设置完成后,查看

eth.coinbase

会输出我们刚刚设置的账户地址。

接下来开始挖矿,挖一个区块就停止。

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

等待完成后,通过eth.blockNumber查询区块数量;通过web3.fromWei(eth.getBalance(eth.accounts[0]),"ether")查看挖矿收益。eth.getBalance(addr)会返回账户的余额,余额以wei为单位,传入的参数是账户的公钥,web3.fromWei单位转换,在这个例子中是将wei转换成ether。

解锁账户

在发送转账交易之前我们需要先解锁账户,否则会报错。执行以下命令解锁账户:

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

personal.unlockAccount(addr, passwd, duration)命令用来解锁账户,第一个参数传入需要解锁的账户地址,第二参数传入账户密码,第三个参数传入账户解锁状态持续时间,单位是秒。

如果之前的命令行中没有--allow-insecure-unlock,会报错account unlock with HTTP access is forbidden

使用最新版本geth客户端,当执行personal.unlockAccount()或在程序中调用personal_unlockAccount接口时,会出现:account unlock with HTTP access is forbidden异常。 异常原因: 新版本geth,出于安全考虑,默认禁止了HTTP通道解锁账户。

开始交易

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

eth.sendTransaction(transactionObject)用来向区块链网络中发送一笔转账交易。当交易发送到区块链后,会返回一个交易hash,此时的交易正在矿工的交易池中等待被打包。

查看交易池等待被打包的交易

txpool.status返回正在等待打包的交易。其中有一条pending的交易,pending表示已提交但未被处理的交易。

image.png

查看pending交易的详情

txpool.inspect.pending返回pending交易的详细信息。

要想交易被处理,必须要挖矿。这里启动挖一个区块;

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

挖到矿后,现在交易已经被成功打包了,可以通过账户查看账户余额时候变动