Last updated a week ago
The Go language capabilities on Cardano do not fully support the Ouroboros communication protocol used by Cardano nodes.
This is the total amount allocated to gOuroboros: Cardano Ouroboros protocol server support in Golang. 4 out of 5 milestones are completed.
1/5
Milestone 1 will cover the client side of the various NtN (node-to-node) and NtC (node-to-client) mini-protocols.
Cost: ₳ 37,000
Delivery: Month 1 - Apr 2024
2/5
Milestone 2 will cover completing support for the various eras.
Cost: ₳ 37,000
Delivery: Month 2 - May 2024
3/5
Milestone 3 will cover completing support for all transaction attributes.
Cost: ₳ 37,000
Delivery: Month 3 - Jun 2024
4/5
Our 4th milestone will cover the server side of the various NtC (node-to-client) and NtN (node-to-node) protocols.
Cost: ₳ 37,000
Delivery: Month 4 - Jul 2024
5/5
Our final milestone will wrap up the project, including the Project closeout report and video.
Cost: ₳ 37,000
Delivery: Month 5 - Aug 2024
NB: Monthly reporting was deprecated from January 2024 and replaced fully by the Milestones Program framework. Learn more here
We will continue developing the gOuroboros open source Golang library for speaking the Ouroboros protocol with a Cardano node and reading the ledger data structures, including server side messages
Completion of Conway era support and Peer sharing protocol support will require that support to be solidified either in an IOG implementation or spec document.
The project is and will continue to be open sourced under the Apache 2.0 license
The gOuroboros library provides the building blocks for communicating with a Cardano Node as a client in Golang. Our previously funded proposal from Catalyst Fund 9 led to the development of the client side of the protocol.
This proposal intends to complete the loop and support the NtC and NtN server side. Server side support for the Ouroboros protocol will allow the library to be used to build active participants in the network. The capability to decode the messages into usable transaction types opens up the ability to build software which can perform actions based on certain events being observed on the network, such as blockchain indexers or trading bots.
Golang is an extremely popular programming language. GitHub Language Statistics from GitHut 2.0 (code: https://github.com/madnight/githut ) show that in Q3 2023, the number of pull requests on Golang repositories grew 10.817% and Haskell repositories grew only 0.162% (source: https://madnight.github.io/githut/#/pull_requests/2023/3/Go,Haskell ) while the number of repository stars on Golang repositories grew 12.215% and Haskell repositories grew only 0.203% (source: https://madnight.github.io/githut/#/stars/2023/3/Go,Haskell ). The Golang developer community is over 4x the size of the Haskell developer community, based on the number of Github repos with code for each. Since it’s hard to judge community size, we’re using these numbers as a proxy. We hope to bridge the gap between Golang developers and the Cardano blockchain and attract more developers to Cardano.
Creating a Golang library for interacting with Cardano nodes and reading the ledger will allow tapping into a much larger pool of developers than the existing Haskell libraries generally allow. This will also lower the barrier for entry into the Cardano ecosystem.
The gOuroboros library provides low level primitives for Golang to communicate the Cardano on-the-wire language. This is the basic building block for creating both client and server applications in Go.
Blink Labs has decades of experience delivering open source software. We have a proven track record of delivery and have successfully completed two previous Catalyst Fund 9 proposals. Our work is open source and public for all to view. Our team is highly cohesive and have worked together for years, allowing us to provide accurate time and cost estimates to our work. The gOuroboros project has been in constant development for 18 months, both with and without funding. Funding allows us to dedicate engineering time to an open source project, rapidly accelerating its development.
Our goal is for gOuroboros to be the building block upon which a Golang ecosystem on Cardano can thrive. To accomplish this goal, we will build the gOuroboros library functionality to support a diverse capability set, allowing for creation of an entire ecosystem of downstream projects.
Completion of the server side capabilities of gOuroboros will enable this. We have broken this into 4 deliverable milestones to reach this goal.
Client completion and automated testing
Era support
Transaction attributes
Server support
Blink Labs has created GitHub issues for the individual items of work and will track those items using a project Kanban board on GitHub.
Milestone 1 will cover the client side of the various NtN (node-to-node) and NtC (node-to-client) mini-protocols. This will include:
PeerSharing protocol client support
Additional tests for the Handshake protocol client
Additional tests for the KeepAlive protocol client
Additional tests for the ChainSync protocol client
Additional tests for the BlockFetch protocol client
Additional tests for the LocalTxSubmission protocol client
Additional tests for the LocalStateQuery protocol client
Additional tests for the LocalTxMonitor protocol client
Support for additional LocalStateQuery protocol queries and responses
Milestone 2 will cover completing support for the various eras. This will include:
Byron era transaction input and output support
Conway era block and transaction support
Shelley protocol params support
Allegra protocol params support
Mary protocol params support
Alonzo protocol params support
Babbage protocol params support
Milestone 3 will cover completing support for all transaction attributes. This includes:
Certificates
Staking reward withdrawals
Protocol parameter updates
Auxiliary data hash
Validity interval start
Mint operations
Script data hash
Collateral inputs
Required signers
Collateral return
Total collateral
Reference inputs
Voting procedures (new in Conway)
Proposal procedures (new in Conway)
Our 4th and final milestone will cover the server side of the various NtC (node-to-client) and NtN (node-to-node) protocols. This will include:
KeepAlive server side support
ChainSync server side support
BlockFetch server side support
PeerSharing server side support
LocalStateQuery server side support
The project development will be completed by the Blink Labs engineering team. Our team includes Principal / Staff Engineers, with more than 40 years combined experience. This project will be primarily assigned to Aurora Gaffney (https://github.com/agaffney ) for development completion, with Chris Gianelloni (https://github.com/wolf31o2 ) providing code review, documentation, and support.
Blink Labs has previously completed two Catalyst Fund 9 proposals:
Ouroboros network (NtC) in Golang (predecessor to this proposal)
Cardano Submit API in Golang
Additional Blink Labs staff may be used for administrative functions, such as project management and community reporting.
Funding will primarily pay for engineering time. There is also a small piece set aside for paying administrative staff for project management.
The project budget is 46250 ADA per month to pay for Engineering (40000) and Project Management (6250). Each milestone corresponds to a month, and time is allocated to take approximately 75 percent of a full time software engineer or 120 hours and approximately 10 hours of project management.
No additional funding is necessary for third party products or services.
Costs are estimated on a 333.33 ADA per hour rate for a senior golang blockchain software engineer working remotely within the United States (~ $192k USD annually) and 150 ADA per hour rate for a project manager working remotely (~ $86k USD annually)