Ganache CLI

快速以太坊 RPC 客户端测试和开发。「Fast Ethereum RPC client for testing and development」

Github星跟踪图

npm
npm
Build Status

Welcome to Ganache CLI

Ganache CLI, part of the Truffle suite of Ethereum development tools, is the command line version of Ganache, your personal blockchain for Ethereum development.

Ganache CLI uses ethereumjs to simulate full client behavior and make developing Ethereum applications faster, easier, and safer. It also includes all popular RPC functions and features (like events) and can be run deterministically to make development a breeze.

Looking for TestRPC?

If you came here expecting to find the TestRPC, you're in the right place! Truffle has taken the TestRPC under its wing and made it part of the Truffle suite of tools. From now on you can expect better support along with tons of new features that help make Ethereum development safer, easier, and more enjoyable. Use ganache-cli just as you would testrpc.

Installation

ganache-cli is written in JavaScript and distributed as a Node.js package via npm. Make sure you have Node.js (>= v6.11.5) installed.

Using npm:

npm install -g ganache-cli

or, if you are using Yarn:

yarn global add ganache-cli

ganache-cli utilizes ganache-core internally, which is distributed with optional native dependencies for increased performance. If these native dependencies fail to install on your system ganache-cli will automatically fallback to ganache-core’s pre-bundled JavaScript build.

Having problems? Be sure to check out the FAQ and if you're still having issues and you're sure its a problem with ganache-cli please open an issue.

Using Ganache CLI

Command Line

$ ganache-cli <options>

Options:

  • -a or --accounts: Specify the number of accounts to generate at startup.
  • -e or --defaultBalanceEther: Amount of ether to assign each test account. Default is 100.
  • -b or --blockTime: Specify blockTime in seconds for automatic mining. If you don't specify this flag, ganache will instantly mine a new block for every transaction. Using the --blockTime flag is discouraged unless you have tests which require a specific mining interval.
  • -d or --deterministic: Generate deterministic addresses based on a pre-defined mnemonic.
  • -n or --secure: Lock available accounts by default (good for third party transaction signing)
  • -m or --mnemonic: Use a bip39 mnemonic phrase for generating a PRNG seed, which is in turn used for hierarchical deterministic (HD) account generation.
  • -p or --port: Port number to listen on. Defaults to 8545.
  • -h or --host or --hostname: Hostname to listen on. Defaults to 127.0.0.1 (defaults to 0.0.0.0 for Docker instances of ganache-cli).
  • -s or --seed: Use arbitrary data to generate the HD wallet mnemonic to be used.
  • -g or --gasPrice: The price of gas in wei (defaults to 20000000000)
  • -l or --gasLimit: The block gas limit (defaults to 0x6691b7)
  • --callGasLimit: Sets the transaction gas limit for eth_call and eth_estimateGas calls. Must be specified as a hex string. Defaults to "0x1fffffffffffff" (Number.MAX_SAFE_INTEGER)
  • -k or --hardfork: Allows users to specify which hardfork should be used. Supported hardforks are byzantium, constantinople, petersburg, istanbul, and muirGlacier (default).
  • -f or --fork: Fork from another currently running Ethereum client at a given block. Input should be the HTTP location and port of the other client, e.g. http://localhost:8545. You can optionally specify the block to fork from using an @ sign: http://localhost:8545@1599200.
  • -i or --networkId: Specify the network id ganache-cli will use to identify itself (defaults to the current time or the network id of the forked blockchain if configured)
  • --db: Specify a path to a directory to save the chain database. If a database already exists, ganache-cli will initialize that chain instead of creating a new one.
  • --debug: Output VM opcodes for debugging
  • --mem: Output ganache-cli memory usage statistics. This replaces normal output.
  • -q or --quiet: Run ganache-cli without any logs.
  • -v or --verbose: Log all requests and responses to stdout
  • -? or --help: Display help information
  • --version: Display the version of ganache-cli
  • --account_keys_path or --acctKeys: Specifies a file to save accounts and private keys to, for testing.
  • --noVMErrorsOnRPCResponse: Do not transmit transaction failures as RPC errors. Enable this flag for error reporting behaviour which is compatible with other clients such as geth and Parity.
  • --allowUnlimitedContractSize: Allows unlimited contract sizes while debugging. By enabling this flag, the check within the EVM for contract size limit of 24KB (see EIP-170) is bypassed. Enabling this flag will cause ganache-cli to behave differently than production environments.
  • --keepAliveTimeout: Sets the HTTP server's keepAliveTimeout in milliseconds. See the NodeJS HTTP docs for details. 5000 by default.
  • -t or --time: Date (ISO 8601) that the first block should start. Use this feature, along with the evm_increaseTime method to test time-dependent code.

Special Options:

  • --account: Specify --account=... (no 's') any number of times passing arbitrary private keys and their associated balances to generate initial addresses:

    $ ganache-cli --account="<privatekey>,balance" [--account="<privatekey>,balance"]
    

    Note that private keys are 64 characters long, and must be input as a 0x-prefixed hex string. Balance can either be input as an integer or 0x-prefixed hex value specifying the amount of wei in that account.

    An HD wallet will not be created for you when using --account.

  • -u or --unlock: Specify --unlock ... any number of times passing either an address or an account index to unlock specific accounts. When used in conjunction with --secure, --unlock will override the locked state of specified accounts.

    $ ganache-cli --secure --unlock "0x1234..." --unlock "0xabcd..."
    

    You can also specify a number, unlocking accounts by their index:

    $ ganache-cli --secure -u 0 -u 1
    

    This feature can also be used to impersonate accounts and unlock addresses you wouldn't otherwise have access to. When used with the --fork feature, you can use ganache-cli to make transactions as any address on the blockchain, which is very useful for testing and dynamic analysis.

Usage

As a Web3 provider:

const ganache = require("ganache-core");
const web3 = new Web3(ganache.provider());

If web3 is already initialized:

const ganache = require("ganache-core");
web3.setProvider(ganache.provider());

NOTE: depending on your web3 version, you may need to set a number of confirmation blocks

const web3 = new Web3(provider, null, { transactionConfirmationBlocks: 1 });

As an ethers.js provider:

const ganache = require("ganache-cli");
const provider = new ethers.providers.Web3Provider(ganache.provider());

As a general HTTP and WebSocket server:

const ganache = require("ganache-cli");
const server = ganache.server();
server.listen(port, function(err, blockchain) {...});

Options

Both .provider() and .server() take a single object which allows you to specify behavior of ganache-cli. This parameter is optional. Available options are:

  • "accounts": Array of Object's. Each object should have a balance key with a hexadecimal value. The key secretKey can also be specified, which represents the account's private key. If no secretKey, the address is auto-generated with the given balance. If specified, the key is used to determine the account's address.
  • "debug": boolean - Output VM opcodes for debugging
  • "blockTime": number - Specify blockTime in seconds for automatic mining. If you don't specify this flag, ganache will instantly mine a new block for every transaction. Using the blockTime option is discouraged unless you have tests which require a specific mining interval.
  • "logger": Object - Object, like console, that implements a log() function.
  • "mnemonic": Use a specific HD wallet mnemonic to generate initial addresses.
  • "port": number Port number to listen on when running as a server.
  • "seed": Use arbitrary data to generate the HD wallet mnemonic to be used.
  • "default_balance_ether": number - The default account balance, specified in ether.
  • "total_accounts": number - Number of accounts to generate at startup.
  • "fork": string or object - Fork from another currently running Ethereum client at a given block. When a string, input should be the HTTP location and port of the other client, e.g. http://localhost:8545. You can optionally specify the block to fork from using an @ sign: http://localhost:8545@1599200. Can also be a Web3 Provider object, optionally used in conjunction with the fork_block_number option below.
  • "fork_block_number": string or number - Block number the provider should fork from, when the fork option is specified. If the fork option is specified as a string including the @ sign and a block number, the block number in the fork parameter takes precedence.
  • "network_id": Specify the network id ganache-core will use to identify itself (defaults to the current time or the network id of the forked blockchain if configured)
  • "time": Date - Date that the first block should start. Use this feature, along with the evm_increaseTime method to test time-dependent code.
  • "locked": boolean - whether or not accounts are locked by default.
  • "unlocked_accounts": Array - array of addresses or address indexes specifying which accounts should be unlocked.
  • "db_path": String - Specify a path to a directory to save the chain database. If a database already exists, ganache-cli will initialize that chain instead of creating a new one. Note: You will not be able to modify state (accounts, balances, etc) on startup when you initialize ganache-core with a pre-existing database.
  • "db": Object - Specify an alternative database instance, for instance MemDOWN.
  • "ws": boolean Enable a websocket server. This is true by default.
  • "account_keys_path": String - Specifies a file to save accounts and private keys to, for testing.
  • "vmErrorsOnRPCResponse": boolean - Whether or not to transmit transaction failures as RPC errors. Set to false for error reporting behaviour which is compatible with other clients such as geth and Parity. This is true by default to replicate the error reporting behavior of previous versions of ganache.
  • "hdPath": The hierarchical deterministic path to use when generating accounts. Default: "m/44'/60'/0'/0/"
  • "hardfork": String Allows users to specify which hardfork should be used. Supported hardforks are byzantium, constantinople, petersburg, istanbul, and muirGlacier (default).
  • "allowUnlimitedContractSize": boolean - Allows unlimited contract sizes while debugging (NOTE: this setting is often used in conjuction with an increased gasLimit). By setting this to true, the check within the EVM for contract size limit of 24KB (see EIP-170) is bypassed. Setting this to true will cause ganache-cli to behave differently than production environments. (default: false; ONLY set to true during debugging).
  • "gasPrice": String::hex Sets the default gas price for transactions if not otherwise specified. Must be specified as a hex encoded string in wei. Defaults to "0x77359400" (2 gwei).
  • "gasLimit": `String::hex

主要指标

概览
名称与所有者trufflesuite/ganache
主编程语言TypeScript
编程语言JavaScript (语言数: 4)
平台Docker, Linux, Mac, Windows
许可证MIT License
所有者活动
创建于2017-03-27 17:04:47
推送于2024-01-29 22:09:03
最后一次提交2023-12-21 00:19:39
发布数176
最新版本名称v7.9.2 (发布于 2023-12-21 00:19:40)
第一版名称v1.1.0 (发布于 )
用户参与
星数2.6k
关注者数51
派生数689
提交数1.7k
已启用问题?
问题数1075
打开的问题数372
拉请求数698
打开的拉请求数40
关闭的拉请求数288
项目设置
已启用Wiki?
已存档?
是复刻?
已锁定?
是镜像?
是私有?