主页 > 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",
"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
[]
或者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()//停止挖矿
会显示为空,但是后台运行,输出信息保存在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")
{
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,
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电商平台开发详解