区块链基础学习2

零知识证明要解决的问题是:以不透露一个论断(statement)的任何信息为前提,向你证明这个论断是对的。
1、未花费交易输出/UTXO:未花费交易输出是一个包含交易数据和执行代码的数据结构,可以理解为收到的但尚未花费的加密货币清单。比特币和其他加密货币在其区块链技术中使用UTXO,以验证一个人是否拥有未使用的加密货币可用于支出。
2、链:链是由区块按照发生的时间顺序,通过区块的哈希值串联而成,是区块交易记录及状态变化的日志。
3、创世区块/Genesis Block:区块链中的第一个区块被称为创世区块。创世区块一般用于初始化,不带有交易信息。
4、区块高度/Block Height:一个区块的高度是指在区块链中它和创世区块之间的块数。
5、分叉/Fork:在区块链中,由矿工挖出区块并将其接到主链上,一般来说同一时间内只能产生一个区块,如果发生同一时间内有两个区块同时被生成的情况,就会在全网中出现两个长度相同、区块里的交易信息相同但矿工签名不同或者交易排序不同的区块链,这样的情况叫做分叉。
6、零知识证明/Zero-Knowledge Proof:证明者和验证者之间进行交互,证明者能够在不向验证者提供任何有用信息的情况下,使验证者相信某个论断是正确的。
7、账本/Ledger:账本是指包括区块链的数据结构、所有的交易信息和当前状态的数字记录。
8、分布式账本/Distributed ledger Technology/DLT:分布式账本是指一种在网络成员之间共享、复制和同步的数据库,分布式账本在区块链中是一个通过共识机制建立的数字记录,区块链网络中的参与者可以获得一个唯一、真实账本的副本,因此难以对分布式账本进行篡改。更改记录的方式非常困难,技术非常安全。
9、工作量证明/PoW与权益证明/PoS:我们实际上用到的解决方案最常见的就是一个工作量证明(PoW),一个是权益证明(PoS),后者包括代理的权益证明(DPoS)。还有一些其他的证明方式,比如说证明你拥有多少空间,或者证明你燃烧了多少货币,还有别的一些方法,但是目前最主要最常见的还是 PoW 和 PoS 这两种。这里我还要稍微强调一下,无论 PoW 还是 PoS 或者别的什么 PoX,都是抗女巫攻击的机制,是共识算法(协议)里边一个重要的组成部分,但它们本身不等价于共识算法。
女巫攻击:它是说攻击者可以低成本地制造很多账户,然后控制这些账户一块儿去行动,让别人看上去以为人多势众的样子。 比如说在论坛上大家会见到有水军引导舆论,再比如电影评分的网站也会有人专门去组织去在上面刷评论刷分。
1.PoW( Proof of Work)工作量证明

PoW工作量证明,就是大家熟悉的挖矿,通过数学运算,计算出一个满足规则的随机数,即获得本次记账权,发出本轮需要记录的数据,全网其它节点验证后一起存储。

一句话介绍:干的越多,获得越多。

例如比特币、莱特币采用的共识算法就是 PoW,专业一点说,矿工们在挖一个新的区块时,必须对SHA-256密码散列函数进行运算,区块中的随机散列值以一个或多个0开始。随着0数目的上升,找到这个解所需要的工作量将呈指数增长,矿工通过反复尝试找到这个解。最先算出正确答案的节点可获得当前区块的记账权,同时获得新发行比特币的奖励。

这就解决了对比特币网络做出贡献节点的奖励问题。POW与最长链机制的结合,又让比特币具备了不可被篡改的特性。在这样的共识机制下,即使是没有中心机构做信用背书的比特币,也同样获得了广泛的信任,有着世界范围内的强大生命力。

通俗的说,PoW 的意思就是社会主义,按劳分配,多劳多得。

优点:

1)去中心化,将记账权公平的分派到其他节点。你能够获得的币的数量,取决于你挖矿贡献的有效工作,也就是说,你用于挖矿的矿机的性能越好,分给你的收益就会越多,这就是根据你的工作证明来执行币的分配方式。

2)安全性高,破坏系统需要投入极大的成本,如果想作弊,要有压倒大多数人的算力(51%攻击)。因为作弊要付出一定成本,作弊者就会谨慎对待了。在比特币的 PoW 机制中,由于获得计算结果的概率趋近于所占算力比例,因此在不掌握51%以上算力的前提下,矿工欺诈的成本要显著高于诚实挖矿,甚至不可能完成欺诈(由于概率过低)。

缺点:

1)挖矿造成大量的资源浪费,目前bitcoin已经吸引全球大部分的算力,其它再用Pow共识机制的区块链应用很难获得相同的算力来保障自身的安全。这让依据算力公平分配奖励的机制,演变为了对矿机算力的大举投入,扭曲了中本聪的设计初衷。

2)网络性能太低,需要等待多个确认,容易产生分叉,区块的确认共识达成的周期较长(10分钟),现在每秒交易量上限是7笔(visa的平均每秒交易量上万,支付宝峰值接近9万),不适合商业应用。

3)PoW共识算法算力集中化,慢慢的偏离了原来的去中心化轨道。从比特币扩容之争可以看到,算力高的大型矿池是主人,而持币的人没有参与决定的权利,比特币分叉出很多儿子,即将失去“去中心化”的标签。

2.PoS Proof of Stake,权益证明

PoS权益证明,Pow的一种升级共识机制;根据每个节点所占代币的比例和时间;等比例的降低挖矿难度,从而加快找随机数的速度。

一句话介绍:持有越多,获得越多。

PoS 试图解决 PoW 机制中大量资源被浪费的情况。这种机制通过计算你持有占总币数的百分比以及占有币数的时间来决定记账权。

节点记账权的获得难度与节点持有的权益成反比,相对于PoW,一定程度减少了数学运算带来的资源消耗,性能也得到了相应的提升,但依然是基于哈希运算竞争获取记账权的方式,可监管性弱。该共识机制容错性和PoW相同。例如:恒星币,狗狗币等。

在现实世界中 PoS 很普遍,最为熟知的例子就是股票。股票是用来记录股权的证明,股票持有量多的,拥有更高更多的投票权和收益权。

额,通俗的说,PoS 就是资本主义,按钱分配,钱生钱。

优点:

1)在一定程度上缩短了共识达成的时间。

2)不再需要大量消耗能源挖矿。

3)Pos 当然也能防作弊,因为如果一名持有 51%以上股权的人作弊,相当于他坑了自己,因为一个人自己不会杀死自己的钱。

缺点:

1)还是需要挖矿,本质上没有解决商业应用的痛点;

2)所有的确认都只是一个概率上的表达,而不是一个确定性的事情,理论上有可能存在其他攻击影响。例如,以太坊的DAO攻击事件造成以太坊硬分叉,而ETC由此事件出现,事实上证明了此次硬分叉的失败。

3)极端的情况下会带来中心化的结果。PoS 机制由股东自己保证安全,工作原理是利益捆绑。在这个模式下,不持有 PoS 的人无法对 PoS 构成威胁。PoS 的安全取决于持有者,和其他任何因素无关。在POS机制里,拥有币和币龄越高的节点拥有着越高产生新区块的权力。简单来说,就是你拥有越多的币,并且你拥有的币的币龄越久,就有可能获得记账权的概率越大。POS虽然解决了POW的能耗的问题,但全节点确认会让区块确认的效率提不起来,且时间越长,也越容易产生马太效应,即持有币越多的人会获得更多的币奖励,从而加大贫富差距,最终产生超过50%的中心化节点,被动演化为非预期的中心化的结果。

10、51%攻击/51% attack:51%攻击,是指利用比特币以算力作为竞争条件的特点,凭借算力优势篡改或撤销自己的付款交易。如果有人掌握了50%以上的算力,他能够比其他人更快地找到开采区块需要的那个随机数,因此他能够比其他人更快地创建区块。
11、拜占庭问题/Byzantine Generals Problem/BGP
1)
设想在中世纪,拜占庭帝国拥有巨大的财富,周围邻邦垂诞已久。但拜占庭高墙耸立,固若金汤,没有一个单独的邻邦能够成功入侵。任何单个邻邦入侵的都会失败,同时也有可能自身被其他邻邦入侵。拜占庭帝国防御能力如此之强,至少要有一半以上邻邦同时进攻,才有可能攻破。

达成共识并非坐下来开个会那么简单,有的将军心机深不可测,口是心非,如果有叛徒,可能会出现各种问题:叛徒可能欺骗某些将军自己将采取进攻行动。叛徒可能怂恿其他将军行动。叛徒可能迷惑其他将军,使他们接受不一致的信息,从而感到迷惑。

我们这里假设:

有A、B、C三位将军,当A发出进攻命令时,B如果是叛徒,他可能告诉C,他收到的是“撤退”的命令。这时C收到一个“进攻”,一个“撤退“,于是C被信息迷惑,而无所适从。

如果A是叛徒。他告诉B“进攻”,告诉C“撤退”。当C告诉B,他收到“撤退”命令时,B由于收到了“进攻”的命令,而无法与C保持一致。

叛徒发送前后不一致的进攻提议,被称为“拜占庭错误”,而能够处理拜占庭错误的这种容错性称为「Byzantine fault tolerance」,简称为BFT。

相信大家已经可以明白这个问题的复杂性了。

正由于上述原因,在只有三个角色的系统中,只要有一个是叛徒,即叛徒数等于1/3,拜占庭问题便不可解。

2)
拜占庭将军问题的实质
回顾问题,一群将军想要实现某一个目标(一致进攻或者一致撤退),但是单独行动行不通,必须合作, 达成共识;由于叛徒的存在,将军们不知道应该如何达到一致。

注意,这里“一致性”才是拜占庭将军问题探讨的内容,如果本来叛徒数量就已经多到了问题不可解的地步,这个就是“反叛”的问题了;同时,我们的目标是忠诚的将军能够达成一致,对于这些忠诚的将军来说,进攻或者撤退都是可以的,只要他们能够达成一致就行。

但是,光靠“一致”就可以解决问题吗?考虑一下,如果万事俱备,客观上每个忠诚的将军只要进攻了就一定能够胜利,但是却因为叛徒的存在他们都“一致的”没有进攻;反之,条件不利,将军们不应该进攻,但是却因为叛徒的存在所有人都“一致的”进攻了。

可以发现,只有“一致性”是不足以解决拜占庭将军问题的,我们还需要提出一个“正确性”要求。这个要求是值得斟酌的,因为如果客观来看或许会有“绝对正确的”判断,但是针对每一个将军,大家的判断或许都不相同,我们如何定义“正确”呢?我们或许可以简单地说,正确就是每个忠诚的将军都正确的表达了自己的意思,不会因为叛徒让别的将军认为忠诚的将军是叛徒而不采用他传达的消息。

至此,我们将拜占庭将军问题简化成了,所有忠诚的将军都能够让别的将军接收到自己的真实意图,并最终一致行动;而形式化的要求就是,“一致性”与“正确性”。

如果将问题推广开来,可以发现针对一致性和正确性的算法并不要求命令必须是“进攻/撤退”或是“1/0”,而可以是“发送消息1/发送消息2/待机”或“x/y/z/w”,这意味着拜占庭将军问题算法可以为多种分布式系统提供启发,比如电力系统或网络系统。

由此可见,这个问题说到底是一个关于一致性和正确性的算法问题,这个算法是针对的是忠诚的将军,因为叛徒可以做出任何超出约定的判断。我们就是要在有叛徒的干扰下,找到一个抗干扰的算法。

3)
中本聪的解决方案
这个问题困扰了科学家们数十年,直到区块链的出现。

现在让我们想象一下,给每个将军配备一台电脑(相当于分布式的节点),降低信息流通成本,让信息在极短的时间同步到各位将军。

同时,为了避免信息混乱,一段时间内只能有一位将军发送信息。

怎么来确定哪位将军发送信息呢?区块链系统一般通过工作量证明(POW)来确定谁先发言。(工作量证明将在后续文章介绍)

我们可以想象这是一个数独游戏,哪个将军最先解出来,谁就有权先发送信息。一般,数独的行与列可以增删,通过难度的调整保证这个一段时间是一个比较确定的数值。在比特币系统上,这个数字就是10分钟,也就是说比特币平均约每10分钟产生一个区块。

当某个节点发出统一进攻或者撤退的消息后,各个节点收到发起者的消息必须签名盖章,确认各自的身份。比特币在这里引用现代非对称加密技术为这个信息签名。

这个过程就像一位将军A在向其他的将军(B、C、D…)发起一个进攻提议一样,将军B、C、D…看到将军A签过名的进攻提议书,如果是诚实的将军就会立刻同意进攻提议,而不会发起自己新的进攻提议。

非对称加密算法的加密和解密使用不同的两个密钥,这两个密钥就是我们经常听到的公钥和私钥。一般公钥是公开的,用于加密。而私钥是用来解密公钥获取信息的。比如,将军A想给将军B发送消息,为防止消息泄露,将军A只需要使用B的公钥对信息加密,加密的信息只能用B私钥解密。(非对称加密算法将在后续文章介绍)

除了加密信息外,同时,信息经过每个节点都将进行备份,每个节点都保存了相同的完整数据,以防止少数叛徒篡改。

好了,我们再来重新走下一下整个过程:

每个将军分配了一台电脑,A将军第一个解出数独游戏拥有了第一个发言权,A发出攻打的信息,并立即广播至所有将军,所有人可以根据A的公钥来验证A的身份,确保信息的可信性,并发出自己赞成或反对的选票,在全网验证后得出结果。

于是,一个不可信的信息传递,就变成了一个分布式的可信网络,参与者都有权发表意见,并在一件事上达成一致。
12、智能合约/Smart Contract:智能合约的概念具备承诺、协议、数字形式三大要素,因此能够将区块链的应用范围扩展至金融行业交易、支付、结算和清算的各个环节。智能合约是指当一个预先编好的条件被触发时,智能合约会立即执行相应的合同条款,其工作原理类似于计算机程序的if-then语句。
13、EVM代码:以太坊虚拟机代码,以太坊的区块链可以包含的编程语言的代码。与账户相关联的EVM代码在每次消息被发到这个账户的时候被执行,并且具有读/写存储和自身发送消息的能力。
14、合约/Contract:一个包含并且受EVM的代码控制的账户。合约不能通过私钥直接进行控制,除非被编译成EVM代码,一旦合约被发行就没有所有者。
15、挖矿/Mining:挖矿是指利用电脑硬件计算、记录和验证被称为区块链的数字记录信息的过程。矿工通过挖矿求解数学难题从而获得创建新区块的记账以及区块的比特币奖励。
16、矿工/Miner:在区块链的网络中,矿工是指通过不断进行哈希运算来求数学难题并产生工作量证明的各网络节点,通过算力来验证、确认交易并防止双重支付。
17、挖矿难度:挖矿难度是衡量将信息记录到被称为区块链的数字记录上的难度。在工作量证明中,为了使得区块产生的速度(即数学难题的解答速度)维持在大约每十分钟一个,产生的新区块的挖矿难度会定期调整,每隔2016个区块(2周),挖矿难度会被重新计算,整个网络的难度会通过调整“难度”这个变量来控制生产工作量证明所需要的计算力。

发布了29 篇原创文章 · 获赞 5 · 访问量 4607

猜你喜欢

转载自blog.csdn.net/guoyihaoguoyihao/article/details/100976534