code

2017年6月29日 星期四

Bitcoin筆記 8 - Bitcoin機制細節

Account-based ledger帳目 (bitcoin並非採取此機制)

一個可能的block chain currency可以採用像流水帳式的交易紀錄(以下假設一個block只有一筆交易):
隨著時間流逝,網路中其他nodes要驗證Alice的餘額數目將會非常困難,因為要往前追溯每一筆跟Alice有關的交易。


Bitcoin的機制:transaction-based ledger

每個transaction有:id, inputs, outputs。

例如以下是一個new coin creation transaction (所以沒有需要任何簽名),id = 1,inputs是一個空集合,outputs是一個只有一筆資料記載"25個bitcoin流向Alice"的集合:

第二筆交易block產生了:
id = 2, input是id=1的第0筆(zero-based index)output,因為alice必須要記錄告訴大眾她手邊的25 coins來源,也就是"25個bitcoin流向Alice"這筆紀錄,注意inputs(1[0]) 中的所有錢幣會被消耗掉,而在outputs產生等值的紀錄。outputs包含了兩筆記錄,第一筆是將17個bitcoin給予Bob,第二筆則是把剩下的coins給予Alice自己(這行為稱為change address),因為要產生等值於消耗掉的錢幣。此外Alice必須要簽署這個transaction,證明自己願意進行此筆交易。

隨著時間過,整個block chain又變長了:

每一transaction的inputs其實就是一個hash pointer指向跟這筆交易有關的前一筆交易,例如在最後一筆由Alice簽署的交易,我們可以知道她要spend的錢幣的來源是從2[1]的outputs來的,也就是第二個transaction outputs中的"8.0 -> Alice"這一筆紀錄,這樣我們可以驗證第四筆交易是否valid。



當然也可以merge已有的兩筆transaction到一筆:


當然也可以兩個人同時在一筆交易中付款給同一個人,此時需要轉出錢幣的兩人的簽名:


Bitcoin low-level transaction data structure

以下這個data structure看似json,就是很接近真實的bitcoin transaction data structure,不過真實的transaction data是binary file,人類無法讀懂的:



第一部分是metadata,除了包含一些必要資訊外,可以看到"hash"這個key,這就是整個trasaction的hash value,也就是這個transaction的ID,可以讓其他transaction利用hash pointer指向過來的依據。另一個比較奇怪的是"lock_time" key,這個待會會解釋。


第二部分是inputs,這就是一個array記錄了這次要消耗的bitcoin來自其他那些交易,這些交易的ID一樣放在"hash" key裡面,"n" key則為那筆交易的第n個index,例如我們之前說1[0]就是第一筆交易,其"hash"可能為某256bit字串,而"n" = 0。



第三部分是outputs,也是一個array包含了此次交易的所有的紀錄,首先每個output紀錄有一個"value"紀載此筆紀錄的交易金額,另外一個"scriptPubKey"的key,其值為一個script! 待下回分解。




1 則留言:

  1. Thank you for the post it was really useful.
    If you want to earn free bitcoin, do it here and use my referral link for extra bitcoin!
    Freebitco http://bit.ly/2KlX50P

    Yours,
    Ron.

    ---------
    On my blog I also talk about bitcoins!
    CHECK IT OUT if you want to learn more!
    my blog: http://bit.ly/bitandcoins



    回覆刪除