【区块链】区块链技术指南

在这里插入图片描述
区块链分为公有链、私有链、联盟链。
从链与链的关系来分:主链、侧链。

多链在节点的“握手”连接过程如下:
1)每个节点提供它的公共地址,使其他节点能将它的地址包括在允许连接的清单中;
2)每个节点验证邻节点的地址是在它的授权连接的节点清单里
3)每个节点发一个盘问消息给其他节点
4)每个节点发回一个回复盘问信息的签名,证明拥有他们的对应公共地址的私钥
5)如果双方对对方回复不满意,可随时中断连接

多链提供一个在企业内快速部署私链的解决方案。

侧链的属性:
1)一个用户在一条链上的资产被转移到另一条链上后,还应该可以转移回到原来链上的同一名下
2)资产转移应该没有对手卷款逃跑的风险,也就是不诚实的用户没能力阻碍资产转移的发生
3)资产的转移必须是原子操作,也就是要么全发生,要么不发生。不应该出现丢失资产或欺诈性增加资产的情况
4)侧链间应该有防火墙。一条侧链上的软件错误造成链上资产的丢失或增加不会影响另一条链上的资产的丢失或增加
5)即使在资产的转移过程中发生区块链的重组,也不应该出现问题。侧链之间最好能相互独立。
6)用户不应需要跟踪不经常使用的侧链。

在这里插入图片描述
在这里插入图片描述
应用:金融领域的结算和清算、数字货币、跨境支付、财产保险

区块链技术通过建立一个共同维护且不可被篡改的数据库来记录过去的所有交易记录和历史数据,所有的数据都是分布式存储且公开透明的。
区块链本质上是一个对等网络的分布式账本数据库。
一个完整的区块链系统包含了很多技术,其中有存储数据的数据区块及其之上的数字签
名、时间戳等技术,有作为支撑的P2P网络和维护系统的共识算法,有挖矿和工作量证明机
制,有匿名交易机制和比特币钱包,还有链龄、UTXO、Merkle树、双花等相关技术概念。

数据区块
包括区块头和区块体

在这里插入图片描述
区块头封装了当前的版本号(Version)、前一区块地址(Prev-block)、时间戳
(Timestamp)、随机数(Nonce)、当前区块的目标哈希值(Bits)、Merkle树的根值
(Merkle-root)等信息。
时间戳可以作为存在性证明(Proof of Existence)的重要参数,它能够证实特定数据必然在某特定时刻是的确存在的,这保证了区块链数据库是不可篡改和不可伪造的,这也为区块链技术应用于公证、知识产权注册等时间敏感领域提供了可能。

UTXO交易模式

UTXO(Unspent Transaction Outputs)是未花费的交易输出,它是比特币交易过程中的
基本单位。除创世区块以外,所有区块中的交易(Tx)会存在若干个输入(Tx_in,也称资
金来源)和若干个输出(Tx_out,也称资金去向),当前整个区块链网络中的UTXO会被储存在每个节点中,只有满足了来源于UTXO和数字签名条件的交易才是合法的。所以区块链系统中的新交易并不需要追溯整个交易历史,就可以确认当前交易是否合法。

哈希函数有着很多适合存储区块链数据的优点:
1)哈希函数处理过的数据是单向性的,通过处理过的输出值几乎不可能计算出原始的
输入值;
2)哈希函数处理不同长度的数据所耗费的时间是一致的,输出值也是定长的;
3)哈希函数的输入值即使只相差一个字节,输出值的结果也会迥然不同。

P2P网络

P2P网络(peer-to-peer network,对等网络)是一种在对等者(peer)之间分配任务和工
作负载的分布式应用架构,是对等计算模型在应用层形成的一种组网或网络形式。
网络的节点根据存储数据量的不同可以分为全节点和轻量级节点,全节点存储了从创世区块以来的所有区块链数据(比特币网络现在大约有几十GB,且还在不断增长中)。全节点的优点是进行数据校验时不需要依靠别的节点,仅依靠自身就可以完成校验更新等操作,缺点是硬件成本较高。轻量级节点只需要存储部分数据信息,当需要别的数据时可以通过简易支付验证方式(Simplified Payment Verification,SPV)向邻近节点请求所需数据来完成验证更新。

扫描二维码关注公众号,回复: 15333847 查看本文章

在这里插入图片描述

椭圆曲线加密算法(ECC)

在这里插入图片描述

数字签名

数字签名:对消息进行哈希运算,然后用自己的私钥进行解密,发送给接收者,接收者用发送者的公钥进行解密,然后把得到的哈希值与对方发来的消息进行计算后的哈希值进行比较,看是否一样。

基础架构

在这里插入图片描述
首先,在网络层之上,区块链是建立在IP通信协议和对等网络的基础上的一个分布式系
统,每一个节点都参与消息的转发。
其次,在数据层面上,区块链就是一个只可追加、不可更改的分布式数据库系统,是一
个分布式账本。
再次,在应用层面,我们可以用区块链代替传统的登记、清算系统。
架构特点:区块链具有去中心化、可靠数据库、开源可编程、集体维护、安全可信、交易准匿名性等特点。

区块链即由一个个区块组成的链。每个区块分为区块头和区块体(含交易数
据)两个部分。区块头包括用来实现区块链接的前一区块的哈希(PrevHash)值(又称散列
值)和用于计算挖矿难度的随机数(nonce)。前一区块的哈希值实际是上一个区块头部的
哈希值,而计算随机数规则决定了哪个矿工可以获得记录区块的权力。

在这里插入图片描述

共识机制

Pow(工作量证明): 矿工通过把网络尚未记录的现有交易打包到一个区块,然后不断遍历尝试来寻找一个随机数,使得新区块加上随机数的哈希值满足一定的难度条件,找到满足条件的随机数,就相当于确定了区块链最新的一个区块,也相当于获得了区块链的本轮记账权。矿工把满足挖矿难度条件的区块在网络中广播出去,全网其他节点在验证该区块满足挖矿难度条件,同时区块里的交易数据符合协议规范后,将各自把该区块链接到自己版本的区块链上,从而在全网形成对当前网络状态的共识。
优点: 完全去中心化,节点自由进出,避免了建立和维护中心化信用机构的成本。只要
网络破坏者的算力不超过网络总算力的50%,网络的交易状态就能达成一致。
缺点: 目前比特币挖矿造成大量的资源浪费;另外挖矿的激励机制也造成矿池算力的高
度集中,背离了当初去中心化设计的初衷。更大的问题是PoW机制的共识达成的周期较长,
每秒只能最多做7笔交易,不适合商业应用。
PoS(权益证明): 要求节点提供拥有一定数量的代币证明来获取竞争区块链记账权的一种
分布式共识机制。如果单纯依靠代币余额来决定记账者必然使得富有者胜出,导致记账权的
中心化,降低共识的公正性,因此不同的PoS机制在权益证明的基础上,采用不同方式来增
加记账权的随机性来避免中心化。
·优点:在一定程度上缩短了共识达成的时间,降低了PoW机制的资源浪费。
·缺点:破坏者对网络攻击的成本低,网络的安全性有待验证。另外拥有代币数量大的节
点获得记账权的几率更大,会使得网络的共识受少数富裕账户支配,从而失去公正性。
DPoS(股份授权证明): 类似于董事会投票。比特股(bitshares)采用的PoS机制
是持股者投票选出一定数量的见证人,每个见证人按序有两秒的权限时间生成区块,若见证
人在给定的时间片不能生成区块,区块生成权限交给下一个时间片对应的见证人。持股人可
以随时通过投票更换这些见证人。DPoS的这种设计使得区块的生成更为快速,也更加节能。
·优点:大幅缩小参与验证和记账节点的数量,可以达到秒级的共识验证。
·缺点:选举固定数量的见证人作为记账候选人有可能不适合于完全去中心化的场景。另
外在网络节点数少的场景,选举的见证人的代表性也不强。

分布式一致性算法是基于传统的分布式一致性技术。其中有分为解决拜占庭将军问题的
拜占庭容错算法,如PBFT。另外解决非拜占庭问题的分布式一致性算法(Pasox、Raft)
·优点:实现秒级的快速共识机制,保证一致性。
·缺点:去中心化程度不如公有链上的共识机制;更适合多方参与的多中心商业模式。

解锁脚本

脚本是区块链上实现自动验证、自动执行合约的重要技术。每一笔交易的每一项输出严
格意义上并不是指向一个地址,而是指向一个脚本。脚本类似一套规则,它约束着接收方怎
样才能花掉这个输出上锁定的资产。

交易的合法性验证也依赖于脚本。目前它依赖于两类脚本:锁定脚本与解锁脚本。锁定
脚本是在输出交易上加上的条件,通过一段脚本语言来实现,位于交易的输出。解锁脚本与
锁定脚本相对应,只有满足锁定脚本要求的条件,才能花掉这个脚本上对应的资产,位于交
易的输入。通过脚本语言可以表达很多灵活的条件。解释脚本是通过类似我们编程领域里
的“虚拟机”,它分布式运行在区块链网络里的每一个节点。

两种脚本: 1)P2PKH(Pay-to-Public-Key-Hash),即支付给公钥的哈希地址,接收方只需要使用地址对应的私钥对该输出进行签名,即可花掉该输出。
2)P2SH(Pay-to-Script-Hash),即支付脚本的哈希。以多重签名来举例,它要求该输出要有N把私钥中的M把私钥(M≤N)同时签名才能花掉该资产,它类似于现实生活中需要多把钥匙才能同时打开的保险柜,或是多人签名才能使条约生效一样,只是它是自动执行。

在这里插入图片描述
在上述的两种脚本规则里,Pubkey script代表锁定脚本,Signature script代表解锁脚本。
OP_开头的单词是相关的脚本命令,也是“虚拟机”所能解析的指令。这些命令规则根据
Pubkey script的不同来进行划分,它也决定解锁脚本的规则。

交易规则

区块链的交易就是构成区块的基本单位,也是区块链负责记录的实际有效内容。
交易即指一次支付转账。其交易规则如下:
1)交易的输入和输出不能为空。
2)对交易的每个输入,如果其对应的UTXO输出能在当前交易池中找到,则拒绝该交
易。因为当前交易池是未被记录在区块链中的交易,而交易的每个输入,应该来自确认的
UTXO。如果在当前交易池中找到,那就是双花交易。
3)交易中的每个输入,其对应的输出必须是UTXO。
4)每个输入的解锁脚本(unlocking script)必须和相应输出的锁定脚本(locking script)
共同验证交易的合规性。

交易优先级
两种:1)交易广播到网络上的时间和交易额的大小决定。随着交易广播到网络上的时间的增长,交易的链铃增加,交易的优先级就被提高。
2)以太坊内,发布者愿意支付的费用越高越会被包含进区块。

区块包含:
1)上一区块头的哈希值
2)时间戳
3)挖矿难度值
4)工作量证明随机数(nonce)
5)包含该区块交易的Merkle树的根哈希
以太坊的每一个区块头中并非只包含一棵Merkle树,而是包含了3棵Merkle树:
·交易(Transactions)
·收据(Receipts,基本上,它是展示每一笔交易影响的数据条)
·状态(State)

RLP(Recursive Length Prefix,递归长度前缀编码)是Ethereum中对象序列化的一个主
要编码方式,其目的是对任意嵌套的二进制数据的序列进行编码。

在这里插入图片描述
以太坊是个平台和编程语言,包括数字货币以太币(Ether),以及用来构建和发布分布 式应用的以太脚本(EtherScript)。
以太坊的另一半重要特性是提供一个完整的编程语言环境,有时也被叫作以太脚本。

以太坊也是区块链与智能合约的完美结合,是智能合约的完整解决方案,被设计 成了一个通用的去中心化平台,拥有一套完整的、可以扩展其功能的工具,在P2P网络、加 密、HttpClient等技术的支持下实现了一个类似于比特币的区块链。它通过工作量证明机制实 现共识,由矿工挖矿,通过对新的网络协议的制定实现对区块链的同步等操作。不同于比特 币的是,在以太坊上可以任意编写智能合约,通过智能合约实现强大的功能,实现去中心化 应用的开发。在以太坊上部署的智能合约运行在以太坊特有的虚拟机上,通过以太坊虚拟机 和RPC接口与底层区块链进行交互。

在这里插入图片描述

以太坊的状态转换函数为APPLY(S,TX)->S’,可以定义如下:

1)检查交易的格式是否正确,签名是否有效,以及随机数是否与发送者账户的随机数 匹配。如否,返回错误。
2)计算交易费用fee=STARTGAS*GASPRICE,并从签名中确定发送者的地址。从发送 者的账户中减去交易费用和增加发送者的随机数。如果账户余额不足,返回错误。
3)设定初值Gas=STARTGAS,并根据交易中的字节数减去一定量的燃料值。
4)从发送者的账户转移价值到接收者账户。如果接收账户还不存在,创建此账户。如 果接收账户是一个合约,运行合约的代码,直到代码运行结束或者燃料用完。
5)如果因为发送者账户没有足够的费用或者代码执行耗尽燃料导致价值转移失败,恢 复原来的状态,但是还需要支付交易费用,交易费用加至矿工账户。 6)若代码执行成功,将所有剩余的燃料归还给发送者,消耗掉的燃料作为交易费用发 送给矿工。
6)智能合约就像能在以太坊的平台上创建的包含价 值而且只有满足某些条件才能打开的加密箱子,并且因为图灵完备性、价值意识(valueawareness)、区块链意识(blockchain-awareness)和记录多状态所增加的功能而比比特币 脚本所能提供的智能合约强大得多。

以太坊合约的代码是使用低级的基于堆栈的字节码的语言写成的,被称为“以太坊虚拟 机代码”或者“EVM代码”。代码由一系列字节构成,每一个字节代表一种操作。
操作可以访问3种存储数据的空间:

  • 1)堆栈,一种后进先出的数据存储,入栈、出栈的基本单位为32字节。
  • 2)内存,可无限扩展的字节队列。
  • 3)合约的长期存储,一个密钥/数值的存储,其中密钥和数值都是32字节大小。与计算 结束即重置的堆栈和内存不同,存储内容将长期保持。

一个DApp是由智能合约和客户端代码构成的。
Augur(www.augur.net ),一个正在开发去中心化预测系统。
Maker(www.makerdao.com ),一个正在开发中的金融类去中心化自治组织。
WeiFund,一个正在开发中的去中心化众筹平台。
Boardroom,一个正在开发中的DAO管理平台。

贷券(Decentralized Autonomous Insured Bond)简称Dai或者Dai Bond,是一种可转让 的、彼此等价可互换的“加密债券”,它流通于信贷系统中,使用者无需事先认证,同时又是 低风险的。

比特币的共识机制是建立在用SHA256算法加密的作业证据基础之上的。从此,共识机 制的创新进入了一个狂热的发展阶段。一些代币采用了各式各样的算法,如:Scry pt、 Scrypt-N、Skein,Groestl、SHA3、X11、Blake等。

区块链

  • 1)一个分布式的链接账本,每个账本就是一个“区块”;
  • 2)基于分布式的共识算法来决定记账者;
  • 3)账本内交易由密码学签名和哈希算法保证不可篡改;
  • 4)账本按产生时间顺序链接,当前账本含有上一个账本的哈希值,账本间的链接保证 不可篡改;
  • 5)所有交易在账本中可追溯。
    分布式是一种计算模式,指在一个网络中,各节点通过相互传送消息来通信和协调行 动,以求达到一个共同目标.

在区块链中,分布式包括“完全去中心”“部分去中心”和“部分中心”3种模式,分别对应 区块链的3种部署模式:“公共链”“联盟链”和“私有链”。分布式意味着在区块链网络中不存 在一个中心节点,该节点负责生成、修改、保管所有账本。

完全去中心 一种网络的架构模式,在该模式下网络没有拥有者,完全对外开放。网络中每个节点都 可选择拥有相同的权限。在完全去中心的区块链网络上,所有节点都可以读写区块链数据, 都可作为记账的候选节点参与共识流程,有机会参与账本的生成和记账。

部分去中心 一种网络的架构模式,在该模式下网络属于一个联盟共同所有,网络只对联盟成员开 放。网络中每个节点被赋予不同权限。在“部分去中心”的区块链网络上,节点根据所赋予权 限读写区块链数据,参与共识流程以及参与账本的生成和记账。
部分中心 一种网络的架构模式,在该模式下网络属于一个所有者,网络只对所有者内部成员开 放。网络中每个节点被赋予不同权限。在“部分中心”的区块链网络上,节点根据所有者赋予 的权限读写区块链数据,参与共识流程以及参与账本的生成和记账。

架构有两个层面的涵义。一个是静态层面的,主要是勾画系统边界、结构、组成的组件 以及组件之间的关联关系;另一个是动态层面,主要是规范组件的行为以及组件之间的交互 协议。根据一个IT系统的架构,可以界定该系统的功能特性和一些非功能特性。

比特币架构总体上分为两部分,一部 分是前端,包括钱包(Wallet)或图形化界面;另一部分是运行在每个节点的后台程序,包 括挖矿、区块链管理、脚本引擎以及网络管理等功能。

在这里插入图片描述
钱包保存用户的私钥数据库,并管理用户的余额,提供比特币交易(支付、转账)功 能。 钱包分为两种:非决定性钱包和决定性钱包。 1)非决定性钱包(Nondeterministic Wallet):该类钱包直接保存私钥,私钥数据保存 在Berkeley DB上。所谓决定性(deterministic),指的是私钥是否由种子生成。如果是就 叫“决定性”,反之就叫“非决定性”。

决定性钱包(Deterministic Wallet):目前建议使用的一种钱包。该类钱包所有的私 钥都由一个私钥种子(Seed)通过单向哈希算法生成,因此备份该类钱包非常容易,只要备 份私钥种子,就可以利用种子一次性恢复所有的私钥。决定性钱包又分两种类型,类型1是 普通决定性钱包,其私钥种子直接生成所有私钥;类型2是层级决定性钱包(Hierarchical Deterministic Wallet),它的私钥保存在一个树形结构,由一个总私钥生成父私钥,父私钥 生成子私钥等。

钱包从部署场景来说,分为4种,分别为:移动钱包、桌面钱包、互联网钱包,以及纸 钱包。
桌面钱包也分两种,一种是厚钱包(ThickWallet),另一种是薄钱包(Thin Wallet)。 厚钱包下载整条区块链,并进行完整的交易校验。

薄钱包不下载整条区块链,而是采用SPV等方式来验证与用户相关的支付交易,例如 Multibit钱包。另外像Electrum钱包也算薄钱包,它本身不使用SPV方式,但也不保存完整区 块链,而是信任它的服务端的验证.

厚钱包的优点是安全,缺点是有交易全验证的开销,适合于资金安全性要求高的场景, 比如非小额支付等场景。薄钱包的优点是灵活高效,但安全性不高,适合于小额支付场景。
纸钱包用于将私钥进行冷备份,可以用于防范由于电脑或USB介质损坏所造成的私钥丢失。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_40500099/article/details/125765283