Project Name | Stars | Downloads | Repos Using This | Packages Using This | Most Recent Commit | Total Releases | Latest Release | Open Issues | License | Language |
---|---|---|---|---|---|---|---|---|---|---|
Go Ethereum | 43,681 | 431 | 2,952 | a day ago | 664 | May 25, 2023 | 339 | lgpl-3.0 | Go | |
Official Go implementation of the Ethereum protocol | ||||||||||
Lightning | 2,629 | 1 | 7 | a day ago | 20 | August 01, 2023 | 550 | other | C | |
Core Lightning — Lightning Network implementation focusing on spec compliance and performance | ||||||||||
Lnbook | 2,599 | 4 months ago | 195 | cc-by-sa-4.0 | AsciiDoc | |||||
Mastering the Lightning Network (LN) | ||||||||||
C Toxcore | 2,020 | 21 days ago | 36 | April 18, 2022 | n,ull | gpl-3.0 | C | |||
The future of online communications. | ||||||||||
I2p.i2p | 1,759 | 3 | 7 | a day ago | 37 | July 03, 2023 | 14 | other | Java | |
I2P is an anonymizing network, offering a simple layer that identity-sensitive applications can use to securely communicate. All data is wrapped with several layers of encryption, and the network is both distributed and dynamic, with no trusted parties. | ||||||||||
Peergos | 1,718 | 2 days ago | 81 | agpl-3.0 | Java | |||||
A p2p, secure file storage, social network and application protocol | ||||||||||
Badvpn | 1,607 | 2 years ago | 35 | other | C | |||||
NCD scripting language, tun2socks proxifier, P2P VPN | ||||||||||
Noise | 1,552 | 5 | 4 | 3 years ago | 8 | March 30, 2020 | 19 | mit | Go | |
A decentralized P2P networking stack written in Go. | ||||||||||
Rats Search | 1,411 | 5 days ago | 62 | mit | JavaScript | |||||
BitTorrent P2P multi-platform search engine for Desktop and Web servers with integrated torrent client. | ||||||||||
Qtum | 1,186 | 22 days ago | 40 | mit | C++ | |||||
Qtum Core Wallet |
noise is an opinionated, easy-to-use P2P network stack for decentralized applications, and cryptographic protocols written in Go.
noise is made to be minimal, robust, developer-friendly, performant, secure, and cross-platform across multitudes of devices by making use of a small amount of well-tested, production-grade dependencies.
context
support.noise.WithNodeLogger(*zap.Logger)
.noise was intended to be used in Go projects that utilize Go modules. You may incorporate noise into your project as a library dependency by executing the following:
% go get -u github.com/perlin-network/noise
package main
import (
"context"
"fmt"
"github.com/perlin-network/noise"
)
func check(err error) {
if err != nil {
panic(err)
}
}
// This example demonstrates how to send/handle RPC requests across peers, how to listen for incoming
// peers, how to check if a message received is a request or not, how to reply to a RPC request, and
// how to cleanup node instances after you are done using them.
func main() {
// Let there be nodes Alice and Bob.
alice, err := noise.NewNode()
check(err)
bob, err := noise.NewNode()
check(err)
// Gracefully release resources for Alice and Bob at the end of the example.
defer alice.Close()
defer bob.Close()
// When Bob gets a message from Alice, print it out and respond to Alice with 'Hi Alice!'
bob.Handle(func(ctx noise.HandlerContext) error {
if !ctx.IsRequest() {
return nil
}
fmt.Printf("Got a message from Alice: '%s'\n", string(ctx.Data()))
return ctx.Send([]byte("Hi Alice!"))
})
// Have Alice and Bob start listening for new peers.
check(alice.Listen())
check(bob.Listen())
// Have Alice send Bob a request with the message 'Hi Bob!'
res, err := alice.Request(context.TODO(), bob.Addr(), []byte("Hi Bob!"))
check(err)
// Print out the response Bob got from Alice.
fmt.Printf("Got a message from Bob: '%s'\n", string(res))
// Output:
// Got a message from Alice: 'Hi Bob!'
// Got a message from Bob: 'Hi Alice!'
}
For documentation and more examples, refer to noise's godoc here.
Benchmarks measure CPU time and allocations of a single node sending messages, requests, and responses to/from itself over 8 logical cores on a loopback adapter.
Take these benchmark numbers with a grain of salt.
% cat /proc/cpuinfo | grep 'model name' | uniq
model name : Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz
% go test -bench=. -benchtime=30s -benchmem
goos: linux
goarch: amd64
pkg: github.com/perlin-network/noise
BenchmarkRPC-8 4074007 9967 ns/op 272 B/op 7 allocs/op
BenchmarkSend-8 31161464 1051 ns/op 13 B/op 2 allocs/op
PASS
ok github.com/perlin-network/noise 84.481s
noise is currently in its initial development phase and therefore does not promise that subsequent releases will not comprise of breaking changes. Be aware of this should you choose to utilize Noise for projects that are in production.
Releases are marked with a version number formatted as MAJOR.MINOR.PATCH. Major breaking changes involve a bump in MAJOR, minor backward-compatible changes involve a bump in MINOR, and patches and bug fixes involve a bump in PATCH starting from v2.0.0.
Therefore, noise mostly respects semantic versioning.
The rationale behind this is due to improper tagging of prior releases (v0.1.0, v1.0.0, v1.1.0, and v1.1.1), which has caused for the improper caching of module information on proxy.golang.org and sum.golang.org.
As a result, noise's initial development phase starts from v1.1.2. Until Noise's API is stable, subsequent releases will only comprise of bumps in MINOR and PATCH.
noise, and all of its source code is released under the MIT License.