淺談NEO區塊鏈的見證人和觸發器

買賣虛擬貨幣
今天我們將討論Neo區塊鏈上的兩個非常重要的機制,稱為見證人機制和觸發器機制。如果你之前還沒閱讀過有關Neo網路運作的內容的話,請在繼續閱讀本文之前花幾分鐘先看看這篇文章:https://medium.com/neoresearch/ing-neo-network-in-five-images-e51b7c19d6e0在開發智慧合約時,我們通常會關注一種特定的執行模式,稱為應用程式(Application)觸發器。回想下我們之前的Hello World的教程,它在應用程式觸發器上執行,在驗證交易之後執行已編碼的合約指令。因此,除了執行智慧合約外,Neo區塊鏈還允許我們對交易本身的行為進行程式設計,允許根據一些特定的規則決定是否需要執行驗證操作。當前存在兩種觸發器,分別是驗證觸發器(驗證當前交易是否有效)和應用程式觸發器(執行透過驗證的智慧合約)。NEP-7提案中有包含更多種類的觸發器,它可以新增另外兩種執行模式,不過這個我們之後再討論。現在我們先看看現有的這些內容。在?看看角色: YELLOW和BLUE

所以,讓我們來看看今天的兩個角色,YELLOW和BLUE。每個角色都有一個內部協議,用來根據簽名驗證公鑰,這是我們在錢包軟體上對普通使用者賬戶使用的標準合約。

在我們的第一個場景中,YELLOW想要給BLUE轉15個GAS,所以它建立了交易a。這個交易包含了YELLOW賬戶中的全部的20個GAS,它向BLUE轉了15個GAS,並將剩下的5個GAS(即找零)返回給自己。所以,總數是正確的,但是這個交易沒有透過驗證模式。

為什麼Tx A會失敗呢? 這些值都是正確的,但是從YELLOW中提取資產需要它對交易進行簽名 (否則任何人都可以花費他人的代幣了……)。

引入見證人機制

因此,我們需要為這個交易附加一個見證人,這個見證人必須完全符合YELLOW的scripthash。每個見證人由兩部分組成:VerificationScript(YELLOW的公鑰指令碼)和InvocationScript(YELLOW給與自己公鑰匹配的TxA進行簽名)。

好了,現在交易透過了驗證(進入網路mempool),這意味著最終它可以被包含在一個區塊中,且該交易將永久地合併至Neo區塊鏈。

避免雙花現象

我強調“可以包含”,因為並不是所有進入mempool的交易都會被允許在一個區塊上釋出。假設YELLOW是一個“聰明的傢伙”,它將支付給BLUE的15個GAS傳送給某個節點(RPC 1),同時透過另一個交易將另一筆傳送給自己的費用傳送至另一個節點 (RPC 2)。由於節點還沒有在點對點的網路上進行通訊,所以它們都將接受交易並透過驗證階段。但是,當兩個交易都到達共識節點時,其中只有一個是有效的,從而避免雙花現象 (假設TxB在TxC之前到達,因此TxB將釋出在區塊上,而TxC將會被拒絕釋出)。

引入一個多籤角色:YELLOW+BLUE

現在我們有另一位同事,名為YELLOW+BLUE。這是一個具有多籤的角色,它的驗證指令碼需要兩個簽名來匹配YELLOW和BLUE的公鑰。(注意:如果您想更深入地瞭解多籤機制,可以檢視https://medium.com/neoresearch/ing-multisig-on -neo-df9c9c1403b1 )

假設YELLOW+BLUE想向使用者BLUE轉15個GAS,這個過程會複雜嗎?你需要多少個見證人呢?只需要一個。Neo上的見證人機制可能會足夠的靈活,能夠像處理單個簽名賬戶一樣處理這些(以及其他的)情況。因此,只需填寫輸入和輸出,並在InvocationScript上附加一個帶有必要憑證的見證人(兩個簽名,一個代表YELLOW,另一個代表BLUE)。

網路費用

如果你錯誤地計算了交易的輸入和輸出,會發生什麼情況? 例如,如果YELLOW提取了20個GAS,而轉給自己時只得到了19.5個,交易是能夠被接受的。那剩下的0.5個GAS呢?它會作為網路費用(為網路上的優先順序付費)。

誰會得到這筆網路費用? 被選舉出來可以生產區塊的那些節點,也被稱為共識節點。**還有另一種型別的費用稱為系統費用,我們會在之後的文章中討論。然而,這筆費用並不屬於共識節點,而是重新分配給每個NEO持有者。

現在是時候執行呼叫了。

轉賬NEP-5代幣

我們已經處理過全域性資產(如GAS和NEO)的轉賬了,但是使用者也可以在NEO區塊鏈上構建自己的代幣。這些代幣是程式化的智慧合約,可以執行簡單的操作,例如為每個使用者儲存代幣餘額並允許代幣轉賬操作。

好的,那你怎麼判斷使用者是否“擁有”這些代幣呢? YELLOW將嘗試轉15個代幣(稱為TKN)給使用者BLUE。交易F不會透過驗證,因為YELLOW沒有提供憑據。

那麼,如何解決這個問題呢? 很簡單,只需為YELLOW新增一個見證人(與前面交易中使用的結構相同)。

應用程式觸發

全域性資產會自動要求附加見證人,所以現在我們需要使用Script屬性手動通知需要一個見證。注意,它傳遞了一個驗證觸發器(綠色箭頭),並執行程式碼(應用程式觸發器),返回HALT、BREAK(積極的結果)。

假設現在YELLOW想把150個 TKN轉給BLUE,但它沒有足夠的資金。在這種情況下,它會透過驗證,因為YELLOW是由其見證人授權在該賬戶上花費資金的,但是當代幣類智慧合約在應用程式觸發器上執行時,會返回一個失敗的結果 (FAULT)。

最後一個例子:多簽名代幣轉賬

最後一個例子邀請我們的Multisig角色重返舞臺。那麼,對於Multisig或任何其他協同賬戶型別,有時如果進行代幣轉賬的呢? 很簡單,只要附加見證人就行。只要見證人的VerificationScript能透過其對應的InvocationScript的驗證 (在本例中,新增來自YELLOW和BLUE的簽名),交易就會透過驗證。

結語。這個話題並不簡單,可能是Neo技術中最難完全理解的概念之一。所以,如果你不能一次搞定,別灰心! 慢慢來,相信最後你可以完全理解這個神奇的技術。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;