比特币

区块链

什么是区块链?

区块链是一种分布式的去中心化的数据库。

比特币

什么是比特币?
比特币本质是一个记账簿。
它是一个去中心化的网络,每一个节点称为矿工。
记账的方式:
发生比特币交易时,需要加入这个比特币网络,交易双方为比特币网络的节点,例如:A向B转账
这个转账申请加入区块链网络,因为这个网络是由很多节点组成的,需要一半以上的节点的同意,才可以加入网络,也就是51%的节点的同意。好,同意之后,就可以在这个网络记录起来了。
那这个交易记录存放在哪里了,交易记录存放在一个称为区块的地方,这个网络每隔10分钟就会产生一个新的区块,存放这个区块产生时间和上一个区块产生时间内的所有被同意的交易,也就是这10分钟的交易。
问题:如何产生第一个区块

刚才讲到,这个网络由很多个节点组成,那这个新的区块到底是由哪个节点产生?这是一个需要思考的问题
事实上,所有的节点都想当第一个,因为:
第一个生成新区块的节点有一项特权,可以在新生成的区块中插入一条特殊交易记录:凭空向一个地址转入一定数额的比特币。
“凭空”的意思是不需要输入UTXO,这些比特币是凭空产生的,是作为产生新区块的奖励。这个特殊交易称为“创币交易”,因为这一过程也是发行新比特币的过程,这就是为什么产生新区块被称为“挖矿”。
那么奖励的数额有多大呢?创建新区块的奖励数额是不定的:第一个区块奖励的是50个比特币,随后每产生210000个区块这一数字就递减50%,直到变为0。目前区块链的长度已接近50W,因此每次奖励12.5个比特币。通过以下公式便可算出,比特币的上限是2100W个。  
除了创块奖励外,创块的收益还包括所有交易的交易费。因为每个区块记录了这10分钟内的交易,交易的时候需要收取交易费,这些交易非也会给创建第一个区块的节点。
那么,

如何才能创建一个新区块呢?通过解决一个问题:即找到一个nonce值,使得新区块头的哈希值小于某个指定的值,即区块头结构中的“难度目标”。
区块头中的信息,在挖矿前大部分已经是固定下来的,或者是可计算的。

image

版本号
跟随比特币客户端而定,一段时间内不会改变。即使要改变,也会有比特币的核心开发人员来协调升级策略,这个可以理解为一个静态常数。

前一区块的哈希摘要

一次哈希即可。前一区块已经是打包好的。

默克尔树的根

刚才已经得到了结果,根据本次交易包含的交易列表得到。

时间

取打包时的时间。也不需要很精确,前后几秒,几十秒也都可以。

难度目标

参考上两周产生的区块的平均生成时间而定。两周内如果平均10分钟产生一个区块的话,两周会产生2016个区块,软件会计算最新的2016个区块生成的时间,然后做对比,随之调整难度,使得接下来产生的区块的预期时间保持在10分钟左右。因为最近的2016个区块已经确定,所以这个数字也是确定的。

随机数nonce

这个就是挖矿的目标了。这是一个32位的数字。

随机数可以变化,而且要从0试到最大值2^32。直到最后出现的hash结果,其数字低于难度目标值。不过以现在的计算机算力,一台矿机用不了一秒就把全部的变化可能计算完了,所以还需要改变区块内部的创币交易中的附带消息,这样就让merkle root也发生了变化,从而有更多的可能去找到符合要求的nonce。

block_header = version + previous_block_hash + merkle_root + time + target_bits + nonce

for i in range(0, 2**32):

     if sha256(sha256(block_header)) < target_bits:       

        break    

    else:        

       continue
 

比特币的交易如何确认

先讲一个概念:UTXO,指未花费的交易输出

比特币的记账模式跟传统的中心化记账模式有一个比较难理解的区别:比特币没有账户的概念。

具体来说,比特币的记账系统,是通过记录和确认每一笔交易本身来记账,是交易本身,是交易的行为本身,也就是A向B转账这个过程,而不是记录A和B的余额变动,而A及B的最终余额是通过扫描交易数据计算出来的。

而传统的记账系统(银行),是通过记录和保存每个账户的余额变动数据来验证交易的,也就是说,每一次交易由中心记账系统把不同账户(一般是2个),的余额进行相应的调整并保存,完成了一个交易的记录。A向B转100万,那么先把A的余额减少100万,同时把B的余额增加100万,会计上说的,有借必有贷,借贷必相等。

为什么会这样?为什么比特币系统,不采取实时更新账户余额的方式来记账?主要有两个原因:

1.节省算力和储存空间。因为如果采取余额模式,为了避免双重支付,即使你的账户没有发生变化,比特币系统里任何一个客户端(钱包)发生一笔交易和变动,所有的客户端都有同步数据,否则,若B没有同步更新整个系统中的所有账户余额信息,在A给B转账时,B无法知道A的账上是否有足够的余额,甚至有可能,A把同一个比特币同时转给了B和C,而B和C由于都没有更新A的余额信息,都不知道A的账上其实没有那么多钱。

而传统的支付系统不一样,每一次交易,只有付款方和收款方的余额变动,顶多再加上中心化的服务器数据发生变动,所以只要同步很少的数据(这个是相对于区块链来说),事实上由于所有记账都是中心服务器来完成,其实不需要额外同步,只需要在完成记录的同时储存数据就可以了。所以在数据储存上中心化的系统是有优势的,如果比特币也采用这种余额思路,那么必定会失败(虽然现在也还不好说一定能成功)。

2.如果采取记录账户余额的方式,那么在不同节点更新存在时间差的时候,很容易出现双重支付,简单来说,A把同1各比特币转给B和C,由于BC的地理位置不同,他们附近的节点不同,有可能都确认为交易,虽然随着时间的推移,比特币系统会达成竞争共识,只确认一个交易,但,BC两人都提供了商品给A,最后,肯定有一个人蒙受损失。

那比特币系统是怎么做的呢:那就是只确认交易本身,直记录交易输入和输出:每笔比特币交易都有输入和输出,别人付给你的钱是“交易输入”(对你来说),你收到的钱如果被你支付出去了,叫做“交易输出”,你收到但是还没有支付出去的钱叫做“未花费交易输出”(UTXO),这是一种待支付的状态。

矿工们把每一次交易本身的数据(输入和输出)打包到区块之中,通过竞争计算,确保不可串改,实际上如果得到6个区块的确认,那么全球的算力加起来都没法串改。

如果需要确认余额,那么就用客户端(钱包)扫描某一个账户的输入、输出数据,就可以算出这个账户的余额,相比更新所有账户的余额数据来说,简直太轻松,不到1秒钟就可以搞定。

说完了比特币系统记账的方式,下面讲讲具体支付过程中,双方如何确认交易已经完成了?还是先讲一个关键概念:

SPV:简单支付验证。我们在用比特币交易的时候,必须确定交易成功,才会提供相应的服务或者商品,也就是一手交钱一手交货,确认收到钱,才交货。为什么说是“简单验证”呢?因为这种验证方法,不需要下载所有的交易数据,只需要下载区块头数据就可以验证。

那什么是区块头呢?

简单回顾一下,区块链对交易的记录,是把一段时间内的交易数据,打包到一个区块中,然后随着时间的推移,区块不断累积叠加,环环相扣,形成区块链,区块链越长,越难修改,一般来说经过6个区块以后,全球的计算机加起来都无法修改。

每个区块头信息代表着一个区块,就像是区块的身份证一样,你看到我的身份证就知道我是谁,就可以在脑海中浮现出我的身高、样貌,甚至职业、爱好等信息,在区块链世界里,系统通过区块头,可以识别出区块信息的方方面面。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,607评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,239评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,960评论 0 355
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,750评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,764评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,604评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,347评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,253评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,702评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,893评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,015评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,734评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,352评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,934评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,052评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,216评论 3 371
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,969评论 2 355

推荐阅读更多精彩内容

  • 虚拟存储器概述 普通存储器管理方式很难处理的两个问题 有些作业很大,其所要求的内存容量超过了物理内存的大小,所以该...
    傻傻傻瓜_d432阅读 1,053评论 0 1
  • 绿叶片片都动情,密密露紫又显红, 纤细藤蔓好攀登,寻找依托向前行, 狂风暴雨挺得住,气度雅致笑无穷, 贫瘠荒野能忍...
    沃田源阅读 483评论 7 10
  • 有存有取,不要拒绝别人帮助,也要主动去帮助别人,警惕无意识取款行为
    隔壁小志龙阅读 194评论 2 2
  • 01 这个时代,正如狄更斯100年前所说:这是最好的时代,这是最坏的时代。在这个时代里,我们享受着移动互联网带来的...
    智慧的狐狸阅读 403评论 0 1
  • 我不确定别人身上闪闪发光的东西是不是我想要的生活。但我强大了许多,像混合着沙子、木屑的沙袋,却没人知道里面也放了柔...
    七公子steven阅读 172评论 0 1