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.
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
cargo fmt --all
Auto formatting can also be configured in the most common code editors
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.
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:
- Staging(rinkeby): https://safe-transaction.staging.gnosisdev.com/
- Production(rinkeby): https://safe-transaction.rinkeby.gnosis.io/
- Production(mainnet): https://safe-transaction.gnosis.io/
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.
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 scripts/cache_warmer/requirements.txt
python scripts/cache_warmer/start.py
# once you are done testing
deactivate