參考:
http://blog.hub wiz.com/2018/04/16/ganache-cli-manual/
ganache-cli是以太坊節點仿真器軟件ganache的命令行版本,可以方便開發者快速進行以太坊DApp的開發與測試。 本文將詳細介紹ganache-cli的安裝及命令行參數的作用。
安裝
1 |
npm install -g ganache-cli |
啟動
1 |
~$ ganache-cli |
啟動選項
- -a 或 –accounts: 指定啟動時要創建的測試賬戶數量。
- -e 或 –defaultBalanceEther: 分配給每個測試賬戶的ether數量,默認值為100。
- -b 或r –blockTime: 指定自動挖礦的blockTime,以秒為單位。默認值為0,表示不進行自動挖礦。
- -d 或 –deterministic: 基於預定的助記詞(
mnemonic)生成固定的測試賬戶地址。 - -n 或 –secure: 默認鎖定所有測試賬戶,有利於進行第三方交易簽名。
- -m 或 –mnemonic: 用於生成測試賬戶地址的助記詞。
- -p 或 –port: 設置監聽端口,默認值為8545。
- -h 或 –hostname: 設置監聽主機,默認值同NodeJS的
server.listen()。 - -s 或 –seed: 設置生成助記詞的種子。.
- -g 或 –gasPrice: 設定Gas價格,默認值為20000000000。
- -l 或 –gasLimit: 設定Gas上限,默認值為90000。
- -f 或 –fork: 從一個運行中的以太坊節點客戶端軟件的指定區塊分叉。輸入值應當是該節點旳HTTP地址和端口,例如
http://localhost:8545。 可選使用@標記來指定具體區塊,例如:http://localhost:8545@1599200。 - -i 或 –networkId:指定網絡id。默認值為當前時間,或使用所分叉鏈的網絡id。
- –db: 設置保存鏈數據的目錄。如果該路徑中已經有鏈數據,ganache-cli將用它初始化鏈而不是重新創建。
- –debug:輸出VM操作碼,用於調試。
- –mem:輸出ganache-cli內存使用統計信息,這將替代標准的輸出信息。
- –noVMErrorsOnRPCResponse:不把失敗的交易作為RCP錯誤發送。開啟這個標志使錯誤報告方式兼容其他的節點客戶端,例如geth和Parity。
特殊選項
- –account: 指定賬戶私鑰和賬戶余額來創建初始測試賬戶。可多次設置:
1$ ganache-cli --account="<privatekey>,balance" [--account="<privatekey>,balance"]
注意私鑰長度為64字符,必須使用0x前綴的16進制字符串。賬戶余額可以是整數,也可以是0x前綴的17進制字符串,單位為wei。
使用–account選項時,不會自動創建HD錢包。
- -u 或 –unlock: 解鎖指定賬戶,或解鎖指定序號的賬戶。可以設置多次。當與–secure選項同時使用時,這個選項將改變指定賬戶的鎖定狀態:
1 |
$ ganache-cli --secure --unlock "0x1234..." --unlock "0xabcd..." |
也可以指定一個數字,按序號解鎖賬號:
1 |
$ ganache-cli --secure -u 0 -u 1 |
----------------------------------------------------------------------------------------------------------------------------------------------------
Ganache CLI - 用於測試和開發的快速以太坊RPC客戶端
Ganache CLI
用於測試和開發的快速以太坊RPC客戶端。 http://truffleframework.com/ganache
注意:testrpc 是現在的ganache-cli。 像使用testrpc一樣去使用它。
Welcome to Ganache CLI
Ganache CLI是以太坊開發工具Truffle套件的一部分,是以太坊開發私有區塊鏈的Ganache命令行版本。
Ganache CLI使用ethereumjs來模擬完整的客戶端行為,使開發以太坊應用程序更快,更輕松,更安全。它還包括所有主流的RPC函數和功能(如event),並可以准確地運行以使開發變得容易。
Looking for TestRPC?
如果你來這里期待找到TestRPC,那你就來對了。 Truffle采用了TestRPC,並將其作為Truffle套件工具的一部分。 從現在開始,您可以期待更好的支持以及大量有助於使以太坊發展更安全,更輕松,更愉快的新功能。就像你將testrpc一樣使用ganache-cli。
Installation
ganache-cli是用Javascript編寫的,並通過npm作為Node包進行分發。安裝之前首先要確保安裝了Node.js(> = v6.11.5)。
npm install -g ganache-cli
Using Ganache CLI
Command Line
$ ganache-cli <options>
選項:
· -a or --accounts: 指定在啟動時要生成的帳戶數量。
· -e or --defaultBalanceEther: 分配每個測試帳戶的以太幣數量。默認值是100。
· -b or --blockTime: 為自動挖礦指定blockTime(以秒為單位)。默認值為0,不進行自動挖礦。
· -d or --deterministic: 基於預先定義的助記符生成確定性地址。
· -n or --secure: 默認鎖定可用帳戶(適用於第三方交易簽名)
· -m or --mnemonic: 使用特定的HD錢包助記符來生成初始地址。
· -p or --port: 要監聽的端口號。默認為8545。
· -h or --hostname: 監聽的主機名。默認為127.0.0.1。
· -s or --seed: 使用任意數據生成要使用的HD錢包助記符。
· -g or --gasPrice: 使用自定義的燃料價格(默認為20000000000)
· -l or --gasLimit: 使用自定義燃料限制(默認為90000)
· -f or --fork: 從另一個當前在給定塊上運行的以太坊客戶端分叉。 輸入應該是另一個客戶端的HTTP位置和端口, e.g. http://localhost:8545. 您可以選擇使用@ 符號:http:// localhost:8545 @ 1599200 指定要分叉的塊。
· -i or --networkId: 指定ganache-cli用於標識自身的網絡ID (如果已配置,默認為當前時間或分叉區塊鏈的網絡ID)
· --db: 指定目錄的路徑以保存鏈式數據庫。如果數據庫已經存在,ganache-cli會初始化該鏈,而不是創建一個新鏈。
· --debug: 輸出VM操作碼以進行調試。
· --mem: 輸出ganache-cli內存使用情況統計信息。這取代了傳統的輸出。
· --noVMErrorsOnRPCResponse: 不要將交易發送失敗作為RPC錯誤傳輸。為與其他客戶端(如geth和Parity)兼容的錯誤報告行為啟用此標志。
特殊選項:
· --account: 指定--account = ...(no's')任意多次傳遞任意私鑰及其相關余額以生成初始地址。
$ ganache-cli --account="<privatekey>,balance" [--account="<privatekey>,balance"]
請注意,私鑰長度為64個字符,並且必須以0x前綴的十六進制字符串形式輸入。余額可以輸入為一個整數或0x前綴的十六進制值,指定該帳戶中wei的數量。
使用--account時,不會為您創建HD錢包。
· -u or --unlock: 指定 - unlock...多次傳遞地址或帳戶索引以解鎖特定帳戶。當與 -- secure一起使用時,--unlock將覆蓋指定帳戶的鎖定狀態。
$ ganache-cli --secure --unlock "0x1234..." --unlock "0xabcd..."
您還可以指定一個數字,按他們的索引解鎖賬戶:
$ ganache-cli --secure -u 0 -u 1
此功能也可用於模擬帳戶來解鎖您無法訪問的地址。當與-fork功能一起使用時,可以使用ganache-cli將交易作為區塊鏈上的任何地址進行處理,這對於測試和動態分析非常有用。
Library
作為Web3提供者(provider):
var ganache = require("ganache-cli");
web3.setProvider(ganache.provider());
作為一般的http服務器(server):
var ganache = require("ganache-cli");
var server = ganache.server();
server.listen(port, function(err, blockchain) {...});
.provider()和.server()都有一個對象,它允許你指定ganache-cli的行為。該參數是可選的。可用的選項有:
· "accounts": Array of Object's. 每個對象都應該有一個十六進制值的平衡鍵。還可以指定密鑰secretKey,它代表帳戶的私鑰。如果沒有secretKey,則地址是使用給定余額自動生成的。如果指定,則該密鑰用於確定帳戶的地址。
· "debug": boolean - 用於調試的輸出VM操作碼
· "logger": Object - 實現log()函數的對象,如控制台。
· "mnemonic": 使用特定的HD錢包助記符來生成初始地址。
· "port": 作為服務器運行時要偵聽的端口號。
· "seed": 使用任意數據生成要使用的HD錢包助記符。
· "total_accounts": number - 在啟動時生成的帳戶數量。
· "fork": string - 與上面的--fork選項相同
· "network_id": integer - 與上面的--networkId選項相同
· "time": Date - 第一個塊應該開始的日期。使用此功能以及evm_increaseTime方法來測試時間相關的代碼。
· "locked": boolean - 帳戶是否默認鎖定。
· "db_path": String - 指定目錄的路徑以保存鏈式數據庫。如果數據庫已經存在,ganache-cli會初始化該鏈,而不是創建一個新鏈。
· "account_keys_path": String - 指定用於保存帳戶和私鑰的文件,以進行測試。
· "vmErrorsOnRPCResponse": boolean - 是否將事務故障作為RPC錯誤傳送。對於與其他客戶端(如geth和Parity)兼容的錯誤報告行為,設置為false。
Implemented Methods
目前實現的RPC方法是:
bzz_hive (stub)
bzz_info (stub)
debug_traceTransaction
eth_accounts
eth_blockNumber
eth_call
eth_coinbase
eth_estimateGas
eth_gasPrice
eth_getBalance
eth_getBlockByNumber
eth_getBlockByHash
eth_getBlockTransactionCountByHash
eth_getBlockTransactionCountByNumber
eth_getCode (only supports block number “latest”)
eth_getCompilers
eth_getFilterChanges
eth_getFilterLogs
eth_getLogs
eth_getStorageAt
eth_getTransactionByHash
eth_getTransactionByBlockHashAndIndex
eth_getTransactionByBlockNumberAndIndex
eth_getTransactionCount
eth_getTransactionReceipt
eth_hashrate
eth_mining
eth_newBlockFilter
eth_newFilter (includes log/event filters)
eth_protocolVersion
eth_sendTransaction
eth_sendRawTransaction
eth_sign
eth_syncing
eth_uninstallFilter
net_listening
net_peerCount
net_version
miner_start
miner_stop
personal_listAccounts
personal_lockAccount
personal_newAccount
personal_unlockAccount
personal_sendTransaction
shh_version
rpc_modules
web3_clientVersion
web3_sha3
還有一些特殊的非標准方法不包含在原始RPC規范中:
evm_snapshot : 快照當前塊的區塊鏈狀態。沒有參數。返回創建的快照的整數ID。
evm_revert : 將區塊鏈狀態恢復為上一個快照。采用一個參數,即要恢復的快照ID。如果沒有傳遞快照ID,它將恢復到最新的快照。返回true。
evm_increaseTime : 及時向前跳。取一個參數,即以秒為單位增加的時間量。返回總時間調整,以秒為單位。
evm_mine : 強制挖礦。沒有參數。開采礦塊與是否采礦開始或停止無關。
Unsupported Methods
eth_compileSolidity: 如果你想用Javascript編譯Solidity,請參閱solc-js項目。
Docker
開始使用Docker映像的最簡單方法是:
docker run -d -p 8545:8545 trufflesuite/ganache-cli:latest
要通過Docker將選項傳遞給ganache-cli,只需將參數添加到run命令中即可:
docker run -d -p 8545:8545 trufflesuite/ganache-cli:latest -a 10 --debug
從源代碼構建Docker容器:
git clone https://github.com/trufflesuite/ganache-cli.git&& cd ganache-cli
docker build -t trufflesuite/ganache-cli .
