主页 > imtoken冷钱包官方下载 > 以太坊js挖矿

以太坊js挖矿

imtoken冷钱包官方下载 2023-10-24 05:08:12

虽然以太坊是一个公链系统,但是我们可以通过设置一些参数来运行自己的私有链节点。 在自己的私有链上进行开发测试,不需要同步公链数据,也不需要花钱购买以太坊,节省存储空间和成本,非常灵活方便。 本文介绍使用geth客户端搭建私有链的操作步骤。 同时,对本过程中用到的各个命令和选项的含义和作用进行说明。 最后介绍geth的Javascript Console中的一些常用功能。 系统及软件 Ubuntu 16.04 64位 geth 1.5.6 => (安装教程) 搭建私有链 1. 准备创世块配置文件 以太坊支持自定义创世块。 要运行私有链,我们需要定义自己的创世块,创世块信息以json格式写在配置文件中。 先将以下内容保存到一个json文件中,比如genesis.json。 {“ coinbase”:“ 0x0000000000000000000000000000000000000000000000000000”,“难度”:“ 0x400”,“ extradata”:“ 0x0”,“ gasimit”,“ gasimit”:“ 0x2Fefd8”,“ nonce”,“ nonce”:“ none”:“ 0xdeadeadeede000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000来” parentHash" : "0x000000000000000000000000000000000000000000000000000000000000000", "timestamp" : "0x00", "alloc": {}} 创世块信息写入区块链。

首先,创建一个目录来存储区块链数据。 假设新建的数据目录为~/privatechain/data0,genesis.json存放在~/privatechain。 此时目录结构应该是这样的: privatechain├── data0└ ── genesis.json 接下来进入privatechain,执行初始化命令: $ cd privatechain$ geth --datadir data0 init genesis.json 的主体上面的命令是geth init,意思是初始化区块链,命令可以有options和parameters,其中--datadir选项后跟一个目录名,这里是data0,表示指定的数据存储目录是data0,genesis.json 是 init 命令的参数。 运行上述命令会读取genesis.json文件btc难度调整,并根据其内容将创世块写入区块链。 如果看到如下输出,则初始化成功。 I0322 10:52:44.585282 cmd/geth/chaincmd.go:131] successfully wrote genesis block and/or chain rule set: b240e0678c2a8f87cf350225b528e3d97688aad6d4d84ee84e405c7fc9e37e4e 初始化成功后,会在数据目录data0中生成geth和keystore两个文件夹,此时目录结构如下: privatechain├── data0│ ├── geth│ │ └── chaindata│ │├── 000002.log│ ├── CURRENT│ │├── LOCK│ │├── LOG│ │ └── MANIFEST-000003│ └── keystore└── genesis.json 其中geth/chaindata存放区块数据,keystore存放账户数据。

3. 启动私有链节点 初始化完成后,你就会拥有自己的私有链,然后就可以启动自己的私有链节点,进行一些操作了。 在终端输入如下命令启动节点: $ geth --datadir data0 --networkid 1108 console 上面命令的主体是geth console,意思是启动节点,进入交互式控制台。 --datadir 选项指定使用 data0 作为数据目录。 --networkid选项后面跟一个数字,这里是1108,意思是指定这个私有链的网络id为1108,连接其他节点时会用到这个网络id。 以太坊公网network id为1,为了不和公链网络冲突,运行私链节点时必须指定自己的network id。 运行上述命令后,启动区块链节点,进入Javascript控制台:...欢迎使用Geth JavaScript控制台!instance: Geth/v1.5.6-stable/linux/go1.7.3 modules: admin:1.0 debug : 1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0> 这是一个交互式Javascript执行环境,可以执行Javascript代码,其中>是命令提示符。

btc难度调整_剑灵副本难度调整_火炬之光2调整难度

在这个环境中,还内置了一些操作以太坊的Javascript对象,可以直接使用这些对象。 这些对象主要包括: eth:包含一些操作区块链相关的方法 net:包含以下查看p2p网络状态的方法 admin:包含一些管理节点相关的方法 miner:包含一些启动和停止挖矿的方法 personal:主要包含一些管理账户的方法 txpool:包括一些查看交易内存池的方法 web3:包括以上对象btc难度调整,还包括一些单位换算的方法 探索Javascript Console 进入以太坊Javascript Console后,可以使用里面的内置对象来做一些Operations,这些内置对象提供了丰富的功能,比如查看区块和交易、创建账户、挖矿、发送交易、部署智能合约等。接下来介绍几个常用的功能。 以下操作中,前面带>的表示在Javascript Console中执行的命令。 1. 在创建账号前,您只是搭建了一条私链,并没有自己的账号。 可以在js控制台输入eth.accounts验证: > eth.accounts[] 接下来使用personal对象创建账户: > personal.newAccount( )Passphrase: 重复passphrase: "0xc232e2add308136571bb8f9197ba4ae4e5ba9836" 会提示输入密码并确认密码。 不会显示密码,直接输入即可,然后会显示新建的账户地址。

火炬之光2调整难度_剑灵副本难度调整_btc难度调整

Multiple accounts can be created, let's create another account: > personal.newAccount() Passphrase: Repeat passphrase: "0x814d39aa21f3eed069f2b21da7b5f857f7343afa" Next, you can view the two accounts you just created: > eth.accounts["0xc232e2add308136571bb49a34e6"ba " 0x814d39aa21f3eed069f2b21da7b5f857f7343afa"]账号默认保存在数据目录下的keystore文件夹中。 查看目录结构,发现data0/keystore中多了两个文件。 这两个文件对应刚刚创建的两个账户。 这是一个json格式的文本文件,可以打开查看。 存储在其中的私钥是用密码加密的。 信息。 data0├── geth│ ├── chaindata│ ├── LOCK│ ├── nodekey│ └── nodes ├── geth.ipc ├── history└── keystore├── UTC--2017-03-22T09 -06-47.766993033Z--c232e2add308136571bb8f9197ba4ae4e5ba9836└── UTC--2017-03-22T09-09-42.041015656Z--814d39keyaa21f3eed069f2b21da7b5f8 提示按小Tab即可自动完成:

btc难度调整_火炬之光2调整难度_剑灵副本难度调整

2.查看账户余额 eth对象提供了查看账户余额的方法: > eth.getBalance(eth.accounts[0])0 > eth.getBalance(eth.accounts[1])0 目前以太币余额两个账户的都是0。要让账户有余额,可以从其他账户转钱,或者通过挖矿获得以太坊奖励。 3. 启停挖矿 通过miner.start()开始挖矿: > miner.start(1) start参数表示用于挖矿的线程数。 第一次开始挖矿,首先会生成挖矿所需的DAG文件。 这个过程有点慢。 进度达到100%后开始挖矿,屏幕上会刷新挖矿信息。 如果想停止挖矿,在js控制台输入miner.stop(): > miner.stop() 注意:输入的字符会被挖矿刷新信息冲掉,没关系,输入完整的miner即可.stop() 然后回车停止挖矿。 一个区块奖励5个以太币,挖矿所得奖励进入矿工账户。 这个账户叫做 coinbase。 默认coinbase是本地账户中的第一个账户: > eth.coinbase"0xc232e2add308136571bb8f9197ba4ae4e5ba9836" 现在coinbase是0号账户,要让挖矿奖励进入其他账户,通过miner.setEtherbase()将其他账户设置为coinbase: > miner. setEtherbase(eth.accounts[1])true> eth.coinbase"0x814d39aa21f3eed069f2b21da7b5f857f7343afa" 我们仍然使用账户 0 作为 coinbase。 区块被挖出后,账户0应该有余额: > eth.getBalance(eth.accounts[0])1600000000000000000000 getBalance()返回值的单位是wei,也就是以太币的最小单位,1以太 = 10 的 18 次方 wei。

火炬之光2调整难度_btc难度调整_剑灵副本难度调整

要检查有多少以太币,可以使用 web3.fromWei() 将返回值转换为以太币: > web3.fromWei(eth.getBalance(eth.accounts[0]),'ether')160 4. 发送现在交易,账户1的余额还是0: > eth.getBalance(eth.accounts[1])0 你可以通过发送交易从账户0转5个ETH到账户1: > amount = web3.toWei(5, 'ether')"5000000000000000000"> eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:amount})错误:账户被锁定在 web3.js:3119:20at web3。 js :6023:15at web3.js:4995:36at :1:1 这里报错。 原因是帐户每隔一段时间就会被锁定。 要发送交易,必须先解锁帐户。 由于我们要从账户0发送交易,所以要解锁账户0: > personal.unlockAccount(eth.accounts[0])Unlock account 0xc232e2add308136571bb8f9197ba4ae4e5ba9836Passpphrase: true 输入创建账户时设置的密码,即可成功解锁账户.

剑灵副本难度调整_火炬之光2调整难度_btc难度调整

然后发送交易: > amount = web3.toWei(5,'ether')"5000000000000000000"> eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:amount}) I0322 19:39:36.300675 internal/ethapi/api.go:1047] Tx(0x0c59f431068937cbe9e230483bc79f59bd7146edc8ff5ec37fea6710adcab825) to: 0x814d39aa21f3eed069f2b21da7b5f857f7343afa"0x0c59f431068937cbe9e230483bc79f59bd7146edc8ff5ec37fea6710adcab825" 此时交易已经提交到区块链,返回了交易的hash,但还未被处理,这可以通过查看txpool: > txpool.status{ pending: 1, queued: 0} 来验证是否有pending transaction,即已经提交但还未处理的交易。

处理交易需要挖矿。 这里我们开始挖矿,然后在挖出一个区块后停止挖矿: > miner.start(1);admin.sleepBlocks(1);miner.stop(); 当miner.stop()返回true时,txpool中的pending交易数应该为0,说明交易已经处理完毕: > txpool.status{ pending: 0, queued: 0} 此时交易已经生效, 而账户1应该已经收到了5个以太币: > web3.fromWei(eth.getBalance(eth.accounts[1]),'ether')5 5. 查看交易和区块 eth对象封装了查看交易和区块的方法information.查看当前区块总数: > eth.blockNumber33 通过交易hash查看交易: > eth.getTransaction("0x0c59f431068937cbe9e230483bc79f59bd7146edc8ff5ec37fea6710adcab825"){ blockHash: "0xf5d3da50065ce5793c9571a031ad6fe5f1af326a3c4fb7ce16458f4d909c1613", blockNumber: 33, from: "0xc232e2add308136571bb8f9197ba4ae4e5ba9836", gas: 90000, gasPrice: 20000000000, hash: "0x0c59f431068937cbe9e230483bc79f59bd7146edc8ff5ec37fea6710adcab825", input: "0x", nonce: 0, r: "0x433fe5845391b6da3d8aa0d2b53674e09fb6126f0070a600686809b57e4ef77d", s: "0x6b0086fb76c46024f849141074a5bc79c49d5f9a658fd0f edbbe354889c34d8d", to: "0x814d39aa21f3eed069f2b21da7b5f857f7343afa", transactionIndex: 0, v: "0x1b", value: 5000000000000000000} 通过区块号查看区块: > eth.getBlock(33){ difficulty: 132928, extraData: "0xd783010506846765746887676f312e372e33856c696e7578", gasLimit : 3244382, gasUsed: 21000, hash: "0xf5d3da50065ce5793c9571a031ad6fe5f1af326a3c4fb7ce16458f4d909c1613", logsBloom: "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", miner: "0xc232e2add308136571bb8f9197ba4ae4e5ba9836", mixHash: "0x09849dff7c8b8467812fa80d1fa2a27bc61f1cf16d5b2c05 a6ce1b77ee18f3f1", nonce: "0x5b3939449dbdbea0", number: 33, parentHash: "0xeca34637642f56f7cfe5b699031c7ddbc43aee00fb10c7f054e0a9719cf226da", receiptsRoot: "0xd5f5b7ee944e57cbff496f7bdda7ceffd5eedffe6d5be5320008190502adc07a", sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", size: 649, stateRoot: " 0xc7add6b756980ab9e482766e455597ef1583e747ad62e2924a8e66c6f9170112", timestamp: 1490183209, totalDifficulty: 4358016, transa ctions: ["0x0c59f431068937cbe9e230483bc79f59bd7146edc8ff5ec37fea6710adcab825"], transactionsRoot: "0x7335a362b2c3925e7ba1b41bf7772aa9645a13d4f9c12edd5892b87887264232", uncles: []} 还有更多的功能请自行探索...。

6.连接其他节点可以通过admin.addPeer()方法连接其他节点。 如果两个节点要通信,必须保证网络是连通的,必须指定相同的networkid。 假设有两个节点:节点1和节点2,networkid都是1108,可以通过以下步骤从节点1连接到节点2。首先要知道节点二的enode信息,在节点二的js控制台中执行下面的命令查看enode信息: > admin.nodeInfo.enode"enode://9e86289ea859ca041f235aed87a091d0cd594b377cbe13e1c5f5a08a8a280e62d4019ac54063ed6a1d0e3c3eaedad0b73c40b99a16a176993f0373ffe92be672@[::]:30304" 然后在节点一的js console中执行admin.addPeer(),就可以连接到节点二: > admin.addPeer("enode://9e86289ea859ca041f235aed87a091d0cd594b377cbe13e1c5f5a08a8a280e62d4019ac54063ed6a1d0e3c3eaedad0b73c40b99a16a176993f0373ffe92be672@127.0.0.1:30304") addPeer()的参数就是节点二的enode信息,注意要把[::] in enode is replaced with the IP address of node 2.

连接成功后,节点2开始同步节点1的区块,同步完成后,任一节点开始挖矿,另一节点自动同步区块,向任一节点发送交易,另一节点也会收到交易。 通过admin.peers可以查看连接的其他节点信息,通过net.peerCount可以查看连接的节点数。 除了上述方法外,还可以在启动节点时指定--bootnodes选项连接其他节点。