2.0.1-alpha.0 • Published 1 year ago

@mycelium-ethereum/swaps-keepers v2.0.1-alpha.0

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

Swaps-Keepers

Setting up the Environment

To setup the environment, copy the env.example file to .env and set the variables.

Variable NameDescription
RPC_URLA url to make RPC requests. Can either be wss or https
FALLBACK_RPC_URLA fallback url to make RPC requests. Can be either wss or https
PRIVATE_KEYThe private key of the liquidator wallet. This will need to be set in the PositionManager.sol contract. This can be checked by calling the isLiquidator method.
VAULT_PRICE_FEEDAddress for the VaultPriceFeed.sol contract
POSITION_ROUTERAddress for the PositionRouter.sol contract
MAX_EXECUTION_RETRYThe max amount of times the PositionKeeper will try and execute positions. This is reset each time a new order comes in and is to prevent infinite retries. Defaults to 5
MAX_EXECUTABLE_CHUNKThe max amount of orders included in an execution chunk. Since execution is unbounded there were network errors when executing to many orders and receivung to many event logs in return. Defaults to 25
POSITION_KEEPER_INTERVAL_MSInterval for the keeper to check if there are any outstanding orders. Defaults to 20 seconds
MAX_EXECUTION_RETRYThe max amount of times the PositionKeeper will try and execute positions. This is reset each time a new order comes in and is to prevent infinite retries. Defaults to 5
MAX_EXECUTABLE_CHUNKThe max amount of orders included in an execution chunk. Since execution is unbounded there were network errors when executing to many orders and receivung to many event logs in return. Defaults to 25
PRICE_KEEPER_FORCE_UDPATE_INTERVAL_MSIf there are no price updates and this interval is reached it will force and update. Defaults to 5 minutes
PRICE_KEEPER_INTERVAL_MSInterval for the keeper to check if there are any outstanding orders. Defaults to 20 seconds

Install and Build

yarn
yarn run build

Watcher Specific Variables.

These variables are specific to the Watcher. If you don't set them, defaults are in place.

WATCHER_STALE_THRESHOLD = Time in seconds before the Median price is considered stale in the watcher. Default = 5s
WATCHER_PRICE_DIFF_THRESHOLD = Percent (in 10^18 units) deviation that is acceptable between the median price and keeper price. Default = 5% (0.05×10^18)

Docker

Make sure you have docker installed on your machine or environment. You can check you have docker by running docker -v in your terminal of choice.

Create a swaps-keepers docker image with npm run docker:build-keepers or yarn docker:build-keepers. This images starts a PriceKeeper and PositionKeeper. Create a watcher docker image with npm run docker:build-watcher or yarn docker:build-watcher.

The created image does not include the required env variables OR any of the optional watcher variables.

  • RPC_URL - Network RPC (required)
  • SIGNING_PRIVATE_KEY - permissioned account to call updatePrices (required)
  • PRICE_FEED - price feed contract address (required)
  • POSITION_ROUTER - position router contract address (required only for swaps-keepers)

Run the image

Start running the PriceKeeper and PositionKeeper

  • on Arbitrum docker run -p 9111:9111 -e ARBITRUM_RPC="https://arb1.arbitrum.io/rpc" -e SIGNING_PRIVATE_KEY="A_PERMISSIONED_PRIVATE_KEY" -e PRICE_FEED="priceFeed address" -e POSITION_ROUTER="positionRouter address" swaps-keepers
  • on Arbitrum rinkeby docker run -p 9111:9111 -e ARBITRUM_TESTNET_RPC="https://rinkeby.arbitrum.io/rpc" -e SIGNING_PRIVATE_KEY="A_PERMISSIONED_PRIVATE_KEY" -e PRICE_FEED="priceFeed address" POSITION_ROUTER="positionRouter address" swaps-keepers

Start running the Watcher

  • on Arbitrum docker run -e NETWORK="42161" -e ARBITRUM_RPC="https://arb1.arbitrum.io/rpc" -e SIGNING_PRIVATE_KEY="<A_PERMISSIONED_PRIVATE_KEY>" swaps-watcher
  • on Arbitrum rinkeby docker run -e NETWORK="421611" -e ARBITRUM_TESTNET_RPC="https://rinkeby.arbitrum.io/rpc" -e SIGNING_PRIVATE_KEY="<A_PERMISSIONED_PRIVATE_KEY>" swaps-watcher

There is also the option of using a custom/private RPC in place of the public ones used here.

Push New GCP Image

  • npm run docker:build-keepers
  • docker tag swaps-keepers gcr.io/avian-direction-235610/swaps-keepers:version
  • `docker push gcr.io/avian-direction-235610/swaps-keepers:version