Skip to content

Exonum Java Binding 0.3

Pre-release
Pre-release
Compare
Choose a tag to compare
@dmitry-timofeev dmitry-timofeev released this 30 Oct 11:11
a9e6e04

Highlights

This release brings:

  • Support of flat map proofs, the new compact proof format for ProofMap, supporting several keys.
  • Built-in serializers of Java primitive types, some Exonum library types and protobuf messages.
  • Ability to report the transaction execution result as an exception with extra information accessible by a client: TransactionExecutionException.
  • A separate module exonum-java-binding-common that can be used in client applications to create transaction messages, check proofs, serialize/deserialize data, perform cryptographic operations.
  • Various fixes and improvements.

The release is based on Exonum 0.8.

Added

  • Flat map proofs support, including proofs of absence and multiproofs — proofs for several
    entries at once. (#250, #507, #532)
  • StandardSerializers
    now supports bool, fixed32, uint32, sint32, fixed64, uint64, sint64, float
    and double primitive types, PrivateKey, PublicKey and byte[] serialization. (#514, #523)
  • A deterministic Serializer of any protobuf message — StandardSerializers#protobuf. (#493)
  • Static factory methods accepting protobuf messages to collections,
    allowing to pass Protocol Buffer messages directly instead of using
    StandardSerializers#protobuf. (#505)
  • Message.Builder#setBody(byte[]) to avoid ByteBuffer.wrap in the client code. (#401)
  • MapIndex.isEmpty() method to check if MapIndex is empty. (#445)
  • Wallet transactions history support to the cryptocurrency-demo. (#481)

Changed

  • Transaction#execute
    can throw TransactionExecutionException to roll back
    any changes to the database. The exception includes an error code and an optional
    description which the framework saves to the storage for later retrieval.
    Any other exception is considered as an unexpected error (panic in Rust terms). (#392)
  • Refactored exonum-java-proofs module to exonum-java-binding-common module
    with com.exonum.binding.common root package so that more functionality
    is available to client applications with no dependency on exonum-java-binding-core (#459)
    • Moved crypto package to exonum-java-binding-common module. (#467)
    • Moved hash package to exonum-java-binding-common module. (#469)
    • Moved Transaction-related classes to the new com.exonum.binding.transaction package. (#469)
    • Moved messages package to message package in exonum-java-binding-common module. (#469)
    • Moved proofs package to com.exonum.binding.common package. (#469)
    • Moved serialization package to com.exonum.binding.common package. (#469)
  • ProofMapIndexProxy#getProof to return a flat UncheckedMapProof
    instead of tree-like MapProof, which is a more efficient format in terms of space. (#478)
  • ProofListIndexProxy#getProof and ProofListIndexProxy#getRangeProof to return
    UncheckedListProof instead of ListProof. The latter is renamed into ListProofNode
    and may be accessed through UncheckedListProof#getRootProofNode (#516)
  • ListProofValidator returns an instance of NavigableMap instead of Map. (#457)

Removed

  • Hashing#toHexString. (#379)
  • Deprecated tree map proofs in preference to flat map proofs,
    the only supported format by the Exonum storage. (#518)