发布网友 发布时间:2024-09-26 18:41
共1个回答
热心网友 时间:2024-09-29 14:41
区块链的核心技术包含了哪些?重庆金窝窝分析区块链的核心技术如下:
1-区块、链
2-分布式结构——开源的、去中心化的协议
3-非对称加密算法
4-脚本
区块链的三大核心技术是什么?区块链运作的7个核心技术介绍2018-01-15
1.区块链的链接
顾名思义,区块链即由一个个区块组成的链。每个区块分为区块头和区块体(含交易数据)两个部分。区块头包括用来实现区块链接的前一区块的哈希(PrevHash)值(又称散列值)和用于计算挖矿难度的随机数(nonce)。前一区块的哈希值实际是上一个区块头部的哈希值,而计算随机数规则决定了哪个矿工可以获得记录区块的权力。
2.共识机制
区块链是伴随比特币诞生的,是比特币的基础技术架构。可以将区块链理解为一个基于互联网的去中心化记账系统。类似比特币这样的去中心化数字货币系统,要求在没有中心节点的情况下保证各个诚实节点记账的一致性,就需要区块链来完成。所以区块链技术的核心是在没有中心控制的情况下,在互相没有信任基础的个体之间就交易的合法性等达成共识的共识机制。
区块链的共识机制目前主要有4类:PoW、PoS、DPoS、分布式一致性算法。
3.解锁脚本
脚本是区块链上实现自动验证、自动执行合约的重要技术。每一笔交易的每一项输出严格意义上并不是指向一个地址,而是指向一个脚本。脚本类似一套规则,它约束着接收方怎样才能花掉这个输出上锁定的资产。
交易的合法性验证也依赖于脚本。目前它依赖于两类脚本:锁定脚本与解锁脚本。锁定脚本是在输出交易上加上的条件,通过一段脚本语言来实现,位于交易的输出。解锁脚本与锁定脚本相对应,只有满足锁定脚本要求的条件,才能花掉这个脚本上对应的资产,位于交易的输入。通过脚本语言可以表达很多灵活的条件。解释脚本是通过类似我们编程领域里的“虚拟机”,它分布式运行在区块链网络里的每一个节点。
4.交易规则
区块链交易就是构成区块的基本单位,也是区块链负责记录的实际有效内容。一个区块链交易可以是一次转账,也可以是智能合约的部署等其他事务。
就比特币而言,交易即指一次支付转账。其交易规则如下:
1)交易的输入和输出不能为空。
2)对交易的每个输入,如果其对应的UTXO输出能在当前交易池中找到,则拒绝该交易。因为当前交易池是未被记录在区块链中的交易,而交易的每个输入,应该来自确认的UTXO。如果在当前交易池中找到,那就是双花交易。
3)交易中的每个输入,其对应的输出必须是UTXO。
4)每个输入的解锁脚本(unlocking)必须和相应输出的锁定脚本(locking)共同验证交易的合规性。
5.交易优先级
区块链交易的优先级由区块链协议规则决定。对于比特币而言,交易被区块包含的优先次序由交易广播到网络上的时间和交易额的大小决定。随着交易广播到网络上的时间的增长,交易的链龄增加,交易的优先级就被提高,最终会被区块包含。对于以太坊而言,交易的优先级还与交易的发布者愿意支付的交易费用有关,发布者愿意支付的交易费用越高,交易被包含进区块的优先级就越高。
6.Merkle证明
Merkle证明的原始应用是比特币系统(Bitcoin),它是由中本聪(SatoshiNakamoto)在2009年描述并且创造的。比特币区块链使用了Merkle证明,为的是将交易存储在每一个区块中。使得交易不能被篡改,同时也容易验证交易是否包含在一个特定区块中。
7.RLP
RLP(RecursiveLengthPrefix,递归长度前缀编码)是Ethereum中对象序列化的一个主要编码方式,其目的是对任意嵌套的二进制数据的序列进行编码。
区块链的核心技术是?区块链的核心技术组成:无论是公链还是联盟链,至少需要四个模块组成:P2P
网络协议、分布式一致性算法(共识机制)、加密签名算法、账户与存储模型。这就是区块链的核心技术,至于详细内容可参考有关这方面的书籍。
区块链核心技术攻关目标
????重点突破涵盖安全隐私保护、开放跨链协议、高效链上链下协同和安全智能合约机制等区块链应用支撑技术。
1.安全隐私保护技术。重点在安全多方计算、零知识证明、安全传输、同态加密等方面取得技术突破。
2.链链互联互通技术。重点在跨链协议、同构/异构跨链架构及安全性、扩展性和性能等方面取得突破。
3.链上链下协同技术。重点在链上链下数据协同访问控制、高效存储与管理等技术取得突破。
4.安全智能合约技术。重点在智能合约形式化验证与安全漏洞风险评测、智能合约审计等方面取得突破。
5.区块链监管技术。重点在区块链穿透式监管技术、动态监测技术、区块链风险隔离与控制等方面取得技术突破和应用。
???????????????????????????From:浙江省区块链技术和产业发展规划(2020-2025)
区块链核心技术-P2P网络点对点网络是区块链中核心的技术之一,主要关注的方面是为区块链提供一个稳定的网络结构,用于广播未被打包的交易(交易池中的交易)以及共识过的区块,部分共识算法也需要点对点的网络支撑(如PBFT),另外一个辅助功能,如以太坊的消息网络,也需要点对点网络的支持。
P2P网络分为结构化和非结构化网络两类。结构化网络采用类似DHT算法来构建网络结构;非结构化网络是一种扁平的网络,每个节点都有一些邻居节点的地址。
点对点网络的主要职责有维护网络结构和发送信息这两个方面。网络结构要关注的是新节点的加入和网络更新这两个方面,而发送信息包括广播和单播两个方面
如何建立并维护点对点的整个网络?节点如何加入、退出?
网络结构的建立有两个核心的参数,一个是每个节点向外连接的节点数,第二个是最大转发数。
新节点对于整个网络一无所知,要么通过一个中心的服务获取网络中的一些节点去连接,要么去连接网络中的“种子”节点。
网络更新处理当有新节点加入或者节点退出,甚至原来一些节点网络不好,无法连接,过一段时间又活了,等等这些情况。一般通过节点已有的连接来广播这些路由表的变化。需要注意的是,因为点对点网络的特殊性,每个节点的路由表是不一样的(也叫partialview)
广播一般采用泛洪协议,即收到转发方式,使的消息在网络中扩散,一般要采用一些限制条件,比如一条消息要设置最大的转发数,避免网络的过渡负载。
单播需要结构化网络结构支持,一般是DHT,类似于DNS解析的方式,逐跳寻找目标节点地址,之后进行传输,并且更新本地路由表。
要想快速检索信息,有两种数据结构可以使用,一种是树类型,如AVL树、红黑树、B树等;另外一类是hash表。
哈希表的效率比树更高,但是需要占用更多的内存。
信息的表示采用键值对的方式,即一个键对应一个值,我们要查找的是key,值是附着的信息。
哈希表要解决的问题是如何均匀地为每一个key分配一个存储位置。
这里面有两个重点:1.是为key分配一个存储地点,这个分配算法是固定的,保证存储的时候和查找的时候使用同一个算法,不然存进去之后会找不到;2.是均匀地分配,不能有点地方存放数据多,有点放存放数据少。
一般语言里面的hashtable、map等结构使用这个技术来实现,哈希函数可以直接使用取模函数,key%n,这种方式,n代表有多少个地方,key是整数,如果key是其他类型,需要先进行一次哈希,将key转为整数。这种方式可以解决上面的两个需求,但是当n不够大的时候(小于要存储的数据),会产生冲突,一个地方一定会有两个key要存储,这时候,需要在这个地方放一个链表,将分配到同一地点、不同key,顺序摆放。当一个地点放的key太多后,链表的查找速度太慢,要转化为树类型结构(红黑树或者AVL树)。
上面说过,哈希表效率很高,但是占用内容,使用多台机器就可以解决这个限制。在分布式环境中,可以将上述的地点理解为计算机(后面成为节点),即如何将一个key映射到一个节点上,每个节点有一个节点ID,即key-nodeid的映射,这个映射算法也要固定。
这个算法还有一个非常重要的要求,即scalebility,当新节点加入和退出时候,需要迁移的key要尽量少。
这个映射算法有两种典型结构,一个是环形,一个是树形;环形的叫一致性哈希算法,树形的典型叫kademlia算法。
选点算法就是解决key-nodeid的映射算法,形象的来说就是为一个key选择它生命中的她(节点)。
假设我们使用32哈希,那么总共能容纳的key的数据量是2**32,称之为hash空间,把节点的ID映射成整数,key也映射成整数。把key哈希和节点哈希值接的差值的叫做距离(负数的话要取模,不用绝对值),比如一个key的哈希是100(整数表示),一个节点的哈希是105,则这两个的距离是105-100=5。当然使用其他距离表示也可以,比如反过来减,但是算法要固定。我们把key映射(放到)距离他最近的节点上。距离取模的话,看起来就是把节点和key放到一个环上,key归属到从顺时针角度离它最近的节点上。
kademlia算法的距离采用的是key哈希与节点哈希异或计算之后的数值来表示(整数),从左往右,拥有越多的“相同前缀”,则距离越近,越在左边位置不一样,距离越远。
树结构的体现是,将节点和key看成树的节点,这个算法支持的位数是160bit,即20个8字节,树的高度为160,每个边表示一位。
选点的算法和一致性哈希相同,从所有节点中,选择一个距离key距离最小的节点作为这个key的归宿。
由于是在分布式环境中,为了保证高可用,我们假设没有一个中心的路由表,没有这个可以看到全貌的路由表,带来了一些挑战,比如如何发现节点、查找节点?
在P2P网络中,常用的方法是每个节点维护一个部分路由表,即只包含部分节点的路由信息。在泛洪算法中,这些节点上随机的;在DHT算法中,这个路由表是有结构的,维护的节点也是有选择性的。那么如何合理的选择需要维护路由信息的节点呢?
一个朴素的做法是,每一个节点保存比他大的节点的信息,这样可以组成一个环,但是这样做的话,有一个大问题和一个小问题。大问题是,每个节点知道的信息太少(只有下一个节点的哈希和地址),当给出一个key时,它不知道网络中还有没有比它距离这个key距离还短的节点,所以它首先判断key是否属于自己和下一个节点,如果是,那么这个key就属于下一个节点,如果不是就调用下一个节点同样的方法,这个复杂度是N(节点数)。一个优化的方法是,每个节点i维护的其他节点有:i+21,i+22,....i+2**31,通过观察这个数据,发现由近到远,节点越来越稀疏。这样可以把复杂度降低到lgN
每个节点保存的其他节点的信息,包括,从左到右,每一位上与本节点不同的节点,最多选择k个(算法的超参数)。比如在节点00110上(为演示起见,选择5位),在要保存的节点路由信息是:
1****:xxx,....,xxx(k个)
01:xxx,....,xxx(k个)
000:xxx,....,xxx(k个)
0010:xxx,....,xxx(k个)
00111:xxx,....,xxx(k个)
以上为一行称为k-bucket。形象的来看,也是距离自己越近,节点越密集,越远,节点越稀疏。这个路由查找、节点查找的算法也是lgN复杂度。