Releases: ethereum/ethereumj
1.3.0 Release Candidate 4
- Eliminated all references to static
SystemProperties.CONFIG
- Refactored
PendingState
- Bugs fixed
1.3.0 Release Candidate 3 (DAO rescue soft fork final version)
1.3.0-RC3-daoRescue2 Update version
1.3.0 Release Candidate 2 (DAO rescue soft fork)
Merge branch 'develop' Conflicts: ethereumj-core/src/main/resources/version.properties
DAO Rescue HotFix 1.2.8 Release
For those who are not migrated to 1.3.0-RC
this is 1.2
release with the critical Ethereum soft-fork update aimed to rescue stolen DAO funds
The motivation, offering the network to overcome significant submitted crime
by:
https://live.ether.camp/account/0x304a554a310c7e546dfe434669c62820b7d83490
stealing 3.6M ether.
The complete explanation can be studied in that diagram:
http://www.ether.camp/dao-thief.html
The proposed solution is to freeze all the transactions trying to
move any funds from the DAO or the child DAOs.
The rescue fix is still for the miners to vote about , they have to
lower the gas limit value for that fix to be activated.
1.3.0 Release Candidate 1
1.3.0-RC1 Updated version
Release 1.2.0
- Full support for Homestead features
- Further blocks import performance optimization: importing of the first 1M blocks can take less than 1hr (depending on the hardware)
- Memory footprint reduced
- More flexible blockchain parameters configuration API (BlockchainConfig and BlockchainNetConfig classes
StandaloneBlockchain
helper class - makes it pretty easy to write Java unit tests for Solidity contracts (see StandaloneBlockchainSample)solc
compiler version updated to0.3.1
, resolved Mac issue- A number of issues fixed, improved stability
Let's chat about...
More info here:
Sponsored by:
Release Candidate 1.2.0 Homestead
Homestead compatible release.
Other features:
- Improved block import performance (~1.5 Hrs for 1M blocks)
- Solidity compiler (from Ethereum++) bundled and can be invoked from Java code (see CreateContractSample sample on how to compile-deploy-call contract)
- Windows LevelDB database upgraded to version 1.18 (more stable)
- 60/61 Eth protocols were deprecated
Let's chat about...
More info here:
Sponsored by:
Release 1.1.0
Pure Java Miner
We support mining now! It is currently implemented in pure Java and can
be used in private and test networks. You may even mine on the live Ethereum
network however it is not economically feasible of course.
The miner can run in two modes ‘cache-only’ and ‘full-dataset’. For the same
difficulty the first one requires much more time to calculate a block nonce but
takes only 16Mb of RAM while the latter takes 1Gb but runs much faster. The
first one can be used for testing with lowered difficulty.
The mining can be started by ‘mine.start’ config option which makes the miner started
either immediately on startup or when the blockchain is synced with the network. Another
option is starting the miner programmatically by invoking Ethereum.getBlockMiner().startMining()
.
To monitor miner events you may want to implement and add MinerListener
The PrivateMinerSample
demonstrates creation of a simple 2 peer private network with a miner.
> ./gradlew run -PmainClass=org.ethereum.samples.PrivateMinerSample
Eth protocol 61/62 support
This release remains in line with the whole Ethereum network where 95% of peers moved to the latest Eth62 subprotocol. The most significant improvement of the Eth62 protocol is more flexible block exchange messages which improves the sync speed.
PendingState
PendingState is when you can see the state change immediately after transaction submit instead of waiting for a block where your transaction is included.
For example if you send the value transfer transaction the PendingState will immediately reflect balance changes of sender and receiver (including mining fees) or indicates that transaction will not be accepted. This transaction is stored as a pending transaction until a new block is arrived. If the block contains that transaction it is removed from the PendingState, else the transaction is recalculated based on the latest block and you may see the updated state.
Try running PendingStateSample
to see how it works on practice.
> ./gradlew run -PmainClass=org.ethereum.samples.PendingStateSample
Contract invocations becomes easier
We have added utility classes to make the contract call transactions construction much easier. You may do this by either supplying a Solidity contract ABI or manually constructing each function by passing its name and input/output parameter types. You may pass functions arguments as a regular Java objects which are flexibly converted to Solidity types. The same way return values are parsed and represented as corresponding Java types.
The same way you may call constant function that is function invocation without propagating transaction to the network and without any changes to the contract state. So if you need to get some value from a contract you just do a constant call - that costs nothing, executed immediately and return you a value. To be completely precise you may call any function (not necessarily effectively constant) and get correct result but the contract state remains the same as before the call.
You may want to take a look at PriceFeedSample
for introduction.
> ./gradlew run -PmainClass=org.ethereum.samples.PriceFeedSample
Finer and more flexible config
There are much more options now on how to configure your EthereumJ instance.
For reference on all existing options, their description and defaults you may refer to the default config ethereumj.conf
(you may find it in either the library jar or in the source tree ethereum-core/src/main/resources
)
To override needed options you may use one of the following ways:
- put your options to the
<working dir>/config/ethereumj.conf file
- put
user.conf
to the root of your classpath (as a resource) - put your options to any file and supply it via
-Dethereumj.conf.file=<your config>
- programmatically by using
SystemProperties.CONFIG.override*()
- programmatically using by overriding Spring
SystemProperties
bean
Note that don’t need to put all the options to your custom config, just those you want to override.
Running several nodes in a single JVM
We removed the majority of statics in the EthereumJ code and substituted it with per Spring AppContext instances. That allows to create several separate instances of EthereumJ within a single JVM. So you can configure and start your small private network in a single JVM just from your main() method.
To see how that can be configured please refer to the PrivateMinerSample
> ./gradlew run -PmainClass=org.ethereum.samples.PrivateMinerSample
Whisper upgrade
Whisper protocol has been upgraded to version 3 so if your private network supports Whisper you can use EthereumJ implementation together with the latest C++ Whisper capable nodes.
Gas price calculator
Pretty tiny but quite convenient feature which just gives you a reasonable gas price for your transaction. This value is just a statistics of the latest N transaction gas prices.
See how PendingStateSample
uses that feature.
> ./gradlew run -PmainClass=org.ethereum.samples.PendingStateSample