2017年3月18日 星期六

Transaction的後半生

前篇講到Transaction的前半生,從Create、Broadcast、到Propagate。真正精彩的是牠的後半生,以及牠的「生後」所發生的事情。

Transaction一旦進入Transaction Pool,就進入了牠的後半生,等待和Block結合。而Block會和Blockchain結合。在Transaction在Blockchain的日子裡,剛始的的狀態是不穩定的,有可能Block會離開Blockchain,Block一離開,就崩解,裡面的Transaction都解放出來。Block被埋在Blockchain愈深,Block就愈穩定,Transaction就愈難離開。這時候的Transaction可視為「壽終正寢」並且「蓋棺論定」了。

細節,我為大家一一道來。



Transaction,tx1,牠的前半生,像病毒一樣散播給全世界的Node。Node會去Verify tx1,若Node具有挖礦能力,稱為Miner,Verify通過,會把牠安置在Transaction Pool。這時tx1的狀態是Verified,開始進入牠的後半生。

Miner收集到足夠多的Transaction後,就開始建立一個Candidate Block,標記為Block 2,Miner按照優先順序,從Pool挑選到tx1,放到Block 2裡,開始對它挖礦。

我們把Block視為一道難解的問題,挖礦目的是去找到問題的答案。為了維持,全世界每10分鐘產生一個新的Block的節奏,該題目的難度是會被調整的。什麼是難解問題?如何挖礦?將在另一篇文章裡說明。

若Miner找到Block 2的解答,表示挖到礦,Miner將此Block 2放到Blockchain最上層的Block 1上面。這時候,tx1的狀態變成Confirmed。

這時候,在Blockchain裡面的tx1,還不算是穩定的。因為Miner還沒有將Block 2廣播出去,而且,其它的Miner也可能挖到礦。這種情況下,就會出現Blockchain的分叉。解決分叉的辦法,就是等新的Block出現,看它出現在那一個分叉,保留最長分叉的那一支Blockchain,短的那一支的Block就捨棄。所以,若Miner辛苦挖的Block 2不幸落入短的分叉,Block 2就會解體,裡面的Transaction,若還沒有被放在最新Blockchain裡,就會回到Transaction Pool。這時候的狀態,從Confirmed,變回Verified。

Blockchain的分叉,有時間,我再另擇文說明。

我們稱,Transaction有One Confirmation的意思是,牠現在在Blockchain裡面,並且埋在牠所屬的Block位於Blockchain的最上層。Two Confirmation的意思就是,被兩個Block埋,所屬的Block上面還有一個Block。

所以Confirmation的次數愈多,表示Transaction被Block埋的深度愈深,埋的愈深,出土或復活的機會就愈少,可以視為該Transaction「壽終正寢」了。

通常,大筆金額交易,要等6個Confirmation完成,亦即被6個Block埋,這就是我說的「蓋棺論定」的意思。也就是該Transaction的功過,己經被牢牢寫在Blockchain裡了。

-Count

沒有留言:

張貼留言