{"id":13770021,"url":"https://github.com/blinklabs-io/gouroboros","last_synced_at":"2026-04-19T14:10:36.872Z","repository":{"id":38212089,"uuid":"435284777","full_name":"blinklabs-io/gouroboros","owner":"blinklabs-io","description":"Go implementation of the Cardano Ouroboros family of protocols","archived":false,"fork":false,"pushed_at":"2026-01-23T19:57:44.000Z","size":4924,"stargazers_count":77,"open_issues_count":24,"forks_count":26,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-01-24T04:50:21.128Z","etag":null,"topics":["blockchain","cardano","go","golang","golang-library","library","network","ouroboros","ouroboros-network","protocol"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/blinklabs-io.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2021-12-05T21:36:37.000Z","updated_at":"2026-01-23T19:57:47.000Z","dependencies_parsed_at":"2023-07-27T22:01:42.147Z","dependency_job_id":"c66c0c62-1a4b-4dcf-85b7-351cf858ac04","html_url":"https://github.com/blinklabs-io/gouroboros","commit_stats":{"total_commits":370,"total_committers":11,"mean_commits":33.63636363636363,"dds":0.6135135135135135,"last_synced_commit":"cb5ccad9e2d1eb82edbf7caca7b3c8669c18c309"},"previous_names":["cloudstruct/go-ouroboros-network","cloudstruct/go-ouroboros"],"tags_count":233,"template":false,"template_full_name":null,"purl":"pkg:github/blinklabs-io/gouroboros","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/blinklabs-io%2Fgouroboros","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/blinklabs-io%2Fgouroboros/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/blinklabs-io%2Fgouroboros/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/blinklabs-io%2Fgouroboros/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/blinklabs-io","download_url":"https://codeload.github.com/blinklabs-io/gouroboros/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/blinklabs-io%2Fgouroboros/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28755561,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-25T16:32:25.380Z","status":"ssl_error","status_checked_at":"2026-01-25T16:32:09.189Z","response_time":113,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["blockchain","cardano","go","golang","golang-library","library","network","ouroboros","ouroboros-network","protocol"],"created_at":"2024-08-03T17:00:33.586Z","updated_at":"2026-04-19T14:10:36.863Z","avatar_url":"https://github.com/blinklabs-io.png","language":"Go","funding_links":[],"categories":["Modules"],"sub_categories":["Networking Protocols"],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"./.github/assets/gOuroboros-logo-with-text-horizontal.png\" alt=\"gOurobros Logo\" width=\"640\"\u003e\n  \u003cbr\u003e\n  \u003cimg alt=\"GitHub\" src=\"https://img.shields.io/github/license/blinklabs-io/gouroboros\"\u003e\n  \u003ca href=\"https://goreportcard.com/report/github.com/blinklabs-io/gouroboros\"\u003e\u003cimg src=\"https://goreportcard.com/badge/github.com/blinklabs-io/gouroboros\" alt=\"Go Report Card\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://pkg.go.dev/github.com/blinklabs-io/gouroboros\"\u003e\u003cimg src=\"https://pkg.go.dev/badge/github.com/blinklabs-io/gouroboros.svg\" alt=\"Go Reference\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://deepwiki.com/blinklabs-io/gouroboros\"\u003e\u003cimg src=\"https://deepwiki.com/badge.svg\" alt=\"Ask DeepWiki\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://discord.gg/5fPRZnX4qW\"\u003e\u003cimg src=\"https://img.shields.io/badge/Discord-7289DA?style=flat\u0026logo=discord\u0026logoColor=white\" alt=\"Discord\"\u003e\u003c/a\u003e\n\u003c/div\u003e\n\n## Introduction\n\ngOuroboros is a powerful and versatile framework for building Go apps that interact with the Cardano blockchain. Quickly and easily\nwrite Go apps that communicate with Cardano nodes or manage blocks/transactions. Sync the blockchain from a local or remote node,\nquery a local node for protocol parameters or UTxOs by address, and much more.\n\n## Features\n\nThis is not an exhaustive list of existing and planned features, but it covers the bulk of it.\n\n- [ ] Ouroboros support\n  - [ ] Muxer\n    - [X] support for multiple mini-protocols over single connection\n    - [X] support for separate initiator and responder instance for each protocol\n    - [ ] support for buffer limits for each mini-protocol\n  - [ ] Protocols\n    - [X] Handshake\n      - [X] Client support\n      - [X] Server support\n    - [X] Keepalive\n      - [X] Client support\n      - [X] Server support\n    - [X] ChainSync\n      - [X] Client support\n      - [X] Server support\n    - [X] BlockFetch\n      - [X] Client support\n      - [X] Server support\n    - [X] TxSubmission\n      - [X] Client support\n      - [X] Server support\n    - [X] PeerSharing\n      - [X] Client support\n      - [X] Server support\n    - [X] LocalTxSubmission\n      - [X] Client support\n      - [X] Server support\n    - [X] LocalTxMonitor\n      - [X] Client support\n      - [X] Server support\n    - [ ] LocalStateQuery\n      - [X] Client support\n      - [X] Server support\n      - [ ] Queries\n        - [X] System start\n        - [X] Current era\n        - [X] Chain tip\n        - [X] Era history\n        - [X] Current protocol parameters\n        - [ ] Future protocol parameters\n        - [X] Stake distribution\n        - [ ] Non-myopic member rewards\n        - [ ] Proposed protocol parameter updates\n        - [X] UTxOs by address\n        - [ ] UTxO whole\n        - [X] UTxO by TxIn\n        - [ ] Debug epoch state\n        - [ ] Filtered delegations and reward accounts\n        - [X] Genesis config\n        - [ ] Reward provenance\n        - [X] Stake pools\n        - [X] Stake pool params\n        - [ ] Reward info pools\n        - [X] Pool state\n        - [X] Stake snapshots\n        - [X] Pool distribution\n        - [X] Constitution ([CIP-1694](https://cips.cardano.org/cip/CIP-1694))\n        - [X] Governance state ([CIP-1694](https://cips.cardano.org/cip/CIP-1694))\n        - [X] DRep state ([CIP-1694](https://cips.cardano.org/cip/CIP-1694))\n        - [X] DRep stake distribution ([CIP-1694](https://cips.cardano.org/cip/CIP-1694))\n        - [X] SPO stake distribution ([CIP-1694](https://cips.cardano.org/cip/CIP-1694))\n        - [X] Committee state ([CIP-1694](https://cips.cardano.org/cip/CIP-1694))\n        - [X] Filtered vote delegatees ([CIP-1694](https://cips.cardano.org/cip/CIP-1694))\n        - [ ] Treasury ([CIP-1694](https://cips.cardano.org/cip/CIP-1694))\n    - [X] LeiosFetch ([CIP-0164](https://cips.cardano.org/cip/CIP-0164))\n      - [X] Client support\n      - [X] Server support\n    - [X] LeiosNotify ([CIP-0164](https://cips.cardano.org/cip/CIP-0164))\n      - [X] Client support\n      - [X] Server support\n    - [X] LocalMessageSubmission ([CIP-0137](https://cips.cardano.org/cip/CIP-0137) DMQ)\n      - [X] Client support\n      - [X] Server support\n    - [X] MessageSubmission ([CIP-0137](https://cips.cardano.org/cip/CIP-0137) DMQ)\n      - [X] Client support\n      - [X] Server support\n    - [X] LocalMessageNotification ([CIP-0137](https://cips.cardano.org/cip/CIP-0137) DMQ)\n      - [X] Client support\n      - [X] Server support\n- [ ] Ledger\n  - [ ] Eras\n    - [X] Byron\n      - [X] Blocks\n      - [X] Transactions\n      - [X] TX inputs\n      - [X] TX outputs\n    - [X] Shelley\n      - [X] Blocks\n      - [X] Transactions\n      - [X] TX inputs\n      - [X] TX outputs\n      - [X] Parameter updates\n    - [X] Allegra\n      - [X] Blocks\n      - [X] Transactions\n      - [X] TX inputs\n      - [X] TX outputs\n      - [X] Parameter updates\n    - [X] Mary\n      - [X] Blocks\n      - [X] Transactions\n      - [X] TX inputs\n      - [X] TX outputs\n      - [X] Parameter updates\n    - [X] Alonzo\n      - [X] Blocks\n      - [X] Transactions\n      - [X] TX inputs\n      - [X] TX outputs\n      - [X] Parameter updates\n    - [X] Babbage\n      - [X] Blocks\n      - [X] Transactions\n      - [X] TX inputs\n      - [X] TX outputs\n      - [X] Parameter updates\n    - [X] Conway\n      - [X] Blocks\n      - [X] Transactions\n      - [X] TX inputs\n      - [X] TX outputs\n      - [X] Parameter updates\n  - [X] Transaction attributes\n    - [X] Inputs\n    - [X] Outputs\n    - [X] Metadata\n    - [X] Fees\n    - [X] TTL\n    - [X] Certificates\n    - [X] Staking reward withdrawls\n    - [X] Protocol parameter updates\n    - [X] Auxiliary data hash\n    - [X] Validity interval start\n    - [X] Mint operations\n    - [X] Script data hash\n    - [X] Collateral inputs\n    - [X] Required signers\n    - [X] Collateral return ([CIP-0040](https://cips.cardano.org/cip/CIP-0040))\n    - [X] Total collateral ([CIP-0040](https://cips.cardano.org/cip/CIP-0040))\n    - [X] Reference inputs ([CIP-0031](https://cips.cardano.org/cip/CIP-0031))\n    - [X] Voting procedures ([CIP-1694](https://cips.cardano.org/cip/CIP-1694))\n    - [X] Proposal procedures ([CIP-1694](https://cips.cardano.org/cip/CIP-1694))\n    - [X] Current treasury value ([CIP-1694](https://cips.cardano.org/cip/CIP-1694))\n    - [X] Donation ([CIP-1694](https://cips.cardano.org/cip/CIP-1694))\n- [X] Block Validation\n  - [X] Block body hash validation\n  - [X] VRF proof verification\n  - [X] KES signature verification\n  - [X] Transaction validation (UTxO rules)\n  - [X] Stake pool verification\n  - [X] Native script evaluation\n  - [X] Plutus script validation (via plutigo)\n  - [X] Structured error handling (ValidationError)\n  - [X] Byron era validation (OBFT consensus, proxy signatures, body proof)\n- [X] Cryptography\n  - [X] KES (Key-Evolving Signatures)\n    - [X] Signature verification\n    - [X] Key generation\n    - [X] Key evolution\n  - [X] VRF (Verifiable Random Function)\n    - [X] Proof generation\n    - [X] Proof verification\n    - [X] Leader election input construction\n- [ ] Consensus\n  - [X] Leader election\n  - [X] Block construction\n  - [X] Chain selection\n  - [X] Threshold calculation\n  - [X] Genesis configuration\n  - [X] Byron consensus (OBFT header validation)\n- [X] Testing\n  - [X] Test framework for mocking Ouroboros conversations\n  - [X] Conformance tests (2200+ passing)\n    - [X] Ledger rules (314 tests via Amaru vectors)\n    - [X] VRF cryptography (29 vectors + 15 unit tests)\n    - [X] KES cryptography (14 tests via input-output-hk/kes vectors)\n    - [X] Consensus (212 tests for leader election, threshold, selection)\n    - [X] Byron blocks (15 tests from mainnet/testnet/conformance)\n  - [X] Fuzz testing (75 targets with nightly CI)\n  - [X] CBOR deserialization and serialization\n    - [X] Protocol messages\n    - [X] Ledger\n      - [X] Block parsing\n      - [X] Transaction parsing\n- [ ] Misc\n  - [X] Address handling ([CIP-0019](https://cips.cardano.org/cip/CIP-0019))\n    - [X] Decode from bech32 ([CIP-0005](https://cips.cardano.org/cip/CIP-0005))\n    - [X] Encode as bech32 ([CIP-0005](https://cips.cardano.org/cip/CIP-0005))\n    - [X] Deserialize from CBOR\n    - [X] Retrieve staking key\n\n## Testing\n\ngOuroboros includes automated tests that cover various aspects of its functionality, but not all. For more than the basics,\nmanual testing is required.\n\n### Running the automated tests\n\n```\nmake test\n```\n\n### Running the linter\n\ngOuroboros uses [golangci-lint](https://golangci-lint.run/) for code quality checks. Install it following the\n[official installation guide](https://golangci-lint.run/docs/welcome/install/local/), then run:\n\n```\nmake lint\n```\n\n### Manual testing\n\nVarious small test programs can be found in the [gOuroboros Starter Kit](https://github.com/blinklabs-io/gouroboros-starter-kit) repo.\nSome of them can be run against public nodes via NtN protocols, but some may require access to the UNIX socket of a local node for NtC protocols.\n\n#### Run chain-sync from the start of a particular era\n\nThis is useful for testing changes to the handling of ledger types for a particular era. It will decode each block and either print\na summary line for the block or an error.\n\nYou can use the `chain-sync` program from `gouroboros-starter-kit` to start a ChainSync from a public node.\n\nRun the chain-sync test program against a public mainnet node, starting at the beginning of the Shelley era:\n\n```\nCARDANO_NODE_ADDRESS=backbone.cardano.iog.io:3001 CARDANO_NODE_NETWORK=mainnet ./chain-sync -bulk -start-era shelley\n```\n\nThis will produce a LOT of output and take quite a few hours to reach chain tip. You're mostly looking for it to get through\nall blocks of the chosen start era before hitting the next era or chain tip\n\n#### Dump details of a particular block\n\nYou can use the `block-fetch` program from `gouroboros-starter-kit` to fetch a particular block and dump its details. You must provide at least\nthe block slot and hash. This is useful for debugging decoding problems, since it allows fetching a specific block and decoding it over and over.\n\n```\nBLOCK_FETCH_SLOT=120521627 BLOCK_FETCH_HASH=afd4c97e32003d9803a305011cbd8796e6b36bf61576567206887e35795b6e09 ./block-fetch\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fblinklabs-io%2Fgouroboros","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fblinklabs-io%2Fgouroboros","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fblinklabs-io%2Fgouroboros/lists"}