* wip: conversion of hotstuff from flow into Q-oriented model * bulk of tests * remaining non-integration tests * add integration test, adjust log interface, small tweaks * further adjustments, restore full pacemaker shape * add component lifecycle management+supervisor * further refinements * resolve timeout hanging * mostly finalized state for consensus * bulk of engine swap out * lifecycle-ify most types * wiring nearly complete, missing needed hooks for proposals * plugged in, vetting message validation paths * global consensus, plugged in and verified * app shard now wired in too * do not decode empty keys.yml (#456) * remove obsolete engine.maxFrames config parameter (#454) * default to Info log level unless debug is enabled (#453) * respect config's "logging" section params, remove obsolete single-file logging (#452) * Trivial code cleanup aiming to reduce Go compiler warnings (#451) * simplify range traversal * simplify channel read for single select case * delete rand.Seed() deprecated in Go 1.20 and no-op as of Go 1.24 * simplify range traversal * simplify channel read for single select case * remove redundant type from array * simplify range traversal * simplify channel read for single select case * RC slate * finalize 2.1.0.5 * Update comments in StrictMonotonicCounter Fix comment formatting and clarify description. --------- Co-authored-by: Black Swan <3999712+blacks1ne@users.noreply.github.com> |
||
|---|---|---|
| .. | ||
| pb | ||
| timecache | ||
| .gitignore | ||
| backoff_test.go | ||
| backoff.go | ||
| bitmask_test.go | ||
| bitmask.go | ||
| blacklist_test.go | ||
| blacklist.go | ||
| blossomsub_connmgr_test.go | ||
| blossomsub_feat_test.go | ||
| blossomsub_feat.go | ||
| blossomsub_matchfn_test.go | ||
| blossomsub_spam_test.go | ||
| blossomsub_test.go | ||
| blossomsub.go | ||
| comm.go | ||
| discovery_test.go | ||
| discovery.go | ||
| go.mod | ||
| go.sum | ||
| gossip_tracer_test.go | ||
| gossip_tracer.go | ||
| LICENSE | ||
| LICENSE-APACHE | ||
| LICENSE-MIT | ||
| mcache_test.go | ||
| mcache.go | ||
| midgen.go | ||
| peer_gater_test.go | ||
| peer_gater.go | ||
| peer_notify.go | ||
| pubsub_test.go | ||
| pubsub.go | ||
| README.md | ||
| rpc_queue_test.go | ||
| rpc_queue.go | ||
| score_params_test.go | ||
| score_params.go | ||
| score_test.go | ||
| score.go | ||
| sign_test.go | ||
| sign.go | ||
| subscription_filter_test.go | ||
| subscription_filter.go | ||
| subscription.go | ||
| tag_tracer_test.go | ||
| tag_tracer.go | ||
| trace_test.go | ||
| trace.go | ||
| tracer.go | ||
| validation_builtin_test.go | ||
| validation_builtin.go | ||
| validation_test.go | ||
| validation.go | ||
go-libp2p-blossomsub
This repo contains the canonical blossomsub implementation for Quilibrium. It has historical origins in Gossipsub, but has diverged significantly. Floodsub and Randomsub are not included in this fork.
Table of Contents
Install
go get source.quilibrium.com/quilibrium/monorepo/go-libp2p-pubsub
Usage
To be used for messaging in high scale, high throughput p2p instrastructure such as Quilibrium.
Overview
.
├── LICENSE
├── README.md
# Regular Golang repo set up
├── codecov.yml
├── pb
├── go.mod
├── go.sum
├── doc.go
# PubSub base
├── backoff.go
├── bitmask.go
├── blacklist.go
├── comm.go
├── discovery.go
├── gossip_tracer.go
├── midgen.go
├── peer_gater.go
├── peer_notify.go
├── pubsub.go
├── sign.go
├── subscription.go
├── tag_tracer.go
├── trace.go
├── tracer.go
├── validation.go
# Blossomsub router
├── blossomsub_feat.go
├── blossomsub.go
├── mcache.go
├── score.go
└── score_params.go
Tracing
The pubsub system supports tracing, which collects all events pertaining to the internals of the system. This allows you to recreate the complete message flow and state of the system for analysis purposes.
To enable tracing, instantiate the pubsub system using the WithEventTracer option; the option accepts a tracer with three available implementations in-package (trace to json, pb, or a remote peer).
If you want to trace using a remote peer in the same way gossipsub tracing worked, you would need to do so by forking the traced daemon from go-libp2p-pubsub-tracer.
For instance, to capture the trace as a json file, you can use the following option:
tracer, err := pubsub.NewJSONTracer("/path/to/trace.json")
if err != nil {
panic(err)
}
pubsub.NewBlossomSub(..., pubsub.WithEventTracer(tracer))
To capture the trace as a protobuf, you can use the following option:
tracer, err := pubsub.NewPBTracer("/path/to/trace.pb")
if err != nil {
panic(err)
}
pubsub.NewBlossomSub(..., pubsub.WithEventTracer(tracer))
Finally, to use the remote tracer, you can use the following incantations:
// assuming that your tracer runs in x.x.x.x and has a peer ID of QmTracer
pi, err := peer.AddrInfoFromP2pAddr(ma.StringCast("/ip4/x.x.x.x/tcp/4001/p2p/QmTracer"))
if err != nil {
panic(err)
}
tracer, err := pubsub.NewRemoteTracer(ctx, host, pi)
if err != nil {
panic(err)
}
ps, err := pubsub.NewBlossomSub(..., pubsub.WithEventTracer(tracer))
Contribute
Contributions welcome. Please check out the issues.
Quilibrium does not have a code of conduct for contributions – contributions are accepted on merit and benefit to the protocol.
License
The go-libp2p-blossomsub project being forked from go-libp2p-pubsub inherits the dual-license under Apache 2.0 and MIT terms:
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)