State of Development: Week of August 27th, 2018

The last week saw core development continue at pace, and our latest release is primarily focused on the user API.

Release 0.21.0 removes support for MessagePack encoding in the user HTTP API and makes HTTP API more consistent by using IDs in all blockchain components (accounts, contracts, oracles, etc.) and unifying endpoint paths. This latest release also cleans up unused HTTP endpoints that signed transactions inside node.

We worked to ensure that we could detect more possible race conditions in state channel updates, thereby also making it possible to “softly reject” an update, by requesting a competing update in response to a signing request. This should be seen as a temporary measure until support for rejecting a signing request is implemented.

We’ve also worked to change micro block gossip to use Light micro blocks, containing only Tx hashes. In most cases the receiving node has already seen all transactions so this saves bandwidth and bumps the P2P_PROTOCOL_VSN.

Elements of the update impacting consensus

The latest update changes the serialization format of micro headers to include the signature. This changes both what is signed by the miner, and how the block hash for micro blocks is computed which subsequently affects consensus.

This latest release also fine-tunes the determinism of the computation of the dynamic component of the fee of oracle transactions related to TTL of objects (oracles, queries, responses) on state trees, moving floating point computations to integer based ones. The update also increases beneficiary reward delay to 180 key blocks / generations and this in turn impacts consensus.

Further advantages of our latest development include:

Adding support for type aliases and typed contract calls to the Sophia compiler.

Changing the target (difficulty) calculation algorithm to use DigiShield v3.

Fixing miner fee reward calculations, which were too generous before.

Modifying the minimum static component of the fee of oracle transactions to 1, as for all other transactions.

Adds on-chain forcing of progress for channel off-chain contracts.

Fixed sporadically seen timeout errors in sync when inet:getaddr took too much time to resolve.

As always, the best place to follow the development progress towards Mainnet launch (apart from GitHub) is the Pivotal Tracker.