Dear IOST community,
Over the last few years, blockchain projects have been grappling with what has come to be known as the scalability trilemma. Trying to find a balance between scalability, security and decentralization isn’t easy, and many projects have been cutting corners too much in one area and compromising the integrity of their blockchain in others. At IOST, we are developing solutions to this trilemma, and working to build a truly functioning decentralized infrastructure.
As a result of this continued work and development, we are excited to announce the second iteration of our IOST testnet today — Everest v1.0. Some of the most exciting features of our newest version include:
- First Blockchain to support smart contact Domain Name System (DNS) and Flexible Access Control on upgrade/removal of contracts
- First Blockchain to support Multiversion Concurrency Control (MVCC) in storage layer, enabling high performance storage with MVCC cache
- Redesigned Virtual Machine that resolves many design issues in EVM and EOS - performance benchmarked 10x faster than EOS and 200x faster than Ethereum
Everest v1.0 marks a new stage of the IOST blockchain development and incorporates many of the new technologies and systems we have been working on this past year. We’ve worked diligently to introduce significant updates to our technology from our first release — Everest v0.5 in June 2018 — and are very excited to reach this milestone of releasing version 1.0 to the public.
Everest v1.0 Highlights
- Smart Contract Access Control. Transactions now support multiple signatures. Smart contracts can check the call stack, and can answer questions such as “Who invoked this ABI?” Smart contracts also have special permissions control, such as upgrade and removal. This largely reduces the pain of smart contract management present on Ethereum and similar platforms.
- Generation of result of the consensus. After execution, the smart contract will generate a TxReceipt into the block and seek consensus. we can use remote procedure calls (RPC) to track the TxReceipts of on-chain transactions creating transparency and accountability for the entire network.
- General Application Binary Interface (ABI) support. IOST smart contracts now interact with the network through ABI’s. More complicated data structures can be parsed using JSON strings. This gives developers greater flexibility and automation for contract creation and invocation.
2. Re-designed Virtual Machine
A good implementation of a virtual machine (VM) needs to be elegantly designed, easy-to-use, and secure. After comparing the pros and cons of EVM, EOS, C Lua(used in Everest v0.5) and V8, we have resolved many design issues present in EVM and EOS by building the IOST VM based on the V8 engine. The core of the IOST virtual machine is our VMManager, which has three main features:
- VM Entrance. It interfaces external requests from other modules, including RPC requests, block validation, Tx validation, etc. The work is handed off to VMWorker after pre-processing and formatting. It gives unified entrance for all requests.
- Management of interface with State Database. This ensures atomicity (prevents partial updates to the database) of each IOST transaction, denying the entire transaction when there is an error of insufficient funds. At the same time, two-level cache is achieved in the State Database before being flushed to RocksDB. This ensures less access time for different versions of data, and optimized performance for temporary data.
3. High performance Storage layer with Multiversion Concurrency Control (MVCC) cache
- MVCC cache. Due to the paradigm of data handling on the blockchain, we use MVCC cache to process requests and cache them concurrently in memory. This improves usability and performance.
- Dynamic Database access. The storage layer is the final persistence of data. We adopt the simplest key-value database form, and achieve access to different databases on different service level agreement (SLA) scenarios.
- Commit Manager. Implemented for the out-most layer, this handles the management and maintenance of multi-version data. Higher layers, therefore, can treat the interface as a typical database and switch to any version at will.
4. Fully decentralized network layer with fast discovery and efficient broadcasting
We are building a fully decentralized network topology that achieves fast discovery of nodes and efficient whole-net broadcasting of transactions and blocks. At the same time, we are limiting redundancy within the network, and achieving secured data transmission among the nodes. Through research and testing, we have decided to build upon the libp2p library as our network layer due to the additional features this library offers.
- Node discovery and connectivity. we secure all data with a TLS layer on top of TCP. To better utilize each and every TCP connection, we adopt stream-multiplexing to send and receive data, dynamically establishing multiple streams between nodes and maximizing the bandwidth. With nodes, we use Kademlia to maintain their gateway tables. This means we can prevent eavesdropping and unwanted manipulation of data across the network.
- Data transmission. To reduce bandwidth and to speed up data transmission, we serialize all structured data with Protocol Buffers, and compress them with the Snappy algorithm. During our tests, this integration reduced the size of the data by over 80%.
- LAN penetration. We use Universal Plug and Play (UPnP) Protocol to achieve LAN penetration. UPnP is different than other solutions, such as UDP Hole Punching and STUN; it does not require port exposure without publishing the server. This means you can use your home computer to access our network and communicate with other nodes, without having to use a cloud server, making sure our network is always accessible to any user.
Everest v1.0 will serve as the foundation of IOST’s upcoming mainnet release. We are still on track in regards to our timeline and roadmap, and even delivering more features and functionality sooner than planned. Unlike many other projects who have delayed their milestones, IOST has been working tirelessly to stay ahead, with Mainnet scheduled for release in Q1 2019 — several months earlier than originally planned.
The launch of Everest v1.0 is another testament of our commitment to timely releases, progress and continuous development. We’d like to thank our developer community for working around the clock (and around the Earth) to build and deliver IOST Everest v1.0. We are extremely excited to release this next big update to our community and getting straight back to work leading up to Mainnet Q1 2019!
We would also like to take this opportunity to invite you to join our developer community. We are a friendly group of developers who come together to solve problems and learn from each other. IOST embraces developers and we want all developers to “have fun” in our community. You can get involved at:
Developer’s one-stop-site: https://developers.iost.io
Developer Community on Slack: https://invite.iost.io
We encourage you to get involved and play with our testnet. As always, let us know your thoughts and we look forward to continuing to improve the IOST blockchain.
The IOST development Team