State Channel, VM, Mempool and Performance Improvements

Photo by Christian Holzinger

In addition to Bitcoin-NG’s Proof of Fraud, the new epoch release introduced a number fixes and improvements to state channels, Sophia, VM and mempool.

Last week a new release was uploaded to our GitHub repo. The release is focused on the Bitcoin-NG Proof of Fraud.

As we covered extensively in our previous post, the biggest contribution of this release is the Proof of Fraud (PoF) protocol that is responsible for reporting a malicious mining leader that creates forks in a generation.

In addition, this release implements numerous features related to state channels, mempool, Virtual Machine and performance. These updates:

  • Change the difficulty from a floating point number to an integer value as seen in P2P message PING, and node status.
  • Add a fixed gas limit per micro block.
  • Add fixed gas to all transactions (contract create and contract call transactions use the fixed gas plus gas needed for their execution).
  • Modify mempool to select transactions up to the gas limit per micro block.
  • Restructure the serialization format for headers by shrinking the version field to 32 bits, and by introducing a flags field in 32 bits.
  • Update the state channel’s Finite State Machine (aka FSM) so that it will now terminate if it detects that someone is trying to close the channel on-chain.
  • Add built-in functions String.length and String.concat for Sophia strings.
  • Fix a Sophia bug where None would match a Some(x) pattern
  • Add events (logs) generated by the VM to the call state tree.
  • Fix the AEVM CALL instruction to place 0 (as opposed to 1) on the stack if the value operand is not covered by the balance of the currently executing account.
  • Fix the Sophia AEVM primitive operations to check that the specified value is covered by the balance of the currently executing account — regardless of whether the value is used by the primitive operation.
  • Fix a bug that affected syncing of large generations (> 64K).
  • Move Sophia value encoding/decoding from AEVM bytecode to Erlang code. This affects consensus.
  • Make execution of some chain related instructions in contracts more efficient.
  • Make the TIMESTAMP instruction deterministic by using the timestamp of the current micro block.
  • Make the DIFFICULTY instruction deterministic by using the difficulty at the previous key block.
  • Make the gas cost of oracle VM primitive operations proportional to the TTL of the objects (oracles, queries, responses) on state trees.
  • Improve the stability of the user HTTP API.

Follow the development progress at Pivotal Tracker.


Interested in æternity? Get in touch:

GitHub | Forum | Reddit | Telegram | Twitter | Facebook | Mail


Leave a Reply

Your email address will not be published. Required fields are marked *