8.1 探索ethereumjs-testrpc

xiaohuanglv發表於2018-09-15

ethereumjs-testrpc是以Node.js為基礎的以太坊節點,用於測試和開發。它模擬“全節點”行為,並使以太坊應用開發更快速。它還包括所有流行的RPC函式和功能(例如事件),並可以確定性執行,使開發得更加容易。

它用JavaScript編寫,是一個分散式npm包。在寫本書時,ethereumjs-testrpc的最新版本是3.0.3,並要求Node.js版本最低達到6.9.1才能正常執行。

ethereumjs-testrpc把所有東西都存在記憶體裡,因此,節點一旦重啟,將丟失以前的狀態。

8.1.1 安裝和使用

模仿以太坊節點使用ethereumjs-testrpc的方式如下,每種方式都有用例。

1.testrpc命令列應用

testrpc命令用於模仿一個以太坊節點。要安裝這個命令列應用,需要在全域性安裝ethereumjs-testrpc:

image.png

所提供的多個選項如下:

·-a或者--accounts。用於指定初始時生成的賬戶數量。

·-b或者--blocktime。自動挖礦的區塊時間(以秒計算)。預設為0,表示沒有自動挖礦。

·-d或者--deterministic。只要節點在執行,就生成10個確定性地址。也就是說,一旦設定這個引數,每次都生成同一地址集。根據預定義的助記符,該選項還可用於生成確定性地址。

·-n或者--secure。預設鎖定可用賬戶。如果在不使用--unlock選項的情況下使用這個選項,則不會建立HD錢包。

·-m或者--mnemonic。使用一個特定的HD錢包記憶法生成初始地址。

·-p或者--port。監聽的埠號。預設為8545。

·-h或者--hostname。監聽的主機名。預設為節點的server.listen()預設值。

·-s或者--seed。生成被使用的HD錢包助記符的任意資料。

·-g或者--gasPrice。使用自定義gas價格(預設為1)。如果在向節點傳送交易時沒有提供gas價格,則使用這個gas價格。

·-l或者--gasLimit。使用自定義gas上限(預設為0x47E7C4)。如果在向節點傳送交易時沒有提供gas上限,則使用這個gas上限。

·-f或者--fork。從另一個目前在特定區塊執行的以太坊節點分叉。輸入應該是HTTP位置和其他客戶端的埠,例如http://localhost:8545 。也可以選擇用@符號區分割槽塊和分叉,例如http://localhost:8545@1599200。

·--debug。輸出用於除錯的VM操作碼。

·--account。該選項用於匯入賬戶。它指定--account=...任意次數,傳送任意私鑰和相關餘額以生 成初始地址。Testrpc--account="privatekey,balance" [--account="privatekey,balance"]。使用--account不會建立HD錢包。

·-u或者--unlock。它指定--unlock...任意次數,傳送地址或者賬戶索引以解鎖特定賬戶。當與 --secure一起使用時,--unlock將重寫指定賬戶的locked狀態:testrpc--secure-- unlock"0x1234..."--unlock"0xabcd..."。還可以指定一個數字,用索引解鎖賬戶:testrpc--secure-u 0-u 1。該函式還可以用於模仿賬戶和開啟使用者無法訪問的地址。當用--fork功能時,可以使用testrpc作為區塊鏈上的任何地址進行交易,這對於測試和 動態分析非常有用。

·--networkId。用於指定節點所在的網路ID。

注意,私鑰有64字元長,必須作為以0x為字首的十六位字串輸入。餘額可以是整數或者以0x為字首的十六位值,用於指明該賬戶中wei的數量。

2.使用ethereumjs-testrpc作為web3提供方或者HTTP伺服器

可以按照如下形式將ethereumjs-testrpc作為web3提供方使用:

image.png

可以按照如下形式將ethereumjs-testrpc作為普通的HTTP伺服器使用:

image.png

provider()和server()都採用允許指定ethereumjs-testrpc行為的單一物件。該引數是可選項,可用選項如下:

·accounts。值是一個物件陣列。每個物件應當有一個十六進位制的餘額金鑰,還可以指明代表賬戶私鑰的secretKey。如果沒有secretKey,地址就由給定餘額自動生成。如果指明瞭secretKey,就用於決定賬戶地址。

·debug。輸出用於除錯的VM操作碼。

·logger。值是一個實現log()函式的物件。

·mnemonic。使用一個特定的HD錢包助記符生成初始地址。

·port。執行時收聽的伺服器埠。

·seed。生成HD錢包助記符的任意資料。

·total_accounts。初始時生成的賬戶數量。

·fork。與前面的--fork選項意義相同。

·network_id。與--networkId選項相同。用於指定該節點所在的網路ID。

·time。第一個區塊應當開始的日期。使用該功能及evm_increaseTime方法測試依賴於時間的程式碼。

·locked。指明賬戶是否預設鎖定。

·unlocked_accounts。一個地址或者地址索引陣列,用於指明哪個賬戶應當是解鎖的。

8.1.2 可用RPC方法

ethereumjs-testrpc可用的RPC方法列表如下:

image.png

還有一些特殊的、非標準的方法沒有包括在最初的RPC規範中:

·evm_snapshot。snapshot是區塊鏈在當前區塊的狀態。它沒有引數。返回建立的snapshot的整數ID。

·evm_revert。把區塊鏈狀態回撤到上一個snapshot。有一個引數,即要還原成的snapshot ID。如果沒有傳送snapshot ID,將回撤到最新的snapshot。返回true。

·evm_increaseTime。增加時間。有一個引數,即增加的時間量(以s為單位)。返回總的時間調整(以s為單位)。

·evm_mine。強制挖一個區塊。沒有引數。無論挖礦是否開始或者停止都挖區塊。


來源:我是碼農,轉載請保留出處和連結!

本文連結:http://www.54manong.com/?id=543

'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646208", container: s }); })();
'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646147", container: s }); })();

相關文章