• 沒有找到結果。

第三章 區塊鏈中介元件軟體設計探討

3.2 BlockChainBox 模組化設計

3.2.9 Ethereum Explorer

以太坊區塊鏈上面的資料都是需要透過中間層,例如:web3.js 來進行調用,才可以取 得每個區塊中所記錄的資料,此功能的設計在於透過儲存在區塊鏈外部系統,可以不需 要每次都透過 web3.js 進行調用,本系統也將透過包裝過的 API 呼叫外部資料庫,減少 查詢的條件,針對各種查詢模式分類,讓使用者可以針對想要的訊息對外部資料庫進行 查詢。

38

3.2.9.1 Elasticsearch

本系統使用 Elasticsearch 將蒐集到的區塊鏈資料進行儲存,主要是針對區塊鏈的不可竄 改性,區塊鏈上的每個區塊經由廣播後資料及固定,故不需要頻繁的更改 Elasticsearch 內的資料內容,本系統使用 Elastcisearch 的搜尋功能將區塊中的資料方便任何針對區塊 鏈上的資料進行查詢。

Elasticsearch 使用 Java 開發作為其核心來實現所有索引和搜索的功能,但是它的目的是 通過簡單的 RESTful API 來降低操作上的複雜性,從而讓全文搜索變得簡單。

3.2.9.2 Explorer Service

本研究所設計的 Ethereum Explorer 模組是將更豐富的資訊提供給開發者,Explorer 的內 容資訊與直接透過 Web3.js 搜尋 Ethereum 網路上的資料並無差異,Ethereum 網路上的 資料亦可以透過 Etherscan 等第三方軟體查詢,故本研究所提出的設計是利用

Elasticsearch 本身已實作的優化查詢功能來提升效能,並且可以透過不同的過濾方式來 搜尋,以加強搜尋功能。

本研究之 BlockChainBox 與目前針對以太坊提供服務的 Explorer Service 相比,如:

etherscan.io,此第三方查詢需要透過該智能合約的開發人員將程式原始碼貢獻上去,才 能獲得該合約的 ABI 與完整合約資訊。

本研究使用中介軟體協助合約編譯及解析程式碼,將合約內所包含的所有 Function、

Event 擷取出來建立彼此之間的關聯性,之後才將其部署至 Ethereum 區塊鏈上。當合約 部署完成後中介軟體將紀錄合約位於 Ethereum 區塊鏈上的 address、合約部署時的 Transaction Hash、合約執行時所需要的 ABI、合約的 bytecode 等重要資訊於資料庫中,

方便查詢,透過本研究提供的 Ethereum Explorer 查詢合約的 address 可以獲得合約全方 位的資訊,參考圖 3.18。

39

圖 3.18 使用 BlockChainBox Explorer 搜尋 Contract

etherscan.io 目前提供的搜尋功能,透過 address 查詢後並沒有提供合約的原始碼、合約 的 ABI 等資訊,需要由程式開發者自行上傳,如圖 3.19。

40

圖 3.19 使用 etherscan.io 搜尋 Contract

Ethereum Explorer 提供的查詢包含五個功能,參考圖 3.20:

(1) 透過 Block 搜尋:系統會將區塊資訊寫入至資料庫內,查詢部分提供 API 調用,會 將資料打包成 JSON 格式進行回傳。

(2) 透過 Address 搜尋:系統會將交易地址的每一筆交易資訊寫入資料庫中,查詢部分 提供 API 調用,會將資料打包成 JSON 格式進行回傳。

(3) 透過 Contract Address 搜尋:將所有透過此中介軟體部署的智能合約內容儲存至資 料庫中,建立 Contract Function 與 Contract Event 的關聯性,其內容完整包含第三方 軟體所缺乏的合約原始程式碼、合約的 ABI、合約執行部署時的 Transaction Hash,

查詢部分提供 API 調用,會將資料打包成 JSON 格式進行回傳。

41

(4) 透過 Transaction Hash 搜尋:系統會將所有交易雜湊都記錄至資料庫中,並且與地 址建立關聯性,查詢部分提供 API 調用,會將資料打包成 JSON 格式進行回傳。

(5) 透過 Event 搜尋 :本研究所提出之中介軟體會監聽部署在此套系統的合約所廣播出 來的 Contract Event,並且儲存至資料庫中,與合約建立關聯性,查詢部分提供 API 調用,會將資料打包成 JSON 格式進行回傳。

圖 3.20 BlockChainBox Explorer Service 架構圖

相關文件