什麼是智慧合約?

185092178900發表於2023-05-17

什麼是智慧合約?

智慧合約是一套以數字形式定義的承諾,包括合約參與方可以在上面執行這些承諾的協議。區塊鏈技術給我們帶來了一個去中心化的,不可篡改的,高可靠性的系統,在這種環境下,智慧合約才大有用武之地。智慧合約是區塊鏈最重要的特性之一,也是區塊鏈能夠被稱為顛覆性技術的主要原因。

Neo 智慧合約有哪些特點?

Neo 智慧合約 2.0 包括以下特性:確定性、高效能、擴充性。其合約型別包括:驗證合約和應用合約。

從效能角度來說,Neo 採用了輕量級的 NeoVM(Neo Virtual Machine)作為其智慧合約的執行環境,其啟動速度非常快,佔用資源也很小,適合像智慧合約這樣短小的程式。透過 JIT(即時編譯器)技術對熱點智慧合約進行靜態編譯和快取可以顯著提升。Neo 虛擬機器的指令集中內建提供了一系列的密碼學指令,以最佳化智慧合約中用到密碼學演演算法時的執行效率。此外,資料操作指令直接對陣列及複雜資料結構提供支援。這些都會提升 Neo 智慧合約 2.0 的執行效能。

Neo 智慧合約 2.0 實現可擴充性的方法是透過高併發和動態分割槽的形式,結合其低耦合的設計完成的。低耦合合約程式在一個虛擬機器(Neo 虛擬機器)中執行,並透過互動服務層與外部通訊。因此,對智慧合約功能的絕大部分升級,都可以透過增加互動服務層的 API 來實現。

用什麼語言編寫智慧合約?

從語言角度看 Neo 智慧合約 2.0 與以太坊的區別更為直觀:與以太坊原創的 Solidity 語言不同,Neo 智慧合約開發者可以直接使用幾乎任何他們擅長的語言來進行 Neo 智慧合約的開發工作。Neo 提供了這些語言的編譯器和外掛,用於將語言編譯成 Neo 虛擬機器所支援的指令集。由於編譯器會針對 MSIL(微軟中間語言)來進行編譯,所以理論上任何 .Net 中的語言或者可被轉譯成 MSIL 的語言都可以直接支援。

當前已經支援的語言有:

  • C#、VB.Net、F#

  • Java、Kotlin

  • Python

  • GO

  • JavaScript

未來計劃陸續加入的語言還包括:

  • C、C++

多種語言的支援,使得 90% 以上的開發者無需學習新的語言即可參與到 Neo 智慧合約的開發中來,甚至可將現有業務系統中的程式碼直接移植到區塊鏈上。這將大大增加未來區塊鏈的全面普及。

最後從除錯角度看,通常智慧合約的開發過程是非常困難的,重要的原因之一是此前的智慧合約缺乏良好的除錯和測試方法。Neo 在 NeoVM 層面提供了程式除錯功能的支援,使得開發 Neo 智慧合約 2.0 變得更方便快捷。

智慧合約的觸發 

Neo 的智慧合約有兩種觸發方式:

  • 合約使用者的鑑權:智慧合約作為一個合約賬戶,當使用者使用該合約賬戶裡的一筆資產時,會觸發該智慧合約。

  • 手動傳送交易呼叫智慧合約:使用者傳送一筆交易(Invocation Transaction )來觸發一段智慧合約的執行。

一個合約可以同時由以上兩種方式觸發。由於鑑權觸發的合約是 UTXO 模型的鑑證過程,是在交易被寫入區塊之前執行。如果合約返回 false 或者發生異常,則交易不會被寫入區塊。

而由交易呼叫觸發的合約,它的呼叫時機是交易被寫入區塊以後,此時無論應用合約返回為何以及是否失敗,交易都已經發生,無法影響交易中的 UTXO 資產狀態。

NeoVM 虛擬機器 

NeoVM 是執行 Neo 智慧合約程式碼的虛擬機器。這裡所講述的虛擬機器概念比較狹義,並非是藉助於作業系統對物理機器的一種模擬,這裡的虛擬機器與 vmware 或者 Hyper-V 不同,是針對具體語言所實現的虛擬機器。

例如在 java 的 JVM 或者 .Net 的 CLR 中,java 或者 .Net 原始碼會被編譯成相關位元組碼,然後在對應虛擬機器上執行, JVM 或 CLR 會對這些位元組碼進行取指令,譯碼,執行,結果回寫等操作,這些步驟和真實物理機器上的概念都很相似。相對應的二進位制指令仍然是在物理機器上執行,物理機器從記憶體中取指令,透過匯流排傳輸到 CPU,然後譯碼、執行、結果儲存。更多資訊,請參閱  。

收費模式 

Neo 智慧合約在部署或者執行的時候都要繳納一定的手續費,分為部署費用和執行費用。

部署費用是指開發者將一個智慧合約部署到區塊鏈上需要向區塊鏈系統支付一定的費用,根據合約所需功能,系統將收取 100~ 1000 GAS 的費用,並作為系統收益。

執行費用是指每執行一條智慧合約的指令都會向 Neo 系統支付一定的執行費用。

具體收費標準請參閱  。

一些簡單的智慧合約(C#)

下面是一些簡單的 C# 智慧合約:

Show allCopy

public static bool Main() {     return true; }

該合約的返回值永遠為 true,表示任何人都可以花費這個合約地址裡的資產(可以理解為撒錢)。

Neo 錢包客戶端有刪除資產功能,當你刪除了一個資產,這個資產實際上傳送到了一個指定地址中,這個地址就是上述智慧合約所生成的合約地址,任何人都可以花費這個地址裡的資產,當然這個地址裡的資產都是別人不想要的資產。

Show allCopy

public static bool Main() {     return false; }

該合約的返回值永遠為 false,表示這個合約裡的資產無人能使用(可以理解為燒錢或銷燬一筆資產),比如裡面可以儲存一些已登出的公司的股權。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70029968/viewspace-2952801/,如需轉載,請註明出處,否則將追究法律責任。

相關文章