This post was originally published on the Our World blog on 23rd July 2022
As announced on our Telegram group a couple weeks ago, we have finally made a big breakthrough with HoloNET RSM and we can now successfully make zome calls to the latest Holochain RSM conductor. We would like to give a big thank you & shout out to Connor for all his time and patience in helping to resolve many issues over the months to get this working again with RSM! 🙂🙏❤🎉🥳👍
We have also gone further and added support to also retrieve the cell data containing the AgentPubKey & DNAHash. We have actually implemented 3 unique ways of retrieving this data:
Directly from the Conductor using a websocket call and making a "app_info" request using messagepack.
From the "hc sandbox call list-cells" command executed from the terminal/command line internally by HoloNET, which then pipes and parses the output to retrieve the AgentPubKey & DNAHash.
From calling the "agent_info" rust command from a zome compiled into a hApp DNA.
HoloNET has the first two methods built in, it first attempts the first method and if that fails it automatically uses the second method. It then raises a OnReadyForZomeCalls event so the calling app knows when it is safe to start to making zome calls after the Connect() method is called on the HoloNET client.
As you can see when you call Connect it will automatically attempt the first two methods, but you can override this behavior and instead can call them individually with either:
Both will automatically update the HoloNETConfig struct unless you specify not to. You can of course also just set the DnaHash & AgentPubKey manually yourself directly on the HoloNETConfig:
You will need to make sure you call Connect with false for the two optional params above so it doesn't override your hash and key you just manually set.
You can also see some of the other config settings and events HoloNET offers, it has more but we will fully document it soon.... :)
Currently we are doing some final testing with real-world hApps/Zomes/DNA's to make sure HoloNET can handle every possible use case/data thrown at it. It does it's best to decode the data sent from the conductor into something more meaningful for C# land, it also automatically does any decoding/converting necessary such as decoding from base64 which Holochain uses.
When it retrieves the DnaHash & AgentPubKey it also retrieves the InstalledAppId and additional info from the Conductor in the HoloNETAppInfoResponse object:
This is what is returned in the OnAppInfoCallBack callback along with this additional info:
Every HoloNET call returns this info.
The OnZomeFunctionCallBack event returns the following as well as the above:
The RawZomeReturnData is the raw data the Holochain Conductor sends back and the ZomeReturnData is converted and decoded as best as HoloNET can to be friendly to C# land... :)
This is why we need to do more testing to find out everything the conductor sends back for different zome calls so we can cater for all use cases.
We can then release the first version of HoloNET. But we are very close to this and we are tempted to just release it now and then add additional support and fix any new bugs that come up... sorry we are perfectionists so we don't normally like to release something until it has been polished and perfected! ;-)
Ok, now to show some more screenshots of it in action! ;-)
Here we are calling the demo hApp and "Numbers Zome" that increments a number passed in:
That is the Holochain hApp/Zome rust code and we will now call the add_ten zome function from HoloNET.:
And the data returned:
Here are some more screenshots showing additional event handler callbacks and all the data HoloNET makes available to the caller allowing any issues to be easily debugged & fixed. These screenshots show calling the other example zome whoami:
This is the rust zome code which returns the app info containing the cell data, which in itself contains the DnaHash & AgentPubKey.
Here we are now calling the whoami zome function once HoloNET has connected and retrieved the DnaHash & AgentPubKey automatically from the conductor and then raises the OnReadyForZomeCalls event.
The HoloNET client also knows how to decode this special zome return call (is different to the standard zome calls):
HoloNET also has a whole load of other features already built from the previous Redux version built back in 2019 (the world's first .NET & Unity Client for Holochain) such as caching, matching call id's to zome names and zome functions and more... we will fully document all of these soon...
You can view the documentation for the previous version of HoloNET (Redux) here:
And here is the documentation for HoloOASIS (this wraps around HoloNET and integrates it into the OASIS API):
And finally here is the documentation for HoloUnity:
The latest version of HoloNET (RSM) works in a very similar way and much of the events, methods, etc are the same as above except some key differences (most have been covered earlier). As already said we will update the documentation soon for the new version, stay tuned...
If you was interested here is when we first announced HoloNET back in 2019:
It was then featured in Dev Pulse 44:
We can now FINALLY finish HoloOASOS provider and demo with the new OASIS API Data API as well as release the .NET HDK Low Code Generator built 1.5 years ago as well as integrate it into STAR ODK Interoperable Metaverse Low Code Generator... :) Happy Days! :) ❤️
You can check out the repo & code here:
So which .NET & Unity devs out there are ready to build on the amazing Holochain?! :) We can now finally achieve my long term dream held since 2018 to open up Holochain to the massive .NET & Unity eco-systems which will bring the massive amount of devs, resources and PR holochain have been looking for... :)
We promised the next demo videos for the OASIS API after the first was demoed and released on Summer Solstice (June 21st), we have been ready to do these demo videos since then (the Data API, SEEDS API, Wallets/Keys API are all ready to use) but we then had the HoloNET breakthrough so we have delayed them till we can get HoloNET and HoloOASIS integrated back into the OASIS API, we thought it would make more sense to hold off till we could demo the rest of the OASIS API working with Holochain as well as EOS, Ethereum, Solana, IPFS, MongoDB, SQLLite, Neo4j & ThreeFold. But we are open to suggestions, if people wanted to see the demos now and then we demo again once we have Holochain integrated, but we thought it would make sense to only have to demo once... ;-)
As a reminder the upcoming demo videos are:
Tech Deep dive
So as you can see, lot's of progress is being made, stay tuned for more exciting announcements coming very soon... ;-) Such as the OASIS API JS & Unity Libraries (yes, these have also been ready for a long time but we have also been holding off announcing these until Holochain integration was done.
You are free to check them out here in the meantime:
These are preview only, we will officially announce these and link to the respective unity and npm stores then...
We have also released OASIS API v2.2.3 internally a few weeks ago with an evolved and improved Data API & OASISEngine Architecture allowing every API call to be fully customized by exposing more of the powerful OASIS Engine allowing features such as auto-replication, auto-failover & auto-load balance settings to be fully customized such as setting which providers should be in each list, the exact behavior for each call, what info is returned, we will share more on this in a future announcement coming soon...
We intend to release this to LIVE today...
So as you can see, a LOT has been happening behind the scenes so we don't have time to report on all of it, but we will get there soon! ;-)
UPDATE: We decided to release it anyway since the 22nd July 2022 is a special number in numerology = 22072022, that's a very powerful number so feels like it was meant to be released today, it can be found here:
We will publish it to the NuGet store within the next few days then make an official announcement, this is a soft release and others can start using it now! :)
In Love, Light & Hope,
The Our World Tribe.
Open Source Code
NextGen Developer Training Programmes