This service allows us to have owners of the Safe contract that don’t need to hold any ETH on those owner addresses. How is this possible? The Transaction Relay Service acts as a proxy, paying for the transaction fees and getting it back due to the transaction architecture we use. It also enables the user to pay for ethereum transactions using ERC20 tokens.
Docs are available on Gnosis Docs
You can open the diagrams explaining Pre CREATE2 deployment under docs/ with Staruml
This is the recommended configuration for developing and testing the Relay service. docker-compose is required for
running the project.
Configure the parameters needed on .env_ganache. By default the private keys of the accounts are the ones from
Ganache, and the contract addresses are calculated to be the ones deployed by the Relay when the application starts,
so there's no need to configure anything.
More parameters can be added to that file like:
- SAFE_FIXED_CREATION_COST: For fixed price in wei for deploying a Safe. If you set- 0you allow Safes to be deployed for free.
- SAFE_CONTRACT_ADDRESSto change the Safe's master copy address.
- For more parameters check base.pyfile.
Then:
docker-compose -f docker-compose.yml -f docker-compose.dev.yml build --force-rm
docker-compose -f docker-compose.yml -f docker-compose.dev.yml upThe service should be running in localhost:8000
This is the recommended configuration for running a production Relay. docker-compose is required
for running the project.
Configure the parameters needed on .env. These parameters need to be changed:
- ETHEREUM_NODE_URL: Http/s address of a ethereum node.
- SAFE_FUNDER_PRIVATE_KEY: Use a private key for an account with ether on that network. It's used to deploy new Safes.
- SAFE_TX_SENDER_PRIVATE_KEY: Same as the- SAFE_FUNDER_PRIVATE_KEY, but it's used to relay all transactions.
Another parameters can be configured like:
- SAFE_CONTRACT_ADDRESS: If you are not using default Gnosis Safe Master Copy.
- SAFE_FIXED_CREATION_COST: For fixed price in wei for deploying a Safe. If you set- 0you allow Safes to be deployed for free.
- For more parameters check base.pyfile.
Then:
docker-compose build --force-rm
docker-compose upThe service should be running in localhost:8000
For example, to set up a Göerli node:
- Set ETHEREUM_NODE_URLtohttps://goerli.infura.io/v3/YOUR-PROJECT-ID(if using INFURA)
- Set SAFE_FUNDER_PRIVATE_KEYandSAFE_TX_SENDER_PRIVATE_KEYto accounts that have Göerli ether. Don't use the same account for both
Run:
docker-compose build --force-rm
docker-compose upYou can test everything is set up:
curl 'http://localhost:8000/api/v1/about/'Services come with a basic administration web ui (provided by Django). A user must be created first to get access:
docker exec -it safe-relay-service_worker_1 bash
python manage.py createsuperuserThen go to the web browser and navigate to http://localhost:8000/admin/
Custom tokens can be added as a payment option for the Relay Service from the admin interface:
- Navigate to Tokensand clickAdd.
- Configure your token and set Fixed eth conversionif your token has a fixed price (related to ETH price). For example,WETHtoken has afixed eth conversionequal to1. If not, leave it blank.
- If you want to set up a dynamic oracle after adding your Tokenyou need to add aPrice Oracle Ticker. You can choose multiple oracle sources. Go back to yourTokenand check ifEth valueis correct.
- Price is always shown as a reference to Ethereum, so for example WETHwill have aeth valueof1
- Stefan George ([email protected])
- Denís Graña ([email protected])
- Giacomo Licari ([email protected])
- Uxío Fuentefría ([email protected])