主页 > imtoken最新版app > 以太坊私链Win7环境搭建

以太坊私链Win7环境搭建

imtoken最新版app 2023-03-28 07:32:40

--rpcapi : 基于http-rpc提供的api接口。 以太坊、网络、web3、数据库……

--rpcaddr : http-rpc 服务器接口地址: 默认 "127.0.0.1"

--rpcport : http-rpc port (多节点时不重复)

--port : 节点端口号(多个节点时不重复)

--networkid : 网络标识随意指定一个id(保证多个节点是一个统一的网络,保持一致)

常用的交互命令

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

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

net:包含一些查看p2p网络状态的方法;

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

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

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

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

web3:包含了上面的对象,也包含了一些单位换算的方法。

控制台操作

进入以太坊Javascript控制台后,可以使用内置对象进行一些操作。 这些内置对象提供了很多功能,例如查看区块和交易、创建账户、挖矿、发送交易和部署智能合约。

常用的命令有:

personal.newAccount():创建一个账户;

personal.unlockAccount():解锁账户;

eth.accounts:枚举系统中的账户;

eth.getBalance():查询账户余额,返回值的单位为Wei(Wei是以太坊中最小的货币面额单位,类似于比特币中的Satoshi以太坊钱包标识怎么填,1 ether = 10^18 Wei);

eth.blockNumber:列出区块总数;

eth.getTransaction():获取交易;

eth.getBlock():获取区块;

miner.start():开始挖矿;

miner.stop():停止挖矿;

eth.coinbase:挖矿奖励账户

web3.fromWei():将 Wei 转换为 Ether;

web3.toWei():将ETH转换为Wei;

txpool.status:交易池中的状态;

admin.addPeer():连接其他节点;

操作

启动私有区块后,默认没有账户

支票账户

> eth.accounts
[]

创建账户

> personal.newAccount()
Passphrase: 
Repeat passphrase: 
"0xfb9cc019fc650a1699d05b7fb564b83c3a72b64d"

Passphrase表示输入密码,Repeat passphrase表示输入确认密码

重新创建一个帐户

> personal.newAccount()
Passphrase: 
Repeat passphrase: 
"0xc6b5702b15a3794374e28f41f36e1e8dbdd564df"

这里我们创建了两个账户

账号默认会保存在data目录的data0/keystore文件夹下。可以查看里面的文件

查看账户余额

可以通过eth.getBalance()查看账户余额

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

开始和停止挖矿

通过 miner.start() 开始挖矿

> miner.start(3)

start参数表示用于挖矿的线程数。 第一次开始挖矿,首先会生成挖矿所需的DAG文件。 这个过程有点慢。 进度达到100%后开始挖矿,屏幕上会刷新挖矿信息。

停止挖矿,在控制台输入:

miner.stop()

挖出一个区块将奖励5 ETH,挖矿获得的奖励将进入矿工账户。 这个账户叫做 coinbase。 默认情况下以太坊钱包标识怎么填,coinbase 是本地账户中的第一个账户:

> eth.coinbase
"0xfb9cc019fc650a1699d05b7fb564b83c3a72b64d"

您可以通过 miner.setEtherbase() 将其他账户设置为 coinbase

> miner.setEtherbase(eth.accounts[1])
true
> eth.coinbase
"0xc6b5702b15a3794374e28f41f36e1e8dbdd564df"

重启挖矿,查看eth.accounts[1]是否能拿到ether

> miner.start(3)
//等待几秒后
> miner.stop()

查询账户余额:

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

发现0号账户和1号账户都有Ether,说明miner.setEtherbase()设置成功。

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

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

发送交易

我们从账户0转10个ETH到账户1,

0号账户必须先解锁才能发起交易(新版console客户端不再支持解锁账户,会提示Error: account unlock with HTTP access is forbidden,所以直接使用mis客户端转账)。 我用的是新版(2019-0-30下载的版本),看后面的截图转钱就行了

控制台模式

> personal.unlockAccount(eth.accounts[0])
Unlock account 0xfb9cc019fc650a1699d05b7fb564b83c3a72b64d
Passphrase: 
true

发起交易

> amount = web3.toWei(10,'ether')
"10000000000000000000"
> eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:amount})
INFO [05-29|22:37:32] Submitted transaction                    fullhash=0x493e8aa2bcb6b2a362bdbd86b2c454279e14beea43b444aeb45c7f667bf572e2 recipient=0xc6b5702B15a3794374e28f41F36e1E8dBDd564DF
"0x493e8aa2bcb6b2a362bdbd86b2c454279e14beea43b444aeb45c7f667bf572e2

查询账户1的余额:

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

客户端模式

更直观一点,直接点击SEND,选择转账方账户,填写接收方钱包地址(可以复制账户地址),填写金额后确认,输入转账方密码确认。

在这里插入图片描述

无论是console模式还是client模式:发现账户余额没有变化。 此时,交易已经提交到区块链,但还没有被处理。 这可以通过使用 txpool.status 命令看到。 有一笔交易待确认:

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

其中有一个pending transaction,意思是已经提交但是还没有处理的交易。

处理交易需要挖矿。 这里开始挖矿,等待挖出一个区块后停止挖矿:

>miner.start(1);admin.sleepBlocks(1);miner.stop()
> web3.fromWei(eth.getBalance(eth.accounts[1]),'ether')
225.000378

发现账户收到了账户的钱,又多了5个以太币。 实际上,多出来的 5 个以太币就是挖矿奖励。

查看交易和区块

查看当前区块总数:

> eth.blockNumber
99

按块号查看块:

> eth.getBlock(6)
{
  difficulty: 131328,
  extraData: "0xd98301080a846765746888676f312e31302e328664617277696e",
  gasLimit: 3160033,
  gasUsed: 0,
  hash: "0x9679d0dc01045c3d15cbf29241ae1cd6de2e5661d3387c0980f6397e3fd9ed2c",
  logsBloom: "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
  miner: "0xfb9cc019fc650a1699d05b7fb564b83c3a72b64d",
  mixHash: "0x05c369134eac2cb6227860b4ed11527b11825af3541712c5704914576c37c0a0",
  nonce: "0x00168a9831624417",
  number: 6,
  parentHash: "0xad68f0a581cf2144b8a05190b6310c7a9d945d9c338fd16b4708651b8813ad8b",
  receiptsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
  sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
  size: 537,
  stateRoot: "0xfaa0a4ffe160a2937b967f9780ae0de51a465bcce6a3f6f3aa24b903df3d44a0",
  timestamp: 1527602736,
  totalDifficulty: 918144,
  transactions: [],
  transactionsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
  uncles: []
}

通过交易哈希查看交易(哈希值包含在上述交易返回值中):

eth.getTransaction("0x493e8aa2bcb6b2a362bdbd86b2c454279e14beea43b444aeb45c7f667bf572e2")
{
  blockHash: "0xbe60f7ccddcb7cab39a7b932c0d89d37ac13ae14521cfdcb8ac359a5b6773655",
  blockNumber: 99,
  from: "0xfb9cc019fc650a1699d05b7fb564b83c3a72b64d",
  gas: 90000,
  gasPrice: 18000000000,
  hash: "0x493e8aa2bcb6b2a362bdbd86b2c454279e14beea43b444aeb45c7f667bf572e2",
  input: "0x",
  nonce: 0,
  r: "0x8da41e865d399fc4d8f813a39116e486db7658a04ea1f89ca0b7f44c02dd3c57",
  s: "0x15edd22404460cfc5e86c9735774a02aad024bc8c369ec531e4485f1012cbcf6",
  to: "0xc6b5702b15a3794374e28f41f36e1e8dbdd564df",
  transactionIndex: 0,
  v: "0x37",
  value: 10000000000000000000
}

参考

以太坊私链多节点搭建