区块链相关词条解释

创世区块参数如下

{
  "config": {
        "chainId": 10,
        "homesteadBlock": 0,
        "eip155Block": 0,
        "eip158Block": 0
    },
  "coinbase"   : "0x0000000000000000000000000000000000000000",
  "difficulty" : "0x20000",
  "extraData"  : "",
  "gasLimit"   : "0x2fefd8",
  "nonce"      : "0x0000000000000042",
  "mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000",
  "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
  "timestamp"  : "0x00",
  "alloc"      : {}
}

{
  "alloc": {
    "0000000000000000000000000000000000000001": { "balance": "1" }
  },
  "nonce": "0x0000000000000042",
  "difficulty": "0x000002",
  "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "coinbase": "0x0000000000000000000000000000000000000000",
  "timestamp": "0x00",
  "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa",
  "gasLimit": "0x4c4b40"
}


参数名称 参数描述
mixhash 与nonce配合用于挖矿,由上一个区块的一部分生成的hash。注意他和nonce的设置需要满足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章节所描述的条件。
nonce nonce就是一个64位随机数,用于挖矿,注意他和mixhash的设置需要满足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章节所描述的条件。
difficulty 设置当前区块的难度,如果难度过大,cpu挖矿就很难,这里设置较小难度
alloc 用来预置账号以及账号的以太币数量,因为私有链挖矿比较容易,所以我们不需要预置有币的账号,需要的时候自己创建即可以。
coinbase 矿工的账号,随便填
timestamp 设置创世块的时间戳
parentHash 上一个区块的hash值,因为是创世块,所以这个值是0
extraData 附加信息,随便填,可以填你的个性信息
gasLimit 该值设置对GAS的消耗总量限制,用来限制区块能包含的交易信息总和,因为我们是私有链,所以填最大。
难度值:

十六进制 (难度值) 十进制 区块生成速度
0x99999 629145 1秒1个
5ffffa 6291450 1分钟5个
2ffffd 3145725 1分钟5个到10个
bffff4 12582900 6分钟8个
3bfffc4 62914500 一百倍 六分钟两个
12bffed4 314572500 五百倍 
77fff88 125829000 两百倍 十分钟两个
挖矿的速度可以通过算法自动调整, 让速度保持与我们设置的难度值保持相当,但是后面区块的难度值都是跟初始块设置的难度值相关,所以只是由初始块的难度值决定整个链的速度. 
这个是黄皮书关于难度值设定的算法 

这里写图片描述

geth参数

--lightserv     value
设置轻节点模式的请求时间最大占比,由于轻节点不会同步区块内部信息,当查询区块信息时(交易信息,特定区块高度信息等)会向全节点其他节点请求数据,设置最大请求时间占比。范围为:0-90,默认为0

--lightpeers     value
设置轻节点模式下,允许连接的最大节点数,默认为20

--lightkdf    降低轻节CPU和RAM占有率

性能调节选项:
–cache value        调整内存分配 最小16MB,默认128MB
–trie-cache-gens value 内存中存储节点数,默认为120

与账户相关选项:
--unlock     value 指定要解锁的账户地址,不指定密码文件则为交互模式

--password /your/password/file/path      通过密码文件解锁相应账户,非交互模式

API和命令行相关选项:
默认情况下,geth节点不会启动http和weboscket服务,并且由于安全原因,并不是所有功能都通过这些接口提供

--rpc     开启 HTTP-RPC 服务

--rpcaddr value    指定HTTP-RPC 服务监听地址,默认为“localhost”

--rpcport value      指定HTTP-RPC 服务监听端口,默认为8545

--rpcapi value      指定HTTP-RPC 开启API,默认为 “eth,net,web3”

--ws      开启 WS-RPC 服务

--wsaddr value      指定WS-RPC 服务监听地址,默认为 “localhost”

--wsport value      指定 WS-RPC 服务监听端口,默认值:8546

--wsapi value     指定WS-RPC 开启API,默认为 “eth,net,web3”

--wsorigins value    指定允许“websockets”请求的地址

--ipcdisable      关闭 IPC-RPC 服务

--ipcapi value      指定WS-RPC 开启API,默认为”admin,debug,eth,miner,net,personal,shh,txpool,web3″

--ipcpath "geth.ipc"    指定IPC接口

--rpccorsdomain value     指定可以访问APi的domain地址,设置为“*”则任何地址都可以访问,这样做不安全。

--jspath /loadScript/path    指定loadScript路径,默认为”.”

--exec value     JavaScript解释器,解释Js 语句,只能与console/attach同时使用
e.g:
geth --jspath "/tmp" --exec 'loadScript("checkbalances.js")' attach

--preload value      自定义JavaScript文件加载到控制台中,这可以用于加载常用的功能,如设置web3等。
e.g:
geth --preload "/my/scripts/folder/utils.js,/my/scripts/folder/contracts.js"console

网络相关选项:
--bootnodes value       手动添加连接节点,对私有链不起作用。

e.g:
geth --bootnodes enode://pubkey1@ip1:port1,enode://pubkey2@ip2:port2,enode://pubkey3@ip3:port3

--port value        指定以太坊网络监听端口,默认为: 30303。

--maxpeers value        设置允许最大连接节点数目,默认为25

--maxpendpeers value       设置最大待定连接节点数目,默认为0

--nat value
提供对通用网络端口映射协议的访问
(any|none|upnp|pmp|extip:),默认: “any”

--nodiscover        关闭自动连接节点,但是可以手动添加节点,在搭建私有链时,为避免其他节点连入私有链,可使用该命令。

--v5disc       启动实验性RLPx V5 机制(没研究过)

--nodekey value       引入P2P节点密钥文件

--nodekeyhex value        十六进制的P2P节点密钥,为用于测试




共识机制:

首先,没有一种共识机制是完美无缺的,各共识机制都有其优缺点,有些共识机制是为解决一些特定的问题而生。
1.pow( Proof of Work)工作量证明  攻击成本最高    tps: 5/s
一句话介绍:干的越多,收的越多。
依赖机器进行数学运算来获取记账权,资源消耗相比其他共识机制高、可监管性弱,同时每次达成共识需要全网共同参与运算,性能效率比较低,容错性方面允许全网50%节点出错。
优点:
1)算法简单,容易实现;
2)节点间无需交换额外的信息即可达成共识;
3)破坏系统需要投入极大的成本;
缺点:
1)浪费能源;
2)区块的确认时间难以缩短;
3)新的区块链必须找到一种不同的散列算法,否则就会面临比特币的算力攻击;
4)容易产生分叉,需要等待多个确认;
5)永远没有最终性,需要检查点机制来弥补最终性;
2.POS Proof of Stake,权益证明 记账  攻击成本低 而且可能越趋于中心化   tps: 25/s
一句话介绍:持有越多,获得越多。
主要思想是节点记账权的获得难度与节点持有的权益成反比,相对于PoW,一定程度减少了数学运算带来的资源消耗,性能也得到了相应的提升,但依然是基于哈希运算竞争获取记账权的方式,可监管性弱。该共识机制容错性和PoW相同。它是Pow的一种升级共识机制,根据每个节点所占代币的比例和时间,等比例的降低挖矿难度,从而加快找随机数的速度
优点:在一定程度上缩短了共识达成的时间;不再需要大量消耗能源挖矿。
缺点:还是需要挖矿,本质上没有解决商业应用的痛点;所有的确认都只是一个概率上的表达,而不是一个确定性的事情,理论上有可能存在其他攻击影响。例如,以太坊的DAO攻击事件造成以太坊硬分叉,而ETC由此事件出现,事实上证明了此次硬分叉的失败。
DPOS与POS原理相同,只是选了一些“人大代表”。 (选举)   tps: 万次/s   适合企业级
BitShares社区首先提出了DPoS机制。
与PoS的主要区别在于节点选举若干代理人,由代理人验证和记账。其合规监管、性能、资源消耗和容错性与PoS相似。类似于董事会投票,持币者投出一定数量的节点,代理他们进行验证和记账。
DPoS的工作原理为:

去中心化表示每个股东按其持股比例拥有影响力,51%股东投票的结果将是不可逆且有约束力的。其挑战是通过及时而高效的方法达到51%批准。为达到这个目标,每个股东可以将其投票权授予一名代表。获票数最多的前100位代表按既定时间表轮流产生区块。每名代表分配到一个时间段来生产区块。所有的代表将收到等同于一个平均水平的区块所含交易费的10%作为报酬。如果一个平均水平的区块含有100股作为交易费,一名代表将获得1股作为报酬。
网络延迟有可能使某些代表没能及时广播他们的区块,而这将导致区块链分叉。然而,这不太可能发生,因为制造区块的代表可以与制造前后区块的代表建立直接连接。建立这种与你之后的代表(也许也包括其后的那名代表)的直接连接是为了确保你能得到报酬。
该模式可以每30秒产生一个新区块,并且在正常的网络条件下区块链分叉的可能性极其小,即使发生也可以在几分钟内得到解决。
成为代表:
成为一名代表,你必须在网络上注册你的公钥,然后分配到一个32位的特有标识符。然后该标识符会被每笔交易数据的“头部”引用。
授权选票:
每个钱包有一个参数设置窗口,在该窗口里用户可以选择一个或更多的代表,并将其分级。一经设定,用户所做的每笔交易将把选票从“输入代表”转移至“输出代表”。一般情况下,用户不会创建特别以投票为目的的交易,因为那将耗费他们一笔交易费。但在紧急情况下,某些用户可能觉得通过支付费用这一更积极的方式来改变他们的投票是值得的。
保持代表诚实:
每个钱包将显示一个状态指示器,让用户知道他们的代表表现如何。如果他们错过了太多的区块,那么系统将会推荐用户去换一个新的代表。如果任何代表被发现签发了一个无效的区块,那么所有标准钱包将在每个钱包进行更多交易前要求选出一个新代表。
抵抗攻击:
在抵抗攻击上,因为前100名代表所获得的权力权是相同的,每名代表都有一份相等的投票权。因此,无法通过获得超过1%的选票而将权力集中到一个单一代表上。因为只有100名代表,可以想象一个攻击者对每名轮到生产区块的代表依次进行拒绝服务攻击。幸运的是,由于事实上每名代表的标识是其公钥而非IP地址,这种特定攻击的威胁很容易被减轻。这将使确定DDOS攻击目标更为困难。而代表之间的潜在直接连接,将使妨碍他们生产区块变得更为困难。

优点:大幅缩小参与验证和记账节点的数量,可以达到秒级的共识验证。
缺点:整个共识机制还是依赖于代币,很多商业应用是不需要代币存在的。
3.PBFT :Practical Byzantine Fault Tolerance,实用拜占庭容错
介绍:在保证活性和安全性(liveness & safety)的前提下提供了(n-1)/3的容错性。
在分布式计算上,不同的计算机透过讯息交换,尝试达成共识;但有时候,系统上协调计算机(Coordinator / Commander)或成员计算机 (Member /Lieutanent)可能因系统错误并交换错的讯息,导致影响最终的系统一致性。
拜占庭将军问题就根据错误计算机的数量,寻找可能的解决办法,这无法找到一个绝对的答案,但只可以用来验证一个机制的有效程度。
而拜占庭问题的可能解决方法为:
在 N ≥ 3F + 1 的情况下一致性是可能解决。其中,N为计算机总数,F为有问题计算机总数。信息在计算机间互相交换后,各计算机列出所有得到的信息,以大多数的结果作为解决办法。
1)系统运转可以脱离币的存在,pbft算法共识各节点由业务的参与方或者监管方组成,安全性与稳定性由业务相关方保证。

2)共识的时延大约在2~5秒钟,基本达到商用实时处理的要求。

3)共识效率高,可满足高频交易量的需求。
缺点:
1)当有1/3或以上记账人停止工作后,系统将无法提供服务;
  2)当有1/3或以上记账人联合作恶,且其它所有的记账人被恰好分割为两个网络孤岛时,恶意记账人可以使系统出现分叉,但是会留下密码学证据;

下面说两个国产的吧~
4.dBFT: delegated BFT 授权拜占庭容错算法

介绍:小蚁采用的dBFT机制,是由权益来选出记账人,然后记账人之间通过拜占庭容错算法来达成共识。

此算法在PBFT基础上进行了以下改进:
将C/S架构的请求响应模式,改进为适合P2P网络的对等节点模式;
将静态的共识参与节点改进为可动态进入、退出的动态共识参与节点;
为共识参与节点的产生设计了一套基于持有权益比例的投票机制,通过投票决定共识参与节点(记账节点);
在区块链中引入数字证书,解决了投票中对记账节点真实身份的认证问题。
优点:
  1)专业化的记账人;
  2)可以容忍任何类型的错误;
  3)记账由多人协同完成,每一个区块都有最终性,不会分叉;
  4)算法的可靠性有严格的数学证明;
缺点:
  1)当有1/3或以上记账人停止工作后,系统将无法提供服务;
  2)当有1/3或以上记账人联合作恶,且其它所有的记账人被恰好分割为两个网络孤岛时,恶意记账人可以使系统出现分叉,但是会留下密码学证据;
  以上总结来说,dBFT机制最核心的一点,就是最大限度地确保系统的最终性,使区块链能够适用于真正的金融应用场景。

5.POOL验证池
基于传统的分布式一致性技术,加上数据验证机制。
优点:不需要代币也可以工作,在成熟的分布式一致性算法(Pasox、Raft)基础上,实现秒级共识验证。
缺点:去中心化程度不如bictoin;更适合多方参与的多中心商业模式。

区块链的运行一定要依赖挖矿(POW)机制吗?

  

作者:江川
链接:https://www.zhihu.com/question/266459002/answer/309925648
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

1。 "区块链" 不一定依赖于挖矿,但是我认为 "公链" 必须挖矿,最好选择POW挖矿,POW 挖矿的工作量构建了代币算力壁垒及本底价值,这也是 BTC 的主要价值之一。

2. 共识算法除了POW,常见的还有POS、DPOS、PBFT,google一下都有非常详细的说明,这里就不再进行底层技术探讨。我们从更加抽象的层面理解区块链的共识机制。

众所周知,区块链最大的价值在于“去中心化”,一段时间内所有数据(交易)被打包成区块,同步到所有节点,少量节点(对采用POW的BTC,不高于50%算力)无法构造不诚实的数据,影响整个网络的可信数据。这就有两个问题需要解决:

A. 如何保证足够多的节点(矿工)持续在线,验证交易?

B. 这些节点(矿工)中,谁负责打包,供其他节点同步?

挖矿,最直接的是为了解决 B 问题:记账权的委派问题。

所谓“挖”,对于 POW,将消耗CPU、显卡、内存及电力,解决特定的数学问题;对于 POS 和 DPOS 则需要保持节点在线,并持有一定量的代币,根据一定规则确定记账权。“挖”需要消耗一定的资源。

所谓“矿”,通常指,为了鼓励矿工工作,获得记账权的矿工获得的奖励和手续费。

显然,挖出来的 “矿” 会吸引更多的节点加入网络,更多的节点,意味着更健壮安全的网络,这就同时解决了 A 问题。

矿工奖励机制,是中本聪最伟大的创新,区块链中的密码学、P2P 技术等,其实已发展多年,趋于成熟。正是这样的经济激励,使得区块链生机勃勃。

3. 共识算法,本质上是权力治理,是一个经济问题,或者政治问题,没有最优,只有合适与否。

一句话介绍主流共识算法:

POW: 自由竞争治理,谁算力高听谁的,然而自由的结局只有寡头或者巨头,现在权力正向矿池集中。

POS:谁有钱(代币)听谁的。

DPOS:议员制,票选代表代理治理权。

PBFT:节点自治,自行采用最可信的结果。


4. PBFT 共识不需要代币激励,更适合在联盟链使用,如果直接应用到公链恐怕没什么矿工。





发布了211 篇原创文章 · 获赞 29 · 访问量 36万+

猜你喜欢

转载自blog.csdn.net/wuhualong1314/article/details/79275577