一文讀懂PlatON智慧合約開發

買賣虛擬貨幣
硬核FAQ,這次講講智慧合約開發。昨日,PlatON聯合無涯社羣舉辦了主題為《PlatON智慧合約開發》的活動,PlatON技術副總裁傅志敬詳細分享了PlatON EVM合約與WASM合約開發相關知識與操作及合約開發場景應用。一場為開發者準備的知識盛宴盡在此文。Q:PlatON當前的測試網的智慧合約到什麼階段了?已經完善階段或是還會有大版本迭代?A:PlatON當前的測試網的智慧合約現在同時支援了WASM和EVM兩種智慧合約虛機平臺。WASM虛機目前只支援C++語言,EVM虛機支援Solidity語言。
測試網目前最新的0.13.0這個版本已經是完備階段,大家可以在測試網上進行相應的應用開發和測試工作。主網上線版本0.13.1沒有新的和大的版本變化,只是在0.13.0上進行了部分最佳化工作。Q:PlatON智慧合約支援哪些語言?未來會有新的語言支援嗎?A:PlatON智慧合約支援目前僅僅支援C++和Solidity兩種語言,C++語言對應的執行在WASM虛機上,Solidity語言對應的執行在EVM虛擬機器上。未來在WASM虛機上還會支援Rust、GO、Python等高階語言。Q:目前看到PlatON上支援EVM智慧合約, 那麼以太坊上現有的智慧合約是直接相容還是需要做一些調整可以部署在PlatON上?EVM智慧合約的完整技術棧包含哪些內容?
A:以太坊上現有solidity合約是直接相容的,如果合約中包含以太幣單位和地址的話,需要做簡單調整,改為PlatON的LAT相關單位和地址即可。並且我們鼓勵社羣開發一鍵移植的工具,可以考慮用Grants的方式進行激勵,歡迎開發者社羣的高手貢獻一份力量。EVM智慧合約完整技術棧包含以下內容:對區塊鏈和虛擬機器有一個簡單的理解,比如gas機制、交易、區塊打包和上鍊流程等solidity語言相關知識,比如solidity語言的語法、對應的型別和介面等開發者工具,如:truffle
Q:當前合約的部署成本的開銷是怎麼計算的?對GAS的開銷有哪些建議給開發者?A:當前合約的部署成本的開銷主要還是看合約二進位制大小,同時跟合約的引數的大小也有關係。部署成本是gas*gasprice。對GAS的開銷的建議是:使用正確的型別,如:可以使用uint型別的情況下,不要使用string型別避免使用不必要的程式碼等
避免在迴圈中執行gas成本高的操作。如:由於SLOAD和SSTORE操作碼的成本高昂,因為管理storage變數的gas成本要遠遠高於記憶體變數,所以要避免在迴圈中操作storage變數避免迴圈中的重複進行計算另外,我們現在正在與電子科大教授開發合作EVM gas最佳化專案。Q:以太坊平臺上的合約的安全問題層出不窮, 針對此問題PlatON對開發者有哪些建議?以及PlatON對安全的底層做了哪些工作?A:關於以太坊平臺上的合約的安全問題,我們的建議是:可以參看我們的安全開發指南、包括從編譯器、開發流程、以及怎麼避免重入、傳送token、棧深度和許可權控制等常見漏洞。
PlatON對安全的底層做了如下工作:PlatON底層從P2P安全(異形攻擊、節點連線數等)、RPC安全、賬戶模型、虛擬機器,共識安全等多方面做了驗證和測試。同時慢霧進行了兩輪安全審計,慢霧鏈安全審計負責人Johan表示:“慢霧安全團隊針對PlatON的WASM虛擬機器、EVM虛擬機器、節點激勵模型等7個模組進行了新一輪安全審計,並重點審查了在第一輪審計之後修改的程式碼。據審計報告結果顯示,PlatON以極高的程式碼質量,確保了已被審計部分不存在任何安全風險。”我們非常重視安全問題,積極開展相關的工作,比如與慢霧合作漏洞賞金活動、請Runtime公司進行形式化驗證和跟電子科大合作開發EVM安全專案等Q:基於PlatON開發智慧合約在開發實踐上有哪些更好的實踐操作的建議給開發者?A:我選WASM和EVM共性的幾個要點簡要說一下:
費用合理設定當需要在PlatON的主網上部署合約時,需要設定一個合理的費用限制。在PlatON網路中,預設最高gas的限制為 100,800,000, 最低為 21,000,過低或者過高都會導致交易失敗。在部署大型合約或者執行復雜功能時,可以將gas的限制調高。例如: 1,000,000,如果是普通轉賬則設定為最低值即可。具體的值需要根據合約的規模及複雜度進行估算,在合約釋出前可以呼叫介面platon_estimateGas進行大概估算,避免因不足而導致失敗。避免超時在PlatON網路上傳送交易,沒有超時的概念,但是最終會根據所設定的gas限制值停止,如果限制值低於合約部署所需要的消耗,則交易傳送失敗,同時會扣除對應的手續費。手續費的設定不可能無限大,因為在網路中,區塊本身有一個最大的gas上限,當交易的GasLimit超過該值時,交易將無法被接收。如果是針對已釋出的合約執行call呼叫(call呼叫指合約邏輯內無狀態變更操作),存在5s超時的限制,如果在5s內合約邏輯沒有執行完成,虛擬機器會超時強制退出,導致查詢失敗。為避免部署合約交易失敗,請嘗試將大型合約分成較小的塊,並根據需要相互引用。為了避免無限迴圈,請注意常見的陷阱和遞迴呼叫。
非法操作處罰如果智慧合約不是透過標準有效的編譯器編譯合約或者隨意的更改指令碼,都會導致操作碼無效。此類合約不僅無法部署和執行成功,而且還會產生“GasLimit*GasPrice”的全額懲罰,當次交易的手續費會全部被扣除,這是一個力度很大的懲罰。如果操作者沒注意該點,不斷重試,那麼付出的成本會更高,代價更重。一般產生無效操作碼有以下情況:對正常已編譯出的合約手動更改了指令碼合約編譯器版本與網路鎖支援的合約版本不一致使用浮點數運算
在PlatON網路中操作合約時,請務必先確認當前網路所支援的智慧合約版本,然後選擇對應版本的編譯器。常規操作是使用PlatON官方提供的最新的Truffle/PlatON-CDT來編譯/部署/執行合約,同時在切換到主網操作前,務必在測試網進行有效的驗證。其他還有編碼規範、智慧合約檔案組織結構、WASM合約特殊的一些C++語言的限制和特性建議我就不在這裡展開贅述了,有興趣的朋友可以去我們的官方文件上面查閱學習,具體地址如下:EVM:https://devdocs.platon.network/docs/zh-CN/EVM_Smart_Contract/#%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5WASM:
https://devdocs.platon.network/docs/zh-CN/WASM_Smart_Contract/#%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5Q:WASM合約開發適合的場景有哪些?對於WASM技術PlatON未來會有什麼動作嗎?A:我們在內部測試中對比EVM與WASM虛擬機器的TPS可以看到,EVM在執行業務邏輯比較簡單的場景中具備更好表現,這主要原因在於EVM的載入啟動簡單,WASM的啟動在高階語言層面(C++)進行實現。當執行的業務邏輯較為簡單的情況下,WASM的載入啟動在一筆交易的執行時間佔比較大。但當業務邏輯複雜一些,如測試中的插入排序測試,業務邏輯執行時間佔比更高情況,WASM的優勢則體現出來,這歸功於WASM與高階語言的結合,各個高階語言擁有強大的編譯最佳化能力,對執行效率有極大的幫助。由此測試我們更推薦在業務模型複雜的情況使用WASM合約,在執行效率與業務抽象能力上都更具優勢。結論是:WASM合約對於比較複雜的合約具有更好的效能和更低的GAS消耗。另外針對WASM我們持續在最佳化效能和GAS消耗。並且我們後續會在WASM上提供隱私計算的能力。Q:當前智慧合約上適合開發的應用場景會有哪些?
A:當前PlatON上的智慧合約適合開發的應用場景有:金融,遊戲,社交等。我們後續會在WASM上提供隱私計算的能力,並正在以此為基礎來建構下一代的資料資產權確認與價值交易的基礎設施服務。另基於EOS開發Horseman GO這款遊戲,已經開始在往PlatON上面移植了,敬請期待!Q:開發者在開發環境下如何使用PlatON的錢包介面?以及使用者端是如何方便地使用Dapp訪問錢包?A:我們給開發者提供強大的開發者工具包:platon-truffle
https://platon-truffle.readthedocs.io/en/v0.11.1/Java sdkhttps://devdocs.platon.network/docs/zh-CN/Java_SDK/JS sdkhttps://devdocs.platon.network/docs/zh-CN/JS_SDK/利用對應的SDK透過RPC介面來使用PlatON錢包介面。
目前我們官方提供了一個ATON錢包Dapp,可以方便使用者使用錢包:https://devdocs.platon.network/docs/zh-CN/ATON-user-manual/

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;