比特币交易
比特币的交易和现在大部分的交易形式都不一样,现在大部分的交易形式都需要一个第三方的权威机构(支付宝、微信支付、软银、银行)来为要达成交易的双方背书,我们去淘宝上买东西,你不可能直接把钱打给商家以免货财两空,你的钱会先打给支付宝等你确认收货后第三方支付宝才会把钱打给商家。
你看传统的互联网是信息互联网,我们只能在上面发送文字、图片、视频,若是没有第三方作为背书我现在都不能给你发一个红包;而随着区块链技术的出现信息互联网正在向价值互联网发展,相信在不久的将来我们的资产都将向价值互联网转移。
与传统银行和支付系统不同,比特币系统是以去中心化信任为基础的,它不归任何第三方管制,在这里你就是自己的上帝。
交易是点到点,真正做到了没有中间商做差价;那么比特币系统究竟是如何进行交易的呢?
比特币系统的组成
为了了解比特币的交易过程我们就需要比特币系统的组成。
如图:我们可以看到比特币系统由用户(用户通过密钥控制钱包)、交易(每一笔交易都会被广播到整个比特币网络)和矿工(通过解决一个SHA256的数学难题来获得发布区块的权利)组成。
比特币网络:比特币网络是由参与的比特币客户端联接几个其他比特币客户端组成的P2P网络。比特币网络的目的是将交易和区块传播给所有参与者。(说白了就是我们的手机钱包,这一步只要你的钱包联网了就会自动去完成)
基本概念理解
对于一个交易而言有交易输入和交易输出,输入和输出之间就会有个桥梁-矿工;矿工自然就要收取费用才会帮你干活;接受者收到比特币后就又会开始消费。
交易:交易就是将钱从输入转账至输出;交易也包含了每一笔被转移的比特币(输入)的所有权证明(所以说根本上并不是转移比特币,转移的是这笔比特币的所有权,即你能够证明这些比特币是你的),它以所有者的数字签名形式存在,并可以被任何人独立验证。
交易输入:被交易消耗的UTXO被称为交易输入(暂时将UTXO直接理解成“余额”就行);输入是指钱币的来源,通常是之前一笔交易的输出。
交易输出:由交易创建的UTXO被称为交易输出;交易的输出则是通过关联一个密钥的方式将钱赋予一个新的所有者。
矿工费:交易输入与输出之间产生的差值就是被矿工收取的比特币费用(这也是比特币系统运行的最重要的一个激励机制,未来随着比特币的开采完结矿工费将会是唯一驱动矿工工作的因素)
消费:转移一笔以前交易的比特币给比特币地址所标识的新持有者。(张三转账给李四,而张三的钱是王五转账给他的,那王五转给张三的钱相对于现在张三和李四的交易就为“以前交易的比特币”,李四就是“比特币所标识的新持有者”)
还有在比特币的世界中常见的交易形式有:一般交易(一个输入两个输出)、集合型交易(多个输入一个输出)、分散型交易(一个输入多个输出)。
故事背景
2017年的一天张三无意间在网上得知比特币,并深深被其吸引,经过一周的研究之后决定亲身尝试一下,于是通过网络找到比特币持有者王五,就花了一些钱从王五那里买了0.3BTC;这天张三工作下班后去了理发店,理发店主李四也是个科技爱好者,店里提供比特币支付。
理发后张三需要支付李四0.1BTC,店主李四用手一指柜台的二维码说:有微信、支付宝、比特币支付,您可以任意选择;张三来了精神因为他还没试过用比特币支付过任何费用;于是张三就打开存有比特币的钱包应用扫了码,扫码后会出现李四的钱包地址并向其输入金额0.1BTC,然后发送,要不了几秒钟李四就能够看到这笔交易,并完成交易(小额交易可以默认已被区块确认)。这其中的神奇交易方式都是由钱包客户端自己独立工作完成,而我们的任务就是探索这个交易的过程到底是如何构建,传播到接收的。
钱包的内在交易流程
张三扫码后直接输入金额0.1BTC随后的流程全权交于钱包来完成。
1.1钱包要获取正确的输入
张三的钱包在张三的手指点击“确认”后,开始立即行动了,首先钱包会在自己以往的交易记录中搜索,看看有没有“未消费的交易输出”(看看自己还有没有余额);
【大多数钱包应用维护着一个含有用钱包自己密钥锁定的“未消费交易输出”小型数据库。因此张三的钱包会包含他用现金从王五那里购买的比特币的交易输出副本】
经过钱包的搜索就找到了张三从王五那里购买的0.3BTC,于是就将这0.3BTC作为了交易输入。
1.2创建交易输出
钱包已经构建好了输入,那么接下来钱包要做的就是构建交易的输出,那么构建交易的输出到底是构建什么呢?
其实就是:张三的钱包会用李四的公开地址(官方说法:张三要用李四的签名来包装一个输出,这个签名就是李四的私钥,还记得前面说的吗?交易的输出则是通过关联一个密钥的方式将钱赋予一个新的所有者)将这0.1BTC给锁定起来,谁拥有这个公开地址的私钥谁就拥有了这0.1BTC;
那还剩下0.2比特币呢,这0.2BTC将会作为另一个输出(找零,这0.2BTC会用张三的钱包地址锁定起来)给张三。这其实就是交易类型中的--一般交易。
最后张三发现自己的钱包并没有0.BTC,那是因为有一小部分的BTC作为交易费被矿工收取了。
1.3交易传播
张三的钱包一切准备就绪,输入和输出都搞定了就等着广播到比特币网络告知全网:张三向李四发送了0.1BTC.
那究竟交易是如何传播的呢?
张三的钱包应用可以发送这笔交易给其它任意一个已联接到互联网的比特币客户端,任何比特币网络节点(其它客户端)收到一个之前没见过的有效交易时会立刻将它转发给联接到自身的其它节点。因此,这个交易迅速地从P2P网络中传播开来,几秒内就能到达大多数节点直至整个比特币网络。
经由网络节点告知李四的钱包说:有人给你转了一笔钱;于是李四收到消息尝试着打开这笔钱,因为这笔钱是使用李四的密钥关联的所以只有李四能够打开这笔钱,也就是说李四拥有了这笔比特币。
P2P网络:网络节点和网络节点之间的互联
1.4比特币挖矿
虽然这笔钱被广播到全网了所有人都知道你张三给李四转账了0.1BTC,但是如果没有人承认那你这笔交易就会被作废。
那么如何才能让这笔交易变得有效呢?这要经过一个挖矿的过程,矿工将这笔交易和其他交易(自上一区块后所产生的交易)放到自己构建的区块中为其工作量证明,直到有矿工将包含这笔交易的区块发布到区块链中,这笔交易才会被确认有效。
这个工作量证明算法指的用SHA256加密算法不断地对区块头和一个随机数字进行哈希计算,直到出现一个和预设值相匹配的解。第一个找到这个解的矿工会赢得这局竞赛并会将此区块发布到区块链中。
挖矿就是创建区块并将区块发布到区块链上,挖矿能够获得获得比特币网络的奖励求得一个区块的解后系统就会向你留在挖矿软件中的比特币地址发送奖励,以及区块中的所有交易费也都是这个求得解的矿工的;未来随着比特币被挖得差不多时,交易费将是驱动矿工工作的巨大动力,到那时交易费将是一笔巨大的收入;还有就是挖矿能够给区块创建信任。
接下来就来看看这个过程:
新交易不断地从用户钱包和应用流入比特币网络。当比特币网络上的矿工节点看到这些交易时,会先将它们放到各自节点维护的一个临时的未经验证的交易池中。当矿工构建一个新区块时,会将这些交易从这个交易池中拿出来放到这个新区块中,然后通过尝试解决一个非常困难的问题(也叫工作量证明)以证明这个新区块的合法性。
最后一个叫王二麻的矿工求得了这个区块的正解【求得解是谁的算力越大谁求得解的概率就越大】,于是王二麻子就能够将这个区块发布到区块链上了,其他矿工就会来验证这个区块,验明正身后所有的网络节点(客户端)都会将包含这笔交易的区块更新到已有的大账簿上(区块链)。
这个区块发布到区块链上之后,所有的矿工就会投入到下一个区块的求解上,随着矿工的逐渐增多算力的逐渐增强,为了保证10min左右一个区块的速度,所以网络会调整难度以保证以现有的网络算力求得当前区块的解的时间为10min。
随着新区块的生成越来越多,基于张三那笔交易区块的计算量就会越大,相当与可信度又得到了一层保障。按惯例来说,一个区块获得六次以上“证明”时就被认为是不可撤销的了,因为要撤销和重建六个区块需要巨量的计算。
好了比特币的交易过程就是这样了,是不是很神奇。