Hummingbot Gateway is a REST API that exposes connections to various blockchains (wallet, node & chain interaction) and decentralized exchanges (pricing, trading & liquidity provision). It is written in Typescript and takes advantage of existing blockchain and DEX SDKs. The advantage of using gateway is it provideds a programming language agnostic approach to interacting with blockchains and DEXs.
Gateway may be used alongside the main Hummingbot client to enable trading on DEXs, or as a standalone module by external developers.
To run Gateway in https
(default):
- CERTS_PATH: path to folder where Hummingbot generated and saved self-signed SSL certificates
- PASSPHRASE: passphrase used to generate the certificates above
Dependencies:
- NodeJS (16.0.0 or higher)
- Yarn: run
npm install -g yarn
after installing NodeJS
# Install dependencies
yarn
# Complile Typescript into JS
$ yarn build
# Run Gateway setup script, which helps you set configs and CERTS_PATH
$ chmod a+x gateway-setup.sh
$ ./gateway-setup.sh
# Start the Gateway server using PASSPHRASE
$ yarn start --passphrase=<PASSPHRASE>
Dependencies:
See the /docker
folder for Docker installation scripts and instructions on how to use them.
Dependencies:
To build the gateway docker image locally execute the below make command:
make docker
Pass the ${TAG}
environmental variable to add a tag to the docker
image. For example, the below command will create the hummingbot/gateway:dev
image.
TAG=dev make docker
See the official Gateway docs.
The API is documented using Swagger. When Gateway is started, it also generates Swagger API docs at: https://localhost:8080
There are a number of ways to contribute to gateway.
-
File an issue at hummingbot issues
-
Make a pull request
-
Edit the docs
-
Vote on a Snapshot proposal
-
Edit
certs_path
in conf/server.yml and enter the absolute path to the folder where Hummingbot stored the certificates it created withgateway generate-certs
. You can also edit this config inside the Hummingbot client by running the command:gateway config server.certs_path
. -
If you want to turn off
https
, setunsafeDevModeWithHTTP
totrue
in conf/server.yml. -
If you want Gateway to log to standard out, set
logToStdOut
totrue
in conf/server.yml. -
The format of configuration files are dictated by src/services/config-manager-v2.ts and the corresponding schema files in src/services/schema.
Here are some files we recommend you look at in order to get familiar with the Gateway codebase:
-
src/services/ethereum-base.ts: base class for EVM chains.
-
src/connectors/uniswap/uniswap.ts: functionality for interacting with Uniswap.
-
src/services/validator.ts: defines functions for validating request payloads.
For a pull request merged into the codebase, it has to pass unit test coverage requirements. Take a look at Workflow for more details.
Read this document for more details about how to write unit test in gateway: How we write unit tests for gateway.
Run all unit tests.
yarn test:unit
Run an individual test folder or file
yarn jest test/<folder>/<file>
We have found it is useful to test individual endpoints with curl
commands. We have a collection of prepared curl calls. POST bodies are stored in JSON files. Take a look at the curl calls for gateway. Note that some environment variables are expected.
This repo uses eslint
and prettier
. When you run git commit
it will trigger the pre-commit
hook. This will run eslint
on the src
and test
directories.
You can lint before committing with:
yarn run lint
You can run the prettifier before committing with:
yarn run prettier