作者:青冥子
最近在做NNS合約測試工具,目標是簡單好用,適用非技術人員測試,同時開發快捷,實現快速。再寫完後,發現這不就是一個NEO智慧合約黑盒測試框架嗎嘛,所以寫個文章分享給大家。
選擇的程式碼平臺是C#,顯示和邏輯處理分開兩部分,邏輯部分用netstandard2.0(同時支援.net framework4.6.1以上和.net core 2.0以上)寫,UI先用.net framework桌面程式做,後面有時間用.net core 2.1也做幾個簡單的示例。
要測試智慧合約,最大的難點是構造合約呼叫交易,這個工作別說非技術人員,就算非智慧合約的開發人員也是一頭霧水的。
但是,隨著NEO智慧合約的複雜度(例如NNS的競拍註冊器合約)、合約內管理資產量的提升,外加開發人員自身思維死角。合約的非技術人員規模黑盒測試快速實現工具是不可或缺的。這對矛盾,亟待解決。
過去,如果初入NEO的開發人員要測試合約,只能用NEO 的GUI除錯合約功能或者構造RPC呼叫CLI,但是使用非常不便,尤其當合約方法有數個且互相關聯的時候。
好在,最近NEL釋出了Neo_SDK_Thin
將NEO種公私鑰計算、各種格式轉換、指令碼構造、交易構造等核心方法單獨實現了出來,不依賴區塊同步。這是一個非常有用的工具,本文所說的專案也依賴它。但是這距離快速開始除錯合約還是很遠。構造交易必不可少的UTXO資訊還是缺少,如何使用Neo_SDK_Thin的交易類構造交易對於初學者還是困難,釋出交易後的結果檢視仍然不太方便。
所以,這裡向大家推薦,這個測試框架,希望能夠幫助大家更加快速、舒適的開始智慧合約除錯。
框架要點
構造nelApiHelper類,方便使用NEL系列實用API(僅合約呼叫相關部分)
構造neoHelper類,在Neo_SDK_Thin基礎上擴充套件了一些功能
- HexStr轉Str、HexStr翻轉、HexStr轉數值、大整數精度調整等方法
- Jarray2script方法,構造Jarray形式的合約入參,一鍵輸出合約呼叫指令碼
- neoAddress類,輸入WIF,就能自動構造出地址、公鑰、私鑰
- neoTranstion類,目前實現了普通轉賬交易和合約呼叫交易,一鍵構造、簽名、傳送
構造contractOperate類,為快速合約呼叫的基礎類
一個簡單方便的整合黑盒合約測試介面框架(可能比較醜)
其實可以看出,只要替換合約功能區,就可以快速為任何合約提供黑盒測試工具。檢視專案程式碼可以看出,其實合約功能區的程式碼非常少。
獲取合約資訊類方法,如NEP5 balanceOf(只需invokeScript不需要傳送交易)
執行合約功能類方法,如NEP5 transfer(需要傳送到鏈上)
這些方法,自己寫的部分都只需2-3行程式碼即可完成,而構造一個合約入參也就是一個編輯json的過程而已。
同時,交易傳送後只要將txid丟到txid暫存區,出新快後會自動載入該交易相關的ApplicationLog,可以一站式檢視合約方法結果、消耗gas、丟擲的通知等重要資訊。
當然這個還不是最終版,後期還會增加:
交易構造增加網路手續費功能
實現CGAS這類設計UTXO出入合約的複雜呼叫交易
將框架的通用類單獨釋出nuget,使用更加方便
xx等
最後送上程式碼地址(一開始是為NNS測試開發的,不要在意名字):github.com/NewEconoLa.…
PS:如果你只是想要在專案中使用NNS相關合約方法,可以直接用nuget www.nuget.org/package...