Bitget下载

注册下载Bitget下载,邀请好友,即有机会赢取 3,000 USDT

APP下载   官网注册

探索Javascript Console

进入以太坊Javascript Console后,就可以使用里面的内置对象做一些操作,这些内置对象提供的功能很丰富,比如查看区块和交易、创建账户、挖矿、发送交易、部署智能合约等。

输入:geth --datadir data0 --networkid 1108 console

上面命令的主体是geth console,表示启动节点并进入交互式控制台,--datadir选项指定使用data0作为数据目录,--networkid选项后面跟一个数字,这里是1108,表示指定这个私有链的网络id为1108。网络id在连接到其他节点的时候会用到,以太坊公网的网络id是1,为了不与公有链网络冲突,运行私有链节点的时候要指定自己的网络id。

运行上面的命令后,就启动了区块链节点并进入了Javascript Console:

这是一个交互式的Javascript执行环境,在这里面可以执行Javascript代码,其中>是命令提示符。在这个环境里也内置了一些用来操作以太坊的Javascript对象,可以直接使用这些对象。这些对象主要包括:

eth:包含一些跟操作区块链相关的方法

net:包含以下查看p2p网络状态的方法

admin:包含一些与管理节点相关的方法

miner:包含启动&停止挖矿的一些方法

personal:主要包含一些管理账户的方法

txpool:包含一些查看交易内存池的方法

MAC上以太坊私有链搭建2


MAC上以太坊私有链搭建2


一、创建账户

前面只是搭建了私有链,并没有自己的账户,可以在js console中输入eth.accounts来验证:

> eth.accounts

接下来使用personal对象来创建一个账户:

MAC上以太坊私有链搭建2

Passphrase: Repeat passphrase: "0x0416f04c403099184689990674f5b4259dc46bd8"

本人的操作如下图,并且需要输入密码


MAC上以太坊私有链搭建2

可以创建多个账户,我们再来创建一个账户,

> personal.newAccount()

Password:

Repeat password:

"0x38a98604ffb6523a9d43ff2b678735f25115250d"

> eth.accounts

["0xc834654df6bfcb231c0e5cf19776b0298f77b5a2", "0x38a98604ffb6523a9d43ff2b678735f25115250d"]

这时我们出现了二个帐号,也就是说钱包。

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

0

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

0

二个帐号都为0 eth.getBalance(eth.accounts[1])为获取第2个帐号的余额


二、启动&停止挖矿

> miner.start(1)

表示第一个帐号开始 挖矿。

如果想停止挖矿,在js console中输入miner.stop():此时你不能用CTRL+C停止的。要另启终端。

注意:输入的字符会被挖矿刷屏信息冲掉,没有关系,只要输入完整的miner.stop()之后回车,即可停止挖矿。

挖到一个区块会奖励5个以太币,挖矿所得的奖励会进入矿工的账户,这个账户叫做coinbase,默认情况下coinbase是本地账户中的第一个账户:


> eth.coinbase

"0xc834654df6bfcb231c0e5cf19776b0298f77b5a2"

表示币进入了那一个钱包,明显的是第一个钱包,当然下标为0

用命令查第一个钱包,你有 10000000000000000000个币。可以买房了。

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

10000000000000000000

getBalance()返回值的单位是wei,wei是以太币的最小单位,1个以太币=10的18次方个wei。要查看有多少个以太币,可以用web3.fromWei()将返回值换算成以太币:

> web3.fromWei(eth.getBalance(eth.accounts[0]),'ether')

10

所在你才10个 ,刚才白高兴了。

三、转帐

转1个以太坊到帐号2即下标为1的钱包


> web3.fromWei(eth.getBalance(eth.accounts[0]),'ether')

10

> amount = web3.toWei(1,'ether')

"1000000000000000000"

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

WARN [08-17|16:23:30.636] Served eth_sendTransaction reqid=16 t=5.869332ms err="authentication needed: password or unlock"

Error: authentication needed: password or unlock

at web3.js:3143:20

at web3.js:6347:15

at web3.js:5081:36

at <anonymous>:1:2


这里报错了,原因是账户每隔一段时间就会被锁住,要发送交易,必须先解锁账户,由于我们要从账户0发送交易,所以要解锁账户0:

> personal.unlockAccount(eth.accounts[0])

Unlock account 0xc834654df6bfcb231c0e5cf19776b0298f77b5a2

Password:

true


如果你密码忘了,则永远找不回来了。

再将转帐:

>amount = web3.toWei(1,'ether')

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

此时交易已经提交到区块链,返回了交易的hash,但还未被处理,这可以通过查看txpool来验证:

> txpool.status

{

pending: 1,

queued: 0

}

要使交易被处理,必须要挖矿。这里我们启动挖矿,然后等待挖到一个区块之后就停止挖矿.

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

下面看到交易进行完成了。

> txpool.status

{

pending: 0,

queued: 0

}

以下命令表示钱包2收到一个以太坊

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

1


四 查看交易和区块

> eth.blockNumber

6

当前总区块6

通过区块号查看区块:

eth.getBlock(6)


MAC上以太坊私有链搭建2

通过HASH

eth.getTransaction("0xcfa984e5ef97c998114d1bea33e18e590d9bf1ce25c95f3119023eafaba0940c")


在开发过程中活学活用,可以将自已的积分系统改为以太坊私链。在搭建时一定要限制一下,不要让别人也可以挖,当然最终业务逻辑决定。


本人用PHP调用以太坊的接口,在APP做一个假的挖矿动作,其实都是第一个帐号随机转的过去的,用链的概念,会让用户更加珍惜,如果只是一个积分,他们感到都是你系统想写多少就是多少。