# 環境建置 1. VSCode 3. Ganache 4. Metamask 5. Truffle 6. Infura(測試鏈使用,請使用金鑰導入的方式,避免使用助記詞方式) 7. [額外補充 - 實務情況](/L2I5WkwfRW2mw-50-b9ORQ) ## 1. VSCode 安裝 solidity 套件(讓VSCode 可辨識 .sol 檔) ![](https://hackmd.io/_uploads/BkSy-PWhY.png) vscode plugins: - solidity - Solidity Contract Flattener - Solidity Debugger - Solidity Metrics - Solidity Visual Developer ## 2. Ganache 安裝 > 介紹:提供快速的本地開發測試環境,啟動時自動創建十組區塊鏈錢包,資料僅暫時在記憶體中,程式關掉後資料就會消失。 MacOs 可以直接到官網下載安裝 ![](https://hackmd.io/_uploads/rka7iIZhY.png) 點擊 quickstart Windows 安裝參考 https://steemit.com/blockchain/@oneleo/windows-ethereum-ganache ## 3. MetaMask 設定 ### 設定本地的鏈: 新的RPC URL -> 抓自 Ganache 的 RPC Server 鏈 ID -> 1337 這個基本上是固定值,代表本地的port ![](https://hackmd.io/_uploads/SkZ3FazhY.png) ### 導入Ganache錢包 點擊錢包列表右側的鑰匙符號,會有 private key 可以複製 ![](https://hackmd.io/_uploads/Hkf4c6znY.png) 到 Metamask 導入帳戶,貼上剛剛複製的私鑰 ![](https://hackmd.io/_uploads/BJvdq6fhK.png) 導入成功之後會長的像這樣 ![](https://hackmd.io/_uploads/r1Pxspf3K.png) ## 5. Truffle 安裝設定 > PS. 本次 Node version v16.13.0,可以使用 nvm 做 node 多版本管理 ```bash= npm install -g truffle # or yarn global add truffle@ truffle version # 查看版本 mkdir project_name cd project_name truffle init # 建立 contracts, migrations, truffle-config.js 等檔案 ``` ### 設定 truffle-config.js 的 networks, compiles [參考此處設定](/qmC0cAFESIOrqBnQoNWjkQ) ```bash= truffle compile # 編譯 truffle migrate # 執行部屬合約用,他會執行在此專案內migrations資料夾內的檔案 truffle migrate --reset # add --reset, to update the contract which has deployed # 執行完可以打開 ganache 發現第一個錢包本來有100eth,現在變成99.99eth # 恭喜到這裡就成功在本地部屬了你的智能合約 # 另外補充 truffle console # 命令行,類似資料庫命令行(mongo之類的) ``` **1. truffle.config.js 的 IP 與port 要與 RPC SERVER 中的 networks 一致** ![](https://hackmd.io/_uploads/SyJnPv-2K.png) ![](https://hackmd.io/_uploads/B1FGuDbnF.png) **2. compilers 的 version 要與 contract 內的 solidity 版本一致** ![](https://hackmd.io/_uploads/Bys_uw-2F.png) ## 6. Infura 設定 > 到此之前的設定都是關於本地架RPC server及測試鏈(Ganache),Infura提供一個快速可使用的RPC server,我們可以透過它連到測試鏈(rinkeby, ropsten)或者公鏈 我們會需要兩個東西,**Metamask 開發用帳號的私鑰**,infura project的的 project id Infura 官網連結:https://infura.io/ 註冊流程可參考:https://ithelp.ithome.com.tw/articles/10202794 建立完專案後可獲得:`project id`, `project secret`, `endpoints` 可選擇哪一種鏈:這裡可以用 **rinkeby** ### 有一個大家常常混淆的地方,是 Metamask 帳號的私鑰,不是錢包地址 ## 需要新增一個開發用帳號,並在帳戶詳情中,點擊下方的導出私鑰並輸入登入密碼,才可以拿到 ![](https://i.imgur.com/yqiPHBb.png) 接下來回到專案,先安裝 ``` npm install truffle-privatekey-provider ``` truffle-config.js ```javascript= const PrivateKeyProvider = require("truffle-privatekey-provider"); const privateKey = process.env['your_metamask_test_account_private_key'] // 這一行是拿專案中的 .env 檔案資料,這個檔案請自行新增,並用來存放機敏資料,不會上傳到 github ,使用時需要搭配 npm 套件 dotenv 使用,可以自行搜尋使用方式,或找有前端開發經驗的組員交流詢問 ... networks: { // 測試鏈 rinkeby: { provider: () => new PrivateKeyProvider(privateKey, "https://rinkeby.infura.io/" + process.env['your_project_id']), // 這一行是拿專案中的 .env 檔案資料,這個檔案請自行新增,並用來存放機敏資料,不會上傳到 github ,使用時需要搭配 npm 套件 dotenv 使用,可以自行搜尋使用方式,或找有前端開發經驗的組員交流詢問 gasPrice: 50000000000, // 50 gwei 可調整, network_id: 4, // rinkeby network id 不可調 }, // 本地鏈 development: { host: "127.0.0.1", // Localhost (default: none) port: 7545, // Standard Ethereum port (default: none) network_id: "*", // Any network (default: none) }, }, ``` 最後部屬指定 rinkeby ``` truffle migrate --network rinkeby ``` 部屬成功會有有類似下方的訊息出現 ![](https://hackmd.io/_uploads/SJhr4Y-3F.png)