v7.0.0
Highlights
Upgrade Guide and Breaking Changes
New Features
Changelog
Known Issues
Future Plans
It's here, it's finally here! The much anticipated (well, at least by us!) Ganache v7 release has now been shipped! This release has been years in the making and we're really proud of the work we've done. We hope you love it as much as we do. If you do, or if you want to keep up with all things Ganache, be sure to give this repository a ⭐ star ⭐.
Thank you to everyone who has been a part of making this release happen — contributors, mentors, reviewers, issue reporters, and community participators have all been instrumental in making Ganache v7. We are immensely thankful to you all:
@davidmurdoch @MicaiahReid @gnidan @eggplantzzz @kevinweaver @cds-amal @haltman-at @kevinbluer @seesemichaelj @tcoulter @nicholasjpaterno @eshaben @CruzMolina @honestbonsai @domob1812 @moda20 @0xGorilla @fedgiac @FFdhorkin @NicsTr @convexman @rainwater11 @aliveli186 @winksaville @anvacaru @nepoche @gas1cent @Fatorin @0xng @wilwade @MatthiasLohr @alexhultman
As a token of our appreciation to our early contributors, we want to send you something real and tangible (sorry, no NFTs at this time 😔). Email ganache@trufflesuite.com and we'll verify your identity to get it sent out to you (you'll just need to cover shipping if you're outside the United States). We want to keep it a little on the down-low to keep people from being jealous, but what we can tell you is that it's exclusive, brown, soft, wearable, with two arm holes (it's a t-shirt).
This is a huge release, so these release notes don't cover everything that's changed. For those gluttons for detail among us that want the comprehensive list, check out the notes from our alpha, beta, and rc releases:
Release | Release Date |
---|---|
Ganache@7.0.0-alpha.0 | 2021/08/26 |
Ganache@7.0.0-alpha.1 | 2021/09/21 |
Ganache@7.0.0-alpha.2 | 2021/11/12 |
Ganache@7.0.0-beta.0 | 2021/11/19 |
Ganache@7.0.0-beta.1 | 2021/11/24 |
Ganache@7.0.0-beta.2 | 2021/12/20 |
Ganache@7.0.0-rc.0 | 2022/01/12 |
For everyone else, we think these notes do a pretty great job of covering the features and changes that you'll care most about.
Forking Got an Upgrade
Ganache's ancestor, Test RPC, was the first tool to introduce forking back in 2016. Ganache 7 takes forking to a new level.
Zero-Config Mainnet Forking
Truffle has partnered with Infura to provide free archive node access to Ganache users. Simply run ganache --fork
and BOOM, you've forked mainnet at the latest block.
But it doesn't stop there. Use ganache --fork NETWORK
to fork the Ropsten, Kovan, Rinkeby and Görli networks.
SPPPPEEEEEEED
We've introduced two new caching layers that can reduce the run time of complex forking requests, like debug_traceTransaction
, by over 30x!
In-memory LRU cache
The first caching layer is an in-memory LRU cache. This cache will store previous forking request results in memory so successive calls during the same Ganache session don't have to make the expensive network request to fetch the data again.
Persistent cache
The second caching layer is the more interesting cache and utilizes @truffle/db's network algorithm to efficiently store and retrieve requests and their responses to a persistent disk-backed database.
What this enables is for Ganache to differentiate blockchain networks based not on their chainId
or networkId
, but the contents of historical blocks.
You can always delete this persistent cache by running Ganache with the --fork.deleteCache
flag. To disable both caches use the --fork.disableCache
flag.
Ganache is Now Ganache
Before, the Ganache UI application was just Ganache, which used ganache-core
, which was also used by ganache-cli
. Confused? So were we. Which is why we thought a rename was in order.
Previously, ganache-core
was the core code that powered the Ganache UI and Ganache CLI applications and allowed for programmatic use of Ganache. ganache-cli
was a separate application that had to be installed to use Ganache in the command line.
We've now merged ganache-core
and ganache-cli
into just ganache
. This one tool gives you access to Ganache as a command line application, for programmatic use in Node, or for use in the browser.
Note: In case you just love typing "-cli"
, we've left ganache-cli
as an alias to ganache
, so you can continue using the ganache-cli
command in your npm scripts and in your terminal.
Use Ganache in the Browser
Why? We don't really know!
But we're pretty sure you, our loyal and talented users, will make something great out of it. To use this feature, add the following script to your HTML:
<script src="https://cdn.jsdelivr.net/npm/ganache@{VERSION}/dist/web/ganache.min.js"></script>
NOTE: The {VERSION}
in the above path needs to be replaced with a version number or tag that is listed in npm.
From there, Ganache is available in your browser for use:
const options = {};
const provider = Ganache.provider(options);
NOTE: Currently forking does not work in the browser, but we plan to add support in the future.
Huge Transaction Traces
If you've got transactions, we can trace 'em.™ Ganache can now run debug_traceTransaction
on Ethereum's largest and most complex transactions, even those constrained by Node's runtime limitations!
We're proud of this one and will likely have a blog post coming soon to show off our JS-fu and explain how. For now, our past release notes go into some detail on this feature.
In short, you can install the new version using:
npm install ganache --global
We've also written up this handy guide on how to upgrade/install Ganache and to document all breaking changes to look out for.
- Berlin, London, and Arrow Glacier Hard Fork Support
- Support for Future Nonces and Queued Transactions
- Replacement Transactions
- New RPC Endpoints
- New Startup Options
- TypeScript Support
- New Event System
- Dropping Node 8 & 10, Adding Node 17
Berlin, London, and Arrow Glacier Hard Fork Support
Ganache now supports the Berlin, London, and Arrow Glacier hard forks. This means that EIP-2718's Typed Transaction Envelope, EIP-2930's Access List Transaction, and EIP-1559's Fee Market Transaction are all available for use in Ganache.
The default hard fork has been set to "london"
. Because of this, any legacy typed transactions (those with no "type" field) that don't supply a gas price
, will automatically be upgraded to a "Type 2" EIP-1559 transaction.
Future Nonces and Queued Transactions
Ganache now allows you to send what we call "future nonce transactions". These are transactions whose nonce is ahead of that of the sender's account. The transaction isn't immediately executable, so it stays in the transaction pool as a "queued" transaction.
Once the nonce gap is filled, the queued transaction will be executed automatically. For example, if a brand new account (nonce 0
) sends transactions with nonces 1
, 2
, and 3
, all three of these transactions will sit in the "queued" pool. As soon as a transaction from that account is sent with a nonce of 0
, the nonce for the account is incremented to 1
, so the transaction with nonce 1
is executed. At that point, the account's nonce is 2
, so the transaction with nonce 2
is executed. Finally, the account's nonce is 3
, so the transaction with account 3
is executed.
Replacement Transactions
Replacement transactions are now supported in Ganache v7. This allows any transaction that is pending or queued in the transaction pool to be replaced by another transaction if the gas price of the new transaction is high enough compared to the original.
To send a replacement transaction, simply send a transaction with the same from
and nonce
fields as the transaction being replaced with a gas price that is --miner.priceBump
(a configurable startup option, defaulted to 10%) higher than the original. Future nonce transactions that are queued up in the transaction pool are also able to be replaced.
New RPC Endpoints
RPC methods provide access to Ethereum nodes and to Ganache. We've added some new methods to keep in step with real-world Ethereum nodes and some new custom methods to make your testing experience easier.
evm_setAccountNonce
This custom method allows you to (re)write history by setting an account's nonce.
evm_addAccount
/evm_removeAccount
The evm_addAccount
method can be used to add any address to the personal namespace. Ganache will create a fake private key which will then be used for all personal namespace commands sent using that added address. Here's an example of how to use this:
const zeroAddress = "0x0000000000000000000000000000000000000000"; // let's send transactions from the zero address!
const transaction = {from: zeroAddress};
const passphrase = "this is my passphrase";
// this will fail because we don't "know" the zero address
await assert.rejects(provider.send("personal_sendTransaction", [{ from: zeroAddress }, passphrase] ));
const added = await provider.send("evm_addAccount", [zeroAddress, passphrase] );
assert.equal(added, true) // but now we do!
// so now we can send transactions from the zero address!
const txHash = await provider.send("personal_sendTransaction", [{ from: zeroAddress }, passphrase] ))
The evm_removeAccount
method can be used to do just the opposite — it will remove an account from the personal namespace.
eth_signTypedData_v4
We now support eth_signTypedData_v4, which can be used to sign typed data. For more information on this signing method, see MetaMask's helpful guide.
eth_maxPriorityFeePerGas
Ganache now supports the eth_maxPriorityFeePerGas
RPC method. Currently, this defaults to returning 1 GWEI. In the future, we may adjust the behavior so it returns the current gas price minus the latest block's baseFeePerGas
.
txpool_content
The new txpool_content
RPC method returns the current contents of the transaction pool. The contents of the transaction pool are grouped into "pending" and "queued" transactions. "Pending" transactions are those that are immediately executable in the transaction pool, meaning that the transaction's nonce is equal to the sender account's next nonce. A "queued" transaction is one with a future nonce that is not immediately executable. Each of the groups of "pending" and "queued" transactions is grouped by the transaction's sender address, and a group of transactions from sender address are grouped by the sender address' nonce.
Here is an example response:
{
"pending" : {
"0x8e89f513c2ed8eb9d915196199615e590028b727" : {
"0" : { /* eth_getTransactionByHash */ }
}
},
"queued" : {
"0x8e89f513c2ed8eb9d915196199615e590028b727" : {
"2" : { ... },
"3" : { ... },
}
}
}
New Startup Options
Startup options are now grouped in the chain
, database
, fork
, logging
, miner
, and wallet
namespaces, and should be used as such on startup. For startup options in the CLI, use:
$ ganache --namespace.option="value"
and when using Ganache programmatically, you can do:
const options = { namespace: { option: "value"}};
const provider = ganache.provider(options);
We've also added to, updated, and renamed some startup options. To get a full list of options, you can always run ganache --help
in the CLI, or you can check out our documentation. Here are the changes we've made in Ganache v7.
--miner.coinbase
The --miner.coinbase
option allows you to set the address where mining rewards will go. By default, this is the zero address.
--miner.instamine
The --miner.instamine
option allows you to configure when in the mining process Ganache returns a transaction's hash. This may sound trivial, but it can have some huge implications, which are covered in detail in this discussion.
In short, setting --miner.instamine="eager"
(the default case), Ganache returns the transaction's hash to the caller after the transaction has been included in a block. This is the same as how Ganache v6 behaved, but differs from real nodes' behavior. Setting --miner.instamine="strict"
works like a real node, the transaction's hash is returned before the transaction has been included in a block.
--miner.priceBump
The new --miner.priceBump
option allows you to specify the percentage increase in the gas price required to replace an existing transaction. For example, if the price bump is set to 10% using --miner.priceBump=10
and a transaction with maxFeePerGas = 100 GWEI
and maxPriorityFeePerGas = 1 GWEI
is waiting in the transaction pool to be mined, a transaction with maxFeePerGas >= 110 GWEI
and maxPriorityFeePerGas >= 1.1 GWEI
will be required to replace the existing transaction.
--server.wsBinary
The --server.wsBinary
option can now be used to set whether websockets should respond with binary data (ArrayBuffers) or strings. The default for this option is set to "auto"
, which responds with whichever type (binary data or string) you used in the request. Setting --server.wsBinary=true
will always respond with binary data and --server.wsBinary=false
will always respond with a string.
--wallet.lock
The --wallet.secure
option has been renamed to --wallet.lock
.
--wallet.passphrase
This feature allows you to specify a passphrase that will be used for personal namespace commands (personal_unlockAccount
, personal_sendTransaction
, etc.) on all startup accounts. Before this feature, the default (and only) password for startup accounts was ""
.
NOTE: Specifying the wallet.passphrase
parameter does not lock accounts by default. The wallet.lock
(previously wallet.secure
) parameter can be used to lock accounts by default. If wallet.passphrase
parameter is used without wallet.lock
, the passphrase will still be used when personal_lockAccount
is used.
TypeScript Rewrite and Type Support
In this release Ganache has been almost completely rewritten from the ground up in TypeScript. With that, we are now exporting types in the published build, though it isn't perfect yet.
While Ganache is now a TypeScript project, all internal components are shipped in a bundle to improve installation time. While there are lots of tools to bundle JavaScript, the tools to bundle (or "rollup") these types aren't very mature and result in some strange types. We are now using ApiExtractor to generate our rollup types, as it works well for most of the types we need to export with one exception — it likes to rename types:
EthereumProvider_2
in the above image should be EthereumProvider
.
You find many other strangely named types in this version, as well as many types that aren't exported, but should be. We will have a fix out for this in the future.
New Event System
In addition to EIP-1193's "message"
event and the legacy "data"
event, Ganache emits 3 additional events: "ganache:vm:tx:before"
, "ganache:vm:tx:step"
, and "ganache:vm:tx:after"
.
These events can be used to observe the lifecycle of any transaction executed via eth_sendTransaction
, personal_sendTransaction
, eth_sendRawTransaction
, eth_call
, debug_traceTransaction
, or debug_storageRangeAt
.
These share the event paradigm that Truffle uses, but without any of the wildcard handling, i.e., no "vm:*"
support (for now).
Each of these events will emit a context
object which is a unique object that can be used to identify a transaction over the course of its lifecycle. For example:
interface StepEvent {
account: {
nonce: bigint;
balance: bigint;
stateRoot: Buffer;
codeHash: Buffer;
};
address: Buffer;
codeAddress: Buffer;
depth: number;
gasLeft: bigint;
gasRefund: bigint;
memory: Buffer;
memoryWordCount: bigint;
opcode: {
name: string;
fee: number;
};
pc: number;
returnStack: Buffer[];
stack: Buffer[];
}
const contexts = new Map();
provider.on("ganache:vm:tx:before", (event: { context: {} }) => {
contexts.set(event.context, []);
});
provider.on("ganache:vm:tx:step", (event: StepEvent) => {
contexts.get(event.context).push(event.data);
});
provider.on("ganache:vm:tx:after", (event: { context: {} }) => {
doAThingWithThisTransactionsSteps(contexts.get(event.context));
contexts.delete(event.context);
});
The reason this context
is necessary is that Ganache may run multiple transactions simultaneously, so "ganache:vm:tx:step"
events from different transactions could be intermingled.
The above events will be emitted for eth_call
, eth_sendTransaction
, personal_sendTransaction
, eth_sendRawTransaction
, debug_traceTransaction
, and debug_storageRangeAt
.
Currently, we do not await the event listener's return value, however, we'll likely enable this in the future.
Dropping Node 8 & 10, Adding Node 17
We are dropping support for Node.js versions 8 and 10 in the Ganache v7 release. This will simplify Ganache development and will result in smaller bundle sizes, as we no longer need to transpile features available natively in Node v12 for Node v10.
We've also added support for Node versions up to v17.
- #657 refactor: rewrite into a TypeScript monorepo, partial (@davidmurdoch)
- #614 fix: add
debug_traceTransaction
RPC method (@tcoulter) - #665 fix: switch to
SecureTrie
(@davidmurdoch) - #666 fix: don't overwrite existing initial accounts (@davidmurdoch)
- #667 test(eth_getCode): add tests for contract factories (@davidmurdoch)
- #668 feat: add option to use gas estimate on send tx (@davidmurdoch)
- #679 docs: update docs for GH Pages (@davidmurdoch)
- #703 chore: move chain packages to a subfolder (@seesemichaelj)
- #708 feat: change CLI to dynamically generate args from flavor options (@seesemichaelj)
- #725 chore: ignore folders that are packages from another branch (@seesemichaelj)
- #731 chore: fix windows node 10.7.0 CI by updating npm (@davidmurdoch)
- #721 chore: polish cli (@davidmurdoch)
- #732 feat: handle mutually exclusive args in cli (@davidmurdoch)
- #734 chore: lighten up github ci to enhance dev experience (@seesemichaelj)
- #737 fix: update types on wallet legacy options (@seesemichaelj)
- #738 chore: add "push" action to "build all" on
develop
(@seesemichaelj) - #739 chore: fix readme badges and drop macos (@davidmurdoch)
- #741 chore: update build-status badge image (@davidmurdoch)
- #745 chore: ensure logo is centered on npm (@davidmurdoch)
- #748 chore: add start and build info to contributing.md (@davidmurdoch)
- #749 chore: use our "sweet treat" mnemonic in readme.md (@davidmurdoch)
- #740 chore: rename ganache-cli to ganache in readme (@davidmurdoch)
- #750 chore: fix launch.json example in contributing.md (@davidmurdoch)
- #769 fix(docs): update contributing url in readme to full path (@kevinbluer)
- #733 fix: ensure path sep is always / in link-ts-references.ts (@davidmurdoch)
- #770 fix(ethereum): ensure randomBytes can return 0-255 (@davidmurdoch)
- #785 fix(cli): enable SIGINT to shutdown cli on Windows (@davidmurdoch)
- #777 chore: enabling building from root (@davidmurdoch)
- #792 feat: allow mining many blocks via
evm_mine
(@davidmurdoch) - #793 fix(docs): fix docs for
evm_mine
(@davidmurdoch) - #794 refactor: use WEI constant in test (@davidmurdoch)
- #779 feat: log warning on legacy-style eth_getTransactionReceipt calls (@eggplantzzz)
- #796 docs: add request diagram to @ganache/core (@davidmurdoch)
- #795 refactor: replace seedCounter w/ an instance prng (@davidmurdoch)
- #771 fix: set
difficulty
default to 1 and addtotalDifficulty
(@eggplantzzz) - #800 chore: update marked to v2.0.0 (@davidmurdoch)
- #789 chore: remove dead code in runtime-block.ts (@davidmurdoch)
- #801 chore: update root dev dependencies (@davidmurdoch)
- #790 fix: calculate block size correctly (@davidmurdoch)
- #755 feat: add support for
debug_storageRangeAt
RPC (@eshaben) - #766 feat: throw exception when conflicting options are passed to the provider (@tcoulter)
- #803 docs: improve usefulness of readme.md and contributing.md (@eshaben)
- #819 chore: use consistent capitalization and punctuation in readme (@eshaben)
- #809 perf: optimize
debug_storageRangeAt
(@davidmurdoch) - #857 fix: hex encode hash in eth_getTransactionReceipt notice (@davidmurdoch)
- #874 chore: point community link at our discord channel (@davidmurdoch)
- #884 chore(deps): bump y18n from 4.0.0 to 4.0.1 (dependabot[bot])
- #877 fix: rearchitect server status and move async functions from constructors to initialize functions (@seesemichaelj)
- #888 feat: add filecoin flavor (@seesemichaelj)
- #893 fix: support a uws fallback if uws native binaries don't exist (win+electron) (@seesemichaelj)
- #816 fix: make random seed actually random (@davidmurdoch)
- #892 refactor: increase the default ether balance for created accounts to 1000 (@eggplantzzz)
- #909 fix(docs): ensure Error object can be logged to console (@davidmurdoch)
- #908 feat: forking (@davidmurdoch)
- #907 chore: general clean up for publishing (@davidmurdoch)
- #918 chore(deps): bump ws in /src/chains/ethereum/ethereum (dependabot[bot])
- #920 chore(deps-dev): bump ws from 7.3.1 to 7.4.6 in /src/packages/core (dependabot[bot])
- #919 chore(deps-dev): bump ws from 7.3.1 to 7.4.6 (dependabot[bot])
- #921 chore(deps-dev): bump ws in /src/chains/filecoin/filecoin (dependabot[bot])
- #882 feat: add dockerfile for Docker Hub container image (@kevinbluer)
- #923 feat: change
miner.gasPrice
option tominer.defaultGasPrice
(@davidmurdoch) - #925 fix(debug_traceTransaction): make sure we dont run all the txs in a block when debugging them (@davidmurdoch)
- #817 feat: allow starting up with 0 accounts (@davidmurdoch)
- #928 fix(cli): miner.difficulty should accept strings (@davidmurdoch)
- #926 fix: signed raw transactions must always have a nonce (@davidmurdoch)
- #929 fix(forking): ignore txs that fail when running the block in traceTransaction (@davidmurdoch)
- #930 fix(forking): ensure forked receipt logs work (@davidmurdoch)
- #932 fix: use correct RPC method for gasPrice (@davidmurdoch)
- #934 chore: automate release (@davidmurdoch)
- #937 fix: add Iuri Matias back to license (@davidmurdoch)
- #895 fix: upgrade
@trufflesuite/uws-js-unofficial
to use better polyfill (@seesemichaelj) - #946 fix: remove trfl.co links (@davidmurdoch)
- #1044 chore: rename ganache-core to ganache (@davidmurdoch)
- #1045 fix: remove phrase from cli help messages (@davidmurdoch)
- #1046 fix: remove extra space from CLI version string (@davidmurdoch)
- #944 fix: support node 16 (@davidmurdoch)
- #1058 fix: switch back to lockfileVersion: 1 (@davidmurdoch)
- #1065 fix: increase max payload size to match geth (@davidmurdoch)
- #1068 chore: add alpha branch to CI (@davidmurdoch)
- #943 fix: add EIP2930 Access List Transactions (@MicaiahReid)
- #1097 fix: websocket error timeout issue by updating uws to .12 (@davidmurdoch)
- #1117 fix: make sure zero address is always signed with the same key (@davidmurdoch)
- #1135 feat: london (@davidmurdoch)
- #1199 fix: verify chain id in type 1 and 2 transactions (@davidmurdoch)
- #1226 docs: add link to ganache-cli-archive (@davidmurdoch)
- #1227 fix: handle initialization errors on server.listen, handle fallback rejections (@davidmurdoch)
- #1323 docs: update
evm_revert
documentation (@davidmurdoch) - #1253 fix: use new url shortener links (@davidmurdoch)
- #1407 docs: call out ganache-cli@latest documentation loudly (@davidmurdoch)
- #1103 chore(deps): bump tar from 4.4.16 to 4.4.19 (dependabot[bot])
- #1339 perf: add a disk cache for forking requests (@davidmurdoch)
- #1519 chore: update min Node.js version to 12.0.0, add support for Node.js v17 (@davidmurdoch)
- #1551 fix: make web builds work (@davidmurdoch)
- #1593 fix: make web3_sha encode data correctly (@davidmurdoch)
- #1513 fix: improve account locking (@MicaiahReid)
- #1588 chore: revert to node 14 for release (@davidmurdoch)
- #1524 feat: add support for arrowGlacier hard fork (@davidmurdoch)
- #1587 fix: make the quiet flag actually work (@davidmurdoch)
- #1553 chore: ensure new packages can be published (@davidmurdoch)
- #1518 chore: update bufferutil and utf-8-validate (@davidmurdoch)
- #1537 fix: make forking chainId aware (@davidmurdoch)
- #1579 feat: integrate with infura (@davidmurdoch)
- #1591 fix: remove bigint's
n
from cli output (@davidmurdoch) - #1589 fix: return error for
eth_call
when call errors (@davidmurdoch) - #1610 chore: prepare for beta release (@davidmurdoch)
- #1650 fix: update equality checks for replacement transactions to prevent erroneous underpriced errors (@MicaiahReid)
- #1614 docs: update README badge to beta version (@davidmurdoch)
- #1613 fix: make docker publish work (@davidmurdoch)
- #1592 fix: async request processing (@davidmurdoch)
- #1662 fix: don't return an error from miner_start if aleady started (@davidmurdoch)
- #1731 fix: parse cli
time
option correctly (@davidmurdoch) - #1732 fix: don't alter metadata state during
eth_estimateGas
(@davidmurdoch) - #1661 fix: ensure
eth_sendTransaction
returns the correct error when the account has insufficient funds (@davidmurdoch) - #1740 fix: prevent DEBUG env var from crashing ganache (@davidmurdoch)
- #1738 fix: correct bad type (@davidmurdoch)
- #1737 fix: permit using legacy
fork.provider
where appropriate (@davidmurdoch) - #1769 chore: drop support for Node.js-unsupported odd-numbered node versions (@davidmurdoch)
- #1780 fix: version disparity between startup/
web3_clientVersion
(@MicaiahReid) - #1842 fix: reject transactions with insufficient funds (@davidmurdoch)
- #1829 fix: update callGasLimit to match geth's (@davidmurdoch)
- #1781 feat: export typescript types in build (@davidmurdoch)
- #1871 fix: make
Tag
type usable (@davidmurdoch) - #1873 build: ensure filter-shrinkwrap runs at release (@davidmurdoch)
- #1861 fix: fix typo in
evm_setTime
docs (@gas1cent) - #1973 fix: update gas limit to 30M (@davidmurdoch)
- #1972 docs: add docs for docker to readme (@davidmurdoch)
- #1539 feat: add
txpool_content
RPC method. (@domob1812) - #1990 fix: include impersonated accounts in eth_accounts (@davidmurdoch)
- #1980 fix:
eth_call
should use the same baseFee as given block num (@davidmurdoch) - #1992 chore: increase test timeout for slow CI (@davidmurdoch)
- #1989 fix: update leveldb-related packages (@davidmurdoch)
- #2013 feat: replace legacyInstamine option with
instamine=eager|strict
(@davidmurdoch) - #2037 chore: remove canary, add rc to release branches (@MicaiahReid)
- #2041 fix: update README to be for rc (@MicaiahReid)
- #2046 chore: update create script for latest typescript (@davidmurdoch)
evm_setAccountNonce
is race-conditiony (#1646)--miner.callGasLimit
implementation is wrong (#1645)- We don't return a proper pending block (#772)
- Forking doesn't work in the browser (#1245)
- Uncles aren't fully supported when forking (#786)
- Forking may fail in weird and unexpected ways. We need to "error better" here (#615)
- Node.js v12 outputs a µWS warning in the console (#2095)
- Node.js v12 doesn't handle memory as well as 14+ and may crash computing very large
debug_traceTransaction
results (#2106) - Our bundle size is larger than ideal (#2096)
- Update the
eth_maxPriorityFeePerGas
RPC method to return as Geth does,eth_gasPrice - baseFeePerGas
(#2097) - Add support for the
eth_feeHistory
RPC method (#1470) - Support for enabling eligible draft EIPs before they are finalized or considered for inclusion in a hard fork (#1507)
- New hard fork support well in advance of the hard fork launch (#2099)
- Add an
eth_createAccessList
method (#1056) - Track test performance metrics over time (#2105)
- Track real world Ganache usage (opt-in and anonymized) to better tune performance and drive bug fixes and feature development (#2100)
- Track test coverage (#2101)
evm_mine
will return the new blocks instead of just0x0
(#536)- Add new
evm_setCode
andevm_setStorageAt
RPC methods (#649) - Make
evm_snapshot
ids globally unique (unpredictable instead of a counter) (#655) - Support
eth_getRawTransactionByHash
RPC method (#135) - Support
debug_accountAt
RPC method (#813) - Allow "mining" to be disabled on start up (#248)
- Set CLI options via config file, package.json, or ENV vars (#2102)
- Create a CLI interactive/REPL mode (#2103)
- Enable a CLI daemon mode (#2104)
- "Flavor" Plugins: We're building support for Layer 2 plugins into Ganache so we can start up and manage other chains. e.g., The
ganache filecoin
command will look for the@ganache/filecoin
package and start up a Filecoin and IPFS server. - Multi-chain configurations: you'll be able to start up your project's entire blockchain "ecosystem" from a single ganache command: e.g.,
ganache --flavor ethereum --flavor filecoin --flavor optimism
.- this is where defining your CLI options via JSON config will come in very handy!
- We've laid the groundwork for additional performance improvements. We expect to see an additional 2-5x speed up for typical testing work loads in the near future.
Open new issues (or join our team) to influence what we gets implemented and prioritized.
💖 The Truffle Team