区块链常用术语和难点解析

1. 区块链简介

区块链是一种共享的分布式数据库技术,具备共识的四个特性: 去中心化(Decentralized)、去信任(Trustless)、集体维护(Collectively maintain)、可靠数据库(Reliable Database)。 简单可以把区块链理解为是一种完整的、不可篡改的、多方参与和监督的记录方式。

去中心化:整个网络没有中心化的硬件或者管理机构,任意节点之间的权利和义务都是均等的,且任意节点的损坏或者失去都会不影响整个系统的运作。 

去信任:参与整个系统中的每个节点之间进行数据交换是无须互相信任的,整个系统的运作规则是公开透明的,所有的数据内容也是公开的。 

集体维护:系统中的数据块由整个系统中所有具有维护功能的节点来共同维护的,而这些具有维护功能的节点是任何人都可以参与的。 

可靠数据库:整个系统将通过分数据库的形式,让每个参与节点都能获得一份完整数据库的拷贝。除非能够同时控制整个系统中超过51%的节点,否则单个节点上对数据库的修改是无效的,也无法影响其他节点上的数据内容。 

关键的创新是通过具有时间戳(Timestamp)的哈希链和工作量证明(Proof of Work)机制解决双重支付(Double Spending)和拜占庭将军问题(Byzantine Generals’Problem)--容错计算问题, 即保证同一笔比特币不会同时出现在两个地址,并且在信道可靠的基础上,所有节点都可以让其它节点接收到自己的真实意图, 并最终一致行动。区块链技术和思想的引入,可以让所有机构公平参与,中心平台的操作也变为透明和可监督,成为随时可监督、可抛弃、可替换的服务者,每个参与者也可自成中心,让原来的强中心变成弱中心

1. 区块链提供了一种新型的社会信任机制,为数字经济的发展奠定了新基石,标志着人类开始构建真正的信任互联网。

2. 区块链到底是一种怎样技术呢?根据《中国区块链白皮书》的定义,狭义的区块链是指“按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构,并以密码学方式保证的不可篡改和伪造的分布式账本”。广义的区块链是指“利用块链式数据结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用密码学的方式保证数据传输和访问的安全、利用自动化脚本代码组成的智能合约来编程和操作数据的一种全新的分布式基础架构与计算范式。

3. 区块链以其技术公开、不可篡改的属性,为去中心化的信任机制提供了基础,并通过分布式存储与全网验证保证安全性,解决了价值互联网的核心问题,即去中心、安全以及信任三大痛点。

2. 双重支付问题解决方案思想:

最长链原则

3. UTXO

4. 共识机制:

共识机制是区块链节点就区块信息达成全网一致共识的机制,可以保证最新区块被准确添加至区块链、节点存储的区块链新一致不分叉甚至可以抵御恶意攻击;当前主流的共识机制包括:工作量证明、权益证明、工作量证明与权益证明混合、股份授权证明、瑞波共识协议等。

5. 智能合约:

智能合约是一套以数字形式定义的承诺,承诺控制着数字资产并包含了合约参与者约定的权利和义务,由计算机系统自动执行。智能合约机制,以程序代替合同,约定条件一旦达成,网络自动执行合约。

6. 比特币发行规则:

发行有严格的既定规则,任何人都没有权利修改这些规则,进行规则外的增发。

7. 比特币价值由来:

获得比特币是需要成本的,这个成本主要包括购买矿机的成本和运行矿机的成本,这些成本的存在一定程度上“赋予”了比特币某种价值;从经济学角度看,决定价格的并非成本,而应该是市场供需关系。

8.区块链节点数据一致性保障:

是通过点对点网络的共享存储和不停的消息传递,实时同步各自的账本从而实现数据一致性。

9.存在性证明:

用户可以把自身创作的作品、专利的数据指纹(摘要)通过“存在性证明”网站记录到比特币区块链上;当未来发生版权纠纷时,用户通过展示区块链上的数据指纹,证明自己早在某某时间就已经拥有该份文件;如果对方无法提供更早的证明,再结合其他凭证,就很容易推定你是该知识产权的创作者。

10. 零知识有条件付款:

10.1 零知识证明:

设H()是一个复杂的计算机程序,对于H(X)=Y,给定一些特定的Y,你能推导出符合条件的X。就是对于给定的输出,你知道对应的输入是什么。

10.2 零知识有条件付款:

构造一个计算机程序,程序的内容是这样的:

Program(K,Ex,H()) =>  [Ex,Hk,Y]{

        Hk=SHA256(K);

        Y=H(UNAES(Ex,K));

        return [Ex,Hk,Y];

}

捕捉该程序,命名为P()。

将程序P()转换成零知识证明。

零知识证明的效果是:

证明我掌握着特定输入K,Ex,H(),它进入程序P()之后会得到输出Ex,Hk,Y。

----- 别人给出输出Ex,Hk,Y,就可以找到对应的输入K,Ex,H()

并且在证明过程中,K、Ex不会暴露。

——————

此处的零知识证明,不是证明我有输入X,可以得到输出Y,

而是证明我有输入K,Ex,可以得到输出Ex,Hk,Y。

这就证明了我的Ex解密之后确实是是H()=Y的解,而不是瞎编的。

待解的问题H(),是P()的子程序。

对H(X)==Y的证明已经包含在对P()的零知识证明之中。

——————

有问题H()=Y,需要特解X,我想出售X。

但我不能直接告诉买家X,以免买家不给我钱;

买家也不能直接给我钱,以免我不告诉买家X。

所以我用K加密X得到Ex、散列K得到Hk,将Ex和Hk告诉买家,

现在买家需要验证我是否有Ex和K满足Y==H(UNAES(Ex,K))。

我构建了程序P(K,Ex,H())=>[Ex,Hk,Y]并将其转换为零知识证明,期间我的K始终处于保密状态。

买家得到证明之后,确认收到的Ex、Hk无误,然后他可以构造脚本(比特币合同,验证Hk):

当我广播这个合同脚本,外加一个K满足SHA256(K)==Hk时候,交易成功,我收到钱,而买家用我广播的K解开Ex,得到X,一手交钱一手交货。




参考:

https://blog.csdn.net/lucky_greenegg/article/details/52821924

猜你喜欢

转载自blog.csdn.net/lwjaiyjk3/article/details/79915467