Skip to content

Commit 2bca3bc

Browse files
Create governance messages for sliding affiliate scheme (backport #3092) (#3175)
Co-authored-by: Justin Barnett <61020572+jusbar23@users.noreply.github.com>
1 parent bf7418c commit 2bca3bc

File tree

30 files changed

+3425
-190
lines changed

30 files changed

+3425
-190
lines changed

Makefile

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,18 @@ proto-gen:
1313
@echo "Generating Protobuf files"
1414
@$(protoImage) sh ./protocol/scripts/protocgen.sh
1515

16+
proto-clean:
17+
@rm -rf ./proto/.proto-export
18+
@rm -rf ./.proto-export
19+
20+
proto-gen-clean:
21+
@echo "Cleaning old artifacts"
22+
@rm -rf ./proto/.proto-export
23+
@rm -rf ./.proto-export
24+
@echo "Generating Protobuf files"
25+
@$(protoImage) sh ./protocol/scripts/protocgen.sh
26+
@cd proto && make proto-export-v4-proto-js
27+
1628
proto-check-bc-breaking:
1729
@rm -rf ./.proto-export
1830
@$(protoImage) buf breaking --against .git#branch=$$(git merge-base HEAD origin/main)

indexer/packages/v4-protos/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
"build:prod": "rm -rf build/ && tsc",
1111
"build:watch": "pnpm run build -- --watch",
1212
"test": "echo \"Error: no test specified\"",
13-
"build:proto": "(cd ../../.. && make proto-export) && rm -rf src/codegen && telescope transpile --protoDirs ../../../.proto-export --outPath ./src/codegen --no-includeAminos --includeLCDClients --includeRPCClients",
13+
"build:proto": "(cd ../../../proto && rm -rf .proto-export && cd ../ && rm -rf .proto-export && make proto-export) && rm -rf src/codegen && telescope transpile --protoDirs ../../../.proto-export --outPath ./src/codegen --no-includeAminos --includeLCDClients --includeRPCClients",
1414
"build:verify-proto": "pnpm run build:proto && git diff --exit-code src/codegen",
1515
"postinstall": "patch-package"
1616
},

indexer/packages/v4-protos/src/codegen/dydxprotocol/affiliates/affiliates.ts

Lines changed: 158 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,54 @@ export interface AffiliateWhitelist_TierSDKType {
7474

7575
taker_fee_share_ppm: number;
7676
}
77+
/** AffiliateParameters defines the parameters for the affiliate program. */
78+
79+
export interface AffiliateParameters {
80+
/** Maximum commission per referred user in a 30d rolling window in revenue */
81+
maximum_30dCommissionPerReferredQuoteQuantums: Long;
82+
/** Referee minimum fee tier index */
83+
84+
refereeMinimumFeeTierIdx: number;
85+
/**
86+
* Maximum attributable revenue per affiliate in a 30d rolling window in
87+
* revenue
88+
*/
89+
90+
maximum_30dAttributableRevenuePerAffiliateQuoteQuantums: Long;
91+
}
92+
/** AffiliateParameters defines the parameters for the affiliate program. */
93+
94+
export interface AffiliateParametersSDKType {
95+
/** Maximum commission per referred user in a 30d rolling window in revenue */
96+
maximum_30d_commission_per_referred_quote_quantums: Long;
97+
/** Referee minimum fee tier index */
98+
99+
referee_minimum_fee_tier_idx: number;
100+
/**
101+
* Maximum attributable revenue per affiliate in a 30d rolling window in
102+
* revenue
103+
*/
104+
105+
maximum_30d_attributable_revenue_per_affiliate_quote_quantums: Long;
106+
}
107+
/** AffiliateOverrides defines the affiliate whitelist. */
108+
109+
export interface AffiliateOverrides {
110+
/**
111+
* List of unique whitelisted addresses.
112+
* These are automatically put at the maximum affiliate tier
113+
*/
114+
addresses: string[];
115+
}
116+
/** AffiliateOverrides defines the affiliate whitelist. */
117+
118+
export interface AffiliateOverridesSDKType {
119+
/**
120+
* List of unique whitelisted addresses.
121+
* These are automatically put at the maximum affiliate tier
122+
*/
123+
addresses: string[];
124+
}
77125

78126
function createBaseAffiliateTiers(): AffiliateTiers {
79127
return {
@@ -283,4 +331,114 @@ export const AffiliateWhitelist_Tier = {
283331
return message;
284332
}
285333

334+
};
335+
336+
function createBaseAffiliateParameters(): AffiliateParameters {
337+
return {
338+
maximum_30dCommissionPerReferredQuoteQuantums: Long.UZERO,
339+
refereeMinimumFeeTierIdx: 0,
340+
maximum_30dAttributableRevenuePerAffiliateQuoteQuantums: Long.UZERO
341+
};
342+
}
343+
344+
export const AffiliateParameters = {
345+
encode(message: AffiliateParameters, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {
346+
if (!message.maximum_30dCommissionPerReferredQuoteQuantums.isZero()) {
347+
writer.uint32(8).uint64(message.maximum_30dCommissionPerReferredQuoteQuantums);
348+
}
349+
350+
if (message.refereeMinimumFeeTierIdx !== 0) {
351+
writer.uint32(16).uint32(message.refereeMinimumFeeTierIdx);
352+
}
353+
354+
if (!message.maximum_30dAttributableRevenuePerAffiliateQuoteQuantums.isZero()) {
355+
writer.uint32(24).uint64(message.maximum_30dAttributableRevenuePerAffiliateQuoteQuantums);
356+
}
357+
358+
return writer;
359+
},
360+
361+
decode(input: _m0.Reader | Uint8Array, length?: number): AffiliateParameters {
362+
const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
363+
let end = length === undefined ? reader.len : reader.pos + length;
364+
const message = createBaseAffiliateParameters();
365+
366+
while (reader.pos < end) {
367+
const tag = reader.uint32();
368+
369+
switch (tag >>> 3) {
370+
case 1:
371+
message.maximum_30dCommissionPerReferredQuoteQuantums = (reader.uint64() as Long);
372+
break;
373+
374+
case 2:
375+
message.refereeMinimumFeeTierIdx = reader.uint32();
376+
break;
377+
378+
case 3:
379+
message.maximum_30dAttributableRevenuePerAffiliateQuoteQuantums = (reader.uint64() as Long);
380+
break;
381+
382+
default:
383+
reader.skipType(tag & 7);
384+
break;
385+
}
386+
}
387+
388+
return message;
389+
},
390+
391+
fromPartial(object: DeepPartial<AffiliateParameters>): AffiliateParameters {
392+
const message = createBaseAffiliateParameters();
393+
message.maximum_30dCommissionPerReferredQuoteQuantums = object.maximum_30dCommissionPerReferredQuoteQuantums !== undefined && object.maximum_30dCommissionPerReferredQuoteQuantums !== null ? Long.fromValue(object.maximum_30dCommissionPerReferredQuoteQuantums) : Long.UZERO;
394+
message.refereeMinimumFeeTierIdx = object.refereeMinimumFeeTierIdx ?? 0;
395+
message.maximum_30dAttributableRevenuePerAffiliateQuoteQuantums = object.maximum_30dAttributableRevenuePerAffiliateQuoteQuantums !== undefined && object.maximum_30dAttributableRevenuePerAffiliateQuoteQuantums !== null ? Long.fromValue(object.maximum_30dAttributableRevenuePerAffiliateQuoteQuantums) : Long.UZERO;
396+
return message;
397+
}
398+
399+
};
400+
401+
function createBaseAffiliateOverrides(): AffiliateOverrides {
402+
return {
403+
addresses: []
404+
};
405+
}
406+
407+
export const AffiliateOverrides = {
408+
encode(message: AffiliateOverrides, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {
409+
for (const v of message.addresses) {
410+
writer.uint32(10).string(v!);
411+
}
412+
413+
return writer;
414+
},
415+
416+
decode(input: _m0.Reader | Uint8Array, length?: number): AffiliateOverrides {
417+
const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
418+
let end = length === undefined ? reader.len : reader.pos + length;
419+
const message = createBaseAffiliateOverrides();
420+
421+
while (reader.pos < end) {
422+
const tag = reader.uint32();
423+
424+
switch (tag >>> 3) {
425+
case 1:
426+
message.addresses.push(reader.string());
427+
break;
428+
429+
default:
430+
reader.skipType(tag & 7);
431+
break;
432+
}
433+
}
434+
435+
return message;
436+
},
437+
438+
fromPartial(object: DeepPartial<AffiliateOverrides>): AffiliateOverrides {
439+
const message = createBaseAffiliateOverrides();
440+
message.addresses = object.addresses?.map(e => e) || [];
441+
return message;
442+
}
443+
286444
};

indexer/packages/v4-protos/src/codegen/dydxprotocol/affiliates/query.lcd.ts

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { LCDClient } from "@osmonauts/lcd";
2-
import { AffiliateInfoRequest, AffiliateInfoResponseSDKType, ReferredByRequest, ReferredByResponseSDKType, AllAffiliateTiersRequest, AllAffiliateTiersResponseSDKType, AffiliateWhitelistRequest, AffiliateWhitelistResponseSDKType } from "./query";
2+
import { AffiliateInfoRequest, AffiliateInfoResponseSDKType, ReferredByRequest, ReferredByResponseSDKType, AllAffiliateTiersRequest, AllAffiliateTiersResponseSDKType, AffiliateWhitelistRequest, AffiliateWhitelistResponseSDKType, AffiliateParametersRequest, AffiliateParametersResponseSDKType, AffiliateOverridesRequest, AffiliateOverridesResponseSDKType } from "./query";
33
export class LCDQueryClient {
44
req: LCDClient;
55

@@ -13,6 +13,8 @@ export class LCDQueryClient {
1313
this.referredBy = this.referredBy.bind(this);
1414
this.allAffiliateTiers = this.allAffiliateTiers.bind(this);
1515
this.affiliateWhitelist = this.affiliateWhitelist.bind(this);
16+
this.affiliateParameters = this.affiliateParameters.bind(this);
17+
this.affiliateOverrides = this.affiliateOverrides.bind(this);
1618
}
1719
/* Query AffiliateInfo returns the affiliate info for a given address. */
1820

@@ -42,5 +44,19 @@ export class LCDQueryClient {
4244
const endpoint = `dydxprotocol/affiliates/affiliate_whitelist`;
4345
return await this.req.get<AffiliateWhitelistResponseSDKType>(endpoint);
4446
}
47+
/* Query AffiliateParameters returns the affiliate parameters. */
48+
49+
50+
async affiliateParameters(_params: AffiliateParametersRequest = {}): Promise<AffiliateParametersResponseSDKType> {
51+
const endpoint = `dydxprotocol/affiliates/affiliate_parameters`;
52+
return await this.req.get<AffiliateParametersResponseSDKType>(endpoint);
53+
}
54+
/* Query AffiliateOverrides returns the affiliate overrides. */
55+
56+
57+
async affiliateOverrides(_params: AffiliateOverridesRequest = {}): Promise<AffiliateOverridesResponseSDKType> {
58+
const endpoint = `dydxprotocol/affiliates/affiliate_overrides`;
59+
return await this.req.get<AffiliateOverridesResponseSDKType>(endpoint);
60+
}
4561

4662
}

indexer/packages/v4-protos/src/codegen/dydxprotocol/affiliates/query.rpc.Query.ts

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { Rpc } from "../../helpers";
22
import * as _m0 from "protobufjs/minimal";
33
import { QueryClient, createProtobufRpcClient } from "@cosmjs/stargate";
4-
import { AffiliateInfoRequest, AffiliateInfoResponse, ReferredByRequest, ReferredByResponse, AllAffiliateTiersRequest, AllAffiliateTiersResponse, AffiliateWhitelistRequest, AffiliateWhitelistResponse } from "./query";
4+
import { AffiliateInfoRequest, AffiliateInfoResponse, ReferredByRequest, ReferredByResponse, AllAffiliateTiersRequest, AllAffiliateTiersResponse, AffiliateWhitelistRequest, AffiliateWhitelistResponse, AffiliateParametersRequest, AffiliateParametersResponse, AffiliateOverridesRequest, AffiliateOverridesResponse } from "./query";
55
/** Query defines the gRPC querier service. */
66

77
export interface Query {
@@ -16,6 +16,12 @@ export interface Query {
1616
/** Query AffiliateWhitelist returns the affiliate whitelist. */
1717

1818
affiliateWhitelist(request?: AffiliateWhitelistRequest): Promise<AffiliateWhitelistResponse>;
19+
/** Query AffiliateParameters returns the affiliate parameters. */
20+
21+
affiliateParameters(request?: AffiliateParametersRequest): Promise<AffiliateParametersResponse>;
22+
/** Query AffiliateOverrides returns the affiliate overrides. */
23+
24+
affiliateOverrides(request?: AffiliateOverridesRequest): Promise<AffiliateOverridesResponse>;
1925
}
2026
export class QueryClientImpl implements Query {
2127
private readonly rpc: Rpc;
@@ -26,6 +32,8 @@ export class QueryClientImpl implements Query {
2632
this.referredBy = this.referredBy.bind(this);
2733
this.allAffiliateTiers = this.allAffiliateTiers.bind(this);
2834
this.affiliateWhitelist = this.affiliateWhitelist.bind(this);
35+
this.affiliateParameters = this.affiliateParameters.bind(this);
36+
this.affiliateOverrides = this.affiliateOverrides.bind(this);
2937
}
3038

3139
affiliateInfo(request: AffiliateInfoRequest): Promise<AffiliateInfoResponse> {
@@ -52,6 +60,18 @@ export class QueryClientImpl implements Query {
5260
return promise.then(data => AffiliateWhitelistResponse.decode(new _m0.Reader(data)));
5361
}
5462

63+
affiliateParameters(request: AffiliateParametersRequest = {}): Promise<AffiliateParametersResponse> {
64+
const data = AffiliateParametersRequest.encode(request).finish();
65+
const promise = this.rpc.request("dydxprotocol.affiliates.Query", "AffiliateParameters", data);
66+
return promise.then(data => AffiliateParametersResponse.decode(new _m0.Reader(data)));
67+
}
68+
69+
affiliateOverrides(request: AffiliateOverridesRequest = {}): Promise<AffiliateOverridesResponse> {
70+
const data = AffiliateOverridesRequest.encode(request).finish();
71+
const promise = this.rpc.request("dydxprotocol.affiliates.Query", "AffiliateOverrides", data);
72+
return promise.then(data => AffiliateOverridesResponse.decode(new _m0.Reader(data)));
73+
}
74+
5575
}
5676
export const createRpcQueryExtension = (base: QueryClient) => {
5777
const rpc = createProtobufRpcClient(base);
@@ -71,6 +91,14 @@ export const createRpcQueryExtension = (base: QueryClient) => {
7191

7292
affiliateWhitelist(request?: AffiliateWhitelistRequest): Promise<AffiliateWhitelistResponse> {
7393
return queryService.affiliateWhitelist(request);
94+
},
95+
96+
affiliateParameters(request?: AffiliateParametersRequest): Promise<AffiliateParametersResponse> {
97+
return queryService.affiliateParameters(request);
98+
},
99+
100+
affiliateOverrides(request?: AffiliateOverridesRequest): Promise<AffiliateOverridesResponse> {
101+
return queryService.affiliateOverrides(request);
74102
}
75103

76104
};

0 commit comments

Comments
 (0)