你可以產生堅實的程式碼,不需要審計了。您可以輕鬆地為不同的智慧合約程式碼切換平臺或目標語言。我們使用YAKINDU Statechart工具的開源版本將智慧合約建模為狀態機。透過這種方式,您可以使用模擬器測試模型,並最終生成可靠的程式碼。
問題是什麼?
區塊鏈的智慧合約開發是複雜的。如果你想為以太坊區塊鏈開發智慧合約,你必須學習一種全新的程式語言,如solid。如果您成功地編寫並測試了您的第一個智慧合約,那麼下一個障礙如下:由於您無法在將智慧合約部署到主網之後更新它,因此必須有人確保智慧合約程式碼能夠抵禦攻擊。
雖然關於已知的攻擊載體確實有很好的資源,但是在智慧合約中找到這些安全漏洞需要大量的經驗。
過去的經驗表明,智慧合約經常遭到駭客攻擊,導致資金被盜。由於保護智慧合約的工具還不夠成熟,無法發現所有可能的安全缺陷,因此需要對智慧合約進行審計。只有少數專家能夠以一種部署的方式對智慧合約進行程式碼審查,而不會讓您夜不能寐。這是智慧合約開發的第二個問題——它是昂貴的。
這種結合使得個人或小型初創公司開發高質量的智慧合約變得非常困難。
工具救援!
兩年前,我們開始開發YAKINDU solity工具——這是一個整合開發環境,提供諸一些敏感的幫助、智慧程式碼建議、快速修復、重構、模板和實時驗證等功能。
今年,我們將核心功能提取到所謂的語言伺服器中,可以在許多編輯器(如Atom或Visual Studio程式碼)中重用。雖然這極大地改善了開發人員的體驗,但這並不是故事的結尾。
智慧合約開發對於非可靠性專家來說仍然是難以掌握的。
由於我們也是YAKINDU Statechart工具(一種狀態機建模環境)的開發人員,所以我們對狀態機如何簡化智慧合約的開發進行了一些研究,並開始將我們的語言伺服器整合到YAKINDU Statechart工具中。
這基本上意味著我們可以在建模狀態機時訪問諸如全域性變數、常量和函式之類的內建特性。整合的模擬引擎允許驗證模型的行為。智慧合約的可靠性程式碼是由模型生成的,只需單擊一個按鈕。
什麼是狀態機?
大多數軟體開發人員認為狀態機比實際情況更復雜,並且在日常工作中傾向於離線狀態機。這並不奇怪——狀態機通常被認為過於複雜和學術化,不適合實際應用。
如果你看過維基百科上關於有限狀態機的文章,你就會發現一些術語,比如計算的數學模型、確定性(DFA)和非確定性(NFA, GNFA)自動機以及冪集構造。這聽起來並不有趣,對吧?
事實上,我們將在這裡使用狀態機來進行智慧合約開發,它們與學術上毫無對應之處——它們是為許多不同應用程式開發軟體的有效方法。
例如,它們經常用於嵌入式系統領域,以建模汽車或飛機等反應性系統。反應性系統是一個系統,它對外界由感測器或人機介面(如電梯或咖啡機)觸發的事件做出反應。智慧合約也一樣,外部世界的事務觸發對智慧合約的內部狀態的更改。
狀態機的基本構件是狀態和轉換。狀態機由有限數量的狀態組成。機器一次只處於一種狀態,這種狀態稱為活動狀態。它可以透過觸發器或在特定條件下從一種狀態更改到另一種狀態。
示例:管理許可證的智慧合約
例如,我們開發了一個用於許可證管理的智慧合約。這個用例非常適合區塊鏈,因為只要合約沒有終止,許可證持有人仍然控制著許可證協議。
一個智慧合約維護單個許可證的生命週期。建立之後,許可證進入有效狀態,初始預算為10個代幣。與智慧合約互動有兩個不同的介面。
許可證所有者可以增加預算來延長許可證期限。許可證管理人員可以根據時間段定期收取許可證費用。如果沒有更多的預算可用,許可證進入無效狀態,直到一個新的預算被新增到合約之後,許可證持有人才可以隨時終止合約,並將收到剩餘的預算。
看看上面的圖片。我認為這個模型比500行可靠程式碼更全面、更容易理解。
模型驅動的智慧合約開發的優點是什麼?
首先,您可以在更高的抽象級別上建模智慧合約。在隱藏所有技術細節時,可以將重點放在要開發的域邏輯上。圖形狀態機甚至可以被完全沒有程式設計經驗的人理解。
關注您的業務模型,而不是技術細節或程式語言。生成的智慧合約程式碼具有更高的質量。一旦確保程式碼生成器生成正確和安全的程式碼,您就不必審計使用該程式碼生成器生成的每個合約。這將減少小型創新創業公司以及大公司將他們的商業案例遷移到區塊鏈技術的障礙。
模型是獨立於平臺的。透過使用不同的程式碼生成器,您可以為不同的語言(如solid、Vyper或Yul)生成智慧合約。也許在未來,會有另一個像以太坊一樣強大的區塊鏈。
很高興知道您可以重用您的模型來生成另一個區塊鏈的智慧合約。
您可以執行和測試模型。在將模型部署到區塊鏈之前,您可以使用內建的模擬器輕鬆地執行模型,以驗證模型的行為是否符合預期。
該工具仍處於早期開發階段,程式碼生成器還沒有準備好投入生產。生成高質量的合同程式碼是一項相當艱鉅的任務,但我們希望我們將很快有一個工作原型可供下載!