前言

稍微聽過恆星共識協議(Stellar Consensus Protocol, SCP)的人,可能知道Pi節點是用「投票」的方式產生共識,所以不像比特幣礦機要消耗大量的能源。不過是投什麼票呢?就是針對本文提到的「候選交易集」投票。

在打包交易的部分跟比特幣有點像,比特幣礦工節點也是可能各自收到不同的交易,要打包成新的區塊,但比特幣是比誰先計算出nonce值,誰就能寫區塊,Pi節點則是投票決定。

想了解比特幣的交易可以看這篇:

https://www.blocktempo.com/understand-structure-of-blockchain-bitcoin/

 

交易生命週期

  1. 建立(交易建立者):使用者透過設定來源賬戶、序列號、操作列表及其各自的參數、手續費以及可選的備忘錄和時限來建立交易。
  2. 簽名(交易簽署者):一旦交易內容被填寫完成,交易就形成了一個「交易信封」,裡面包含了交易本身和一個簽署者列表。必須收集所有必需的簽名並將其添加到交易信封的簽署者列表中。(通常只需要進行交易的賬戶的簽名,但也可設置更複雜的多方簽名。)
  3. 提交(交易提交者):簽名後,如果交易是有效的(註1),就可以提交到 Stellar 網路。如果交易無效,stellar-core 將根據交易的有效性規則立即拒絕該交易,該賬戶的序列號不會增加,並且不會從來源賬戶中消耗任何手續費。可以提交同一帳戶的多筆交易,前提是它們的每個序列號都相差一個。如果它們都是有效的,Stellar Core 將建立一個交易集,其中每個交易都按序列號排序。交易通常使用Horizon提交,但也可以將交易直接提交到Stellar Core的實例。
  4. 傳播(驗證者):一旦 Stellar Core 確定交易是有效的,它就會將該交易傳播到它所連接的所有其他服務器。通過這種方式,一個有效的交易被「淹沒」到整個 Stellar 網路。

  1. 建立候選交易集(驗證者):當需要關閉賬本時(產生新區塊),每個 Stellar Core 驗證器(參與共識的 Stellar Core 節點)收集自從上次賬本關閉以來它知道的所有有效交易,放到候選交易集。如果它現在聽到任何傳入的交易,它會將它們放在一邊,以便下一次賬本關閉。如果候選交易集中的操作數量大於每個分類帳(區塊)的最大操作數量,則交易將按其手續費多寡進行優先排序。
  2. 提名交易集(驗證者):一旦每個驗證者建立了一個候選交易集,該集合就會被提名到網路。

  1. 恆星共識協議 (SCP) 確定最終交易集(驗證者網路):SCP解決候選交易集之間的任何差異,並最終確定要採用的單個交易集、賬本的關閉時間以及所需的協議升級。

  1. 確定交易執行順序(驗證者網路):一旦 SCP 就特定交易集達成一致,就會為交易集計算執行順序。這既打亂了集合的順序,為競爭交易創造了不確定性,又維護了每個賬戶多個交易的序列號順序。

  1. 收取手續費(驗證者):同時為所有交易收取手續費。
  2. 應用(驗證者):每筆交易都按照先前確定的順序執行。對於每筆交易,賬戶的序列號都會被消耗(加1),交易的有效性再次被檢查,每一個操作按照它們在交易中出現的順序被執行。由於在交易和操作有效性檢查(步驟3)之外可能發生的錯誤,操作可能在此階段失敗。例如,付款餘額不足在提交時不會檢查,此時會失敗。如果任何操作失敗,整個交易都會失敗,之前的所有操作都會回滾。
  3. 協議升級(驗證器):最後,如果發生升級,則會執行升級。這可以包括任意邏輯來升級賬本狀態以進行協議升級,以及賬本表頭修改,包括協議版本、基本費用、每個賬本的最大操作數等。一旦完成,生命週期將重新開始。

 

1

交易的有效性

為了確定交易是否有效,在交易的生命週期過程中會進行許多檢查。以下條件確定交易是否有效:

·         源賬戶- 源賬戶必須存在於分類帳上。

·         費用——費用必須大於或等於作為交易的一部分提交的操作數量的網絡最低費用。請注意,這並不能保證交易將被應用;它只保證它是有效的。此外,源賬戶必須能夠支付指定的費用。在提交多筆交易但只能支付一部分交易的情況下,按序號順序檢查其有效性。

·         序列號——為了使交易有效,序列號必須比交易應用時存儲在源賬戶賬戶條目 中的序列號大 1 。這意味著在檢查候選交易集中具有相同源賬戶的多個交易的有效性時,它們必須都是有效交易,並且它們的序列號必須相互偏移 1。在申請時間方面,它們是根據它們的序列號進行排序和應用的。

o    例如,如果您的源賬戶的序列號是 5,而您提交了 3 筆交易,則所有交易都必須被視為有效,並且它們的序列號必須是 67 8,以便它們中的任何一個成為候選交易集。

·         操作列表每個操作都必須通過操作的所有有效性檢查

·         簽名列表——交易中除了滿足每個操作的簽名要求外,還必須滿足以下要求:

o    適當的網絡密碼是每個簽名者簽名的交易哈希的一部分。有關更多信息,請參閱網絡密碼

o    交易的源賬戶的所有簽名的組合權重滿足源賬戶的低閾值。這對於收取費用和在交易生命週期後期增加序列號是必要的。

·         備忘錄備忘錄類型必須是有效類型,並且備忘錄本身必須遵循備忘錄類型的格式。

·         前提條件——請參閱上面描述的有效性條件,以獲得對這些條件的詳盡解釋。對於設置的每一項,除非提交交易,否則交易將被視為無效:

o    Time Bounds  在交易的設定時間範圍內

o    Ledger Bounds  在交易的設定分類賬範圍內

o    最小序列號由序列號大於或等於此值的源帳戶

o    最小序列年齡- 在持續時間會議之後或超過源帳戶的序列號年齡

o    最小序列分類帳差距——在分類帳會議中或超過源帳戶的序列號年齡

o    額外簽名者——具有滿足每個額外簽名者的簽名

 

回首頁