diff --git a/Makefile b/Makefile index a4e4936d784..862c3ef38c0 100644 --- a/Makefile +++ b/Makefile @@ -13,6 +13,18 @@ proto-gen: @echo "Generating Protobuf files" @$(protoImage) sh ./protocol/scripts/protocgen.sh +proto-clean: + @rm -rf ./proto/.proto-export + @rm -rf ./.proto-export + +proto-gen-clean: + @echo "Cleaning old artifacts" + @rm -rf ./proto/.proto-export + @rm -rf ./.proto-export + @echo "Generating Protobuf files" + @$(protoImage) sh ./protocol/scripts/protocgen.sh + @cd proto && make proto-export-v4-proto-js + proto-check-bc-breaking: @rm -rf ./.proto-export @$(protoImage) buf breaking --against .git#branch=$$(git merge-base HEAD origin/main) diff --git a/indexer/packages/postgres/src/db/migrations/migration_files/20250423144330_add_twap_fields_to_orders_and_fills_table.ts b/indexer/packages/postgres/src/db/migrations/migration_files/20250423144330_add_twap_fields_to_orders_and_fills_table.ts new file mode 100644 index 00000000000..33c69aab65c --- /dev/null +++ b/indexer/packages/postgres/src/db/migrations/migration_files/20250423144330_add_twap_fields_to_orders_and_fills_table.ts @@ -0,0 +1,71 @@ +import * as Knex from 'knex'; + +import { formatAlterTableEnumSql } from '../helpers'; + +export async function up(knex: Knex): Promise { + await knex.schema.alterTable('orders', (table) => { + table.string('duration').nullable(); + table.string('interval').nullable(); + table.string('priceTolerance').nullable(); + }); + + await knex.raw(formatAlterTableEnumSql( + 'orders', + 'type', + [ + 'LIMIT', + 'MARKET', + 'STOP_LIMIT', + 'STOP_MARKET', + 'TRAILING_STOP', + 'TAKE_PROFIT', + 'TAKE_PROFIT_MARKET', + 'LIQUIDATED', + 'LIQUIDATION', + 'HARD_TRADE', + 'FAILED_HARD_TRADE', + 'TRANSFER_PLACEHOLDER', + 'TWAP', + 'TWAP_SUBORDER', + ], + )); + + await knex.raw(formatAlterTableEnumSql( + 'fills', + 'type', + ['LIMIT', 'LIQUIDATED', 'LIQUIDATION', 'DELEVERAGED', 'OFFSETTING', 'TWAP_SUBORDER'], + )); +} + +export async function down(knex: Knex): Promise { + await knex.schema.alterTable('orders', (table) => { + table.dropColumn('duration'); + table.dropColumn('interval'); + table.dropColumn('priceTolerance'); + }); + + await knex.raw(formatAlterTableEnumSql( + 'orders', + 'type', + [ + 'LIMIT', + 'MARKET', + 'STOP_LIMIT', + 'STOP_MARKET', + 'TRAILING_STOP', + 'TAKE_PROFIT', + 'TAKE_PROFIT_MARKET', + 'LIQUIDATED', + 'LIQUIDATION', + 'HARD_TRADE', + 'FAILED_HARD_TRADE', + 'TRANSFER_PLACEHOLDER', + ], + )); + + await knex.raw(formatAlterTableEnumSql( + 'fills', + 'type', + ['LIMIT', 'LIQUIDATED', 'LIQUIDATION', 'DELEVERAGED', 'OFFSETTING'], + )); +} diff --git a/indexer/packages/postgres/src/lib/protocol-translations.ts b/indexer/packages/postgres/src/lib/protocol-translations.ts index ba98992faf6..01395573512 100644 --- a/indexer/packages/postgres/src/lib/protocol-translations.ts +++ b/indexer/packages/postgres/src/lib/protocol-translations.ts @@ -1,10 +1,17 @@ -import { bytesToBigInt } from '@dydxprotocol-indexer/v4-proto-parser'; import { + bytesToBigInt, + ORDER_FLAG_CONDITIONAL, + ORDER_FLAG_LONG_TERM, + ORDER_FLAG_SHORT_TERM, + ORDER_FLAG_TWAP, + ORDER_FLAG_TWAP_SUBORDER, +} from '@dydxprotocol-indexer/v4-proto-parser'; +import { + ClobPairStatus, IndexerOrder, + IndexerOrder_ConditionType, IndexerOrder_Side, IndexerOrder_TimeInForce, - IndexerOrder_ConditionType, - ClobPairStatus, } from '@dydxprotocol-indexer/v4-protos'; import Big from 'big.js'; import { DateTime } from 'luxon'; @@ -64,6 +71,9 @@ const ORDER_TYPE_TO_CONDITION_TYPE_MAP: Record>> 3) { + case 1: + message.maximum_30dAttributableVolumePerReferredUserQuoteQuantums = (reader.uint64() as Long); + break; + + case 2: + message.refereeMinimumFeeTierIdx = reader.uint32(); + break; + + case 3: + message.maximum_30dAffiliateRevenuePerReferredUserQuoteQuantums = (reader.uint64() as Long); + break; + + default: + reader.skipType(tag & 7); + break; + } + } + + return message; + }, + + fromPartial(object: DeepPartial): AffiliateParameters { + const message = createBaseAffiliateParameters(); + message.maximum_30dAttributableVolumePerReferredUserQuoteQuantums = object.maximum_30dAttributableVolumePerReferredUserQuoteQuantums !== undefined && object.maximum_30dAttributableVolumePerReferredUserQuoteQuantums !== null ? Long.fromValue(object.maximum_30dAttributableVolumePerReferredUserQuoteQuantums) : Long.UZERO; + message.refereeMinimumFeeTierIdx = object.refereeMinimumFeeTierIdx ?? 0; + message.maximum_30dAffiliateRevenuePerReferredUserQuoteQuantums = object.maximum_30dAffiliateRevenuePerReferredUserQuoteQuantums !== undefined && object.maximum_30dAffiliateRevenuePerReferredUserQuoteQuantums !== null ? Long.fromValue(object.maximum_30dAffiliateRevenuePerReferredUserQuoteQuantums) : Long.UZERO; + return message; + } + +}; + +function createBaseAffiliateOverrides(): AffiliateOverrides { + return { + addresses: [] + }; +} + +export const AffiliateOverrides = { + encode(message: AffiliateOverrides, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + for (const v of message.addresses) { + writer.uint32(10).string(v!); + } + + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): AffiliateOverrides { + const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseAffiliateOverrides(); + + while (reader.pos < end) { + const tag = reader.uint32(); + + switch (tag >>> 3) { + case 1: + message.addresses.push(reader.string()); + break; + + default: + reader.skipType(tag & 7); + break; + } + } + + return message; + }, + + fromPartial(object: DeepPartial): AffiliateOverrides { + const message = createBaseAffiliateOverrides(); + message.addresses = object.addresses?.map(e => e) || []; + return message; + } + }; \ No newline at end of file diff --git a/indexer/packages/v4-protos/src/codegen/dydxprotocol/affiliates/genesis.ts b/indexer/packages/v4-protos/src/codegen/dydxprotocol/affiliates/genesis.ts index 17ec53fdf64..285720a4054 100644 --- a/indexer/packages/v4-protos/src/codegen/dydxprotocol/affiliates/genesis.ts +++ b/indexer/packages/v4-protos/src/codegen/dydxprotocol/affiliates/genesis.ts @@ -1,4 +1,4 @@ -import { AffiliateTiers, AffiliateTiersSDKType } from "./affiliates"; +import { AffiliateTiers, AffiliateTiersSDKType, AffiliateParameters, AffiliateParametersSDKType } from "./affiliates"; import * as _m0 from "protobufjs/minimal"; import { DeepPartial } from "../../helpers"; /** GenesisState defines generis state of `x/affiliates` */ @@ -6,17 +6,24 @@ import { DeepPartial } from "../../helpers"; export interface GenesisState { /** The list of affiliate tiers */ affiliateTiers?: AffiliateTiers; + /** The affiliate parameters */ + + affiliateParameters?: AffiliateParameters; } /** GenesisState defines generis state of `x/affiliates` */ export interface GenesisStateSDKType { /** The list of affiliate tiers */ affiliate_tiers?: AffiliateTiersSDKType; + /** The affiliate parameters */ + + affiliate_parameters?: AffiliateParametersSDKType; } function createBaseGenesisState(): GenesisState { return { - affiliateTiers: undefined + affiliateTiers: undefined, + affiliateParameters: undefined }; } @@ -26,6 +33,10 @@ export const GenesisState = { AffiliateTiers.encode(message.affiliateTiers, writer.uint32(10).fork()).ldelim(); } + if (message.affiliateParameters !== undefined) { + AffiliateParameters.encode(message.affiliateParameters, writer.uint32(18).fork()).ldelim(); + } + return writer; }, @@ -42,6 +53,10 @@ export const GenesisState = { message.affiliateTiers = AffiliateTiers.decode(reader, reader.uint32()); break; + case 2: + message.affiliateParameters = AffiliateParameters.decode(reader, reader.uint32()); + break; + default: reader.skipType(tag & 7); break; @@ -54,6 +69,7 @@ export const GenesisState = { fromPartial(object: DeepPartial): GenesisState { const message = createBaseGenesisState(); message.affiliateTiers = object.affiliateTiers !== undefined && object.affiliateTiers !== null ? AffiliateTiers.fromPartial(object.affiliateTiers) : undefined; + message.affiliateParameters = object.affiliateParameters !== undefined && object.affiliateParameters !== null ? AffiliateParameters.fromPartial(object.affiliateParameters) : undefined; return message; } diff --git a/indexer/packages/v4-protos/src/codegen/dydxprotocol/affiliates/query.lcd.ts b/indexer/packages/v4-protos/src/codegen/dydxprotocol/affiliates/query.lcd.ts index 4abc5b7a4a1..110db15600a 100644 --- a/indexer/packages/v4-protos/src/codegen/dydxprotocol/affiliates/query.lcd.ts +++ b/indexer/packages/v4-protos/src/codegen/dydxprotocol/affiliates/query.lcd.ts @@ -1,5 +1,5 @@ import { LCDClient } from "@osmonauts/lcd"; -import { AffiliateInfoRequest, AffiliateInfoResponseSDKType, ReferredByRequest, ReferredByResponseSDKType, AllAffiliateTiersRequest, AllAffiliateTiersResponseSDKType, AffiliateWhitelistRequest, AffiliateWhitelistResponseSDKType } from "./query"; +import { AffiliateInfoRequest, AffiliateInfoResponseSDKType, ReferredByRequest, ReferredByResponseSDKType, AllAffiliateTiersRequest, AllAffiliateTiersResponseSDKType, AffiliateWhitelistRequest, AffiliateWhitelistResponseSDKType, AffiliateParametersRequest, AffiliateParametersResponseSDKType, AffiliateOverridesRequest, AffiliateOverridesResponseSDKType } from "./query"; export class LCDQueryClient { req: LCDClient; @@ -13,6 +13,8 @@ export class LCDQueryClient { this.referredBy = this.referredBy.bind(this); this.allAffiliateTiers = this.allAffiliateTiers.bind(this); this.affiliateWhitelist = this.affiliateWhitelist.bind(this); + this.affiliateParameters = this.affiliateParameters.bind(this); + this.affiliateOverrides = this.affiliateOverrides.bind(this); } /* Query AffiliateInfo returns the affiliate info for a given address. */ @@ -42,5 +44,19 @@ export class LCDQueryClient { const endpoint = `dydxprotocol/affiliates/affiliate_whitelist`; return await this.req.get(endpoint); } + /* Query AffiliateParameters returns the affiliate parameters. */ + + + async affiliateParameters(_params: AffiliateParametersRequest = {}): Promise { + const endpoint = `dydxprotocol/affiliates/affiliate_parameters`; + return await this.req.get(endpoint); + } + /* Query AffiliateOverrides returns the affiliate overrides. */ + + + async affiliateOverrides(_params: AffiliateOverridesRequest = {}): Promise { + const endpoint = `dydxprotocol/affiliates/affiliate_overrides`; + return await this.req.get(endpoint); + } } \ No newline at end of file diff --git a/indexer/packages/v4-protos/src/codegen/dydxprotocol/affiliates/query.rpc.Query.ts b/indexer/packages/v4-protos/src/codegen/dydxprotocol/affiliates/query.rpc.Query.ts index 4815a3585df..4a1ebe24c0d 100644 --- a/indexer/packages/v4-protos/src/codegen/dydxprotocol/affiliates/query.rpc.Query.ts +++ b/indexer/packages/v4-protos/src/codegen/dydxprotocol/affiliates/query.rpc.Query.ts @@ -1,7 +1,7 @@ import { Rpc } from "../../helpers"; import * as _m0 from "protobufjs/minimal"; import { QueryClient, createProtobufRpcClient } from "@cosmjs/stargate"; -import { AffiliateInfoRequest, AffiliateInfoResponse, ReferredByRequest, ReferredByResponse, AllAffiliateTiersRequest, AllAffiliateTiersResponse, AffiliateWhitelistRequest, AffiliateWhitelistResponse } from "./query"; +import { AffiliateInfoRequest, AffiliateInfoResponse, ReferredByRequest, ReferredByResponse, AllAffiliateTiersRequest, AllAffiliateTiersResponse, AffiliateWhitelistRequest, AffiliateWhitelistResponse, AffiliateParametersRequest, AffiliateParametersResponse, AffiliateOverridesRequest, AffiliateOverridesResponse } from "./query"; /** Query defines the gRPC querier service. */ export interface Query { @@ -16,6 +16,12 @@ export interface Query { /** Query AffiliateWhitelist returns the affiliate whitelist. */ affiliateWhitelist(request?: AffiliateWhitelistRequest): Promise; + /** Query AffiliateParameters returns the affiliate parameters. */ + + affiliateParameters(request?: AffiliateParametersRequest): Promise; + /** Query AffiliateOverrides returns the affiliate overrides. */ + + affiliateOverrides(request?: AffiliateOverridesRequest): Promise; } export class QueryClientImpl implements Query { private readonly rpc: Rpc; @@ -26,6 +32,8 @@ export class QueryClientImpl implements Query { this.referredBy = this.referredBy.bind(this); this.allAffiliateTiers = this.allAffiliateTiers.bind(this); this.affiliateWhitelist = this.affiliateWhitelist.bind(this); + this.affiliateParameters = this.affiliateParameters.bind(this); + this.affiliateOverrides = this.affiliateOverrides.bind(this); } affiliateInfo(request: AffiliateInfoRequest): Promise { @@ -52,6 +60,18 @@ export class QueryClientImpl implements Query { return promise.then(data => AffiliateWhitelistResponse.decode(new _m0.Reader(data))); } + affiliateParameters(request: AffiliateParametersRequest = {}): Promise { + const data = AffiliateParametersRequest.encode(request).finish(); + const promise = this.rpc.request("dydxprotocol.affiliates.Query", "AffiliateParameters", data); + return promise.then(data => AffiliateParametersResponse.decode(new _m0.Reader(data))); + } + + affiliateOverrides(request: AffiliateOverridesRequest = {}): Promise { + const data = AffiliateOverridesRequest.encode(request).finish(); + const promise = this.rpc.request("dydxprotocol.affiliates.Query", "AffiliateOverrides", data); + return promise.then(data => AffiliateOverridesResponse.decode(new _m0.Reader(data))); + } + } export const createRpcQueryExtension = (base: QueryClient) => { const rpc = createProtobufRpcClient(base); @@ -71,6 +91,14 @@ export const createRpcQueryExtension = (base: QueryClient) => { affiliateWhitelist(request?: AffiliateWhitelistRequest): Promise { return queryService.affiliateWhitelist(request); + }, + + affiliateParameters(request?: AffiliateParametersRequest): Promise { + return queryService.affiliateParameters(request); + }, + + affiliateOverrides(request?: AffiliateOverridesRequest): Promise { + return queryService.affiliateOverrides(request); } }; diff --git a/indexer/packages/v4-protos/src/codegen/dydxprotocol/affiliates/query.ts b/indexer/packages/v4-protos/src/codegen/dydxprotocol/affiliates/query.ts index 1cdebd2f257..554822559db 100644 --- a/indexer/packages/v4-protos/src/codegen/dydxprotocol/affiliates/query.ts +++ b/indexer/packages/v4-protos/src/codegen/dydxprotocol/affiliates/query.ts @@ -1,4 +1,4 @@ -import { AffiliateTiers, AffiliateTiersSDKType, AffiliateWhitelist, AffiliateWhitelistSDKType } from "./affiliates"; +import { AffiliateTiers, AffiliateTiersSDKType, AffiliateWhitelist, AffiliateWhitelistSDKType, AffiliateOverrides, AffiliateOverridesSDKType, AffiliateParameters, AffiliateParametersSDKType } from "./affiliates"; import * as _m0 from "protobufjs/minimal"; import { DeepPartial } from "../../helpers"; /** @@ -39,10 +39,15 @@ export interface AffiliateInfoResponse { feeSharePpm: number; /** The affiliate's all-time referred volume in quote quantums. */ + /** @deprecated */ + referredVolume: Uint8Array; /** The affiliate's currently staked native tokens (in whole coins). */ stakedAmount: Uint8Array; + /** The affiliate's 30d referred volume in quote quantums. */ + + referredVolume_30dRolling: Uint8Array; } /** * AffiliateInfoResponse is the response type for the Query/AffiliateInfo RPC @@ -66,10 +71,15 @@ export interface AffiliateInfoResponseSDKType { fee_share_ppm: number; /** The affiliate's all-time referred volume in quote quantums. */ + /** @deprecated */ + referred_volume: Uint8Array; /** The affiliate's currently staked native tokens (in whole coins). */ staked_amount: Uint8Array; + /** The affiliate's 30d referred volume in quote quantums. */ + + referred_volume_30d_rolling: Uint8Array; } /** ReferredByRequest is the request type for the Query/ReferredBy RPC method. */ @@ -153,6 +163,62 @@ export interface AffiliateWhitelistResponse { export interface AffiliateWhitelistResponseSDKType { whitelist?: AffiliateWhitelistSDKType; } +/** + * AffiliateOverridesRequest is the request type for the + * Query/AffiliateOverrides RPC method. + */ + +export interface AffiliateOverridesRequest {} +/** + * AffiliateOverridesRequest is the request type for the + * Query/AffiliateOverrides RPC method. + */ + +export interface AffiliateOverridesRequestSDKType {} +/** + * AffiliateOverridesResponse is the response type for the + * Query/AffiliateOverrides RPC method. + */ + +export interface AffiliateOverridesResponse { + overrides?: AffiliateOverrides; +} +/** + * AffiliateOverridesResponse is the response type for the + * Query/AffiliateOverrides RPC method. + */ + +export interface AffiliateOverridesResponseSDKType { + overrides?: AffiliateOverridesSDKType; +} +/** + * AffiliateParametersRequest is the request type for the + * Query/AffiliateParameters RPC method. + */ + +export interface AffiliateParametersRequest {} +/** + * AffiliateParametersRequest is the request type for the + * Query/AffiliateParameters RPC method. + */ + +export interface AffiliateParametersRequestSDKType {} +/** + * AffiliateParametersResponse is the response type for the + * Query/AffiliateParameters RPC method. + */ + +export interface AffiliateParametersResponse { + parameters?: AffiliateParameters; +} +/** + * AffiliateParametersResponse is the response type for the + * Query/AffiliateParameters RPC method. + */ + +export interface AffiliateParametersResponseSDKType { + parameters?: AffiliateParametersSDKType; +} function createBaseAffiliateInfoRequest(): AffiliateInfoRequest { return { @@ -205,7 +271,8 @@ function createBaseAffiliateInfoResponse(): AffiliateInfoResponse { tier: 0, feeSharePpm: 0, referredVolume: new Uint8Array(), - stakedAmount: new Uint8Array() + stakedAmount: new Uint8Array(), + referredVolume_30dRolling: new Uint8Array() }; } @@ -231,6 +298,10 @@ export const AffiliateInfoResponse = { writer.uint32(42).bytes(message.stakedAmount); } + if (message.referredVolume_30dRolling.length !== 0) { + writer.uint32(50).bytes(message.referredVolume_30dRolling); + } + return writer; }, @@ -263,6 +334,10 @@ export const AffiliateInfoResponse = { message.stakedAmount = reader.bytes(); break; + case 6: + message.referredVolume_30dRolling = reader.bytes(); + break; + default: reader.skipType(tag & 7); break; @@ -279,6 +354,7 @@ export const AffiliateInfoResponse = { message.feeSharePpm = object.feeSharePpm ?? 0; message.referredVolume = object.referredVolume ?? new Uint8Array(); message.stakedAmount = object.stakedAmount ?? new Uint8Array(); + message.referredVolume_30dRolling = object.referredVolume_30dRolling ?? new Uint8Array(); return message; } @@ -530,4 +606,162 @@ export const AffiliateWhitelistResponse = { return message; } +}; + +function createBaseAffiliateOverridesRequest(): AffiliateOverridesRequest { + return {}; +} + +export const AffiliateOverridesRequest = { + encode(_: AffiliateOverridesRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): AffiliateOverridesRequest { + const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseAffiliateOverridesRequest(); + + while (reader.pos < end) { + const tag = reader.uint32(); + + switch (tag >>> 3) { + default: + reader.skipType(tag & 7); + break; + } + } + + return message; + }, + + fromPartial(_: DeepPartial): AffiliateOverridesRequest { + const message = createBaseAffiliateOverridesRequest(); + return message; + } + +}; + +function createBaseAffiliateOverridesResponse(): AffiliateOverridesResponse { + return { + overrides: undefined + }; +} + +export const AffiliateOverridesResponse = { + encode(message: AffiliateOverridesResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.overrides !== undefined) { + AffiliateOverrides.encode(message.overrides, writer.uint32(10).fork()).ldelim(); + } + + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): AffiliateOverridesResponse { + const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseAffiliateOverridesResponse(); + + while (reader.pos < end) { + const tag = reader.uint32(); + + switch (tag >>> 3) { + case 1: + message.overrides = AffiliateOverrides.decode(reader, reader.uint32()); + break; + + default: + reader.skipType(tag & 7); + break; + } + } + + return message; + }, + + fromPartial(object: DeepPartial): AffiliateOverridesResponse { + const message = createBaseAffiliateOverridesResponse(); + message.overrides = object.overrides !== undefined && object.overrides !== null ? AffiliateOverrides.fromPartial(object.overrides) : undefined; + return message; + } + +}; + +function createBaseAffiliateParametersRequest(): AffiliateParametersRequest { + return {}; +} + +export const AffiliateParametersRequest = { + encode(_: AffiliateParametersRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): AffiliateParametersRequest { + const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseAffiliateParametersRequest(); + + while (reader.pos < end) { + const tag = reader.uint32(); + + switch (tag >>> 3) { + default: + reader.skipType(tag & 7); + break; + } + } + + return message; + }, + + fromPartial(_: DeepPartial): AffiliateParametersRequest { + const message = createBaseAffiliateParametersRequest(); + return message; + } + +}; + +function createBaseAffiliateParametersResponse(): AffiliateParametersResponse { + return { + parameters: undefined + }; +} + +export const AffiliateParametersResponse = { + encode(message: AffiliateParametersResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.parameters !== undefined) { + AffiliateParameters.encode(message.parameters, writer.uint32(10).fork()).ldelim(); + } + + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): AffiliateParametersResponse { + const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseAffiliateParametersResponse(); + + while (reader.pos < end) { + const tag = reader.uint32(); + + switch (tag >>> 3) { + case 1: + message.parameters = AffiliateParameters.decode(reader, reader.uint32()); + break; + + default: + reader.skipType(tag & 7); + break; + } + } + + return message; + }, + + fromPartial(object: DeepPartial): AffiliateParametersResponse { + const message = createBaseAffiliateParametersResponse(); + message.parameters = object.parameters !== undefined && object.parameters !== null ? AffiliateParameters.fromPartial(object.parameters) : undefined; + return message; + } + }; \ No newline at end of file diff --git a/indexer/packages/v4-protos/src/codegen/dydxprotocol/affiliates/tx.rpc.msg.ts b/indexer/packages/v4-protos/src/codegen/dydxprotocol/affiliates/tx.rpc.msg.ts index da9e7b4ae3f..090ea4c557f 100644 --- a/indexer/packages/v4-protos/src/codegen/dydxprotocol/affiliates/tx.rpc.msg.ts +++ b/indexer/packages/v4-protos/src/codegen/dydxprotocol/affiliates/tx.rpc.msg.ts @@ -1,6 +1,6 @@ import { Rpc } from "../../helpers"; import * as _m0 from "protobufjs/minimal"; -import { MsgRegisterAffiliate, MsgRegisterAffiliateResponse, MsgUpdateAffiliateTiers, MsgUpdateAffiliateTiersResponse, MsgUpdateAffiliateWhitelist, MsgUpdateAffiliateWhitelistResponse } from "./tx"; +import { MsgRegisterAffiliate, MsgRegisterAffiliateResponse, MsgUpdateAffiliateTiers, MsgUpdateAffiliateTiersResponse, MsgUpdateAffiliateWhitelist, MsgUpdateAffiliateWhitelistResponse, MsgUpdateAffiliateParameters, MsgUpdateAffiliateParametersResponse, MsgUpdateAffiliateOverrides, MsgUpdateAffiliateOverridesResponse } from "./tx"; /** Msg defines the Msg service. */ export interface Msg { @@ -12,6 +12,12 @@ export interface Msg { /** UpdateAffiliateWhitelist updates affiliate whitelist */ updateAffiliateWhitelist(request: MsgUpdateAffiliateWhitelist): Promise; + /** UpdateAffiliateParameters updates affiliate program parameters */ + + updateAffiliateParameters(request: MsgUpdateAffiliateParameters): Promise; + /** UpdateAffiliateOverrides updates affiliate overrides */ + + updateAffiliateOverrides(request: MsgUpdateAffiliateOverrides): Promise; } export class MsgClientImpl implements Msg { private readonly rpc: Rpc; @@ -21,6 +27,8 @@ export class MsgClientImpl implements Msg { this.registerAffiliate = this.registerAffiliate.bind(this); this.updateAffiliateTiers = this.updateAffiliateTiers.bind(this); this.updateAffiliateWhitelist = this.updateAffiliateWhitelist.bind(this); + this.updateAffiliateParameters = this.updateAffiliateParameters.bind(this); + this.updateAffiliateOverrides = this.updateAffiliateOverrides.bind(this); } registerAffiliate(request: MsgRegisterAffiliate): Promise { @@ -41,4 +49,16 @@ export class MsgClientImpl implements Msg { return promise.then(data => MsgUpdateAffiliateWhitelistResponse.decode(new _m0.Reader(data))); } + updateAffiliateParameters(request: MsgUpdateAffiliateParameters): Promise { + const data = MsgUpdateAffiliateParameters.encode(request).finish(); + const promise = this.rpc.request("dydxprotocol.affiliates.Msg", "UpdateAffiliateParameters", data); + return promise.then(data => MsgUpdateAffiliateParametersResponse.decode(new _m0.Reader(data))); + } + + updateAffiliateOverrides(request: MsgUpdateAffiliateOverrides): Promise { + const data = MsgUpdateAffiliateOverrides.encode(request).finish(); + const promise = this.rpc.request("dydxprotocol.affiliates.Msg", "UpdateAffiliateOverrides", data); + return promise.then(data => MsgUpdateAffiliateOverridesResponse.decode(new _m0.Reader(data))); + } + } \ No newline at end of file diff --git a/indexer/packages/v4-protos/src/codegen/dydxprotocol/affiliates/tx.ts b/indexer/packages/v4-protos/src/codegen/dydxprotocol/affiliates/tx.ts index 1e6721656ac..55ed818f644 100644 --- a/indexer/packages/v4-protos/src/codegen/dydxprotocol/affiliates/tx.ts +++ b/indexer/packages/v4-protos/src/codegen/dydxprotocol/affiliates/tx.ts @@ -1,4 +1,4 @@ -import { AffiliateTiers, AffiliateTiersSDKType, AffiliateWhitelist, AffiliateWhitelistSDKType } from "./affiliates"; +import { AffiliateTiers, AffiliateTiersSDKType, AffiliateWhitelist, AffiliateWhitelistSDKType, AffiliateParameters, AffiliateParametersSDKType, AffiliateOverrides, AffiliateOverridesSDKType } from "./affiliates"; import * as _m0 from "protobufjs/minimal"; import { DeepPartial } from "../../helpers"; /** Message to register a referee-affiliate relationship */ @@ -73,6 +73,54 @@ export interface MsgUpdateAffiliateWhitelistResponse {} /** Response to MsgUpdateAffiliateWhitelist */ export interface MsgUpdateAffiliateWhitelistResponseSDKType {} +/** Message to update affiliate program parameters */ + +export interface MsgUpdateAffiliateParameters { + /** Authority sending this message. Will be sent by gov */ + authority: string; + /** Affiliate program parameters */ + + affiliateParameters?: AffiliateParameters; +} +/** Message to update affiliate program parameters */ + +export interface MsgUpdateAffiliateParametersSDKType { + /** Authority sending this message. Will be sent by gov */ + authority: string; + /** Affiliate program parameters */ + + affiliate_parameters?: AffiliateParametersSDKType; +} +/** Response to MsgUpdateAffiliateParameters */ + +export interface MsgUpdateAffiliateParametersResponse {} +/** Response to MsgUpdateAffiliateParameters */ + +export interface MsgUpdateAffiliateParametersResponseSDKType {} +/** Message to update affiliate overrides */ + +export interface MsgUpdateAffiliateOverrides { + /** Authority sending this message. Will be sent by gov */ + authority: string; + /** Addresses that automatically have the maximum affiliate tier */ + + affiliateOverrides?: AffiliateOverrides; +} +/** Message to update affiliate overrides */ + +export interface MsgUpdateAffiliateOverridesSDKType { + /** Authority sending this message. Will be sent by gov */ + authority: string; + /** Addresses that automatically have the maximum affiliate tier */ + + affiliate_overrides?: AffiliateOverridesSDKType; +} +/** Response to MsgUpdateAffiliateOverrides */ + +export interface MsgUpdateAffiliateOverridesResponse {} +/** Response to MsgUpdateAffiliateOverrides */ + +export interface MsgUpdateAffiliateOverridesResponseSDKType {} function createBaseMsgRegisterAffiliate(): MsgRegisterAffiliate { return { @@ -339,4 +387,182 @@ export const MsgUpdateAffiliateWhitelistResponse = { return message; } +}; + +function createBaseMsgUpdateAffiliateParameters(): MsgUpdateAffiliateParameters { + return { + authority: "", + affiliateParameters: undefined + }; +} + +export const MsgUpdateAffiliateParameters = { + encode(message: MsgUpdateAffiliateParameters, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.authority !== "") { + writer.uint32(10).string(message.authority); + } + + if (message.affiliateParameters !== undefined) { + AffiliateParameters.encode(message.affiliateParameters, writer.uint32(18).fork()).ldelim(); + } + + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): MsgUpdateAffiliateParameters { + const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseMsgUpdateAffiliateParameters(); + + while (reader.pos < end) { + const tag = reader.uint32(); + + switch (tag >>> 3) { + case 1: + message.authority = reader.string(); + break; + + case 2: + message.affiliateParameters = AffiliateParameters.decode(reader, reader.uint32()); + break; + + default: + reader.skipType(tag & 7); + break; + } + } + + return message; + }, + + fromPartial(object: DeepPartial): MsgUpdateAffiliateParameters { + const message = createBaseMsgUpdateAffiliateParameters(); + message.authority = object.authority ?? ""; + message.affiliateParameters = object.affiliateParameters !== undefined && object.affiliateParameters !== null ? AffiliateParameters.fromPartial(object.affiliateParameters) : undefined; + return message; + } + +}; + +function createBaseMsgUpdateAffiliateParametersResponse(): MsgUpdateAffiliateParametersResponse { + return {}; +} + +export const MsgUpdateAffiliateParametersResponse = { + encode(_: MsgUpdateAffiliateParametersResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): MsgUpdateAffiliateParametersResponse { + const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseMsgUpdateAffiliateParametersResponse(); + + while (reader.pos < end) { + const tag = reader.uint32(); + + switch (tag >>> 3) { + default: + reader.skipType(tag & 7); + break; + } + } + + return message; + }, + + fromPartial(_: DeepPartial): MsgUpdateAffiliateParametersResponse { + const message = createBaseMsgUpdateAffiliateParametersResponse(); + return message; + } + +}; + +function createBaseMsgUpdateAffiliateOverrides(): MsgUpdateAffiliateOverrides { + return { + authority: "", + affiliateOverrides: undefined + }; +} + +export const MsgUpdateAffiliateOverrides = { + encode(message: MsgUpdateAffiliateOverrides, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.authority !== "") { + writer.uint32(10).string(message.authority); + } + + if (message.affiliateOverrides !== undefined) { + AffiliateOverrides.encode(message.affiliateOverrides, writer.uint32(18).fork()).ldelim(); + } + + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): MsgUpdateAffiliateOverrides { + const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseMsgUpdateAffiliateOverrides(); + + while (reader.pos < end) { + const tag = reader.uint32(); + + switch (tag >>> 3) { + case 1: + message.authority = reader.string(); + break; + + case 2: + message.affiliateOverrides = AffiliateOverrides.decode(reader, reader.uint32()); + break; + + default: + reader.skipType(tag & 7); + break; + } + } + + return message; + }, + + fromPartial(object: DeepPartial): MsgUpdateAffiliateOverrides { + const message = createBaseMsgUpdateAffiliateOverrides(); + message.authority = object.authority ?? ""; + message.affiliateOverrides = object.affiliateOverrides !== undefined && object.affiliateOverrides !== null ? AffiliateOverrides.fromPartial(object.affiliateOverrides) : undefined; + return message; + } + +}; + +function createBaseMsgUpdateAffiliateOverridesResponse(): MsgUpdateAffiliateOverridesResponse { + return {}; +} + +export const MsgUpdateAffiliateOverridesResponse = { + encode(_: MsgUpdateAffiliateOverridesResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): MsgUpdateAffiliateOverridesResponse { + const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseMsgUpdateAffiliateOverridesResponse(); + + while (reader.pos < end) { + const tag = reader.uint32(); + + switch (tag >>> 3) { + default: + reader.skipType(tag & 7); + break; + } + } + + return message; + }, + + fromPartial(_: DeepPartial): MsgUpdateAffiliateOverridesResponse { + const message = createBaseMsgUpdateAffiliateOverridesResponse(); + return message; + } + }; \ No newline at end of file diff --git a/indexer/packages/v4-protos/src/codegen/dydxprotocol/bundle.ts b/indexer/packages/v4-protos/src/codegen/dydxprotocol/bundle.ts index 69bef10149e..bf83b08c999 100644 --- a/indexer/packages/v4-protos/src/codegen/dydxprotocol/bundle.ts +++ b/indexer/packages/v4-protos/src/codegen/dydxprotocol/bundle.ts @@ -52,138 +52,141 @@ import * as _55 from "./epochs/genesis"; import * as _56 from "./epochs/query"; import * as _57 from "./feetiers/genesis"; import * as _58 from "./feetiers/params"; -import * as _59 from "./feetiers/query"; -import * as _60 from "./feetiers/tx"; -import * as _61 from "./govplus/genesis"; -import * as _62 from "./govplus/query"; -import * as _63 from "./govplus/tx"; -import * as _64 from "./indexer/events/events"; -import * as _65 from "./indexer/indexer_manager/event"; -import * as _66 from "./indexer/off_chain_updates/off_chain_updates"; -import * as _67 from "./indexer/protocol/v1/clob"; -import * as _68 from "./indexer/protocol/v1/perpetual"; -import * as _69 from "./indexer/protocol/v1/subaccount"; -import * as _70 from "./indexer/protocol/v1/vault"; -import * as _71 from "./indexer/redis/redis_order"; -import * as _72 from "./indexer/shared/removal_reason"; -import * as _73 from "./indexer/socks/messages"; -import * as _74 from "./listing/genesis"; -import * as _75 from "./listing/params"; -import * as _76 from "./listing/query"; -import * as _77 from "./listing/tx"; -import * as _78 from "./perpetuals/genesis"; -import * as _79 from "./perpetuals/params"; -import * as _80 from "./perpetuals/perpetual"; -import * as _81 from "./perpetuals/query"; -import * as _82 from "./perpetuals/tx"; -import * as _83 from "./prices/genesis"; -import * as _84 from "./prices/market_param"; -import * as _85 from "./prices/market_price"; -import * as _86 from "./prices/query"; -import * as _87 from "./prices/streaming"; -import * as _88 from "./prices/tx"; -import * as _89 from "./ratelimit/capacity"; -import * as _90 from "./ratelimit/genesis"; -import * as _91 from "./ratelimit/limit_params"; -import * as _92 from "./ratelimit/pending_send_packet"; -import * as _93 from "./ratelimit/query"; -import * as _94 from "./ratelimit/tx"; -import * as _95 from "./revshare/genesis"; -import * as _96 from "./revshare/params"; -import * as _97 from "./revshare/query"; -import * as _98 from "./revshare/revshare"; -import * as _99 from "./revshare/tx"; -import * as _100 from "./rewards/genesis"; -import * as _101 from "./rewards/params"; -import * as _102 from "./rewards/query"; -import * as _103 from "./rewards/reward_share"; -import * as _104 from "./rewards/tx"; -import * as _105 from "./sending/genesis"; -import * as _106 from "./sending/query"; -import * as _107 from "./sending/transfer"; -import * as _108 from "./sending/tx"; -import * as _109 from "./stats/genesis"; -import * as _110 from "./stats/params"; -import * as _111 from "./stats/query"; -import * as _112 from "./stats/stats"; -import * as _113 from "./stats/tx"; -import * as _114 from "./subaccounts/asset_position"; -import * as _115 from "./subaccounts/genesis"; -import * as _116 from "./subaccounts/perpetual_position"; -import * as _117 from "./subaccounts/query"; -import * as _118 from "./subaccounts/streaming"; -import * as _119 from "./subaccounts/subaccount"; -import * as _120 from "./vault/genesis"; -import * as _121 from "./vault/params"; -import * as _122 from "./vault/query"; -import * as _123 from "./vault/share"; -import * as _124 from "./vault/tx"; -import * as _125 from "./vault/vault"; -import * as _126 from "./vest/genesis"; -import * as _127 from "./vest/query"; -import * as _128 from "./vest/tx"; -import * as _129 from "./vest/vest_entry"; -import * as _137 from "./accountplus/query.lcd"; -import * as _138 from "./affiliates/query.lcd"; -import * as _139 from "./assets/query.lcd"; -import * as _140 from "./blocktime/query.lcd"; -import * as _141 from "./bridge/query.lcd"; -import * as _142 from "./clob/query.lcd"; -import * as _143 from "./delaymsg/query.lcd"; -import * as _144 from "./epochs/query.lcd"; -import * as _145 from "./feetiers/query.lcd"; -import * as _146 from "./listing/query.lcd"; -import * as _147 from "./perpetuals/query.lcd"; -import * as _148 from "./prices/query.lcd"; -import * as _149 from "./ratelimit/query.lcd"; -import * as _150 from "./revshare/query.lcd"; -import * as _151 from "./rewards/query.lcd"; -import * as _152 from "./stats/query.lcd"; -import * as _153 from "./subaccounts/query.lcd"; -import * as _154 from "./vault/query.lcd"; -import * as _155 from "./vest/query.lcd"; -import * as _156 from "./accountplus/query.rpc.Query"; -import * as _157 from "./affiliates/query.rpc.Query"; -import * as _158 from "./assets/query.rpc.Query"; -import * as _159 from "./blocktime/query.rpc.Query"; -import * as _160 from "./bridge/query.rpc.Query"; -import * as _161 from "./clob/query.rpc.Query"; -import * as _162 from "./delaymsg/query.rpc.Query"; -import * as _163 from "./epochs/query.rpc.Query"; -import * as _164 from "./feetiers/query.rpc.Query"; -import * as _165 from "./govplus/query.rpc.Query"; -import * as _166 from "./listing/query.rpc.Query"; -import * as _167 from "./perpetuals/query.rpc.Query"; -import * as _168 from "./prices/query.rpc.Query"; -import * as _169 from "./ratelimit/query.rpc.Query"; -import * as _170 from "./revshare/query.rpc.Query"; -import * as _171 from "./rewards/query.rpc.Query"; -import * as _172 from "./sending/query.rpc.Query"; -import * as _173 from "./stats/query.rpc.Query"; -import * as _174 from "./subaccounts/query.rpc.Query"; -import * as _175 from "./vault/query.rpc.Query"; -import * as _176 from "./vest/query.rpc.Query"; -import * as _177 from "./accountplus/tx.rpc.msg"; -import * as _178 from "./affiliates/tx.rpc.msg"; -import * as _179 from "./blocktime/tx.rpc.msg"; -import * as _180 from "./bridge/tx.rpc.msg"; -import * as _181 from "./clob/tx.rpc.msg"; -import * as _182 from "./delaymsg/tx.rpc.msg"; -import * as _183 from "./feetiers/tx.rpc.msg"; -import * as _184 from "./govplus/tx.rpc.msg"; -import * as _185 from "./listing/tx.rpc.msg"; -import * as _186 from "./perpetuals/tx.rpc.msg"; -import * as _187 from "./prices/tx.rpc.msg"; -import * as _188 from "./ratelimit/tx.rpc.msg"; -import * as _189 from "./revshare/tx.rpc.msg"; -import * as _190 from "./rewards/tx.rpc.msg"; -import * as _191 from "./sending/tx.rpc.msg"; -import * as _192 from "./stats/tx.rpc.msg"; -import * as _193 from "./vault/tx.rpc.msg"; -import * as _194 from "./vest/tx.rpc.msg"; -import * as _195 from "./lcd"; -import * as _196 from "./rpc.query"; -import * as _197 from "./rpc.tx"; +import * as _59 from "./feetiers/per_market_fee_discount"; +import * as _60 from "./feetiers/query"; +import * as _61 from "./feetiers/staking_tier"; +import * as _62 from "./feetiers/tx"; +import * as _63 from "./govplus/genesis"; +import * as _64 from "./govplus/query"; +import * as _65 from "./govplus/tx"; +import * as _66 from "./indexer/events/events"; +import * as _67 from "./indexer/indexer_manager/event"; +import * as _68 from "./indexer/off_chain_updates/off_chain_updates"; +import * as _69 from "./indexer/protocol/v1/clob"; +import * as _70 from "./indexer/protocol/v1/perpetual"; +import * as _71 from "./indexer/protocol/v1/subaccount"; +import * as _72 from "./indexer/protocol/v1/vault"; +import * as _73 from "./indexer/redis/redis_order"; +import * as _74 from "./indexer/shared/removal_reason"; +import * as _75 from "./indexer/socks/messages"; +import * as _76 from "./listing/genesis"; +import * as _77 from "./listing/params"; +import * as _78 from "./listing/query"; +import * as _79 from "./listing/tx"; +import * as _80 from "./perpetuals/genesis"; +import * as _81 from "./perpetuals/params"; +import * as _82 from "./perpetuals/perpetual"; +import * as _83 from "./perpetuals/query"; +import * as _84 from "./perpetuals/tx"; +import * as _85 from "./prices/genesis"; +import * as _86 from "./prices/market_param"; +import * as _87 from "./prices/market_price"; +import * as _88 from "./prices/query"; +import * as _89 from "./prices/streaming"; +import * as _90 from "./prices/tx"; +import * as _91 from "./ratelimit/capacity"; +import * as _92 from "./ratelimit/genesis"; +import * as _93 from "./ratelimit/limit_params"; +import * as _94 from "./ratelimit/pending_send_packet"; +import * as _95 from "./ratelimit/query"; +import * as _96 from "./ratelimit/tx"; +import * as _97 from "./revshare/genesis"; +import * as _98 from "./revshare/params"; +import * as _99 from "./revshare/query"; +import * as _100 from "./revshare/revshare"; +import * as _101 from "./revshare/tx"; +import * as _102 from "./rewards/genesis"; +import * as _103 from "./rewards/params"; +import * as _104 from "./rewards/query"; +import * as _105 from "./rewards/reward_share"; +import * as _106 from "./rewards/tx"; +import * as _107 from "./sending/genesis"; +import * as _108 from "./sending/query"; +import * as _109 from "./sending/transfer"; +import * as _110 from "./sending/tx"; +import * as _111 from "./stats/genesis"; +import * as _112 from "./stats/params"; +import * as _113 from "./stats/query"; +import * as _114 from "./stats/stats"; +import * as _115 from "./stats/tx"; +import * as _116 from "./subaccounts/asset_position"; +import * as _117 from "./subaccounts/genesis"; +import * as _118 from "./subaccounts/leverage"; +import * as _119 from "./subaccounts/perpetual_position"; +import * as _120 from "./subaccounts/query"; +import * as _121 from "./subaccounts/streaming"; +import * as _122 from "./subaccounts/subaccount"; +import * as _123 from "./vault/genesis"; +import * as _124 from "./vault/params"; +import * as _125 from "./vault/query"; +import * as _126 from "./vault/share"; +import * as _127 from "./vault/tx"; +import * as _128 from "./vault/vault"; +import * as _129 from "./vest/genesis"; +import * as _130 from "./vest/query"; +import * as _131 from "./vest/tx"; +import * as _132 from "./vest/vest_entry"; +import * as _140 from "./accountplus/query.lcd"; +import * as _141 from "./affiliates/query.lcd"; +import * as _142 from "./assets/query.lcd"; +import * as _143 from "./blocktime/query.lcd"; +import * as _144 from "./bridge/query.lcd"; +import * as _145 from "./clob/query.lcd"; +import * as _146 from "./delaymsg/query.lcd"; +import * as _147 from "./epochs/query.lcd"; +import * as _148 from "./feetiers/query.lcd"; +import * as _149 from "./listing/query.lcd"; +import * as _150 from "./perpetuals/query.lcd"; +import * as _151 from "./prices/query.lcd"; +import * as _152 from "./ratelimit/query.lcd"; +import * as _153 from "./revshare/query.lcd"; +import * as _154 from "./rewards/query.lcd"; +import * as _155 from "./stats/query.lcd"; +import * as _156 from "./subaccounts/query.lcd"; +import * as _157 from "./vault/query.lcd"; +import * as _158 from "./vest/query.lcd"; +import * as _159 from "./accountplus/query.rpc.Query"; +import * as _160 from "./affiliates/query.rpc.Query"; +import * as _161 from "./assets/query.rpc.Query"; +import * as _162 from "./blocktime/query.rpc.Query"; +import * as _163 from "./bridge/query.rpc.Query"; +import * as _164 from "./clob/query.rpc.Query"; +import * as _165 from "./delaymsg/query.rpc.Query"; +import * as _166 from "./epochs/query.rpc.Query"; +import * as _167 from "./feetiers/query.rpc.Query"; +import * as _168 from "./govplus/query.rpc.Query"; +import * as _169 from "./listing/query.rpc.Query"; +import * as _170 from "./perpetuals/query.rpc.Query"; +import * as _171 from "./prices/query.rpc.Query"; +import * as _172 from "./ratelimit/query.rpc.Query"; +import * as _173 from "./revshare/query.rpc.Query"; +import * as _174 from "./rewards/query.rpc.Query"; +import * as _175 from "./sending/query.rpc.Query"; +import * as _176 from "./stats/query.rpc.Query"; +import * as _177 from "./subaccounts/query.rpc.Query"; +import * as _178 from "./vault/query.rpc.Query"; +import * as _179 from "./vest/query.rpc.Query"; +import * as _180 from "./accountplus/tx.rpc.msg"; +import * as _181 from "./affiliates/tx.rpc.msg"; +import * as _182 from "./blocktime/tx.rpc.msg"; +import * as _183 from "./bridge/tx.rpc.msg"; +import * as _184 from "./clob/tx.rpc.msg"; +import * as _185 from "./delaymsg/tx.rpc.msg"; +import * as _186 from "./feetiers/tx.rpc.msg"; +import * as _187 from "./govplus/tx.rpc.msg"; +import * as _188 from "./listing/tx.rpc.msg"; +import * as _189 from "./perpetuals/tx.rpc.msg"; +import * as _190 from "./prices/tx.rpc.msg"; +import * as _191 from "./ratelimit/tx.rpc.msg"; +import * as _192 from "./revshare/tx.rpc.msg"; +import * as _193 from "./rewards/tx.rpc.msg"; +import * as _194 from "./sending/tx.rpc.msg"; +import * as _195 from "./stats/tx.rpc.msg"; +import * as _196 from "./vault/tx.rpc.msg"; +import * as _197 from "./vest/tx.rpc.msg"; +import * as _198 from "./lcd"; +import * as _199 from "./rpc.query"; +import * as _200 from "./rpc.tx"; export namespace dydxprotocol { export const accountplus = { ..._5, ..._6, @@ -191,33 +194,33 @@ export namespace dydxprotocol { ..._8, ..._9, ..._10, - ..._137, - ..._156, - ..._177 + ..._140, + ..._159, + ..._180 }; export const affiliates = { ..._11, ..._12, ..._13, ..._14, - ..._138, - ..._157, - ..._178 + ..._141, + ..._160, + ..._181 }; export const assets = { ..._15, ..._16, ..._17, ..._18, - ..._139, - ..._158 + ..._142, + ..._161 }; export const blocktime = { ..._19, ..._20, ..._21, ..._22, ..._23, - ..._140, - ..._159, - ..._179 + ..._143, + ..._162, + ..._182 }; export const bridge = { ..._24, ..._25, @@ -225,9 +228,9 @@ export namespace dydxprotocol { ..._27, ..._28, ..._29, - ..._141, - ..._160, - ..._180 + ..._144, + ..._163, + ..._183 }; export const clob = { ..._30, ..._31, @@ -245,9 +248,9 @@ export namespace dydxprotocol { ..._43, ..._44, ..._45, - ..._142, - ..._161, - ..._181 + ..._145, + ..._164, + ..._184 }; export namespace daemons { export const bridge = { ..._46 @@ -262,151 +265,154 @@ export namespace dydxprotocol { ..._51, ..._52, ..._53, - ..._143, - ..._162, - ..._182 + ..._146, + ..._165, + ..._185 }; export const epochs = { ..._54, ..._55, ..._56, - ..._144, - ..._163 + ..._147, + ..._166 }; export const feetiers = { ..._57, ..._58, ..._59, ..._60, - ..._145, - ..._164, - ..._183 - }; - export const govplus = { ..._61, + ..._61, ..._62, - ..._63, - ..._165, - ..._184 + ..._148, + ..._167, + ..._186 + }; + export const govplus = { ..._63, + ..._64, + ..._65, + ..._168, + ..._187 }; export namespace indexer { - export const events = { ..._64 + export const events = { ..._66 }; - export const indexer_manager = { ..._65 + export const indexer_manager = { ..._67 }; - export const off_chain_updates = { ..._66 + export const off_chain_updates = { ..._68 }; export namespace protocol { - export const v1 = { ..._67, - ..._68, - ..._69, - ..._70 + export const v1 = { ..._69, + ..._70, + ..._71, + ..._72 }; } - export const redis = { ..._71 + export const redis = { ..._73 }; - export const shared = { ..._72 + export const shared = { ..._74 }; - export const socks = { ..._73 + export const socks = { ..._75 }; } - export const listing = { ..._74, - ..._75, - ..._76, + export const listing = { ..._76, ..._77, - ..._146, - ..._166, - ..._185 - }; - export const perpetuals = { ..._78, + ..._78, ..._79, - ..._80, + ..._149, + ..._169, + ..._188 + }; + export const perpetuals = { ..._80, ..._81, ..._82, - ..._147, - ..._167, - ..._186 - }; - export const prices = { ..._83, + ..._83, ..._84, - ..._85, + ..._150, + ..._170, + ..._189 + }; + export const prices = { ..._85, ..._86, ..._87, ..._88, - ..._148, - ..._168, - ..._187 - }; - export const ratelimit = { ..._89, + ..._89, ..._90, - ..._91, + ..._151, + ..._171, + ..._190 + }; + export const ratelimit = { ..._91, ..._92, ..._93, ..._94, - ..._149, - ..._169, - ..._188 - }; - export const revshare = { ..._95, + ..._95, ..._96, - ..._97, + ..._152, + ..._172, + ..._191 + }; + export const revshare = { ..._97, ..._98, ..._99, - ..._150, - ..._170, - ..._189 - }; - export const rewards = { ..._100, + ..._100, ..._101, - ..._102, + ..._153, + ..._173, + ..._192 + }; + export const rewards = { ..._102, ..._103, ..._104, - ..._151, - ..._171, - ..._190 - }; - export const sending = { ..._105, + ..._105, ..._106, - ..._107, - ..._108, - ..._172, - ..._191 + ..._154, + ..._174, + ..._193 }; - export const stats = { ..._109, + export const sending = { ..._107, + ..._108, + ..._109, ..._110, - ..._111, + ..._175, + ..._194 + }; + export const stats = { ..._111, ..._112, ..._113, - ..._152, - ..._173, - ..._192 - }; - export const subaccounts = { ..._114, + ..._114, ..._115, - ..._116, + ..._155, + ..._176, + ..._195 + }; + export const subaccounts = { ..._116, ..._117, ..._118, ..._119, - ..._153, - ..._174 - }; - export const vault = { ..._120, + ..._120, ..._121, ..._122, - ..._123, + ..._156, + ..._177 + }; + export const vault = { ..._123, ..._124, ..._125, - ..._154, - ..._175, - ..._193 - }; - export const vest = { ..._126, + ..._126, ..._127, ..._128, - ..._129, - ..._155, - ..._176, - ..._194 + ..._157, + ..._178, + ..._196 }; - export const ClientFactory = { ..._195, - ..._196, + export const vest = { ..._129, + ..._130, + ..._131, + ..._132, + ..._158, + ..._179, ..._197 }; + export const ClientFactory = { ..._198, + ..._199, + ..._200 + }; } \ No newline at end of file diff --git a/indexer/packages/v4-protos/src/codegen/dydxprotocol/clob/block_rate_limit_config.ts b/indexer/packages/v4-protos/src/codegen/dydxprotocol/clob/block_rate_limit_config.ts index 7da63ae44f7..79024e34253 100644 --- a/indexer/packages/v4-protos/src/codegen/dydxprotocol/clob/block_rate_limit_config.ts +++ b/indexer/packages/v4-protos/src/codegen/dydxprotocol/clob/block_rate_limit_config.ts @@ -30,6 +30,16 @@ export interface BlockRateLimitConfiguration { maxShortTermOrderCancellationsPerNBlocks: MaxPerNBlocksRateLimit[]; maxShortTermOrdersAndCancelsPerNBlocks: MaxPerNBlocksRateLimit[]; + /** + * How many leverage update attempts (successful and failed) are allowed for + * an account per N blocks. Note that the rate limits are applied in an AND + * fashion such that a leverage update must pass all rate limit + * configurations. + * + * Specifying 0 values disables this rate limit. + */ + + maxLeverageUpdatesPerNBlocks: MaxPerNBlocksRateLimit[]; } /** Defines the block rate limits for CLOB specific operations. */ @@ -61,6 +71,16 @@ export interface BlockRateLimitConfigurationSDKType { max_short_term_order_cancellations_per_n_blocks: MaxPerNBlocksRateLimitSDKType[]; max_short_term_orders_and_cancels_per_n_blocks: MaxPerNBlocksRateLimitSDKType[]; + /** + * How many leverage update attempts (successful and failed) are allowed for + * an account per N blocks. Note that the rate limits are applied in an AND + * fashion such that a leverage update must pass all rate limit + * configurations. + * + * Specifying 0 values disables this rate limit. + */ + + max_leverage_updates_per_n_blocks: MaxPerNBlocksRateLimitSDKType[]; } /** Defines a rate limit over a specific number of blocks. */ @@ -98,7 +118,8 @@ function createBaseBlockRateLimitConfiguration(): BlockRateLimitConfiguration { maxShortTermOrdersPerNBlocks: [], maxStatefulOrdersPerNBlocks: [], maxShortTermOrderCancellationsPerNBlocks: [], - maxShortTermOrdersAndCancelsPerNBlocks: [] + maxShortTermOrdersAndCancelsPerNBlocks: [], + maxLeverageUpdatesPerNBlocks: [] }; } @@ -120,6 +141,10 @@ export const BlockRateLimitConfiguration = { MaxPerNBlocksRateLimit.encode(v!, writer.uint32(34).fork()).ldelim(); } + for (const v of message.maxLeverageUpdatesPerNBlocks) { + MaxPerNBlocksRateLimit.encode(v!, writer.uint32(42).fork()).ldelim(); + } + return writer; }, @@ -148,6 +173,10 @@ export const BlockRateLimitConfiguration = { message.maxShortTermOrdersAndCancelsPerNBlocks.push(MaxPerNBlocksRateLimit.decode(reader, reader.uint32())); break; + case 5: + message.maxLeverageUpdatesPerNBlocks.push(MaxPerNBlocksRateLimit.decode(reader, reader.uint32())); + break; + default: reader.skipType(tag & 7); break; @@ -163,6 +192,7 @@ export const BlockRateLimitConfiguration = { message.maxStatefulOrdersPerNBlocks = object.maxStatefulOrdersPerNBlocks?.map(e => MaxPerNBlocksRateLimit.fromPartial(e)) || []; message.maxShortTermOrderCancellationsPerNBlocks = object.maxShortTermOrderCancellationsPerNBlocks?.map(e => MaxPerNBlocksRateLimit.fromPartial(e)) || []; message.maxShortTermOrdersAndCancelsPerNBlocks = object.maxShortTermOrdersAndCancelsPerNBlocks?.map(e => MaxPerNBlocksRateLimit.fromPartial(e)) || []; + message.maxLeverageUpdatesPerNBlocks = object.maxLeverageUpdatesPerNBlocks?.map(e => MaxPerNBlocksRateLimit.fromPartial(e)) || []; return message; } diff --git a/indexer/packages/v4-protos/src/codegen/dydxprotocol/clob/query.lcd.ts b/indexer/packages/v4-protos/src/codegen/dydxprotocol/clob/query.lcd.ts index 034cbad3db2..4eae538a656 100644 --- a/indexer/packages/v4-protos/src/codegen/dydxprotocol/clob/query.lcd.ts +++ b/indexer/packages/v4-protos/src/codegen/dydxprotocol/clob/query.lcd.ts @@ -1,6 +1,6 @@ import { setPaginationParams } from "../../helpers"; import { LCDClient } from "@osmonauts/lcd"; -import { QueryGetClobPairRequest, QueryClobPairResponseSDKType, QueryAllClobPairRequest, QueryClobPairAllResponseSDKType, QueryEquityTierLimitConfigurationRequest, QueryEquityTierLimitConfigurationResponseSDKType, QueryBlockRateLimitConfigurationRequest, QueryBlockRateLimitConfigurationResponseSDKType, QueryLiquidationsConfigurationRequest, QueryLiquidationsConfigurationResponseSDKType, QueryNextClobPairIdRequest, QueryNextClobPairIdResponseSDKType } from "./query"; +import { QueryGetClobPairRequest, QueryClobPairResponseSDKType, QueryAllClobPairRequest, QueryClobPairAllResponseSDKType, QueryEquityTierLimitConfigurationRequest, QueryEquityTierLimitConfigurationResponseSDKType, QueryBlockRateLimitConfigurationRequest, QueryBlockRateLimitConfigurationResponseSDKType, QueryLiquidationsConfigurationRequest, QueryLiquidationsConfigurationResponseSDKType, QueryNextClobPairIdRequest, QueryNextClobPairIdResponseSDKType, QueryLeverageRequest, QueryLeverageResponseSDKType } from "./query"; export class LCDQueryClient { req: LCDClient; @@ -16,6 +16,7 @@ export class LCDQueryClient { this.blockRateLimitConfiguration = this.blockRateLimitConfiguration.bind(this); this.liquidationsConfiguration = this.liquidationsConfiguration.bind(this); this.nextClobPairId = this.nextClobPairId.bind(this); + this.leverage = this.leverage.bind(this); } /* Queries a ClobPair by id. */ @@ -69,5 +70,12 @@ export class LCDQueryClient { const endpoint = `dydxprotocol/clob/next_clob_pair_id`; return await this.req.get(endpoint); } + /* Queries leverage for a subaccount. */ + + + async leverage(params: QueryLeverageRequest): Promise { + const endpoint = `dydxprotocol/clob/leverage/${params.owner}/${params.number}`; + return await this.req.get(endpoint); + } } \ No newline at end of file diff --git a/indexer/packages/v4-protos/src/codegen/dydxprotocol/clob/query.rpc.Query.ts b/indexer/packages/v4-protos/src/codegen/dydxprotocol/clob/query.rpc.Query.ts index 5c87afce0f1..b4fc8ac682d 100644 --- a/indexer/packages/v4-protos/src/codegen/dydxprotocol/clob/query.rpc.Query.ts +++ b/indexer/packages/v4-protos/src/codegen/dydxprotocol/clob/query.rpc.Query.ts @@ -1,7 +1,7 @@ import { Rpc } from "../../helpers"; import * as _m0 from "protobufjs/minimal"; import { QueryClient, createProtobufRpcClient } from "@cosmjs/stargate"; -import { QueryGetClobPairRequest, QueryClobPairResponse, QueryAllClobPairRequest, QueryClobPairAllResponse, MevNodeToNodeCalculationRequest, MevNodeToNodeCalculationResponse, QueryEquityTierLimitConfigurationRequest, QueryEquityTierLimitConfigurationResponse, QueryBlockRateLimitConfigurationRequest, QueryBlockRateLimitConfigurationResponse, QueryLiquidationsConfigurationRequest, QueryLiquidationsConfigurationResponse, QueryStatefulOrderRequest, QueryStatefulOrderResponse, QueryNextClobPairIdRequest, QueryNextClobPairIdResponse, StreamOrderbookUpdatesRequest, StreamOrderbookUpdatesResponse } from "./query"; +import { QueryGetClobPairRequest, QueryClobPairResponse, QueryAllClobPairRequest, QueryClobPairAllResponse, MevNodeToNodeCalculationRequest, MevNodeToNodeCalculationResponse, QueryEquityTierLimitConfigurationRequest, QueryEquityTierLimitConfigurationResponse, QueryBlockRateLimitConfigurationRequest, QueryBlockRateLimitConfigurationResponse, QueryLiquidationsConfigurationRequest, QueryLiquidationsConfigurationResponse, QueryStatefulOrderRequest, QueryStatefulOrderResponse, QueryNextClobPairIdRequest, QueryNextClobPairIdResponse, QueryLeverageRequest, QueryLeverageResponse, StreamOrderbookUpdatesRequest, StreamOrderbookUpdatesResponse } from "./query"; /** Query defines the gRPC querier service. */ export interface Query { @@ -28,6 +28,9 @@ export interface Query { /** Queries the next clob pair id. */ nextClobPairId(request?: QueryNextClobPairIdRequest): Promise; + /** Queries leverage for a subaccount. */ + + leverage(request: QueryLeverageRequest): Promise; /** * Streams orderbook updates. Updates contain orderbook data * such as order placements, updates, and fills. @@ -48,6 +51,7 @@ export class QueryClientImpl implements Query { this.liquidationsConfiguration = this.liquidationsConfiguration.bind(this); this.statefulOrder = this.statefulOrder.bind(this); this.nextClobPairId = this.nextClobPairId.bind(this); + this.leverage = this.leverage.bind(this); this.streamOrderbookUpdates = this.streamOrderbookUpdates.bind(this); } @@ -101,6 +105,12 @@ export class QueryClientImpl implements Query { return promise.then(data => QueryNextClobPairIdResponse.decode(new _m0.Reader(data))); } + leverage(request: QueryLeverageRequest): Promise { + const data = QueryLeverageRequest.encode(request).finish(); + const promise = this.rpc.request("dydxprotocol.clob.Query", "Leverage", data); + return promise.then(data => QueryLeverageResponse.decode(new _m0.Reader(data))); + } + streamOrderbookUpdates(request: StreamOrderbookUpdatesRequest): Promise { const data = StreamOrderbookUpdatesRequest.encode(request).finish(); const promise = this.rpc.request("dydxprotocol.clob.Query", "StreamOrderbookUpdates", data); @@ -144,6 +154,10 @@ export const createRpcQueryExtension = (base: QueryClient) => { return queryService.nextClobPairId(request); }, + leverage(request: QueryLeverageRequest): Promise { + return queryService.leverage(request); + }, + streamOrderbookUpdates(request: StreamOrderbookUpdatesRequest): Promise { return queryService.streamOrderbookUpdates(request); } diff --git a/indexer/packages/v4-protos/src/codegen/dydxprotocol/clob/query.ts b/indexer/packages/v4-protos/src/codegen/dydxprotocol/clob/query.ts index ef7bf909526..8163ff0c9c8 100644 --- a/indexer/packages/v4-protos/src/codegen/dydxprotocol/clob/query.ts +++ b/indexer/packages/v4-protos/src/codegen/dydxprotocol/clob/query.ts @@ -264,6 +264,54 @@ export interface QueryNextClobPairIdResponseSDKType { /** QueryNextClobPairIdResponse is a response message for the next clob pair id */ next_clob_pair_id: number; } +/** QueryLeverageRequest is a request message for Leverage. */ + +export interface QueryLeverageRequest { + /** The address of the wallet that owns the subaccount. */ + owner: string; + /** The unique number of the subaccount for the owner. */ + + number: number; +} +/** QueryLeverageRequest is a request message for Leverage. */ + +export interface QueryLeverageRequestSDKType { + /** The address of the wallet that owns the subaccount. */ + owner: string; + /** The unique number of the subaccount for the owner. */ + + number: number; +} +/** QueryLeverageResponse is a response message that contains the leverage map. */ + +export interface QueryLeverageResponse { + /** List of clob pair leverage settings. */ + clobPairLeverage: ClobPairLeverageInfo[]; +} +/** QueryLeverageResponse is a response message that contains the leverage map. */ + +export interface QueryLeverageResponseSDKType { + /** List of clob pair leverage settings. */ + clob_pair_leverage: ClobPairLeverageInfoSDKType[]; +} +/** ClobPairLeverageInfo represents the leverage setting for a single clob pair. */ + +export interface ClobPairLeverageInfo { + /** The clob pair ID. */ + clobPairId: number; + /** The user selected imf. */ + + customImfPpm: number; +} +/** ClobPairLeverageInfo represents the leverage setting for a single clob pair. */ + +export interface ClobPairLeverageInfoSDKType { + /** The clob pair ID. */ + clob_pair_id: number; + /** The user selected imf. */ + + custom_imf_ppm: number; +} /** * StreamOrderbookUpdatesRequest is a request message for the * StreamOrderbookUpdates method. @@ -1308,6 +1356,161 @@ export const QueryNextClobPairIdResponse = { }; +function createBaseQueryLeverageRequest(): QueryLeverageRequest { + return { + owner: "", + number: 0 + }; +} + +export const QueryLeverageRequest = { + encode(message: QueryLeverageRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.owner !== "") { + writer.uint32(10).string(message.owner); + } + + if (message.number !== 0) { + writer.uint32(16).uint32(message.number); + } + + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): QueryLeverageRequest { + const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseQueryLeverageRequest(); + + while (reader.pos < end) { + const tag = reader.uint32(); + + switch (tag >>> 3) { + case 1: + message.owner = reader.string(); + break; + + case 2: + message.number = reader.uint32(); + break; + + default: + reader.skipType(tag & 7); + break; + } + } + + return message; + }, + + fromPartial(object: DeepPartial): QueryLeverageRequest { + const message = createBaseQueryLeverageRequest(); + message.owner = object.owner ?? ""; + message.number = object.number ?? 0; + return message; + } + +}; + +function createBaseQueryLeverageResponse(): QueryLeverageResponse { + return { + clobPairLeverage: [] + }; +} + +export const QueryLeverageResponse = { + encode(message: QueryLeverageResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + for (const v of message.clobPairLeverage) { + ClobPairLeverageInfo.encode(v!, writer.uint32(10).fork()).ldelim(); + } + + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): QueryLeverageResponse { + const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseQueryLeverageResponse(); + + while (reader.pos < end) { + const tag = reader.uint32(); + + switch (tag >>> 3) { + case 1: + message.clobPairLeverage.push(ClobPairLeverageInfo.decode(reader, reader.uint32())); + break; + + default: + reader.skipType(tag & 7); + break; + } + } + + return message; + }, + + fromPartial(object: DeepPartial): QueryLeverageResponse { + const message = createBaseQueryLeverageResponse(); + message.clobPairLeverage = object.clobPairLeverage?.map(e => ClobPairLeverageInfo.fromPartial(e)) || []; + return message; + } + +}; + +function createBaseClobPairLeverageInfo(): ClobPairLeverageInfo { + return { + clobPairId: 0, + customImfPpm: 0 + }; +} + +export const ClobPairLeverageInfo = { + encode(message: ClobPairLeverageInfo, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.clobPairId !== 0) { + writer.uint32(8).uint32(message.clobPairId); + } + + if (message.customImfPpm !== 0) { + writer.uint32(16).uint32(message.customImfPpm); + } + + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): ClobPairLeverageInfo { + const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseClobPairLeverageInfo(); + + while (reader.pos < end) { + const tag = reader.uint32(); + + switch (tag >>> 3) { + case 1: + message.clobPairId = reader.uint32(); + break; + + case 2: + message.customImfPpm = reader.uint32(); + break; + + default: + reader.skipType(tag & 7); + break; + } + } + + return message; + }, + + fromPartial(object: DeepPartial): ClobPairLeverageInfo { + const message = createBaseClobPairLeverageInfo(); + message.clobPairId = object.clobPairId ?? 0; + message.customImfPpm = object.customImfPpm ?? 0; + return message; + } + +}; + function createBaseStreamOrderbookUpdatesRequest(): StreamOrderbookUpdatesRequest { return { clobPairId: [], diff --git a/indexer/packages/v4-protos/src/codegen/dydxprotocol/clob/tx.rpc.msg.ts b/indexer/packages/v4-protos/src/codegen/dydxprotocol/clob/tx.rpc.msg.ts index 92704d7e264..815b80be641 100644 --- a/indexer/packages/v4-protos/src/codegen/dydxprotocol/clob/tx.rpc.msg.ts +++ b/indexer/packages/v4-protos/src/codegen/dydxprotocol/clob/tx.rpc.msg.ts @@ -1,6 +1,6 @@ import { Rpc } from "../../helpers"; import * as _m0 from "protobufjs/minimal"; -import { MsgProposedOperations, MsgProposedOperationsResponse, MsgPlaceOrder, MsgPlaceOrderResponse, MsgCancelOrder, MsgCancelOrderResponse, MsgBatchCancel, MsgBatchCancelResponse, MsgCreateClobPair, MsgCreateClobPairResponse, MsgUpdateClobPair, MsgUpdateClobPairResponse, MsgUpdateEquityTierLimitConfiguration, MsgUpdateEquityTierLimitConfigurationResponse, MsgUpdateBlockRateLimitConfiguration, MsgUpdateBlockRateLimitConfigurationResponse, MsgUpdateLiquidationsConfig, MsgUpdateLiquidationsConfigResponse } from "./tx"; +import { MsgProposedOperations, MsgProposedOperationsResponse, MsgPlaceOrder, MsgPlaceOrderResponse, MsgCancelOrder, MsgCancelOrderResponse, MsgBatchCancel, MsgBatchCancelResponse, MsgCreateClobPair, MsgCreateClobPairResponse, MsgUpdateClobPair, MsgUpdateClobPairResponse, MsgUpdateEquityTierLimitConfiguration, MsgUpdateEquityTierLimitConfigurationResponse, MsgUpdateBlockRateLimitConfiguration, MsgUpdateBlockRateLimitConfigurationResponse, MsgUpdateLiquidationsConfig, MsgUpdateLiquidationsConfigResponse, MsgUpdateLeverage, MsgUpdateLeverageResponse } from "./tx"; /** Msg defines the Msg service. */ export interface Msg { @@ -44,6 +44,12 @@ export interface Msg { /** UpdateLiquidationsConfig updates the liquidations configuration in state. */ updateLiquidationsConfig(request: MsgUpdateLiquidationsConfig): Promise; + /** + * UpdateLeverage allows accounts to update their desired leverage for + * clob pairs. + */ + + updateLeverage(request: MsgUpdateLeverage): Promise; } export class MsgClientImpl implements Msg { private readonly rpc: Rpc; @@ -59,6 +65,7 @@ export class MsgClientImpl implements Msg { this.updateEquityTierLimitConfiguration = this.updateEquityTierLimitConfiguration.bind(this); this.updateBlockRateLimitConfiguration = this.updateBlockRateLimitConfiguration.bind(this); this.updateLiquidationsConfig = this.updateLiquidationsConfig.bind(this); + this.updateLeverage = this.updateLeverage.bind(this); } proposedOperations(request: MsgProposedOperations): Promise { @@ -115,4 +122,10 @@ export class MsgClientImpl implements Msg { return promise.then(data => MsgUpdateLiquidationsConfigResponse.decode(new _m0.Reader(data))); } + updateLeverage(request: MsgUpdateLeverage): Promise { + const data = MsgUpdateLeverage.encode(request).finish(); + const promise = this.rpc.request("dydxprotocol.clob.Msg", "UpdateLeverage", data); + return promise.then(data => MsgUpdateLeverageResponse.decode(new _m0.Reader(data))); + } + } \ No newline at end of file diff --git a/indexer/packages/v4-protos/src/codegen/dydxprotocol/clob/tx.ts b/indexer/packages/v4-protos/src/codegen/dydxprotocol/clob/tx.ts index 09a1c058fcc..85f2ebc96e0 100644 --- a/indexer/packages/v4-protos/src/codegen/dydxprotocol/clob/tx.ts +++ b/indexer/packages/v4-protos/src/codegen/dydxprotocol/clob/tx.ts @@ -382,6 +382,54 @@ export interface MsgUpdateLiquidationsConfigResponse {} /** MsgUpdateLiquidationsConfig is the Msg/LiquidationsConfig response type. */ export interface MsgUpdateLiquidationsConfigResponseSDKType {} +/** LeverageEntry represents a single clob pair leverage setting. */ + +export interface LeverageEntry { + /** The clob pair ID. */ + clobPairId: number; + /** The user selected imf. */ + + customImfPpm: number; +} +/** LeverageEntry represents a single clob pair leverage setting. */ + +export interface LeverageEntrySDKType { + /** The clob pair ID. */ + clob_pair_id: number; + /** The user selected imf. */ + + custom_imf_ppm: number; +} +/** + * MsgUpdateLeverage is a request type used for updating leverage for + * clob pairs. + */ + +export interface MsgUpdateLeverage { + /** The subaccount that is updating leverage. */ + subaccountId?: SubaccountId; + /** List of clob pair leverage settings. */ + + clobPairLeverage: LeverageEntry[]; +} +/** + * MsgUpdateLeverage is a request type used for updating leverage for + * clob pairs. + */ + +export interface MsgUpdateLeverageSDKType { + /** The subaccount that is updating leverage. */ + subaccount_id?: SubaccountIdSDKType; + /** List of clob pair leverage settings. */ + + clob_pair_leverage: LeverageEntrySDKType[]; +} +/** MsgUpdateLeverageResponse is a response type used for updating leverage. */ + +export interface MsgUpdateLeverageResponse {} +/** MsgUpdateLeverageResponse is a response type used for updating leverage. */ + +export interface MsgUpdateLeverageResponseSDKType {} function createBaseMsgCreateClobPair(): MsgCreateClobPair { return { @@ -1335,4 +1383,148 @@ export const MsgUpdateLiquidationsConfigResponse = { return message; } +}; + +function createBaseLeverageEntry(): LeverageEntry { + return { + clobPairId: 0, + customImfPpm: 0 + }; +} + +export const LeverageEntry = { + encode(message: LeverageEntry, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.clobPairId !== 0) { + writer.uint32(8).uint32(message.clobPairId); + } + + if (message.customImfPpm !== 0) { + writer.uint32(16).uint32(message.customImfPpm); + } + + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): LeverageEntry { + const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseLeverageEntry(); + + while (reader.pos < end) { + const tag = reader.uint32(); + + switch (tag >>> 3) { + case 1: + message.clobPairId = reader.uint32(); + break; + + case 2: + message.customImfPpm = reader.uint32(); + break; + + default: + reader.skipType(tag & 7); + break; + } + } + + return message; + }, + + fromPartial(object: DeepPartial): LeverageEntry { + const message = createBaseLeverageEntry(); + message.clobPairId = object.clobPairId ?? 0; + message.customImfPpm = object.customImfPpm ?? 0; + return message; + } + +}; + +function createBaseMsgUpdateLeverage(): MsgUpdateLeverage { + return { + subaccountId: undefined, + clobPairLeverage: [] + }; +} + +export const MsgUpdateLeverage = { + encode(message: MsgUpdateLeverage, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.subaccountId !== undefined) { + SubaccountId.encode(message.subaccountId, writer.uint32(10).fork()).ldelim(); + } + + for (const v of message.clobPairLeverage) { + LeverageEntry.encode(v!, writer.uint32(18).fork()).ldelim(); + } + + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): MsgUpdateLeverage { + const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseMsgUpdateLeverage(); + + while (reader.pos < end) { + const tag = reader.uint32(); + + switch (tag >>> 3) { + case 1: + message.subaccountId = SubaccountId.decode(reader, reader.uint32()); + break; + + case 2: + message.clobPairLeverage.push(LeverageEntry.decode(reader, reader.uint32())); + break; + + default: + reader.skipType(tag & 7); + break; + } + } + + return message; + }, + + fromPartial(object: DeepPartial): MsgUpdateLeverage { + const message = createBaseMsgUpdateLeverage(); + message.subaccountId = object.subaccountId !== undefined && object.subaccountId !== null ? SubaccountId.fromPartial(object.subaccountId) : undefined; + message.clobPairLeverage = object.clobPairLeverage?.map(e => LeverageEntry.fromPartial(e)) || []; + return message; + } + +}; + +function createBaseMsgUpdateLeverageResponse(): MsgUpdateLeverageResponse { + return {}; +} + +export const MsgUpdateLeverageResponse = { + encode(_: MsgUpdateLeverageResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): MsgUpdateLeverageResponse { + const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseMsgUpdateLeverageResponse(); + + while (reader.pos < end) { + const tag = reader.uint32(); + + switch (tag >>> 3) { + default: + reader.skipType(tag & 7); + break; + } + } + + return message; + }, + + fromPartial(_: DeepPartial): MsgUpdateLeverageResponse { + const message = createBaseMsgUpdateLeverageResponse(); + return message; + } + }; \ No newline at end of file diff --git a/indexer/packages/v4-protos/src/codegen/dydxprotocol/feetiers/genesis.ts b/indexer/packages/v4-protos/src/codegen/dydxprotocol/feetiers/genesis.ts index 2c4a82d76cc..61ac9fc41f4 100644 --- a/indexer/packages/v4-protos/src/codegen/dydxprotocol/feetiers/genesis.ts +++ b/indexer/packages/v4-protos/src/codegen/dydxprotocol/feetiers/genesis.ts @@ -1,4 +1,5 @@ import { PerpetualFeeParams, PerpetualFeeParamsSDKType } from "./params"; +import { StakingTier, StakingTierSDKType } from "./staking_tier"; import * as _m0 from "protobufjs/minimal"; import { DeepPartial } from "../../helpers"; /** GenesisState defines the feetiers module's genesis state. */ @@ -6,17 +7,24 @@ import { DeepPartial } from "../../helpers"; export interface GenesisState { /** The parameters for perpetual fees. */ params?: PerpetualFeeParams; + /** The staking tiers. */ + + stakingTiers: StakingTier[]; } /** GenesisState defines the feetiers module's genesis state. */ export interface GenesisStateSDKType { /** The parameters for perpetual fees. */ params?: PerpetualFeeParamsSDKType; + /** The staking tiers. */ + + staking_tiers: StakingTierSDKType[]; } function createBaseGenesisState(): GenesisState { return { - params: undefined + params: undefined, + stakingTiers: [] }; } @@ -26,6 +34,10 @@ export const GenesisState = { PerpetualFeeParams.encode(message.params, writer.uint32(10).fork()).ldelim(); } + for (const v of message.stakingTiers) { + StakingTier.encode(v!, writer.uint32(18).fork()).ldelim(); + } + return writer; }, @@ -42,6 +54,10 @@ export const GenesisState = { message.params = PerpetualFeeParams.decode(reader, reader.uint32()); break; + case 2: + message.stakingTiers.push(StakingTier.decode(reader, reader.uint32())); + break; + default: reader.skipType(tag & 7); break; @@ -54,6 +70,7 @@ export const GenesisState = { fromPartial(object: DeepPartial): GenesisState { const message = createBaseGenesisState(); message.params = object.params !== undefined && object.params !== null ? PerpetualFeeParams.fromPartial(object.params) : undefined; + message.stakingTiers = object.stakingTiers?.map(e => StakingTier.fromPartial(e)) || []; return message; } diff --git a/indexer/packages/v4-protos/src/codegen/dydxprotocol/feetiers/per_market_fee_discount.ts b/indexer/packages/v4-protos/src/codegen/dydxprotocol/feetiers/per_market_fee_discount.ts new file mode 100644 index 00000000000..71a9e921ac5 --- /dev/null +++ b/indexer/packages/v4-protos/src/codegen/dydxprotocol/feetiers/per_market_fee_discount.ts @@ -0,0 +1,122 @@ +import { Timestamp } from "../../google/protobuf/timestamp"; +import * as _m0 from "protobufjs/minimal"; +import { toTimestamp, fromTimestamp, DeepPartial } from "../../helpers"; +/** + * PerMarketFeeDiscountParams defines a fee discount period for a specific CLOB + * pair + */ + +export interface PerMarketFeeDiscountParams { + /** The CLOB Pair ID this fee holiday applies to */ + clobPairId: number; + /** Start time */ + + startTime?: Date; + /** End time */ + + endTime?: Date; + /** + * Percentage of normal fee to charge during the period (in parts per + * million) 0 = completely free (100% discount) 500000 = charge 50% of normal + * fee (50% discount) 1000000 = charge 100% of normal fee (no discount) + */ + + chargePpm: number; +} +/** + * PerMarketFeeDiscountParams defines a fee discount period for a specific CLOB + * pair + */ + +export interface PerMarketFeeDiscountParamsSDKType { + /** The CLOB Pair ID this fee holiday applies to */ + clob_pair_id: number; + /** Start time */ + + start_time?: Date; + /** End time */ + + end_time?: Date; + /** + * Percentage of normal fee to charge during the period (in parts per + * million) 0 = completely free (100% discount) 500000 = charge 50% of normal + * fee (50% discount) 1000000 = charge 100% of normal fee (no discount) + */ + + charge_ppm: number; +} + +function createBasePerMarketFeeDiscountParams(): PerMarketFeeDiscountParams { + return { + clobPairId: 0, + startTime: undefined, + endTime: undefined, + chargePpm: 0 + }; +} + +export const PerMarketFeeDiscountParams = { + encode(message: PerMarketFeeDiscountParams, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.clobPairId !== 0) { + writer.uint32(8).uint32(message.clobPairId); + } + + if (message.startTime !== undefined) { + Timestamp.encode(toTimestamp(message.startTime), writer.uint32(18).fork()).ldelim(); + } + + if (message.endTime !== undefined) { + Timestamp.encode(toTimestamp(message.endTime), writer.uint32(26).fork()).ldelim(); + } + + if (message.chargePpm !== 0) { + writer.uint32(32).uint32(message.chargePpm); + } + + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): PerMarketFeeDiscountParams { + const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBasePerMarketFeeDiscountParams(); + + while (reader.pos < end) { + const tag = reader.uint32(); + + switch (tag >>> 3) { + case 1: + message.clobPairId = reader.uint32(); + break; + + case 2: + message.startTime = fromTimestamp(Timestamp.decode(reader, reader.uint32())); + break; + + case 3: + message.endTime = fromTimestamp(Timestamp.decode(reader, reader.uint32())); + break; + + case 4: + message.chargePpm = reader.uint32(); + break; + + default: + reader.skipType(tag & 7); + break; + } + } + + return message; + }, + + fromPartial(object: DeepPartial): PerMarketFeeDiscountParams { + const message = createBasePerMarketFeeDiscountParams(); + message.clobPairId = object.clobPairId ?? 0; + message.startTime = object.startTime ?? undefined; + message.endTime = object.endTime ?? undefined; + message.chargePpm = object.chargePpm ?? 0; + return message; + } + +}; \ No newline at end of file diff --git a/indexer/packages/v4-protos/src/codegen/dydxprotocol/feetiers/query.lcd.ts b/indexer/packages/v4-protos/src/codegen/dydxprotocol/feetiers/query.lcd.ts index aeb4b45253f..664924adae6 100644 --- a/indexer/packages/v4-protos/src/codegen/dydxprotocol/feetiers/query.lcd.ts +++ b/indexer/packages/v4-protos/src/codegen/dydxprotocol/feetiers/query.lcd.ts @@ -1,5 +1,5 @@ import { LCDClient } from "@osmonauts/lcd"; -import { QueryPerpetualFeeParamsRequest, QueryPerpetualFeeParamsResponseSDKType, QueryUserFeeTierRequest, QueryUserFeeTierResponseSDKType } from "./query"; +import { QueryPerpetualFeeParamsRequest, QueryPerpetualFeeParamsResponseSDKType, QueryUserFeeTierRequest, QueryUserFeeTierResponseSDKType, QueryPerMarketFeeDiscountParamsRequest, QueryPerMarketFeeDiscountParamsResponseSDKType, QueryAllMarketFeeDiscountParamsRequest, QueryAllMarketFeeDiscountParamsResponseSDKType, QueryStakingTiersRequest, QueryStakingTiersResponseSDKType, QueryUserStakingTierRequest, QueryUserStakingTierResponseSDKType } from "./query"; export class LCDQueryClient { req: LCDClient; @@ -11,6 +11,10 @@ export class LCDQueryClient { this.req = requestClient; this.perpetualFeeParams = this.perpetualFeeParams.bind(this); this.userFeeTier = this.userFeeTier.bind(this); + this.perMarketFeeDiscountParams = this.perMarketFeeDiscountParams.bind(this); + this.allMarketFeeDiscountParams = this.allMarketFeeDiscountParams.bind(this); + this.stakingTiers = this.stakingTiers.bind(this); + this.userStakingTier = this.userStakingTier.bind(this); } /* Queries the PerpetualFeeParams. */ @@ -34,5 +38,34 @@ export class LCDQueryClient { const endpoint = `dydxprotocol/v4/feetiers/user_fee_tier`; return await this.req.get(endpoint, options); } + /* PerMarketFeeDiscountParams queries fee discount parameters for a + specific market/CLOB pair. */ + + + async perMarketFeeDiscountParams(params: QueryPerMarketFeeDiscountParamsRequest): Promise { + const endpoint = `dydxprotocol/v4/feetiers/market_fee_discount_params/${params.clobPairId}`; + return await this.req.get(endpoint); + } + /* AllMarketFeeDiscountParams queries all per-market fee discount parameters. */ + + + async allMarketFeeDiscountParams(_params: QueryAllMarketFeeDiscountParamsRequest = {}): Promise { + const endpoint = `dydxprotocol/v4/feetiers/market_fee_discount_params`; + return await this.req.get(endpoint); + } + /* Get all staking tiers */ + + + async stakingTiers(_params: QueryStakingTiersRequest = {}): Promise { + const endpoint = `dydxprotocol/v4/feetiers/staking_tiers`; + return await this.req.get(endpoint); + } + /* Get user's current staked amount and staking tier */ + + + async userStakingTier(params: QueryUserStakingTierRequest): Promise { + const endpoint = `dydxprotocol/v4/feetiers/user_staking_tier/${params.address}`; + return await this.req.get(endpoint); + } } \ No newline at end of file diff --git a/indexer/packages/v4-protos/src/codegen/dydxprotocol/feetiers/query.rpc.Query.ts b/indexer/packages/v4-protos/src/codegen/dydxprotocol/feetiers/query.rpc.Query.ts index c1cdb60ba9e..208e2da7e83 100644 --- a/indexer/packages/v4-protos/src/codegen/dydxprotocol/feetiers/query.rpc.Query.ts +++ b/indexer/packages/v4-protos/src/codegen/dydxprotocol/feetiers/query.rpc.Query.ts @@ -1,7 +1,7 @@ import { Rpc } from "../../helpers"; import * as _m0 from "protobufjs/minimal"; import { QueryClient, createProtobufRpcClient } from "@cosmjs/stargate"; -import { QueryPerpetualFeeParamsRequest, QueryPerpetualFeeParamsResponse, QueryUserFeeTierRequest, QueryUserFeeTierResponse } from "./query"; +import { QueryPerpetualFeeParamsRequest, QueryPerpetualFeeParamsResponse, QueryUserFeeTierRequest, QueryUserFeeTierResponse, QueryPerMarketFeeDiscountParamsRequest, QueryPerMarketFeeDiscountParamsResponse, QueryAllMarketFeeDiscountParamsRequest, QueryAllMarketFeeDiscountParamsResponse, QueryStakingTiersRequest, QueryStakingTiersResponse, QueryUserStakingTierRequest, QueryUserStakingTierResponse } from "./query"; /** Query defines the gRPC querier service. */ export interface Query { @@ -10,6 +10,21 @@ export interface Query { /** Queries a user's fee tier */ userFeeTier(request: QueryUserFeeTierRequest): Promise; + /** + * PerMarketFeeDiscountParams queries fee discount parameters for a + * specific market/CLOB pair. + */ + + perMarketFeeDiscountParams(request: QueryPerMarketFeeDiscountParamsRequest): Promise; + /** AllMarketFeeDiscountParams queries all per-market fee discount parameters. */ + + allMarketFeeDiscountParams(request?: QueryAllMarketFeeDiscountParamsRequest): Promise; + /** Get all staking tiers */ + + stakingTiers(request?: QueryStakingTiersRequest): Promise; + /** Get user's current staked amount and staking tier */ + + userStakingTier(request: QueryUserStakingTierRequest): Promise; } export class QueryClientImpl implements Query { private readonly rpc: Rpc; @@ -18,6 +33,10 @@ export class QueryClientImpl implements Query { this.rpc = rpc; this.perpetualFeeParams = this.perpetualFeeParams.bind(this); this.userFeeTier = this.userFeeTier.bind(this); + this.perMarketFeeDiscountParams = this.perMarketFeeDiscountParams.bind(this); + this.allMarketFeeDiscountParams = this.allMarketFeeDiscountParams.bind(this); + this.stakingTiers = this.stakingTiers.bind(this); + this.userStakingTier = this.userStakingTier.bind(this); } perpetualFeeParams(request: QueryPerpetualFeeParamsRequest = {}): Promise { @@ -32,6 +51,30 @@ export class QueryClientImpl implements Query { return promise.then(data => QueryUserFeeTierResponse.decode(new _m0.Reader(data))); } + perMarketFeeDiscountParams(request: QueryPerMarketFeeDiscountParamsRequest): Promise { + const data = QueryPerMarketFeeDiscountParamsRequest.encode(request).finish(); + const promise = this.rpc.request("dydxprotocol.feetiers.Query", "PerMarketFeeDiscountParams", data); + return promise.then(data => QueryPerMarketFeeDiscountParamsResponse.decode(new _m0.Reader(data))); + } + + allMarketFeeDiscountParams(request: QueryAllMarketFeeDiscountParamsRequest = {}): Promise { + const data = QueryAllMarketFeeDiscountParamsRequest.encode(request).finish(); + const promise = this.rpc.request("dydxprotocol.feetiers.Query", "AllMarketFeeDiscountParams", data); + return promise.then(data => QueryAllMarketFeeDiscountParamsResponse.decode(new _m0.Reader(data))); + } + + stakingTiers(request: QueryStakingTiersRequest = {}): Promise { + const data = QueryStakingTiersRequest.encode(request).finish(); + const promise = this.rpc.request("dydxprotocol.feetiers.Query", "StakingTiers", data); + return promise.then(data => QueryStakingTiersResponse.decode(new _m0.Reader(data))); + } + + userStakingTier(request: QueryUserStakingTierRequest): Promise { + const data = QueryUserStakingTierRequest.encode(request).finish(); + const promise = this.rpc.request("dydxprotocol.feetiers.Query", "UserStakingTier", data); + return promise.then(data => QueryUserStakingTierResponse.decode(new _m0.Reader(data))); + } + } export const createRpcQueryExtension = (base: QueryClient) => { const rpc = createProtobufRpcClient(base); @@ -43,6 +86,22 @@ export const createRpcQueryExtension = (base: QueryClient) => { userFeeTier(request: QueryUserFeeTierRequest): Promise { return queryService.userFeeTier(request); + }, + + perMarketFeeDiscountParams(request: QueryPerMarketFeeDiscountParamsRequest): Promise { + return queryService.perMarketFeeDiscountParams(request); + }, + + allMarketFeeDiscountParams(request?: QueryAllMarketFeeDiscountParamsRequest): Promise { + return queryService.allMarketFeeDiscountParams(request); + }, + + stakingTiers(request?: QueryStakingTiersRequest): Promise { + return queryService.stakingTiers(request); + }, + + userStakingTier(request: QueryUserStakingTierRequest): Promise { + return queryService.userStakingTier(request); } }; diff --git a/indexer/packages/v4-protos/src/codegen/dydxprotocol/feetiers/query.ts b/indexer/packages/v4-protos/src/codegen/dydxprotocol/feetiers/query.ts index 1e137d72406..b66a415c9fc 100644 --- a/indexer/packages/v4-protos/src/codegen/dydxprotocol/feetiers/query.ts +++ b/indexer/packages/v4-protos/src/codegen/dydxprotocol/feetiers/query.ts @@ -1,4 +1,6 @@ import { PerpetualFeeParams, PerpetualFeeParamsSDKType, PerpetualFeeTier, PerpetualFeeTierSDKType } from "./params"; +import { PerMarketFeeDiscountParams, PerMarketFeeDiscountParamsSDKType } from "./per_market_fee_discount"; +import { StakingTier, StakingTierSDKType } from "./staking_tier"; import * as _m0 from "protobufjs/minimal"; import { DeepPartial } from "../../helpers"; /** @@ -53,6 +55,138 @@ export interface QueryUserFeeTierResponseSDKType { index: number; tier?: PerpetualFeeTierSDKType; } +/** + * QueryPerMarketFeeDiscountParamsRequest is the request type for the + * Query/PerMarketFeeDiscountParams RPC method. + */ + +export interface QueryPerMarketFeeDiscountParamsRequest { + /** + * QueryPerMarketFeeDiscountParamsRequest is the request type for the + * Query/PerMarketFeeDiscountParams RPC method. + */ + clobPairId: number; +} +/** + * QueryPerMarketFeeDiscountParamsRequest is the request type for the + * Query/PerMarketFeeDiscountParams RPC method. + */ + +export interface QueryPerMarketFeeDiscountParamsRequestSDKType { + /** + * QueryPerMarketFeeDiscountParamsRequest is the request type for the + * Query/PerMarketFeeDiscountParams RPC method. + */ + clob_pair_id: number; +} +/** + * QueryPerMarketFeeDiscountParamsResponse is the response type for the + * Query/PerMarketFeeDiscountParams RPC method. + */ + +export interface QueryPerMarketFeeDiscountParamsResponse { + params?: PerMarketFeeDiscountParams; +} +/** + * QueryPerMarketFeeDiscountParamsResponse is the response type for the + * Query/PerMarketFeeDiscountParams RPC method. + */ + +export interface QueryPerMarketFeeDiscountParamsResponseSDKType { + params?: PerMarketFeeDiscountParamsSDKType; +} +/** + * QueryAllMarketFeeDiscountParamsRequest is the request type for the + * Query/AllMarketFeeDiscountParams RPC method. + */ + +export interface QueryAllMarketFeeDiscountParamsRequest {} +/** + * QueryAllMarketFeeDiscountParamsRequest is the request type for the + * Query/AllMarketFeeDiscountParams RPC method. + */ + +export interface QueryAllMarketFeeDiscountParamsRequestSDKType {} +/** + * QueryAllMarketFeeDiscountParamsResponse is the response type for the + * Query/AllMarketFeeDiscountParams RPC method. + */ + +export interface QueryAllMarketFeeDiscountParamsResponse { + params: PerMarketFeeDiscountParams[]; +} +/** + * QueryAllMarketFeeDiscountParamsResponse is the response type for the + * Query/AllMarketFeeDiscountParams RPC method. + */ + +export interface QueryAllMarketFeeDiscountParamsResponseSDKType { + params: PerMarketFeeDiscountParamsSDKType[]; +} +/** QueryStakingTiersRequest is a request type for the StakingTiers RPC method. */ + +export interface QueryStakingTiersRequest {} +/** QueryStakingTiersRequest is a request type for the StakingTiers RPC method. */ + +export interface QueryStakingTiersRequestSDKType {} +/** QueryStakingTiersResponse is a response type for the StakingTiers RPC method. */ + +export interface QueryStakingTiersResponse { + /** QueryStakingTiersResponse is a response type for the StakingTiers RPC method. */ + stakingTiers: StakingTier[]; +} +/** QueryStakingTiersResponse is a response type for the StakingTiers RPC method. */ + +export interface QueryStakingTiersResponseSDKType { + /** QueryStakingTiersResponse is a response type for the StakingTiers RPC method. */ + staking_tiers: StakingTierSDKType[]; +} +/** + * QueryUserStakingTierRequest is a request type for the UserStakingTier RPC + * method. + */ + +export interface QueryUserStakingTierRequest { + address: string; +} +/** + * QueryUserStakingTierRequest is a request type for the UserStakingTier RPC + * method. + */ + +export interface QueryUserStakingTierRequestSDKType { + address: string; +} +/** + * QueryUserStakingTierResponse is a response type for the UserStakingTier RPC + * method. + */ + +export interface QueryUserStakingTierResponse { + /** The user's current fee tier name */ + feeTierName: string; + /** Amount of tokens staked by the user (in base units) */ + + stakedBaseTokens: Uint8Array; + /** The discount percentage in ppm that user qualifies for */ + + discountPpm: number; +} +/** + * QueryUserStakingTierResponse is a response type for the UserStakingTier RPC + * method. + */ + +export interface QueryUserStakingTierResponseSDKType { + /** The user's current fee tier name */ + fee_tier_name: string; + /** Amount of tokens staked by the user (in base units) */ + + staked_base_tokens: Uint8Array; + /** The discount percentage in ppm that user qualifies for */ + + discount_ppm: number; +} function createBaseQueryPerpetualFeeParamsRequest(): QueryPerpetualFeeParamsRequest { return {}; @@ -231,4 +365,362 @@ export const QueryUserFeeTierResponse = { return message; } +}; + +function createBaseQueryPerMarketFeeDiscountParamsRequest(): QueryPerMarketFeeDiscountParamsRequest { + return { + clobPairId: 0 + }; +} + +export const QueryPerMarketFeeDiscountParamsRequest = { + encode(message: QueryPerMarketFeeDiscountParamsRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.clobPairId !== 0) { + writer.uint32(8).uint32(message.clobPairId); + } + + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): QueryPerMarketFeeDiscountParamsRequest { + const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseQueryPerMarketFeeDiscountParamsRequest(); + + while (reader.pos < end) { + const tag = reader.uint32(); + + switch (tag >>> 3) { + case 1: + message.clobPairId = reader.uint32(); + break; + + default: + reader.skipType(tag & 7); + break; + } + } + + return message; + }, + + fromPartial(object: DeepPartial): QueryPerMarketFeeDiscountParamsRequest { + const message = createBaseQueryPerMarketFeeDiscountParamsRequest(); + message.clobPairId = object.clobPairId ?? 0; + return message; + } + +}; + +function createBaseQueryPerMarketFeeDiscountParamsResponse(): QueryPerMarketFeeDiscountParamsResponse { + return { + params: undefined + }; +} + +export const QueryPerMarketFeeDiscountParamsResponse = { + encode(message: QueryPerMarketFeeDiscountParamsResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.params !== undefined) { + PerMarketFeeDiscountParams.encode(message.params, writer.uint32(10).fork()).ldelim(); + } + + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): QueryPerMarketFeeDiscountParamsResponse { + const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseQueryPerMarketFeeDiscountParamsResponse(); + + while (reader.pos < end) { + const tag = reader.uint32(); + + switch (tag >>> 3) { + case 1: + message.params = PerMarketFeeDiscountParams.decode(reader, reader.uint32()); + break; + + default: + reader.skipType(tag & 7); + break; + } + } + + return message; + }, + + fromPartial(object: DeepPartial): QueryPerMarketFeeDiscountParamsResponse { + const message = createBaseQueryPerMarketFeeDiscountParamsResponse(); + message.params = object.params !== undefined && object.params !== null ? PerMarketFeeDiscountParams.fromPartial(object.params) : undefined; + return message; + } + +}; + +function createBaseQueryAllMarketFeeDiscountParamsRequest(): QueryAllMarketFeeDiscountParamsRequest { + return {}; +} + +export const QueryAllMarketFeeDiscountParamsRequest = { + encode(_: QueryAllMarketFeeDiscountParamsRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): QueryAllMarketFeeDiscountParamsRequest { + const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseQueryAllMarketFeeDiscountParamsRequest(); + + while (reader.pos < end) { + const tag = reader.uint32(); + + switch (tag >>> 3) { + default: + reader.skipType(tag & 7); + break; + } + } + + return message; + }, + + fromPartial(_: DeepPartial): QueryAllMarketFeeDiscountParamsRequest { + const message = createBaseQueryAllMarketFeeDiscountParamsRequest(); + return message; + } + +}; + +function createBaseQueryAllMarketFeeDiscountParamsResponse(): QueryAllMarketFeeDiscountParamsResponse { + return { + params: [] + }; +} + +export const QueryAllMarketFeeDiscountParamsResponse = { + encode(message: QueryAllMarketFeeDiscountParamsResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + for (const v of message.params) { + PerMarketFeeDiscountParams.encode(v!, writer.uint32(10).fork()).ldelim(); + } + + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): QueryAllMarketFeeDiscountParamsResponse { + const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseQueryAllMarketFeeDiscountParamsResponse(); + + while (reader.pos < end) { + const tag = reader.uint32(); + + switch (tag >>> 3) { + case 1: + message.params.push(PerMarketFeeDiscountParams.decode(reader, reader.uint32())); + break; + + default: + reader.skipType(tag & 7); + break; + } + } + + return message; + }, + + fromPartial(object: DeepPartial): QueryAllMarketFeeDiscountParamsResponse { + const message = createBaseQueryAllMarketFeeDiscountParamsResponse(); + message.params = object.params?.map(e => PerMarketFeeDiscountParams.fromPartial(e)) || []; + return message; + } + +}; + +function createBaseQueryStakingTiersRequest(): QueryStakingTiersRequest { + return {}; +} + +export const QueryStakingTiersRequest = { + encode(_: QueryStakingTiersRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): QueryStakingTiersRequest { + const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseQueryStakingTiersRequest(); + + while (reader.pos < end) { + const tag = reader.uint32(); + + switch (tag >>> 3) { + default: + reader.skipType(tag & 7); + break; + } + } + + return message; + }, + + fromPartial(_: DeepPartial): QueryStakingTiersRequest { + const message = createBaseQueryStakingTiersRequest(); + return message; + } + +}; + +function createBaseQueryStakingTiersResponse(): QueryStakingTiersResponse { + return { + stakingTiers: [] + }; +} + +export const QueryStakingTiersResponse = { + encode(message: QueryStakingTiersResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + for (const v of message.stakingTiers) { + StakingTier.encode(v!, writer.uint32(10).fork()).ldelim(); + } + + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): QueryStakingTiersResponse { + const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseQueryStakingTiersResponse(); + + while (reader.pos < end) { + const tag = reader.uint32(); + + switch (tag >>> 3) { + case 1: + message.stakingTiers.push(StakingTier.decode(reader, reader.uint32())); + break; + + default: + reader.skipType(tag & 7); + break; + } + } + + return message; + }, + + fromPartial(object: DeepPartial): QueryStakingTiersResponse { + const message = createBaseQueryStakingTiersResponse(); + message.stakingTiers = object.stakingTiers?.map(e => StakingTier.fromPartial(e)) || []; + return message; + } + +}; + +function createBaseQueryUserStakingTierRequest(): QueryUserStakingTierRequest { + return { + address: "" + }; +} + +export const QueryUserStakingTierRequest = { + encode(message: QueryUserStakingTierRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.address !== "") { + writer.uint32(10).string(message.address); + } + + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): QueryUserStakingTierRequest { + const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseQueryUserStakingTierRequest(); + + while (reader.pos < end) { + const tag = reader.uint32(); + + switch (tag >>> 3) { + case 1: + message.address = reader.string(); + break; + + default: + reader.skipType(tag & 7); + break; + } + } + + return message; + }, + + fromPartial(object: DeepPartial): QueryUserStakingTierRequest { + const message = createBaseQueryUserStakingTierRequest(); + message.address = object.address ?? ""; + return message; + } + +}; + +function createBaseQueryUserStakingTierResponse(): QueryUserStakingTierResponse { + return { + feeTierName: "", + stakedBaseTokens: new Uint8Array(), + discountPpm: 0 + }; +} + +export const QueryUserStakingTierResponse = { + encode(message: QueryUserStakingTierResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.feeTierName !== "") { + writer.uint32(10).string(message.feeTierName); + } + + if (message.stakedBaseTokens.length !== 0) { + writer.uint32(18).bytes(message.stakedBaseTokens); + } + + if (message.discountPpm !== 0) { + writer.uint32(24).uint32(message.discountPpm); + } + + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): QueryUserStakingTierResponse { + const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseQueryUserStakingTierResponse(); + + while (reader.pos < end) { + const tag = reader.uint32(); + + switch (tag >>> 3) { + case 1: + message.feeTierName = reader.string(); + break; + + case 2: + message.stakedBaseTokens = reader.bytes(); + break; + + case 3: + message.discountPpm = reader.uint32(); + break; + + default: + reader.skipType(tag & 7); + break; + } + } + + return message; + }, + + fromPartial(object: DeepPartial): QueryUserStakingTierResponse { + const message = createBaseQueryUserStakingTierResponse(); + message.feeTierName = object.feeTierName ?? ""; + message.stakedBaseTokens = object.stakedBaseTokens ?? new Uint8Array(); + message.discountPpm = object.discountPpm ?? 0; + return message; + } + }; \ No newline at end of file diff --git a/indexer/packages/v4-protos/src/codegen/dydxprotocol/feetiers/staking_tier.ts b/indexer/packages/v4-protos/src/codegen/dydxprotocol/feetiers/staking_tier.ts new file mode 100644 index 00000000000..028f51257fb --- /dev/null +++ b/indexer/packages/v4-protos/src/codegen/dydxprotocol/feetiers/staking_tier.ts @@ -0,0 +1,160 @@ +import * as _m0 from "protobufjs/minimal"; +import { DeepPartial } from "../../helpers"; +/** StakingTier defines all staking levels of a fee tier */ + +export interface StakingTier { + /** Which fee tier this corresponds to */ + feeTierName: string; + /** + * Staking levels for this tier (in strictly increasing order of staking + * requirement) + */ + + levels: StakingLevel[]; +} +/** StakingTier defines all staking levels of a fee tier */ + +export interface StakingTierSDKType { + /** Which fee tier this corresponds to */ + fee_tier_name: string; + /** + * Staking levels for this tier (in strictly increasing order of staking + * requirement) + */ + + levels: StakingLevelSDKType[]; +} +/** + * StakingLevel defines how many staked native tokens qualifies for how much + * discount + */ + +export interface StakingLevel { + /** Minimum native tokens to stake (in base unit) */ + minStakedBaseTokens: Uint8Array; + /** Fee discount in ppm (e.g. 1_000_000 is 100% discount) */ + + feeDiscountPpm: number; +} +/** + * StakingLevel defines how many staked native tokens qualifies for how much + * discount + */ + +export interface StakingLevelSDKType { + /** Minimum native tokens to stake (in base unit) */ + min_staked_base_tokens: Uint8Array; + /** Fee discount in ppm (e.g. 1_000_000 is 100% discount) */ + + fee_discount_ppm: number; +} + +function createBaseStakingTier(): StakingTier { + return { + feeTierName: "", + levels: [] + }; +} + +export const StakingTier = { + encode(message: StakingTier, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.feeTierName !== "") { + writer.uint32(10).string(message.feeTierName); + } + + for (const v of message.levels) { + StakingLevel.encode(v!, writer.uint32(18).fork()).ldelim(); + } + + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): StakingTier { + const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseStakingTier(); + + while (reader.pos < end) { + const tag = reader.uint32(); + + switch (tag >>> 3) { + case 1: + message.feeTierName = reader.string(); + break; + + case 2: + message.levels.push(StakingLevel.decode(reader, reader.uint32())); + break; + + default: + reader.skipType(tag & 7); + break; + } + } + + return message; + }, + + fromPartial(object: DeepPartial): StakingTier { + const message = createBaseStakingTier(); + message.feeTierName = object.feeTierName ?? ""; + message.levels = object.levels?.map(e => StakingLevel.fromPartial(e)) || []; + return message; + } + +}; + +function createBaseStakingLevel(): StakingLevel { + return { + minStakedBaseTokens: new Uint8Array(), + feeDiscountPpm: 0 + }; +} + +export const StakingLevel = { + encode(message: StakingLevel, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.minStakedBaseTokens.length !== 0) { + writer.uint32(10).bytes(message.minStakedBaseTokens); + } + + if (message.feeDiscountPpm !== 0) { + writer.uint32(16).uint32(message.feeDiscountPpm); + } + + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): StakingLevel { + const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseStakingLevel(); + + while (reader.pos < end) { + const tag = reader.uint32(); + + switch (tag >>> 3) { + case 1: + message.minStakedBaseTokens = reader.bytes(); + break; + + case 2: + message.feeDiscountPpm = reader.uint32(); + break; + + default: + reader.skipType(tag & 7); + break; + } + } + + return message; + }, + + fromPartial(object: DeepPartial): StakingLevel { + const message = createBaseStakingLevel(); + message.minStakedBaseTokens = object.minStakedBaseTokens ?? new Uint8Array(); + message.feeDiscountPpm = object.feeDiscountPpm ?? 0; + return message; + } + +}; \ No newline at end of file diff --git a/indexer/packages/v4-protos/src/codegen/dydxprotocol/feetiers/tx.rpc.msg.ts b/indexer/packages/v4-protos/src/codegen/dydxprotocol/feetiers/tx.rpc.msg.ts index 20caa07ba1d..b46ee57089b 100644 --- a/indexer/packages/v4-protos/src/codegen/dydxprotocol/feetiers/tx.rpc.msg.ts +++ b/indexer/packages/v4-protos/src/codegen/dydxprotocol/feetiers/tx.rpc.msg.ts @@ -1,11 +1,20 @@ import { Rpc } from "../../helpers"; import * as _m0 from "protobufjs/minimal"; -import { MsgUpdatePerpetualFeeParams, MsgUpdatePerpetualFeeParamsResponse } from "./tx"; +import { MsgUpdatePerpetualFeeParams, MsgUpdatePerpetualFeeParamsResponse, MsgSetMarketFeeDiscountParams, MsgSetMarketFeeDiscountParamsResponse, MsgSetStakingTiers, MsgSetStakingTiersResponse } from "./tx"; /** Msg defines the Msg service. */ export interface Msg { /** UpdatePerpetualFeeParams updates the PerpetualFeeParams in state. */ updatePerpetualFeeParams(request: MsgUpdatePerpetualFeeParams): Promise; + /** + * SetMarketFeeDiscountParams sets or updates PerMarketFeeDiscountParams for + * specific CLOB pairs. + */ + + setMarketFeeDiscountParams(request: MsgSetMarketFeeDiscountParams): Promise; + /** SetStakingTiers sets the staking tiers in state. */ + + setStakingTiers(request: MsgSetStakingTiers): Promise; } export class MsgClientImpl implements Msg { private readonly rpc: Rpc; @@ -13,6 +22,8 @@ export class MsgClientImpl implements Msg { constructor(rpc: Rpc) { this.rpc = rpc; this.updatePerpetualFeeParams = this.updatePerpetualFeeParams.bind(this); + this.setMarketFeeDiscountParams = this.setMarketFeeDiscountParams.bind(this); + this.setStakingTiers = this.setStakingTiers.bind(this); } updatePerpetualFeeParams(request: MsgUpdatePerpetualFeeParams): Promise { @@ -21,4 +32,16 @@ export class MsgClientImpl implements Msg { return promise.then(data => MsgUpdatePerpetualFeeParamsResponse.decode(new _m0.Reader(data))); } + setMarketFeeDiscountParams(request: MsgSetMarketFeeDiscountParams): Promise { + const data = MsgSetMarketFeeDiscountParams.encode(request).finish(); + const promise = this.rpc.request("dydxprotocol.feetiers.Msg", "SetMarketFeeDiscountParams", data); + return promise.then(data => MsgSetMarketFeeDiscountParamsResponse.decode(new _m0.Reader(data))); + } + + setStakingTiers(request: MsgSetStakingTiers): Promise { + const data = MsgSetStakingTiers.encode(request).finish(); + const promise = this.rpc.request("dydxprotocol.feetiers.Msg", "SetStakingTiers", data); + return promise.then(data => MsgSetStakingTiersResponse.decode(new _m0.Reader(data))); + } + } \ No newline at end of file diff --git a/indexer/packages/v4-protos/src/codegen/dydxprotocol/feetiers/tx.ts b/indexer/packages/v4-protos/src/codegen/dydxprotocol/feetiers/tx.ts index 24556b61d45..a4265db9512 100644 --- a/indexer/packages/v4-protos/src/codegen/dydxprotocol/feetiers/tx.ts +++ b/indexer/packages/v4-protos/src/codegen/dydxprotocol/feetiers/tx.ts @@ -1,4 +1,6 @@ import { PerpetualFeeParams, PerpetualFeeParamsSDKType } from "./params"; +import { PerMarketFeeDiscountParams, PerMarketFeeDiscountParamsSDKType } from "./per_market_fee_discount"; +import { StakingTier, StakingTierSDKType } from "./staking_tier"; import * as _m0 from "protobufjs/minimal"; import { DeepPartial } from "../../helpers"; /** MsgUpdatePerpetualFeeParams is the Msg/UpdatePerpetualFeeParams request type. */ @@ -29,6 +31,64 @@ export interface MsgUpdatePerpetualFeeParamsResponse {} */ export interface MsgUpdatePerpetualFeeParamsResponseSDKType {} +/** + * MsgSetMarketFeeDiscountParams is the Msg/SetMarketFeeDiscountParams + * request type. + */ + +export interface MsgSetMarketFeeDiscountParams { + /** authority is the address that controls the module */ + authority: string; + /** The per-market fee discount parameters to create or update */ + + params: PerMarketFeeDiscountParams[]; +} +/** + * MsgSetMarketFeeDiscountParams is the Msg/SetMarketFeeDiscountParams + * request type. + */ + +export interface MsgSetMarketFeeDiscountParamsSDKType { + /** authority is the address that controls the module */ + authority: string; + /** The per-market fee discount parameters to create or update */ + + params: PerMarketFeeDiscountParamsSDKType[]; +} +/** + * MsgSetMarketFeeDiscountParamsResponse is the + * Msg/SetMarketFeeDiscountParams response type. + */ + +export interface MsgSetMarketFeeDiscountParamsResponse {} +/** + * MsgSetMarketFeeDiscountParamsResponse is the + * Msg/SetMarketFeeDiscountParams response type. + */ + +export interface MsgSetMarketFeeDiscountParamsResponseSDKType {} +/** MsgSetStakingTiers is the Msg/SetStakingTiers request type. */ + +export interface MsgSetStakingTiers { + authority: string; + /** List of Staking tiers */ + + stakingTiers: StakingTier[]; +} +/** MsgSetStakingTiers is the Msg/SetStakingTiers request type. */ + +export interface MsgSetStakingTiersSDKType { + authority: string; + /** List of Staking tiers */ + + staking_tiers: StakingTierSDKType[]; +} +/** MsgSetStakingTiersResponse is the Msg/SetStakingTiers response type. */ + +export interface MsgSetStakingTiersResponse {} +/** MsgSetStakingTiersResponse is the Msg/SetStakingTiers response type. */ + +export interface MsgSetStakingTiersResponseSDKType {} function createBaseMsgUpdatePerpetualFeeParams(): MsgUpdatePerpetualFeeParams { return { @@ -117,4 +177,182 @@ export const MsgUpdatePerpetualFeeParamsResponse = { return message; } +}; + +function createBaseMsgSetMarketFeeDiscountParams(): MsgSetMarketFeeDiscountParams { + return { + authority: "", + params: [] + }; +} + +export const MsgSetMarketFeeDiscountParams = { + encode(message: MsgSetMarketFeeDiscountParams, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.authority !== "") { + writer.uint32(10).string(message.authority); + } + + for (const v of message.params) { + PerMarketFeeDiscountParams.encode(v!, writer.uint32(18).fork()).ldelim(); + } + + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): MsgSetMarketFeeDiscountParams { + const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseMsgSetMarketFeeDiscountParams(); + + while (reader.pos < end) { + const tag = reader.uint32(); + + switch (tag >>> 3) { + case 1: + message.authority = reader.string(); + break; + + case 2: + message.params.push(PerMarketFeeDiscountParams.decode(reader, reader.uint32())); + break; + + default: + reader.skipType(tag & 7); + break; + } + } + + return message; + }, + + fromPartial(object: DeepPartial): MsgSetMarketFeeDiscountParams { + const message = createBaseMsgSetMarketFeeDiscountParams(); + message.authority = object.authority ?? ""; + message.params = object.params?.map(e => PerMarketFeeDiscountParams.fromPartial(e)) || []; + return message; + } + +}; + +function createBaseMsgSetMarketFeeDiscountParamsResponse(): MsgSetMarketFeeDiscountParamsResponse { + return {}; +} + +export const MsgSetMarketFeeDiscountParamsResponse = { + encode(_: MsgSetMarketFeeDiscountParamsResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): MsgSetMarketFeeDiscountParamsResponse { + const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseMsgSetMarketFeeDiscountParamsResponse(); + + while (reader.pos < end) { + const tag = reader.uint32(); + + switch (tag >>> 3) { + default: + reader.skipType(tag & 7); + break; + } + } + + return message; + }, + + fromPartial(_: DeepPartial): MsgSetMarketFeeDiscountParamsResponse { + const message = createBaseMsgSetMarketFeeDiscountParamsResponse(); + return message; + } + +}; + +function createBaseMsgSetStakingTiers(): MsgSetStakingTiers { + return { + authority: "", + stakingTiers: [] + }; +} + +export const MsgSetStakingTiers = { + encode(message: MsgSetStakingTiers, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.authority !== "") { + writer.uint32(10).string(message.authority); + } + + for (const v of message.stakingTiers) { + StakingTier.encode(v!, writer.uint32(18).fork()).ldelim(); + } + + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): MsgSetStakingTiers { + const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseMsgSetStakingTiers(); + + while (reader.pos < end) { + const tag = reader.uint32(); + + switch (tag >>> 3) { + case 1: + message.authority = reader.string(); + break; + + case 2: + message.stakingTiers.push(StakingTier.decode(reader, reader.uint32())); + break; + + default: + reader.skipType(tag & 7); + break; + } + } + + return message; + }, + + fromPartial(object: DeepPartial): MsgSetStakingTiers { + const message = createBaseMsgSetStakingTiers(); + message.authority = object.authority ?? ""; + message.stakingTiers = object.stakingTiers?.map(e => StakingTier.fromPartial(e)) || []; + return message; + } + +}; + +function createBaseMsgSetStakingTiersResponse(): MsgSetStakingTiersResponse { + return {}; +} + +export const MsgSetStakingTiersResponse = { + encode(_: MsgSetStakingTiersResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): MsgSetStakingTiersResponse { + const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseMsgSetStakingTiersResponse(); + + while (reader.pos < end) { + const tag = reader.uint32(); + + switch (tag >>> 3) { + default: + reader.skipType(tag & 7); + break; + } + } + + return message; + }, + + fromPartial(_: DeepPartial): MsgSetStakingTiersResponse { + const message = createBaseMsgSetStakingTiersResponse(); + return message; + } + }; \ No newline at end of file diff --git a/indexer/packages/v4-protos/src/codegen/dydxprotocol/indexer/events/events.ts b/indexer/packages/v4-protos/src/codegen/dydxprotocol/indexer/events/events.ts index 4fa8b2beb65..3a633b4ca33 100644 --- a/indexer/packages/v4-protos/src/codegen/dydxprotocol/indexer/events/events.ts +++ b/indexer/packages/v4-protos/src/codegen/dydxprotocol/indexer/events/events.ts @@ -681,6 +681,7 @@ export interface StatefulOrderEventV1 { conditionalOrderTriggered?: StatefulOrderEventV1_ConditionalOrderTriggeredV1; longTermOrderPlacement?: StatefulOrderEventV1_LongTermOrderPlacementV1; orderReplacement?: StatefulOrderEventV1_LongTermOrderReplacementV1; + twapOrderPlacement?: StatefulOrderEventV1_TwapOrderPlacementV1; } /** * StatefulOrderEvent message contains information about a change to a stateful @@ -697,6 +698,7 @@ export interface StatefulOrderEventV1SDKType { conditional_order_triggered?: StatefulOrderEventV1_ConditionalOrderTriggeredV1SDKType; long_term_order_placement?: StatefulOrderEventV1_LongTermOrderPlacementV1SDKType; order_replacement?: StatefulOrderEventV1_LongTermOrderReplacementV1SDKType; + twap_order_placement?: StatefulOrderEventV1_TwapOrderPlacementV1SDKType; } /** * A stateful order placement contains an order. @@ -788,6 +790,16 @@ export interface StatefulOrderEventV1_LongTermOrderReplacementV1SDKType { old_order_id?: IndexerOrderIdSDKType; order?: IndexerOrderSDKType; } +/** A twap order placement contains an order. */ + +export interface StatefulOrderEventV1_TwapOrderPlacementV1 { + order?: IndexerOrder; +} +/** A twap order placement contains an order. */ + +export interface StatefulOrderEventV1_TwapOrderPlacementV1SDKType { + order?: IndexerOrderSDKType; +} /** * AssetCreateEventV1 message contains all the information about an new Asset on * the dYdX chain. @@ -2961,7 +2973,8 @@ function createBaseStatefulOrderEventV1(): StatefulOrderEventV1 { conditionalOrderPlacement: undefined, conditionalOrderTriggered: undefined, longTermOrderPlacement: undefined, - orderReplacement: undefined + orderReplacement: undefined, + twapOrderPlacement: undefined }; } @@ -2991,6 +3004,10 @@ export const StatefulOrderEventV1 = { StatefulOrderEventV1_LongTermOrderReplacementV1.encode(message.orderReplacement, writer.uint32(66).fork()).ldelim(); } + if (message.twapOrderPlacement !== undefined) { + StatefulOrderEventV1_TwapOrderPlacementV1.encode(message.twapOrderPlacement, writer.uint32(74).fork()).ldelim(); + } + return writer; }, @@ -3027,6 +3044,10 @@ export const StatefulOrderEventV1 = { message.orderReplacement = StatefulOrderEventV1_LongTermOrderReplacementV1.decode(reader, reader.uint32()); break; + case 9: + message.twapOrderPlacement = StatefulOrderEventV1_TwapOrderPlacementV1.decode(reader, reader.uint32()); + break; + default: reader.skipType(tag & 7); break; @@ -3044,6 +3065,7 @@ export const StatefulOrderEventV1 = { message.conditionalOrderTriggered = object.conditionalOrderTriggered !== undefined && object.conditionalOrderTriggered !== null ? StatefulOrderEventV1_ConditionalOrderTriggeredV1.fromPartial(object.conditionalOrderTriggered) : undefined; message.longTermOrderPlacement = object.longTermOrderPlacement !== undefined && object.longTermOrderPlacement !== null ? StatefulOrderEventV1_LongTermOrderPlacementV1.fromPartial(object.longTermOrderPlacement) : undefined; message.orderReplacement = object.orderReplacement !== undefined && object.orderReplacement !== null ? StatefulOrderEventV1_LongTermOrderReplacementV1.fromPartial(object.orderReplacement) : undefined; + message.twapOrderPlacement = object.twapOrderPlacement !== undefined && object.twapOrderPlacement !== null ? StatefulOrderEventV1_TwapOrderPlacementV1.fromPartial(object.twapOrderPlacement) : undefined; return message; } @@ -3339,6 +3361,51 @@ export const StatefulOrderEventV1_LongTermOrderReplacementV1 = { }; +function createBaseStatefulOrderEventV1_TwapOrderPlacementV1(): StatefulOrderEventV1_TwapOrderPlacementV1 { + return { + order: undefined + }; +} + +export const StatefulOrderEventV1_TwapOrderPlacementV1 = { + encode(message: StatefulOrderEventV1_TwapOrderPlacementV1, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.order !== undefined) { + IndexerOrder.encode(message.order, writer.uint32(10).fork()).ldelim(); + } + + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): StatefulOrderEventV1_TwapOrderPlacementV1 { + const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseStatefulOrderEventV1_TwapOrderPlacementV1(); + + while (reader.pos < end) { + const tag = reader.uint32(); + + switch (tag >>> 3) { + case 1: + message.order = IndexerOrder.decode(reader, reader.uint32()); + break; + + default: + reader.skipType(tag & 7); + break; + } + } + + return message; + }, + + fromPartial(object: DeepPartial): StatefulOrderEventV1_TwapOrderPlacementV1 { + const message = createBaseStatefulOrderEventV1_TwapOrderPlacementV1(); + message.order = object.order !== undefined && object.order !== null ? IndexerOrder.fromPartial(object.order) : undefined; + return message; + } + +}; + function createBaseAssetCreateEventV1(): AssetCreateEventV1 { return { id: 0, diff --git a/indexer/packages/v4-protos/src/codegen/dydxprotocol/indexer/protocol/v1/clob.ts b/indexer/packages/v4-protos/src/codegen/dydxprotocol/indexer/protocol/v1/clob.ts index 1f1589a82ab..cf248e8bf5c 100644 --- a/indexer/packages/v4-protos/src/codegen/dydxprotocol/indexer/protocol/v1/clob.ts +++ b/indexer/packages/v4-protos/src/codegen/dydxprotocol/indexer/protocol/v1/clob.ts @@ -452,15 +452,14 @@ export interface IndexerOrderId { clientId: number; /** * order_flags represent order flags for the order. This field is invalid if - * it's greater than 127 (larger than one byte). Each bit in the first byte - * represents a different flag. Currently only two flags are supported. + * it's greater than 257. Each bit represents a different flag. * - * Starting from the bit after the most MSB (note that the MSB is used in - * proto varint encoding, and therefore cannot be used): Bit 1 is set if this - * order is a Long-Term order (0x40, or 64 as a uint8). Bit 2 is set if this - * order is a Conditional order (0x20, or 32 as a uint8). - * - * If neither bit is set, the order is assumed to be a Short-Term order. + * The following are the valid orderId flags: + * ShortTerm = uint32(0) + * Conditional = uint32(32) + * LongTerm = uint32(64) + * Twap = uint32(128) + * TwapSuborder = uint32(256) (for internal use only) * * If both bits are set or bits other than the 2nd and 3rd are set, the order * ID is invalid. @@ -491,15 +490,14 @@ export interface IndexerOrderIdSDKType { client_id: number; /** * order_flags represent order flags for the order. This field is invalid if - * it's greater than 127 (larger than one byte). Each bit in the first byte - * represents a different flag. Currently only two flags are supported. - * - * Starting from the bit after the most MSB (note that the MSB is used in - * proto varint encoding, and therefore cannot be used): Bit 1 is set if this - * order is a Long-Term order (0x40, or 64 as a uint8). Bit 2 is set if this - * order is a Conditional order (0x20, or 32 as a uint8). + * it's greater than 257. Each bit represents a different flag. * - * If neither bit is set, the order is assumed to be a Short-Term order. + * The following are the valid orderId flags: + * ShortTerm = uint32(0) + * Conditional = uint32(32) + * LongTerm = uint32(64) + * Twap = uint32(128) + * TwapSuborder = uint32(256) (for internal use only) * * If both bits are set or bits other than the 2nd and 3rd are set, the order * ID is invalid. @@ -588,6 +586,12 @@ export interface IndexerOrder { */ orderRouterAddress: string; + /** + * twap_parameters represent the configuration for a TWAP order. This must be + * set for twap orders and will be ignored for all other order types. + */ + + twapParameters?: TwapParameters; } /** * IndexerOrderV1 represents a single order belonging to a `Subaccount` @@ -667,6 +671,58 @@ export interface IndexerOrderSDKType { */ order_router_address: string; + /** + * twap_parameters represent the configuration for a TWAP order. This must be + * set for twap orders and will be ignored for all other order types. + */ + + twap_parameters?: TwapParametersSDKType; +} +/** TwapParameters represents the necessary configuration for a TWAP order. */ + +export interface TwapParameters { + /** + * Duration of the TWAP order execution in seconds. Must be in the range + * [300 (5 minutes), 86400 (24 hours)]. + */ + duration: number; + /** + * Interval in seconds for each suborder to execute. Must be a + * whole number, a factor of the duration, and in the range + * [30 (30 seconds), 3600 (1 hour)]. + */ + + interval: number; + /** + * Price tolerance in ppm for each suborder. This will be applied to + * the oracle price each time a suborder is triggered. Must be + * be in the range [0, 1_000_000). + */ + + priceTolerance: number; +} +/** TwapParameters represents the necessary configuration for a TWAP order. */ + +export interface TwapParametersSDKType { + /** + * Duration of the TWAP order execution in seconds. Must be in the range + * [300 (5 minutes), 86400 (24 hours)]. + */ + duration: number; + /** + * Interval in seconds for each suborder to execute. Must be a + * whole number, a factor of the duration, and in the range + * [30 (30 seconds), 3600 (1 hour)]. + */ + + interval: number; + /** + * Price tolerance in ppm for each suborder. This will be applied to + * the oracle price each time a suborder is triggered. Must be + * be in the range [0, 1_000_000). + */ + + price_tolerance: number; } /** * BuilderCodeParameters represents the metadata for the partner or builder of @@ -784,7 +840,8 @@ function createBaseIndexerOrder(): IndexerOrder { conditionType: 0, conditionalOrderTriggerSubticks: Long.UZERO, builderCodeParams: undefined, - orderRouterAddress: "" + orderRouterAddress: "", + twapParameters: undefined }; } @@ -842,6 +899,10 @@ export const IndexerOrder = { writer.uint32(106).string(message.orderRouterAddress); } + if (message.twapParameters !== undefined) { + TwapParameters.encode(message.twapParameters, writer.uint32(114).fork()).ldelim(); + } + return writer; }, @@ -906,6 +967,10 @@ export const IndexerOrder = { message.orderRouterAddress = reader.string(); break; + case 14: + message.twapParameters = TwapParameters.decode(reader, reader.uint32()); + break; + default: reader.skipType(tag & 7); break; @@ -930,6 +995,72 @@ export const IndexerOrder = { message.conditionalOrderTriggerSubticks = object.conditionalOrderTriggerSubticks !== undefined && object.conditionalOrderTriggerSubticks !== null ? Long.fromValue(object.conditionalOrderTriggerSubticks) : Long.UZERO; message.builderCodeParams = object.builderCodeParams !== undefined && object.builderCodeParams !== null ? BuilderCodeParameters.fromPartial(object.builderCodeParams) : undefined; message.orderRouterAddress = object.orderRouterAddress ?? ""; + message.twapParameters = object.twapParameters !== undefined && object.twapParameters !== null ? TwapParameters.fromPartial(object.twapParameters) : undefined; + return message; + } + +}; + +function createBaseTwapParameters(): TwapParameters { + return { + duration: 0, + interval: 0, + priceTolerance: 0 + }; +} + +export const TwapParameters = { + encode(message: TwapParameters, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.duration !== 0) { + writer.uint32(8).uint32(message.duration); + } + + if (message.interval !== 0) { + writer.uint32(16).uint32(message.interval); + } + + if (message.priceTolerance !== 0) { + writer.uint32(24).uint32(message.priceTolerance); + } + + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): TwapParameters { + const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseTwapParameters(); + + while (reader.pos < end) { + const tag = reader.uint32(); + + switch (tag >>> 3) { + case 1: + message.duration = reader.uint32(); + break; + + case 2: + message.interval = reader.uint32(); + break; + + case 3: + message.priceTolerance = reader.uint32(); + break; + + default: + reader.skipType(tag & 7); + break; + } + } + + return message; + }, + + fromPartial(object: DeepPartial): TwapParameters { + const message = createBaseTwapParameters(); + message.duration = object.duration ?? 0; + message.interval = object.interval ?? 0; + message.priceTolerance = object.priceTolerance ?? 0; return message; } diff --git a/indexer/packages/v4-protos/src/codegen/dydxprotocol/stats/stats.ts b/indexer/packages/v4-protos/src/codegen/dydxprotocol/stats/stats.ts index 1f41aed7f6b..63e5a2d4f6f 100644 --- a/indexer/packages/v4-protos/src/codegen/dydxprotocol/stats/stats.ts +++ b/indexer/packages/v4-protos/src/codegen/dydxprotocol/stats/stats.ts @@ -21,9 +21,19 @@ export interface BlockStats_Fill { /** Maker wallet address */ maker: string; - /** Notional USDC filled in quantums */ + /** + * Notional USDC filled in quantums + * Used to calculate fee tier, and affiliate revenue attributed for taker + */ notional: Long; + /** + * Affiliate fee generated in quantums of the taker fee for the affiliate + * Used to calculate affiliate revenue attributed for taker. This is dynamic + * per affiliate tier + */ + + affiliateFeeGeneratedQuantums: Long; } /** Fill records data about a fill on this block. */ @@ -33,9 +43,19 @@ export interface BlockStats_FillSDKType { /** Maker wallet address */ maker: string; - /** Notional USDC filled in quantums */ + /** + * Notional USDC filled in quantums + * Used to calculate fee tier, and affiliate revenue attributed for taker + */ notional: Long; + /** + * Affiliate fee generated in quantums of the taker fee for the affiliate + * Used to calculate affiliate revenue attributed for taker. This is dynamic + * per affiliate tier + */ + + affiliate_fee_generated_quantums: Long; } /** StatsMetadata stores metadata for the x/stats module */ @@ -85,19 +105,22 @@ export interface EpochStats_UserWithStatsSDKType { user: string; stats?: UserStatsSDKType; } -/** GlobalStats stores global stats */ +/** GlobalStats stores global stats for the rolling window (default 30d). */ export interface GlobalStats { /** Notional USDC traded in quantums */ notionalTraded: Long; } -/** GlobalStats stores global stats */ +/** GlobalStats stores global stats for the rolling window (default 30d). */ export interface GlobalStatsSDKType { /** Notional USDC traded in quantums */ notional_traded: Long; } -/** UserStats stores stats for a User */ +/** + * UserStats stores stats for a User. This is the sum of all stats for a user in + * the rolling window (default 30d). + */ export interface UserStats { /** Taker USDC in quantums */ @@ -105,8 +128,17 @@ export interface UserStats { /** Maker USDC in quantums */ makerNotional: Long; + /** Affiliate revenue generated in quantums with this user being a referee */ + + affiliate_30dRevenueGeneratedQuantums: Long; + /** Referred volume in quote quantums with this user being an affiliate */ + + affiliate_30dReferredVolumeQuoteQuantums: Long; } -/** UserStats stores stats for a User */ +/** + * UserStats stores stats for a User. This is the sum of all stats for a user in + * the rolling window (default 30d). + */ export interface UserStatsSDKType { /** Taker USDC in quantums */ @@ -114,12 +146,18 @@ export interface UserStatsSDKType { /** Maker USDC in quantums */ maker_notional: Long; + /** Affiliate revenue generated in quantums with this user being a referee */ + + affiliate_30d_revenue_generated_quantums: Long; + /** Referred volume in quote quantums with this user being an affiliate */ + + affiliate_30d_referred_volume_quote_quantums: Long; } -/** CachedStakeAmount stores the last calculated total staked amount for address */ +/** CachedStakedBaseTokens stores the last calculated total staked base tokens */ -export interface CachedStakeAmount { - /** Last calculated total staked amount by the delegator (in coin amount). */ - stakedAmount: Uint8Array; +export interface CachedStakedBaseTokens { + /** Last calculated total staked base tokens by the delegator. */ + stakedBaseTokens: Uint8Array; /** * Block time at which the calculation is cached (in Unix Epoch seconds) * Rounded down to nearest second. @@ -127,11 +165,11 @@ export interface CachedStakeAmount { cachedAt: Long; } -/** CachedStakeAmount stores the last calculated total staked amount for address */ +/** CachedStakedBaseTokens stores the last calculated total staked base tokens */ -export interface CachedStakeAmountSDKType { - /** Last calculated total staked amount by the delegator (in coin amount). */ - staked_amount: Uint8Array; +export interface CachedStakedBaseTokensSDKType { + /** Last calculated total staked base tokens by the delegator. */ + staked_base_tokens: Uint8Array; /** * Block time at which the calculation is cached (in Unix Epoch seconds) * Rounded down to nearest second. @@ -189,7 +227,8 @@ function createBaseBlockStats_Fill(): BlockStats_Fill { return { taker: "", maker: "", - notional: Long.UZERO + notional: Long.UZERO, + affiliateFeeGeneratedQuantums: Long.UZERO }; } @@ -207,6 +246,10 @@ export const BlockStats_Fill = { writer.uint32(24).uint64(message.notional); } + if (!message.affiliateFeeGeneratedQuantums.isZero()) { + writer.uint32(32).uint64(message.affiliateFeeGeneratedQuantums); + } + return writer; }, @@ -231,6 +274,10 @@ export const BlockStats_Fill = { message.notional = (reader.uint64() as Long); break; + case 4: + message.affiliateFeeGeneratedQuantums = (reader.uint64() as Long); + break; + default: reader.skipType(tag & 7); break; @@ -245,6 +292,7 @@ export const BlockStats_Fill = { message.taker = object.taker ?? ""; message.maker = object.maker ?? ""; message.notional = object.notional !== undefined && object.notional !== null ? Long.fromValue(object.notional) : Long.UZERO; + message.affiliateFeeGeneratedQuantums = object.affiliateFeeGeneratedQuantums !== undefined && object.affiliateFeeGeneratedQuantums !== null ? Long.fromValue(object.affiliateFeeGeneratedQuantums) : Long.UZERO; return message; } @@ -453,7 +501,9 @@ export const GlobalStats = { function createBaseUserStats(): UserStats { return { takerNotional: Long.UZERO, - makerNotional: Long.UZERO + makerNotional: Long.UZERO, + affiliate_30dRevenueGeneratedQuantums: Long.UZERO, + affiliate_30dReferredVolumeQuoteQuantums: Long.UZERO }; } @@ -467,6 +517,14 @@ export const UserStats = { writer.uint32(16).uint64(message.makerNotional); } + if (!message.affiliate_30dRevenueGeneratedQuantums.isZero()) { + writer.uint32(24).uint64(message.affiliate_30dRevenueGeneratedQuantums); + } + + if (!message.affiliate_30dReferredVolumeQuoteQuantums.isZero()) { + writer.uint32(32).uint64(message.affiliate_30dReferredVolumeQuoteQuantums); + } + return writer; }, @@ -487,6 +545,14 @@ export const UserStats = { message.makerNotional = (reader.uint64() as Long); break; + case 3: + message.affiliate_30dRevenueGeneratedQuantums = (reader.uint64() as Long); + break; + + case 4: + message.affiliate_30dReferredVolumeQuoteQuantums = (reader.uint64() as Long); + break; + default: reader.skipType(tag & 7); break; @@ -500,22 +566,24 @@ export const UserStats = { const message = createBaseUserStats(); message.takerNotional = object.takerNotional !== undefined && object.takerNotional !== null ? Long.fromValue(object.takerNotional) : Long.UZERO; message.makerNotional = object.makerNotional !== undefined && object.makerNotional !== null ? Long.fromValue(object.makerNotional) : Long.UZERO; + message.affiliate_30dRevenueGeneratedQuantums = object.affiliate_30dRevenueGeneratedQuantums !== undefined && object.affiliate_30dRevenueGeneratedQuantums !== null ? Long.fromValue(object.affiliate_30dRevenueGeneratedQuantums) : Long.UZERO; + message.affiliate_30dReferredVolumeQuoteQuantums = object.affiliate_30dReferredVolumeQuoteQuantums !== undefined && object.affiliate_30dReferredVolumeQuoteQuantums !== null ? Long.fromValue(object.affiliate_30dReferredVolumeQuoteQuantums) : Long.UZERO; return message; } }; -function createBaseCachedStakeAmount(): CachedStakeAmount { +function createBaseCachedStakedBaseTokens(): CachedStakedBaseTokens { return { - stakedAmount: new Uint8Array(), + stakedBaseTokens: new Uint8Array(), cachedAt: Long.ZERO }; } -export const CachedStakeAmount = { - encode(message: CachedStakeAmount, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { - if (message.stakedAmount.length !== 0) { - writer.uint32(10).bytes(message.stakedAmount); +export const CachedStakedBaseTokens = { + encode(message: CachedStakedBaseTokens, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.stakedBaseTokens.length !== 0) { + writer.uint32(10).bytes(message.stakedBaseTokens); } if (!message.cachedAt.isZero()) { @@ -525,17 +593,17 @@ export const CachedStakeAmount = { return writer; }, - decode(input: _m0.Reader | Uint8Array, length?: number): CachedStakeAmount { + decode(input: _m0.Reader | Uint8Array, length?: number): CachedStakedBaseTokens { const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input); let end = length === undefined ? reader.len : reader.pos + length; - const message = createBaseCachedStakeAmount(); + const message = createBaseCachedStakedBaseTokens(); while (reader.pos < end) { const tag = reader.uint32(); switch (tag >>> 3) { case 1: - message.stakedAmount = reader.bytes(); + message.stakedBaseTokens = reader.bytes(); break; case 2: @@ -551,9 +619,9 @@ export const CachedStakeAmount = { return message; }, - fromPartial(object: DeepPartial): CachedStakeAmount { - const message = createBaseCachedStakeAmount(); - message.stakedAmount = object.stakedAmount ?? new Uint8Array(); + fromPartial(object: DeepPartial): CachedStakedBaseTokens { + const message = createBaseCachedStakedBaseTokens(); + message.stakedBaseTokens = object.stakedBaseTokens ?? new Uint8Array(); message.cachedAt = object.cachedAt !== undefined && object.cachedAt !== null ? Long.fromValue(object.cachedAt) : Long.ZERO; return message; } diff --git a/indexer/packages/v4-protos/src/codegen/dydxprotocol/subaccounts/leverage.ts b/indexer/packages/v4-protos/src/codegen/dydxprotocol/subaccounts/leverage.ts new file mode 100644 index 00000000000..ff6ad674085 --- /dev/null +++ b/indexer/packages/v4-protos/src/codegen/dydxprotocol/subaccounts/leverage.ts @@ -0,0 +1,138 @@ +import * as _m0 from "protobufjs/minimal"; +import { DeepPartial } from "../../helpers"; +/** + * PerpetualLeverageEntry represents a single perpetual leverage setting for + * internal storage + */ + +export interface PerpetualLeverageEntry { + /** The perpetual ID (internal storage format) */ + perpetualId: number; + /** The user selected IMF in parts per million */ + + customImfPpm: number; +} +/** + * PerpetualLeverageEntry represents a single perpetual leverage setting for + * internal storage + */ + +export interface PerpetualLeverageEntrySDKType { + /** The perpetual ID (internal storage format) */ + perpetual_id: number; + /** The user selected IMF in parts per million */ + + custom_imf_ppm: number; +} +/** LeverageData represents the leverage settings for a subaccount */ + +export interface LeverageData { + /** List of leverage entries for this subaccount */ + entries: PerpetualLeverageEntry[]; +} +/** LeverageData represents the leverage settings for a subaccount */ + +export interface LeverageDataSDKType { + /** List of leverage entries for this subaccount */ + entries: PerpetualLeverageEntrySDKType[]; +} + +function createBasePerpetualLeverageEntry(): PerpetualLeverageEntry { + return { + perpetualId: 0, + customImfPpm: 0 + }; +} + +export const PerpetualLeverageEntry = { + encode(message: PerpetualLeverageEntry, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.perpetualId !== 0) { + writer.uint32(8).uint32(message.perpetualId); + } + + if (message.customImfPpm !== 0) { + writer.uint32(16).uint32(message.customImfPpm); + } + + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): PerpetualLeverageEntry { + const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBasePerpetualLeverageEntry(); + + while (reader.pos < end) { + const tag = reader.uint32(); + + switch (tag >>> 3) { + case 1: + message.perpetualId = reader.uint32(); + break; + + case 2: + message.customImfPpm = reader.uint32(); + break; + + default: + reader.skipType(tag & 7); + break; + } + } + + return message; + }, + + fromPartial(object: DeepPartial): PerpetualLeverageEntry { + const message = createBasePerpetualLeverageEntry(); + message.perpetualId = object.perpetualId ?? 0; + message.customImfPpm = object.customImfPpm ?? 0; + return message; + } + +}; + +function createBaseLeverageData(): LeverageData { + return { + entries: [] + }; +} + +export const LeverageData = { + encode(message: LeverageData, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + for (const v of message.entries) { + PerpetualLeverageEntry.encode(v!, writer.uint32(10).fork()).ldelim(); + } + + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): LeverageData { + const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseLeverageData(); + + while (reader.pos < end) { + const tag = reader.uint32(); + + switch (tag >>> 3) { + case 1: + message.entries.push(PerpetualLeverageEntry.decode(reader, reader.uint32())); + break; + + default: + reader.skipType(tag & 7); + break; + } + } + + return message; + }, + + fromPartial(object: DeepPartial): LeverageData { + const message = createBaseLeverageData(); + message.entries = object.entries?.map(e => PerpetualLeverageEntry.fromPartial(e)) || []; + return message; + } + +}; \ No newline at end of file diff --git a/indexer/packages/v4-protos/src/codegen/gogoproto/bundle.ts b/indexer/packages/v4-protos/src/codegen/gogoproto/bundle.ts index 7268721d904..c96e8e29e0e 100644 --- a/indexer/packages/v4-protos/src/codegen/gogoproto/bundle.ts +++ b/indexer/packages/v4-protos/src/codegen/gogoproto/bundle.ts @@ -1,3 +1,3 @@ -import * as _130 from "./gogo"; -export const gogoproto = { ..._130 +import * as _133 from "./gogo"; +export const gogoproto = { ..._133 }; \ No newline at end of file diff --git a/indexer/packages/v4-protos/src/codegen/google/bundle.ts b/indexer/packages/v4-protos/src/codegen/google/bundle.ts index c730dc4e520..859b1b03068 100644 --- a/indexer/packages/v4-protos/src/codegen/google/bundle.ts +++ b/indexer/packages/v4-protos/src/codegen/google/bundle.ts @@ -1,16 +1,16 @@ -import * as _131 from "./api/annotations"; -import * as _132 from "./api/http"; -import * as _133 from "./protobuf/descriptor"; -import * as _134 from "./protobuf/duration"; -import * as _135 from "./protobuf/timestamp"; -import * as _136 from "./protobuf/any"; +import * as _134 from "./api/annotations"; +import * as _135 from "./api/http"; +import * as _136 from "./protobuf/descriptor"; +import * as _137 from "./protobuf/duration"; +import * as _138 from "./protobuf/timestamp"; +import * as _139 from "./protobuf/any"; export namespace google { - export const api = { ..._131, - ..._132 + export const api = { ..._134, + ..._135 }; - export const protobuf = { ..._133, - ..._134, - ..._135, - ..._136 + export const protobuf = { ..._136, + ..._137, + ..._138, + ..._139 }; } \ No newline at end of file diff --git a/indexer/services/auxo/package.json b/indexer/services/auxo/package.json index de5c4041192..e01ed686964 100644 --- a/indexer/services/auxo/package.json +++ b/indexer/services/auxo/package.json @@ -12,7 +12,7 @@ "lint": "eslint --ext .ts,.js .", "lint:fix": "eslint --ext .ts,.js . --fix", "test": "NODE_ENV=test jest --runInBand --forceExit", - "test:clean": "pnpm run build; NODE_ENV=test jest --runInBand --forceExit", + "test:clean": "pnpm run build && pnpm run test", "postinstall": "patch-package" }, "author": "", diff --git a/indexer/services/bazooka/package.json b/indexer/services/bazooka/package.json index 3a98ef6201b..d0ba6ce6d14 100644 --- a/indexer/services/bazooka/package.json +++ b/indexer/services/bazooka/package.json @@ -12,7 +12,7 @@ "lint": "eslint --ext .ts,.js .", "lint:fix": "eslint --ext .ts,.js . --fix", "test": "NODE_ENV=test jest --runInBand --forceExit", - "test:clean": "pnpm run build; NODE_ENV=test jest --runInBand --forceExit", + "test:clean": "pnpm run build && pnpm run test", "postinstall": "patch-package" }, "author": "", diff --git a/indexer/services/comlink/package.json b/indexer/services/comlink/package.json index c34a9f74e86..388297ddc4a 100644 --- a/indexer/services/comlink/package.json +++ b/indexer/services/comlink/package.json @@ -14,7 +14,7 @@ "lint": "eslint --ext .ts,.js .", "lint:fix": "eslint --ext .ts,.js . --fix", "test": "NODE_ENV=test jest --runInBand --forceExit", - "test:clean": "pnpm run build; NODE_ENV=test jest --runInBand --forceExit", + "test:clean": "pnpm run build && pnpm run test", "swagger": "ts-node -r dotenv-flow/config src/scripts/generate-swagger.ts", "gen-markdown": "widdershins public/swagger.json -o public/api-documentation.md --omitHeader --language_tabs 'python:Python' 'javascript:Javascript'" }, diff --git a/indexer/services/comlink/public/api-documentation.md b/indexer/services/comlink/public/api-documentation.md index b0b21813abd..b4e9810f3da 100644 --- a/indexer/services/comlink/public/api-documentation.md +++ b/indexer/services/comlink/public/api-documentation.md @@ -2299,6 +2299,8 @@ fetch(`${baseURL}/orders?address=string&subaccountNumber=0.1`, |type|TRAILING_STOP| |type|TAKE_PROFIT| |type|TAKE_PROFIT_MARKET| +|type|TWAP| +|type|TWAP_SUBORDER| > Example responses @@ -2326,6 +2328,9 @@ fetch(`${baseURL}/orders?address=string&subaccountNumber=0.1`, "builderAddress": "string", "feePpm": "string", "orderRouterAddress": "string", + "duration": "string", + "interval": "string", + "priceTolerance": "string", "timeInForce": "GTT", "status": "OPEN", "postOnly": true, @@ -2369,6 +2374,9 @@ Status Code **200** |» builderAddress|string|false|none|none| |» feePpm|string|false|none|none| |» orderRouterAddress|string|false|none|none| +|» duration|string|false|none|none| +|» interval|string|false|none|none| +|» priceTolerance|string|false|none|none| |» timeInForce|[APITimeInForce](#schemaapitimeinforce)|true|none|none| |» status|any|true|none|none| @@ -2407,6 +2415,8 @@ Status Code **200** |type|TRAILING_STOP| |type|TAKE_PROFIT| |type|TAKE_PROFIT_MARKET| +|type|TWAP| +|type|TWAP_SUBORDER| |timeInForce|GTT| |timeInForce|FOK| |timeInForce|IOC| @@ -2415,6 +2425,7 @@ Status Code **200** |*anonymous*|CANCELED| |*anonymous*|BEST_EFFORT_CANCELED| |*anonymous*|UNTRIGGERED| +|*anonymous*|ERROR| |*anonymous*|BEST_EFFORT_OPENED|