coding-rights-blog
coding-rights-blog
队长,快跑!
3 posts
Don't wanna be here? Send us removal request.
coding-rights-blog · 7 years ago
Text
以太坊私链搭配Mist使用
Mist介绍 :
Mist 是以太坊官方提供的浏览器,通过Mist我们可以很方便的连接上我们的私有网络,从而更好的开发、调试、测试我们的智能合约。Mist下载
Tumblr media
Mist使用
安装完成后 , 先启动我们的私有链网络 , 然后打开Mist
点击LAUNCH APPLICATION 进入Mist
Tumblr media
由于这是我们刚刚搭建的私有链 , 可以看到这上面没有任何账户数据
Tumblr media
使用personal.newAccount("test1")新建一个账户 , test1 为这个账户的密码 ( 或者点击Mist上的新增账户 )
Tumblr media
使用eth.getBalance(eth.accounts[0]) 获取当前账户的余额(单位为Wei)
Tumblr media
由于是新建的账号 , 所以账户余额为0 , 下面使用miner.start()开启挖矿 , 为accounts[0]账户获取一些以太坊
Tumblr media
看到由于挖矿奖励 , account[0]账户里已经有了以太坊。接下来我们新建一个账户 , 并从account[0]中发送100个以太坊到新账户中 , 可以使用Mist和命令行2种方式。
Tumblr media
由于我们还没有开始挖矿 , 所以交易还没有成功 。 使用miner.start()开启挖矿 。看到account[1]已经有了100个以太坊 , 交易成功 本篇只介绍了Mist的安装和一些基本使用来配合我们测试开发。
0 notes
coding-rights-blog · 7 years ago
Text
以太坊私链搭配Mist使用
Mist介绍 :
Mist 是以太坊官方提供的浏览器,通过Mist我们可以很方便的连接上我们的私有网络,从而更好的开发、调试、测试我们的智能合约。Mist下载
Tumblr media
Mist使用
安装完成后 , 先启动我们的私有链网络 , 然后打开Mist
点击LAUNCH APPLICATION 进入Mist
Tumblr media
由于这是我们刚刚搭建的私有链 , 可以看到这上面没有任何账户数据
Tumblr media
使用personal.newAccount("test1")新建一个账户 , test1 为这个账户的密码 ( 或者点击Mist上的新增账户 )
Tumblr media
使用eth.getBalance(eth.accounts[0]) 获取当前账户的余额(单位为Wei)
Tumblr media
由于是新建的账号 , 所以账户余额为0 , 下面使用miner.start()开启挖矿 , 为accounts[0]账户获取一些以太坊
Tumblr media
看到由于挖矿奖励 , account[0]账户里已经有了以太坊。接下来我们新建一个账户 , 并从account[0]中发送100个以太坊到新账户中 , 可以使用Mist和命令行2种方式。
Tumblr media
由于我们还没有开始挖矿 , 所以交易还没有成功 。
使用miner.start()开启挖矿 。看到account[1]已经有了100个以太坊 , 交易成功
本篇只介绍了Mist的安装和一些基本使用来配合我们测试开发。
0 notes
coding-rights-blog · 7 years ago
Text
以太坊私链搭建(windows)
为什么搭建私有链
方便获取以太币用于开发和测试
不用同步公有链庞大的数据
配置环境
方式一. 直��下载可执行文件
官方下载地址(需翻墙)
国内镜像
注意:geth是一个命令行工具,需要在命令行中运行geth,不要直接双击geth.exe。(如果不加任何参数直接运行 geth ,会自动连接到以太坊公网,此时会开始同步区块。)
方式二. 从源码编译安装 go-ethereum源码编译
安装完成后,可以使用 geth version 命令查看是否安装成功。记得把生成的 geth 加入到系统的环境变量中。
私有链搭建
1.需要自定义第一个区块(一个JSON文件)
例如 genesis.json
{ "config": { "chainId": 1234, "homesteadBlock": 0, "eip155Block": 0, "eip158Block": 0 }, "coinbase" : "0x0000000000000000000000000000000000000000", "difficulty" : "0x40000", "extraData" : "", "gasLimit" : "0xffffffff", "nonce" : "0x0000000000000042", "mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000", "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp" : "0x00", "alloc": { } }
各个参数的作用: config:区块链的相关参数
chainId:区块链的ID,在 geth 命令中的 —networkid 参数需要与 chainId 的值一致(以太坊公网的网络 ID 是 1)
homesteadBlock : Homestead 硬分叉区块��度,不需要关注
eip155Block : EIP 155 硬分叉高度,不需要关注
eip158Block : EIP 158 硬分叉高度,不需要关注
mixhash : 与nonce配合用于挖矿,由上一个区块的一部分生成的hash
nonce : nonce就是一个64位随机数,用于挖矿
difficulty : 设置当前区块的难度,如果难度过大,cpu挖矿就很难,这里设置较小难度
alloc : 用来预置账号以及账号的以太币数量,因为私有链挖矿比较容易,所以我们不需要预置有币的账号,需要的时候自己创建即可以
coinbase : 矿工的账号,随便填
timestamp : 设置创世块的时间戳
parentHash : 上一个区块的hash值,因为是创世块,所以这个值是0
extraData : 附加* 信息,随便填,可以填你的个性信息
gasLimit : 值设置对GAS的消耗总量限制,用来限制区块能包含的交易信息总和
2.初始化创世区块
[x] 新建一个目录 private-net -> data用来存放区块链数据 , 将genesis.json放入private-net目录下
private-net ├── data └── genesis.json
[x] 进入private-net目录下 , 使用geth的init命令
geth --datadir data init genesis.json
init genesis.json 表示读取 genesis.json 文件,根据其中的内容,将创世区块写入到区块链中。
—datadir data 表示指定数据存放目录为 data
如果看到以下的输出内容,说明初始化成功了
INFO [04-30|19:22:17] Maximum peer count ETH=25 LES=0 total=25 INFO [04-30|19:22:17] Allocated cache and file handles database=G:\\private-net\\data\\geth\\chaindata cache=16 handles=16 INFO [04-30|19:22:18] Writing custom genesis block INFO [04-30|19:22:18] Persisted trie from memory database nodes=0 size=0.00B time=0s gcnodes=0 gcsize=0.00B gctime=0s livenodes=1 livesize=0.00B INFO [04-30|19:22:18] Successfully wrote genesis state database=chaindata hash=a0e580…a5e82e INFO [04-30|19:22:18] Allocated cache and file handles database=G:\\private-net\\data\\geth\\lightchaindata cache=16 handles=16 INFO [04-30|19:22:18] Writing custom genesis block INFO [04-30|19:22:18] Persisted trie from memory database nodes=0 size=0.00B time=0s gcnodes=0 gcsize=0.00B gctime=0s livenodes=1 livesize=0.00B INFO [04-30|19:22:18] Successfully wrote genesis state database=lightchaindata hash=a0e580…a5e82e
成功后的目录结构
private-net ├── data │ ├── geth │ │ ├── chaindata │ │ │ ├── 000001.log │ │ │ ├── CURRENT │ │ │ ├── LOCK │ │ │ ├── LOG │ │ │ └── MANIFEST-000000 │ │ └── lightchaindata │ │ ├── 000001.log │ │ ├── CURRENT │ │ ├── LOCK │ │ ├── LOG │ │ └── MANIFEST-000000 │ └── keystore └── genesis.json
其中 geth/chaindata 存放区块数据 , keystore存放用户数据 , 至此私有链已经搭建完成
启动私有链
使用 geth console,表示启动节点并进入交互式控制台
geth --identity "myprivatenode" --rpc --rpccorsdomain "*" --rpcport "19901" --rpcapi "db,eth,net,web3,personal" --networkid 1234 --gcmode=archive --datadir "G:\private-net\data" --nodiscover console
各个参数的作用:
identity : 区块链的标示,随便填写,用于标示目前网络的名字
rpc : 启动rpc通信,可以进行智能合约的部署和调试
rpccorsdomain : 允许连接到rpc的url匹配模式 *代表任意
rpcport : 指定rpc通信监听端口号(默认为 8545)
rpcapi : 表示允许rpc使用哪些API
networkid : 设置当前区块链的网络ID,用于区分不同的网络 , 最好和chainId一致,否则无法使用MetaMask
gcmode=archive : 不加此选项 , 关闭节点后,区块不会保存
datadir : 指定区块链数据的存储位置
nodiscover : 关闭节点发现机制,防止加入有同样初始配置的陌生节点
运行完上述命令就进入了交互式的 JavaScript 节点控制台
INFO [04-30|19:38:30] Starting P2P networking INFO [04-30|19:38:33] UDP listener up self=enode://7431aa2f875332ed49fe53c7e2b693309e95b7284ad3caf15791e48dfdeca93dda998a859ef9d368a7489b6c06f9edb5054536fe98d1c1afa1bd2a51d0d40be2@[::]:30303 INFO [04-30|19:38:33] RLPx listener up self=enode://7431aa2f875332ed49fe53c7e2b693309e95b7284ad3caf15791e48dfdeca93dda998a859ef9d368a7489b6c06f9edb5054536fe98d1c1afa1bd2a51d0d40be2@[::]:30303 INFO [04-30|19:38:33] IPC endpoint opened url=\\\\.\\pipe\\geth.ipc INFO [04-30|19:38:33] HTTP endpoint opened url=http://127.0.0.1:19901 cors=* vhosts=localhost Welcome to the Geth JavaScript console! instance: Geth/myprivatenode/v1.8.2-stable-b8b9f7f4/windows-amd64/go1.9.2 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 >
此时以太坊私有网络搭建成功 可以新打开一个命令行 , 输入 geth attach ipc:\\.\pipe\geth.ipc 连接到私有网络来操作 , 方便观察日志
控制台操作
使用内置的JavaScript对象来操作以太坊 , 常用对象:
eth:包含一些跟操作区块链相关的方法;
net:包含一些查看p2p网络状态的方法;
admin:包含一些与管理节点相关的方法;
miner:包含启动&停止挖矿的一些方法;
personal:主要包含一些管理账户的方法;
txpool:包含一些查看交易内存池的方法;
web3:包含了以上对象,还包含一些单位换算的方法。
常用指令:
eth.accounts : 查询账户
eth.getBalance(eth.accounts[]):查看账户余额,返回值的单位是 Wei(Wei是以太坊中最小货币面额单位,类似比特币中的聪,1 ether = 10^18 Wei);
eth.blockNumber:列出区块总数;
eth.coinbase : 查看挖矿账户
net.listening :检查是否连接
net.peerCount : 查看节点链接的数量
admin.peers :返回连接到的节点的详细信息
admin.nodeInfo :返回本地节点的详细信息
miner.start() : 开始挖矿
miner.stop() : 结束挖矿
miner.setEtherbase(eth.accounts[]) : 设置挖矿账户
personal.newAccount("password") : 创建账户
personal.unlockAccount(eth.accounts[]) : 解锁账户
txpool.status :交易池中的状态;
发送交易:
eth.sendTransaction({from:””,to:””,value:web3.toWei(1,”ether”)})。需要先使用 personal.unlockAccount() 解锁账户 , 并使用 miner.start() 开启挖矿才能把交易发送出去
0 notes