当前位置:首页 > 物联网 > 区块链
[导读] 简化付款确认 可以在不运行完整网络节点的情况下验证支付。用户只需要保存最长的工作证明链的块头副本,他可以通过查询网络节点获得这个副本,直到他确信自己拥有最长的链,并获得将事务链接到它所标

简化付款确认

可以在不运行完整网络节点的情况下验证支付。用户只需要保存最长的工作证明链的块头副本,他可以通过查询网络节点获得这个副本,直到他确信自己拥有最长的链,并获得将事务链接到它所标记块的Merkle分支。他不能自己检查事务,但是通过将其链接到链中的某个位置,他可以看到一个网络节点已经接受了它,并在它进一步确认网络已经接受它之后添加块。

因此,只要诚实的节点控制网络,验证是可靠的,但是如果网络被攻击者制服,验证就更容易受到攻击。虽然网络节点可以自己验证事务,但是只要攻击者能够继续控制网络,简化的方法就会被攻击者编造的事务所欺骗。防止这种情况发生的一种策略是,当网络节点检测到无效的块时,接受来自网络节点的警报,提示用户的软件下载整个块,并提醒事务确认不一致性。经常收到付款的企业可能仍然希望运行自己的节点,以获得更独立的安全性和更快的验证。

如果大部分CPU功率合谋说谎,那么网络显然不再安全。如果使用51%的攻击,那么这个简单的方法将很容易被愚弄,人们将希望拥有完整的区块链。

隐私

一个典型的模型是,身份与通过受信任的第三方然后在交易对手处结束的交易相关联。在这个模型中,网络的其他部分不知道双方之间进行的某些交易。

比特币协议模型中,身份是一个单独的部分,交易以分类账的形式通过公众进行。

作为一个额外的防火墙,应该为每个事务使用一个新的密钥对,以防止它们链接到一个公共所有者。但是,存在这样一种风险:如果密钥的所有者被公开,链接可能会显示属于同一所有者的其他事务。

使用区块链

区块链提供了可公开编写的全局仅追加日志。参与区块链网络的节点遵循块头协议来决定哪个节点可以编写下一个块并收取特定的事务费。在每一轮的领导人选举中,只有一个节点可以写入一个块。区块链中的节点维护它的完整和更新版本。独立验证和添加到区块链的挖掘过程包括运行计算密集型软件来解决复杂的数学问题,这种困难被称为“工作证明”(proof-of-work, POW)。POW基于加密哈希函数。为了使块可以接受,它的头哈希必须在前面加上一定数量的0,其中哈希是时间段内所有事务的Merkle根、前一个块和nonce的组合。 Merkle根是通过哈希值数据、将结果与另一对数据配对并再次将所有事务数据都包含在最后一个哈希中而形成的。矿工搜索‘ nonce ’,它的前缀块头有足够的0来满足POW条件。一旦POW被解决,新的块将通过网络传输。然而,在使用区块链构建系统时存在一些挑战,比如数据存储的限制、写入速度慢、带宽有限等。

哈希函数是将任意大小的输入数据转换为固定大小的输出数据。数字签名是公钥密码学(也称为非对称密码学)的派生,公钥密码学使用两个不同但在数学上相连的密钥,一个是私有的(这是秘密的),另一个是公共的(与他人共享的)。

代码

要深入理解区块链技术,我们需要通读实现它的代码。

区块链的基本概念非常简单:一个分布式数据库,它维护一个不断增长的有序记录列表。比特币和以太坊等流行的区块链项目就是这种情况。术语“区块链”通常与事务、智能合约或加密货币等概念紧密相关。

这使得理解区块链成为一项困难的任务。尤其是source-code-wisely。在这里,我将介绍一个超级简单的区块链,它是我用200行Javascript实现的,名为NaiveChain。

块结构

第一个逻辑步骤是决定块结构。为了使事情尽可能简单,我们只包括最必要的:索引、时间戳、数据、哈希和以前的哈希值。

块哈希

块需要哈希值以保持数据的完整性。SHA-256接管块的内容。应该注意的是,这个哈希值与“挖掘”无关,因为没有要解决的工作问题。

生成一个块

要生成一个块,我们必须知道前一个块的哈希值,并创建所需内容的其余部分(=索引、哈希值、数据和时间戳)。块数据是由最终用户提供的。

存储块

内存中的Javascript数组用于存储区块链。区块链的第一个块总是所谓的“起源快”,它是硬编码的。

验证块的完整性

在任何给定的时间,我们必须能够验证一个在完整性方面是否有效。尤其是当我们从其他节点接收新块并必须决定是否接受它们时,更是如此。

选择最长的链

在给定的时间内,链中应该始终只有一个显式的块集。在发生冲突的情况下(例如两个节点都生成72个块),我们选择块数最长的链。

与其他节点通信

节点的一个重要部分是与其他节点共享和同步区块链。以下规则用于保持网络同步。

· 当一个节点生成一个新的块时,它向网络广播它

· 当节点连接到新的对等点时,它查询最新的块

· 当节点遇到一个索引大于当前已知块的块时,它要么将该块添加到当前链中,要么查询完整的区块链。

不使用自动对等发现。必须手动添加对等点的位置(= url)。

控制节点

用户必须能够以某种方式控制节点。这是通过设置HTTP服务器来完成的。

与其他节点通信

节点的一个重要部分是与其他节点共享和同步区块链。以下规则用于保持网络同步。

· 当一个节点生成一个新的块时,它向网络广播它

· 当节点连接到新的对等点时,它查询最新的块

· 当节点遇到一个索引大于当前已知块的块时,它要么将该块添加到当前链中,要么查询完整的区块链。

不使用自动对等发现。必须手动添加对等点的位置(= url)。

控制节点

用户必须能够以某种方式控制节点。这是通过设置HTTP服务器来完成的。

可以看出,用户可以通过以下方式与节点进行交互:

列出所有块

使用用户提供的内容创建一个新块

列表或添加对等点

最直接的控制节点的方法是使用Curl:

从节点获取所有块

curl http://localhost: 3001 /块

体系结构

应该注意的是,节点实际上公开了两个web服务器:一个用于用户控制节点(HTTP服务器),另一个用于节点之间的对等通信(Websocket HTTP服务器)。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭