diff --git a/Jenkinsfile.yaml b/Jenkinsfile.yaml deleted file mode 100644 index 668933f..0000000 --- a/Jenkinsfile.yaml +++ /dev/null @@ -1,17 +0,0 @@ -pipeline: - agent: - any: - stages: - - stage: "Build" - steps: - - git "https://github.com/CruizeFinance/trident" - - sh "pwd" - - sh "python3 -m venv trident" - - sh ". trident/bin/activate" - - sh "pip install -r requirements.txt" - - - stage: "Test" - steps: - - sh "python3 manage.py test" - - diff --git a/components/cruize_data_manager.py b/components/cruize_data_manager.py index 59eeb21..f803c51 100644 --- a/components/cruize_data_manager.py +++ b/components/cruize_data_manager.py @@ -1,9 +1,4 @@ -from rest_framework.exceptions import ValidationError - from components import FirebaseDataManager -from utilities import cruize_constants - - class CruizeDataManager(object): def save_asset_tvl(self, asset_data): firebase_db_manager_obj = FirebaseDataManager() @@ -35,7 +30,7 @@ def save_asset_tvl(self, asset_data): def fetch_user_transactions(self, user_data): firebase_db_obj = FirebaseDataManager() firebase_data = firebase_db_obj.fetch_sub_collections( - cruize_constants.CRUIZE_USER, user_data["wallet_address"], "transactions" + "cruize_users", user_data["wallet_address"], "transactions" ) if not firebase_data: return f"No data found for wallet address: {user_data['wallet_address']}" @@ -49,4 +44,5 @@ def fetch_user_transactions(self, user_data): if __name__ == "__main__": d = CruizeDataManager() - d.save_asset_tvl({"asset_name": "WBTC", "amount": "0.1", "type": "protect"}) + d = d.fetch_user_transactions({"wallet_address":"0x9A3310233aaFe8930d63145CC821FF286c7829e1"}) + print(d) diff --git a/components/dydx_order_manager.py b/components/dydx_order_manager.py index d9dc2fd..9ae9c32 100644 --- a/components/dydx_order_manager.py +++ b/components/dydx_order_manager.py @@ -1,6 +1,5 @@ import time from datetime import datetime, timedelta - import pandas from dateutil.relativedelta import relativedelta from dydx3 import constants @@ -14,7 +13,6 @@ from utilities import cruize_constants from utilities.enums import AssetCodes - # class: DydxOrderManager - is responsible for managing order on dydx. diff --git a/cruize_operations/urls.py b/cruize_operations/urls.py index 0f9fd5d..3ae2db0 100644 --- a/cruize_operations/urls.py +++ b/cruize_operations/urls.py @@ -13,6 +13,5 @@ ), path("price_floor", CruizeOperations.as_view({"get": "price_floor"})), path("price_floor/", CruizeOperations.as_view({"put": "set_price_floor"})), - path("apy", CruizeOperations.as_view({"get": "fetch_asset_apy"})), path("asset_tvl", CruizeOperations.as_view({"post": "save_asset_tvl"})), ] diff --git a/cruize_operations/views.py b/cruize_operations/views.py index cb6a837..dd0de5f 100644 --- a/cruize_operations/views.py +++ b/cruize_operations/views.py @@ -1,5 +1,4 @@ from rest_framework import status -from rest_framework.exceptions import ValidationError from rest_framework.response import Response from rest_framework.viewsets import GenericViewSet from components import PriceFloorManager, FirebaseDataManager, CruizeDataManager @@ -11,9 +10,8 @@ SetPriceFloorSerializer, ) from cruize_operations.serilaizer import TvlSerializer -from services.avve_asset_apy import AaveApy from services.contracts.cruize.cruize_contract import Cruize -from utilities import cruize_constants + price_floor_manager = PriceFloorManager() @@ -120,16 +118,6 @@ def set_price_floor(self, request): result["error"] = e return Response(result, status.HTTP_500_INTERNAL_SERVER_ERROR) - def fetch_asset_apy(self, request): - result = {"result": None, "error": None} - try: - aave_apy_obj = AaveApy() - result["result"] = aave_apy_obj.fetch_asset_apys() - return Response(result, status.HTTP_200_OK) - except Exception as e: - result["error"] = e - return Response(result, status.HTTP_500_INTERNAL_SERVER_ERROR) - def save_asset_tvl(self, request): serializer_class = TvlSerializer serializer = serializer_class(data=request.data) diff --git a/dydx_operations/__init__.py b/dydx_operations/__init__.py index 17136b1..b48f6ee 100644 --- a/dydx_operations/__init__.py +++ b/dydx_operations/__init__.py @@ -3,5 +3,5 @@ FastWithdrawalSerializer, TransferSerializer, DepositSerializer, - DepositTestSerializer, + DepositTestSerializer,PositionidSerializers,RegisterUserSerializers ) diff --git a/dydx_operations/serializer/__init__.py b/dydx_operations/serializer/__init__.py index 0667800..8b8e30d 100644 --- a/dydx_operations/serializer/__init__.py +++ b/dydx_operations/serializer/__init__.py @@ -2,5 +2,5 @@ SlowWithdrawalSerializer, TransferSerializer, FastWithdrawalSerializer, - DepositTestSerializer, + DepositTestSerializer,PositionidSerializers,RegisterUserSerializers ) diff --git a/dydx_operations/serializer/dydx_oprations_serializer.py b/dydx_operations/serializer/dydx_oprations_serializer.py index 717341a..d0f1cc0 100644 --- a/dydx_operations/serializer/dydx_oprations_serializer.py +++ b/dydx_operations/serializer/dydx_oprations_serializer.py @@ -32,3 +32,10 @@ class DepositSerializer(serializers.Serializer): class DepositTestSerializer(serializers.Serializer): asset = serializers.CharField(required=True) + +class PositionidSerializers(serializers.Serializer): + asset_pair = serializers.CharField(required=True) + + +class RegisterUserSerializers(serializers.Serializer): + asset_pair = serializers.CharField(required=True) \ No newline at end of file diff --git a/dydx_operations/urls.py b/dydx_operations/urls.py index c8f9d1b..687077a 100644 --- a/dydx_operations/urls.py +++ b/dydx_operations/urls.py @@ -7,4 +7,6 @@ path("transfer", DydxOprations.as_view({"get": "transfer_information"})), path("deposit", DydxOprations.as_view({"post": "deposit"})), path("deposit/test", DydxOprations.as_view({"post": "deposit_test_fund"})), + path("position_id", DydxOprations.as_view({"get": "position_id"})), + path("register", DydxOprations.as_view({"post": "register_user"})), ] diff --git a/dydx_operations/views.py b/dydx_operations/views.py index a45b8a7..34e991f 100644 --- a/dydx_operations/views.py +++ b/dydx_operations/views.py @@ -9,7 +9,7 @@ FastWithdrawalSerializer, TransferSerializer, DepositSerializer, - DepositTestSerializer, + DepositTestSerializer,RegisterUserSerializers,PositionidSerializers ) from services import DydxWithdrawal, DydxAdmin @@ -139,4 +139,47 @@ def deposit_test_fund(self, request): result["error"] = e["errors"][0]["msg"] return Response(result, status.HTTP_500_INTERNAL_SERVER_ERROR) - # TODO : write an api for withdrawing fund from dydx. +# TODO : write an api for withdrawing fund from dydx. + def position_id(self, request): + # query params will contain the asset pair name ex ETH-USD BTC-USD . + request_body = request.query_params + serializer_class = PositionidSerializers + serializer = serializer_class(data=request_body) + serializer.is_valid(raise_exception=True) + data = serializer.validated_data + self.initialize() + + result = {"message": None, "error": None} + try: + position_id = self.dydx_admin_obj.get_position_id( + asset_dydx_instance[data["asset_pair"]] + ) + result["message"] = {"position_id": position_id} + return Response(result, status.HTTP_200_OK) + except DydxApiError or ValueError as e: + + return Response(result, status.HTTP_500_INTERNAL_SERVER_ERROR) + + def register_user(self, request): + # query params will contain the asset pair name ex ETH-USD BTC-USD . + self.initialize() + request_body = request.query_params + serializer_class = RegisterUserSerializers + serializer = serializer_class(data=request_body) + serializer.is_valid(raise_exception=True) + data = serializer.validated_data + result = {"message": None, "error": None} + try: + user = self.dydx_admin_obj.register_user( + asset_dydx_instance[data["asset_pair"]] + ) + if user is None: + raise Exception("Fail to register") + result["message"] = user["data"]["signature"] + return Response(result, status.HTTP_200_OK) + except DydxApiError or ValueError as e: + result["error"] = self.error_handler.dydx_error_decoder(e) + return Response(result, status.HTTP_400_BAD_REQUEST) + except Exception as e: + result["error"] = str(e) + return Response(result, status.HTTP_500_INTERNAL_SERVER_ERROR) \ No newline at end of file diff --git a/dydx_user/__init__.py b/dydx_user/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/dydx_user/admin.py b/dydx_user/admin.py deleted file mode 100644 index 8c38f3f..0000000 --- a/dydx_user/admin.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.contrib import admin - -# Register your models here. diff --git a/dydx_user/apps.py b/dydx_user/apps.py deleted file mode 100644 index a601b2d..0000000 --- a/dydx_user/apps.py +++ /dev/null @@ -1,6 +0,0 @@ -from django.apps import AppConfig - - -class UserConfig(AppConfig): - default_auto_field = "django.db.models.BigAutoField" - name = "dydx_user" diff --git a/dydx_user/migrations/__init__.py b/dydx_user/migrations/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/dydx_user/models.py b/dydx_user/models.py deleted file mode 100644 index 71a8362..0000000 --- a/dydx_user/models.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.db import models - -# Create your models here. diff --git a/dydx_user/tests.py b/dydx_user/tests.py deleted file mode 100644 index 7ce503c..0000000 --- a/dydx_user/tests.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.test import TestCase - -# Create your tests here. diff --git a/dydx_user/urls.py b/dydx_user/urls.py deleted file mode 100644 index de2900b..0000000 --- a/dydx_user/urls.py +++ /dev/null @@ -1,8 +0,0 @@ -from django.urls import path - -from dydx_user.views import User - -urlpatterns = [ - path("position_id", User.as_view({"get": "position_id"})), - path("register", User.as_view({"post": "register_user"})), -] diff --git a/dydx_user/views.py b/dydx_user/views.py deleted file mode 100644 index 830d4ae..0000000 --- a/dydx_user/views.py +++ /dev/null @@ -1,43 +0,0 @@ -from dydx3 import DydxApiError -from rest_framework import status -from rest_framework.response import Response -from rest_framework.viewsets import GenericViewSet -from services import DydxAdmin -from utilities.error_handler import ErrorHandler - -# will fix it letter . -class User(GenericViewSet): - def initialize(self): - self.dydx_admin_obj = DydxAdmin() - self.error_handler = ErrorHandler() - - def position_id(self, request): - self.initialize() - - result = {"message": None, "error": None} - try: - position_id = self.dydx_admin_obj.get_position_id() - result["message"] = {"position_id": position_id} - return Response(result, status.HTTP_200_OK) - except DydxApiError or ValueError as e: - result["error"] = self.error_handler.dydx_error_decoder(e) - return Response(result, status.HTTP_400_BAD_REQUEST) - except Exception as e: - result["error"] = str(e) - return Response(result, status.HTTP_500_INTERNAL_SERVER_ERROR) - - def register_user(self, request): - self.initialize() - result = {"message": None, "error": None} - try: - user = self.dydx_admin_obj.register_user() - if user is None: - raise Exception("Fail to register") - result["message"] = user["data"]["signature"] - return Response(result, status.HTTP_200_OK) - except DydxApiError or ValueError as e: - result["error"] = self.error_handler.dydx_error_decoder(e) - return Response(result, status.HTTP_400_BAD_REQUEST) - except Exception as e: - result["error"] = str(e) - return Response(result, status.HTTP_500_INTERNAL_SERVER_ERROR) diff --git a/market_data/serializers/__init__.py b/market_data/serializers/__init__.py index 50c5d08..bd4bc0b 100644 --- a/market_data/serializers/__init__.py +++ b/market_data/serializers/__init__.py @@ -1,5 +1,2 @@ from .serializers import ( - MarketDataDayRequestSerializer, - MarketDataTimestampRequestSerializer, - AssetPriceRequestSerializer, -) + AssetPriceRequestSerializer) diff --git a/market_data/serializers/serializers.py b/market_data/serializers/serializers.py index b3cdeb5..a2ac4ec 100644 --- a/market_data/serializers/serializers.py +++ b/market_data/serializers/serializers.py @@ -1,18 +1,4 @@ from rest_framework import serializers - -class MarketDataDayRequestSerializer(serializers.Serializer): - asset = serializers.CharField(required=True) - vs_currency = serializers.CharField(required=False) - days = serializers.IntegerField(required=True) - - -class MarketDataTimestampRequestSerializer(serializers.Serializer): - asset = serializers.CharField(required=True) - vs_currency = serializers.CharField(required=False) - time_from = serializers.IntegerField(required=True) - time_to = serializers.IntegerField(required=True) - - class AssetPriceRequestSerializer(serializers.Serializer): asset_name = serializers.CharField(required=True) diff --git a/market_data/urls.py b/market_data/urls.py index d509691..f049105 100644 --- a/market_data/urls.py +++ b/market_data/urls.py @@ -3,7 +3,5 @@ from market_data.views import MarketData urlpatterns = [ - path("day/", MarketData.as_view({"post": "market_chart_day"})), - path("timestamp/", MarketData.as_view({"post": "market_chart_timestamp"})), path("asset_price", MarketData.as_view({"get": "asset_price"})), ] diff --git a/market_data/views.py b/market_data/views.py index a76725f..53dc242 100644 --- a/market_data/views.py +++ b/market_data/views.py @@ -4,8 +4,6 @@ from rest_framework import status from rest_framework.viewsets import GenericViewSet from market_data.serializers import ( - MarketDataDayRequestSerializer, - MarketDataTimestampRequestSerializer, AssetPriceRequestSerializer, ) from services.market_data.coingecko import CoinGecko @@ -13,36 +11,6 @@ class MarketData(GenericViewSet): - def market_chart_day(self, request): - result = {"prices": None, "error": None} - coin_gecko = CoinGecko() - self.serializer_class = MarketDataDayRequestSerializer - serializer = self.serializer_class(data=request.data) - serializer.is_valid(raise_exception=True) - data = serializer.data - try: - market_chart_day_result = coin_gecko.market_chart_day(**data) - result["prices"] = market_chart_day_result["prices"] - return Response(data=result, status=status.HTTP_200_OK) - except Exception as e: - result["error"] = str(e) - return Response(data=result, status=status.HTTP_500_INTERNAL_SERVER_ERROR) - - def market_chart_timestamp(self, request): - result = {"prices": None, "error": None} - coin_gecko = CoinGecko() - self.serializer_class = MarketDataTimestampRequestSerializer - serializer = self.serializer_class(data=request.data) - serializer.is_valid(raise_exception=True) - data = serializer.data - try: - market_chart_day_result = coin_gecko.market_chart_timestamp(**data) - result["prices"] = market_chart_day_result["prices"] - return Response(data=result, status=status.HTTP_200_OK) - except Exception as e: - result["error"] = str(e) - return Response(data=result, status=status.HTTP_500_INTERNAL_SERVER_ERROR) - def asset_price(self, request): result = {"price": None, "error": None} request_body = request.query_params diff --git a/order/serializers/__init__.py b/order/serializers/__init__.py index 61a9ad6..1b8484f 100644 --- a/order/serializers/__init__.py +++ b/order/serializers/__init__.py @@ -1,5 +1,3 @@ from .order_serializer import ( - OrderRequestSerializer, - CancelOrderRequestSerializer, - FirestoreOrdersRequestSerializer, + OrderRequestSerializer,DydxAllOrdersRequestSerializer ) diff --git a/order/serializers/order_serializer.py b/order/serializers/order_serializer.py index 0ae6f66..1558a74 100644 --- a/order/serializers/order_serializer.py +++ b/order/serializers/order_serializer.py @@ -15,9 +15,5 @@ def validate(self, data): return data -class CancelOrderRequestSerializer(serializers.Serializer): - order_id = serializers.CharField(required=True) - - -class FirestoreOrdersRequestSerializer(serializers.Serializer): - order_id = serializers.CharField(required=False) +class DydxAllOrdersRequestSerializer(serializers.Serializer): + type = serializers.CharField(required=True) \ No newline at end of file diff --git a/order/urls.py b/order/urls.py index 2080b50..2bb2199 100644 --- a/order/urls.py +++ b/order/urls.py @@ -6,5 +6,4 @@ path("create", Order.as_view({"post": "create"})), path("cancel", Order.as_view({"post": "cancel"})), path("", Order.as_view({"get": "dydx_order"})), - path("firestore", Order.as_view({"get": "orders"})), ] diff --git a/order/views.py b/order/views.py index e7377e3..d92ecae 100644 --- a/order/views.py +++ b/order/views.py @@ -5,10 +5,10 @@ from components.dydx_order_manager import DydxOrderManager from order.serializers import ( OrderRequestSerializer, - CancelOrderRequestSerializer, - FirestoreOrdersRequestSerializer, + DydxAllOrdersRequestSerializer, ) from services import DydxOrder, DydxAdmin +from settings_config import dydx_p_client_obj, asset_dydx_instance from utilities.error_handler import ErrorHandler @@ -37,10 +37,12 @@ def create(self, request): order_data["side"], order_data["market"], order_data["size"], - order_data["price"], + order_data["price"],dydx_p_client_obj["side"], ) - dydx_order_details = self.dydx_order_obj.create_order(order_data) + dydx_order_details = self.dydx_order_obj.create_order( + order_data, asset_dydx_instance["side"] + ) dydx_order_details = vars(dydx_order_details) result["message"] = dydx_order_details["data"]["order"] @@ -52,44 +54,21 @@ def create(self, request): result["error"] = str(e) return Response(result, status.HTTP_500_INTERNAL_SERVER_ERROR) - """ - :method - cancel is used to cancel an given order on dydx . - :param - request will contain order Id to be cancelled.this method will call the dydx_client cancel_order function with given order id. - :return - cancel order details. - """ - - def cancel(self, request): - self.initialize() - self.serializer_class = CancelOrderRequestSerializer(data=request.data) - self.serializer_class.is_valid(raise_exception=True) - order_id = self.serializer_class.data["order_id"] - result = {"message": None, "error": None} - try: - cancelled_order_details = self.dydx_order_obj.cancel_order(order_id) - cancelled_order_details = vars(cancelled_order_details) - result["message"] = cancelled_order_details["data"]["cancelOrder"] - return Response(result, status.HTTP_200_OK) - except DydxApiError or ValueError as e: - - result["error"] = self.error_handler.dydx_error_decoder(e) - return Response(result, status.HTTP_400_BAD_REQUEST) - except Exception as e: - e = vars(e) - - result["error"] = e["msg"]["errors"][0]["msg"] - return Response(result, status.HTTP_500_INTERNAL_SERVER_ERROR) - """ method dydx_order is responsible for getting all the openPositions on dydx . :return openPositions on dydx. """ def dydx_order(self, request): - result = {"message": None, "error": None} dydx_admin_obj = DydxAdmin() error_handler = ErrorHandler() + request_body = request.query_params + serializer_class = DydxAllOrdersRequestSerializer + serializer = serializer_class(data=request_body) + serializer.is_valid(raise_exception=True) + data = serializer.validated_data try: - orders = dydx_admin_obj.get_account() + orders = dydx_admin_obj.get_account(asset_dydx_instance[data["type"]]) orders = vars(orders) orders_data = orders["data"]["account"]["openPositions"] if not orders_data: @@ -101,31 +80,6 @@ def dydx_order(self, request): return Response(result, status.HTTP_400_BAD_REQUEST) except Exception as e: e = vars(e) - if e["msg"]: - result["error"] = e["msg"]["errors"][0]["msg"] - else: - result["error"] = str(e) - return Response(result, status.HTTP_500_INTERNAL_SERVER_ERROR) - - def orders(self, request): - result = {"message": None, "error": None} - request_data = request.query_params.dict() - self.serializer_class = FirestoreOrdersRequestSerializer(data=request_data) - self.serializer_class.is_valid(raise_exception=True) - validated_data = self.serializer_class.data - dydx_order_manager_obj = DydxOrderManager() - try: - orders = dydx_order_manager_obj.price_floor_manager_obj.firebase_data_manager_obj.fetch_orders( - order_id=validated_data.get("order_id") - ) - if orders is None: - raise Exception("Order id not found") - result["message"] = "order" - return Response(result, status.HTTP_200_OK) - except DydxApiError or ValueError as e: - e = vars(e) - result["error"] = e["msg"]["errors"][0]["msg"] - return Response(result, status.HTTP_400_BAD_REQUEST) - except Exception as e: result["error"] = str(e) return Response(result, status.HTTP_500_INTERNAL_SERVER_ERROR) + diff --git a/services/__init__.py b/services/__init__.py index 6873c3b..8502932 100644 --- a/services/__init__.py +++ b/services/__init__.py @@ -1,2 +1,2 @@ from .dydx_client import DydxOrder, DydxAdmin, DydxPClient, DydxWithdrawal -from .avve_asset_apy import aave_apy +from .subgraph_query import aave_apy diff --git a/services/binance_client/binance_client.py b/services/binance_client/binance_client.py index f09a947..720942d 100644 --- a/services/binance_client/binance_client.py +++ b/services/binance_client/binance_client.py @@ -1,11 +1,9 @@ import time from binance.client import Client as Client_binance -from settings_config import dydx_instances - - +from settings_config import dydx_credentials class BinanceClient(object): def __init__(self): - dydx_instances_details = dydx_instances["BTC-USD"]["binance_credentials"] + dydx_instances_details = dydx_credentials["BTC-USD"]["binance_credentials"] self.binance_api_key = dydx_instances_details["binance_api_key"] self.binance_api_secret = dydx_instances_details["binance_api_secret"] self.client = Client_binance( diff --git a/services/celery/celery.py b/services/celery/celery.py index 6b577b9..f160b26 100644 --- a/services/celery/celery.py +++ b/services/celery/celery.py @@ -1,10 +1,7 @@ import time - -from dydx3 import constants from components import FirebaseDataManager, PriceFloorManager from components.dydx_order_manager import DydxOrderManager from services import DydxWithdrawal -from services.avve_asset_apy import AaveApy from settings_config import asset_dydx_instance from settings_config.celery_config import app from utilities import cruize_constants @@ -135,12 +132,6 @@ def set_price_floor(): price_floor_manager_obj.set_price_floor("bitcoin") -@app.task(name="store_asset_apy") -def store_asset_apys(): - print("store_asset_apys :: Setting apy") - asset_apy_obj = AaveApy() - asset_apys = asset_apy_obj.fetch_asset_apys() - asset_apy_obj.store_asset_apys(asset_apys) if __name__ == "__main__": diff --git a/services/contracts/chainlink/chainlink_price_feed.json b/services/contracts/chainlink/chainlink_price_feed.json index 6d2275d..bce248f 100644 --- a/services/contracts/chainlink/chainlink_price_feed.json +++ b/services/contracts/chainlink/chainlink_price_feed.json @@ -1,283 +1,4 @@ [ - { - "inputs": [ - { - "internalType": "address", - "name": "_aggregator", - "type": "address" - }, - { - "internalType": "address", - "name": "_accessController", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "int256", - "name": "current", - "type": "int256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "roundId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "updatedAt", - "type": "uint256" - } - ], - "name": "AnswerUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "roundId", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "startedBy", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "startedAt", - "type": "uint256" - } - ], - "name": "NewRound", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "OwnershipTransferRequested", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "acceptOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "accessController", - "outputs": [ - { - "internalType": "contract AccessControllerInterface", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "aggregator", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_aggregator", - "type": "address" - } - ], - "name": "confirmAggregator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "description", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_roundId", - "type": "uint256" - } - ], - "name": "getAnswer", - "outputs": [ - { - "internalType": "int256", - "name": "", - "type": "int256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint80", - "name": "_roundId", - "type": "uint80" - } - ], - "name": "getRoundData", - "outputs": [ - { - "internalType": "uint80", - "name": "roundId", - "type": "uint80" - }, - { - "internalType": "int256", - "name": "answer", - "type": "int256" - }, - { - "internalType": "uint256", - "name": "startedAt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "updatedAt", - "type": "uint256" - }, - { - "internalType": "uint80", - "name": "answeredInRound", - "type": "uint80" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_roundId", - "type": "uint256" - } - ], - "name": "getTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "latestAnswer", - "outputs": [ - { - "internalType": "int256", - "name": "", - "type": "int256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "latestRound", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [], "name": "latestRoundData", @@ -310,200 +31,5 @@ ], "stateMutability": "view", "type": "function" - }, - { - "inputs": [], - "name": "latestTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address payable", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint16", - "name": "", - "type": "uint16" - } - ], - "name": "phaseAggregators", - "outputs": [ - { - "internalType": "contract AggregatorV2V3Interface", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "phaseId", - "outputs": [ - { - "internalType": "uint16", - "name": "", - "type": "uint16" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_aggregator", - "type": "address" - } - ], - "name": "proposeAggregator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposedAggregator", - "outputs": [ - { - "internalType": "contract AggregatorV2V3Interface", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint80", - "name": "_roundId", - "type": "uint80" - } - ], - "name": "proposedGetRoundData", - "outputs": [ - { - "internalType": "uint80", - "name": "roundId", - "type": "uint80" - }, - { - "internalType": "int256", - "name": "answer", - "type": "int256" - }, - { - "internalType": "uint256", - "name": "startedAt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "updatedAt", - "type": "uint256" - }, - { - "internalType": "uint80", - "name": "answeredInRound", - "type": "uint80" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedLatestRoundData", - "outputs": [ - { - "internalType": "uint80", - "name": "roundId", - "type": "uint80" - }, - { - "internalType": "int256", - "name": "answer", - "type": "int256" - }, - { - "internalType": "uint256", - "name": "startedAt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "updatedAt", - "type": "uint256" - }, - { - "internalType": "uint80", - "name": "answeredInRound", - "type": "uint80" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_accessController", - "type": "address" - } - ], - "name": "setController", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" } ] \ No newline at end of file diff --git a/services/dydx_client/dydx_order.py b/services/dydx_client/dydx_order.py index 1760421..5f7894e 100644 --- a/services/dydx_client/dydx_order.py +++ b/services/dydx_client/dydx_order.py @@ -19,14 +19,6 @@ def create_order(self, order_params, dydx_client): placed_order_details = dydx_p_client.private.create_order(**order_params) return placed_order_details - """ function is responsible for deleting the order on dydx. - @param orderId orderId to be deleted. - @return deleted order information. - """ - - def cancel_order(self, id, dydx_client): - deleted_order = dydx_client.private.cancel_order(order_id=id) - return deleted_order """ function get_market_orders is responsible for getting all the market order according to the order_params. @param Order_params are the parameters that pass to dydx3 API. diff --git a/services/firebase_cloud_client/firebase_client.py b/services/firebase_cloud_client/firebase_client.py index 743f6f0..daa8cf5 100644 --- a/services/firebase_cloud_client/firebase_client.py +++ b/services/firebase_cloud_client/firebase_client.py @@ -1,6 +1,6 @@ import firebase_admin from firebase_admin import credentials, firestore -import os +from services.vault_security.vault_security import VaultSecurity """ class FirebaseClient is responsible for initializing firebase_admin client. @@ -13,10 +13,14 @@ class FirebaseClient is responsible for initializing firebase_admin client. class FirebaseClient(object): def __init__(self): self.client = None + self.firebase_credentials = None + self.vault_security_obj=VaultSecurity() def create_firebase_client_instance(self): + if self.firebase_credentials is None: + self.firebase_credentials = self.vault_security_obj.fetch('firebase_credentials') cred = credentials.Certificate( - os.path.abspath(os.path.dirname(__file__)) + "/firebase_config.json" + self.firebase_credentials ) firebase_admin.initialize_app(cred) self.client = firestore.client() diff --git a/services/firebase_cloud_client/firebase_config.json b/services/firebase_cloud_client/firebase_config.json deleted file mode 100644 index 38202ab..0000000 --- a/services/firebase_cloud_client/firebase_config.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "service_account", - "project_id": "cruizefirestore", - "private_key_id": "1d39f091c7b4f30597e7f0b573739bade63b7b0a", - "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCr4aq+z8yPJZxA\nSv74UBB0/bpkd36zgnR0bgQ9zvb2YfWDLYGfqf1kdZij4h8zHxE73lA/PclG7a5p\nFk9Bkg5LLM0XFUKA0JaYTKLbUm7vbrbrVp8OQAqCbJ1yOSE+1nwNsAgcr7Meq6FW\nzVn4hY2UB5JN3GXYWv9YTpI+GZ8STJbM8SUU5VDvqiXyLCpbZFHEHvt2z6Gszo1Y\nGmoAnGFVNg+0ghu3XGc7ox8UXnVpwUtGyMeKW7e8sYBBL7FF6XZ6uAPPpv9x7Nwi\nzgAAVSFOa+JuHMFnx83bPrbcAaggHhQPq6qV8E8Vx7GmLxnslDgLhYyLNJIq1pkN\nV0rNFyhDAgMBAAECggEAUc60PmJYCc/MWTt4tIYi9xPmmbfYOac/N0U/xo1RtP31\n5SwNFInLfXuNHX9b+zBvuu96gUcunBA3YXQJX/ucywH1UWXAg+ADtVRQdRP8kgA/\nlq5hQN6RQfdhTsLLRIXAgKFGkyS7G79zqIVPq74hHxIle+KJJNtWyliHOYBnWkUL\nGIx+m7ny5D9XwICjTue58qAKf8ladI0LGb8utVeXPQSjNjLb9tV0X6pHMRygsqv5\nHrm4Ip7HRh3b50Oo3CYvHueh6UwXFI7eZI+5Sv+zOWrW5Xz1U1kra67UrZtJfjDK\nbymheqiAoeNCqv1uuPSDSYcR10cmqhNr/sSWrNtAqQKBgQDS3YARkq6VOdHAXj9e\nhe0EJnVLQ5ehwRRlD/HCsDQSotofB4T/14aRro/J6MPqzLsTQXcrNGGFvuweCOmo\nRvBRtexhcoq0Rd58gkyqVRh6ugw+MMU0MdWTOXb2VNi2KsmWo8O5WQd3e2HTV5NK\nNl9APMd2nAlykDEEIkaRj7b9iQKBgQDQrAcgFpwq/i9Tj3cf1lgKGOaYpJv49kPd\n/i+Vt8X/v2ORFscUiBG4PhbRWlYdxswKV6/DgWwdZG/JnKNAGI75bzv9r0i7ZAM4\ncmSFTROv7jyaVcaWReBQmGn2YzipMs2ReddVh8qRY17Ez0VB7k8IIZUCnbFJEIMr\nM3STZKWwawKBgAieo1iUjWxuM6PQdnivstOjmtHbznv/P40uDKzvtQE6BP6VuRsY\nPVkBMMGJMVEM02zjFTL/7iigeFh19s85LyO38xS8sOzTmleun+GqntiNeGimZ7lN\nfDSLedByAXXY4+qzgRG3kPWSZppUDyJOfLBMi77OfBhhyo8ns4jJvio5AoGAAT+G\nK2L3PCqZDd7lz4Lws97CQld5t1uBvGowzqxyurziU5PXTQAjWv7EFCx+J19xCP7N\nRlYX13UqVgJh15hOAp/vs+zAep52hnfosgNsArliE2o/7dYtKU5AFAEz7Y8oO56G\n8zQEuinl/zdeKq7KOjo5MfLPhKhcoH2GTPtlIlECgYBzb5Y6HNo/04EL+Q+XgjAf\nKbFphiFNQQaITO7f3h3x0aRYb0m1Af4gs3PaEbjSFga9taV5vx6AbMqEtlSR5aRS\nThwWopN8MYHJZoIFK9UH4ygufI0a8fwVHYgKXuTo+2fy/rjhk3+54YOuI44cOvBu\nS5WHVISlQOqLa5m04HRieQ==\n-----END PRIVATE KEY-----\n", - "client_email": "firebase-adminsdk-czlva@cruizefirestore.iam.gserviceaccount.com", - "client_id": "112727642713260694071", - "auth_uri": "https://accounts.google.com/o/oauth2/auth", - "token_uri": "https://oauth2.googleapis.com/token", - "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", - "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-czlva%40cruizefirestore.iam.gserviceaccount.com" -} \ No newline at end of file diff --git a/services/market_data/coingecko.py b/services/market_data/coingecko.py index 7fffa8f..5988475 100644 --- a/services/market_data/coingecko.py +++ b/services/market_data/coingecko.py @@ -2,7 +2,6 @@ from datetime import datetime from services.contracts.chainlink import ChainlinkPriceFeed from utilities import cruize_constants - # class - coinGecko: is responsible for returning market data. from utilities.datetime_utilities import convert_epoch_to_utcdatetime @@ -13,7 +12,7 @@ class CoinGecko: :method - market_chart_day: will return daily market price data for each one hour. :params - asset:asset for which market price data will fetch. :params - vs_currency:such as ETH-USD. - :params - days: for how much days data is need. + :params - days: number of days of data needed :return - asset market price. """ diff --git a/services/avve_asset_apy/__init__.py b/services/subgraph_query/__init__.py similarity index 100% rename from services/avve_asset_apy/__init__.py rename to services/subgraph_query/__init__.py diff --git a/services/avve_asset_apy/aave_apy.py b/services/subgraph_query/aave_apy.py similarity index 100% rename from services/avve_asset_apy/aave_apy.py rename to services/subgraph_query/aave_apy.py diff --git a/settings_config/__init__.py b/settings_config/__init__.py index 0c7550b..205c0fe 100644 --- a/settings_config/__init__.py +++ b/settings_config/__init__.py @@ -2,15 +2,16 @@ from services import DydxPClient from services.vault_security.vault_security import VaultSecurity from services.firebase_cloud_client import FirebaseClient - asset_dydx_instance = {} vault_security_obj = VaultSecurity() dydx_p_client_obj = DydxPClient() -dydx_instances = vault_security_obj.fetch("dydx_instances") +dydx_credentials = vault_security_obj.fetch("dydx_instances") +sentry_dns = vault_security_obj.fetch("sentry_dns") +project_secret_key = vault_security_obj.fetch('secret_key') def initialize_dydx_instances(): - for key, value in dydx_instances.items(): + for key, value in dydx_credentials.items(): asset_dydx_instance[key] = { "dydx_data": value, "dydx_instance": dydx_p_client_obj.create_dydx_instance(value), diff --git a/settings_config/celery_config.py b/settings_config/celery_config.py index c00d52e..ee07f83 100644 --- a/settings_config/celery_config.py +++ b/settings_config/celery_config.py @@ -3,7 +3,9 @@ from celery import Celery from celery.schedules import crontab from django.conf import settings - +from services.vault_security.vault_security import VaultSecurity +vault_security_obj = VaultSecurity() +celery_url = vault_security_obj.fetch('celeryurl') os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings_config.production_settings") app = Celery("trident", include=["services.celery.celery"]) app.conf.enable_utc = True @@ -22,7 +24,7 @@ # broker_transport_options={ # "predefined_queues": { # "celerybroker": { - # "url": "https://sqs.us-east-1.amazonaws.com/052637204057/celerybroker", + # "url": celery_url['celeryurl'] # }, # }, # }, diff --git a/settings_config/common.py b/settings_config/common.py index 6ae6b9e..366bc1f 100644 --- a/settings_config/common.py +++ b/settings_config/common.py @@ -50,8 +50,7 @@ USE_TZ = True -# Static files (CSS, JavaScript, Images) -# https://docs.djangoproject.com/en/3.1/howto/static-files/ + STATIC_URL = "/static/" diff --git a/settings_config/dev_settings.py b/settings_config/dev_settings.py index 621defc..8650fa1 100644 --- a/settings_config/dev_settings.py +++ b/settings_config/dev_settings.py @@ -1,7 +1,7 @@ -from .common import * from django.core.wsgi import get_wsgi_application - -SECRET_KEY = "j7qelfcc!qe*%((o3p0ju20obkx^j9+9#%%d-t15gqnz^*$om#" +from .common import * +from settings_config import project_secret_key +SECRET_KEY = project_secret_key['data'] DEBUG = True ALLOWED_HOSTS = ["127.0.0.1", "52.72.210.207", "3.210.156.188"] diff --git a/settings_config/production_settings.py b/settings_config/production_settings.py index 87f628d..efb0f4f 100644 --- a/settings_config/production_settings.py +++ b/settings_config/production_settings.py @@ -1,10 +1,9 @@ import sentry_sdk from sentry_sdk.integrations.django import DjangoIntegration - -from .common import * +from . import sentry_dns, project_secret_key from django.core.wsgi import get_wsgi_application - -SECRET_KEY = "j7qelfcc!qe*%((o3p0ju20obkx^j9+9#%%d-t15gqnz^*$om#" +from .common import * +SECRET_KEY = project_secret_key['data'] DEBUG = False CORS_ALLOWED_ORIGINS = [ "http://localhost:3000", @@ -31,7 +30,7 @@ # SENTRY SETTINGS sentry_sdk.init( - dsn="https://7aa93f500f6d418092217e58f8a9557c@o4504123615084544.ingest.sentry.io/4504123647721472", + dsn=sentry_dns['dns'], integrations=[ DjangoIntegration(), ], diff --git a/settings_config/urls.py b/settings_config/urls.py index 26dfcfc..b445b8f 100644 --- a/settings_config/urls.py +++ b/settings_config/urls.py @@ -19,7 +19,6 @@ urlpatterns = [ path("admin/", admin.site.urls), path("order/", include("order.urls")), - path("dydx_user/", include("dydx_user.urls")), path("dydx_operations/", include("dydx_operations.urls")), path("cruize_operations/", include("cruize_operations.urls")), path("market_data/", include("market_data.urls")), diff --git a/utilities/cruize_constants.py b/utilities/cruize_constants.py index 0c6618e..51f41e0 100644 --- a/utilities/cruize_constants.py +++ b/utilities/cruize_constants.py @@ -10,10 +10,11 @@ LINK_ADDRESS = "0x01BE23585060835E02B77ef475b0Cc51aA1e0709" -# PRICE PARAMS +# PRICE CONSTANTS MAX_WAIT_SECONDS = 60 BLOCK_SAMPLE_SIZE = 20 PROBABILITY = 100 + # NETWORKS MAINNET_CHAIN_ID = 1 GOERLI_CHAIN_ID = 5 @@ -22,18 +23,14 @@ # CRYPTO NOTATION """This represents 10^8. Crypto currency values - always have certain decimal notations appended to them +always have certain decimal notations appended to them and this variable is used to remove those decimals - to get the real world value(price)""" +to get the real world value(price)""" DECIMAL_NOTATION = 1e8 # CRUIZE CONTRACTS # DYDX POSITION CONSTANT -BTC = "BTC" -ETH = "ETH" -POSITION_CLOSED = "CLOSED" -POSITION_OPEN = "OPEN" TIME_IN_FORCE_IOC = "IOC" SIGNATURE = "0x" PRICE_ROUNDED_VALUE = 3 @@ -42,23 +39,15 @@ # TEST_LINK_ADDRESS = "0xD4a33860578De61DBAbDc8BFdb98FD742fA7028e" TEST_OWNER_ADDRESS = "0xDf0137207dA77459e54C03658F43Ef159d06341a" TEST_CRUIZE_CONTRACT_ADDRESS = "0xD363F02cBa41eDA05e335ADb6A66E9fe66604b36" -POSITION_LEVERAGE = 5 +POSITION_LEVERAGE = 4 TEST_BTC_USD_ORACLE_ADDRESS = "0xA39434A63A52E749F02807ae27335515BA4b07F7" TEST_ETH_USD_ORACLE_ADDRESS = "0xD4a33860578De61DBAbDc8BFdb98FD742fA7028e" -# COINGECKO CONSTANT +# COIN-GECKO CONSTANT TIMEZONE = pytz.timezone("Asia/Kolkata") COINGECKO_HOST = "https://api.coingecko.com/api/v3" SECONDS_PER_HOUR = 3600 TIMESTAMP_MULTIPLIER = 1000 -# CELERY CONFIG CONSTANT -# need to run on server before testnet - -BROKER_URL = "redis://127.0.0.1:6379/0" -RESULT_BACKEND = "redis://127.0.0.1:6379/1" - -# FIREBASE CONSTANT -CRUIZE_USER = "cruize_users" # VAULT VAULT_URL = "https://cruize-finance-cluster-public-vault-ffad0228.95440b3b.z1.hashicorp.cloud:8200"