网络
首先有两个网站可以查看以太坊的相关信息:
Etherchain - The Ethereum Blockchain Explorer
说到网络先啰嗦下,公有链、联盟链、私有链。
目前根据准入机制,一般区块链分为公有链、联盟链、私有链三种。类似于云平台,也存在这三种概念。
那么根据中国区块链技术和应用发展白皮书的解释:
公有链:所有互联网上的节点可以自由的加入和退出网络,且参加链上的数据的读写,运行过程中以扁平的拓扑结构互联互通,网络中不存在任何中心化的服务端节点。
联盟链:各个节点之间有对应的实体机构组织,通过授权来加入和退出网络,机构间组成组织联盟,共同维护区块链的正常运转。
私有链:企业专门搭建的专用链,各个节点的写入权限内部控制,读取权限根据需求选择性放开,私有链多节点运行的通用结构,适用于特定机构的内部数据管理和审计。
那么三种类型的区块链,核心问题在于访问的开放程度,也可以理解为去中心化、弱中心化、多中心化的程度。公有链,以比特币、以太坊为代表,联盟链以超级账本为代表,R3 CORDA为私有链的代表。
这里不讨论相关三种类型的具体应用场景,这里简单说下以太坊的网络相关的一些内容:
首先运行以太坊客户端(一般为Geth),那么就会自动去网络中下载区块链数据。很多人会碰到下载慢。那么这里查看基本网络状态:
链路状态:
net.listening true
net.peerCount 4
下载过程中网络中节点,一般称为伙伴节点的状态也会有一定的影响。
节点状态查看:
admin.peers
最后查看下自己的网络情况。
网络状态
admin.nodeInfo
检查完这些,以太坊客户端还可以加选项进行快速同步:
geth --fast
客户端不保留过去的交易数据,如果客户端没有下载过任何内容那么可以使用这个命令快速下载,如果有过数据,那只能等待。
还有一个针对内存调节的参数:
cache=1024,这个参数默认单位是M,默认值为16M,调节这个参数根据机器配置,适当能提速。
以太坊私有链搭建
一般会选择搭建以太坊私有链,那么首先初始化创世区块:
首先需要为私有链定义一个创世状态,使用 JSON 文件定义,例如取名为:genesis.json,内容如下:
{
"config": {
"chainId": 88,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"alloc" : {},
"coinbase" : "0x0000000000000000000000000000000000000000",
"difficulty" : "0x20000",
"extraData" : "",
"gasLimit" : "0x2fefd8",
"nonce" : "0x0000000000000042",
"mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp" : "0x00"
}
Mixhash:一个256位的哈希值,和nonce配合,一起用来证明在区块链上已经做了足够的计算量。这个nonce 和 mixhash 的组成.
Nonce:一个64位的哈希值,和mixhash配合,一起用来证明在区块链上已经做了足够的计算量
Difficulty:定义挖矿的目标,可以用上一个区块的难度值和时间戳计算出来,值越高,矿工越难挖到区块。
Alloc:预先填入一些钱包和余额。
Coinbase:160位的钱包地址。在创世区块中可以被定义成任何的地址.区块奖励直接为矿工地址。
Timestamp :一个unix的time()函数的输出值,时间戳
extraData :32字节长度,可以为私有链留下一些信息.
gasLimit :区块所能消耗的gas上限
保存到任意位置即可。初始区块是区块链的起始 — 第一个区块,区块0,唯一没有指向前面区块的一个区块。协议确保其他连接你的节点必须和你的创世块一致,除非他们和你有相同的初始区块,这样你想创建多少私有测试网区块链,就可以创建多少。
执行初始化:
geth init $HOME/genesis.json
执行后,将提示成功初始化创世区。
WARN [03-10|17:50:20] No etherbase set and no accounts found as default
INFO [03-10|17:50:20] Allocated cache and file handles database=/Users/.../Library/Ethereum/geth/chaindata cache=16 handles=16
INFO [03-10|17:50:20] Writing custom genesis block
INFO [03-10|17:50:20] Successfully wrote genesis state database=chaindata hash=5e1fc7…d790e0
INFO [03-10|17:50:20] Allocated cache and file handles database=/Users/.../Library/Ethereum/geth/lightchaindata cache=16 handles=16
INFO [03-10|17:50:20] Writing custom genesis block
INFO [03-10|17:50:20] Successfully wrote genesis state database=lightchaindata hash=5e1fc7…d790e0
相关命令:
nodiscover--简单来说不让别人发现你。
maxpeers 参数--控制被人链接你的测试链。
rpc--激活RPC
rpcport 端口--指定端口号,默认为8080
rpccorsdomain 地址--指定url连接。
port 端口号--制定监听端口。
datadir 目录--数据目录,一般用于和公链目录分开。
identity 名字--为节点设置一个ID号。
网友评论