8.1 探索ethereumjs-testrpc
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:
所提供的多個選項如下:
·-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提供方使用:
可以按照如下形式將ethereumjs-testrpc作為普通的HTTP伺服器使用:
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方法列表如下:
還有一些特殊的、非標準的方法沒有包括在最初的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
相關文章
- Android 8.1 Handler 原始碼解析Android原始碼
- ET8.1(一)簡介
- PHP8.1之enum解析PHP
- Python學習之路8.1-類Python
- 在CentOS 8.1上安裝 DockerCentOSDocker
- almalinux8.1 +zabbix server7LinuxServer
- valet 不支援PHP8.1麼?PHP
- rk3326 Android8.1編譯Android編譯
- 8.1關於動態效能檢視
- Windows Phone SDK 8/8.1 官方下載Windows
- 從原始碼安裝GDB-8.1原始碼
- Android8.1 開關VOLTE流程分析Android
- ABP8.1的資料遷移
- CommunityToolkit.Mvvm8.1 訊息通知(4)UnityMVVM
- w10怎麼還原w8.1_win10一鍵還原到win8.1教程Win10
- win10怎麼重灌win8.1_win10重灌win8.1系統的教程Win10
- windows8.1和windows10哪個好_win8.1和win10有什麼區別WindowsWin10
- 8.1 Attention(注意力機制)和TransformerORM
- 上週熱點回顧(7.26-8.1)
- Android8.1 SystemUI原始碼分析之 Notification流程AndroidSystemUI原始碼
- 2151: 【例8.1】人民幣支付 【換行沒寫】
- ACM日常訓練日記——8.1(區間dp)ACM
- 諾基亞8.1、2.3 可以更新 Android 11 了!Android
- win8.1如何使用kms升級到win10正版_win8.1使用kms更新至 win10操作步驟Win10
- win10退回win8.1失敗怎麼解決_win10回退不了win8.1如何處理Win10
- 豬行天下之Python基礎——8.1 類與物件Python物件
- GO語言————8.1 MAP宣告、初始化和makeGo
- 8.1日CSP-J初賽內容總結
- REHL8.1上配置路由的nftables防火牆策略路由防火牆
- laravel8.1+Vscode+docker+xdebug3.1 無法斷點LaravelVSCodeDocker斷點
- CommunityToolkit.Mvvm8.1 viewmodel使用-舊式寫法(2)UnityMVVMView
- win8.1平板安裝ubuntu16.04的折騰Ubuntu
- RHEL9.4上建立RHEL8.1虛擬機器虛擬機
- CommunityToolkit.Mvvm8.1 viewmodel源生成器寫法(3)UnityMVVMView
- CommunityToolkit.Mvvm8.1 IOC依賴注入控制反轉(5)UnityMVVM依賴注入
- php 8.1 六月份好像要釋出了PHP
- git探索Git
- Category探索Go