区块链基本原理
Posted justry_deng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了区块链基本原理相关的知识,希望对你有一定的参考价值。
区块链基本原理
账本
什么是账本
提示:比特币,只是一种通过运用
区块链技术
对电子现金(数字货币)系统
的实现而已。
2008年11月1日,中本聪
发表论文描述了一种全新的电子现金(数字货币)系统
——比特币。站在技术人员的角度去看,要实现一个电子现金(数字货币)系统
就是去实现一个账本
。简单的说,电子现金(数字货币)系统
就是账本。
实现账本的四大难点
我们知道,像人民币、美元这样的货币都是在强大的国家机器背书之下才能够被民众接受,并且在日常的生产生活中流通的。很显然,比特币是没有任何国家或机构为其背书的,中本聪
面临的挑战就是如何利用技术手段给其发布的比特币进行背书。
中本聪要实现比特币,或者说要**实现一个电子现金系统
(站在技术人员的角度,即要实现一个账本
),需要解决以下四个难题:**
-
账本不能被篡改。
-
账本不能丢失或损坏。
-
证明你是你。
-
同一份钱,不能花出去2次或多次(即:不能有双花问题)。
双花问题说明:对于纸质货币,当纸币从A给到B时,整个交易就结束了;但是对于数字货币却有一些不同,假设A有10个比特币,他选择全部转账给B,当这笔交易在网络中执行但还未确认完成时,他选择再给C转10个比特币,对于系统而言,这两笔交易都是合法的,都可以通过验证广播到网络中,但是实际上,这显然是有问题的,这就是双花问题(双花攻击)。
分布式账本解决难点1、难点2
简单地说,分布式账本,即:账本让多个人同时记账,也就是账本保留多个备份。这样就不用担心账本丢失或损坏的问题,同时也使得账本不那么容易被篡改了,因为账本在多地都有备份,任何人能直接修改的只是本地的账本,在其它账本保存方不同意的情况下,改不了整体的账本,也就是说它的修改别人不认可。
密码学解决难点3
证明你是你,这句话的本意是A账户的余额只能是A才有权管理,A可以选择转账或其它交易,但是在做这些交易的时候,A必须证明这个账号是他的。很显然,采用密码学的知识,设计数字签名就可以做到。对于数字签名的细节要求有两点:
- 第一,A签名过的交易A不能抵赖,其他人可以验证
- 第二,其他人不能通过A签名后的交易仿造出A其它的签名交易
区块链数据结构解决难点4
我们常说的区块链技术是泛指数字货币技术,这里的
区块链数据结构
指的是具体的存储数据的结构。注:因为截止目前2021-08-08,区块链技术仍然是唯一已知的相对可靠的数字货币技术实现方式,所以就拿区块链技术来代指数字货币技术了,它包括了密码学、网络、数据结构等等。
中本聪解决双花问题的办法很简单,就是设计一种强时序性的数据结构(这就是区块链结构)
。他把若干个交易打包形成一个block块,并强制约束:当存在双花攻击中的两个或多个交易在同一个block块中时,该block块会被校验出不合法
,最终两笔交易中只能有一个被打包到block块。接着系统再将新产生的块挂在之前产生的块的后面,这样就整体形成了一个链表结构。对于已经打包在块中的交易就是系统确认过的,此时再收到双花攻击里的第二笔交易时也没有问题,系统(在考虑前面的交易额的前提下)对当前的交易进行余额确认,若余额不足,则系统会认定当前交易为非法交易。
这种不停的收集交易打包成块,然后挂在之前的块上形成的结构,被叫做chain of blocks
,后来大家把它统一叫作blockchain(区块链)
。
hash函数(SHA-256)
hash函数的特性
SHA-256算法的hash函数:y=hash(x),对于不同的输入x,都可以得到一个固定长度(256bit)的二进制的y值。
hash函数的特性:
-
防碰撞
不是说hash是绝对防碰撞的,只是说碰撞的概率极低,所以认为hash是可以防碰撞的。
举例:当hash得到的结果是22个字符长度时,300万亿次计算里,发生碰撞的概率时1000亿分之一。随着hash取值空间的增大,这个概率会更低,SHA-256的hash值实际上是一个64位的字符串。因此采用SHA-256算法的hash函数,我们认为它在在这个层面是防碰撞的。
-
信息隐藏
y=hash(x)中,你可以通过x得到y,但是你很难通过y得到x。
注:在区块链网络中,每个用户在申请账户的时候都会获得一个公钥和私钥,私钥用来表示你对这个账户的管理权,公钥是使用私钥通过
椭圆曲线算法secp256k1
加密生成的,而且这个算法同样也是不可逆的。我们经常看到的比特币地址就是由公钥经过2次hash得到的一个字符串,这样也很好地保护了公钥本身的信息。 -
易出难题
hash函数在形成区块链结构时的作用
提示:在区块链领域所提到的hash函数是指特定的SHA-256算法支持的hash函数。
前文中我们提到了区块链数据结构是一个一个区块的链表,也提到了形成是通过后一个block块挂到前一个block块上形成的,但是怎么挂的却没有提,实际上,挂这个动作是通过hash函数实现的
。
每一个区块的生成都需要填写hash值,这个hash值的输入包括:
- 区块编号
- 数据(一条或多条交易信息)
- 前一个区块的hash值
- 一个随机数
P2P网络简介
P2P网络,即为peer to peer网络。
P2P网络最早来自Napster,这是一个为用户提供免费MP3下载的网络服务。Napster服务器上不存储MP3文件,但是它有一个索引服务器,来记录各个用户具备的MP3歌单信息,这样当用户有需求下载时,可以直接找到对应的主机建立连接并下载文件。
中本聪在发明比特币的时候,也是站在前人的肩膀上。每个新加入网络的节点,都通过节点内置的DNS种子节点查询网络IP列表,某些种子节点返回一组静态可靠的比特币节点IP,某些种子节点返回动态的比特币节点IP集。新节点选择8个节点进行连接,并彼此比对,同步区块链数据。如果有新交易产生,节点向自己所有相邻节点发送交易广播,后续继续向令居广播,直至全网均收到交易信息。
共识算法
什么是共识算法
区块链系统采用去中心化的设计,网络节点分散且相互独立,所以由不同节点组成的系统之间必须依赖一个制度来维护系统的数据一致性,并奖励提供区块链服务的节点,以及惩罚恶意节点。这个制度的建立需要依赖一套方法和规则,即由谁取得一个区块的打包权(或称记账权),并获取该区块的奖励或者怎样界定谁是作恶者,让他受到怎样的惩罚,这套方法和规则便是共识算法(共识机制)。
常用的共识算法
PoW
:工作量证明(Proof of Work)算法PoS
:权益证明(Proof of Stake)算法DPoS
:股份授权证明(Delegated Proof of Stake)算法PBFT
:实用拜占庭容错(Practical Byzantine Fault Tolerance)算法RAFT
:一致性共识算法
UTXO模型
UTXO即Unspent Transaction Outpou,未花费的交易输出。
比特币系统其实并不存在"账户",而只有"地址"。这个地址就是前文提到的,用公钥经过2次hash计算得到的地址。只有掌握该私钥的人才算是掌握了这个地址,才可以动用这个地址里的"余额"。
一个人的比特币余额其实就是看他所掌握的地址里面包含有多少比特币,而计算这个比特币数量的方式或者说它的数据结构就叫UTXO。
^_^ 整理自《Go语言区块链应用开发从入门到精通》高野 编著
^_^ 本文已经被收录进《程序员成长笔记》 ,笔者JustryDeng
以上是关于区块链基本原理的主要内容,如果未能解决你的问题,请参考以下文章