在過去,NEL發布了neon_debug_gui調試工具,用來進行neo上的智能合約調試。現在,我們發布了它的online版本——NeoRay,一個將智能合約的編譯、部署、調用、調試集成起來的超級工具。

如果你已經熟悉了我們以前的調試工具和流程,那麼你可以繞過這篇文章直接使用這個在線調試工具

neoray.nel.group/

1為什麼我們要做它?

我們之前做了類似的調試工具,但後來我們發現這些工具對於新手而言還是過於複雜,他們需要學習額外的配置、使用流程,包括瞭解合約調試的實現原理。因此我們做了一套流水線式的調試工具,能夠輔助開發者們從合約代碼快速進入調試流程。更棒的是,它不需要你去配置環境,只需要打開網頁就能使用。並且整個工具都是在線的,這意味著當你遇到難以解決的問題時,可以請他人來幫你看看問題出在了哪裡。

2它有什麼功能?

這套調試工具由一個錢包、一個簡易的代碼編譯器、以及一個交易結果解析器組成,接入的是NEO的測試網。我們將調試工具主要分為三個部分:合約編譯部署、合約調用、合約調試。每個部分都被放在一個頁面中。

合約編譯部署

在合約編譯部署頁面,有兩個功能:編譯合約代碼和將編譯通過的合約代碼部署到鏈上。

我們的在線編譯器可以將C#語言的合約代碼編譯成可部署上鏈的AVM文件,但是當代碼存在語法錯誤時無法通過編譯。我們建議您在visual studio中先寫好代碼,確保沒有語法錯誤後再粘貼到網頁上進行編譯。

您也可以通過合約hash載入我們伺服器上已保存的合約代碼或直接載入自己曾部署過的合約代碼。需要注意的是,我們會將通過調試工具部署的合約代碼都保存在伺服器中,以便進行合約調試。任何人都可以通過hash訪問到合約源碼。因此使用本工具意味著您的代碼會被開源。

合約編譯通過後就可以直接部署到鏈上。你需要填寫一些合約信息,這些信息和neogui上的相同。這些信息會在你再次打開合約代碼時顯示出來。等待合約部署交易被鏈上確認後就可以使用交易調用合約了。

您可以在操作記錄裏看到合約部署交易的確認狀態,並在交易被確認後對合約進行調用。

合約調用

在合約調用頁面中,有兩個功能:試運行合約和調用合約。在這之前,你需要填入目標合約hash。

試運行合約和調用合約都需要填入交易參數。交易參數包括你需要調用合約中的哪個函數及其需要給它傳的參數。具體的的填參方法我們會由專門的說明文檔,點擊幫助就可以查看。

「試運行」不需要發交易,不會更改鏈上數據,即時返回結果,但無法執行鑒權操作,一般用於查詢合約中的數據。而想要調試合約就需要使用「調用交易」,發一筆交易來調用合約,以查看合約在真實環境下是怎麼被執行的。

合約調試

當你調試合約時,其實你是在調試某個合約在某一次交易時的執行情況。因此你需要交易被確認後,纔可以進行調試。需要注意的是,只有在我們的調試工具裏調用使用我們調試工具部署的合約的交易才能被調試,因為調試需要的數據需要提前被收錄,而收錄數據的操作需要調試工具發起。

你需要先填入(或選擇)一個交易ID,才能查詢它的執行數據。

調試前查看一下log/notify數據,如果數據正確則合約運行正常,沒有必要調試。如果出現錯誤則需要通過點擊AVM查看合約運行步驟的方式調試合約。

在AVM列你會看到節點執行合約時的每一步操作,右側區域是這些操作所對應的代碼,左側是對應的內存堆棧數據。通過移動AVM的遊標,代碼和堆棧數據都會變化。整個調試過程類似於我們調試程序時在代碼上打斷點,不同的是在這裡每一步操作都會被打斷點,你可以清楚地看到節點內部的執行邏輯和狀態。

堆棧裏的數據都是16進位的位元組碼,人類是無法直接閱讀的,左下角的Value tool可以幫你把堆棧中的數據流轉換成字元串、數字或地址。

3我該如何使用?

第一步,你得有一個NEO的錢包。如果沒有,可以在我們的登錄頁創建一個新錢包。

確保你的錢包裏有足夠的測試網gas(一般發一個合約需要500gas)。你可以在我們的調試工具裏申請測試網路的gas。每個錢包每天可以申請500gas,需要更多gas的話只能在我們的開發者論壇裏留言獲取。

第二步,你需要將智能合約代碼輸入調試工具,點擊編譯代碼將代碼編譯為可部署上鏈的avm。

如果出現編譯失敗,那應該是代碼語法不正確或缺少了必要的引用,會顯示下圖的提示。這裡暫時無法提示明確的錯誤行數。

第三步,將編譯通過的合約代碼部署到網路中,等待交易被確認。

第四步,選擇一個你已經部署的合約或者直接輸入合約hash來調用其他人的合約。

然後填入調用參數,點擊調用交易發一筆調用該合約的交易。這筆交易可能會涉及到多個合約的互相調用,要保證所有的合約必須是使用調試工具部署的,否則調試時會看不到代碼。如果只是為了查詢合約存儲的值直接試運行即可。

第五步,選擇一個你已經發出的交易進行調試或者直接輸入交易TXID來調試這筆交易。在屏幕最中間你可以看到AVM、Careinfo和log/notify。

第六步,查看log/notify信息,查看完整的合約執行結果。如果交易返回的數據與預期的不一致,返回AVM查找問題。

第七步,點擊AVM,查看對應合約代碼和堆棧數據。

AVM那是虛擬機在執行合約時進行的每一步操作。這個看不懂沒關係,在AVM中點擊單個步驟可以查看對應代碼和堆棧數據,然後點擊AVM後使用↑↓箭頭移動遊標可以看到代碼是怎樣被一行一行執行的。如果合約執行是有問題的,那麼最後的執行步驟就會返回錯誤,又或者你會發現代碼執行順序或堆棧數據與你的設計不一致。

通過觀察這些執行狀態,你就可以完成自己的合約調試,然後回到起點,修改代碼,重發合約、進行調試,直到它與你的設計完全吻合。


推薦閱讀:
相關文章