区块链技术基础(笔记)

一、区块链本质上是一个对等网络(peer-to-peer)的分布式账本数据库。
二、区块链本身其实是一串链接的数据区块,其链接 指针是采用密码学哈希算法对区块头进行处理所产生的区块头哈希值。
三、基本概念
1、 数据区块:
    比特币的交易会保存在数据区块中,大约每10分钟会产生一个区块,每个数据区块一般包括区块头(Header)和区块体(Body)两部分。
    
    区块体中则主要包含交易计数和交易详情。

    交易详情就是比特币系统中的记账本,每一笔交易都会被永久地记入数据区块中,并且所有人都可以查看。

    区块体中的Merkle树将会对每一笔交易进行数字签名,如此可以确保每一笔交易都不可伪造且没有重复交易。
    所有的交易将通过Merkle树的Hash过程产生一个唯一Merkle根值记入区块头。

2、挖矿与分叉问题
3、时间戳和不可篡改性
    在比特币系统中,获得记账权的节点在链接节点时需要在区块头中加盖时间戳,用于记录当前区块数据的写入时间。每一个随后区块中的时间戳都会对-前一个时间戳进行增强,形成一个时间递增的链条。时间戳可以作为存在性证明(Proof of existence)的重要参数。
4、分布式数据库
5、UTXO交易模式
    未花费交易输出,是比特币交易过程中的基本单位。
6、哈希函数
7、Merkle树
    比特币区块链系统中采用的是Merkle二叉树。优点:极大的提高了区块链的运行效率和可扩展性。使得区块头只需包含根哈希值而不必封装所有底层数据,这使得哈希运算可以高速地运行在智能手机和物联网设备上;其次是Merkle树可支持“简化支付验证协议”(SPV),即在不运行完整区块链网络节点的情况下,也能够对交易数据进行验证。
    

8、双重支付(双花问题)
    利用货币的数字特征用“同一笔钱”完成两次或者多次支付。区块链技术通过区块链接形成的时间戳技术加上验证比特币是否满足UTXO和数字签名,有效的避免了双花问题。
9、P2P网络
10、加密算法
    除了哈希算法外,还存在一种为交易加密的非对称加密算法(椭圆曲线加密算法)。非对称加密算法指的是存在一对数学相关的秘钥,使用其中一个秘钥进行加密的数据信息,只能使用另一个秘钥才能对该信息进行解密。这对秘钥中,对外公开的秘钥叫公钥,不公开的秘钥叫私钥。
    比特币系统一般从操作系统底层的一个密码学安全的随机源中取出一个256位随机数作为私钥,私钥总数为2*256 个,所以很难通过遍历所有可能的私钥得出与公钥的对应的私钥。用户使用的私钥还会通过SHA256和Base58转换成易书写和识别的50位长度的私钥,公钥则首先由私钥和Secp256k1椭圆曲线算法生成65字节长度的随机数。
    
11、数字签名
    数字签名就是在信息后面加上另一段内容,作为发送者的证明并且证明信息没有被篡改。一般是发送者将信息用哈希算法处理得出一个哈希值,然后用私钥对该哈希值进行加密,得出一个签名。然后发送者将信息和签名一起发送给接受者。接受者使用发送者的公钥对签名进行解密,还原出哈希值,再通过哈希算法来验证信息的哈希值和解密签名还原出的哈希值是否一致,从而可以鉴定信息是否来自发送者或者验证信息是否被篡改。
12、比特币的隐私模型
     
四、框架与特点
    1、框架基础
    目前大多数区块链技术的应用与比特币类似,大部分是在比特币架构基础之上的扩展。区块链的基础架构分为三层:
    
在网络层之上,区块链是建立在IP通信协议和对等网络的基础之上的一个分布式系统。
在数据层面上,区块链就是一个只可追加、不可更改的分布式数据库系统,是一个分布式账本。
在应用层面上,我们可以用区块链代替传统的登记、清算系统。区块链平台能够提供编程环境让用户编写智能合约。
    2、架构特点
    区块链具有去中心化、可靠数据库、开源可编程、集体维护、安全可信、交易准匿名性的特点。
五、区块链运作的核心技术
    1、区块链的链接
    每个区块分为区块头和区块体,区块头包括用来实现区块链接的前一区块的哈希值和用于计算挖矿难度的随机数(nonce)。前一区块的哈希值实际上就是上一个区块头部的哈希值。
       
    2、共识机制
    区块链的共识机制目前有:PoW、PoS、DPoS、分布式一致性算法。
    
    PoW:工作量证明。是比特币的挖矿机制。
    PoS:权益证明。要求节点提供拥有一定数量的代币证明来获取竞争区块链记账权的一种分布式共识机制。
    DPos:股份授权证明。类似于董事会投票。
    分布式一致性算法:分布式一致性算法是基于传统的分布式一致性技术。其中有分为解决拜占庭将军问题
的拜占庭容错算法,如PBFT。另外解决非拜占庭问题的分布式一致性算法(Pasox、Raft)。该类算法目前是联盟链和私有链场景中常用的共识机制。
    
    3、解锁脚本
    脚本是区块链上实现自动验证、自动执行合约的重要技术。
    4、交易规则
    交易的输入和输出不能为空;
    交易的每一个输入,如果其对应的UTXO输出能在当前交易池中找到,则拒绝该交易。因为当前交易池是未被记录在区块链中的交易,而交易的每一个输入应该来自确认的UTXO。如果当前交易池中找到,那就是双花交易。
    交易中的每个输入,其对应的输出必须是UTXO;
    每个输入的解锁脚本(unlocking script)必须和相应输出的锁定脚本(locking script)共同验证交易的合规性;
    
    5、交易优先级
    区块链交易的优先由区块链协议规则决定。
    
    6、Merkle证明
    比特币区块链使用了Merkle证明,为的是将交易存储在每一个区块中。使得交易不能被篡改,同时也容易验证交易是否包含在一个特定区块中。
       

Merkle树的一个重要使用场景就是快速支付验证“简化支付验证(SPV)”的概念,轻量级节点不用下载每一笔交易以及每一个区块,可以仅下载每一个区块的区块头,区块头中只包含以下5项内容,大小为80字节。
        1)上一区块头的哈希值;
        2)时间戳;
        3)挖矿难度值;
        4)工作量证明随机数(nonce);
        5)包含该区块中的所有交易的Merkle树的根哈希;

在以太坊区块链中每一个区块头包含了三颗Merkle树,分别对应以下三种对象:
    交易(Transactions);
    收据(Receipts,它是展示每一笔交易影响的数据条);
    状态(State);

            

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

六、区块链交易流程
                
    交易的生成。所有者A利用他的私钥对前一次交易和下一位所有者B签署一个数字签名,并将这个签名附加在这枚货币的末尾,制作成交易单。
    交易的传播。A将交易单广播至全网,每个节点都将收到的交易信息纳入一个区块中。
    工作量证明。每个节点通过相当于解一道数学题的工作量证明机制,从而获得创建新区块的权力,并争取得到数字货币的奖励。
    整个网络节点验证。当一个节点找到解时,它就向全网广播该区块记录的所有盖时间戳交易,并由全网其他节点核对。
    记录到区块链。全网其他节点核对该区块记账的正确性,没有错误后他们将在该合法区块之后竞争下一个区块,这样就形成了一个合法记账的区块链。

七、以太坊
    
1、以太坊总体架构
           
2、以太坊核心概念
    (1)以太坊虚拟机
    以太坊虚拟机(EVM)是以太坊中智能合约的运行环境。
    (2)账户
    以太坊中有两类账户,它们共用同一个地址空间。外部账户,该类账户被公钥-私钥对控制。合约账户,该类账户被存储在账户中的代码控制。外部账户的地址是由公钥决定的,合约账户的地址是在创建合约时由合约创建者的地址和该地址发出过的交易数量计算得到。
    两类账户的唯一区别是:外部账户没有代码,人们可以通过创建和签名一笔交易从一个外部账户发送消息。每当合约账户收到一条消息,合约内部的代码就会被激活,允许它对内部存储进行读取、写入、发送其他消息和创建合约。
    以太坊的账户包含4个部分:①随机数,用于确定每笔交易只能被处理一次的计数器;②账户目前的以太币余额;③账户的合约代码(如果有的话);④账户的存储(默认为空)。

    (3)消息
    以太坊的消息在某种程度上类似于比特币的交易,但是两者之间存在3点重要的不同。

        1)以太坊的消息可以由外部实体或者合约创建,然而比特币的交易只能从外部创建。
        2)以太坊消息可以选择包含数据。
        3)如果以太坊消息的接收者是合约账户,可以选择进行回应,这意味着以太坊消息也包含函数概念。
    
    (4)交易
    (5)Gas
    (6)存储、主存和栈
    每个账户都有一块永久的内存区域,被称为存储,其形式为key-value,key和value的长度均为256位。在合约里,不能遍历账户的存储。相对于主存和栈,存储的读操作开销较大,修改存储甚至更多。一个合约只能对它自己的存储进行读写。
    第二个内存区被称为主存。合约执行每次消息调用时都有一块新的被清除过的主存。主存可以按字节寻址,但是读写的最小单位为32字节。操作主存的开销随着主存的增长而变大。
    EVM不是基于寄存器的,而是基于栈的虚拟机。因此所有的计算都在一个称为栈的区域内执行。栈最大有1024个元素,每个元素有256位。对栈的访问只限于其顶端,允许复制最顶端的16个元素中的一个到栈顶,或者是交换栈顶元素和下面16个元素中的一个。所有其他操作都只能取最顶的一个或几个元素,并把结果压在栈顶。当然可以把栈里的元素放到存储或者主存中。但是无法只访问栈里指定深度的那个元素,在那之前必须把指定深度之上的所有元素都从栈中移除才行。
    (7)指令集
    EVM的指令集被刻意保持在最小规模,以尽可能避免可能导致共识问题的错误。所有的指令都是针对256位这个基本的数据单位进行的操作,具备常用的算术、位、逻辑和比较操作,也可以进行条件和无条件跳转。此外,合约可以访问当前区块的相关属性,比如它的编号和时间戳。
    (8)消息调用
    合约可以通过消息调用的方式来调用其他合约,或者发送以太币到非合约账户。消息调用和交易非常类似,它们都有一个源,一个目标,数据负载,以太币,Gas和返回数据。事实上每个交易都可以被认为是一个顶层消息调用,这个消息调用会依次产生更多的消息调用。
    (9)代码调用和库
    以太坊中存在一种特殊类型的消息调用,被称为callcode。它跟消息调用几乎完全一样,只是加载来自目标地址的代码将在发起调用的合约上下文中运行。这意味着一个合约可以在运行时从另外一个地址动态加载代码。存储当前地址和余额都指向发起调用的合约,只有代码是从被调用地址获取的。这使得Solidity可以实现“库”。可复用的库代码可以应用在一个合约的存储上,可以用来实现复杂的数据结构,从而使智能合约更加的强大。

八、以太坊智能合约
    
1、智能合约
     
2、开发语言
    solidity
    以太坊区块链的另一关键特征是它的“图灵完备性”,这保证了以太坊可以解决所有的计算问题。更加准确地说,它是“半”图灵完备的,因为它是通过对计算量设置上限,它避免了完全图灵完备语言存在的无法停机问题。此外,因为以太坊的语言是为区块链专门设计的,它有账户的概念,使得它在交易的可视化和查询账户状态方面提供了实时性。在比特币上,由于只有UTXO而没有账户的概念,我们需要导入区块链数据库,解析所有的交易,并为了抽取出
在区块链上的某个用户的交易情况而查询交易。而用以太坊,我们则可以在实时的区块链上,根据一个地址情况实时查看当前账户情况和交易状态。
3、代码执行

九、以太坊的去中心化应用

1、DApp
    一个DApp是由智能合约和客户端代码构成的。智能合约就像加密的包含价值的箱子。只有当特定条件被满足时它才被打开,它封装了一些逻辑、规则、处理步骤或者双方间的协议。
    从架构角度而言,DApp非常类似于传统的Web应用。主要区别是:在传统Web应用中,客户端有JavaScript代码,由用户在自己的浏览器中执行;服务器端的代码由主机运行。但是在一个DApp中,它的智能逻辑运行在区块链上,客户端代码运行在特殊浏览器Mist里面。

2、应用举例
    Augur( www.augur.net ),一个正在开发去中心化预测系统。
    Maker( www.makerdao.com ),一个正在开发中的金融类去中心化自治组织。
    WeiFund,一个正在开发中的去中心化众筹平台。
    Boardroom,一个正在开发中的DAO管理平台。
    Ujo Music,一个音乐版权管理平台,测试版。

十、基于区块链的电子货币
   
1、元币平台
    元币(metacoin)单词前缀“meta-”意为“在其中”。所以元币是衍生于现有加密货币体系之上,更专注于业务系统的代币种类。
彩币、万事达币、合约币;
2、代币
    改变比特币的一些参数生成不同的区块链产生的币。











猜你喜欢

转载自blog.csdn.net/zyj0813/article/details/80892479