# Brownie: network settings for BSC 本文將介紹在安裝完 Brownie 後,如何做關於 network 的設定,使其可以順利的在BSC上使用 fork、from_explorer()的功能。 為了能夠順利擷取 BSC 鏈上的資料到 brownie 的環境中,我們需要做兩個設定。分別為 1. 新增 network; 2. 與設定 bscscan 的 api token 介紹完以上兩點之後,後面的內容會介紹一些比較「暴力」的設定方法。 關於 Brownie 的操作:也可以參考這篇文章:「[Brownie 功能簡介](https://hackmd.io/@vM5aHIBcRcGU6GOAOk33Ig/HJDtYVgJY)」 ## 1. 新增 BSC 使用的 network 有時候我們會希望測試的環境盡可能與真實的鏈相似,這個時候我們會需要用到 fork 功能,省去我們去設置各種協定的功夫[[1]](https://blog.chain.link/build-a-dapp-on-binance-smart-chain-with-secure-data-feeds/)。 開啟 fork mode 模式的 console 指令如下: ``` $ brownie console --network <network 的名稱> ``` 在使用上述指令之前,我們需要做一些關於「network」的設定。在 Brownie 中,所謂的 network 是指建構測試環境區塊鏈的一系列設定。 我們輸入以下指令[[2]](https://blog.chain.link/build-a-dapp-on-binance-smart-chain-with-secure-data-feeds/): ``` $ brownie networks add development bsc-main-fork cmd=ganache-cli host=http://127.0.0.1 fork=https://bsc-dataseed1.binance.org accounts=10 mnemonic=brownie port=8545 ``` 上述指令中的「bsc-main-fork」是自己取的名稱,可以任意改變,只要不與現有的 network 名稱重複就好。另外上述指令中其中一個選項,「 fork=https://bsc-dataseed1.binance.org 」指的是我們選擇 Binance 官方提供的節點 [[3]](https://docs.binance.org/smart-chain/developer/rpc.html) 去存取鏈上的資料。上述指令的參數(選項)都可以之後進行更改。 ## 2. 設定 bscscan 的 API Token 在進行測試的時候,也許會有與鏈上的其他智能合約互動的功能需要測試。這時我們會需要 BscScan 的 API [[4]](https://bscscan.com/apis) 將這些合約複製到我們本地的測試環境。 如果沒有 BscScan 的 API Token 的話,可以到 [Bscscan Register Page](https://bscscan.com/register) 註冊 Bscscan 的 API Token。 在 Bscscan 上註冊完之後 ,我們需要設定自己的 API Token, brownie 是藉由 environment variable 去設定 API Token 的,因此我們輸入以下指令後,就完成設定了。 ``` export BSCSCAN_TOKEN="<自己的 bscscan token>" ``` 上述指令對 mac OS 才有用,windows 系統可以參考下一節的「暴力法」 ## 3. 暴力法 所謂的暴力法其實就是直接去改 brownie 的 source code,我自己在設定的時候也是選擇用暴力法(最好先用 git 進行版本控制)。畢竟有些指令實在是又臭又長。 ### 3.1 network brownie 關於 network 的設定其實是寫在一個 yml 檔的。所以我們也可以選擇不下指令,直接去修改 yml 檔。 第一步是去 locate 該 yml 檔的位置。首先用 ``$ brownie console `` 進入 console 中,並且輸入: ```python= >>> from brownie import _config >>> _config._get_data_folder() ``` console 輸出的路徑就是該檔案所在的資料夾,我們要更改的檔案是「network-config.yaml」 在該檔案中「Development」階層下,新增: ```yaml= - cmd: ganache-cli cmd_settings: accounts: 10 default_balance: 100 evm_version: istanbul fork: bsc-main gas_limit: 12000000 mnemonic: brownie port: 8545 host: http://127.0.0.1 id: bsc-main-fork name: Ganache-CLI (BSC-Mainnet Fork) timeout: 120 ``` 這樣做的效果和第一節的指令有著同樣的效果。如果之後想要更改設定,例如更換節點、改變預設 accounts 的數量,都可以直接在這裡更改,不需要去下 brownie 的 modify 指令。關於各個選項的意義,可以去參考[官方文件](https://eth-brownie.readthedocs.io/en/stable/network-management.html#development-networks)關於 Development network 的說明。 ### 3.2 API Token 如果要用暴力法設定 API Token,第一步跟上一小節類似,我們要先 locate 欲修改檔案的位置。一樣在 brownie console 內,輸入: ```python= >>> from brownie import _config >>> _config.BROWNIE_FOLDER ``` 輸出結果就是 source code 的位置,在「network」資料夾底下,「contract.py」中,有定義一個函數「 fetch_from_explorer()」。 我們要修改的是這個函數中的這段程式碼: ```python= elif "bscscan" in url: if os.getenv("BSCSCAN_TOKEN"): params["apiKey"] = os.getenv("BSCSCAN_TOKEN") elif not silent: warnings.warn( "No BSCScan API token set. You may experience issues with rate limiting. " "Visit https://bscscan.com/register to obtain a token, and then store it " "as the environment variable $BSCSCAN_TOKEN", BrownieEnvironmentWarning, ) #============在這裡以下新增這行============# params["apiKey"] = "你的BSC_SCAN TOKEN" #=======================================# if (not silent): #print(params["apiKey"]) print( f"Fetching source of {color('bright blue')}{address}{color} " f"from {color('bright blue')}{urlparse(url).netloc}{color}..." ) ``` 也就是說,不管有沒有在環境變數中找到 BSCSCAN_TOKEN,我都要把 「params["apiKey"]」 設為我指定的那個 TOKEN。 以上就是本篇所要介紹的設定方法,希望這篇文章可以幫助到大家完成連上 BSC 需要的設定。如果想要參考更多 brownie 的操作以及範例,請閱讀這篇文章:「[Brownie 功能簡介與範例](https://hackmd.io/@vM5aHIBcRcGU6GOAOk33Ig/HJDtYVgJY)」 ## 4. Read more 1. [Brownie 功能簡介與範例](https://hackmd.io/@vM5aHIBcRcGU6GOAOk33Ig/HJDtYVgJY) 2. [Brownie Documentation - Development network](https://eth-brownie.readthedocs.io/en/stable/network-management.html#development-networks) 3. [github repo: eth-brownie/brownie](https://github.com/eth-brownie/brownie) ## 5. References [ [1][2] Build a dApp on Binance Smart Chain With Secure Data Feeds](https://blog.chain.link/build-a-dapp-on-binance-smart-chain-with-secure-data-feeds/) [ [3] Binance Chain Docs - JSON-RPC Endpoint](https://docs.binance.org/smart-chain/developer/rpc.html) [ [4] BscScan - Apis ](https://bscscan.com/apis)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up