初识区块链


1.1.2 区块链技术理念

区块链的技术理念,其实就是大家共同来参与记账,通过一种规则(共识算法)不断地选出账务打包者,其他节点接受验证,并且每个用户都有一对密钥表示自己,通过脚本系统的功能实现在公共网络中定向发送有价值的数据。

区块链使用公开密钥算法来标识用户身份,公开密钥算法拥有一对密钥,是彼此配合使用的,可以相互用来加解密。其中一个叫私钥,另外一个叫公钥,公钥可以公开给别人,私钥钥自己保管好。在区块链系统中,公钥就是用来用户身份识别的,一般不会直接使用公钥,实际处理的时候都会进行转换,比如取得公钥的最后20个字节或者经过一系列更复杂的转换,最后得到一个称为“地址”的转换结果,这个‘地址’就能代表一个用户。

密钥怎么配合工作呢:用公钥加密的数据必须用对应的私钥来解密,而用私钥加密(通常称为“签名”)的数据必须用对应的公钥来解密。


1.1.3 一般工作流程

1.打包进区块 2. 全网广播 3. 检查,验证,确认 4. 写入区块

区块链技术其实就是围绕如何保持数据的一致,如何让这个公共账本的数据不被篡改来展开的。


1.2 区块链技术栈

区块链系统本质行都是在这个经典结构纸上直接实现或者扩展实现。

1. 区块链账本

比特币中区块链数据的组成:

区块数据分为区块头和区块体,每个区块头中通过梅克尔根关联了区块中的众多交易事务,而每个区块之间通过区块头哈希值(区块头哈希值就是一个区块的身份证号)串联起来。

2.共识机制:如何让每个节点通过一个规则将各自的数据保持一致是一个很核心的问题,这个问题的解决方案就是制定一套公式算法。区块链中共识算法一般有POW,POS,DPOS,PBFT等等。

3.密码算法

区块链之间的连接是靠一种叫做哈希值的数据来关联的。什么叫哈希值?这是通过密码算法中的哈希算法计算得出的。哈希算法可以通过对一段数据计算后得出一段摘要字符串,这种摘要字符串与原始数据是唯一对应的。如果对原始数据进行修改,哪怕只是一点点修改,那么计算出来的哈希值都会发生完全的改变。区块链账本对每个区块都会计算出一个哈希值,称为区块哈希,通过区块哈希来串联区块。

4.脚本系统

区块链系统依靠脚本系统驱动着区块链系统不断进行着各种数据的收发。所谓脚本,就是指一组程序规则。在区块链系统中,有些系统中的程序规则是固定的,比如比特币系统中,只能进行比特币的发送与接收,这个发送与接收的过程就是通过实现在比特币中的一组脚本程序来完成的;而有些系统允许用户自行编写一组程序规则,编写好后部署到区块链账本中,这样就可以扩展区块链系统的功能,比如以太坊就是通过一套可以自定义功能的脚步系统,进而实现了智能合约的功能。

5. 网络路由

1.3.2 区块链分类

1.根据网络范围:可以分为共有链、私有链、联盟链。

2.根据部署环境:主链,测试链

3.根据对接类型:单链、侧链、互联链

单链:能够单独运行的区块链系统都可以成为“单链”

侧链:侧链属于一种区块链系统的跨链技术。区块链系统与侧链系统本身都是一个独立的链系统,两者之间可以按照一定的协议进行数据互动,通过这种方式,侧链能起到一个对主链功能扩展的作用,很多在主链中不方便实现的功能可以实现在侧链中,而侧链再通过与主链的数据交互增强自己的可靠性。

1.4.2 比特币核心程序:中本聪客户端

客户端逻辑结构:

钱包:主要用于管理用户的密钥以及提供转账操作等功能。

完整区块链:中本聪客户端保留了完整的区块链账本数据,因此能够独立自主的校验所有校验,而不需借由任何外部的调用。当然,另外一些节点只保留了区块链的一部分(比如区块头),可以通过一种名为“简易支付验证”(SPV-simply pay verify)的方式来完成支付验证,这样的节点被称为“SPV节点”。

网络路由:比特币网络hi属于P2P网络架构,P2P也就是对等的意思。在对等网络中,每个节点共同提供网络服务,不存在任何所谓的中心服务器,因此在对等网络中网络架构中是没有层次的,大家都是平等的,每个节点在对外提供服务的同时也在使用网络中其他节点所提供的服务。

1.4.3比特币的发行:挖矿

挖矿在比特币系统中的用途:1 抢夺区块打包权 2验证交易实务 3奖励发行新币 4广播新区块

1.难度值:新难度值=当前难度值*(最近的2016个区块的实际出块时间/20 160分钟)--大约2周调整一次难度值

2.挖矿计算:

计算公式:SHA256(SHA256(version+pre_hash+merkle_root+ntime+nbits+nonce))

ntime:区块时间戳   nbits:当前难度  nonce:随机数

挖矿就是重复计算区块头的哈希值,不断修改该参数,知道与难度目标值匹配的一个过程。

3.区块广播

矿工挖出区块后,就进行网络广播,传递给相邻节点,节点接收到新的区块后会进行一系列的验证,全部校验通过就把新的区块数据纳入到自己的区块链账本中。如果是挖矿节点收到信息,就会立即停止当前的挖矿计算,转而进行下一区块的竞争。

4.挖矿方式:CPU/GPU/FPGA/ASIC

1.4.4比特币钱包:核心钱包与轻钱包

钱包:是属于比特币系统中的一个前端工具,其最基本的功能就是用来管理用户的比特币地址、发起转账交易、查看交易记录等。

公开密钥算法属于一种不对称加密算法,拥有两个密钥:一个是私钥,一个是公钥。公钥可以公开给别人看,私钥必须要妥善保存,使用私钥加密(通常习惯上将私钥加密称为“私钥签名”)的数据可以用公钥解密,而使用公钥加密的数据可以用私钥解密,两者是互相匹配的。目前使用比较广泛的公开密钥算法主要有RSA算法和椭圆曲线加密算法(ECC),比特币使用的是椭圆曲线加密算法。

比特币地址的生成过程:

对于完整的交易验证(需要在完整的账本数据上校验,比如是否包含足够的余额,是否双花等)可以交给核心节点,这样就可以将钱包功能部分剥离出来,由此产生了SPV钱包。即轻钱包,SPV原理的钱包是使用了梅克尔树来验证支付是否j已经发生,这也是为什么称之为简单支付验证的原因,支付验证所做的事情很少,仅仅能看到当前的支付交易是否被发起而已,并不能保证这笔交易事务最终会进入到主链中,也就是说还需要等待核心节点进行全面的交易验证并且矿工打包到区块后进入主链。在这个过程中是有可能发生失败的,所以SPV钱包虽然带来了便捷性但也牺牲了安全性。

1.4.5比特币账户模型:UTXO(UnspentTransaction Output,未花费事务输出)

1.比特币的交易中不是通过账户的增减来实现的,而是一笔笔关联的输入/输出交易事务。

2.每一笔的交易都要花费“输入”,然后产生“输出”,这个产生的“输出”就是所谓的“未花费的交易输出”,也就是UTXO.

3.由于没有账户的概念,因此当“输入”部分的金额大于所需的“输出”时,必须给自己找零,这个找零也是作为交易的一部分包含在“输出”中。

那么怎么证明哪一条UTXO是属于谁呢?

在比特币中,是使用输入脚本和输出脚本程序实现的,有时候也称为“锁定脚本”和“解锁脚本”。简单地说,就是通过“锁定脚本”,利用私钥签名解锁自己的某一条UTXO(也就是之前的“输出”),然后使用对方的公钥锁定新的“输出”,成功后,这笔新的“输出”就成为了对方的UTXO。

1.5区块链的技术意义

1.数据不可篡改性

2.分布式存储

3.匿名性

4.价值传递

5.自动网络共识

6.可编程合约

1.6知识点导图

你可能感兴趣的:(初识区块链)