很多人说过一句话:要真正了解区块链跟加密货币,先去买个比特币吧!今天我们不用买币,直接来看看别人的比特币交易背后到底怎么运作的。

区块链浏览器Blockchain Explorer

市面上有很多区块链浏览器,基本上看到的资讯大同小异,我们来看看Bob & Laura 交易成功后的比特币公开帐本上,可以看到什么资讯。

以blockchain.com为例:左边可以选择你想看到的比特币链上所有区块、交易纪录等资讯。

Blockchain.com

区块资讯Block

Blockchain.com

上集有提到,所有链上的交易都需要矿工帮我们打包成区块,交易被确认后矿工也从中获取奖励。

左图第一行是区块的Hash 值,我们能透过Hash 值唯一且准确地定义一个区块,区块链中每个区块的Hash 值都可以被验算,计算出的Hash 没有变化也就意味着区块中的信息没有被篡改。

而浏览器上区块的重要资讯包含:

Number of Transactions总交易数量:一个区块可以乘载1MB的交易内容,大约每十分钟不等的时间就会再产生一个新的区块来记录交易(见上图蓝框处),如同帐本写满就要换页的概念。 Height区块高度:第一个创始区块以来的序号。 Block Reward区块奖励:矿工的奖励金额。 Timestamp时间戳:让区块链上每一笔资料都具有时间标记,并表示这是一份完整的可验证资料。 Miner负责的矿工:矿工的身份有可能是个人、公司或什至是政府。上集也有提到,挖矿需要越大的算力来增加得到奖励的机率,因此通常都是由大型『矿池』聚集矿工一起挖矿,矿池的算力占比大,挖到比特币的总收益会更高。上图绿框处是2019年11月18日当下抓取的区块资料,可以看到AntPool、F2Pool、BTC.com、SluchPool即是世界前几大矿池。 Merkle Root :这个区块所有交易的Hash值。用一张图让大家了解区块内的交易资料如何受到保护。

中本聪的简化支付验证(Simplified Payment Verification)概念

KryptoGO

Merkle Root 作用:让区块内的交易纪录一环接一环串在一起而难以被窜改。假设有个人偷偷的把L2 的内容改变了,那么Hash (L2) 的值会跟着变动。而这个变动一路往上传,让顶楼的Top Hash 也产生改变,那就会被抓包了。

如果要验证L2 的交易内容有没有被窜改过,我们只需要:

先找到L2 的所在区块 重新算一遍Merkle Root,看看L2 算出来的Merkle Root 值跟顶楼的Top Hash 是不是相同,相同就代表L2 的内容没被窜改过。

交易纪录Transaction

区块链上的资讯是公开但匿名的,我们翻开刚刚区块内的所有交易,看得到每一笔交易比特币的输入(Input) 与输出(Output) 的纪录,也就是付款地址、收款地址,但并无法从地址知道转帐对象。而比特币的记帐方式就是透过UTXO 帐本模型。

UTXO 帐本模型:

在比特币的世界里,并没有一个纪录所有帐户『余额』的帐本。在比特币公开帐本里,我们只看得到『交易纪录』,余额则是根据交易纪录算出来的。

Input - Fee = Output:

实际上Input、Output 可以分别是很多的地址,可以把它想像成『钱堆』而不是帐户。你可以把好几堆别人给你的钱(Input) 拆成一堆一堆再分给其他人(Output)。我们直接来看图中第二笔最简单的交易:

Input:Bob从别人给他的18.8729个比特币钱堆中

Output 1:转给了Laura 5.2014个比特币

Output 2 :钱堆里还有13.6708个比特币则挪给自己

Fee:跟银行转帐相同概念的是,由转帐方扣除下面的Fee手续费

而Output在尚未转帐出去之前都是Unspent Output—未花费的输出。

→现在Laura的地址有了Unspent Output,可以当作她未来转钱给别人的Input。所以这5.2014个比特币并不是帐户余额,比较像是Laura的地址未来可以转帐出去的『未花费比特币的纪录』。

KryptoGO

双花问题Double Spending:

试想这样的纪录方式会出现什么问题—如果Laura同时将这笔5.2014 Unspent Output双重花费(Double Spending)转给两个地址呢

这时矿工就派上用场啦!矿工在打包区块时,要验证的就是『未花费Output 』是不是有在其他的区块已经被使用过。为了防止双花现象(Double Spending)的发生,前面提到的时间戳也是用来判别的工具,假设Laura把刚刚收到的5.2014个比特币重复转帐,两笔交易仅有一笔会成功被验证,因为矿工会记录优先接收到或是手续费更高的那笔交易,第二笔交易则不会受到验证。当然比特币区块链中也不是绝对不可能出现双花现象的,比如遭受 51%算力攻击的时候。

小结

比特币的UTXO 记帐方式与我们熟悉的『帐户余额』大不相同,但这样的方式省去繁杂的余额纪录,让帐本变得更轻盈。而它透过『链结』的方式组织所有交易的Input & Output ,保证每笔写入的交易都不可窜改,交易即清算且同时解决双花问题。

当然,除了比特币以外,以太币采用的反而是我们熟悉的帐户余额模型,有机会再跟大家做介绍啦~