'Galaxy數字之美:新型智能合約Q語言,如何實現100%無BUG?(二)'

"

在上篇《Galaxy數字之美:新型智能合約Q語言,如何實現100%無BUG?(一)》中,我們為大家闡述了VNT Chain基於形式化驗證的新型智能合約Q語言的它的設計原理及應用價值。大家似乎對這種既能保證100%無BUG同時操作簡單的Q語言如何操作應用更為“上頭”,那麼本文我們就接著為大家分享其智能合約編譯方法和形式化驗證具體實現方式。

"

在上篇《Galaxy數字之美:新型智能合約Q語言,如何實現100%無BUG?(一)》中,我們為大家闡述了VNT Chain基於形式化驗證的新型智能合約Q語言的它的設計原理及應用價值。大家似乎對這種既能保證100%無BUG同時操作簡單的Q語言如何操作應用更為“上頭”,那麼本文我們就接著為大家分享其智能合約編譯方法和形式化驗證具體實現方式。

Galaxy數字之美:新型智能合約Q語言,如何實現100%無BUG?(二)

在使用這種新型智能合約Q語言前,我希望大家對它有足夠的瞭解,再去嘗試成為早期使用者。為了讓大家更好的理解與實操,我接下就先從類型系統來分析這種新型智能合約Q語言與傳統C++,Crystal/Ruby語言的區別與優勢。

"

在上篇《Galaxy數字之美:新型智能合約Q語言,如何實現100%無BUG?(一)》中,我們為大家闡述了VNT Chain基於形式化驗證的新型智能合約Q語言的它的設計原理及應用價值。大家似乎對這種既能保證100%無BUG同時操作簡單的Q語言如何操作應用更為“上頭”,那麼本文我們就接著為大家分享其智能合約編譯方法和形式化驗證具體實現方式。

Galaxy數字之美:新型智能合約Q語言,如何實現100%無BUG?(二)

在使用這種新型智能合約Q語言前,我希望大家對它有足夠的瞭解,再去嘗試成為早期使用者。為了讓大家更好的理解與實操,我接下就先從類型系統來分析這種新型智能合約Q語言與傳統C++,Crystal/Ruby語言的區別與優勢。

Galaxy數字之美:新型智能合約Q語言,如何實現100%無BUG?(二)

如上圖所示,在C++、 Crystal/ Ruby 語言中, `Class` 是一切類的類,它也是自己的類;object為對象,一切對象均是某個類的實例(對象總是有類),一切都是對象,包括類也是對象,=> 類作為對象也有它的類。不懂技術的朋友可能會有點懵,那我們換一個直白的說法,也就是這些語言中字段不能被直接訪問,需要用方法包裝,這樣操作起來無疑比較複雜了。而這種新型智能合約Q語言中,類型被包含在更大的數學集合中,類型作為一種集合就可以交併補運算。原本的類型被叫做實體類(Entity Class),實體類具有字段、方法而數學集合沒有,所以操作起來就更為簡便。

另外函數方面,一般傳統C++,Crystal/Ruby函數的參數具有確定的類型,而我們新型智能合約Q語言的參數是數學集合。這一點是通過大量的泛型與實例化來實現的,只有合約API入口點需要具有確定的類型,而之後的函數調用均被泛型實例化,編譯時根據實際調用的參數類型派生出具有不同對應類型的函數。同時可以大量使用虛函數表,在保證一定性能的前提下,實現多類型參數(即一個參數不需要有唯一的類型,可以是確定的多個類型中的某個)。

"

在上篇《Galaxy數字之美:新型智能合約Q語言,如何實現100%無BUG?(一)》中,我們為大家闡述了VNT Chain基於形式化驗證的新型智能合約Q語言的它的設計原理及應用價值。大家似乎對這種既能保證100%無BUG同時操作簡單的Q語言如何操作應用更為“上頭”,那麼本文我們就接著為大家分享其智能合約編譯方法和形式化驗證具體實現方式。

Galaxy數字之美:新型智能合約Q語言,如何實現100%無BUG?(二)

在使用這種新型智能合約Q語言前,我希望大家對它有足夠的瞭解,再去嘗試成為早期使用者。為了讓大家更好的理解與實操,我接下就先從類型系統來分析這種新型智能合約Q語言與傳統C++,Crystal/Ruby語言的區別與優勢。

Galaxy數字之美:新型智能合約Q語言,如何實現100%無BUG?(二)

如上圖所示,在C++、 Crystal/ Ruby 語言中, `Class` 是一切類的類,它也是自己的類;object為對象,一切對象均是某個類的實例(對象總是有類),一切都是對象,包括類也是對象,=> 類作為對象也有它的類。不懂技術的朋友可能會有點懵,那我們換一個直白的說法,也就是這些語言中字段不能被直接訪問,需要用方法包裝,這樣操作起來無疑比較複雜了。而這種新型智能合約Q語言中,類型被包含在更大的數學集合中,類型作為一種集合就可以交併補運算。原本的類型被叫做實體類(Entity Class),實體類具有字段、方法而數學集合沒有,所以操作起來就更為簡便。

另外函數方面,一般傳統C++,Crystal/Ruby函數的參數具有確定的類型,而我們新型智能合約Q語言的參數是數學集合。這一點是通過大量的泛型與實例化來實現的,只有合約API入口點需要具有確定的類型,而之後的函數調用均被泛型實例化,編譯時根據實際調用的參數類型派生出具有不同對應類型的函數。同時可以大量使用虛函數表,在保證一定性能的前提下,實現多類型參數(即一個參數不需要有唯一的類型,可以是確定的多個類型中的某個)。

Galaxy數字之美:新型智能合約Q語言,如何實現100%無BUG?(二)

這樣設計的優勢在於,編譯語言的函數與數學上的定理(Lema)有很強的相似性——從某種角度上一個函數就是對一個定理的描述,就可以十分輕鬆的用 HOL 表達,而用戶對其的證明,只需要證明此定理,而不需要像C語言的形式化證明那樣對函數建模。

通過以上的對比分析,想必大家對這種新的Q語言已經有了更為深入的瞭解。接下來我們就來和大傢俱體講解這種Q語言的使用方法。如下流程圖所示:

"

在上篇《Galaxy數字之美:新型智能合約Q語言,如何實現100%無BUG?(一)》中,我們為大家闡述了VNT Chain基於形式化驗證的新型智能合約Q語言的它的設計原理及應用價值。大家似乎對這種既能保證100%無BUG同時操作簡單的Q語言如何操作應用更為“上頭”,那麼本文我們就接著為大家分享其智能合約編譯方法和形式化驗證具體實現方式。

Galaxy數字之美:新型智能合約Q語言,如何實現100%無BUG?(二)

在使用這種新型智能合約Q語言前,我希望大家對它有足夠的瞭解,再去嘗試成為早期使用者。為了讓大家更好的理解與實操,我接下就先從類型系統來分析這種新型智能合約Q語言與傳統C++,Crystal/Ruby語言的區別與優勢。

Galaxy數字之美:新型智能合約Q語言,如何實現100%無BUG?(二)

如上圖所示,在C++、 Crystal/ Ruby 語言中, `Class` 是一切類的類,它也是自己的類;object為對象,一切對象均是某個類的實例(對象總是有類),一切都是對象,包括類也是對象,=> 類作為對象也有它的類。不懂技術的朋友可能會有點懵,那我們換一個直白的說法,也就是這些語言中字段不能被直接訪問,需要用方法包裝,這樣操作起來無疑比較複雜了。而這種新型智能合約Q語言中,類型被包含在更大的數學集合中,類型作為一種集合就可以交併補運算。原本的類型被叫做實體類(Entity Class),實體類具有字段、方法而數學集合沒有,所以操作起來就更為簡便。

另外函數方面,一般傳統C++,Crystal/Ruby函數的參數具有確定的類型,而我們新型智能合約Q語言的參數是數學集合。這一點是通過大量的泛型與實例化來實現的,只有合約API入口點需要具有確定的類型,而之後的函數調用均被泛型實例化,編譯時根據實際調用的參數類型派生出具有不同對應類型的函數。同時可以大量使用虛函數表,在保證一定性能的前提下,實現多類型參數(即一個參數不需要有唯一的類型,可以是確定的多個類型中的某個)。

Galaxy數字之美:新型智能合約Q語言,如何實現100%無BUG?(二)

這樣設計的優勢在於,編譯語言的函數與數學上的定理(Lema)有很強的相似性——從某種角度上一個函數就是對一個定理的描述,就可以十分輕鬆的用 HOL 表達,而用戶對其的證明,只需要證明此定理,而不需要像C語言的形式化證明那樣對函數建模。

通過以上的對比分析,想必大家對這種新的Q語言已經有了更為深入的瞭解。接下來我們就來和大傢俱體講解這種Q語言的使用方法。如下流程圖所示:

Galaxy數字之美:新型智能合約Q語言,如何實現100%無BUG?(二)

整個過程主要包括三大步驟:編程語言解析、形式化證明、代碼發射。下面是這個實操步驟的具體拆解:

實操步驟

STEP1:編程語言解析

(1)詞法語法分析,包括詞法分析,語法分析,將用戶的代碼解析成 AST(Abstract Syntax Tree, 抽象語法樹)。其中詞法分析和語法分析,使用 Crystal 宏機制實現,代碼可以作為宏直接嵌入Crystal 代碼中,也可以直接輸入 AST,不通過宏式的語言描述,而是直接以方法調用的形式將對象傳入。

(2)語義分析-階段1,檢查AST是否構成合法的語義(例如智能合約API參數類型是否合規)。任何錯誤的詞法和語法將報出語法錯誤(SyntaxError),並不是所有的AST 都是合法的,語義分析將檢查,若檢查不通過,觸發語義錯誤(SemanticError)。

STEP2:形式化證明

(3)根據 AST 中形式化證明相關部分,生成形式化證明用的語法樹。

(4)根據形式化證明用的語法樹生成Isabelle/HOL 語言。

(5)使用Isabelle 交互式證明工具進行證明。

STEP3:代碼發射

(6)語義分析-階段2 :註冊全局參數或函數,確定外界可調用的接口(Export)與編譯目標,推倒編譯需要的信息,包括類型推導、內存空間分配、變量分配。

(7)代碼發射:根據語義分析得到的完全信息,從 Export開始編譯函數,及此函數調用到的函數,進而編譯出:目標函數、目標函數所調用的函數、API 包裝函數、內部函數、智能合約的構造器,字段包裝函數,基於 AST 發射代碼。其中所有的 Export 函數必須是實例化後的函數,故確定Export 的過程中即會實例化函數,而函數的實例化也即觸發了對此函數的類型推導。

當然,我們對這個實施操作的描述是為便於技術愛好者們能夠快速的理解和加以應用。我相信熟悉該領域技術的極客大神顯然可以很容易地對上述實施操作針對不同應用環境加以修改利用,並把我們解說的一般原理應用到其他實施例中而不必經過創造性的勞動,從而極大的提高工作效率。

現在,這種操作簡單且100%無BUG的Q語言你學會使用了嘛,是不是想要快速上手體驗一番?目前VNTChain主網Galaxy已經上線,一起來加入VNT Chain技術生態成為新型智能合約Q語言早期使用者,與我們共同探索數字世界的美妙吧。VNT Chain是一個開放的社區,我們會獎勵每一個為VNTChain做出貢獻的開發者,期待您的加入,共建VNT Chain技術生態。

"

相關推薦

推薦中...