主页 > token.im钱包下载 > 究竟什么是区块链?你对区块链了解多少?

究竟什么是区块链?你对区块链了解多少?

token.im钱包下载 2023-06-18 06:56:20

你对区块链了解多少? 0x00写在前面

区块链已经提出十多年了。有人将其视为第四次工业革命的底层技术,但大多数人对这个概念仍然一无所知。如你所知,今天就和你聊聊——区块链到底是什么?

0x01 来自信用中介

信用中介听起来很高大上其实没有人不熟悉——在贷款关系中为双方提供担保的人/机构。比如小松要你借钱,你没钱,就去找小美借钱。这时候就需要保证小松小美一定会还钱,所以信用中介必须有足够的信用才能成为信用中介。但在实际借贷关系中,信用中介是有成本的——不赚钱谁来做?在没有借贷的现代经济中,每个人都在为成本买单——现在你知道华尔街为何如此富有了吗?

借贷关系的示意图

所以有人开始思考——如何尽可能降低这个成本?

从上图可以清楚地看出,这个贷款关系的中心——信用中介。那就好办了,要不就让它消掉成本,要不我们就消掉。俗话说,断财杀父母是不可能的,信用中介也不可能消灭成本,那就要消灭它——于是就产生了去中心化的想法。既然不可能有中央担保,那我们就可以找一堆人担保。

冷知识:P2P借贷其实是基于去中心化的思想,但是缺少了最关键的因素。一步 - 保证。所以P2P借贷平台总是风起云涌的很大一部分原因在于不良借款人

没错。让大家保证所有的交易,这就是区块链技术的核心。

第一个实践这个想法的人是中本聪,没错,就是比特币的发明者。

热点知识:区块链其实被提出来作为比特币的底层技术

0x02 区块链不得不看祖宗:比特币交易流程解析

我们现在假设小C和小H有一个比特币地址(地址是怎么实现的呢?我后面再说,你现在可以把它当成银行卡号一样),现在小H要支付小C一个比特币,交易过程是这样的:

小H的比特币客户端经过一些计算,在整个比特币网络上广播交易申请区块链是什么意思?,让全网的人(其实就是参与记账的节点,也就是矿工)承认交易是有效的。

矿工验证交易后,将其记录在账本中(一个运行在所有节点上的分布式数据库,专门用于记录,一旦记录,就不能更改或销毁(为什么?后面会讲)

现在有三个矿工(小X、小Z和小Y),他们收到小H到小C的交易申请广播等交易广播,他们运行的比特币挖矿程序会自动打包过去10min的交易进入一个新的交易块,并根据这个块和前一个块计算出一定的数据。和一个随机数的数据(计算的是什么?我后面会讲)。先算出来的矿工会得到一定数量的比特币作为奖励。

然后矿工会给这个区块打上时间戳并广播到全网,其他矿工会重新验证。

综上所述,比特币系统具有以下优势:

但是……:

矿工打包区块的时候,他们具体计算什么?

他们计算当前区块的 SHA256 值 + 前一个区块 + 随机数的 SHA256 值。

那是什么(其实是可以逆向的,但是逆现代hash算法所需的工作量是极高的)和极其不可预测的算法。它可以计算任何输入以获得固定长度的输出摘要。通过适当的算法设计,哈希算法可以实现两个特点:

哈希算法的目的是验证原始数据是否被篡改。

所以当你得到一组数据及其摘要时,可以使用相同的摘要算法来验证数据是否发生了变化。

SHA256 是一种加密散列函数算法标准。由于算法是公开的,所以大家可以验证区块数据的可信度。并且因为每个block都是基于前一个block的SHA256值,所以当你改变这个block的时候,势必会改变前一个block的数据,而前一个block是基于前一个block的……所以相互链接成直到第一个区块(有时称为创世区块)的一条链,因此得名区块链。

计算哈希对于现代计算机来说很容易,但是比特币系统需要新的哈希值具有特定的格式——从特定数量的 0 开始,并且由于 SHA256 算法极其不可预测,矿工不得不计算许多不同的摘要随机数,直到他们得到正确的数字。

以上过程统称为-挖矿。

0x03 钱包、地址、私钥和公钥

钱包是一个允许用户访问多个比特币地址的文件。

p>

比特币地址类似于银行卡号,是一串字母和数字的String。

热门知识:比特币和银行卡的工作方式非常不同,比特币用户可以任意创建地址,这是鼓励 - 增强匿名性和隐私性

p>

每个地址都有自己的比特币余额(又名 UTXO,见下文。)当小 H 创建一个新地址时,小 H 实际上正在生成一个密钥对。这个密钥对是由它创建的,它由一个公钥和一个私钥组成。私钥只有 H 知道,并且绑定在 H 的钱包文件中,对应的公钥是每个矿工都知道的。当 H 使用私钥对消息进行签名时,拥有公钥的任何人的所有持有者都可以对其进行验证。

小H申请交易时,他的客户用这个地址的私钥签署交易申请,所有矿工验证申请——使用公钥。

0x04 UTXO

你们都用过电脑上的复制功能吗?因为数据可以被复制,同一个数字资产可能会被交易两次。在一般的中心化交易网络中(即你和银行等),这通常是通过实时修改账户余额来实现的。

但由于没有一般意义上的中心,比特币创造性地融合了时间戳和工作量证明机制,还发明了UTXO(Unspent Transaction Outputs,未使用的交易输出)机制。具体是这样的:

假设小H有8个比特币,这实际上是表示之前有一笔交易将这些比特币转移到小H的地址,这次交易的输出(即8个比特币)没有被使用,而小H拥有这 8 个比特币。

现在小H要发起一笔转账交易,这笔交易的输入是之前允许小H拥有这些比特币的交易。

小H想给小C转7个比特币,小H交易所做的就是签署最后一笔让他拥有这8个比特币的交易,并将这笔新转账交易的输出地址设置为小C的钱包地址小C,这样小H发起转账支付交易(银行卡的支付方式通常是——确认小H的余额,小H的余额减去100,小H的余额加100) C;而UTXO的机制是无论如何都要消耗UTXO,即从UTXO转出7个比特币给小C,再转1个给小H(这个会变成新的UTXO),当矿工打包这个交易时进入一个新的区块,转账交易完成,这8个比特币将是属于你的。小C拥有的是他们两人本次交易的未使用的交易输出(UTXO)。

UTXO与账本系统深度耦合,不需要向上追溯每一笔交易,只需要确认最后一笔交易是可信的。

这样做的一个好处是,如果从第一个区块开始逐步计算所有比特币地址中的余额,则可以计算出每个比特币账户在不同时间的余额。

0x05 双花问题和51%算力攻击

双重支出问题,即一项资产被使用两次。在一般中心化交易网络中,通常通过更改账户余额来避免双重支出。但是在比特币系统中,我们使用Timestamp、工作量证明机制和UTXO模型来解决这个问题。

当一个区块被挖出时,矿工会在记录交易信息的同时给区块添加时间信息。后续区块一般晚于之前的区块,以便及时记录交易。工作量证明机制保证矿工不能随意出块,必须提供算力来解决某些问题,才能竞争记账权。每个区块每个都有自己的哈希值,这取决于前一个区块的哈希值和这个区块中包含的交易信息。如果你想双花一笔钱,你必须先等待包含正常交易信息的区块被释放。进入链,然后从消费前的某一点开始竞争计算一条新的链。因为新区块的内容不同,所以区块链从不同的节点分支出来。根据比特币网络接纳最长链的特点,在新链上的出块速度必须高于原链才能使原链失效。要达到比原链更快的计算速度,攻击节点的综合算力必须达到全网算力的51%。

这很明显。当 50% 的算力流向攻击节点时,两条链的生成速度相同。

0x06 分布式系统的幽灵 - 拜占庭将军问题

每个人都知道 X 是不够的。我们还需要每个人都知道每个人都知道 X,每个人都知道每个人都知道每个人都知道 X——这就像拜占庭将军问题中的经典难题一样分布式数据处理。 (翻译:人人都知道X是不够的。我们还需要人人都知道人人都知道X,人人都知道人人知道人人知道X,就像拜占庭将军问题——分布式数据处理中的经典难题一样。 ) - 詹姆斯 A. 唐纳德

拜占庭一般问题的简要非正式描述如下1:

东方!罗马!嘛!帝国(即拜占庭帝国)要进攻一个强大的敌国,为此派出十支军队包围敌国,虽然不比拜占庭帝国强大,但仍然强大到足以抵御五支拜占庭军队的同时进攻。不知道为什么,十军要分头同时出击,任何一方单独出击都没有胜算,除非至少有六支大军同时出击。这些军队依靠信号部队相互沟通,以协商攻击的意图和时间。困扰这些将领的问题是,他们不确定其中是否有叛徒,因为叛徒可能会擅自改变攻击意图或攻击时间。他们能否找到一种分布式协议,让他们可以远程协商以赢得战斗?

这里只讨论一个简单的案例,有兴趣的读者可以自行阅读原文。

当将军总数n=3,叛徒总数m=1时。

此时,我们希望:

如果指挥官是诚实的,那么诚实的将军必须服从指挥官的命令。

如果指挥官是叛徒,则必须由两个诚实的将军做出一致决定。

也许很多人已经知道这个问题无法解决,原因如下:

将军接到“进攻”命令后,不能直接做出“进攻”判断,因为指挥官可能是叛徒。

所以将军接到命令后,要向另一位将军询问指挥官对另一位将军下达的命令。

假设此时将军收到指挥官的“攻击”,另一位将军告诉他“指挥官让我撤退”。此时,将军会陷入两难境地:第一种可能是指挥官老实,给两位将军下达了“进攻”的命令,而另一位将军是叛徒,篡改了指挥官区块链是什么意思?,另一种可能是,指挥官是叛徒,对两位将军下达了不同的指示。作为可怜的将军,他分不清这两种情况。

问题的关键来了:我们不关心他的决定是“进攻”还是“撤退”,我们关心的是如果我们假设任何战术,例如:选择“进攻”(“撤退”)在一种情况的情况下,一种可能的情况下可以达到目的,而另一种可能的情况下则无效。

这只是口头协议下拜占庭将军问题的简单分析。我打算在另一篇文章中介绍区块链的共识问题。仅供参考,如有错误还望指教。

0x07 ETH简介

自2008年比特币出现以来,“加密货币”的存在逐渐被一些人所接受。商业应用的思考与发展。但随着应用的扩大,人们发现比特币的设计只适合“虚拟货币”场景,由于存在非图灵完备性(简单理解就是程序过于简单,不支持比特币网络,在很多区块链应用场景中并不适用,人们需要一种新的基于区块链的图灵完备、高效的共识机制,支持更多应用场景的智能合约开发平台,以太坊(Ethereum)应运而生。

以太坊是在计算机网络中运行的软件,它确保称为智能合约的数据和小程序可以被所有网络中的计算机复制和处理,而无需中央协调器。以太坊的愿景是创建一个不可阻挡、抗审查和自我维持的去中心化世界计算机。他关注比特币的区块链概念:在全球多台计算机上验证、存储和复制交易数据(分布式账本)。以太坊将这一概念更进一步,让代码可以在世界各地的多台计算机上运行。

以太坊的目的是集成和增强脚本、山寨币和链上元协议,使开发人员能够创建任意基于共识、可扩展、标准化、图灵完备、易于开发和协作的应用程序(即DApp)

从架构的角度来看,DApp 与传统的 Web 应用程序非常相似。在一个 DApp 中,它的智能逻辑运行在区块链上,客户端代码运行在特殊浏览器 Mist 中。因此,以太坊技术分为平台(Ethereum)、数字货币(Ether)和编程语言(Solidity或Ether Script)。

参考文献

1: [1] 兰波特 L ,肖斯塔克 R ,皮斯 M 。拜占庭将军问题[J]. ACM Transactions on Programming Languages and Systems, 1982, 4(3).