以太坊开发环境搭建
Git安装
- 添加源
- sudo apt-get update
- sudo apt-get install git
安装geth
1.通过源码安装
- Git下载源码
- 进入源码目录
- Make geth或者make all
2.以太坊搭建私链
- 新建一个私链目录
- 在目录中新建genesis.json,里面存储创世配置
{ "config": { "chainId": 0, "homesteadBlock": 0, "eip155Block": 0, "eip158Block": 0 }, "alloc" : {}, "coinbase" : "0x0000000000000000000000000000000000000000", "difficulty" : "0x20000", "extraData" : "", "gasLimit" : "0x2fefd8", "nonce" : "0x0000000000000042", "mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000", "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp" : "0x00" }
- 通过genesis.json生成创世块:geth --datadir data init genesis.json
- 启动节点:geth –datadir data console
- 节点启动之后,会在data目录下生成geth和keystore目录
- Geth:存储区块链数据等
- Keystore:存储私钥文件
创世区块配置文件参数详解
- ChainId: 独立的区块链网络ID,在连接到其它节点时可以用到,公网的ID是固定的1。不同ID的网络节点无法相互连接。
- HomesteadBlock : 版本号,固定值为0,表示当前正在使用homestead版本
- Alloc:预置账号以及账号的以太币数量,私链用不上
- Coinbase: 矿工账号,可以随便填,因为以太中会默认把账号列表中的第一个账号当成挖矿账号
- Difficulty: 当前区块的挖矿难度,可以动态的进行调节
- extraData:附加信息,随便填
- gasLimit:gas上限
- nonce:随机数,用于挖矿
- mixHash:与nonce结合用于配合挖矿
- parentHash:前区块哈希
- timeStamp:创世区块时间戳
geth启动参数详解
- --datadir :区块链数据库存放位置
- --rpc :启动RPC通信,可以进行智能合约部署和调试
- --rpcaddr=0.0.0.0 :指定HTTP-RPC监听地址,默认localhost
- --rpcport 8545 : 指定HTTP-RPC监听端口,默认8545
- --rpccorsdomain "*"
- --rpcapi :允许连接的RPC客户端
- eth:区块链相关的操作
- net:网络相关的
- personal:
- admin:管理节点
- ssh:开启服务
- txpool:交易池
- debug:调试
- miner:启动挖矿停止挖矿方法
- web3:可以包含所有的方法,web3放到最后面可以包含前面的所有功能,
- --nodiscover :关闭自动连接
- --maxpeers 30 :允许的最大连接数,默认25个
- --networkid 1981 :设置当前区块链中网络ID,为了区分不同的网络
- --port 30303:启动私链之后的端口
- --mine :开户挖矿,默认CPU挖矿
- --minerthreads 1 :挖矿的CPU线程数,默认是4
- --etherbase :矿工账号
- Console : 启动命令行,可以在geth中执行命令。
3.基本操作
- 查看账户:eth.accounts
- 新建账户:
- 方法一:personal.newAccount(“123456”)
- 方法二:personal.newAccount(),在enter之后再输入密码
- 查看余额eth.getBalance(account)
- 挖矿miner
- 设置挖矿地址:miner.setEtherbase(account)
- 查看挖矿地址:eth.coinbase
- 挖矿:miner.start()
- 停止:miner.stop()
- 针对区块的操作eth
- 查看当前区块总数:eth.blockNumber()
- 查看最新区块的信息:eth.getBlock(‘latest’)
- 查看指定区块的信息:eth.getBlock(‘number’)
- 远程节点管理admin
- 查看节点信息:admin.nodeInfo
- 获取节点名称:admin.nodeInfo.enode
- 添加其它节点:admin.addPeer(node_name)
- 查看已连接的远程节点:amin.peers