主页 > imtoken官方网址 > 没有代码也没有炒作的区块链技术介绍
没有代码也没有炒作的区块链技术介绍
没有代码,没有炒作技术介绍
1. 第一要务 1.1 区块链:另一种数据结构?
在计算机科学中,数据结构被定义为数据、其结构以及用于处理它们的一组操作的集合。 一些示例是链表、堆栈、树和图。
区块链在数据结构中有着最深的根源,但仅从这个角度研究它是不够的。 网络功能(即,在通过网络连接的一组计算机上使用此数据结构)是本主题同样重要的部分。
区块链理想化适用于没有中央实体的网络,其中运行相同代码的多个参与者旨在达成共识以维护结构中记录的数据的完整性。
1.2 那么,我们如何定义它是什么?
区块链是一种分散的数据结构,可以由一系列记录(也称为块)定义,这些记录可以包含任何类型的数据并且可以通过加密引用链接。 从区块链的这些架构属性中,我们可以列出它的一些主要特征:
与其他数据结构一样,区块链有一些用例,在这些用例中,安全设计的架构非常适合某些应用程序的开发,有时甚至是必要的。
例如,即使没有中央实体来批准或拒绝内容,参与者也需要依赖注册信息的系统是该技术的一个很好的用例。
加密金融系统、公证人、游戏、物流系统和其他应用程序都受益于区块链。
1.3 故事简介
已经有一些设计去中心化和密码学上可靠的数据结构的尝试,但直到中本聪在 2008 年发表了文章《比特币:一种点对点的电子现金系统》(Bitcoin: A Peer-to-Peer Electronic Cash System),两者都是以区块链为核心比特币加密货币的拟议实施。
有趣的事实:直到今天,还没有人知道中本聪的真实身份。
中本聪在本文中提出的区块链是公开的,并使用 P2P 协议(点对点)策略进行网络参与者之间的通信。 它的公共性质和密码学允许任何人验证存储在区块链上的数据的完整性。 考虑到所有参与者都通过向区块链添加块来执行数据验证并达成共识,参与者之间的共识协议赋予网络一定程度的可靠性,而中心化实体无权更改或删除已保存的记录。
几年后,开发了各种形式的区块链,通过许可或私有区块链方案,参与者必须获得邀请或许可才能参与或查看记录的数据,以及使用网络区块链计算能力的新公共区域另一种方式。
> 启动这一切的论文。
2. 数据结构 2.1 块
块结构定义了以下基本属性,还可以定义其他附加字段。 主要属性有:
2.1.1 数据安全吗?
在区块链的情况下,散列函数(或只是散列)返回的值用于保护块中包含的数据不被网络中的任何参与者故意更改。 对于两个不同的数据集,该值不能相等,并且原始数据不应通过应用于哈希的逆向工程技术轻易获得。
也就是说,我们可以从数据中生成哈希,而从哈希中不可能生成数据。 所选功能使用的算法必须确保安全先决条件。 一个流行的经验法则是不要尝试实现自己的散列函数,除非你是在经验丰富的数学家和密码学家中间工作。
有一些安全的开源实现,例如 SHA-2。 不推荐其他非常知名的实现,例如 SHA-1 和 MD5,因为它们的攻击向量是公开的。
2.1.2 区块链的第一个区块
在区块链上创建的第一个块称为创世块。
创世块通常是硬编码创建的,即直接在区块链应用程序源中创建。 此外,创世块不包含前一个块的哈希值,通常索引为零。
> 比特币的block.h源码
2.2链条
在深入了解链的细节之前,让我们先探讨一下区块挖掘的概念。 为了生成序列,我们必须链接块,以便生成的散列始终符合预期,以便其他网络参与者可以验证和接受新数据。
此过程会检查区块链数据的完整性,但不会阻止具有哈希计算所用大量处理能力的恶意攻击者能够重写黑名单,以便其他参与者将其视为有效更改。
2.2.1 挖矿
为避免这种攻击,可以使用某些技术。 在这里,我将讨论比特币区块链中用于达成共识和防止攻击的工作量证明方法或 PoW。 还有其他的方法,比如Proof of Stake或者Proof of Space,这里就不一一介绍了。
工作量证明是一种网络参与者必须执行繁重的计算工作才能将新块插入链中的技术。 使用 PoW 在区块链上创建区块时,参与者必须处理两个特定属性——难度和随机数。
难度是由区块链代码定义和更新的属性。 它用于调节将块添加到链中的速度。 例如,它可以定义应用于数据的散列函数结果开头的零个数。
正如我们之前所见,数据哈希是在考虑到块的所有属性的情况下获得的。 如果生成的哈希没有目标数量的前导零,我们如何更改它,因为我们无法更改块的其他属性?
在这种情况下,我们可以更新随机数。 必须更改它以生成新的哈希结果,直到哈希函数达到网络期望的结果。
这项工作是计算密集型的,并且随着网络参与者的计算能力的增加而变得更加困难。 为了鼓励参与,区块链应用程序奖励节点或参与者,这些节点或参与者将大量令牌或加密货币的有效块从网络添加到链中。 由于这个方面,这个过程被称为挖矿。
当收到一个有效的块时,所有其他参与者都可以通过应用哈希函数来验证工作,因此这是一种执行成本高但易于验证的技术。
这可以防止具有强大计算能力的恶意行为者重写区块链的内容。 网络考虑了计算能力,这是公共区块链拥有自己的货币或代币的主要原因。
2.2.2 为了乐趣和利润:我们能赚钱吗?
对于一个新的区块链网络,你在零售店可以买到的 CPU 就足以参与,甚至有可能赢得区块挖矿比赛。
随着网络中参与者数量的增加,以及随之而来的算力的增加,挖矿难度趋于增加,因此需要参与者进行投资才能持续获得奖励,购买更好的机器或硬件,例如:
目前,在运行中的最大区块链比特币网络上,需要大量协作的ASIC硬件才能在挖矿过程中有机会。
> 区块链网络总处理能力(以每秒太哈希运算来衡量——TH/s)
2.3 演练:向链中添加一个块
在理解了去中心化共识和挖矿的主要概念之后,我们可以继续创建和运行区块链的过程。
创建创世块后,在创建下一个块时,必须遵循以下步骤:
2.4 这样做之后,链是不是“不可变的”了?
由于其架构,该块包含紧接其之前属于该块的数据的签名。 这意味着如果我们使用 20 个块的列表,索引块 19 将在索引 18 处具有块内容的签名,这又包含索引块 17 的签名,依此类推。
也就是说,例如,要更改区块 12 中的信息,我们必须更改区块链中从区块 12 开始的所有区块。这个过程需要大量计算,因此不太可能执行,因为有必要这样做在网络参与者点击一个区块之前。
2.5 演示
在这个出色的演示中,我们可以与 Anders Brownworth 开发的基于浏览器的区块链进行交互。
3.网络 3.1 点对点
我们必须解决的第一点是 P2P(点对点)网络。 参与者通过网络以分散的方式相互发送和接收数据。
P2P 是一种计算机网络体系结构evm可以运行比特币脚本,其中每个参与者或网络节点都具有客户端和服务器的角色。 使用 P2P 网络的一些应用程序示例是用于文件传输的 BitTorrent 协议和域名系统 DNS。
这种架构的优点是它提供了更高的可用性,因为它不依赖于单个节点作为所有信息的来源。 另一个相关点是,由于它是去中心化的,与专用服务器相比,多个参与者使用他们的智能手机的网络可以更具弹性并且成本相对较低。
3.1.1 搜索节点
P2P 网络的概念基于去中心化。 但是,如果我们没有一个中央实体来指示其他参与者的 IP 地址,我们如何连接到其他节点呢? 有几种方法可以解决这个问题。
一种方法是提供参与网络并使用与应用程序相同的通信协议的节点列表。 一旦连接到第一个音符,新节点就可以连接到所有连接到第一个音符的节点。 此后,必须更新已知初始 IP 列表,以便下次启动应用程序时,该节点可以连接到所有先前已知的节点。
另一种方法是通过 DNS 播种。 该方法非常有趣,因为它使用了另一个去中心化网络,即 DNS 网络。 该方法的工作原理如下:与应用程序源代码一起发布 DNS 服务器列表,每个 DNS 服务器包含一个节点地址列表。 初始化后,应用程序在 DNS 服务器上执行查询以获取节点的地址并连接到它们。 连接后,新的网络参与者可以获得其他节点连接的地址列表,就像我们介绍的第一种方法一样。
3.1.2 与其他同行交流
对于节点之间的通信,通常通过套接字进行通信。 套接字是用于接收或发送数据的通信点。 实际上,IP 网络上的套接字是由地址和端口定义的。 在这种情况下,通常使用传输层,因为它有助于节点之间的通信。
一个例子是 WebSocket 技术,它通过单个 TCP 套接字执行双向通信。 一旦节点之间建立了连接,参与者就可以根据高级数据协议发送和接收数据。
3.2 与区块链的通信
随着区块链的启动和运行,与其他网络参与者的连接,以及添加到链中的块的验证,我们如何使用代码与主要软件通信以获取信息和发送命令?
假设运行网络的计算机不像在远程服务器上那样容易访问,我们可以开发一个客户端应用程序来通过网络发送命令和接收数据。
> 比特币网络可视化
我们将更多地讨论可用于客户端应用程序与运行区块链网络的机器进行交互的 RPC 和 REST 方法。
3.2.1 远程过程调用或 RPC
RPC 是一种在系统进程之间进行通信的方法,它允许一个程序执行另一个软件的现有进程,通常运行在同一网络上的另一台计算机上。 在区块链的情况下,我们可以编写软件来执行过程调用,并在区块链主节点的代码中获取节点列表或发送要插入到块中的数据。
要执行此实现,我们可以选择一个 RPC 库,例如 gRPC,它已被开源社区中的多个区块链项目使用。
3.2.2 Representational State Transfer 或 REST over HTTP
REST 是指一组允许软件向 Web 应用程序提供服务的原则。 目前,在谈论 REST 时,请考虑 HTTP。
为了与区块链代码进行交互,我们可以在区块链主节点代码之上编写一个 HTTP 服务器,通过包括 HTTP 方法、地址和必要时数据的调用进行交互。 这个 HTTP 服务器必须使用一些标准的数据格式(例如 JSON、XML 或其他更合适的格式)来接收和响应客户端应用程序请求evm可以运行比特币脚本,它可以被使用 HTTP 的任何类型的应用程序(例如 curl、mobile)使用)、Web 或桌面应用程序。
4. 4.1 最常见的权限类型有哪些?
使用区块链的应用并不一定意味着所有数据都必须公开,任何人都可以成为网络的参与者。
4.1.1 公示
说起公有链的特性,就要从它的第一个也是最著名的应用说起:比特币加密货币。
加密货币是一种使用密码学来确保使用代币或硬币进行的交易的有效性的交换方式。 加密货币创造了一种无需中介且无需相关各方之间信任的价值交换方式。 比特币出现后,出现了其他几种非常相似的硬币。
比特币网络是公开的,因为它允许任何人成为网络节点、验证区块、参与挖掘过程、发送数据和添加新节点。 简而言之,任何参与者都可以做任何事情。 这是一个没有任何权限或限制的免费访问网络。
4.1.2 允许
许可区块链是可以应用特定级别许可的网络。 许可网络主要用于在区块链中使用层级结构的私人公司,其中参与者具有权限和有限的活动范围。 根据用例,网络数据可能可以公开访问,也可能只能由少数参与者访问。
一个用例是 Ripple 加密货币,在撰写本文时,多家银行和金融机构正在使用它进行跨境交易。 它不存在于公共网络中,而是存在于许可网络中,其中某些节点负责验证所做的交易。
这也意味着工作量证明技术不是必需的,因为它的计算成本很高,而且对网络节点的信任度不高。 在这种情况下,一种可能的替代方法是使用权威证明方法,该方法仅基于基于共识的节点权威。
当今一些广泛使用的平台是用于创建许可区块链的 Corda 和 Hyperledger。
4.2 激励措施
公共区块链通常会激励参与者推动网络增长和可用性。 这是通过向区块矿工提供奖励来实现的,这最终成为公共区块链技术和去中心化加密货币应用程序之间的完美结合。
许可的区块链不需要令牌来运行,因为它们不会为网络参与者提供某种激励来执行块验证。
5. 区块链或加密货币
为什么这两个主题被认为是同一件事?
这在很大程度上是由于两种技术的同时出现。 在中本聪的文章中,区块链是比特币应用程序使用的数据结构。
正如上一节所述,由于主题的深度,加密货币和区块链都开始被单独研究和应用。 一些区块链既没有交换代币的主要目的,也没有将代币分发给参与者作为鼓励挖矿的主要目的。
> Hal Finney,计算机科学家 — 从 Satosh 收到了有史以来第一笔比特币交易
6. 智能合约
智能合约是用于使用区块链自动执行协议的算法。 它们的主要目的是在不需要中介实体或各方之间信任的情况下执行各方之间的合同。
要使用智能合约,您的代码必须先发布,然后发送到网络以进行批量添加。 为了进一步交互,可以将命令以数据格式发送到区块链以执行,从而与已发布的合约进行交互。 这意味着代码的副本将由每个网络节点存储和执行。
智能合约的概念创建于 1996 年,当时还没有任何类型的公共区块链,随着比特币网络的出现,它开始被实施。 它提供以脚本语言编写的合约的执行,重点是比特币硬币的转移。
6.1 以太坊
以太坊实现了第一个复杂的智能合约,因为存在支持图灵程序执行的环境。 与比特币区块链一样,以太坊有一个使用工作量证明技术的公共区块链(在撰写本文时,有一个旨在改变共识方法的 Casper 项目),并有一个奖励矿工的加密货币。 然而,它有一个根本区别:以太坊主要不从事证券交易。
它的主要功能是执行智能合约并充当去中心化应用程序的平台。 以太坊依赖于以太坊虚拟机 (EVM),这是一个包含在块中的代码在周围虚拟环境中执行的环境。 通过这种方式,验证区块的所有网络参与者也执行合约,验证其有效性。
6.1.1 以太坊安全吗?
鉴于其架构,合约的代码是不可变的,并且对我们所有人都是可见的。 如果智能合约的代码有错误,合约就无法修复,如果合约有任何价值,恶意用户就可以利用它。
有用于构建去中心化应用程序以降低合约攻击风险的标准。 区块链本身或恶意用户使用的虚拟机代码也存在漏洞风险。
6.2 用例
智能合约适用于需要通过自动化和去除中介来提高效率的任何类型的合约,并且还可以从使用加密货币中受益。 由于可用数据是公开的且不可变的,因此它可用于执行事件或存储特定于事件的信息。
可以创建、共享、交换其他代币或通过智能合约将类似加密货币的代币转移到数字钱包。 它们还可以用于通过首次代币发行或 ICO 筹集项目资金。
在以太坊上运行的一些用例包括加密货币钱包、去中心化的加密货币经纪人以及物品游戏和保险合同的虚拟商品商店等。
许可的区块链平台主要基于智能合约的执行。
> 智能合约代码示例,用 Solidity 编写 — Solidity、Gi 仍然没有语法高亮显示
七、总结
在本文中,我们介绍了区块链结构的基础知识,包括数据结构和网络操作、其操作形式、权限级别以及自动化合约的可能性等方面。 值得记住的是,这些主题仅以肤浅的方式涵盖,每个部分都可以很容易地扩展到成为一本书的程度。
基础知识是获得对项目如何从区块链的使用中受益的必要理解的初始方法。 为了加深知识,应该解决一些重要的主题,例如:
“教育是你无法完成的事情。” — 艾萨克·阿西莫夫
希望你喜欢阅读这篇文章。 感谢您的时间。
注意并继续编码!
(本文翻译自Thiago Candido的文章《A Technical Introduction to Blockchain》,参考:)