51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 1597|回复: 0
打印 上一主题 下一主题

区块链开发:以太坊网络

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2018-4-19 14:10:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一、geth
Geth 又名Go Ethereum. 是以太坊协议的三种实现之一,由Go语言开发,完全开源的项目。Geth 可以被安装
在很多操作系统上,包括Windows、Linux、Mac的OSX、Android或者IOS系统

Geth官网:https://geth.ethereum.org/
Geth的Github地址:https://github.com/ethereum/go-ethereum

Ubuntu安装geth客户端:
官方教程:https://github.com/ethereum/go-e ... ructions-for-Ubuntu

安装方法一:

sudo apt-get install software-properties-common
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install ethereum
系统联网执行后,即完成了安装以太坊客户端,其中包括geth,bootnode, evm, disasm, rlpdump,ethtest

此时如果输入Geth命令,会出现启动以太坊启动的画面

安装方法二:

  1. git clone https://github.com/ethereum/go-ethereum
  2. sudo apt-get install -y build-essential golang
  3. cd go-ethereum
  4. make geth

  5. greg@greg:~$ geth version
  6. Geth
  7. Version: 1.7.3-stable
  8. Git Commit: 4bb3c89d44e372e6a9ab85a8be0c9345265c763a
  9. Architecture: amd64
  10. Protocol Versions: [63 62]
  11. Network Id: 1
  12. Go Version: go1.9
  13. Operating System: linux
  14. GOPATH=/home/greg/go
  15. GOROOT=/home/greg/local/go
复制代码

二、以太坊查看网络状态
attach:Start an interactive JavaScript environment (connect to node) 启动交互式JavaScript环境(连接到node)

  1. 打开geth --testnet
  2. greg@greg:~/.ethereum$ geth attach ipc://${HOME}/.ethereum/testnet/geth.ipc
  3. Welcome to the Geth JavaScript console!

  4. instance: Geth/v1.7.3-stable-4bb3c89d/linux-amd64/go1.9
  5. 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
复制代码


查看链接状态
net.listening
net.peerCount
查看自己的伙伴的网络信息
admin.peers
查看自己的网络信息
admin.nodeInfo

打开.bashrc写入
alias gat='geth attach ipc://${HOME}/.ethereum/testnet/geth.ipc'
三、以太坊构建本地私有网络
1.编辑创世区块

  1. greg@greg:~$ mkdir ethprivate
  2. greg@greg:~$ cd ethprivate/
  3. greg@greg:~/ethprivate$ vim genesis.json
  4. greg@greg:~/ethprivate$ vim genesis.json
  5. greg@greg:~/ethprivate$ cat genesis.json
  6. {
  7.     "nonce": "0x0000000000000042",     
  8.     "timestamp": "0x00",
  9.     "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  10.     "extraData": "0x00",     
  11.     "gasLimit": "0x8000000",     
  12.     "difficulty": "0x400",
  13.     "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  14.     "coinbase": "0x3333333333333333333333333333333333333333",     
  15.     "alloc": { }
  16. }
复制代码

genesis(创世)区块是区块链的起点,是它的第一块区块,0号区块,唯一一个没有前任的区块。这个协议
确保了没有其他节点会和你的节点的区块链版本一致,除非它们的创世区块和你的一模一样。通过这种方法,
你就可以创建任意多的私有区块链。

Mixhash
一个256位的哈希值,和nonce配合,一起用来证明在区块链上已经做了足够的计算量(工作证明)。这个
nonce 和 mixhash 的组成,必须满足一个在黄皮书中所描述的数学上的条件,黄皮书 4.3.4。
Nonce
一个64位的哈希值,和mixhash配合,一起用来证明在区块链上已经做了足够的计算量(工作证明)
Difficulty
定义挖矿的目标,可以用上一个区块的难度值和时间戳计算出来,值越高,矿工越难挖到区块
Alloc 预先填入一些钱包和余额
Coinbase
160位的钱包地址。在创世区块中可以被定义成任何的地址,因为当每挖到一个区块的时候,这个值会变成
矿工的etherbase地址
Timestamp  一个unix的time()函数的输出值,时间戳
extraData  32字节长度,可以为私有链留下一些信息,如你的姓名等,用以证明这个私有链是你创建的
gasLimit   当前链,一个区块所能消耗的gas上限

私有链中会使用到的命令行参数
--nodiscover
添加这个参数,确保没有人能发现你的节点。不然的话,可能有人无意中会链接到你的私有区块链。
--maxpeers 0
使用maxpeers 0,如果你不希望其他人连接到您的测试链。当然,您也可以调整这个数,如果你知道有多少同
伴会连接你的节点。
--rpc
在你的节点上激活RPC接口。这参数在geth中默认启用。
--rpcapi "db,eth,net,web3"
这个命令描述哪些接口可以通过RPC来访问,默认情况下,geth开启的是web3接口。
--rpcport "8080"
将端口号设置成8000以上的任何一个你网络中打开的端口。默认是8080。
--rpccorsdomain http://chriseth.github.io/browser-solidity/
设置可以连接到你的节点的url地址,以执行RPC客户端的任务。最好不要使用通配符 * ,这样将允许任何url
都可以链接到你的RPC实例。
--datadir "/home/TestChain1"
私有链的数据目录,确保与公共以太坊链的数据目录区分开来。
--port "30303"
这是“网络监听的端口”,您可以用它手动的和你的同伴相连。
--identity "TestnetMainNode"
为你的节点设置一个ID。用于和你们的一系列同伴进行区分。
2.初始化创世区块

  1. greg@greg:~/ethprivate$ geth --datadir "./" init genesis.json
  2. WARN [02-21|23:48:06] No etherbase set and no accounts found as default
  3. INFO [02-21|23:48:06] Allocated cache and file handles         database=/home/greg/ethprivate/geth/chain
  4. data cache=16 handles=16
  5. Fatal: Failed to write genesis block: genesis has no chain configuration
  6. greg@greg:~/ethprivate$ ls
  7. genesis.json  geth  keystore
复制代码

此时当前目录下面会新增出两个文件夹geth和keystore

geth中保存的是区块链的相关数据

keystore中保存的是该链条中的用户信息

每次当你想要使用你自定义的私有链时,你都需要先使用geth来运行以上的命令来启动它。

3.创建自己的私有链条

创建自己的私有链条,同时记录日志输出到geth.log
  1. greg@greg:~/ethprivate$ geth --datadir "./" --nodiscover console 2>>geth.log
  2. Welcome to the Geth JavaScript console!

  3. instance: Geth/v1.7.3-stable-4bb3c89d/linux-amd64/go1.9
  4. 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
  5. 在自己的私有链条上创建用户
  6. > eth.accounts
  7. []
  8. > personal.newAccount("123456")
  9. "0xe158bf2c29ca283c7bdc99880e36985d9f7d23f8"
  10. > eth.accounts
  11. ["0xe158bf2c29ca283c7bdc99880e36985d9f7d23f8"]
  12. > personal.newAccount("abcdef")
  13. "0x8cd642b5f69a24fd3d05786dfe0eb3f44dc8bb33"
  14. > eth.accounts
  15. ["0xe158bf2c29ca283c7bdc99880e36985d9f7d23f8", "0x8cd642b5f69a24fd3d05786dfe0eb3f44dc8bb33"]
复制代码

输入命令personal.newAccount("123456"), 该命令将创造一个新的用户,该用户的密码是123456

再次输入命令 eth.accounts, 我们会发现一个新的用户被创建了出来,这就代表我们已经创建了一个账户,
重复personal.newAccount() 和eth.accounts 我们可以创建若干个账户出来

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-5-11 11:24 , Processed in 0.064875 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表