深入了解區塊鏈(一) - 如何使用Ganache來模擬一個真實的以太坊

引言

關於以太坊上的交易,通常我們都會到etherscan.io這個網站來進行確認。但初入區塊鏈的朋友們往往看到裡面一大堆的資訊,除了from和to外可能都是一頭霧水。想多了解些相關知識又不知如何下手才好,因此動念寫下一些本人當初步入區塊鏈時可能用來切入的一些工具,來和各位同好分享。
本系列文章可能會需要您的一些...
  1. Python/Linux/Docker基礎
  2. 一點點對區塊鏈本身的認識或操作經驗
  3. 對資料探索的熱情

Gananche介紹

Ganache (甘納許)
這套有著可愛命名的工具,就是本文要和各位分享的重點。它可以為我們Fork以太坊上的真實資料,讓我們在本地端進行交易的模擬操作。除此之外還提供了一些特異功能,如解鎖以太坊上的任意帳號...等,讓我們可以實驗一些真實以太坊上沒有辦法實現的操作。就讓這套聽起來甜滋滋又適合搭配下午茶的工具來陪伴我們進行區塊鏈的研究吧。
Ganache的官方網站是:https://trufflesuite.com/ganache/
是有名的開發框架Truffle的其中一員 (該成員的命名都是甜品...)。您可以將Ganache視為一個模擬的區塊鏈節點,但不需要等待礦工挖礦出塊,您可以在自己的電腦裡面模擬網路的交易行為。同時也支援大部分節點的 JSON-RPC呼叫,您可以像平常操作節點相同的方式使用它。
Ganache有提供了有UI版和無UI版可以使用,若您使用的是Windows環境,您可以選用它的UI版本。個人偏好是使用無UI版本的,接下來再跟各位分享一下安裝方式。

安裝Ganache

  • For Linux
您可以到它的專案頁面得到相關安裝、啟動參數等資訊。若您已有建置Node.js環境,可以透過NPM進行安裝:
npm install ganache --global
您也可以使用Docker執行包裝好的映象檔,更為簡單
docker pull trufflesuite/ganache:latest
  • For Windows
您可以從官方頁面取得Windows版本的安裝檔,依指引安裝完畢即可

啟動Ganache

安裝完成後,我們就可以來執行一個模擬的以太坊網路了。
我們先來模擬一個以太坊主網(mainnet)的環境試試,常用的幾個參數為:
--fork.network mainnet
指定從infura.io做為中的mainnet資料進行fork
--chain.chainId 1
設定chainid id,如需模擬mainnet則設為1,不需要時可任意指定
--chain.networkId 1
設定network id,如需模擬mainnet則設為1,不需要時可任意指定
--accounts 10
建立10個裡面有1000ETH的錢包供您測試
--wallet.seed 1337
生成錢包的隨機種子,設為固定的話,每次重啟Ganache都可以獲得相同的錢包地址 (但錢包的餘額和紀錄仍會被重置)
--port 8545
Ganache啟動使用的Port,預設為8545,可依需求修改
  • For Linux
由NPM安裝的啟動方式
ganache --fork.network mainnet --chain.networkId 1 --accounts 10 \
--wallet.seed 1337 --port 8545
由Docker安裝的啟動方式
docker run --rm -it --publish 8545:8545 trufflesuite/ganache:latest \
--fork.network mainnet \
--chain.networkId 1 \
--accounts 10 \
--wallet.seed 1337 \
--port 8545
  • For Windows
啟動程式後,選取NEW WORKSPACE
設定相關參數後,點選右上SAVE WORKSPACE開始模擬
看到這個畫面就代表正常運作中了

連結您的Metamask錢包

Metamask錢包預設是連結到真正的區塊鏈網路上,但它也支援連結到各種私有網路。同理,您也可以將錢包連結到剛剛建好的Ganache服務上。連結方式如下:
打開您的Metamask錢包,找到:右上按鈕 → 設定 → 網路  → 新增網路
選擇 Add a network manually
依照以下進行設定,有出現和mainnet衝突的提示可以不管他,直接點儲存即可
確認錢包可以切換到Ganache網路
使用Metamask匯入私鑰:右上按鈕 → 匯入帳戶
從Ganache中複製一把喜歡的私鑰
將Ganache生成的任意一把私鑰貼進來後選擇匯入即可完成
切換到該帳號,可以看到有預設的1000ETH

來實際交易看看吧

Ganache為我們生成的錢包中,當中都沒有任何的Token存在(如USDT/USDC...等等),我們來試著用剛剛生成的1000ETH到Uniswap來購買這些幣看看吧。
我們嘗試買個1000USDT看看吧,設定完成後點選兌換
等待一下下,錢包會跳出確認訊息,點選確認
交易成功! 可以看到ETH成功兌換成USDT了
(錢包需要自行設定幣種才能顯示喔)

常見問題

Q: 每次重啟Ganache Session後,新發起的交易都會卡住沒法成功
A: 因為Metamask內部會自己存一份nonce,但重啟Ganache後Metamask中該帳號的nonce不會被歸0,所以導致新交易卡死,重置該帳戶即可

後記

感謝您看到最後,這篇文章僅有介紹Ganache工具的環境建置與基本設定部分,這工具還有很多可玩的功能還來不及和各位介紹,之後的系列文章會再慢慢和各位分享。

作者Steve目前任職於趨勢科技區塊鏈安全研究小組,專注於區塊鏈合約安全與與相關技術,如果喜歡我的文章,或是想獲得更多區塊鏈詐騙事件懶人包,歡迎關注我的帳號
另外,我已經加入由趨勢科技防詐達人所成立的方格子專題-《區塊鏈生存守則》,在那裡我會跟其他優質的創作者一起帶大家深入瞭解區塊鏈,並隨時向大家更新區塊鏈資安事件
> 追蹤《區塊鏈生存守則》學習如何在區塊鏈的世界保護自己
> 關注防詐達人獲得其他最新詐騙情報
27會員
176內容數
我們整理了web3相關的熱門資安問題,包含加密貨幣投資詐騙、盜版NFT、空投釣魚和區塊鏈重大資安事件懶人包等等,並提供最完整的辨識方法教學,讓大家從0到1學習如何保護自己
留言0
查看全部
發表第一個留言支持創作者!