Components:
- Sentry
- Validator worker
- Adapter - Ethereum & Dummy (for testing) Adapters
- AdView manager
Requirements:
- Rust
- We target the
stableversion of the Rust compiler. cargo-make
- We target the
- Docker & Docker-compose
build-essentialsis required to build the project (error:linker ``cc`` not found)- The crate
openssl-sysrequireslibssl-devandpkg-configfor Ubuntu.
Sentry is the REST API that the Validator worker
uses for storing and retrieving information.
Two services are needed to run Sentry: Postgres and Redis.
The easiest way to run these services locally is by using the provided docker-compose file:
docker-compose -f docker-compose.yml up -d adex-redis adex-postgres
If you want to run them manually without docker-compose:
docker run --rm --name adex-validator-postgres -e POSTGRES_PASSWORD=postgres -d -p 5432:5432 -v $HOME/docker/volumes/postgres:/var/lib/postgresql/data postgres
$HOME/docker/volumes/postgres- your local storage for postgres (persist the data when we remove the container)POSTGRES_PASSWORD=postgres- the password of the defaultpostgresuser
NOTE: Additionally you must setup 2 databases - sentry_leader & sentry_follower in order for the provided examples below to work. Postgres comes with an environment variable POSTGRES_DB that you can use to change the default postgres database, but there is currently no way to create multiple using the official postgres image.
docker run --rm -p 6379:6379 --name adex-validator-redis -d redis
For a full list of all available CLI options on Sentry run --help:
cargo run -p sentry -- --helpStarting the Sentry API in will always run migrations, this will make sure the database is always up to date with the latest migrations, before starting and exposing the web server.
By default, we use the development environment ( ENV environment variable ) as it will also seed the database (seeding is disabled, see #514).
To enable TLS for the sentry server you need to pass both --privateKeys and
--certificates cli options (paths to .pem files) otherwise the cli will
exit with an error.
For full list of available addresses see primitives/src/test_util.rs#L39-L118
The password for the keystore file can be set using the KEYSTORE_PWD environment variable.
These examples use the Leader and Follower addresses for testing locally with
ganache and the production configuration of the validator.
Sentry API will be accessible at localhost:8005
IP_ADDR=127.0.0.1 SEED_DB=true REDIS_URL="redis://127.0.0.1:6379/1" \
POSTGRES_DB="sentry_leader" PORT=8005 KEYSTORE_PWD=ganache0 \
cargo run -p sentry -- \
--adapter ethereum \
--keystoreFile ./adapter/tests/resources/0x80690751969B234697e9059e04ed72195c3507fa_keystore.json \
./docs/config/ganache.tomlSentry API will be accessible at localhost:8006
IP_ADDR=127.0.0.1 SEED_DB=true REDIS_URL="redis://127.0.0.1:6379/2" \
POSTGRES_DB="sentry_follower" PORT=8006 KEYSTORE_PWD=ganache1 cargo run -p sentry -- \
--adapter ethereum \
--keystoreFile ./adapter/tests/resources/0xf3f583AEC5f7C030722Fe992A5688557e1B86ef7_keystore.json \
./docs/config/ganache.tomlUsing the dummy adapter you get access to additional route for adding deposits to the dummy adapter. The authenticated address is used to set the deposit in the adapter for the given Chain id.
Request body (JSON):
{
"channel": { "leader": "0x000..", ...},
"deposit": { "total": "10000000" }
}Dummy identities:
IP_ADDR=127.0.0.1 SEED_DB=true REDIS_URL="redis://127.0.0.1:6379/1" \
POSTGRES_DB="sentry_leader" PORT=8005 cargo run -p sentry -- \
--adapter dummy \
--dummyIdentity 0x80690751969B234697e9059e04ed72195c3507fa \
./docs/config/ganache.tomlIP_ADDR=127.0.0.1 SEED_DB=true REDIS_URL="redis://127.0.0.1:6379/2" \
POSTGRES_DB="sentry_follower" PORT=8006 cargo run -p sentry -- \
--adapter dummy \
--dummyIdentity 0xf3f583AEC5f7C030722Fe992A5688557e1B86ef7 \
./docs/config/ganache.tomlENV-productionordevelopment; default:development- passing this env. variable will use the default configuration paths -docs/config/ganache.toml(fordevelopment) ordocs/config/prod.toml(forproduction). Otherwise you can pass your own configuration file path to the binary (checkcargo run -p sentry --helpfor more information).In(seeding is disabled, see #514).developmentit will make sure Sentry to seed the databasePORT- default:8005- The local port that Sentry API will be accessible atIP_ADDR- default:0.0.0.0- the IP address that the API should be listening toSEED_DB- default:false- Flag telling us whether we should seed the database, it can only be turned on fordevelopment
KEYSTORE_PWD- Password for theKeystore file, only available when usingEthereumadapter (--adapter ethereum)
REDIS_URL- default:redis://127.0.0.1:6379
POSTGRES_HOST- default:localhostPOSTGRES_USER- default:postgresPOSTGRES_PASSWORD- default:postgresPOSTGRES_DB- default:username - Database name in Postgres to be used for this instancePOSTGRES_PORT- default:5432
For a full list of all available CLI options on the Validator worker run --help:
cargo run -p validator_worker -- --helpThe password for the Keystore file can be set using the environment variable KEYSTORE_PWD.
Assuming you have Sentry API running for the Leader on port 8005:
KEYSTORE_PWD=ganache0 cargo run -p validator_worker -- \
--adapter ethereum \
--keystoreFile ./adapter/tests/resources/0x80690751969B234697e9059e04ed72195c3507fa_keystore.json \
--sentryUrl http://127.0.0.1:8005 \
./docs/config/ganache.tomlAssuming you have Sentry API running for the Follower on port 8006:
KEYSTORE_PWD=ganache1 cargo run -p validator_worker -- \
--adapter ethereum \
--keystoreFile ./adapter/tests/resources/0xf3f583AEC5f7C030722Fe992A5688557e1B86ef7_keystore.json \
--sentryUrl http://127.0.0.1:8006 \
./docs/config/ganache.tomlAssuming you have Sentry API running for the Leader on port 8005:
cargo run -p validator_worker -- \
--adapter dummy \
--dummyIdentity 0x80690751969B234697e9059e04ed72195c3507fa \
--sentryUrl http://127.0.0.1:8005 \
./docs/config/ganache.tomlAssuming you have Sentry API running for the Follower on port 8006:
cargo run -p validator_worker -- \
--adapter dummy \
--dummyIdentity 0xf3f583AEC5f7C030722Fe992A5688557e1B86ef7 \
--sentryUrl http://127.0.0.1:8006 \
./docs/config/ganache.tomlENV-productionordevelopment; default:development- passing this env. variable will use the default configuration paths -docs/config/ganache.toml(fordevelopment) ordocs/config/prod.toml(forproduction). Otherwise you can pass your own configuration file path to the binary (checkcargo run -p sentry --helpfor more information).
KEYSTORE_PWD- Password for theKeystore file, only available when usingEthereum Adapter(--adapter ethereum)
We use cargo-make for running automated checks
(tests, builds, formatting, code linting, etc.) and building the project locally
as well as on our Continuous Integration (CI).
For a complete list of out-of-the-box commands you can check out the Predefined Makefiles
while locally defined commands can be found in the Makefiles.toml in each crate directory.
It's enough to ensure that the default development command is executing successfully:
cargo makeIt will format your code using rustfmt and will perform clippy checks (it will fail on warnings).
Thanks to cargo it will run all the tests (doc tests, unit tests, integration tests, etc.).
Using the provided docker-compose.yml setup cargo-make will run
all the required services for the specific crate/application before executing the tests.
This project is licensed under the AGPL-3.0 license
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in AdEx Validator by you, shall be licensed as AGPL-3.0, without any additional terms or conditions.
When you contribute to a AdEx Validator open source project on GitHub with a new pull request, a bot will evaluate whether you have signed the CLA. If required, the bot will comment on the pull request, including a link to this system to accept the agreement.