Releases: ethereum/ethereumj
1.4.0 Release
Ethereum Harmony v2.0
- Fast Sync based on EthereumJ v1.4
- Tracing full data of smart contracts locally
Try it now: https://github.com/ether-camp/ethereum-harmony
Core
- Eth63 protocol and FastSync are now supported! FastSync is turned off by default and could be enabled with config option
sync.fast.enabled = true
We divided FastSync process onto 3 stages. If the node is shut down during any fastsync stage after restart the previous completed stages are not reset and the node just restarts the sync of the interrupted stage:- UNSECURE: the node syncs to the latest state in several minutes (e.g. 4-15 minutes on live network depending on the network bandwidth and how fast peers are found) allowing to query accounts state and submitting transactions. However the state at this stage can not be trusted as it is not confirmed by the block chain yet. It is worth to wait for SECURE stage for performing any security sensitive tasks
- SECURE: all the block headers are downloaded and the chain consistency is verified. It's safe to do any tasks at this stage. However the node is still missing Blocks and Receipts which are downloaded at the last stage
- COMPLETE: all the data including Blocks and Receipts is downloaded. All functionality is available at this stage and the peer starts functioning as usual (i.e. Eth protocol reports proper total difficulty and latest block and is capable for blocks and receipts downloading)
- Caching: completely new caching mechanism was implemented which is controlled by the config
cache {}
section. The central cache is state read cache: LRU cache bounded by memory size. The state DB as well as others have write caches which are also bound by their total memory, reaching this memory threshold triggers DB flush. - Memory optimization: new cache functionality added finer control over JVM heap usage:
- with default cache config node works fine with
-Xmx512M
option (however it is recommended to reserve at least 1G of heap) - with minimal cache settings the node managed to work with
-Xmx128M
option (though this is not recommended due to possible extra-heavy blocks)
- with default cache config node works fine with
- Add ETC and Ropsten support: add new test network support (check
runRopsten
gradle target) and implement both ETC forks - Solc upgrade: solc upgraded to the latest release and was extracted as a separate Java wrapper SolcJ project which makes it possible to switch solc version independently of EthereumJ release or just use it independently. As an option any other installed solc compiler can be specified with the
solc.path
config option.
Also we supported latest ABI enhancements. - Unlimited pruning depth: due to new prune approach (use of ref counting DB) and using prune DB backing store the pruning depth can be set as large as desired
- External miner capable: you may now use your favorite Ethereum miner (GPU or CPU) implementation with EthereumJ (check the Harmony project for details)
- Database versioning: we are now tracking DB versions and warn the user or reset the DB (depending on the config) in case if an older incompatible DB version is detected. We will do our best to not upgrade the DB version in minor releases.
- Adopted to run Hive test suite with EthereumJ implementation: more testing with the suite shared by all Ethereum clients (C++ eth, geth, Parity)
- Moved to Logback logger implementation
Hotfix 1.3.9: Memleak fixed
Fixed the memory leak when pruning is off.
Also fix Transaction backward incompatible API changes from EIP155
Hotfix 1.3.8: conflict resolved
- Consensus conflict resolved (Tx, some explanation)
- Some bugfixes in discovery
1.3.7 HardFork #4 (Spurious Dragon) Release
Implements the following EIPs:
ethereum/EIPs#155 (Tx replay protection)
ethereum/EIPs#160 (EXP cost increase)
ethereum/EIPs#161 (State trie clearing)
ethereum/EIPs#170 (Contract code size limit)
Added Ropsten config and the Gradle runRopsten
target
Got quite bad side effect (spurious state trie breaking) from these changes, which we were unable to catch.
So in this version trie pruning is disabled by default as a temporary workaround.
(you may try to enable it back and it probably would work, but make sure to have the DB backed up)
EIP150 HardFork 1.3.6 Release (fix HF block number, Morden HF)
Hotfixes for 1.3.5
Release:
- change main chain HF block number to
#2 463 000
- add Morden EIP150 HF at the block
#1 783 000
EIP150 HardFork 1.3.5 Release
Details on EIP150 HardFork are here:
https://blog.ethereum.org/2016/10/13/announcement-imminent-hard-fork-eip150-gas-cost-changes/
EthereumJ changes: 075b881
HotFix 1.3.2 Release
This hotfix release addresses Parity connectivity issue. The EthereumJ should now be able to connect Parity nodes.
Latest DoS attacks resulted in almost all Geth nodes are down or had out-dated blockchain, thus EthereumJ nodes had significant problems with finding peers to sync with.
HotFix 1.3.1 Release
Fixed numerous problems with state and storage trie DB which resulted in No parent on the chain for block.number
errors
Also make sure you have at least 2.5G of heap memory for core for bypassing 'DoS blocks' (~ 2287K ...) with extensive EXTCODE*
usage. This is temporary workaround.
Release 1.3.0
- State Trie pruning: greatly reduces the state database size (from 50Gb to less than 500Mb). The state trie is intended to store the whole Ethereum state as well as all of its intermediate states. Older states are rarely needed, while latest states are required for rebranching. From this release by default the trie stores intermediate states for the latest 192 blocks only, older states are pruned. If your code is expected to use older state snapshots this feature should be either turned off or number of stored states should be adjusted (see
database.prune
options)
NOTE: it is recommended to resync database from scratch to reduce its size and avoid possible sync performance problems - Transaction store: the blocks transactions info and their receipts are now stored in the DB and accessible via their hash. See the
TransactionStore
component - DAO hardfork: support the DAO rescue hardfork (1920K block funds transfer, peer fork side testing), though you still may run EthereumJ on each side of the fork (ETH and ETC) by adjusting config parameters
- Block sync refactoring: long/short block sync became more reliable due to the new
SyncManager
implementation - Pending state refactoring: tracking a transaction life cycle became more convenient with the refactored
PendingState
component andEthereumListener.onPendingTransactionUpdate
callback - Ethereum.close(): the node can be now gracefully shut down and started again without application restart
- Config usage clean up: eliminated the rest of static references to the
SystemProperties
bean. The node (or several nodes in one JVM) can be now completely configured via theSystemProperties
bean. - Dead code clean up: remove unused packages, classes and library dependencies
- Bug fixes: and of course we are continuing to improve the library quality by fixing bugs
1.3.0 Release Candidate 5 (DAO rescue hard fork)
The 'Hotfix prerelease' which implements the DAO rescue hard fork spec (https://blog.slock.it/hard-fork-specification-24b889e70703#.igh9b62hy)
Essentially this is just a transfer from the set of predefined accounts (the DAO
, its children and their extraBalance
contracts) to the specially created Withdraw contract (https://live.ether.camp/account/bf4ed7b27f1d666546e30d74d50d173d20bca754) at the beginning of the block #1920000
(i.e. before processing any transactions from this block)