- Handle the case where the parent header of a Prague header does not have the
excess_blob_gas
property for calculation. (#2212)
- Add Shanghai mainnet block number to mainnet constants. (#2126)
- Add Cancun mainnet block number to mainnet constants. (#2212)
- Use correct fields in
PragueUnsignedLegacyTransaction.as_signed_transaction()
. (#2209) - Rename
new_signed_set_code_transaction()
->new_set_code_transaction()
and make sure this returns aPragueTypedTransaction
, as is expected. It can also take dictionary auth lists, as was recently added tonew_unsigned_set_code_transaction()
. (#2211)
- Allow authorizations to be dicts when creating a new
UnsignedSetCodeTransaction
viaPragueTransactionBuilder.new_unsigned_set_code_transaction()
. (#2210)
- Test blockchain tests against latest EELS
v4.3.0
develop fixtures. (#2210)
Implement EIP-7685, add support for block requests and extend prague block headers with
requests_hash
. (#2202)Implement EIPs for Prague hard fork:
- EIP-7623: Increase calldata cost
- EIP-2935: Store historical block hashes in state
- EIP-7691: Blob throughput increase
- EIP-2537: Precompiles for BLS12-381 curve operations (#2204)
Set fork-specific contracts if code at address not present + implement EIPs for Prague hard fork:
- EIP-6110: Validator deposit block requests
- EIP-7002: Withdrawal block requests
- EIP-7251: Consolidation block requests (#2205)
Implement EIP-7702: Set code transaction (#2206)
- Update
ethereum/tests
test fixture and introducefixtures_eest
submodule for testing against the EEST test suite. (#2208)
- Adds running
mypy
locally with all deps installed, then updating typing as needed. Moveseth/tools/factories
intotests
as it is only ever used there. (#2197)
- Merge template, adding py313 support and replace
bumpversion
withbump-my-version
. (#2198)
- Remove
_warnings.py
and all uses - related Cython issue is resolved (#2184) - Update copyright year from 2023 to 2025 in LICENSE file. (#2196)
- Pin ckzg to
>=2.0
; update the the trusted setup and how it is loaded. (#2183)
- Ensure docs build on CI is running. (#2175)
- Remove scripts/__init__.py so that scripts doesn't get imported as a package. Also removes the scripts/ directory from the wheel. (#2172)
- Add support for python 3.12. (#2171)
- Exclude scripts when building the wheel. (#2170)
- Update link to the getting started guide in the README. (#2173)
- Remove scripts/ directory on doc build (#2174)
- Fix
__getattr__()
forKeyMapDB
and thus allow it to be copied / deep copied. (#2116) integer.to_bytes()
requires size and byteorder below py311 and our fixture tests only use py311. Compare the first byte of versioned hashes by indexing instead. (#2168)
- Use the current VM's header class to check valid fields for
vm.pack_block()
. (#2165) - Properly configure the
CancunBlock
class to use theCancunReceiptBuilder
. (#2166)
- Clear existing transient storage db instead of resetting and creating a new one (#2159)
- bugfix: Ensure a
type_id
forSpoofTransaction
when unsigned -> signed spoofing. This defaults toNone
for legacy and uses the_type_id
for unsigned typed txns. (#2157)
- Use some general state tests for transaction tests since they have similar formats. This yielded a decent amount of new transaction tests. (#2157)
- bugfix: Address issues instantiating VM at Cancun transition. (#2156)
- Remove
memory_read
fromComputationAPI
interface andComputation
implementation. Usememory_read_bytes
in its place for call data read. (#2140)
- Implement EIP-4788: Add
parent_beacon_block_root
to execution block headers. (#2135) - Implement EIP-1153: Transient Storage. (#2142)
- Implement EIP-6780: Self-destruct only in same transaction. (#2148)
- Implement EIP-4844 and EIP-7516: Blob transactions, BLOBHASH opcode, BLOBBASEFEE opcode. (#2151)
- Drop the concept of a mining header, post-merge. (#2134)
- Fix epub docs build issue, add pdf and epub docs builds to CI (#2137)
- Update ethereum/tests submodule to version
v13.1
. (#2149)
- Drop python 3.7 support (#2128)
- Accept
type==0
as legacy a transaction. (#2136)
- Merge updates from the project template, including using
pre-commit
for linting and changing the name of themaster
branch tomain
(#2128) - Update ethereum/tests test fixture to use
v13
. (#2136)
- Performance improvements; code refactor; some cleanup. (#2076)
- Python 3.10 and 3.11 support. (#2088)
- Remove dependency on
pyethash
,pysha3
, andpycryptodome
packages and internalize the ethash algorithm implementation into Python code with significant loss of performance, in an effort to un-prioritize proof-of-work consensus and logic. (#2121)
eth_now
now returns a utc timestamp instead of a local timestamp (#2119)
- Bumped
mypy
version to 1.4.0 (#2117)
- Updated CodeStream slot name pc to program_counter to match the attribute name (#2109)
- Bring
CREATE
andCREATE2
logic up to speed wrt changes to EIP-2681 (high nonce). (#2110)
- Update
fixtures
(ethereum/tests) version tov12.2
and turn on all Shanghai fork tests since EOF is no longer in Shanghai. (#2108) - Fix some failing tests by properly decoding the tx bytes provided by the Transaction test fixtures. (#2111)
- bump version for flake8, flake8-bugbear, and mypy, and cleanup tox.ini (#2113)
- Add missing receipt builder for the ShanghaiBlock class. (#2105)
- Added [isort](https://pycqa.github.io/isort/) for automatically sorting python imports. (#2094)
- pull in less-sensitive updates from the python project template (#2095)
- Update
pip
version sitting in the circleci image before installing and runningtox
. Installtox
at the sys level to help avoidvirtualenv
version conflicts. (#2102) - Refactored the computation class hierarchy and cleaned up the code along the way. Some abstract API classes have more of the underlying properties that the subclasses implement. (#2106)
- added black to lint dependencies and isort`ed scripts directory (`#2107)
- Add
Shanghai
hard fork support. (#2093)
configure_header()
now accepts a difficulty function as akwarg
rather than positionalarg
due to POS priority. (#2093)
- Support for the
paris
fork a.k.a. "the merge". (#2080)
- Use the
DIFFICULTY_MINIMUM
more appropriately as the lower limit in all difficulty calculations. (#2084)
- Update towncrier version to remove double headers. (#2077)
- Update openssl config on circleci builds to re-introduce
ripemd160
function by default. (#2087)
- Gray glacier support without
Merge
transition sinceMerge
is not yet supported (#2072)
- Arrow Glacier header serialization fixed to properly inherit from LondonBlockHeader (#2047)
- Upgrade dependencies: eth-keys, eth-typing, eth-utils, py-ecc, rlp, trie (#2068)
- Drop python 3.6 support (#2070)
- Downgrade upstream dependencies to allow only non-breaking changes. Once we're ready to cut web3.py v6 branch, we can pull in breaking changes from upstream dependencies. Namely, dropping Python 3.5 and 3.6. (#2050)
(#2038)
- Add :meth:`~eth.vm.forks.berlin.transactions.UnsignedAccessListTransaction.validate` method and intrinsic_gas property to UnsignedAccessListTransaction
- Add :meth:`~eth.vm.forks.london.transactions.UnsignedDynamicFeeTransaction.validate` method and intrinsic_gas property to UnsignedDynamicFeeTransaction
- Updated the reference to the project template in the docs to https://github.com/ethereum/ethereum-python-project-template and changed the location in the git clone command accordingly. (#2032)
- Documentation updates to use latest py-evm version, grammar updates, python version updates, replace Gitter link with Discord link, and change [.dev] -> ".[dev]" in docs for better compatibility across shells (#2036)
London Support
- Pass all London tests from the ethereum/tests repo (#2017)
- Implement EIP-1559 for London support. (#2013)
- Implement EIP-3198 for London support. (#2015)
- Implement EIP-3554 for London support. (#2018)
- Implement EIP-3541 for London support. (#2018)
- Implement EIP-3529 for London support. (#2020)
- Replace local timestamps with UTC timestamps (#2013)
- Use UTC timestamp instead of local time zone, when creating a header.
- Use UTC for clique validation.
- Was overly permissive on the header gas limit by one gas. (#2021)
- Make header gas limit more restrictive by one, in various places.
- Validate uncle gas limits are within bounds of parent. This was previously not validated at all.
- Erase return data for exceptions with erases_return_data flag set to True and for CREATE / CREATE2 computations with insufficient funds (#2023)
- Removed old options and methods for creating a header, now that headers vary by fork. (#2013)
- :meth:`eth.rlp.headers.BlockHeader.from_parent()` is gone, because you should always use the VM to create a header (to make sure you get the correct type).
- Can no longer supply some fields to the genesis, like bloom and parent_hash.
- Misc test improvements (#2013)
- some test_vm fixes:
- use the correctly paired VMs in PoW test
- make sure only the block number is invalid in block number validity test
- more robust test fixture name generation
- run a newer version of the lint test from make lint
- some test_vm fixes:
- Various upgrades and related updates (#2016)
- Upgrade pytest and pytest-xdist. Caching was causing very slow test runs locally in pytest v5
- Update ethereum/tests (Updated in various PRs. At release time, checked out at v10.0)
- Remove json-fixture caching to resolve stale cache issues that caused test failures (at some expense to speed)
- Make xdist failures show up correctly in the transition tests
- During fixture tests, verify that the generated genesis block matches the fixture's RLP-encoding. (#2022)
- Squash sphinx warnings with a small documentation reorg. (#2021)
- Add Python 3.9 support (#1999)
- Update ethereum/tests fixture to v8.0.2, mark some new tests as too slow for CI. (#1998)
- Update blake2b-py requirement from >=0.1.2 to >=0.1.4 (#1999)
- Expose a
type_id
on all transactions. It isNone
for legacy transactions. (#1996) - Add new LegacyTransactionFieldsAPI, with a v field for callers that want to access v directly. (#1997)
- Fix a crash in :meth:`eth.chains.base.Chain.get_transaction_receipt` and
:meth:`eth.chains.base.Chain.get_transaction_receipt_by_index` that resulted in this exception:
TypeError: get_receipt_by_index() got an unexpected keyword argument 'receipt_builder'
(#1994)
- Add Berlin block numbers for Goerli and Ropsten. Correct the type signature for TransactionBuilderAPI and ReceiptBuilderAPI, because deserialize() can take a list of bytes for the legacy types. (#1993)
- Berlin Support
- EIP-2718: Typed Transactions -- no new functionality, really. It is mostly refactoring in preparation for EIP-2930. (which does churn the code a fair bit) (#1973)
- EIP-2930: Optional access lists. Implement the new transaction type 1, which pre-warms account & storage caches from EIP-2929, and adds first-class chain_id support. (#1975)
- EIP-2929: Gas cost increases for state access opcodes. Charge more for cold-cache access of account and storage. (#1974)
- EIP-2565: Update ModExp precompile gas cost calculation (#1976 & #1989)
- Uncles with the same timestamp as their parents are invalid. Reject them, and add the test from ethereum/tests. (#1979)
- Got a >10x speedup of some benchmarks and other tests, by adding a new :meth:`eth.chains.base.MiningChain.mine_all` API and using it. This is a public API, and should be used whenever all the transactions are known up front, to get a significant speedup. (#1967)
- Upgrade tests fixtures to v8.0.1, with Berlin tests. Skipped several slow tests in Istanbul. Added pytest-timeout to limit annoyance of new slow tests. (#1971, #1987, #1991, #1989)
- Make sure Berlin is tested across all core tests. (also patched in some missing Muir Glacier ones) (#1977)
- Upgrade rlp library to
v2.0.0
stable, which is friendlier to 32-bit and other architectures. Downstream applications can choose to explicitly install the rust implementation withpip install rlp[rust-backend]
. (d553bd)
- Add a new hook :meth:`eth.abc.VirtualMachineAPI.transaction_applied_hook` which is triggered after
each transaction in
apply_all_transactions
, which is called byimport_block
. The first use case is reporting progress in the middle of Beam Sync. (#1950)
- Upgrade rlp library to
v2.0.0-a1
which uses faster rust based encoding/decoding. (#1951)
- Removed unused and broken
add_uncle
API onFrontierBlock
and consequentially on all other derived block classes. (#1949)
- Improve type safety by ensuring abc types do not inherit from
rlp.Serializable
which implicitly has typeAny
. (#1948)
- Expose
get_chain_gaps()
onChainDB
to track gaps in the chain of blocks. (#1947)
- Allow mine_block of chain builder tools to take a
transactions
parameter. This makes it easier to model test scenarios that depend on creating blocks with transactions. (#1947) - upgrade to Upgrade py-trie to the new v2.0.0-alpha.2 with fixed
TraversedPartialPath
Added support for Python 3.8. (#1940)
Methods now raise :class:`~eth.exceptions.BlockNotFound` when retrieving a block, and some part of the block is missing. These methods used to raise a KeyError if transactions were missing, or a
HeaderNotFound
if uncles were missing:- :meth:`eth.db.chain.ChainDB.get_block_by_header`
- :meth:`eth.db.chain.ChainDB.get_block_by_hash` (it still raises a HeaderNotFound if there is no header matching the given hash)
- :meth:`Block.from_header() <eth.abc.BlockAPI.from_header>` (#1943)
A number of fixes related to checkpoints and persisting old headers, especially when we try to persist headers that don't match the checkpoints.
- A new exception :class:`~eth.exceptions.CheckpointsMustBeCanonical` raised when persisting a header that is not linked to a previously-saved checkpoint. (note: we now explicitly save checkpoints)
- More broadly, any block persist that would cause the checkpoint to be decanonicalized will raise the :class:`~eth.exceptions.CheckpointsMustBeCanonical`.
- Re-insert gaps in the chain when a checkpoint and (parent or child) header do not link
- De-canonicalize all children of orphans. (Previously, only decanonicalized headers with block numbers that matched the new canonical headers)
- Added some new hypothesis tests to get more confidence that we covered most cases
- When filling a gap, if there's an existing child that is not a checkpoint and doesn't link to the parent, then the parent block wins, and the child block is de-canonicalized (and gap added). (#1929)
- Upgrade py-trie to the new v2.0.0-alpha.1, and pin it for stability. (#1935)
- Improve the error when transaction nonce is invalid: include expected and actual. (#1936)
- Expose
get_header_chain_gaps()
API on HeaderDB to track chain gaps (#1924) - Add a new
persist_unexecuted_block
API toChainDB
. This API should be used to persist a block without executing the EVM on it. The API is used by syncing strategies that do not execute all blocks but fill old blocks back in (e.g.beam
orfast
sync) (#1925) - Update the allowable version of py_ecc library. (#1934)
- :meth:`eth.chains.base.Chain.import_block()` now returns some meta-information about the witness. You can get a list of trie node hashes needed to build the witness, as well as the accesses of accounts, storage slots, and bytecodes. (#1917)
- Use a more recent eth-keys, which calls an eth-typing that's not deprecated. (#1665)
- Upgrade pytest-xdist from 1.18.1 to 1.31.0, to fix a CI crash. (#1917)
- Added :class:`~eth.db.accesslog.KeyAccessLoggerDB` and its atomic twin; faster
make validate-docs
(but you have to remember topip install -e .[doc]
yourself);str(block)
now includes some bytes of the block hash. (#1918) - Fix for creating a duplicate "ghost" Computation that was never used. It didn't break anything, but was inelegant and surprising to get extra objects created that were mostly useless. This was achieved by changing :meth:`eth.abc.ComputationAPI.apply_message` and :meth:`eth.abc.ComputationAPI.apply_create_message` to be class methods. (#1921)
- Change return type for
import_block
fromTuple[BlockAPI, Tuple[BlockAPI, ...], Tuple[BlockAPI, ...]]
toBlockImportResult
(NamedTuple). (#1910)
- Fixed a consensus-critical bug for contracts that are created and destroyed in the same block, especially pre-Byzantium. (#1912)
- Add explicit tests for
validate_header
(#1911)
Make handling of different consensus mechanisms more flexible and sound.
1.
validate_seal
andvalidate_header
are now instance methods. The only reason they can be classmethods today is because our Pow implementation relies on a globally shared cache which should be refactored to use theConsensusContextAPI
.2. There a two new methods:
chain.validate_chain_extension(header, parents)
andvm.validate_seal_extension
. They perform extension seal checks to support consensus schemes where headers can not be checked if parents are missing.3. The consensus mechanism is now abstracted via
ConsensusAPI
andConsensusContextAPI
. VMs instantiate a consensus api based on the setconsensus_class
and pass it a context which they receive from the chain upon instantiation. The chain instantiates the consensus context api based on theconsensus_context_class
. (#1899)Support Istanbul fork in
GOERLI_VM_CONFIGURATION
(#1904)
- Do not mention PoW in the logging message that we log when validate_seal fails. The VM could also be running under a non-PoW consensus mechanism. (#1907)
- Drop optional
check_seal
param fromVM.validate_header
and turn it into aclassmethod
. Seal checks now need to be made explicitly viaVM.check_seal
which is also aligned withVM.check_seal_extension
. (#1909)
Implement the Muir Glacier fork
- When double-deleting a storage slot, got
KeyError: (b'\x03', 'key could not be deleted in JournalDB, because it was missing')
. This was fallout from #1893 (#1898)
- Improve performance when importing a header which is a child of the current canonical chain tip. (#1891)
- Bug: if data was missing during a call to :meth:`~eth.vm.base.VM.apply_all_transactions`, then the call would revert and continue processing transactions. Fix: we re-raise the :class:`~eth.exceptions.EVMMissingData` and do not continue processing transactions. (#1889)
- Fix for net gas metering (EIP-2200) in Istanbul. The "original value" used to calculate gas costs was incorrectly accessing the value at the start of the block, instead of the start of the transaction. (#1893)
Add Matomo Tracking to Docs site.
Matomo is an Open Source web analytics platform that allows us to get better insights and optimize for our audience without the negative consequences of other compareable platforms.
Read more: https://matomo.org/why-matomo/ (#1892)
- Add new Chain APIs (#1887):
- :meth:`~eth.chains.base.Chain.get_canonical_block_header_by_number` (parallel to :meth:`~eth.chains.base.Chain.get_canonical_block_by_number`)
- :meth:`~eth.chains.base.Chain.get_canonical_transaction_index`
- :meth:`~eth.chains.base.Chain.get_canonical_transaction_by_index`
- :meth:`~eth.chains.base.Chain.get_transaction_receipt_by_index`
- Remove the ice age delay that was accidentally left in Istanbul (#1877)
In the API docs display class methods, static methods and methods as one group "methods". While we ideally wish to separate these, Sphinx keeps them all as one group which we'll be following until we find a better option. (#794)
Tweak layout of API docs to improve readability
Group API docs by member (methods, attributes) (#1797)
API doc additions (#1880)
- Add missing API docs for :class:`~eth.chains.base.MiningChain`.
- Add missing API docs for :mod:`eth.db.*`
- Add missing API docs for :class:`~eth.vm.forks.constantinople.ConstantinopleVM`, :class:`~eth.vm.forks.petersburg.PetersburgVM` and :class:`~eth.vm.forks.istanbul.IstanbulVM` forks
- Move all docstrings that aren't overly specific to a particular implementation from the implementation to the interface. This has the effect that the docstring will appear both on the interface as well as on the implementation except for when the implementation overwrites the docstring with a more specific descriptions.
Add docstrings to all public APIs that were still lacking one. (#1882)
- Partly implement Clique consensus according to EIP 225. The implementation doesn't yet cover a mode of operation that would allow to operate as a signer and create blocks. It does however, allow syncing a chain (e.g. Görli) by following the ruleset that is defined in EIP-225. (#1855)
- Set Istanbul block number for mainnet to 9069000, and for Görli to 1561651, as per EIP-1679. (#1858)
- Make the max length validation of the extra_data field configurable. The reason for that is that different consensus engines such as Clique repurpose this field using different max length limits. (#1864)
- Resolve version conflict regarding pluggy dependency that came up during installation. (#1860)
- Fix issue where Py-EVM crashes when 0 is used as a value for seal_check_random_sample_rate. Previously, this would lead to a DivideByZero error, whereas now it is recognized as not performing any seal check. This is also symmetric to the current opposite behavior of passing 1 to check every single header instead of taking samples. (#1862)
- Improve usability of error message by including hex values of affected hashes. (#1863)
- Gas estimation bugfix: storage values are now correctly reset to original value if the transaction includes a self-destruct, when running estimation iterations. Previously, estimation iterations would produce undefined results, if the transaction included a self-destruct. (#1865)
- Use new blake2b-py library for 560x speedup of Blake2 F compression function. (#1836)
- Update upstream test fixtures to v7.0.0 beta.1 and address the two arising disagreements on what accounts should be collected for state trie clearing (as per EIP-161) if a nested call frame had an error. (#1858)
- Enable Istanbul fork on Ropsten chain (#1851)
- Update codebase to more consistently use the
eth_typing.BlockNumber
type. (#1850)
- Add EIP-1344 to Istanbul: Chain ID Opcode (#1817)
- Add EIP-152 to Istanbul: Blake2b F Compression precompile at address 9 (#1818)
- Add EIP-2200 to Istanbul: Net gas metering (#1825)
- Add EIP-1884 to Istanbul: Reprice trie-size dependent opcodes (#1826)
- Add EIP-2028: Transaction data gas cost reduction (#1832)
- Expose type hint information via PEP561 (#1845)
- Add missing
@abstractmethod
decorator toConfigurableAPI.configure
. (#1822)
- ~20% speedup on "simple value transfer" benchmarks, ~10% overall benchmark lift. Optimized retrieval of transactions and receipts from the trie database. (#1841)
- Add a "Performance improvements" section to the release notes (#1841)
- Upgrade to
eth-utils>=1.7.0
which removes theeth.tools.logging
module implementations ofExtendedDebugLogger
in favor of the ones exposed by theeth-utils
library. This also removes the automatic setup of theDEBUG2
logging level which was previously a side effect of importing theeth
module. Seeeth_utils.setup_DEBUG2_logging
for more information. (#1846)
- Add EIP-1108 to Istanbul: Reduce EC precompile costs (#1819)
- Make sure
persist_checkpoint_header
sets the given header as canonical head. (#1830)
- Remove section on Trinity's goals from the Readme. It's been a leftover from when Py-EVM and Trinity where hosted in a single repository. (#1827)
Add an optional
genesis_parent_hash
parameter to :meth:`~eth.db.header.HeaderDB.persist_header_chain` and :meth:`~eth.db.chain.ChainDB.persist_block` that allows to overwrite the hash that is used to identify the genesis header. This allows persisting headers / blocks that aren't (yet) connected back to the true genesis header.This feature opens up new, faster syncing techniques. (#1823)
- Add missing
@abstractmethod
decorator toConfigurableAPI.configure
. (#1822)
- Remove
AsyncHeaderDB
that wasn't used anywhere (#1823)
- Add back missing
Chain.get_vm_class
method. (#1821)
- Package up test suites for the
DatabaseAPI
andAtomicDatabaseAPI
to be class-based to make them reusable by other libaries. (#1813)
- Fix a crash during chain reorganization on a header-only chain (which can happen during Beam Sync) (#1810)
- Setup towncrier to generate release notes from fragment files to ensure a higher standard for release notes. (#1796)
- Drop StateRootNotFound as an over-specialized version of EVMMissingData. Drop VMState.execute_transaction() as redundant to VMState.apply_transaction(). (#1809)
Released 2019-06-05 (off-schedule release to handle eth-keys dependency issue)
- #1785: Breaking Change: Dropped python3.5 support
- #1788: Fix dependency issue with eth-keys, don't allow v0.3+ for now
Released 2019-05-20
- #1778: Feature: Raise custom decorated exceptions when a trie node is missing from the database (plus some bonus logging and performance improvements)
- #1732: Bugfix: squashed an occasional "mix hash mismatch" while syncing
- #1716: Performance: only calculate & persist state root at end of block (post-Byzantium)
- #1735:
- Performance: only calculate & persist storage roots at end of block (post-Byzantium)
- Performance: batch all account trie writes to the database once per block
- #1747:
- Maintenance: Lazily generate VM.block on first access. Enables loading the VM when you don't have its block body.
- Performance: Fewer DB reads when block is never accessed.
- Performance: speedups on
chain.import_block()
:- #1764: Speed up
is_valid_opcode
check, formerly 7% of total import time! (now less than 1%) - #1765: Reduce logging overhead, ~15% speedup
- #1766: Cache transaction sender, ~3% speedup
- #1770: Faster bytecode iteration, ~2.5% speedup
- #1771: Faster opcode lookup in apply_computation, ~1.5% speedup
- #1772: Faster Journal access of latest data, ~6% speedup
- #1773: Faster stack operations, ~9% speedup
- #1776: Faster Journal record & commit checkpoints, ~7% speedup
- #1777: Faster bytecode navigation, ~7% speedup
- #1764: Speed up
- #1751: Maintenance: Add placeholder for Istanbul fork
Released 2019-02-28
- #1719: Implement and activate Petersburg fork (aka Constantinople fixed)
- #1718: Performance: faster account lookups in EVM
- #1670: Performance: lazily look up ancestor block hashes, and cache result, so looking up parent hash in EVM is faster than grand^100 parent
Released Jan 15, 2019