区块链入门

之所以站的更远,是因为站在了巨人的肩膀上

image.png

比特币是区块链目前为止最成功的应用,自2009年上线以来,在无人管理的情况下,已经在全球7*24小时运行9年时间,成功处理几百万笔交易,支持单笔超过1.5亿美元的交易而为出现重大系统故障。

从正真意义上的安全可靠的去中心化的数字货币

截止发文位置,比特币价格为: $8,547.0

比特币的特点

  • 去中心化 没有一个中心组织来管理维护比特币,也没有任何一个个人和组织可以对交易破坏,交易请求需要得到网络中大多数参与者的共识
  • 匿名性 网络中的账户是匿名的,无法从交易信息关联到具体的个体,保护了参与者的隐私安全,但同时很难进行审查
  • 通胀预防 比特币通过挖矿来发币,发行量每四年减半,总量为 2100万枚,无法超发
区块链入门_第1张图片
image.png

如图展示了比特币自诞生依赖的汇率(以美元为单位)

最高峰达到了近两万美元一枚


区块链入门_第2张图片
image.png

数据来自 https://cn.investing.com/crypto/bitcoin/btc-usd


数字货币分类

数字货币是电子货币形式的替代货币。数字金币和密码货币都属于数字货币。数字货币基本可分为三大类:

1、大家非常熟悉的游戏币。最初是单机游戏中玩家所获得的游戏币,仅能在游戏中自己使用。随着互联网建立起门户和社区、实现游戏联网以来,这些数字货币便有了“金融市场”,玩家直接能够自由交易,还能进行线上线下的买卖。

2、门户网站或者即时通讯工具服务商发行的专用货币,用于购买本网站内的服务。主要代表的就是Q币,可用于QQ自己的商城内使用。

3、最具代表性的数字货币则是现在互联网上的加密数字货币,如比特币、莱特币、狗狗币等,以比特币为代表,它是一种由开源的P2P软体产生的电子货币,运用区块链技术可查询来源和流通,是一种开源加密,可流通和交易的数字货币。主要用于互联网金融投资,也可以作为新式货币直接用于生活中使用

比特币原理和设计

基本交易过程

每次发生交易,用户需要将新交易记录写入到比特币区块链网络 中,等网络确认后课认为交易完成。每个交易包含输入和输出,未经使用的交易的输出(Unspent Transaction Outputs, UTXO)可以用来作为下次交易的合法输入。被使用过的交易的输出(Spant Transaction Outputs,STO)不可以作为交易的输入。
在交易过程中,转账方需要通过签名来证明自己是UTXO的合法使用者,并且通过指定输出脚本来限制未来本交易的使用者,也就是收款方。对每笔交易,转账方需要进行签名确认。并且对于名一笔交易,总输入不能小于总输出。总输入比总输出多余的部分称为交易费用(Transaction Fee),由生成本次交易区块的矿工获得。现在交易费用不能小于 0.0001BTC,交易费用越高,也就会越快会被矿工记录。同时交易费用用还能避免网络收到大量攻击。
交易金额最小单位是 “聪”,即一亿分之一比特币。

六次确认

需要注意的是,刚放进网络中的交易并非是实时得到确认的。交易存在被推翻的可能性
在手续费相同的情况下,矿工们在挖矿时候并不会主动地去确认某一个特定的交易。因为矿工们并不知道这笔交易是谁转给谁的,他们只负责优先确认奖励(手续费)高的区块交易。你所说的等长的blockchain分叉情况,是因为有时候两个挖矿者几乎同时验证出来一个区块的交易。他们同时公布到网络里,有些人用一个方法更新他们的blockchain,另一些人用另外一个方法更新他们的blockchain。 如果出现这种情况,交易的顺序就会不清楚。在比特币POW算法网络中的共识规则是这样的:如果分支情况出现,那么网络上的人们继续保持两个分支,任何情况下,挖矿者只在最长的那个blockchain上工作。举个例子,有一些挖矿者先收到block A,另一些挖矿者先收到的是block B。那些收到block A的挖矿者将要继续沿着他们的分支挖矿,而其他人沿着Block B的分支挖矿。我们假设在B分支上的挖矿者先成功挖到下一个block,当他们收到这个消息后,在A分支的人会注意到现在B分支是最长的,于是就会转换到B的分支。在A分支上的工作就会迅速的停止,这样每个人就会都在同一个顺序的blockchain上工作了。所有在block A里面的待定交易将会继续保持待定状态,随后会在B分支上被放到新的block里,这样,所有的交易最终还是会被验证的。所以在比特币中,一个交易不能算作确认直到 (1)它存在于最长的分支中的block里,(2)至少有5个验证过的block在其后面得到验证。这种情况,我们说这个交易有了“6个确认”。关于6个确认来验证比特币交易的真实性,6这个数字并不是硬性规定的,只是在比特币网络中,6个确认的时间充分的给了整个网络去统一block顺序的时间。 如果支出方想要进行双重支付,他必须控制了非常大的算力,不然其他的挖矿者不会帮助它,因为他们都需要在最长的分支上工作才能得到奖赏。六个区块是根据该人拥有百分之一的算力刚好确认一个区块,但要进行6个区块确认的概率是100的六次平方分之一。这种情况可以说是相当于零。

账户和地址

比特币采用非对称加密算法,用户自己保留私钥,对自己发出的交易进行签名确认,并公开公钥。
比特币账户地址并非就是公钥,而是公钥经过一系列(HASH160,或先进行HASH256然后RIPEMD160)及编码运算后产生的160位(20字节)的字符串。

交易

一次交易包含的信息

  • 付款人地址
  • 付款人对交易的签名
  • 付款人资金来源交易的ID,哪个交易的输出作为本次交易的输入
  • 交易金额,与输入的差额作为交易费用
  • 收款人地址
  • 收款人公钥
  • 时间戳

网络中的节点收到交易信息后进行检查:

  • 交易是否已经处理过
  • 交易是否合法,包括地址是否合法,发起交易者是否是输入地址的和发拥有者,是否是UTXO
  • 交易的输入之和是否大于输出之和
    检查通过后,则讲交易标记为合法未确认交易信息,并在网络中广播

交易脚本

脚本是保障交易完成的核心机制,每个交易包含输出脚本和认领脚本。
输出脚本用来限制谁可以花费这笔钱,输入脚本则用来证明自己可以满足条件。

比特币区块包含的内容

  • 4字节的区块大小信息
  • 80字节的区块头信息
    • 版本号,4字节
    • 上一个区块头的HASH256 Hash值:链接到一个合法的块上,32字节
    • 包含所有签证过的交易的Merkle树根的哈希值,32字节
    • 时间戳,4字节
    • 难度指标,4字节
    • Nonce 4字节,PoW问题的答案
  • 交易个数计数器: 1~9字节
  • 所有交易的具体内容,可变长
    验证区块头信息,就可以验证区块的完整性,而无需获取具体的交易内容( SPV simple payement verification 简答交易验证)的原理

区块整体结构

区块链入门_第3张图片
image.png

区块头结构

区块链入门_第4张图片
image.png

说明

  • 版本、父区块头哈希值和Merkle根采用的是小端格式编码,即低有效位放在前面。
  • 时间戳表示的是自1970年1月1日0时0分0秒以来的秒数,1231731025秒转为十六进制值为0x496AB951,然后采用小端格式编码表示为0x51b96a49。
  • 难度目标486604799转化为十六进制值为0x1d00ffff,该值采用小端格式编码。而当前区块的难度值0x1d00ffff需要采用一种特殊的编码方式才能正确转化为目标哈希值。
  • 随机数nonce表示的随机数值转化为十六进制为0x709E3E28,然后采用小端格式编码表示为0x283e9e70。

区块结构详细解析参看https://www.jianshu.com/p/5c09f7d708e2

挖矿

挖矿的基本原理

最初的时候,我们用电脑CPU就可以挖到比特币,比特币的创始人中本聪就是用他的电脑CPU挖出了世界上第一个创世区块。然而,CPU挖矿的时代早已过去,现在的比特币挖矿是ASIC挖矿和大规模集群挖矿的时代。
回顾挖矿历史,比特币挖矿总共经历了以下五个时代:

CPU挖矿→GPU挖矿→FPGA挖矿→ASIC挖矿→大规模集群挖矿 挖矿芯片更新换代的同时,带来的挖矿速度的变化是:CPU(20MHash/s)→GPU(400MHash/s)→FPGA(25GHash/s)→ASIC(3.5THash/s)→大规模集群挖矿(3.5THash/s*X)

挖矿速度,专业的说法叫算力,就是计算机每秒产生hash碰撞的能力。也就是说,我们手里的矿机每秒能做多少次hash碰撞,就是算力。算力就是挖比特币的能力,算力越高,挖得比特币越多,回报越高。在比特币的世界里,大约每10分钟会记录一个数据块。所有的挖矿计算机都在尝试打包这个数据块提交,而最终成功生成这个数据块的人,就可以得到一笔比特币报酬。最初,大约每10分钟就可以产生50个比特币的比特币报酬。但是该报酬每4年减半,现在每10分钟比特币网络就可以产生25个比特币。而要成功生成数据块,就需要矿工需要找到那个有效的哈希值,而要得到正确的哈希值,没有捷径可以走,只能靠猜,猜的过程就是计算机随机hash碰撞的过程,猜中了,你就得到了比特币。

挖矿的过程

挖矿过程就是求出一个能够填充本区块头的随机值,让区块头的哈希散列值符合某一个标准。
区块链入门_第5张图片
image.png

我们通过一个故事来理解挖矿

  1. 我手上现在有一张面值100元的人名币。(比特币)

  2. 谁关注公众号我就给谁。

  3. 但是需要在评论里面猜出这张钱的编号才行。(挖矿,随机填充数值求解)

自己想尽办法猜,猜中得100元全款——个人挖矿

出钱召集一些人来一起猜——矿场

召集认识不认识的人一起来猜,通过猜测的次数,按比例分配这100元——矿池

PoW挖矿算法原理及其在比特币、以太坊中的实现

http://blog.51cto.com/11821908/2059711

共识机制

PoW 与 PoS

POW的方法最直观——哈希函数是密码学上计算难度经过反复验证的东西,所以用它来做证明是最有效不过的。每发一条消息(上传一个区块)的时候,你要证明你付出了一定的算力,你的证据就是某串你加在区块里的无意义字符串,而加上这个字符串之后,你的区块的哈希值正好小于某个数。哈希函数的特性告诉我们,你没有任何取巧的方法可以做到这一点——唯一的可能是,你真的一个一个字符串地去试了。所以,我们知道你确实付出了很多的代价才能给出这么一个字符串。

然而,POW不是没有缺陷,除了大量消耗能源之外,POW的另外一个问题是它的价值回路必须要通过外部输入。也就是说,采用POW的数字货币仍旧不是理想状态的数字货币,因为它们的安全性不直接与使用者相关,而是要通过矿工这个媒介(这个请见我的专栏)。

于是POS就被提出来了。POS的设想是非常好的——采用POS的货币的安全性直接与使用者相关,省去了矿工这个媒介。POS简单说就是,每当发表一条消息的时候,不用证明你付出了什么代价,而要证明你拥有一定数量的钱。而拥有钱代表着,如果你作弊损害了这个系统的安全性,你的钱会贬值,这变相地让你付出了代价。这东西更好的一点是,如果采用POS,实际上连挖矿奖励都不需要,因为POS实际上不需要付出任何代价。

需要注意的是,POW基本上原理都类似,而且,说到POW基本上就指的是比特币那种。可是POS是一类共识算法,或者说是一类共识算法的设计思想,而不是一个,最早采用POS的是peercoin,于是几乎所有的科普文章都把Peercoin的POS当做是POS的定义。这是不对的——因为Peercoin的POS是有漏洞的,漏洞简单说就是——越有钱的人,作弊付出的代价就越大,所以51%攻击在POS里面更不可行。

然而,对于没钱的人而言,他们没代价可付,所以一些恶意行为对于他们是有益的,这就会导致著名的公地悲剧。这种叫Nothing-at-stake attack(无利益攻击),所有POS算法,必须有对付这种攻击的机制,否则就不能用。目前,还没有一个区块链真正采用了POS,所以POS仍旧是一个缺乏足够实践检验的机制。但是从理论上来看,Ethereum的casper,ALGORAND和Ouroboros是几个比较成熟的POS算法。至于POS的一个变种DPOS,实际上是解决Nothing-at-stake attack(无利益攻击)的另一种方式——没钱的滚蛋,只有有钱才能参加共识。所以,DPOS的本质实际上是一个中心化的共识机制。

闪电网络

参看:https://www.zhihu.com/question/46515457/answer/111101523

侧链

参看:
https://zhuanlan.zhihu.com/p/26713463
https://www.zhihu.com/question/27256432/answer/309072431

参考文章:
https://mp.weixin.qq.com/s?__biz=MzI1MTkwNjg5Mw==&mid=2247483744&idx=1&sn=4e4db07b5b4bd4a70d0470a82730ebac&scene=21#wechat_redirect

https://www.zhihu.com/question/20792042

http://www.8btc.com/bitcoin_block_chain

https://blog.csdn.net/u013137970/article/details/69891985

https://www.zhihu.com/question/263915518/answer/274547442

扫描下方二维码,关注微信公众号:H5开讲啦,获取更多学习资料。

qr.jpg

你可能感兴趣的:(区块链入门)