Skip to main content

Pantos Service Node (reference implementation)

Project description

Pantos logo

CI Quality Gate Status

Pantos Service Node (reference implementation)

1. Introduction

1.1 Overview

Welcome to the documentation for Pantos Service Node.

The Pantos Service Node is responsible for initiating cross-chain transfers on behalf of the users. To initiate a cross-chain token transfer, a client has to send a signed request to a service node. To find an appropriate service node, the client can query the PantosHub contract of the source blockchain. To enable this, each service node registers itself at the PantosHub contract of each source blockchain supported by the service node.

1.2 Features

The Pantos Service Node is split into two applications:

Web server application

The web server application is responsible for the following:

  1. Serving signed (by the service node) bids.
  2. Accepting signed (by the user) transfer requests.

Celery application

The celery application is responsible for the following:

  1. Updating the bids later served to the user through the web application.
  2. Submitting the signed transfer requests to the source blockchain.

2. Installation

IMPORTANT

We provide two ways to modify the app configuration, either through service-node-config.env or service-node-config.yml. We recommend using the .env file, as the .conf file is overwritten on every install.

While using the .env file you need to be aware that any fields containing certain special characters need to be wrapped around single quotes (e.g. ETHEREUM_PRIVATE_KEY_PASSWORD='12$$#%R^').

The application will complain on startup should the configuration be incorrect.

2.1 Pre-built packages

There are two ways to install the apps using pre-built packages:

Debian package distribution

We provide Debian packages alongside every release, you can find them in the releases tab. Further information on how to use the service node packages can be found here.

We have a PPA hosted on GitHub, which can be accessed as follows:

curl -s --compressed "https://pantos-io.github.io/servicenode/KEY.gpg" | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/servicenode.gpg >/dev/null
sudo curl -s --compressed -o /etc/apt/sources.list.d/pantos-servicenode.list "https://pantos-io.github.io/servicenode/pantos-servicenode.list"
sudo apt update
sudo apt install pantos-service-node

Docker images

We also distribute docker images in DockerHub with each release. These are made available under the pantosio project as either app or worker.

Local Setup

You can run a local setup with docker by doing the following steps:

  • Run make docker on the ethereum-contracts project
  • The variables DB_URL, CELERY_BACKEND and CELERY_BROKER are already defined in the docker-compose.yml
  • Modify the docker.env file to match your current setup
  • Ensure you have a signer_key file located in the same directory. If you don't, you can create one with make signer-key
  • Run make docker
Production Setup

The production setup is slightly different, for convenience we provide a separate .env file and make method.

  • The variables DB_URL, CELERY_BACKEND and CELERY_BROKER are already defined in the docker-compose.yml
  • Modify the .env file (not docker.env) to match your current setup
  • Ensure you have a signer_key file located in the same directory. If you don't, you can create one with make signer-key
  • Run make docker-prod

Please note that you may need to add a load balancer or another webserver in front of this setup should you want to host this setup under a specific domain.

If you're hosting this on a cloud provider (AWS, GCP, Azure or alike), these are normally provided. You just need to point the load balancer to the port exposed by the app, 8080, and configure the rest accordingly.

Python package

We distribute the package in test-pypi and pypi under the following projects: https://test.pypi.org/project/pantos-service-node/ and https://pypi.org/project/pantos-service-node/. You can install it to your project by using pip install pantos-service-node.

2.2 Prerequisites

Please make sure that your environment meets the following requirements:

Conda

Conda is only required to build the package, but you can also use it as your python version management tool. To install conda, follow the instructions here.

After activating it, you can directly call poetry install on your new environment:

conda env create -f environment.yml
conda activate default

Python Version

The Pantos Service Node supports Python 3.10 or higher. Ensure that you have the correct Python version installed before the installation steps. You can download the latest version of Python from the official Python website.

Library Versions

The Pantos Service Node has been tested with the library versions specified in poetry.lock.

Poetry

Poetry is our tool of choice for dependency management and packaging.

Installing: https://python-poetry.org/docs/#installing-with-the-official-installer or https://python-poetry.org/docs/#installing-with-pipx

By default poetry creates the venv directory under under {cache-dir}/virtualenvs. If you opt for creating the virtualenv inside the project’s root directory, execute the following command:

poetry config virtualenvs.in-project true

2.2 Installation Steps

Libraries

Create the virtual environment and install the dependencies:

$ poetry install --no-root

Pre-commit

In order to run pre-commit before a commit is done, you have to install it:

pre-commit install --hook-type commit-msg -f && pre-commit install

Whenever you try to make a commit, the pre-commit steps are executed.

3. Usage

3.1 Format, lint and test

Run the following command from the repository's root directory:

make code

3.2 Local development environment

PostgreSQL

Launch the PostgreSQL interactive terminal:

sudo -u postgres psql

Create a Service Node user and three databases:

CREATE ROLE "pantos-service-node" WITH LOGIN PASSWORD '<PASSWORD>';
CREATE DATABASE "pantos-service-node" WITH OWNER "pantos-service-node";
CREATE DATABASE "pantos-service-node-celery" WITH OWNER "pantos-service-node";
CREATE DATABASE "pantos-service-node-test" WITH OWNER "pantos-service-node";

RabbitMQ

Create a Service Node user and virtual host:

sudo rabbitmqctl add_user pantos-service-node <PASSWORD>
sudo rabbitmqctl add_vhost pantos-service-node
sudo rabbitmqctl set_permissions -p pantos-service-node pantos-service-node ".*" ".*" ".*"

4. Contributing

For contributions take a look at our code of conduct.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

pantos_service_node-1.8.1-py3-none-any.whl (74.7 kB view details)

Uploaded Python 3

File details

Details for the file pantos_service_node-1.8.1-py3-none-any.whl.

File metadata

File hashes

Hashes for pantos_service_node-1.8.1-py3-none-any.whl
Algorithm Hash digest
SHA256 6b8e9d8762664e3094eaf998bad3ae8e1c983ff1432e023ae036860949e8cc3c
MD5 397dbc7a870d7d9c71b83797c3b45cd7
BLAKE2b-256 00ce8ecc767425a71b2270635e10d799414a4f0fc2224661f2a13b05176af2f8

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page