/safe-client-gateway

Gateway service for Safe apps that serve transaction data conforming with the UI of our mobile apps

Primary LanguageRustMIT LicenseMIT

Safe Client Gateway

Actions Status Coverage Status

Motivation

This project is a gateway between the Safe clients (Android/ iOS/ web) and the Safe backend services (transaction service and Ethereum nodes). It is providing a more UI-oriented mapping and multi-sourced data structures for ease of integration and rendering.

Documentation

Quickstart

This project requires rustup and redis

rustup default nightly # (Rocket currently requires a nightly version)
git clone https://github.com/gnosis/safe-client-gateway.git
cd safe-client-gateway
cp .env.sample .env
redis-server
cargo run
./add_rustfmt_git_hook.sh  # It installs a git precommit hook that will autoformat the code on every commit

After doing any change code must be formatted using Rustfmt

Configuration

Rocket specific configurations (including databases) can be configured via the Rocket.toml for local development (see https://rocket.rs/v0.4/guide/configuration/#rockettoml).

For configurations specific to this service the .env file can be used. See next section.

Environment

Place a .env file in the root of the project containing URL pointing to the environment in which you want the gateway to run.

The contents of the file should be the following (see .env.sample for an example):

TRANSACTION_SERVICE_URL=<Transaction service host>

(NOTE: don't include any form of quotation marks)

Useful links:

Additional NOTE: the structs defined in this project match those in staging. Therefore, using this in any other environment could potentially panic if the endpoint in the transaction service API is not deployed to production yet, or the data layout looks differently.

Tests

To run all tests use the cargo test command. If you want to run a specific subset of tests, then add additionally any info regarding the path of the tests and cargo will match it.

Example: cargo test converters will run every tests under the converters module. Matching occurs also at a test name level, so by writing the full name of a test, that single test can be run.

Additionally, for cache testing, we have included a script that fills up the cache as it would happen in production. You can find the script in ./scripts/load_tester/start.py. To run the script, use the following commands:

python3 -m venv venv
source venv/bin/activate && pip install -r requirements.txt
python start.py
# once you are done testing
deactivate