An open API service indexing awesome lists of open source software.

https://github.com/libp2p/cpp-libp2p

C++17 implementation of libp2p
https://github.com/libp2p/cpp-libp2p

cpp17 libp2p

Last synced: 5 months ago
JSON representation

C++17 implementation of libp2p

Awesome Lists containing this project

README

          

# CPP-Libp2p

> Fully compatible C++20 implementation of libp2p library

Libp2p is a modular networking stack described in [spec](https://github.com/libp2p/specs)

## Dependencies

All dependencies are managed using [Hunter](https://github.com/qdrvm/hunter). It uses cmake to download required libraries and does not require downloading and installing packages manually.
Target C++ compilers are:
* GCC 7.4
* Clang 6.0.1
* AppleClang 11.0

## Supported protocols
* Transports: TCP
* Security protocols: [Plaintext 2.0](https://github.com/libp2p/specs/blob/master/plaintext/README.md), [SECIO](https://github.com/libp2p/specs/blob/master/secio/README.md)
* Multiplexing protocols: [MPlex](https://github.com/libp2p/specs/tree/master/mplex), [Yamux](https://github.com/hashicorp/yamux/blob/master/spec.md)
* [Kademlia DHT](https://github.com/libp2p/specs/pull/108)
* [Gossipsub](https://github.com/libp2p/specs/tree/master/pubsub/gossipsub) (WIP)
* [Identify](https://github.com/libp2p/specs/tree/master/identify)

## Development
### Clone

To clone repository execute
```
git clone https://github.com/libp2p/cpp-libp2p.git
```

### Build cpp-libp2p

First build will likely take long time. However, you can cache binaries to [hunter-binary-cache](https://github.com/qdrvm/hunter-binary-cache) or even download binaries from the cache in case someone has already compiled project with the same compiler. To do so you need to set up two environment variables:
```
GITHUB_HUNTER_USERNAME=
GITHUB_HUNTER_TOKEN=
```
To generate github token follow the [instructions](https://help.github.com/en/github/authenticating-to-github/creating-a-personal-access-token-for-the-command-line). Make sure `read:packages` and `write:packages` permissions are granted (step 7 in instructions).

This project can be built with

```
mkdir build && cd build
cmake -DCLANG_TIDY=ON ..
make -j
```

It is suggested to build project with clang-tidy checks, however if you wish to omit clang-tidy step, you can use `cmake ..` instead.

Tests can be run with:
```
cd build
ctest
```

### CodeStyle

We follow [CppCoreGuidelines](https://github.com/isocpp/CppCoreGuidelines).

Please use provided [.clang-format](.clang-format) file to autoformat the code.

## Examples

Please explore [example](example) section to read examples of how to use the library

## Adding cpp-libp2p to the project

cpp-libp2p can be integrated using hunter. Adding hunter support to your project is really simple and require you only to add some cmake. Check [hunter example project](https://github.com/forexample/hunter-simple/) for details.

After hunter is integrated adding cpp-libp2p can be done by adding these lines to cmake:
```cmake
hunter_add_package(libp2p)
find_package(libp2p REQUIRED)
```
To set which version of cpp-libp2p to use it is required to add these lines to Hunter/config.cmake file:
```cmake
hunter_config(libp2p
URL https://github.com/libp2p/cpp-libp2p/archive/dad84a03a9651c7c2bb8a8f17d0e5ea67bd10b4f.zip
SHA1 860742c6e3e9736d68b392513d795e09572780aa
)
```
Where URL is the link to archive of certain commit in cpp-libp2p repo and SHA1 is the checksum of this archive.
By simply updating URL and SHA1 it is possible to change the version of cpp-libp2p in another project.

Example of adding cpp-libp2p to other project can be found [here](https://github.com/qdrvm/kagome/blob/3edda60f27d378a21fc57cd8bec7f0f519203318/cmake/dependencies.cmake#L59) and [here](https://github.com/qdrvm/kagome/blob/3edda60f27d378a21fc57cd8bec7f0f519203318/cmake/Hunter/config.cmake#L24)

## Notable users

* https://github.com/qdrvm/kagome
* https://github.com/filecoin-project/cpp-filecoin

## Maintenance

Maintainers: [@Warchant], [@kamilsa], [@harrm], [@masterjedy], [@igor-egorov], [@art-gor]

[@Warchant]: https://github.com/Warchant
[@kamilsa]: https://github.com/kamilsa
[@harrm]: https://github.com/harrm
[@masterjedy]: https://github.com/masterjedy
[@igor-egorov]: https://github.com/igor-egorov
[@art-gor]: https://github.com/art-gor

Tickets: Can be opened in Github Issues.