本文深入探討Ganache的功能和特點,包括其提供的本地以太坊環境、內置的區塊瀏覽器、快速區塊生成和豐富的測試工具。並詳細介紹Ganache如何整合到開發流程中,以及它在提高智能合約開發效率、減少錯誤和簡化測試過程方面的實際應用。
區塊鏈技術的蓬勃發展為智能合約和去中心化應用的開發帶來了前所未有的機會,然而,這種進步也不斷地對安全性和功能性帶來挑戰。在這個動態的環境中,Ganache工具備受矚目,作為「以太坊區塊鏈」上的一個關鍵性開發者工具,為開發者提供一個強大而靈活的本地測試環境。
本文將深入探討Ganache的功能和特點,包括其提供的本地以太坊環境、內置的區塊瀏覽器、快速區塊生成和豐富的測試工具。並將詳細介紹Ganache如何整合到開發流程中,以及它在提高智能合約開發效率、減少錯誤和簡化測試過程方面的實際應用。透過Ganache,開發者可以輕鬆創建本地區塊鏈,模擬各種交易情境,並同時檢視和測試其智能合約。此外,本文也將實際演練,展示Ganache如何成為開發者不可或缺的利器,提供一個安全可控的環境,進行以太坊智能合約的開發和測試。
區塊鏈背景知識介紹
區塊鏈是一種去中心化、分散式的數據儲存和管理技術,它的核心是一個由多個參與者(節點)共同維護的數據鏈,圖1為具象化的區塊鏈示意圖。數據被打包成區塊,每個區塊都包含前一個區塊的DIGEST,形成連貫的鏈條。這種連結的結構讓區塊鏈在保護數據安全性和不可篡改性方面表現出色。
區塊的基本結構
在區塊鏈的基本結構中,每個獨立的區塊都包含著一些重要的元素,這些元素確保區塊鏈的正常運作,以下是區塊元素的詳解:
‧前一區塊的DIGEST(Previous DIGEST):透過包含前一區塊的DIGEST,每個區塊都與其前一區塊形成一個緊密的連接,這稱為鏈條,確保了區塊鏈的連貫性。
‧數據(Data):區塊中包含的實際訊息,可以是各種數據,例如交易紀錄、合約內容或其他與特定應用相關的訊息。
‧時間戳(Timestamp):這一元素標誌著區塊的創建時間。時間戳確保了區塊在區塊鏈中的正確時間序列,有助於追溯及記錄事件的發生時間。
‧隨機數(Nonce):是Number used once的縮寫,在加密過程中只使用一次的數字。透過不斷調整Nonce的值,節點可以尋找到符合特定條件的區塊DIGEST,這是維持區塊鏈安全性的一部分。
‧DIGEST:最終區塊中將所有數據結合,並且透過HASH產生一個固定長度的區塊DIGEST。這個DIGEST是由前一區塊的DIGEST、區塊的數據、時間戳、Nonce等元素計算而來,作為區塊的唯一標識,同時確保區塊的唯一性和不可逆性。
圖2展示了區塊鏈中一個標準區塊的示意圖,這是區塊鏈的基本構成單元。
區塊之間的連結
在區塊鏈中,每個區塊的前一區塊DIGEST與後一區塊的DIGEST緊密相連,形成一條鏈條。這種連接方式確保整個區塊鏈的連貫性,使得區塊鏈成為一個不斷擴展、安全可靠的數據鏈。如圖3所示,呈現了區塊與區塊之間的連結示意圖。
區塊鏈的特性
區塊鏈包含了以下幾種特性,分別加以說明:
‧去中心化:區塊鏈不依賴單一機構或中央權威,而是由節點共同維護。這樣的分散結構增加了整個系統的安全性,因為沒有單一點容易成為攻擊目標。
‧不可篡改性:一旦一筆數據被打包進區塊鏈,修改它幾乎是不可能的。這種不可篡改性使得區塊鏈在金融、供應鏈和其他需要高度信任的領域中具有巨大的潛力。
‧透明性:區塊鏈的數據結構是公開的,任何人都可以查看和驗證區塊鏈上的交易和訊息。這種透明性為參與者提供了共享相同數據的途徑,從而降低系統的不確定性,增強信任度。
‧可追溯性:區塊鏈上的數據是不斷增加的區塊,每個區塊都包含前一區塊的DIGEST,形成一個鏈條。這種結構增加了數據的可追溯性,使任何一個區塊的數據都能夠追溯到最初的創世區塊。
以太坊介紹
以太坊是一個開源、去中心化的區塊鏈平台,旨在構建和運行智能合約和去中心化應用(DApps)。它在區塊鏈技術的基礎上進一步發展,為開發者提供了更靈活、強大的工具和功能,圖4為具象化的以太坊示意圖,而以太坊的核心特點,包括以下幾種:
加密貨幣交易
以太幣是以太坊區塊鏈的基礎虛擬貨幣。作為以太坊的本地貨幣,以太幣在該平台上被用於支付各種產品或服務的費用,包括交易手續費、智能合約的執行成本,以及礦工挖礦所獲得的獎勵等。因此,以太幣在以太坊區塊鏈上是一種可用於交易的加密貨幣。
智能合約
以太坊的創辦人Vitalik Buteriny在2015年時推出智能合約。智能合約是以太坊引入的一種創新概念,它是一種能夠在區塊鏈上自動執行的合約形式。想像一下,傳統合約需要倚賴中介機構進行監督和執行,而智能合約則透過事先編寫的程式碼,使得合約內的條件可以在特定條件觸發時自動執行,無須中介方的參與。
去中心化應用程式
去中心化應用程式(Decentralized Application,DApp)是一種建置在區塊鏈環境中的應用程式,又被稱為分散式應用。DApp的建構過程發生在區塊鏈網路中,程式碼可在區塊鏈公鏈上進行編碼,並且在建構完成後即可自動運行。由於區塊鏈的去中心化特性,所有數據皆具有公開透明性,且不容易被竄改,而這些程式多半是由智能合約所驅動。與一般智慧型手機上的應用程式相似,DApp為使用者提供多元化的服務與功能,包括音樂、遊戲、社群媒體等等。DApp具備以下的三個特點:
‧開源(Open Source):DApp的程式碼完全公開透明,並可供任何人自由取得、使用、修改及分享。應用程式能夠自主運行,並且不受實體機構的控制。所有數據以加密方式儲存在公共的去中心化區塊鏈上。使用者更可以提出建議並進行投票,以表決是否更改特定DApp的內容。
‧代幣(Tokens):DApp透過演算法生成本地代幣或透過智能合約發行代幣。所有獎勵機制必須依循此演算法運作,並將其公開於區塊鏈上,不可修改。這些代幣可被用作獎勵、運作基礎,也可用於獎勵參與挖礦的貢獻。
‧去中心化與安全保護:為確保資料的安全性,DApp中參與者的資訊都經過加密保護,並儲存在公開的區塊鏈上。這個系統由多個使用者共同維護,以確保安全性和防止單一點的風險。
Ganache實際操作
Ganache是一個以太坊區塊鏈的本地測試環境,可以用於開發、測試和執行以太坊智能合約。以下是Ganache的安裝教學,主要分為桌面應用程式版本和命令提示字元版本的安裝。前置動作說明如下:
Ganache桌面應用程式版本
Ganache提供一個易於使用的桌面應用程式,可以透過以下步驟進行安裝。
首先,下載Ganache。前往Ganache官方網站(https://trufflesuite.com/ganache/)下載最新版本的Ganache,選擇符合自身操作系統的版本(Windows、macOS或Linux)。
接著,安裝Ganache。根據下載的安裝文件進行安裝。對於Windows和macOS,只須運行安裝程式並按照指示進行操作。對於Linux,可能需要解壓縮壓縮檔並運行可執行文件。
在安裝完成之後,點選左邊的〔QUICKSTART〕按鈕啟動Ganache,如圖5所示。
啟動成功後,將看到一個用於顯示區塊鏈訊息和帳戶的視窗。一般情況下,Ganache會在本地主機的7545端口上運行,如圖6所示。
Ganache命令提示字元版本
命令提示字元版本同樣提供一個本地區塊鏈環境,可整合到自身的開發流程中。
首先,確保目前的電腦已經安裝Node.js。可以到Node.js官方網站(https://nodejs.org/)下載最新版本。
然後,打開終端機(命令提示字元)並執行「npm install -g ganache-cli」命令來安裝ganache-cli。安裝完畢,在終端機中執行「ganache-cli」命令,就能夠啟動ganache-cli。在ganache-cli啟動後,可以觀察到系統自動創建了10個帳戶(Accounts)。每個帳戶中都預先設定了100個測試用以太幣,如圖7所示,同時也提供了每個帳戶對應的私鑰(Private Key),詳見圖8。要注意的是,ganache-cli僅運行在記憶體中,因此每次重開時都會回到全新的狀態。
情境演練
在未來的數位社會中,區塊鏈技術也被應用在企業內部,實現公司內高層的董事長任派更加透明和安全。主人公Thomas是一位區塊鏈開發者,他在一家專注於區塊鏈應用的公司工作,而這家公司決定以自己為例,使用區塊鏈技術進行董事長任派的投票。
Thomas深知區塊鏈技術的強大威力,因此他著手設計一份智能合約,以確保公司內高層的選舉過程更加公正和透明。作為一個區塊鏈開發者,Thomas並非孤身一人,他與公司內不同領域的專業人士合作,包括企業管理者、區塊鏈專家等,共同致力於解決公司內董事長任派的問題。這個團隊花了數月的時間,最終他們決定使用Remix - Ethereum IDE環境(圖9),以Solidity語法創建了一份具有智能投票和計票功能的合約,如圖10所示。
隨著合約的不斷優化,Thomas決定將合約部署到一個實際的測試環境上。為了測試合約的效能,Thomas需要一個可模擬區塊鏈環境的平台。他決定使用開發者常用的區塊鏈模擬器Ganache。他打開Ganache,如圖11所示,創建一個本地的區塊鏈環境。要注意的是,本地端環境RPC SERVER為7545,如圖12所示,在之後部署智能合約時會用到這個數字。
在開啟Ganache之後,Thomas先將智能合約編譯,點選圖13中框選的按鈕。編譯成功後,就會出現如圖14左側所示的符號圖示。
再來,為了部署及測試智能合約,Thomas將點選圖15左側的圖示並且在ENVIRONMENT中選擇「Custom -External Http Provider」。點選之後會跳出如圖16所示畫面,Remix - Ethereum IDE預設為端口8545。還記得,先前開啟Ganache時的數字(圖12)嗎?要將Remix - Ethereum IDE預設的數字改為與Ganache相同的數字,也就是7545(圖17),這樣才能連上本地端區塊鏈並且進行測試。
Thomas和他的團隊從實際測試中獲得了寶貴的數據,他們不斷地修復合約中的漏洞,優化性能,以確保在實際的董事長選舉中,合約能夠應對龐大的流量和各種情境。最終,當合約經過多次測試且在公司內部的實際應用中穩定運作後,Thomas將其部署到公司的區塊鏈網路上,為公司的董事長任派提供一個安全、透明且無法篡改的投票系統。
結語
區塊鏈和以太坊已經不再只是專業人士的領域,它們正深刻改變著所有人日常生活和數位交流方式。將這兩者結合,得以建立一個如同超級安全的數據管理系統,就像擁有一個無懈可擊的保鑣。而以太坊更是這種技術的一大飛躍,為大家提供了一個平台,在其上可以建立各種應用程式。其中,智能合約更是這場革命的亮點,它自動執行合約,消除了中間人,使得各種交易更加迅速和高效。現在,隨著去中心化應用程式(DApp)的興起,可以想像這是一種更自由、更公平的應用程式,任何人都可以參與而不受單一機構的掌控。
<本文作者:社團法人台灣E化資安分析管理協會(ESAM, https://www.esam.io/)國立台北大學密碼編碼與計算理論實驗室創立於2009年,主持人為張仁俊教授,實驗室的研究領域除包含與資訊安全相關的密碼技術、編碼技術、計算理論外,也涵蓋車載資通訊安全、網路安全、數位影像處理與版權保護、醫學影像、數據分析等領域。>