区块链应用技术 课件下 P2P网络核心技术-区块链+政务_第1页
区块链应用技术 课件下 P2P网络核心技术-区块链+政务_第2页
区块链应用技术 课件下 P2P网络核心技术-区块链+政务_第3页
区块链应用技术 课件下 P2P网络核心技术-区块链+政务_第4页
区块链应用技术 课件下 P2P网络核心技术-区块链+政务_第5页
已阅读5页,还剩239页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

P2P网络核心技术P2P网络核心技术1.分布式哈希表2.Kademlia协议3.Gossip协议分布式哈希表分布式哈希表的基础:

常用的数据结构——哈希表哈希表存储的数据有键(key)和值(velue)两部分:它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录。给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(Hash)函数。如这个图所示,键为人名,值为buckets中的电话号码,bucket可以看作一个长度为16的数组。人名通过哈希函数转换为数字,数字作为buckets数组的下标。分布式哈希表:存储的键值对数据并不仅仅存在于一台电脑中,而是分布在不同的节点(电脑)中。分布式哈希表有三个特性:(1)离散性:构成系统的节点并没有任何中央式的协调机制,做到了完全的去中心化。(2)伸缩性:即使有成千上万个节点,系统仍然十分有效。加入的节点越多,网络可以提供的服务能力越强。(3)容错性:即使节点不断地加入、离开或是停止工作,系统仍能达到一定的可靠性。Kademlia协议相比于分布式哈希表协议,Kademlia协议采用的数据结构简单、路由方式实现起来足够灵活、具有比较好的性能并且安全性也较强。综合起来在各种哈希表实现中具有很强的竞争力,成了分布式哈希表中被采用最多的技术。1.如何衡量两个ID是否接近(Kademlia的距离衡量机制)Kademlia协议中采用了异或算法(XOR)作为距离算法来衡量两个ID的远近。比较两个ID时,首先把字符串的哈希值变为二进制表示。这里假设节点A的ID二进制表示为01010101,节点B的ID二进制表示为01000000,将两个ID进行异或运算(对应位置的0、1进行异或),结果为00010101,转化为十进制为25。也就是说这两个ID的距离用十进制表示为25。2.如何根据文件的哈希值得到文件存储位置信息(kademlia的路由机制)理解路由机制,可以从Kademlia中k-bucket(k-桶)出发。k-桶是Kademlia论文中提出的一个概念,一个节点会有多个k-桶,不同k-桶

的区别在于离这个节点的距离不同,每个k-桶

中存放了离节点在某个距离范围内的其他已知节点。Kademlia协议建立在上述K-桶之上,可以发起四种消息请求。(1)PING:用来测试节点是否依然在线。(2)STORE:在某个节点中存储一个键值对。(3)FIND_NODE:消息请求的接受者将返回自己K桶中离请求的节点的ID最近的K个节点。(4)FIND_VALUE:根据文件资源的KEY查找一个数据和FIND_NODE类似,如果请求接收着拥有KEY对应的文件资源则返回数据。Gossip协议 1、在HyperledgerFabric中,节点间同步数据采用的是Gossip协议,当节点因为异常缺少账本数据时,可以通过Gossip协议从邻近的节点获得账本数据,保证集群中节点账本的一致性。 2、Gossip是一种去中心化思路的分布式协议,解决集群中的数据传播和状态一致性的问题。(1)协议流程

节点A向节点K发送数据有三种方式:1、push模式:

节点A将数据(key,version,value)推送给K,K更新version比自己新的数据。2、pull模式:

节点A将数据(key,version)推送给K,K将本地version比A新的数据推送给A。3、push/pull模式:

先采用push模式更新K,然后采用pull模式更新A。(2)Gossip缺陷

由于Gossip协议中,节点只会随机向少数几个节点发送消息,消息最终是通过多个轮次的散播而到达全网的,因此使用Gossip协议会造成不可避免的消息延迟。不适合用在对实时性要求较高的场景。

Gossip协议规定,节点会定期随机选择周围节点发送消息,而收到消息的节点也会重复该步骤,因此就不可避免地存在消息重复发送给同一节点的情况,造成了消息的冗余,同时也增加了收到消息的节点的处理压力。感谢观看P2p网络应用什么是p2p网络?是一种在对等者之间分配任务和工作负载的分布式应用架构,是对等计算模型在应用层形成的一种组网或网络形式。定义:网络的参与者共享他们所拥有的一部分硬件资源。这些共享资源通过网络提供服务和内容,能被其它对等节点直接访问而无需经过中间实体。P2p网络应用1.文件交换2.对等计算3.协同工作4.搜索引擎5.流媒体1.文件交换过去下载方式绝大多数属于超文本文件传输协议或者文件传输协议,也就是我们常说的HTTP

和FTP协议。P2P方式与传统方式区别:用户不是从其他网站的服务器搜索和下载资源,而是从任何一个在线网友的计算机中直接下载,当然,其他网站的服务器也可看作是一个对等点,真正实现个人计算机与服务器平起平坐。2.对等计算P2P用于对等计算的优势:每个对等点不再只是单纯地接受计算任务,它可以根据自身的情况,再搜索其他空闲节点,把接受的任务分发下去,中间结果层层上传,最后到达任务分发节点。对等点之间还可以直接交换中间结果,协作计算。用这种方式,可以合理整合闲散的计算能力和资源,使总体计算能力大规模提升,获得非常可观的计算性能/价格比。3.协同工作利用P2P技术,互联网上任意两台PC都可以建立实时的联系,可以实现一个安全、共享的虚拟空间。P2P协同计算包括协作计算、网格和数据内容网格。P2P技术的出现,使得互联网上任意两台PC都可建立实时的联系,建立了这样一个安全、共享的虚拟空间,人们可以进行各种各样的活动,这些活动可是同时进行,也可以交互进行。4.搜索引擎P2P技术的另一个优势是开发出强大的搜索工具。P2P技术使用户能够深度搜索文档,而且这种搜索无须通过Web服务器,也可以不受信息文档格式和宿主设备的限制,可达到传统目录式搜索引擎(只能搜索到20%、30%的网络资源)无可比拟的深度(理论上将包括网络上的所有开放的信息资源)。5.流媒体单源的P2P流媒体系统建立在应用层组播技术的基础之上。服务器和所有客户节点组织成组播树,组播树的中间节点接受来自父节点组播的媒体数据,同时将数据以组播的方式传送给子节点。多源的P2P流媒体传输系统,则是由多个发送者以单播的方式同时向一个接收者发送媒体数据。感谢观看P2P在区块链中的作用目录(1)为什么区块链会选择P2P作为网络基础(2)P2P网络中节点类型(3)P2P在比特币中的作用为什么区块链会选择P2P作为网络基础因为他是无中心服务器的,中心服务器就意味着,当受到攻击的时候,中心机,整个网络和服务就会出现问题服务器一旦宕机。

而区块链的核心是去中心化,这和P2P网络的观念不约而同,所以这也就是为什么区块链会选择P2P作为网络基础。P2P网络的三个特性:离散性、容错性、伸缩性比特币P2P网络根据功能不同,各节点可能具有不同的分工。每个比特币节点都是路由、区块链数据库、挖矿、钱包服务的功能集合。一个全节点包括如图所示的四个功能:钱包网络路由节点完整区块链矿工P2P网络中的节点类型下图描述了扩展比特币网络中常见的节点类型。网络路由节点完整区块链矿工网络路由节点钱包独立矿工

包含具有完整区块链副本的挖矿功能、以及比特币P2P网络路由节点。轻量(SPV)钱包

包含不具有区块链的钱包以及比特币P2P网络节点。Pool服务器Startum服务器矿池协议服务器

将运行其他协议的节点(例如矿池挖矿节点、Stratum节点),连接至P2P网络的网关路由器。网络路由节点完整区块链完整区块链节点

在比特币P2P网络中,包含完整区块链及网络路由节点。首先看一下P2P的整体技术点:(1)如何发现节点(peers)在P2P网络中,发现节点是最开始、最重要和最难的一部分;(2)握手协议发现节点之后,就要进行握手链接,确定节点之间的通信协议等(3)地址广播及发现链接建立之后,就可以正常的进行通信了;以上三点解决之后,基本就可以实现一个简单的P2P网络。P2P在比特币中的作用当一个新的网络节点启动后,为了能够参与协同运作,它必须至少发现一个其他网络中的节点并与之建立连接。比特币的网络拓扑结构不基于地理位置,因此可以随机的选择节点建立连接。(1)节点发现(1)利用种子节点:

比特币的客户端会维护一个列表,列表中记录了长期稳定运行的节点,这些节点也被称之为种子节点。在比特币里,可以通过“-dnsseed”选项来指定是否使用种子节点,该选项默认是开启的。比特币中的节点发现有两种方式(2)节点引荐:将当前启动节点引荐给其他节点的方式。可以通过“-seednode”选项指定一个节点的ip,之后新节点将和该节点建立连接,将该节点作为DNS种子节点,在引荐信息形成之后断开与该节点的连接,并与新发现的节点连接。比特币中的节点发现有两种方式节点A节点Bversionverackversionverack对等节点之间的初始“握手”通信(2)握手协议过程如下:节点向对等节点发送version消息开始握手,此消息中包含如下一些内容PROTOCOL_VERSION:当前节点的比特币P2P协议的版本号;nLocalServices:节点支持的本地服务列表,目前仅支持NODE_NETWORK;nTime:当前时间;addrYou:当前节点可见的远程节点的IP地址。当建立⼀个或多个连接后,新节点将⼀条包含IP地址的addr消息发送给其相邻节点。相邻节点再将此条addr消息依次转发给它们各⾃的相邻节点,从而保证新节点信息被多个节点所接收、保证连接更稳定。节点地址广播及发现(3)地址广播及发现节点A节点Baddraddraddrgetaddraddr感谢观看区块链共识的概念与特点目录什么是区块链共识共识机制的分类区块链中常见的共识机制共识机制的特点什么是区块链共识共识机制是区块链的核心基石,是区块链系统安全性的重要保障。区块链是一个去中心化的系统,共识机制通过数学的方式,让分散在全球各地成千上万的节点就区块的创建达成一致的意见。共识机制中还包含了促使区块链系统有效运转的激励机制,是区块链建立信任的基础。共识机制的分类根据共识算法解决问题的方式,我们可以大致将其分为两类:验证型共识算法投票型共识算法除了根据共识的实现来分类,我们还可以通过对共识机制是否是拜占庭容错来进行分类。而像PBFT,dPOS,Tendermint等,都是拜占庭容错。共识机制的分类区块链公链常用的共识机制有POW、POS、DPOS、BFT以及多种机制混合而成的共识机制等。共识是指系统节点达成一致的过程,而分布式系统的一致性体现在三个方面:

最终性(Termination):所有进程最终会在有限步数中结束并选取一个值,算法不会无尽执行下去。

统一性(Agreement):所有进程必须同意同一个值。

合法性(Validity):输出内容是输入内容按照系统规则生成的,且输出内容合法。区块链中常见的共识机制1.Pow工作量证明2.PoS权益证明3.DPoS委托权益证明4.容量证明/空间和时间证明

5.唯一节点列表(UNL)6.已用时间证明7.权威证明8.有向无环图共识机制的特点例如:POW共识机制比特币采用的POW工作量证明共识机制,在生成区块时,系统让所有节点公平地去计算一个随机数,最先寻找到随机数的节点即是这个区块的生产者,并获得相应的区块奖励。因此,比特币的POW共识机制门槛很低,无需中心化权威的许可,人人都可以参与,并且每一个参与者都无需身份认证。共识机制的特点

POW共识的优点可归纳为:算法简单,容易实现,节点可自由进入,去中心化程度高破坏系统需要投入极大的成本,安全性极高节点间无需交换额外的信息即可达成共识,整个过程不需要人的参与

为了保证去中心化程度,区块的确认时间难以缩短没有最终性共识机制的特点区块链的共识机制具备“少数服从多数”以及“人人平等”的特点,“人人平等”是当节点满足条件时,所有节点都有权优先提出共识结果、直接被其他节点认同后并最后有可能成为最终共识结果。感谢观看pOW共识——工作量共识目录概念POW算法原理存在的问题POW工作量证明的三要素POW工作量证明流程POW共识记账POW的优点POW的缺点工作量证明是需要各个节点来进行一个较难完成但较容易验证的工作来实现共识。PoW=工作量证明=挖矿比特币网络中的计算是根据上一个区块的信息来确定出下一个待挖区块的目标结果值。比特币PoW计算公式如下:概念PoW求解过程中当网络中有2个或2个以上的节点在同一区块的基础上算出了哈希,并且都向网络中广播了自己打包的区块后,区块链则可认为是产生了分叉,需要确定哪一个才是主链,即分叉选择策略。PoW也在一定程度上避免了女巫攻击。PoW算法原理(1)“无意义”的能源浪费为了获取“挖矿”收益的节点会进行大量的哈希运算。因此,很多人此前在研究如何将POW的计算内容从无意义的哈希运算,应用于更为实际的运算场景。(2)挖矿相关的攻击尽管比特币的PoW在事实上较为成功,相较于PoS等共识从实践的角度来看更为稳健,但不可否认的是PoW也存在较多的安全风险需要防控。存在的问题常见的威胁以及相应的对策如右侧表所示。POW工作量证明的三要素工作机制:为了使区块链交易数据记录在区块链上并在一定时间内达到一致(共识),POW提供了一种思路,即所有区块链的网络节点参与者进行竞争记账。1、工作量证明函数

在比特币中使用的是SHA256算法函数,是密码哈希函数家族中输出值为256位的哈希算法。2、区块

区块头在前言中已经做详细介绍,这里我们就介绍下区块体的Merkle树算法。3、难度值

关于难度值,我们直接看公式:

新难度值=旧难度值*(过去2016个区块花费时长/20160分钟)

tips:难度值是随网络变动的,目的是为了在不同的网络环境下,确保每10分钟能生成一个块。

新难度值解析:撇开旧难度值,按比特币理想情况每10分钟出块的速度,过去2016个块的总花费接近20160分钟,这样,这个值永远趋近于1。POW工作量证明流程POW共识记账前面三部分中讲解的是单节点工作量证明流程,有了这个计算流程,我们就得将其使用起来,在比特币平台中,中本聪就是运用的pow工作量证明来使全网节点达到51%及以上的共识记账,那么POW工作量证明共识是如何记账的?总结下来大概有六点。POW的优点完全去中心化(任何人都可以加入);节点自由进出,容易实现;破坏系统花费的成本巨大。POW的缺点对节点的性能网络环境要求高;浪费资源;每秒钟最多只能做七笔交易,效率低下;矿场的出现违背了去中心的初衷;不能确保最终一致性;利益驱动性降低导致旷工数量减少从而导致比特币网络瘫痪。代码如下代码如下感谢观看POS(权益证明)目录权益证明(POS)Follow-the-Satoshi算法特点缺陷POS的长程攻击

权益证明与PoW竞争挖矿造成的能源浪费和效率低下不同,PoS一般以节点投入的通证数量和持有通证的时间长短来计算可记账权的比率。与PoW投入成本进行算力竞争不同,PoS的博弈思想是持有通证数量越多的人越值得信赖。权益证明(POS)

POS一并解决了POW浪费能源和算力集中两个痛点,理论上还能缩短了共识时间,但同时也丢弃了POW的某些优势,因此更容易分叉,一笔交易需要等待更多确认才能确保安全,而POS最大的问题是其安全性和容错性还没有得到严格的数学论证。PoS机制并没有从根本上解决PoW机制难以应用于商业领域的问题。为了能在纯粹PoS机制下更好的选择出块者,Bentov等人提出了Follow-the-Satoshi算法,如下图。Follow-the-Satoshi算法 POS的通证在整个区块链体系中更像是以股份或存款的形式而存在:通过质押通证来获得“分红”或“利息”。这种方式的通证经济体系会更易于使发行者,持有者,开发者等的利益绑在“一条船”上,从而使生态体系具有较强的生命力和适应力。特点缺陷无权益问题,是用户在POS中可以同时在两个分叉上面下注不会受到损失,这样,无论哪一个分叉后面被认为主链,该用户都可以获得奖励而没有机会成本的损失。解决思路:一、对在同一个区块上面进行多次下注的,引入一个惩罚机制。二、无论是否多次下注,“押错”主链的用户都会受到惩罚。除此之外,还有其他一些解决办法。例如Peercoin在PoS共识基础上还综合使用了PoW来控制提案的发送,NXT的方式是不引入挖矿机制,所有的NXT一次性创建在创世区块中,通过公式确定未来的区块由哪个节点来生成。在PoS链上线的早期,很有可能有一个阶段一小部分矿工持有了大部分的通证,那么在未来的某个时候掌握了早期通证的这个或这些人会从链的早期开始重新分叉一个新链出来实现双花,而且这个新链的接下来很多区块的挖矿收益可能仍然会由这些作恶矿工所掌握。POS的长程攻击感谢观看DPOS共识机制目录DPOS共识的目标两个原则原理DPOS优点、缺点、特点DPOS争论:去中心化问题DPOS共识的目标DPoS算法是BM根据当时PoW、PoS的不足而改进的共识算法,它的目的就是为了提高性能,也就是交易确认时间短。两个原则1、投票选举过程⼀定要保证最大权益所有者最终能控制全网。2、与PoW、PoS⼀样,所有节点仅承认“最长”链。原理step1.全网持有代币的人可以通过投票系统选举出一定数量的节点作为区块生产者。step2.被选举的节点相互协作,按照一定的顺序,轮流进行记账。所选择的生产者会根据从块时间导出的伪随机数进行混合。以便保证出块者之间的连接尽量平衡。step3.记账21个区块生产者,不仅记账,还需要提供EOS全链所需要的计算和网络资源。DPOS优点1)记账节点减少,交易速度更快,EOS号称可达百万TPS;

2)更加安全,一般不不会发生链分叉并不可逆,确保最终一致性;

3)相对PoW,解决了资源消耗问题。DPOS缺点DPOS被普遍质疑过于中心化代理记账节点选举过程中存在巨大的人为操作空间。DPOS特点特点:出块时间超短,效率超高,几乎不会分叉。DPOS争论:去中心化问题如果为了提升性能,即一致性的效率,势必会牺牲其他两项。这也会引出有关DPoS的一个争论:中心化问题。这是DPoS算法的优势,也是DPoS算法的劣势。很多情况下,投票并不能解决问题。

总结DPoS共识机制将“矿池”纳入系统内部,并把它们统称为见证节点。可以认为DPoS本身就是带中心化思路的共识机制。感谢观看实用拜占庭容错协议(PBFT)目录什么是PBFT?拜占庭容错系统实用的拜占庭容错系统PBFT消息传播过程什么是PBFT?它是基于领导者且非分叉的(不同于彩票式算法)它不支持开放注册,但是管理员可以添加和删除节点它要求完全对等(所有节点必须连接到所有其他节点)拜占庭容错系统1.所有非拜占庭节点使用相同的输入信息,产生同样的结果;2.如果输入的信息正确,那么所有非拜占庭节点必须接收这个信息,并计算相应的结果。在拜占庭系统的实际运行过程中,每个请求还需要满足两个指标。安全性:任何已经完成的请求都不会被更改,它可以在以后请求到;活性:可以接受并且执行非拜占庭客户端的请求,不会被任何因素而导致非拜占庭客户端的请求不能执行。拜占庭系统普遍采用的假设条件目前来说包括四种。原始的拜占庭容错系统由于需要展示其理论上的可行性而缺乏实用性。另外,还需要额外的时钟同步机制支持,算法的复杂度也是随节点增加而指数级增加。实用的拜占庭容错系统PBFT是一类状态机拜占庭系统,要求共同维护一个状态,所有节点采取的行动一致。为此,需要运行三类基本协议。一致性协议:解决如何达成共识检查点协议:类似于操作系统的还原点视图更换协议:系统的每个服务器节点在同样的配置信息下工作,该配置信息被称为“视图”。如图,PBFT协议将共识过程分为了5个阶段(如果不算与客户端交互的阶段,则可视为3个阶段)。Request阶段 Pre-prepare阶段 Prepare阶段 Commit阶段 Reply阶段PBFT消息传播过程除了以上阶段流程外,协议运行过程中还涉及几个重要概念:(1)水位(2)检查点(Checkpoint)(3)视图切换(4)批量(Batch)感谢观看区块链之智能合约目录起源和定义工作原理应用场景起源和定义智能合约是一系列以数字形式指定的承诺,包括各方履行这些承诺的协议智能合约的定义:是一种旨在以信息化方式传播、验证或执行合的计算机协议。智能合约目的:智能合约的目的是提供优于传统合约的安全方法,并减少与合约相关的其他交易成本。工作原理基于区块链的智能合约构建及执行分为以下几步:第一步、多方用户共同参与制定一份智能合约第二步、合约通过P2P网络扩散并存入区块第三步、区块链构建的智能合约自动执行应用场景一、金融领域:证券、保险、贸易金融等。二、物联网(IoT)领域。起源和定义四、管理领域:数字资产及版权管理、组织管理、政务管理等。三、能源领域。感谢观看用智能合约处理价值目录通证,价值的数字表示物智能合约的价值以太坊——智能合约最好的载体一个简单的智能合约:Faucet通证,价值的数字表示物在《区块链超入门》中,方军提出,区块链的基本功能是三个部分:1)去中心化地进行价值表示的功能;2)进行价值转移的功能;3)价值表示物即通证(Token)通证,价值的数字表示物令牌系统TokenSystems链上令牌系统有很多应用,从代表如美元或黄金等资产的子货币到公司股票,代表智能资产的单独令牌,安全的不可伪造的优惠券,甚至与传统价值完全没有关联的令牌系统,如积分奖励。通证,价值的数字表示物一般来讲,在区块链中,通证是价值的数字表示物。它可以指代门票、供应链单据、股票、资产凭证、忠诚度积分或其他基于区块链的产品与服务。

通证,价值的数字表示物在以太坊的通证编程实践中,最主要的分类是可互换的ERC20标准与不可互换的ERC721标准。古董、艺术品等收藏品通常是不可互换的,比如以太坊上一个游戏迷恋猫中的每一只猫都是独一无二的。智能合约的价值智能合约的价值在于,降低了交易成本,更高效且确保安全的前提下进行交易。将之前麻烦的程序统统交给代码进行处理,而且代码的犯错概率要远小于人为。以太坊——智能合约最好的载体在以太坊上面,任何人都能够创建自己想要做的去中心化的智能合约。智能合约⼀旦被创建之后,就无需中间机构参与,可以自动执行,并且没有人可以操纵其运行。以太坊——智能合约最好的载体另外,在以太坊上面,你可以编写资产代码,创建新的区块链资产,简单说来,就是你可以在以太坊平台上面发行自己的代币,代币的名称、发行机制、发行数量、代币应用场景都可以由发行者本人设计。一个简单的智能合约:Faucet在以太坊区块链网络中,以太币(Ether)是一种特殊的通证,它被设计为这个全球计算机的燃料(gas),用户在以太坊网络中执行各种计算,均要用以太币相应地支付燃料费。智能合约特点规范性;不可逆性;不可违约性;匿名性。

智能合约的应用1、数字身份智能合约可以让用户拥有和控制自己的数字身份,比如个人数据、信誉以及数字资产。2、证券在金融行业里,智能合约对于资本的管理具有非常重大的意义。3、记录智能合约需要能够在分布式账本上存储数据,并且不会减缓性能或者破坏数据隐私。智能合约的应用4、抵押贷款传统的抵押贷款流程⼀般是人工完成的且容易出错。有了智能合约,就可以自动流程内的每⼀个环节,包括支付处理,财产扣押。5、土地所有权记录智能合约可以推动财产转让,以提高交易的完整性、效率和透明度。世界上的国家,包括格鲁吉亚、加纳和洪都拉斯,都已经把区块链应用于土地所有权记录。感谢观看用智能合约处理业务逻辑问题描述传统交易和智能合约交易区别? 1.智能合约中的惩罚等条件是提前进行明晰的,适用于客观的请求场景。而传统合约则更适用于主观请求场景。

2.智能合约的成本要明显低于传统合约成本。因为智能合约中的各项执行条件等已经被提前写入代码,执行时候不需要再耗费更多的人力物力即可进行。 3.智能合约可以用于提前预防,而传统合约则是事后判断。问题描述

在以太坊区块链的环境中,每对地址/私钥代表一个用户,每个用户有自己的钱、资产或权力,智能合约可以用来处理常见的业务逻辑。

接下来,我们用智能合约示例来看三个业务逻辑:购物、拍卖与投票。为了便于理解,我们所讨论的都是简化场景。另外我们还讨论了用数字签名来做一个区块链上的支票的案例。

用智能合约处理购物购物场景在简化的购物场景中也会至少包括卖家与买家两家。在面对面购物时,卖家给出商品,买家付钱,一手交钱一手交货。在卖家和买家不见面且相互不信任时,如何进行交易就成为一个难题。那么,能否用智能合约来充当中间人呢?以下是一个简化的远程购物示例。远程购物示例买家卖家创建卖单-2020

卖家金库买家下单购买-2040-20确认收货100-10其他状态智能合约金库区块链帐本购物场景

如图所示,我们创建一个智能合约来实现远程安全购物。智能合约运行在区块链上,这个智能合约有两种功能:一是实现业务逻辑,二是它可以作为不受卖方与买家影响的金库,独立、可信地管理资金。这个智能合约有四种状态,分别是:已创建卖单、已下单购买、已确认收货以及其他。示例代码contractPurchase{uintpublicvalue;//此参数为商品的定价addresspayablepublicseller;//卖主addresspayablepublicbuyer;//买主enumState{Created,Locked,Release,Inactive}Statepublicstate;//缺省为CreatedmodifieronlyBuyer(){…}modifieronlySeller(){…}modifierinState(State_state){…}//这是智能合约的构造函数,卖家创建这个智能合约时,//需要向智能合约转入以太币资金。示例代码//msg.value即为转入的以太币资金,这是抵押的资金。//这个抵押的资金是商品价格的两倍,因此也就赋值商品定价参数。constructor()publicpayable{seller=msg.sender;value=msg.value/2;require((2*value)==msg.value,"Valuehastobeeven.");}//在买家下单前,卖家可以取消商品functionabort()public实列代码onlyBuyer inState(State.Locked) { state=State.Release; buyer.transfer(value); } //卖家调用此函数,取回双倍抵押的资金、货款 //此数值为商品价格的三倍 functionrefundSeller() public示例代码onlySellerinState(State.Created){state=State.Inactive;seller.transfer(address(this).balance);}}用智能合约处理拍卖拍卖场景

由智能合约主持一个拍卖,在竞标的时间段内,竞标者可以向智能合约转入以太币资金,表示自己参与竞标。在竞标结束后,投标金额最高的竞标者获胜。示例代码contractSimpleAuction{addresspayablepublicbeneficiary;//投标的发起人(受益人)uintpublicauctionEndTime;//拍卖截止时间//在部署这个智能合约时,需要指定受益人、截止时间constructor(uint_biddingTime,addresspayable_beneficiary)public{beneficiary=_beneficiary;auctionEndTime=now+_biddingTime;}实例代码//拍卖的相关状态 //当前的最高竞标者、其金额 addresspublichighestBidder; uintpublichighestBid; //可以取回自己资金的竞标者名单 mapping(address=>uint)pendingReturns; //拍卖状态,缺省为`false`即未结束 boolended; //任何人都可以调用bid()函数竞标 //调用此函数时要相应地转入竞标资金msg.value

实例代码functionbid()publicpayable{ require( now<=auctionEndTime, "Auctionalreadyended." ); require( msg.value>highestBid, "Therealreadyisahigherbid." );if(highestBid!=0){ pendingReturns[highestBidder]+=highestBid; }示例代码highestBidder=msg.sender; highestBid=msg.value; emitHighestBidIncreased(msg.sender,msg.value); } //已经不是最高竞标者的人可以用withdraw()函数取回自己的资金 functionwithdraw()publicreturns(bool){ uintamount=pendingReturns[msg.sender]; if(amount>0){ pendingReturns[msg.sender]=0;

实例代码if(!msg.sender.send(amount)){ pendingReturns[msg.sender]=amount; returnfalse; } } returntrue; }

//调用此函数来结束拍卖,并将最高竞标人的资金转给受益人 functionauctionEnd()public{实例代码 //1.执行条件:拍卖时间段已经结束,且此函数还未被调用过require(now>=auctionEndTime,"Auctionnotyetended."); require(!ended,"auctionEndhasalreadybeencalled."); //2.结束拍卖,将资金转给受益人 ended=true; beneficiary.transfer(highestBid); }}用智能合约处理投票投票场景

智能合约还可以用来资金以外的权利、权益。接下来,我们来看用智能合约来编写一个投票系统。投票的发起方用区块链智能合约发起一个投票,对包括A、B、C、D等提案进行投票。投票发起方还要划定有权投票的人员范围,即赋予相关人投票权。

这个投票还有一个规则是,投票人可以将自己的票委托给其他人,由他代为投票。投票过程示例示例代码contractBallot{//投票人的数据结构structVoter{uintweight;//投票人持有的含委托的总票数boolvoted;//若为true,表示已投票addressdelegate;//投票权的被委托人uintvote;//所投的提案}//存储所有的投票人信息mapping(address=>Voter)publicvoters;//提案的数据结构示例代码structProposal{bytes32name;//提案名称uintvoteCount;//提案所获票数}//存储所有提案Proposal[]publicproposals;//此投票的管理者addresspublicchairperson;//此为智能合约的构造函数//输入值是投票的提案,我们假设分别为A、B、C、D//此投票的管理者就是这个智能合约的创建者示例代码constructor(bytes32[]memoryproposalNames)public{chairperson=msg.sender;voters[chairperson].weight=1;for(uinti=0;i<proposalNames.length;i++){proposals.push(Proposal({name:proposalNames[i],voteCount:0}));}}示例代码//投票的管理者可以调用此函数,赋予投票人投票权functiongiveRightToVote(addressvoter)public{require(msg.sender==chairperson,"Onlychairpersoncangiverighttovote.");require(!voters[voter].voted,"Thevoteralreadyvoted.");require(voters[voter].weight==0);voters[voter].weight=1;}示例代码//通过此函数,投票人把自己的投票权委托给他人functiondelegate(addressto)public{//如果你已经投票或已经委托,那么提示你已经投票Voterstoragesender=voters[msg.sender];require(!sender.voted,"Youalreadyvoted.");//你也不能把投票权委托给自己require(to!=msg.sender,"Self-delegationisdisallowed.");while(voters[to].delegate!=address(0)){to=voters[to].delegate;require(to!=msg.sender,"Foundloopindelegation.");}

示例代码//执行委托投票过程,分两种情况://1)如果被委托人已经投票,那么他所投提案的得票直接加一//2)如果被委托人尚未投票,那么他的投票权重加一,在稍后他投票时,权重为N则代表票数为N。sender.voted=true;sender.delegate=to;Voterstoragedelegate_=voters[to];if(delegate_.voted){proposals[delegate_.vote].voteCount+=sender.weight;}else{delegate_.weight+=sender.weight;}}示例代码//投票函数//如果没有人被委托,那么投出自己的一票//如果被委托,那么投出自己持有的所有票数functionvote(uintproposal)public{Voterstoragesender=voters[msg.sender];require(sender.weight!=0,"Hasnorighttovote");require(!sender.voted,"Alreadyvoted.");sender.voted=true;sender.vote=proposal;proposals[proposal].voteCount+=sender.weight;}示例代码//调用此函数,可以看到赢得投票的提案是什么functionwinningProposal()publicviewreturns(uintwinningProposal_){uintwinningVoteCount=0;for(uintp=0;p<proposals.length;p++){if(proposals[p].voteCount>winningVoteCount){winningVoteCount=proposals[p].voteCount;winningProposal_=p;}}}}Part4用智能合约处理支票支票场景我们也可以用智能合约来实现支票的功能,它利用了区块链上的用私钥签名的数字签名不可否认的特性。支票的原本含义是,你持有这张我签名的纸条,就可以找我兑换相应的资金。接下来我们来看看,如何用智能合约实现区块链上的数字支票。1.对一个消息签名,同意一笔支付付款人收款人2.将对应的款项存到智能合约3.向智能合约出示签名消息4.智能合约验证,将款项支付给收款人感谢观看!智能合约的编写、部署与交互

目录1.Solidity语言概述2.编译器remix部署与使用3.Solidity语法4.使用Solidity开发智能合约1.Solidity语言概述

Solidity是用于编写智能合约(smartcontract)的语言,从语法上和python,javascript类似,相比主流编程语言缺少类似多线程,并发等高级特性。

Solidity的特点: 1.Solidity源文件通常以.sol为后缀。2.有特殊的Address的类型。3.有异常出现,所有执行都会被撤回2.编译器remix部署与使用Remix在线编译器:/2.编译器remix部署与使用remix下载:1.准备一台虚拟机,需要先关闭防火墙,提前下好Chrome、Docker2.启动docker服务

命令:#systemctlstartdocker.service3.载入dockerimage并打上tag

命令:#dockerload</home/blockchain/images/remix-ide.tar#dockertagf74866f6d042docker.io/remixproject/remix-ide:latest4.生成并运行remix-idedocker容器

命令:#dockerrun-p8080:80remixproject/remix-ide:latest2.编译器remix部署与使用5.通过Chrome浏览器访问remix-ide,Chrome中输入:8080remix-ide首页2.编译器remix部署与使用添加文件搜索界面插件管理器SOLIDITY图标用于编译运行3.Solidity语法solidity的四种访问权限:

public:任何人都可以调用该函数

private:只有合约本身可以调用该函数

internal:合约默认属性,子合约可以访问父合约的内部函数,

external:只有外部可以调用该函数,而合约内部不能调用。3.Solidity语法solidity的三种修饰符

view:可以自由调用,“查看”区块链的状态而不改变它。

pure:也可以自由调用,既不读取也不写入区块链。

payable:常常用于将代币发送给合约地址。3.Solidity语法solidity函数组成部分:function

函数名字(类型1名字,类型2名字,…,类型n名字)returns(类型1名字,类型2名字,…,类型n名字)示例代码:pragmasolidity^0.4.0;contracthelloworld{functionstringtest(stringinputstr)publicviewreturns(string){returninputstr;}}3.Solidity语法数据类型:值类型、引用类型值类型:整数型(int、uint)、布尔型(bool)、定点数类型(fixed、ufixed)引用类型:数组、结构体Struct、映射运算符:算数运算符、⽐较运算符、逻辑运算符、位运算符、赋值运算符条件运算符。3.Solidity语法逻辑运算符:Solidity⽀持的逻辑运算符,如下表所示:假设变量A的值为10,变量B的值为20。&&(逻辑与)

||(逻辑或)例:(A&&B)为真

例:(A||B)为真!(逻辑⾮)例:!(A&&B)为假3.Solidity语法算数运算符Solidity⽀持的算术运算符,如下表所示:假设变量A的值为10,变量B的值为20。+(加)例:A+B=30

–(减)例:A–B=-10*(乘)例:A*B=200

/(除)例:B/A=2++(递增)例:A++=11

--(递减)例:A–=9%(取模)例:B%A=03.Solidity语法位运算符Solidity⽀持的位运算符,如下表所示:假设变量A的值为2,变量B的值为3。&(位与)

|(位或)例:(A&B)为2.

例:(A|B)为3.^(位异或)

~(位⾮)例:(A^B)为1.

例:(~B)为-4.<<(左移位))

>>(右移位)例:(A<<1)为4.

定例:(A>>1)为13.Solidity语法数组数组是⼀种引⽤类型,它是存储同类元素的有序集合声明数组:typearrayName[arraySize];例子:uintbalance[10];3.Solidity语法初始化固定⻓度数组uintbalance[3]=[1,2,3];以⼀个固定⻓度的数组来赋值给固定⻓度的数组,可以省略数组⻓度,可以创建与前⼀个示例完全相同的数组。:uintbalance[]=[1,2,3];将数组中第3个元素赋值为5。balance[2]=5;访问数组元素:

uintsalary=balance[2];3.Solidity语法结构体Struct定义结构体,struct语句的格式如下:

示例:structstruct_name{ structBook{type1type_name_1;

stringtitle;type2type_name_2;

stringauthor;type3type_name_3;

uintbook_id;}

}要访问结构的任何成员,使⽤成员访问操作符(.)

3.Solidity语法映射声明映射格式为:mapping(_KeyType=>_ValueType)_KeyType可以是除了映射、变⻓数组、合约、枚举以及结构体以外的⼏乎所有类型。_ValueType可以是包括映射类型在内的任何类型。4.使用Solidity开发智能合约转账操作与余额获取代码:contractpaytest{functionpayabletest()payable{}

functiongetbalance(addressaccount)publicviewreturns(uint){returnaccount.balance;}

4.使用Solidity开发智能合约functionthistest()publicviewreturns(address){returnthis;}

functiontransfertest1()payablepublicreturns(uint){addressaccount1=0xeb46e45709DE0b10AECa4A9C9D1800beB6a13C6C;//账户随意

4.使用Solidity开发智能合约account1.transfer(msg.value);returnaccount1.balance;}functiontransfertest2()payablepublicreturns(uint){this.transfer(msg.value);returnthis.balance;}function()payable{}}4.使用Solidity开发智能合约1.将this地址复制查看结果:2.修改remix界面中的value值,然后单击payabletest4.使用Solidity开发智能合约3.原本的地址余额4.转账了8个但是接收了4个,剩下都在合约地址中。4.使用Solidity开发智能合约5.将value设置为0。调用sendtest,返回true6.再次测试感谢观看!!!

区块链+金融

目录1、区块链+支付2、区块链+证券 3、区块链+供应链金融区块链+支付现有支付清结算模式中主要存在的问题有:(1)手续费高、时效性低;(2)支付限制较多,如金额上限、时间限制、币种限制;(3)汇款过程不透明,无法追溯;(4)主要服务于银行客户,没有

银行账户的人群支付服务仍然比较匮乏。区块链+支付

区块链应用到支付领域有哪些好处?

1、更快捷

2、更便宜

3、更多流动性

4、更平等区块链+支付案例分析:招商银行首创区块链直联跨境支付 2017年3月9日,招商银行宣布区块链技术应用于直联跨境支付,通过永隆银行为深圳前海蛇口自贸a区注册企业:南海控股有限公司的香港同名账户汇款,同年12月20日,招商银行通过区块链直联跨境支付应用技术,为境外客户在上海自贸区分账核算单元中开立FTN账户,向其香港同名账户实施了一笔港元汇款,这次跨境支付的成功标志着招行完成了首笔自由贸易区块链跨境支付业务。区块链+证券传统证券的痛点:1、中介成本高。2、发行方和中介机构的信任问题。3、财务信息造假。区块链+证券区块链+证券解决的问题:(一)中小企业由此可获得平等信息话语权和自主融资权(二)为监管提供便利区块链+证券案例:ABS

区块链在一体化ABS交易体系的应用实践之一是ABS一体化平台的搭建,以国金ABS云(下称“ABS云”)为例,该平台立足于区块链底层数据库系统设计以支持ABS项目的运行。以ABS云作为支撑平台,利用区块链技术手段,将ABS业务流程化、电子化、标准化,让市场上众多的资产证券化项目透明清晰地呈现,从而迅速对接资产或资金,降低资产证券化操作门槛,有效控制运作成本。区块链+供应链金融传统供应链金融的问题:(1)信息无法打通,存在信息孤岛。(2)信任无法自证,无法传递。(3)支付结算无法自动完成。 区块链+供应链金融区块链技术与供应链金融相结合,解决目前在区块链融资网络中存在问题。 1.借助多中心集体维护数据,解决信息不对称问题 2.确保贸易真实性,传递核心企业信任 3.借助智能合约,对接金融机构,应收账款自动结算 4.以区块链的信息化平台解决中小企业融资难、融资贵的问题。区块链+供应链金融案例:

微企链是由腾讯旗下的腾讯金融科技与联易融(运营主体为深圳前海联易融金融服务有限公司)共同打造,腾讯将其定义为“供应链金融+区块链+ABS平台”。

2018年末,微企链在运行不到一年的时间内,已服务核心企业71家,接入合作银行12家,服务领域涵盖地产、能源、汽车、医药等。完成链上流水达百亿级别,穿透供应商层级大概一两级,与传统银行贷款相比能降低2到8个点的利率。感谢观看!!!区块链+商业目录1、区块链+电子发票2、区块链+商品防伪溯源3、区块链+积分营销1.区块链+电子发票传统电子发票存在的问题:1、假发票2、虚开发票3、套用发票4、数据孤岛1.区块链+电子发票区块链+电子发票解决: 1、使用区块链公开,解决发票流转过程中的信息孤岛问题。 2、使用区块链时间戳、哈希对发票进行真伪确认 3、使用区块链智能合约自动化处理使成本降低。1.区块链+电子发票案例:腾讯区块链电子发票首张区块链电子发票腾讯区块链电子发票业务流程2.区块链+商品防伪溯源传统的防伪溯源出现的问题:1、数据存储中心化2、易篡改3、政府监管难4、流通环节数据分散

2.区块链+商品防伪溯源区块链+防伪溯源优点:1.商品信息全程实时溯源2.商品信息不可篡改3.有效防治商品造假4.降低物流成本2.区块链+商品防伪溯源兆信股份防伪溯源平台案例:兆信股份防伪溯源平台3.区块链+积分营销传统的企业积分运营体系出现的问题:1、整体发行以及在平台、商户、用户之间流转的过程不透明。2、体系较为封闭,数据可任意篡改。3、积分对账比较繁琐。4、可能出现积分滥发、失效、对账错误等损害用户和商户利益的情况。

3.区块链+积分营销基于区块链+积分联盟优点:1、积分价值最大化2、高运营效率3、透明4、积分可追溯3.区块链+积分营销案例:阳光保险布萌区块链阳光保险布萌区块链感谢观看!!!区块链+教育区块链+教育解决的问题传统教育最主要的三个问题: 1、首先是各类证书作假与学术欺诈。 2、简历等个人经历信息不对称。 3、前在线教育的教学质量无法保证。区块链对教育行业的好处1、使伪造证书变得更加困难2、记录学生学习状况3、出勤和任务完成情况跟踪4、教育基础设施安全5、高效的数据存储区块链+教育应用场景1、数字证书2、学习认证3、教育数据存储4、知识产权案例分析:“区块链+教育”廊坊教育监测平台区块链+教育应用案例廊坊市教育局数据监测平台区块链+教育应用案例Blockcerts-学历证书区块链。学术成绩-分数、成绩报告甚至毕业文凭都可以保存在Blockcerts区块链上,并提供不可篡改的学术历史。感谢观看!!!区块链+医疗区块链+医疗解决的问题传统医疗最主要的三个问题: 1、医疗数据的隐私敏感性造成的数据孤岛。 2、在药品方面,假药、劣药的制造销售难以根除。 3、医疗数据安全难以保障。区块链对医疗的赋能1、对医疗历史数据记录,实现共享数据的防篡改、可追溯。2、对医疗信息进行加密处理,使用户信息匿名。3、使用智能合约,降低成本和容错率。4、使用时间戳和链式结构实现数据信息可追溯。区块链+医疗应用场景一、医疗服务:1、医疗数据管理2、个人电子病历3、智能穿戴设备健康管理4、医疗计费和保险自动化案例分析:阿里健康常州市“医联体+区块链”项目常州医联体区块链应用流程示意图区块链+医疗应用案例区块链+医疗面临的挑战1、医疗机构信息化覆盖程度参差不齐。2、医疗数据来源可靠性问题。3、通证的法律风险。感谢观看!!!

区块链+公益

公益事业的分类和存在的问题

公益事业包括慈善捐助、志愿服务、公益扶贫等领域。

公益事业存在一下三点的问题: 1、工作效率低 2、信息不公开 3、操作不透明区块链+公益的解决方案

区块链技术多层面解决公益事业痛点 1、区块链可以实现信息公开透明 2、区块链可以实现高效率的多方协调 3、区块链可以实现有效的激励区块链+公益案例 公益项目Amply——学校补贴(南非)该项目是利用区块链技术建立基于成果的融资平台的一个案例。此平台帮助学校教师以数字化方式获取政府补贴所需的学校出勤记录。在南非,600万6岁以下的儿童中约有三分之二生活贫困,许多儿童缺乏适当的身份证明。这使得他们实际上无法被政府和社会服务(如对儿童早期发展学校的补贴)识别。此外,为了获得地方政府的补贴,这些学校必须通过季度报告申请补贴,其中包括大量的文书工作、官僚程序和容易出错的提交流程。“有时我们大老远跑到部门,只是发现了表格上的错误并要求我们重新做季度报告。有时文书工作在部门丢失了,就需要我们重新提交”。区块链+公益案例 Amply手机应用的第一个版本可以让学校自动收集考勤数据,并将其提交给社会发展部门。每天早上,老师或校长都会在应用程序中记录每个孩子的出勤情况。该App的基础是区块链基础设施和智能合约,基于此,第三方评估者可以验证服务提供商的出勤情况。 自2016年11月试点以来,该项目已记录了87个中心和122个服务提供商的3327名儿童的81168次出勤记录。Amply的报告中称,它每月为教师节省了4000多个小时。 Amply背后的区块链架构有助于保存一份不可更改的学校出勤记录,该记录可以使政府实现自动付款。收集到的数据还将有助于建立儿童在学校间流动的身份记录,并有助于社会发展部门提供其他服务。区块链+公益案例 在充分试点的基础上,Trustlab建立了ixo基金会,以进一步开发开源协议。该基金会与包括奇点大学(SingularityUniversity)的SUVentures、GoldStandard、微软研究院等主要机构合作,开发这些协议的应用程序,使项目能够经济有效地收集、核实和共享影响力数据。 2018年12月8日,基金会挖掘出ixo公共区块链的第一块,并计划使用影响力代币(impacttokens)创建一个全球生态系统来资助、交付和评估项目。感谢观看!!!区块链+智慧城市智慧城市的概念智慧城市,是指以城市的生命体属性为基本视角,运用区块链、人工智能、大数据、物联网、云计算等新一代技术手段,一方面提高市民生活水平和质量,另一方面提升城市公共管理的运行效率和服务,从而能够实现科学和可持续发展的信息化城市形态。区块链技术在智慧城市中应用范围1、智慧交通2、智慧能源3、智慧环保1.智慧交通 21世纪以来,各国政府积极助推现代化交通体系建设,尤其重视交通运输智能化与信息化建设。智慧交通、数字化信息的发展成功赋能集约化交通体系的构建,成为解决现代交通痛点的核心方向。信息化、网络化、智能化的交通运输系统建设能有力推动国家交通体系的跨越式发展,并进一步缓解资源与环境压力。1.智慧交通对于交通运输行业,区块链主要在以下几个方面进行赋能: 1、车辆认证管理。 2、助力智慧交通运输网络的优化。 3、汽车碳排放上链推动节能减排。1.智慧交通案例分析: 近年来,频频发生的黑客攻击汽车事件,比如通过一段简单的代码成功实现了对车载网络的破坏性攻击,完成诸如刹车、改变车速、播放音乐、将乘客锁在车内等行为。汽车网络安全直接影响汽车安全、个人隐私,甚至危及公共安全。而通过在车联网系统中引入区块链,将会对现有的车联网安全实现重大提升。 相比传统车联网的网络安全防护而言,使用区块链的车联网通过共识机制实现更加安全可靠的认证存储并能提供可持续性服务,并且,车联网的数据难以被篡改。2.智慧能源

对于智慧能源而言,区块链最容易导入的应用是透明的能源交易多边市场和碳排放交易市场,为其提供高效、可信的实时交易手段。以电力为例,区块链可以用来方便地记录发电、配电、输电、调度、用电、售电等各个环节的数据,提供公正、可追溯、透明的审计、监管记录,依靠区块链的智能合约技术,实现发、输、变、配、用、调等全过程的资源协调配置,大大

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论