当前位置: 首页 > 编程日记 > 正文

区块链中的技术

链客,专为开发者而生,有问必答!

此文章来自区块链技术社区,未经允许拒绝转载。

在这里插入图片描述

应用技术

算法加密1

比特币采用椭圆曲线加密算法(ECC)来产生公钥和私钥对,钱包地址即是公钥,私钥由用户保存。

比特币还用到哈希算法,Hash,就是把任意长度的输入通过散列算法变换成固定长度的数据信息摘要的函数。

区块链系统一般采用Hash算法来快速验证用户的身份。如果用户宣称对某个钱包具有所有权并且要改变钱包对应的信息(在比特币中,就是使用钱包中的余额),他必须提交一个请求,这个请求包括三个部分:钱包地址、明文请求、明文请求由钱包对应的私钥Hash过的签名。这个请求将被发送要区块链网络中。

相比非对称加密,Hash算法一般快几个数量级以上,从而使得验证的过程可以非常快速。常用Hash算法有MD5、SHA1、SHA256、SHA512、HMAC等。

点对点通信技术(Peer to Peer)

1、所有节点参与提供资源,包括带宽,存储空间和计算能力; 2、网络的分布式,增加了系统的防故障的健壮性,消除了单点故障;

分布式共识技术

理解分布式共识算法,需要理解下面两个名词,分别是“异步”和“共识”。

异步:此处的异步不同于通常技术术语中的异步调用的异步,而是指在一个分布式系统中,对消息的处理速度或者消息送达时间不做任何假设。此就是著名的FLP不可能性定理。

(FLP不可能性:(FLP Impossibility)是分布式领域中一个非常著名的定理。该定理的论文是由Fischer, Lynch and Patterson三位作者于1985年发表,之后该论文毫无疑问得获得了Dijkstra奖。FLP给出了一个令人吃惊的结论:在异步通信场景,即使只有一个进程失败,也没有任何算法能保证非失败进程达到一致性!)

共识:当多个主机通过异步通讯方式组成网络集群时,这个网络默认是不可靠的,那么在这些不可靠主机之间复制状态需要采取一种机制,以保证每个主机的状态最终达成相同一致性状态,即取得共识。

共识一致性算法

Paxos

Paxos是最初、最简单的分布式共识算法,是Leslie Lamport(也是LaTeX的实现者)于1990年提出的一种基于消息传递的一致性算法,是通过节点之间来回两次实现状态复制。

Paxos 算法解决的问题是一个分布式系统如何就某个值(决议)达成一致。

Raft

Raft正是因为Paxos算法不容易理解和实现而提出的,Raft通过在系统中引入强势领导者来解决相互系统之间的协调问题,Raft是Paxos的简化版本。Paxos和Raft的区别在于选举的具体过程不同。

在Raft中,任何时候一个服务器可以扮演下面角色之一:a) Leader: 处理所有客户端交互、日志复制等,一般一次只有一个Leader; b) Follower: 类似选民,完全被动; c) Candidate候选人: 类似Proposer律师,可以被选为一个新的领导人。

Raft阶段分为两个,首先是选举过程,然后在选举出来的领导人带领进行正常操作,比如日志复制等。

PBFT

PBFT也称为拜占庭攻击容错算法。这里的拜占庭攻击,学术名称也称为主动型攻击,即它不是被动型攻击,不是简单的数据窃取和数据窃听,拜占庭攻击实现的是对消息的窃听,同时对消息进行恶意修改的目的。

是第一个比较广泛的BFT算法,在PBFT算法中至多可以容忍不超过系统全部节点的数量的三分之一拜占庭节点,即如果有超过三分之二的正常节点,系统就可以正常运转。

PBFT采取三阶段协议进行工作,包括pre-prepare、prepare和commit三个阶段。

POW

POW,全称为Proof of work,也即POW证明机制是基于工作量的,通过工作量的证明来实现系统的数据共识。

POW机制在比特币系统出现之前已经有研究人员在使用,主要是用在防垃圾邮件方面。

在比特币系统中POW证明机制决定了系统数据共识的来源方,也就是比特币系统中区块链的记账方的争夺,只需要向系统证明节点能够快速提供相应的工作量,节点就有向区块链中写入数据的权利。

POW证明机制基于的是数学上难以快速计算的问题,包括Hash碰撞问题、大数分解问题、椭圆曲线问题等。

由于这些数学上“难”的问题没有计算的捷径,每个节点只能通过大量的穷举才能找到对应的答案,这是POW证明机制的优点,同时也是POW证明机制的缺点。由于POW是一种赢者通吃的模式,就容易导致系统中弱小的参与方只是陪练的角色,同时也浪费了系统大量的资源,是一种不“绿色”的机制。

POW现在的主要实现系统是比特币系统和以太坊系统。

POS

POS,全称为Proof of Stake,由Quantum Mechanic于2011年在bitcointalk论坛上面提出。

POS需要系统中运行一种代币,使用这种代币来表示系统中各个节点的权利,节点拥有更多的代币就拥有更多的发言权、更多的责任,同时也获得更多的收益。POS证明机制称为股权证明机制,黑客要攻击系统需要获得足够多的系统代币,这和算力无关,POS机制比POW机制环保,这是它的优点,同时也是它的缺点所在。

POS机制的权利是由代币天然固定在系统中,使得POS系统运行产生的区块成本比POW低,所以POS代币的内在价值没有POW凝聚的价值大,所以人们对POS产生的代币多少持不信任态度。

POS机制一般和POW结合来使用,通过POS来控制POW工作量证明的难度,纯粹的POS机制实现比较困难。

以这些技术为基础,区块链实现了它去中心化的本质特征。

通过非对称密码技术,实现了区块链的历史可信;

通过点对点通信,实现了区块链网络的不可停止;

通过共识机制,实现了区块链网络链条的唯一、数据的唯一,保障了系统的正常运行。

共识

第一个概念,叫做 consensus,中文叫做共识,就是大家对一个事件,都 同意,不光是发生了事件 A 和 B,而且事件 A 先于事件 B 的顺序,都一致认同。

第二个概念,叫做 consensus finality,就是终极共识,意思就是我们在做 下一个决定之前,现有这个决定必须是终极的,不能改变的。

分叉

比特币采取的pow,原理就是在进行哈希碰撞, 那么在这个过程中,基本上会出现几个人同一时间,达到哈希碰撞的结果。那么 pow 其实是没有终结共识的,一旦出现共识分叉,比特币原则是最长链获胜。 那么短的分叉,就会被放弃。但是在理论上,如果有一帮人,决定就是将这个短 分叉持续下去,那么真正的两条链就分出来了,当然事实上大家没有这样做。

软硬分叉涉及到的问题是去中心的化的节点软件、协议、版本升级的问题(软硬分叉都是由于软件升级导致的问题,而不是共识分歧导致的)。

一开始,所有的节点运行同样的软件,遵循着同样的共识协议,维护着同样的一条链(blockchain)。这时,一部分节点升级到了新版本的软件,拥有了新的共识协议,这时会出现下面四种情况:新节点认为老节点发出的区块/交易合法;新节点认为老节点发出的区块/交易不合法;老节点认为新节点发出的区块/交易合法(没察觉变化);老节点认为新节点发出的区块/交易不合法(察觉出了变化);

注意:不合法会分为所有交易都不合法和部分交易不合法。这里为了简化模型,把有部分交易不合法的都归为交易不合法。实际情况是上面4种情况的组合,除此以外,我们还要增加一个维度,就是新节点和老节点的算力比,又分为下面两种类型:新节点算力>50%;新节点算力<50%;

注意,我们目前在网站上看到的各种关于软硬分叉的资料,都是基于新节点算力>50%的情况下讨论的。这里我们也只讨论新节点算力>50%。要注意,另一种情况下,即新节点算力<50%,情况会完全不一样。

软分叉是一个后来才出现的词,之前并没有。我们首先来讲一下什么是硬分叉(hard-fork)。

硬分叉(hard-fork)

硬分叉是指:当系统中出现了新版本的软件(或称协议),并且和前版本软件不能兼容,老节点无法接受新节点挖出的全部或部分区块(认为不合法),导致同时出现两条链。尽管新节点算力较大,比如99%的算力为新节点,1%的老节点依然会维护着不同的一条链,因为新节点产生的区块老节点实在是无法接受(尽管它知道网络上99%的节点都接受了),这称为硬分叉。注意:以上情况基于新节点算力>50%。

当必须硬分叉时,我们需要要求所有节点同时升级软件,未升级的节点将不能正常工作。如果有较多老节点不愿意升级,他们将工作在另外一条完全不一样的链上。

硬分叉产生的原因:新的节点要求比老的节点要宽松很多。

软分叉

软分叉是指:当系统中出现了新版本的软件(或称协议),并且和前版本软件不能兼容,新节点无法接受老节点挖出的全部或部分区块(认为不合法)。因为新节点算力较大,老节点挖出的区块将没有机会得到认可,新老双方从始至终都工作在同一条链上,这称为软分叉。注意:以上情况基于新节点算力>50%。

软分叉产生的原因:新的节点要求比老的节点要严格很多。

软硬分叉的优缺点

上面的定义可以看出软硬分叉有各自的优缺点,首先软分叉和硬分叉相比拥有下面的优点:软分叉总是只有一条链,没有分成两条链的风险;软分叉不要求所有节点同一时间升级,允许逐步升级,且并不影响软分叉过程中的系统稳定性和有效性;但软分叉也有缺点:软分叉的前提是老的节点总是能够接受新节点的区块,这就要求把系统设计成向前兼容(forward compatible);软分叉总是建立在对老节点进行欺骗的基础上,它让老节点没有察觉实际上已经发生的变化,某种程度上违背了单点完整验证的原则;

向前兼容(forward compatible)

向前兼容是非常有意思的术语,它不同于我们通常说的软件设计中向后兼容(backward compatible)的方式。它要求对于新可能出现的区块形态、共识机制有个预先的判断,并在老的系统中留有余地或后门。当新的节点被部署时,老的节点能够接受新节点所产生的区块。

那么,比特币里是如何实现向前兼容的?

答案是:非标准交易(non-standard transaction)。

比特币中设定了如下规则:将所有交易分类为:标准交易、非标准交易和非法(invalid)三种;如果发现非法交易,一律拒绝,如果该非法交易在某个区块中,则拒绝整个区块;在标准配置下,所有节点对非标准交易采取以下态度:a. 不转发 b. 不接受 c.不打包 对于已经进入区块的非标准交易采取以下态度:接受该区块;对区块中的所有交易,包含该非标准交易按既有规则进行验证;

相关文章:

h.264 FMO

在H.264之前的标准中&#xff0c;比如H.263&#xff0c;其比特流中的数据是按照一个宏块接一个宏块的方式排列的&#xff0c;一旦发生丢包&#xff0c;很多相邻宏块信息都会丢失&#xff0c;很难进行错误隐藏处理。在H.264中加入了一项新特性&#xff1a;把宏块在比特流中的数据…

lvs+keepalived+nginx+tomcat

# 拓扑如下所示 # 节点分布情况 LVS-dr-master eth0: 192.168.146.141 LVS-dr-slave eth0: 192.168.146.142 nginx1: eth0: 192.168.146.139 nginx2: eth0: 192.168.146.140 tomcat1: eth0: 192.168.146.138 启用了4个tomcat VIP: 192.168.146.200 # 具体配置 ### lvs master #…

iOS 关于pods-frameworks.sh:permission denied报错的解决

最近公司新开项目&#xff0c;搭建完框架后小伙伴拉取代码后build一直报错&#xff1a;pods-frameworks.sh:permission denied 查了很多博文后找到了如下解决方案&#xff0c;在此记录。 打开终端输入如下命令行回车即可&#xff1a; chmod ax "/Users/xxx/Pods/Pods-re…

区块链分布式账本

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 账本是具有一定格式和许多账页组成的&#xff0c;以会计凭证为基础&#xff0c;对经济业务进行序时分类记录&#xff0c;也就是所说的账册。 账本在…

jmeter实现多并发

1.jmeter实现多并发 线程组:负载发生器,用以多线程或多进程的方式来模拟用户的使用行为.jmeter是以线程的方式来进行模拟用户的并发访问的 转载于:https://www.cnblogs.com/xuzhongtao/p/8526502.html

循环语句——7月23日

循环语句&#xff1a;for 格式&#xff1a; for (int i 1/*初始条件*/; i < 100/* 循环条件*/; i /*状态改变*/) { //循环体&#xff0c;执行代码&#xff1b;(break;跳出循环体) } 给出初始条件&#xff0c;先判断是否满足循环条件&#xff0c;如果不满足条件则跳过for语句…

CocoaPods私有库搭建的记录

前言 随着项目的业务增加以及马甲包进度的跟进&#xff0c;一些重复的独立业务以私有库的方式引入到项目中对于项目进度的开发就显得越发的迫切了&#xff0c;本文主要记录自己搭建私有库时的整个流程&#xff0c;以防后面再次搭建时忘记&#xff0c;方便自己查阅。 整个记录…

区块链笔记-Hash算法

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 区块链笔记-Hash算法 区块链技术是一系列技术的结合&#xff0c;建立新的技术架构&#xff0c;hash算法是很重要的一块&#xff0c;如果理解不当的…

Thrift源码解析--TBinaryProtocol

本文为原创:http://www.cnblogs.com/leehfly/p/4958206.html&#xff0c;未经许可禁止转载。 关于Tprotocol层都是一些通信协议&#xff0c;个人感觉内容较大&#xff0c;很难分类描述清楚。故打算以TBinaryProtocol为例&#xff0c;分析客户端发请求以及接收服务端返回数据的整…

一篇价值百万的文章:我为什么在22岁辞去年薪150万的工作?

本文转载自http://www.cricode.com/4208.html 作者&#xff1a;奶牛Denny 今天是22岁的最后一天。几个月前&#xff0c;我从沃顿商学院毕业&#xff0c;用文凭上“最高荣誉毕业”的标签安抚了已经年过半百的老妈&#xff0c;然后转头辞去了毕业后的第一份工作&#xff0c;跟一…

电脑温度检测软件哪个好_一般电脑录音软件哪个好?

随着科技的快速发展&#xff0c;为了满足各行各业的音频录制需求&#xff0c;电脑版录音软件也在陆续不断的出现在各大应用市场&#xff0c;与传统的自带音频录制工具相比&#xff0c;电脑版录音软件更加专注的是电脑上的音频录制&#xff0c;它能够将发生在电脑上的一切声音源…

区块链的隐私性

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 我最近看区块链简单介绍的时候会发现有的人就说其有良好的隐私性&#xff0c;但也有人说保护隐私性上有缺陷&#xff0c;今天就简单的对区块链的隐私…

ssh免密连接远程服务器

ssh免密连接远程服务器 借助ssky-keygen和ssh-copy-id工具&#xff0c;通过4个简单的步骤实现无需输入密码登录远程Linux主机 1 生成密钥 通过内置的工具生成RSA算法加密的密钥 ssh-keygen -t rsa 回车默认选项即可&#xff0c;会在当前用户的home文件下生成密钥文件 2 拷贝密钥…

什么是互联网大厂_仅限今天!大厂最热数据分析经典实战项目大公开!

原标题&#xff1a;仅限今天&#xff01;大厂最热数据分析经典实战项目大公开&#xff01;如今&#xff0c;全球早已步入数据时代&#xff0c;随着行业的高速发展&#xff0c;相关岗位缺口已超150万&#xff0c;且薪资超同行业50%。未来十年&#xff0c;数据细分岗位将扩张5倍&…

php教学视频

http://www.52pojie.cn/forum.php?modviewthread&tid283589转载于:https://www.cnblogs.com/dawanxiaobao/p/5703157.html

Go基础编程:作用域

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 Go基础编程&#xff1a;作用域11 小弟初学go语言&#xff0c;感觉作用域的运用还是很广泛的&#xff0c;所以就写上一点&#xff0c;也许有的都是很…

数据分析之CE找数据大法

一&#xff0e;基本介绍 CE的全称为Cheat Engine&#xff0c;是一款内存修改编辑工具&#xff0c;其官网是http://www.cheatengine.org&#xff0c;可以在其官网下载到最新的CE工具&#xff0c;目前最新版本是Cheat Engine6.5。CE同时也是一款开源的工具&#xff0c;使用者可以…

a++浏览器_“公司发给我的职业装太小了,我该怎么和领导说?”哈哈哈哈哈|职业装|uc|浏览器...

GIF打开UC浏览器 查看更多精彩图片GIF打开UC浏览器 查看更多精彩图片GIF打开UC浏览器 查看更多精彩图片GIF打开UC浏览器 查看更多精彩图片GIF打开UC浏览器 查看更多精彩图片GIF打开UC浏览器 查看更多精彩图片GIF打开UC浏览器 查看更多精彩图片打开UC浏览器 查看更多精彩图片GIF…

Go基础编程:延迟调用defer

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 本篇文章所讲的就是go编程中的延迟调用defer&#xff0c;希望对社区的成员有较多的帮助。 1 defer作用 关键字defer ⽤于延迟一个函数、方法或者当…

maven工程插件配置

1 <build>2 <!-- 该级工程会加载插件&#xff0c;放在父工程里 -->3 <plugins>4 <!-- 资源文件拷贝插件 -->5 <plugin>6 <groupId>org.apache.maven.plugins</groupId>7 …

卡巴斯基安全浏览器_卡巴斯基 for windows 全方位安全软件2021注册表清除版

软件介绍最近从来不相信木马的Run同学中招了&#xff0c;wup.exe(俗称矿机木马)&#xff0c;此款木马真可谓厉害&#xff0c;无敌&#xff0c;用过所有方法都无法清理&#xff0c;百度了所有的道道几乎无用&#xff0c;中了此毒&#xff0c;电脑不会有什么特别异常&#xff0c;…

Android通过ksoap2调用.net(c#)的webservice

转载于:https://www.cnblogs.com/Nagisa-Saku/p/5706183.html

●洛谷P3688 [ZJOI2017]树状数组

题链&#xff1a; https://www.luogu.org/problemnew/show/P3688题解&#xff1a; 二维线段树。 先不看询问时l1的特殊情况。 对于一个询问(l,r)&#xff0c;如果要让错误的程序得到正确答案&#xff0c; 显然应该满足l-1位置的值r位置的值&#xff08;或者说两个位置的异或值…

Activity-生命周期

Activity不是什么陌生的东西&#xff0c;作为Android程序媛对Activity再熟悉不过。每当说起Activity总最关注的还是它的生命周期。 1、一张来自谷歌官方文档的Activity的生命周期图&#xff1a; 直接来个MainActivity覆盖上面所有的方法通过log打印方式给大家展现&#xff0c;通…

arial unicode ms字体_5个检测商用字体和免费字体合集的网站

对于做新媒体和设计的小伙伴来说&#xff0c;最恐慌的就是加班、改稿、脱发、没钱...侵权问题了。一个不注意就是律师函警告。正所谓律师函不是不到&#xff0c;只是晚到。所以&#xff0c;皮皮特意为小伙伴们搜集了这5个远离字体侵权的网站&#xff0c;有检测字体版权的&#…

DAPP是什么

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 1 DAPP是什么1 当满足下所有条件的时候&#xff0c;一个应用才可以称为DAPP [if !supportLists]1. [endif]必须是开源、自治并没有一个实体控制着…

JVM学习--(一)基本原理

前言 JVM一直是java知识里面进阶阶段的重要部分&#xff0c;如果希望在java领域研究的更深入&#xff0c;则JVM则是如论如何也避开不了的话题&#xff0c;本系列试图通过简洁易读的方式&#xff0c;讲解JVM必要的知识点。 运行流程 我们都知道java一直宣传的口号是&#xff1a;…

phpexcel导出超过26列解决方案

phpexcel导出超过26列解决方案 原文:phpexcel导出超过26列解决方案 将列的数字序号转成字母使用,代码如下: PHPExcel_Cell::stringFromColumnIndex($i); // 从o,1,2,3,..开始,相应返回返回 A,B,C,...Z,AA,AB,...将列的字母转成数字序号使用,代码如下: PHPExcel_Cell::columnIn…

h5大转盘抽奖源码后台_微信H5互动营销应该要如何做?

现在微信营销的队伍有越来越多的人群&#xff0c;许多的企业品牌都会选择用微信营销&#xff0c;而微信营销这么受欢迎是因为微信拉近了用户与企业品牌的关系。其中H5互动营销是最受欢迎的一种方式&#xff0c;那么微信H5互动营销要如何做呢&#xff1f;企业想要在微信H5营销中…

Solidity语言

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 Solidity语言11 Solidity是以太坊智能合约的编程语言&#xff0c;我自己也是学习了很久&#xff0c;感觉是有些难度&#xff0c;所以需要去认真的去…