Zilliqa Project Update #24
— Happy Holidays from Zilliqa
This will be our final project update of 2018 and it suffices to say that this past year was a major year of progress from our project, from the recent launching of Testnet v3 — the first fully-fledged testnet in the world to implement network, transaction, and smart contract sharding — to implementing mining on Zilliqa, to launching our new, more secure formal verification programming language, Scilla, and much more. In 2019, as we first roll out our mainnet in January, we will continue our focus on blockchain innovation while also focusing on ‘Real-Life.’
Check out our 2018 Year in Review.
We’re proud to be one of the first participants in the Messari initiative that is promoting ‘global’ transparency in the world of cryptocurrency. Check out the Zilliqa profile: https://messari.io/asset/zilliqa
We’ve also recently launched a dedicated technical forum for all questions Zilliqa. For any detailed questions about Zilliqa, mining, Scilla, and more visit: https://forum.zilliqa.com/
And finally, Happy Holidays from everyone on the Zilliqa team! We’re tremendously proud to have such an incredible community supporting our project. It has been an incredible past year for Zilliqa as we’ve laid the foundation for a decentralized, scalable, and much more secure blockchain infrastructure. But we know the work has just begun.
As always, please feel free to connect with us in any of our social channels:
Forum: https://forum.zilliqa.com/
Telegram: https://t.me/zilliqachat
Slack: https://invite.zilliqa.com/
Twitter: https://twitter.com/zilliqa
Reddit: https://www.reddit.com/r/zilliqa/
Github: https://github.com/Zilliqa/zilliqa
Gitter: https://gitter.im/Zilliqa/ (Dev-related topics including the Ecosystem Grant)
Events
For the past two weeks, we have been heads-down focused on the rollout of our mainnet and our business and marketing strategies for 2019. For upcoming events, we already have headlining speaking commitments for some of the largest crypto events in 2019. We’ll also be rolling out many more localized events and workshops and building the communities around Zilliqa and Scilla, so stay tuned.
Tech Updates
Since the launch of Testnet v3, we have continued to make improvements to the codebase. We have since launched a new version of the Testnet v3 and released a testnet status page in our forum (https://forum.zilliqa.com/t/maoshanwang-testnet-status/151).
Here are some of the notable improvements we have made in the past 2 weeks.
Network recovery mechanism
To prepare for unforeseeable events such as network failure, we have implemented a recovery mechanism to re-bootstrap and restore the whole network. To facilitate this, lookup nodes will routinely perform a backup procedure as a pre-emptive measure for network failure. When the network fails, a new network will be launched from the backup of the latest state.
Update to lookup and introduction of seed nodes
We have introduced a new network layer called the seed node network. New seed nodes will be able to register with a lookup multiplier, a special node that mirrors lookup traffic to seed nodes, to be part of the seed network. The role of the seed node is to receive transactions from services such as wallets and forward the transactions to the lookup. The lookups will then batch the transactions and assign them to the corresponding shard for processing.
Shard node to trigger the rejoining process if it misses final block(s)
A shard node can miss a final block due to various issues such as intermittent network failure. We have introduced a mechanism for the shard node to securely check whether it is missing final block(s). In the event of missing final block(s), the shard node will then re-sync itself and rejoin the shard.
Addition of tolerance for validating IP addresses in the sharding structure
In some instances, the Directory Service leader and backups may receive PoW submissions from the same node but with different IP addresses (or ports), resulting in the backup failing to validate the sharding structure proposed by the leader. Such a situation can occur when, for example, a node has been restarted by its user with a different IP address or port, or perhaps when the change in IP address is due to IP address lease expiration. To accommodate these possibilities, we have added a tolerance value when validating the sharding structure, allowing the DS backups to accept the sharding structure from the DS leader if the number of nodes with differing IP addresses is within said limit.
Changes in Protobuf field definitions to allow backward compatibility in persistent storage
The Protobuf field definitions for serializing and deserializing messages to and from persistent storage are mostly set to “required”. This means that these fields must be set in order for the message object to be initialized. However, there is a possibility of these fields being unused or deprecated in future updates. Deserializing from persistent storage can then become an issue. As part of our effort to support backward compatibility, we have now set these fields to “optional”. The core C++ source code will now implement the checks for those fields that are considered required. This essentially moves the enforcement of required fields from the message content (i.e., the Protobuf definitions) to the source code, which is easier to change between software updates than the format of data already stored.
Scilla Interpreter
On the Scilla side, we have added a few useful built-ins such as the ones for converting b/w integer and strings and a pow
function to compute exponentiations. Please check Scilla docs for updated documentations. Documentation on cashflow analysis is now also available here.
We have also set up code coverage tools for Scilla codebase. The current coverage rate is 77%. We plan to increase test coverage in the coming weeks.
In order to improve testing of smart contracts with the blockchain layer, we have added an infrastructure for testing contracts in the blockchain using test data in the Scilla Testsuite. Example contracts such asCrowdfunding
and PingPong
from Scilla are now fully tested within the main blockchain code.
A very important feature that we have been working on is adding support for user-defined datatypes to Scilla. This will make it much simpler to structure the data used in the contract, rather than relying on pairs and lists. In the first phase of the development, we will only support flat datatypes, similar to unions of structs in C. Support for inductive datatypes (i.e., trees) and polymorphic datatypes (i.e., trees with arbitrary contents) is planned for post-mainnet.
Dev Tools and Libraries
As has been the case in the last couple of updates, we’ve spent the last two weeks tightening up our JavaScript library. This time, we’ve published a new minor version, 0.3.0
, that introduces some breaking changes in exchange for a better developer experience and bug fixes. This release has the following updates:
- Added
DeployParams
andCallParams
toContract.prototype.deploy
andContract.prototype.call
, respectively, to allow granular control over the underlyingTransaction
parameters. - Return a tuple of
[Transaction, Contract]
from deployments, for better control and introspection. - Support
_scilla_version
ininit.json
, as this is now required byscilla-checker
. - Adjust network code to deal with the new JSON-RPC responses in Core.
- Fixed an issue with
sign
decorator failing to forward some arguments to the underlyingTransaction
.
The protocol now supports three basic tokens units ZIL, LI ( 10^-6 ZIL
) and QA ( 10^-12 ZIL
). With this, we have also added fromQa
and toQa
to @zilliqa-js/util
with a familiar web3.js
-esque API, for conveniently dealing with ZIL/LI/QA conversions.
Kaya RPC has also been patched accordingly to work with the new units. Balance in Kaya RPC is captured in QA
unit just like the core Zilliqa. We have also made changes in Kaya RPC to comply with the JSON RPC specifications.
We’ve also made a couple of fixes to the Explorer and Wallet, including:
Explorer:
- Properly displaying all DS block headers.
- Fixed the inverted Gas Price and Gas Limit fields in the TX block view.
Wallet:
- Fix accounts with a balance and nonce of 0 being unable to initialise in the wallet.
- Handle the new gas price change by removing the gas limit input and replacing it with a default value of 10 ** 9
QA
. - Display amounts in ZIL, rounded to six (of twelve possible) decimal places.
Once again, the community has been invaluable to providing feedback to our team. Thanks!
Zilliqa in the News
Coinbase Pro has listed ZIL in select jurisdictions: https://blog.coinbase.com/ethereum-tokens-dai-dai-golem-gnt-maker-mkr-and-zilliqa-zil-are-launching-on-coinbase-3065eeb42d5b
Xinshu in an interview with Matthew Aaron from Crypto101 podcast: https://www.youtube.com/watch?v=FBPCLZQqjAM
An interview with Yaoqi and some of the Zilliqa tech team about how they use AWS: https://www.youtube.com/watch?v=-uAQUX-hB5k
Xinshu talking about Zilliqa in 2019 with with Bitcoin.com: https://podcast.bitcoin.com/e622-Blockchain-30-and-2019-dApp-adoption-with-Xinshu-of-Zilliqa
Xinshu comments on trends in the industry coming up in 2019:
https://cryptobriefing.com/crypto-2019-institutional-adoption/
https://www.valuewalk.com/2018/12/2019-predictions-for-blockchain/
An interview for the Czech and Slovak community: