想開發(fā)智能合約?0門檻先 GET!- 火星技術(shù)帖(如何開發(fā)智能合約)
免責(zé)聲明:本文旨在傳遞更多市場信息,不構(gòu)成任何投資建議。文章僅代表作者觀點(diǎn),不代表火星財經(jīng)官方立場。
小編:記得關(guān)注哦
來源:區(qū)塊鏈大本營
編譯 | 火火醬
原標(biāo)題 想開發(fā)智能合約?先 get 下這個適合所有人的模型驅(qū)動法!(文末有福利)
不得不說,開發(fā)智能合約真的是一個既復(fù)雜又昂貴的過程。與在Solidity中編寫智能合約相反,將智能合約建模為圖形狀態(tài)機(jī)(graphical state machine)具有很多優(yōu)勢。你可以專注于業(yè)務(wù)邏輯,而不必糾結(jié)于技術(shù)細(xì)節(jié),甚至非程序員也可以理解你的合約在做什么。(還可以生成堅固的Solidity代碼,并且不再需要審核。同時,也可以輕松地為不同的智能合約代碼切換平臺或目標(biāo)語言。)
我們使用YAKINDU Statechart Tools的開源版本將智能合約建模為狀態(tài)機(jī)。這樣一來,你就可以使用模擬器測試模型,并最終生成Solidity代碼。
YAKINDU Statechart Tools:https://www.itemis.com/en/yakindu/state-machine/
想開發(fā)智能合約
這兩個問題你必須要解決
區(qū)塊鏈的智能合約開發(fā)非常復(fù)雜。如果你想為以太坊區(qū)塊鏈開發(fā)智能合約,那么就必須學(xué)習(xí)一種全新的編程語言,例如Solidity。
如果你已經(jīng)成功地編寫和測試了自己的第一個智能合約,那么我要提醒你下一個有可能遇到的難題:由于一旦將智能合約部署到主網(wǎng)絡(luò)后你就無法再對其進(jìn)行更新,所以必須確保智能合約代碼能夠抵御攻擊。
雖然我們已經(jīng)對已知的攻擊媒介有了一定的了解,但是要在智能合約中找到這仍安全漏洞仍需要具備大量經(jīng)驗。
參考:https://consensys.github.io/smart-contract-best-practices/known_attacks/
過去的經(jīng)驗告訴我們,智能合約會經(jīng)常遭到黑客入侵,出現(xiàn)資金被盜問題。
由于保護(hù)智能合約的工具還不夠成熟,無法發(fā)現(xiàn)所有潛在的安全漏洞,因此你需要對智能合約進(jìn)行審核。但現(xiàn)在只有少數(shù)專家能夠?qū)χ悄芎霞s進(jìn)行編碼審核,而這就引出了智能合約開發(fā)的第二個問題——價格昂貴。
這兩個問題放在一起,就使得個人或小型初創(chuàng)企業(yè)開發(fā)高質(zhì)量的智能合約變得非常困難。
可解決這些問題的工具
兩年前,我們開始開發(fā)YAKINDU Solidity Tools,這是一個集成的開發(fā)環(huán)境,提供了諸如上下文敏感幫助、智能代碼建議、快速修復(fù)、重構(gòu)、模板和實(shí)時驗證等功能。
今年,我們將核心功能提取到所謂的語言服務(wù)器中,可以在許多編輯器(如Atom或Visual Studio Code)中重復(fù)使用。
不過,雖然這極大地改善了開發(fā)人員的開發(fā)體驗,但這并不是一勞永逸的結(jié)果。
語言服務(wù)器:https://dwz.cn/KQjhESNR
對于非Solidity專家來講智能合約開發(fā)仍然十分困難
由于我們也是YAKINDU Statechart Tools(狀態(tài)機(jī)的建模環(huán)境)的開發(fā)人員,因此我們對狀態(tài)機(jī)如何簡化智能合約的開發(fā)進(jìn)行了一些研究,并開始將語言服務(wù)器集成到Y(jié)AKINDU Statechart Tools中。
YAKINDU Statechart Tools: https://dwz.cn/1Me4yZeY
這基本上意味著我們可以在對狀態(tài)機(jī)進(jìn)行建模時訪問Solidity的內(nèi)置功能,例如全局變量、常量和函數(shù)。
集成的仿真引擎可以驗證模型的行為。只需點(diǎn)擊一下鼠標(biāo),即可在模型之外生成智能合約Solidity代碼。
什么是狀態(tài)機(jī)?
大多數(shù)軟件開發(fā)人員認(rèn)為,狀態(tài)機(jī)比看起來復(fù)雜得多,并且會在日常工作中避免使用它們。這并不奇怪,因為狀態(tài)機(jī)通常被認(rèn)為過于復(fù)雜和學(xué)術(shù)化,不適合實(shí)際應(yīng)用。
如果你看過維基百科上關(guān)于有限狀態(tài)機(jī)的文章,就會發(fā)現(xiàn)諸如“計算的數(shù)學(xué)模型”、“確定性(DFA)和非確定性(NFA,GNFA)自動機(jī)”以及“powerset構(gòu)造”等術(shù)語。聽起來一點(diǎn)也不好玩,對不?
維基百科關(guān)于有限狀態(tài)機(jī)的文章:https://dwz.cn/1Me4yZeY
實(shí)際上,我們在這里進(jìn)行智能合約開發(fā)的狀態(tài)機(jī),與學(xué)術(shù)上說的的狀態(tài)機(jī)是完全不同的兩種東西。這里提到的狀態(tài)機(jī),指的是為許多不同應(yīng)用程序開發(fā)軟件的有效方式。
例如,它們經(jīng)常在嵌入式系統(tǒng)領(lǐng)域中,被用于對汽車或飛機(jī)之類的反應(yīng)系統(tǒng)進(jìn)行建模。反應(yīng)系統(tǒng)是一種對外界事件做出反應(yīng)的系統(tǒng),該事件由傳感器或人機(jī)接口(例如電梯或咖啡機(jī))觸發(fā)。
智能合約沒有什么不同,來自外界的交易觸發(fā)了智能合約內(nèi)部狀態(tài)的改變。
狀態(tài)機(jī)的基本構(gòu)建塊是“狀態(tài)”和“轉(zhuǎn)換”。狀態(tài)機(jī)是由有限數(shù)量的“狀態(tài)”組成的。機(jī)器一次只處于一種狀態(tài),該狀態(tài)被稱為“活動狀態(tài)”。它可以通過“觸發(fā)器”或者在特定條件下從一種狀態(tài)更改為另一種狀態(tài)。
示例:管理許可證的智能合約
舉個例子,我們開發(fā)了一個智能合約,該合約將被用于管理許可證。該用例非常適合于區(qū)塊鏈,因為只要不終止合同,許可證持有者就可以控制許可證協(xié)議。
一個智能合約可以維護(hù)一個許可證的使用周期。智能合約創(chuàng)建后,許可證進(jìn)入“Valid有效”狀態(tài),初始預(yù)算為10個代幣。有兩種不同的接口可以與智能合約進(jìn)行交互。
許可證的所有者可以增加預(yù)算以延長許可證期限。許可證管理者可以根據(jù)時間段定期收取許可證費(fèi)用。
如果沒有更多可用預(yù)算,許可證將進(jìn)入“Invalid無效”狀態(tài),直到有新的預(yù)算被添加到合約。許可證所有者可以隨時終止合同,并收回剩余預(yù)算。
可以看一下上面的圖片。我認(rèn)為該模型比500行Solidity代碼更全面,也更易于理解。
模型驅(qū)動的智能合約開發(fā)有哪些優(yōu)勢?
首先,可以在更高的抽象級別上為智能合約建模。在隱藏所有技術(shù)細(xì)節(jié)后,你可以專注于要開發(fā)的域邏輯。甚至連根本沒有編程經(jīng)驗的人都可以理解圖形狀態(tài)機(jī)。(關(guān)注于業(yè)務(wù)模型,而不是技術(shù)細(xì)節(jié)或編程語言。)
生成的智能合約代碼質(zhì)量更高。一旦確定了代碼生成器會生成正確且安全的代碼,你就不必審核使用此代碼生成器生成的每個合約。這將減少小型創(chuàng)新型初創(chuàng)公司以及大型公司將其業(yè)務(wù)案例遷移到區(qū)塊鏈技術(shù)的障礙。
模型是獨(dú)立于平臺之外的。通過使用不同的代碼生成器,你可以用不同的語言(如Solidity、Vyper或Yul)生成智能合約。也許在將來的某一天,將會產(chǎn)生另一個與以太坊一樣強(qiáng)大的區(qū)塊鏈。
更值得高興的是,你可以重復(fù)使用模型來為另一個區(qū)塊鏈生成智能合約。
你可以執(zhí)行和測試模型。在將模型部署到區(qū)塊鏈之前,你可以使用內(nèi)置模擬器輕松執(zhí)行模型,以此來驗證模型是否符合預(yù)期。
該工具仍處于早期開發(fā)階段,代碼生成器尚未準(zhǔn)備好投入生產(chǎn)。生成高質(zhì)量的合同代碼是一項非常艱巨的任務(wù),但我們希望我們能盡快提供一個可供下載的工作原型!