长安链ChainMaker在线合约编辑器-SmartEditor
SmartEditor簡介
SmartEditor(后面簡稱IDE)?是長安鏈團隊為長安鏈量身打造的在線合約編輯器。支持用 Go 語言寫合約,支持長安鏈 v2.1.0+?版本。
用戶用瀏覽器訪問 IDE 主頁,然后用長安鏈 GitLab 賬號授權登錄之后,即可開始寫合約。我們為每個新用戶內置了模板合約,有合約編寫經驗的用戶可以參考合約模板編寫合約。我們也為沒有經驗的用戶提供了合約編寫說明,跟著說明一步一步沒有任何經驗的用戶也可以編寫出自己的第一個合約。對于想編寫功能復雜的合約的用戶,可以參考合約編寫說明里面的合約 SDK 介紹,然后根據SDK提供的合約方法編寫功能復雜的合約。
SmartEditor 提供了一系列功能幫助用戶用戶快速的編寫和使用合約。比如 內置合約 SDK、合約模擬執行、合約導出、合約部署、合約調用等,后面會逐一介紹。
SmartEditor 界面展示:
(圖1)
為什么要開發SmartEditor?
?
對于區塊鏈來說,合約至關重要。如果鏈沒有合約,就相當于一條靜止的鏈,有了合約,鏈才可以動起來。
其實寫合約就像用 Go 語言開發項目一樣簡單。在用戶本地有 Go 開發環境的前提下,創建一個項目,導入合約 SDK 的依賴,然后使用合約 SDK 提供的方法,按照合約編寫規范就可以寫合約。
問題1:搭建合約編寫環境可能要花費很長時間。
合約編寫完成之后怎么驗證合約的邏輯是否有錯誤呢?部署到測試鏈測試合約,可能會有些麻煩。
問題2:部署到測試鏈上可能稍微有點麻煩。
由于沒有快速寫合約的環境和方便的調試合約的方法,導致用戶往往認為寫合約太復雜,因此對寫合約這件事望而卻步。
問題3:未知的東西導致用戶高估了寫合約的難度。
針對上面這些問題,長安鏈團隊開發了在線合約編輯器,用戶不需要自己搭建合約編寫環境,可以直接在線寫合約。還可以模擬執行合約,驗證合約邏輯是否有錯誤。以及一些便捷功能如部署合約和調用合約等。
做到寫合約就像寫 Go 代碼一樣簡單。
SmartEditor功能及實現方式?
開發初期,我們調研了一些開源的在線代碼編輯器,考慮到輕量級和方便改造,最終選擇了 Wide。
Wide 是一個輕量級的在線 Go 代碼編輯器,提供代碼自動補全,語法高亮、查找方法定義、代碼編譯、代碼運行等功能。
我們在此基礎上進行完善和改進。完善UI設計,以及查找定義和代碼自動補全等功能。新增了合約編譯、合約調試、合約部署和合約調用等功能。并且內置合約 SDK ,達到用戶在IDE中可以直接寫合約的效果。
對比圖如下:
(圖2)
內置合約?SDK
內置合約 SDK 到 Go SDK,做到用合約SDK 像用 Go SDK 一樣方便。
首先把合約 SDK 源碼放到 GOROOT 下的 src 目錄。由于現在 Go SDK 也是使用 Go Modules 管理,所以放入之后先在 src 目錄執行?go mod tidy?拉取合約SDK的依賴,然后執行?go mod vendor?重新生成 Go SDK 源碼的 vendor 目錄內容即可。
合約SDK和合約調試SDK
在 IDE 中,有兩個不同的合約編譯流程,一個流程編譯出來的合約用于合約調試,另一個流程編譯出的合約用于部署上鏈。
我們在合約 SDK 的基礎上開發了合約調試 SDK。保證合約調試 SDK 和合約 SDK 實現相同的接口,提供相同的外部接口,然后把和鏈交互的部分改成本地模擬執行。這樣用合約調試 SDK 編譯出來的合約,可以在本地執行,不依賴鏈。依此提供合約調試功能。
合約 SDK和合約調試 SDK 的交互流程如下圖所示:
(圖3)
合約調試
合約調試功能,實際叫模擬執行合約。用合約調試 SDK 編譯生成可執行文件,然后把可執行文件放到 Docker 中執行,執行完成后把合約打印的日志、發出的事件、世界狀態和執行結果,通過 RPC 發送給 HTTP Server,然后服務端再把結果發送到瀏覽器。用戶可以通過日志、世界狀態和執行結果,驗證合約執行是否符合預期。
合約調試怎么保持上次執行后的世界狀態?
合約每次執行完成后我們會把世界狀態保存在瀏覽器端,當用戶再次執行合約時,瀏覽器端會把之前保存的世界狀態一起發送給服務端,服務端據此初始化世界狀態。做到模擬執行的連貫性。當然用戶也可以在瀏覽器端清空世界狀態信息。
模擬實現跨合約調用
在鏈上,跨合約調用是通過網絡實現的。模擬執行時,跨合約調用是通過在代碼中調用不同合約對象實現的。
假如有兩個合約,合約 C1 和合約 C2,想要在 C1 中調用 C2 的方法,只需要讓 C1 持有 C2 對象,然后在需要跨合約調用時調用 C2 的方法即可。
實際實現中,我們把跨合約調用涉及到的合約,放到一個工程下,根據規則修改合約的包結構,刪除不需要的文件。然后生成初始化代碼,把涉及到的合約對象放到 Map 中,在執行跨合約調用時,從 Map 中取出對應的合約執行相應的方法即可。編譯生成一個可執行文件,并在 Docker 中執行該文件。
合約部署和合約調用
合約部署是指把合約部署到鏈上。合約調用是指調用鏈上的合約。
這兩個功能的實現都依賴我們提供的瀏覽器插件 SmartPlugin。在插件里面用戶可以上傳證書和管理鏈。插件通過代理和鏈接的 PRC 接口交互,從而實現部署合約和調用合約的功能。
插件的使用可參考:SmartPlugin 使用文檔
使用SmartEditor?
下面是 SmartEdit 官網地址、使用說明和合約編寫說明,用戶可以訪問這些地址開啟使用 SmartEdit 之旅 。
SmartEditor 官網地址:?
https://ide.chainmaker.org.cn/?
SmartEditor 使用說明?,通過該文檔,可以了解 SmartEditor 界面的功能分區和怎么使用 SmartEditor 提供的功能。(鏈接見文末)
SmartEditor 怎么寫合約?,通過該文檔,可以從零開始寫一個簡單的合約,以及學習合約 SDK 的使用。(鏈接見文末)
在線IDE的發展趨勢?
我們調研了其它的在線代碼編輯器,比如 Eclipse Che 和 VS Code 瀏覽器版本 Code-Server。
它們的定位是一個在線代碼編輯平臺。給用戶提供一個在線的工作環境,用戶可以在這里編寫代碼、調試代碼、運行代碼和代碼版本管理等等。提供插件機制,用戶可以安裝不同的插件,來完善自己的工作環境,提高開發效率。功能非常豐富。
SmartEditor 的定位是一個在線合約編寫平臺,沒有插件和代碼版本管理等功能,只提供合約編寫、編譯、部署相關的功能,編寫合約的用戶使用起來會比較方便。因此我們選擇比較輕量級的 Wide。
目前對于代碼編輯器的兩個核心功能代碼編寫和代碼調試,有兩個成熟的協議 Language Server Protocol 和 Debug Adapter Protocol。使用這兩個協議,代碼編輯器可以快速的支持多語言。如果未來需要支持多語言或者代碼調試,我們會基于這兩個規范進行開發。
代碼編寫和代碼調試
Eclipse Che 和 Code-Server 的代碼編寫和代碼調試基于 Language Server Protocol 和 Debug Adapter Protocol 協議實現。
代碼編寫?的功能包括代碼自動補全、代碼格式化、查找定義、查找使用和重命名等功能。Language Server Protocol 協議規范了這些功能的請求和響應數據,同一個實現該協議的客戶端可以發送請求給實現該協議的不同服務端,客戶端可以很方便的擴展多語言支持。如下圖所示:
?(圖4)
代碼調試?的功能包括設置斷點、執行到下一個斷點、單步執行、進入方法、跳出方法等。Debug Adapter Protocol 定義了適配器協議,在代碼調試工具前實現該協議,基于該協議的客戶端就可以和不同的代碼調試工具交互。如下圖所示:
(圖5)
相關鏈接
-
wide:
https://github.com/88250/wide
-
SmartEditor 在線體驗:
https://ide.chainmaker.org.cn/login
-
SmartEditor 使用說明:
https://ide.chainmaker.org.cn/doc/SmartEditor%20%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E/
-
SmartEditor 怎么寫合約:
https://ide.chainmaker.org.cn/doc/SmartEditor%20%E6%80%8E%E4%B9%88%E5%86%99%E5%90%88%E7%BA%A6/
-
SmartPlugin 使用文檔:
https://docs.chainmaker.org.cn/dev/%E9%95%BF%E5%AE%89%E9%93%BEWEB%E6%8F%92%E4%BB%B6-SmartPlugin.html
-
SmartPlugin 倉庫:
https://git.chainmaker.org.cn/chainmaker/chainmaker-smartplugin
-
CodeMirror:
https://codemirror.net/
-
Eclipse Che:
https://github.com/eclipse/che
-
Code-Server:
https://github.com/coder/code-server
-
Language Server Protocol?:
https://microsoft.github.io/language-server-protocol/
-
Debug Adapter Protocol?:
https://microsoft.github.io/debug-adapter-protocol/
-
Monaco Editor:
https://microsoft.github.io/monaco-editor/
RECOMMEND
推薦閱讀
長安鏈ChainMaker容器虛擬機——DockerVM
長安鏈ChainMaker國密TLS設計與實現
長安鏈ChainMaker新特性——透明數據加密TDE
Tips
更多長安鏈開源項目QA,可登錄開源社區、技術文檔庫查看。
下載源碼
https://git.chainmaker.org.cn/chainmaker/chainmaker-go
查閱文檔
https://docs.chainmaker.org.cn/
長安鏈ChainMaker案例征集
http://www.wenjuan.com/s/UZBZJvhFGte/
“長安鏈ChainMaker”是國內首個自主可控區塊鏈軟硬件技術體系,由微芯研究院聯合頭部企業和高校共同研發,具有全自主、高性能、強隱私、廣協作的突出特點。長安鏈面向大規模節點組網、高交易處理性能、強數據安全隱私等下一代區塊鏈技術需求,融合區塊鏈專用加速芯片硬件和可裝配底層軟件平臺,為構建高性能、高可信、高安全的數字基礎設施提供新的解決方案,為長安鏈生態聯盟提供強有力的區塊鏈技術支撐。取名“長安鏈”,喻意“長治久安、再創輝煌、鏈接世界”。
總結
以上是生活随笔為你收集整理的长安链ChainMaker在线合约编辑器-SmartEditor的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ppmap - XSS扫描器
- 下一篇: 常见芯片封装类型介绍