Authored by Amer Ameen
Since we published our last blog post, The future of Polkadot in Golang: Gossamer, we've made significant progress towards our goal of completing a preliminary implementation of the Polkadot Host and running a devnet with multiple block producing nodes.
For those who are unfamiliar, Gossamer is an implementation of the Polkadot Host, formerly known as the Polkadot Runtime Environment. To learn more about what exactly that is, watch our introductory talk from DotCon during Berlin Blockchain Week.
When we published our last update, we were working on integration testing for the State Service, Block Production (BABE), & Block Finalization (GRANDPA). We are proud to share that we've completed the integration testing for the State Service & Block Production, and we have implemented a preliminary version of GRANDPA. We have also been developing tools to help us spin up local testnets, simulate transactions & verify that the blockchain progresses as expected. Using these tools we've been able to verify that our initial implementation works as expected.
We had initially planned to cut a release of Gossamer at this point, however, we discovered that our WASM interpreter, go-wasmer, contains a bug that is blocking the upgrade of the runtime to v0.6. Since GRANDPA is dependent on the upgrade to v0.6, we are waiting on the wasmer team to fix this, which is expected to happen by the end of the month! After that we will do an initial release of Gossamer.
While we have completed an initial working implementation, there are a few items from the specification that aren't implemented yet; implementing these remaining items is our top priority followed by a testing phase where we thoroughly test our implementation with a variety of network conditions.
In order to test our implementation, we have been running local networks with different configurations of nodes (i.e. varying things like: the number of nodes, the proportion that are producing blocks, the proportion that are finalizing) and with various test cases (i.e. varying network conditions, transactions, & scenarios). Although unit tests can confirm that the individual components that make up Gossamer are correctly implemented, there is no substitute for long-running testnets to verify that Gossamer will work as expected in the real world.
Following that, our next major milestone is to sync with Kusama. In order to do this, we will update the runtime to Kusama's runtime. Since the Kusama Runtime API is different from the current runtime we are using (the default Substrate node runtime), we need to update Gossamer's Runtime API to be compatible with Kusama's Runtime.
As we work towards these major milestones, we also plan to add support for Polkadot.js, which will allow developers and users alike to interact with Gossamer using an intuitive user interface. While this doesn't take priority over any of our major milestones, it will help us while trying to test our implementation and sync with Kusama. In order to support Polkadot.js, we need to further develop our RPC interface so that it is fully compatible with Polkadot.js.
Finishing GRANDPA officially completes the initial grant that we received last year from Web3 foundation to build an alternative implementation of the Polkadot Runtime Enviornment (now called the Polkadot Host). Both as an organization and as individuals, it has been quite a special journey to this point. We've learned an incredible amount from this project and from people that we've worked closely with at Web3 & Parity Technologies. These experiences have only strengthened our conviction for the immense potential of Web3.0 technologies and our ability to help realize it.
That being said, we're excited to announce that we have been funded by the Web3 Foundation to continue working on this project and developing the Golang ecosystem for Polkadot. We couldn't be more excited for what the future holds for Gossamer & Polkadot.
In the spirit of Open Source Software, we always welcome new friends to help us build this (and other) exciting blockchain projects. If you're interested in learning more, come say Hi on Discord or pick up an issue tagged ‘Good First Issue'. We've made so many new friends from the Open Source community and we look forward to meeting you :).