Windows下fabric sdk鏈接Linux上fabric網絡的調試過程

    上個月剛入職一家公司從事區塊鏈研發工做,選型採用Hyperledger Fabric做爲開發平臺。團隊的小組成員所有采用的是在VirtualBox上面安裝桌面版的Ubuntu 16.04虛擬機,開發工具JetBrains GoLand也就直接在桌面版的虛擬機裏面安裝。而我由於以前比較習慣使用Vagrant + VirtualBox的方式快速加載我定製版的Ubuntu鏡像從而建立Linux開發環境,這樣一來的弊端就是我只能經過命令行來進行一切操做而沒有桌面可操做,因此個人整個開發IDE就在本機的windows上進行。windows

    咱們的Fabric網絡是採用的Docker方式啓動,做爲本身本地的測試環境天然就將網絡搭建在Ubuntu虛擬機裏面,前期由其它小組成員負責針對Go語言版本的SDK(Hyperledger子項目fabric-sdk-go)進行封裝調用並利用Beego做爲服務器將相應的API暴露出來,而我負責的即是將他們暴露出來的API進一步封裝爲標準Go版的SDK,所謂的標準就是對調用者而言無感是調用的區塊鏈。這個時候問題就出現了,在我寫SDK的過程當中用單元測試對他們的API發起Http請求調用時一臉懵逼,觀察Beego服務器打印的日誌信息少的可憐幾乎沒有,之前歷來不習慣用斷點調試的我這個時候首先想到的即是但願可以在他們的API服務中加入適當的斷點以便我這邊的SDK發起請求時可以一步步跟蹤到底,然而他們的API服務Beego也是部署在Ubuntu虛擬機中,對於他們本身開發來講反正開發工具IDE也在桌面版的Ubuntu中因此自然在IDE中啓動斷點調試沒有丁點兒問題,那個人IDE在本地windows上,因此我須要在個人IDE中Debug運行他們的API服務,這個時候麻煩來了,API服務由於封裝了對fabric-sdk-go的調用,也就意味着我須要作一些調整以便可以讓他們的API服務可以從個人本地windows鏈接到虛擬機裏面的Fabric網絡,只有這樣才能夠完成從個人SDK發起Http請求到他們的API服務,再由API去經過fabric-sdk-go發起對Ubuntu虛擬機上Fabric網絡的操做這樣一個完整的流程。 服務器

    說下我是如何讓本地windows的API服務鏈接到Ubuntu虛擬機裏面的Fabric網絡的。其實鏈接Fabric網絡是他們API所封裝的fabric-sdk-go,那麼最關鍵的配置無疑即是config_fabric.yaml配置文件。在那個配置文件中有一系列要訪問Fabric網絡所需的crypto,msp,tls等物理路徑,因此天然須要將其中${GOPATH}所有替換爲本地windows的GOPATH絕對路徑。本覺得這樣就能夠完事大吉,可沒想到這個時候不管我怎樣調用,他們的API始終在初始化fabric sdk的時候報錯,無奈只好在初始化的時候打斷點往進跟,跟的具體細節(坑也很多)就不展現了,關鍵部分以下圖。網絡

    終於明白原來它從fabric_config.yaml中讀取到systemCertPool屬性的值應該爲true,以至於調用了x509.SystemCertPool()方法,最終因爲runtime.GOOS == "windows",天然就拋出"crypto/x509: system root pool is not available on Windows"這樣的異常信息從而初始化SDK失敗。工具

 

查看fabric_config.yaml配置文件,果真systemCertPool爲true,以下圖:單元測試

 

    到這裏本覺得就算搞定了,便從個人SDK發起了一個建立Channel的單元測試,結果雖然沒報錯可是Ubuntu虛擬機上的Fabric網絡後臺一行日誌都沒打印,很顯然Fabric網絡的建立通道命令並無被API端的fabric-sdk-go所觸發,但是初始化已經成功了,只能再次在建立通道部分進行斷點跟蹤,發如今建立通道時候須要傳遞的通道配置文件txFile文件仍是以前在Ubuntu虛擬機下的絕對路徑,在SDK單元測試建立通道功能的時候將傳遞的txFile設爲本地windows上的tx文件絕對路徑,再次運行建立通道單元測試搞定!自此windows跟Ubuntu虛擬機的Fabric網絡正式打通,之後即可以在windows上利用IDE以Debug模式啓動他們的API服務,個人SDK發起調用時即可以輕鬆利用斷點調試來跟蹤底層執行邏輯。區塊鏈

 

    做爲一名純軟件工程專業畢業的程序猿,之前總以爲本身的邏輯思惟能力夠強,靠想象來感受代碼的執行流程,靠感受來判斷問題應該出在哪裏,經過此次的經歷深入意識到斷點調試的重要性,從今日後遇到bug必定第一時間用debug來執行調試,相信必定會節約很多寶貴的時間從而提升工做效率~開發工具

相關文章
相關標籤/搜索