主页 > imtoken苹果版下载官网怎样 > geth搭建私链以太坊开发并实现Dapp

geth搭建私链以太坊开发并实现Dapp

以太坊

没了解过或者没有系统了解过以太坊的可以看看这篇文章,简洁明了(看完才知道是卖课~):

什么是以太坊 - 以太坊开发初学者指南

智能合约开发环境搭建及Hello World合约

Geth开发私有链

直接在主目录下创建一个文件夹(这是在搭建geth环境的时候)

在这里插入图片描述

创建创世块

vim genesis.json

点击英文键盘上的i,复制粘贴以下代码然后-->esc-->:wq! 强制保存退出

错误:致命:无法写入创世块:不支持的分叉顺序:未启用 eip150Block,但在 0 启用了 eip155Block

使固定:

{
   "alloc": {},
    "config":{
        "chainId":15,
        "homesteadBlock":0,
        "eip155Block":0,
	"eip158Block":0,
        "eip150Block":0
    },
    "nonce":"0x00000000000000042",
    "mixhash":"0x0000000000000000000000000000000000000000000000000000000000000000",
    "difficulty": "0x02",
    "coinbase":"0x0000000000000000000000000000000000000000",
    "timestamp": "0x00",
    "parentHash":"0x0000000000000000000000000000000000000000000000000000000000000000",

siteqq.com 以太坊值得投资吗_以太坊dapp_在dapp里投资以太坊是否安全

"extraData": "", "gasLimit":"0x2fefd8" }

初始化链

geth --datadir data init genesis.json    

这个时候可以注意一下。 这时,会在当前目录下增加一个新的数据文件。 data下有两个文件夹geth和keystore。

geth中存储的是区块链的相关数据

keystore 将用户信息保存在链上

启动私链:在控制台开启私链,将日志输出重定向到testEth.log(如果启动报错,创世块genesis.json有问题,逗号和大括号比较多, ETC。)

geth --datadir data --networkid 123 console 2>>testEth.log

--datadir 代表文件夹地址,

再打开一个终端,找到testEth.log所在目录,执行命令tail -f geth.log,不断输出以太坊的日志

新账户

创建用户有两种方式如下,其中personal.newAccount("123456")中的123456是密码,输出的0x03c5ca63fd13777db295de7fe56be90a7f79ec93是用户账户hash,是两个账户

personal.newAccount("123456")
personal.newAccount("123456")

查看现有帐户

personal.listAccounts
[]

在dapp里投资以太坊是否安全_以太坊dapp_siteqq.com 以太坊值得投资吗

或者eth.accounts

每次要记住一长串地址很麻烦,我们可以把变量设置为acc0,acc1表示账户

> acc0 = eth.accounts[0]
"0xfcf6dce6b352f35c15d7245d9354c30cef71a989"
> acc1 = eth.accounts[1]
"0x25890c9e12d90a6e0e3f66eaa9cb21d3a581390e"
> eth.getBalance(acc0)
1.245e+21
> eth.getBalance(acc1)
0
查询账号的余额
eth.getBalance("0xfcf6dce6b352f35c15d7245d9354c30cef71a989")
eth.getBalance(acc0)                  //获取第一个帐户的资产,以wei为单位
使用这个方法可以查看格式化的以太币
web3.fromWei(web3.eth.getBalance(acc0))
1245

采矿试验

eth.coinbase会输出默认的挖矿收益账户,默认为第一个创建的账户

 eth.coinbase
"0xfcf6dce6b352f35c15d7245d9354c30cef71a989"

miner.start() //开始挖矿,挖矿时间会比较长,请耐心等待,可以通过eth.blockNumber查看当前区块高度,也可以通过日志查看

miner.stop()//停止挖矿

在这里插入图片描述

以太坊dapp_siteqq.com 以太坊值得投资吗_在dapp里投资以太坊是否安全

会显示为空,但是后台运行,输出信息保存在testEth.log中

转移操作

从账户 0xfcf6dce6b352f35c15d7245d9354c30cef71a989 转移 3 以太币到 0x25890c9e12d90a6e0e3f66eaa9cb21d3a581390e。 如果未指定 ether,则默认转账为 wei。

> web3.eth.sendTransaction({from:acc0,to:acc1,value:web3.toWei(3,"ether")})

事务报错的原因是因为

这是以太坊的一种保护机制。 该帐户将每隔一段时间自动锁定一次。 此时,任何账户之间的以太币兑换都将被拒绝,除非账户被解锁。

这时候我们需要执行personal.unlockAccount(acc0),输入密码解锁acc0。

在这里插入图片描述

交易哈希值

"0xce6b5887f6da6c28dece6958ad636ae5d034e60780c925b1ce5518e1443d8e5b"

解锁后在dapp里投资以太坊是否安全,交易成功,但双方余额依旧不变,需要重新挖矿才能改变

在这里插入图片描述

仍然没有成功

txpool.status 查看交易信息在dapp里投资以太坊是否安全,交易未完成

在这里插入图片描述

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

挖出一个区块后自动停止

eth.blockNumber

查看目前已经挖出的区块数量

查询交易信息

eth.getTransaction("0xce6b5887f6da6c28dece6958ad636ae5d034e60780c925b1ce5518e1443d8e5b")

eth.getTransaction("0xce6b5887f6da6c28dece6958ad636ae5d034e60780c925b1ce5518e1443d8e5b")

在dapp里投资以太坊是否安全_siteqq.com 以太坊值得投资吗_以太坊dapp

{ blockHash: "0x32ebdded003256211c270f8606ef9e761b5724cb37ec98ec11f1b5e13ff06736", blockNumber: 4, from: "0xfcf6dce6b352f35c15d7245d9354c30cef71a989", gas: 21000, gasPrice: 1000000000, hash: "0xce6b5887f6da6c28dece6958ad636ae5d034e60780c925b1ce5518e1443d8e5b", input: "0x", nonce: 0, r: "0xd4de937ed347214e92cdf940dd44d53940a0d0fc637b384b4dc061141b430609", s: "0x6dda89a806a98b03eb08b77fd377ac0f95f84916d976fe01e3d35d506922d0d5", to: "0x25890c9e12d90a6e0e3f66eaa9cb21d3a581390e", transactionIndex: 0, type: "0x0", v: "0x42", value: 3000000000000000000

查看区块信息

eth.getBlock(0number)         //查询第几块number就是几

> eth.getBlock(0)
{
  difficulty: 2,
  extraData: "0x",
  gasLimit: 3141592,
  gasUsed: 0,

以太坊dapp_在dapp里投资以太坊是否安全_siteqq.com 以太坊值得投资吗

hash: "0x40c510eede676a37109a9bb577598b79b302265553c131a92b4372b0567253cf", logsBloom: "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", miner: "0x0000000000000000000000000000000000000000", mixHash: "0x0000000000000000000000000000000000000000000000000000000000000000", nonce: "0x0000000000000042", number: 0, parentHash: "0x0000000000000000000000000000000000000000000000000000000000000000", receiptsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", size: 504, stateRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", timestamp: 0, totalDifficulty: 2, transactions: [], transactionsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", uncles: [] }

挖矿陷入 Commit new mining work 问题

"extraData": 创世块中的 "0x777573686f756865" 删除 "extraData": ""

打开终端的快捷键

我的是Ctrl+T,

参考:

CentOS使用快捷键打开终端

终端运行管理员图形界面

sudo nautilus

后续参考

Ethereum+IPFS+WEB电商平台开发详解