我转给你一个比特币之后......

最广泛的一种比喻是把区块链类比为账本,一个大帐本,每个区块就是一张账页,每个区块头部的父区块哈希值就像一根绳子把账页串起来,通过工作量证明选出有记账权的人来记账,用非对称的加密算法保证账页内容真实不可篡改,同时也保证了你的财产完完全全永久的属于你,只要互联网不消亡账本中的内容就不会消亡,不可磨灭这个特性倒是让有的人产生些有趣的创意,比如老猫在区块链里写进了“买入比特币就是做空全世界”这句话,你也可以在区块链上刻下你和爱人的誓言,这比刻到钻石戒指上还要“永流传”。

比特币是区块链的一种运用,那么具体区块链的生态环境下比特币是如何实现交易,这些交易又如何进入区块,最后成为区块链的呢?这就是今天想要说的。

一、比特币交易

比特币就是一个世界银行,它只有一种业务即转账,还是以我给你转一个比特币为例来说。

我要转账是要在钱包里操作的,我把我的比特币发送到你的地址,这个交易就生成了,接着钱包会把这笔交易向临近的节点广播,临近节点收到交易后开始验证这笔交易,交易被验证为合格后就会被放进当地的交易数据池中,被节点上的矿工搜集打包进入区块,然后该区块被该节点广播到其他临近节点,后续区块一一诞生,经过6个之后,你的钱包就会显示已到账(转账到账的快与慢取决于钱包里你对块深度的设置)。

我给你转的比特币经历这样一个过程就结束了它的旅程,所有权由我变为你。

上面是从一个旁观者的角度追随着一个比特币从一个地址到另一个地址,看到了它走过了哪些路线,怎样从一地到另一地,对它的流动有了一个整体的印象。

接着就要具体的说说细节,验证是怎样进行的?验证些什么内容,比特币的交易结构都长什么样?

1.首先要说的是比特币交易的是什么东西?不是比特币吗?是的我们是交易的比特币,但系统里实际上没有我们通常认为的那个比特币,比特币系统里只有UTXO。

比特币系统里没有账户、没有余额、没有密码,只有UTXO,它就是未被花费的交易输出(用比特币拥有者的公钥锁定的一个数字)

2.再说说,交易落实到代码上是如何验证的,先要弄明白交易结构,

交易结构就是一笔交易,包括输入和输出

输入==要被花费的UTXO+解锁脚本

输出==utxo(币值+锁定脚本)

解锁脚本:发送者私钥签名+发送者公钥

锁定脚本:

OP_DUP OP_HASH160<发送者公钥哈希> OP_EQUALVERIFY OP_CHECKSIG

举例来帮助你理解UTXO和输入输出都是什么:

例:矿工A挖出12.5个比特币,就会生成一个UTXO,某天A向B购买服务需要支付2个比特币,

输入:UTXO(A公钥哈希+12.5)+解锁脚本

输出:UTXO(B的公钥哈希+2)

UTXO(A的公钥哈希+10.5)  ------这个UTXO就是A的找零

这时系统会新生成两个UTXO ,一个是转给B的2个比特币,一个是找零给A的10.5个比特币,而原来的12.5个比特币的UTXO被删除。

关于输入输出开始我是犯迷糊搞不懂, 无法理解啥时候是输入啥时候是输出,如果以最通常的理解我转给你币当然你是收入了,我是输出了,但实际上那叫收入支出,这里的输入输出是站在比特币系统中UTXO的角度来说的,是对它从生到灭的这个过程而言的,当比特币(UTXO)要被花费的就是输入, 新生成UTXO的就是输出,这个输出也可以理解为诞生。


钱包里的余额是怎么回事?


我们现在手机端钱包或是网页钱包能看到余额,这是因为钱包就是一个程序,它把基于我的公钥锁定的UTXO进行统一整理,计算出一个数据显示出来,就好比比特币系统是一个藏宝库,钱包就是个大管家,当我点击查询余额时,就相当于给管家下了个命令,问他我在藏宝库里有多少宝贝,然后管家就和小伙计们在整个藏宝库里到处盘点,最后给我个清单,上面列出宝贝的种类和数量。


3.如何证明我转给你的币是属于我的,并证明我转的币没被花费过,这就是私钥要发挥作用的地方,这就是比特币系统在代码层面要做的事。

我转给你比特币这笔交易(交易结构)里必然要包含:基于我的公钥锁定的UTXO(锁定脚本),也就是我要花费的比特币,还有经我签名解锁并用你的公钥锁定的部分(解锁脚本),这两部分放在一起进行验证。上面这一段话可以用下面这个式子表示:

交易验证=对(运行解锁脚本+锁定脚本)的验证

二、交易的传播验证

其实节点验证交易时不只是对交易结构验证,还有很多条目的验证,主要内容有以下几项:

1、交易SIZE,不能超过区块的大小

2、交易输入的UTXO是存在的即我转给你的比特币是真实的

3、交易输入UTXO没被其他交易引用过(一笔钱没被花两次)

4、输入总金额>输出总金额(需要多留出续费)

5、解锁脚本验证(以栈的脚本语言把解锁脚本和锁定脚本放在一起验证这条交易是否合格)

到此,一项交易就被验证完成,除了放入本地交易数据池,还会被节点广播向其他节点传播。

三、区块的生成

矿工节点在本地的交易数据池中筛选出符合条件的交易,开始构建区块。

区块分为区块头部和区块身体,区块头部包含:版本号、父区块哈希值、MERKLE树根、时间戳、难度值、NONCE;区块身体由打包进来的交易构成。

四、区块的验证和链接

相邻节点收到区块后会检查这个区块是否合法,检查内容有以下项目:

1.验证POW的nonce值是否符合难度值,

2.检查时间戳是否小于当前时间2小时,

3.检查MERKLE树根是否正确,

4.检查区块SIZE要小于区块SIZE上限,

5.第一笔交易必须是coinbase交易(即挖矿产生),

6.验证每笔交易

经过以上验证,该区块内的交易全部真实,区块也真实有效后被广播出去,新的区块又以相同的方式做同样的工作,就这样一个个区块产生,并且链接在了一起,区块链就这样形成了。

区块链这个大帐本一页页的记录着,账本越来越厚, 区块们顺着时间的河向未来伸展。

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