mirror of
https://github.com/logos-storage/logos-storage-nim.git
synced 2026-03-04 19:33:07 +00:00
96 lines
3.8 KiB
Markdown
96 lines
3.8 KiB
Markdown
# Logos Storage Filesharing Client
|
|
|
|
> The Logos Storage project aims to create a filesharing client that allows sharing data privately in p2p networks.
|
|
|
|
> WARNING: This project is under active development and is considered pre-alpha.
|
|
|
|
[](https://opensource.org/licenses/Apache-2.0)
|
|
[](https://opensource.org/licenses/MIT)
|
|
[](#stability)
|
|
[](https://github.com/logos-storage/logos-storage-nim/actions/workflows/ci.yml?query=branch%3Amaster)
|
|
[](https://github.com/logos-storage/logos-storage-nim/actions/workflows/docker.yml?query=branch%3Amaster)
|
|
[](https://codecov.io/gh/logos-storage/logos-storage-nim)
|
|
[](https://discord.gg/CaJTh24ddQ)
|
|

|
|
|
|
|
|
## Build and Run
|
|
|
|
To build the project, clone it and run:
|
|
|
|
```bash
|
|
make update && make
|
|
# Tip: use -j{ncpu} to for parallel execution, eg:
|
|
# make -j12 update && make -j12
|
|
```
|
|
|
|
The executable will be placed under the `build` directory under the project root.
|
|
|
|
Run the client with:
|
|
|
|
```bash
|
|
build/storage
|
|
```
|
|
|
|
## Configuration
|
|
|
|
It is possible to configure a Logos Storage node in several ways:
|
|
1. CLI options
|
|
2. Environment variables
|
|
3. Configuration file
|
|
|
|
The order of priority is the same as above: CLI options --> Environment variables --> Configuration file.
|
|
|
|
Please check `build/storage --help` for more information.
|
|
|
|
## API
|
|
|
|
The client exposes a REST API that can be used to interact with the clients. Overview of the API can be found on [api.codex.storage](https://api.codex.storage).
|
|
|
|
## Bindings
|
|
|
|
Logos Storage provides a C API that can be wrapped by other languages. The C API bindings are located in the `library` folder.
|
|
|
|
Currently, only Go bindings are provided in this repo. However, Rust bindings for Logos Storage can be found at https://github.com/nipsysdev/storage-rust-bindings.
|
|
|
|
### Build the C library
|
|
|
|
```bash
|
|
make libstorage
|
|
```
|
|
|
|
This produces the shared library under `build/`.
|
|
|
|
### Run the Go example
|
|
|
|
See https://github.com/logos-storage/logos-storage-go-bindings-example.
|
|
|
|
### Static vs Dynamic build
|
|
|
|
By default, Logos Storage builds a dynamic library (`libstorage.so`/`libstorage.dylib`/`libstroage.dll`), which you can load at runtime.
|
|
|
|
If you prefer a static library (`libstorage.a`), set the `STATIC` flag:
|
|
|
|
```bash
|
|
# Build dynamic (default)
|
|
make libstorage
|
|
|
|
# Build static
|
|
make STATIC=1 libstorage
|
|
```
|
|
|
|
### Limitation
|
|
|
|
Callbacks must be fast and non-blocking; otherwise, the working thread will hang and prevent other requests from being processed.
|
|
|
|
## Contributing and development
|
|
|
|
Feel free to dive in, contributions are welcomed! Open an issue or submit PRs.
|
|
|
|
### Linting and formatting
|
|
|
|
`logos-storage-nim` uses [nph](https://github.com/arnetheduck/nph) for formatting our code and it is required to adhere to its styling.
|
|
If you are setting up fresh setup, in order to get `nph` run `make build-nph`.
|
|
In order to format files run `make nph/<file/folder you want to format>`.
|
|
If you want you can install Git pre-commit hook using `make install-nph-commit`, which will format modified files prior committing them.
|
|
If you are using VSCode and the [NimLang](https://marketplace.visualstudio.com/items?itemName=NimLang.nimlang) extension you can enable "Format On Save" (eq. the `nim.formatOnSave` property) that will format the files using `nph`. |