From 5b1ad0223000bfb74f8104b15f8a3525f1cc1e37 Mon Sep 17 00:00:00 2001 From: Nida Karim Ali Date: Sat, 16 Sep 2023 13:43:26 +0500 Subject: [PATCH 1/2] add growth routes to python client --- src/bluefin_v2_client/client.py | 205 ++++++++++++++++++++++++++++ src/bluefin_v2_client/constants.py | 18 +++ src/bluefin_v2_client/interfaces.py | 178 ++++++++++++++++++++++++ 3 files changed, 401 insertions(+) diff --git a/src/bluefin_v2_client/client.py b/src/bluefin_v2_client/client.py index 7fbe4b4..5d629d6 100644 --- a/src/bluefin_v2_client/client.py +++ b/src/bluefin_v2_client/client.py @@ -969,6 +969,211 @@ async def _get_coin_having_balance(self, balance: int) -> str: "Insufficient balance, please add more SUI tokens or merge your existing tokens" ) + ## Growth endpoints + async def generate_referral_code(self,params:GenerateReferralCodeRequest): + """ + Inputs: + params(GenerateReferralCodeRequest): params required to generate referral code + Returns: + - GenerateReferralCodeResponse + - referralAddress + - referralCode + - message? + """ + return await self.apis.post( + SERVICE_URLS["GROWTH"]["GENERATE_CODE"], + params, + True + ) + + async def link_referred_user(self,params: LinkReferredUserRequest): + """ + Inputs: + params(LinkReferredUserRequest): params required to link referred user + Returns: + - LinkReferredUserResponse + - referralCode + - refereeAddress + - campaignId + - message + """ + return await self.apis.post( + SERVICE_URLS["GROWTH"]["LINK_REFERRED_USER"], + params, + True + ) + + async def get_referrer_info(self,campaignId:int): + """ + Inputs: + campaignId: represents campaign id for which user wants to fetch referrer info for + Returns: + - GetReferrerInfoResponse + - isReferee + """ + return await self.apis.get( + SERVICE_URLS["GROWTH"]["REFERRER_INFO"], + {"campaignId": campaignId}, + True + ) + + async def get_campaign_details(self): + """ + Returns: + - list of GetCampaignDetailsResponse + """ + return await self.apis.get( + SERVICE_URLS["GROWTH"]["CAMPAIGN_DETAILS"] + ) + + async def get_campaign_rewards(self,campaignId:int): + """ + Inputs: + campaignId: represents campaign id for which user wants to fetch rewards of + Returns: + - GetCampaignRewardsResponse + """ + return await self.apis.get( + SERVICE_URLS["GROWTH"]["CAMPAIGN_REWARDS"], + {"campaignId": campaignId}, + True + ) + + async def get_affiliate_payouts(self,campaignId:int): + """ + Inputs: + campaignId: represents campaign id for which user wants to fetch payouts of + Returns: + - List of GetAffiliatePayoutsResponse + """ + return await self.apis.get( + SERVICE_URLS["GROWTH"]["AFFILIATE_PAYOUTS"], + {"campaignId": campaignId}, + True + ) + + async def get_affiliate_referee_details(self,params:GetAffiliateRefereeDetailsRequest): + """ + Inputs: + params: GetAffiliateRefereeDetailsRequest + Returns: + - GetAffiliateRefereeDetailsRequestGetAffiliatePayoutsResponse + """ + return await self.apis.get( + SERVICE_URLS["GROWTH"]["AFFILIATE_REFEREE_DETAILS"], + params, + True + ) + + async def get_affiliate_referee_count(self,campaignId:int): + """ + Inputs: + campaignId: represents campaign id for which user wants to fetch referee count of + Returns: + - GetAffiliateRefereeCountResponse + """ + return await self.apis.get( + SERVICE_URLS["GROWTH"]["AFFILIATE_REFEREE_DETAILS"], + {"campaignId": campaignId}, + True + ) + + async def get_user_rewards_history(self,params:GetUserRewardsHistoryRequest): + """ + Inputs: + params: GetUserRewardsHistoryRequest + Returns: + - GetUserRewardsHistoryResponse + """ + return await self.apis.get( + SERVICE_URLS["GROWTH"]["USER_REWARDS_HISTORY"], + params, + True + ) + + async def get_user_rewards_summary(self): + """ + Returns: + - List of GetUserRewardsSummaryResponse + """ + return await self.apis.get( + SERVICE_URLS["GROWTH"]["USER_REWARDS_SUMMARY"], + {}, + True + ) + + async def get_trade_and_earn_rewards_overview(self,campaignId:int): + """ + Inputs: + campaignId: represents campaign id for which user wants to fetch rewards overview of + Returns: + - GetTradeAndEarnRewardsOverviewResponse + """ + return await self.apis.get( + SERVICE_URLS["GROWTH"]["REWARDS_OVERVIEW"], + {"campaignId": campaignId}, + True + ) + + async def get_trade_and_earn_rewards_detail(self,params:GetTradeAndEarnRewardsDetailRequest): + """ + Inputs: + params: GetTradeAndEarnRewardsDetailRequest + Returns: + - GetTradeAndEarnRewardsDetailResponse + """ + return await self.apis.get( + SERVICE_URLS["GROWTH"]["REWARDS_DETAILS"], + params, + True + ) + + async def get_total_historical_trading_rewards(self): + """ + Returns: + - GetTotalHistoricalTradingRewardsResponse + """ + return await self.apis.get( + SERVICE_URLS["GROWTH"]["TOTAL_HISTORICAL_TRADING_REWARDS"], + {}, + True + ) + + async def get_maker_rewards_summary(self): + """ + Returns: + - GetMakerRewardsSummaryResponse + """ + return await self.apis.get( + SERVICE_URLS["GROWTH"]["MAKER_REWARDS_SUMMARY"], + {}, + True + ) + + async def get_maker_reward_details(self,params:GetMakerRewardDetailsRequest): + """ + Inputs: + params: GetMakerRewardDetailsRequest + Returns: + - GetMakerRewardDetailsResponse + """ + return await self.apis.get( + SERVICE_URLS["GROWTH"]["MAKER_REWARDS_DETAILS"], + params, + True + ) + + async def get_user_white_list_status_for_market_maker(self): + """ + Returns: + - GetUserWhiteListStatusForMarkeMaker + """ + return await self.apis.get( + SERVICE_URLS["GROWTH"]["MAKER_WHITELIST_STATUS"], + {}, + True + ) + async def close_connections(self): # close aio http connection await self.apis.close_session() diff --git a/src/bluefin_v2_client/constants.py b/src/bluefin_v2_client/constants.py index eb0e4bf..860eab3 100644 --- a/src/bluefin_v2_client/constants.py +++ b/src/bluefin_v2_client/constants.py @@ -69,6 +69,24 @@ "FUNDING_HISTORY": "/userFundingHistory", "CANCEL_ON_DISCONNECT": "/dms-countdown", }, + "GROWTH": { + "REFERRER_INFO": "/growth/getReferrerInfo", + "CAMPAIGN_DETAILS": "/growth/campaignDetails", + "CAMPAIGN_REWARDS": "/growth/campaignRewards", + "AFFILIATE_PAYOUTS": "/growth/affiliate/payouts", + "AFFILIATE_REFEREE_DETAILS": "/growth/affiliate/refereeDetails", + "AFFILIATE_REFEREES_COUNT": "/growth/affiliate/refereesCount", + "USER_REWARDS_HISTORY": "/growth/userRewards/history", + "USER_REWARDS_SUMMARY": "/growth/userRewards/summary", + "REWARDS_OVERVIEW": "/growth/tradeAndEarn/rewardsOverview", + "REWARDS_DETAILS": "/growth/tradeAndEarn/rewardsDetail", + "TOTAL_HISTORICAL_TRADING_REWARDS": "/growth/tradeAndEarn/totalHistoricalTradingRewards", + "MAKER_REWARDS_SUMMARY": "/growth/marketMaker/maker-rewards-summary", + "MAKER_REWARDS_DETAILS": "/growth/marketMaker/maker-rewards-detail", + "MAKER_WHITELIST_STATUS": "/growth/marketMaker/whitelist-status", + "GENERATE_CODE": "/growth/generateCode", + "LINK_REFERRED_USER": "/growth/linkReferredUser" + }, "ORDERS": { "ORDERS": "/orders", "ORDERS_HASH": "/orders/hash", diff --git a/src/bluefin_v2_client/interfaces.py b/src/bluefin_v2_client/interfaces.py index 22fabd8..cdd4cd7 100644 --- a/src/bluefin_v2_client/interfaces.py +++ b/src/bluefin_v2_client/interfaces.py @@ -240,3 +240,181 @@ class FailedCountDownResetResponse(TypedDict): class PostTimerResponse(TypedDict): acceptedToReset: List[str] failedReset: List[FailedCountDownResetResponse] + + +class GenerateReferralCodeRequest(TypedDict): + referralCode: str + campaignId: int + +class GenerateReferralCodeResponse(TypedDict): + referralAddress: str + referralCode: str + message: str + +class LinkReferredUserRequest(TypedDict): + referralCode: str + campaignId: int + +class LinkReferredUserResponse(TypedDict): + referralCode: str + refereeAddress: str + campaignId: int + message: str + +class GetReferrerInfoResponse(TypedDict): + isReferee: bool + + +class CampaignDetailsConfig(TypedDict): + cashShare: str + tokenShare: str + shareOfFees: str + refereeDiscount: str + +class GetCampaignDetailsResponse(TypedDict): + id: str + campaignName: str + parentCampaignName: str + startDate: str + endDate: str + isActive: bool + epochDurationSeconds: int + config: CampaignDetailsConfig + createdAt: str + updatedAt: str + +class GetCampaignRewardsResponse(TypedDict): + campaignName: str + campaignConfig: CampaignDetailsConfig + cashReward: str + tokenReward: str + +class GetAffiliatePayoutsResponse(TypedDict): + epStartDate: str + epEndDate: str + isActive: bool + totalReferralFees: str + cashReward: str + tokenReward: str + epochNumber: str + +class GetAffiliateRefereeDetailsRequest(TypedDict): + campaignId: int + pageNumber: int + pageSize: int + +class AffiliateRefereeDetailsData(TypedDict): + userAddress: str + lastTraded: str + dateJoined: str + feesPaid: str + +class GetAffiliateRefereeDetailsResponse(TypedDict): + data: List[AffiliateRefereeDetailsData] + nextCursor: int + isMoreDataAvailable: bool + + +class GetAffiliateRefereeCountResponse(TypedDict): + referralCode: str + referralCount: int + + +class GetUserRewardsHistoryRequest(TypedDict): + pageSize: int + cursor: int + +class UserRewardsHistoryData(TypedDict): + programName: str + parentProgramName: str + startDate: str + endDate: str + cashReward: str + tokenReward: str + isActive: bool + cursor: str + epochNumber: str + +class GetUserRewardsHistoryResponse(TypedDict): + data: List[UserRewardsHistoryData] + nextCursor: int + isMoreDataAvailable: bool + +class RewardsSummaryData(TypedDict): + campaignName: str + totalCashReward: str + totalTokenReward: str + +class GetUserRewardsSummaryResponse(TypedDict): + totalTokenReward: str + totalCashReward: str + campaignData: List[RewardsSummaryData] + +class GetTradeAndEarnRewardsOverviewResponse(TypedDict): + totalHistoricalRewards: str + totalActiveRewards: str + totalFeePaid: str + latestEpochNumber: str + latestEpochStart: int + latestEpochEnd: int + latestEpochTotalFee: str + latestEpochTotalRewards: str + + +class GetTradeAndEarnRewardsDetailRequest(TypedDict): + campaignId: int + pageSize: int + cursor: int + +class TradeAndEarnRewardsDetailData(TypedDict): + tradingRewards: str + feePaid: str + cursor: str + id: int + isActive: bool + startDate: str + endDate: str + epochNumber: str + +class GetTradeAndEarnRewardsDetailResponse(TypedDict): + data: List[TradeAndEarnRewardsDetailData] + nextCursor: str + isMoreDataAvailable: bool + +class GetTotalHistoricalTradingRewardsResponse(TypedDict): + totalTokenRewards: str + +class GetMakerRewardsSummaryResponse(TypedDict): + latestEpochStart: int + latestEpochEnd: int + latestEpochNumber: str + latestEpochTotalRewards: str + totalActiveRewards: str + totalHistoricalRewards: str + +class GetMakerRewardDetailsRequest(TypedDict): + symbol: str + pageSize: int + cursor: int + + +class MakerRewardDetailsData(TypedDict): + latestEpochNumber: str + status: str + makerVolume: str + volumePercentage: str + rewardPoolPercentage: str + makerRewards: str + startDate: str + endDate: str + cursor: str + liquidityScore: str # come if symbol provided in request + uptimePercentage: str # come if symbol provided in request + +class GetMakerRewardDetailsResponse(TypedDict): + data: List[MakerRewardDetailsData] + nextCursor: int + isMoreDataAvailable: bool + +class GetUserWhiteListStatusForMarkeMakerResponse(TypedDict): + isWhitelist: bool From 8a5fc44bfbb8a53723df679a187b3ae9d43a6db8 Mon Sep 17 00:00:00 2001 From: Nida Karim Ali Date: Sat, 16 Sep 2023 13:44:05 +0500 Subject: [PATCH 2/2] updated version --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index c5ec2cb..567e2d5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "bluefin_v2_client" -version = "2.5.1" +version = "2.6.0" description = "Library to interact with Bluefin exchange protocol including its off-chain api-gateway and on-chain contracts" readme = "README.md" requires-python = ">=3.8"