Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,63 @@ export interface AffiliateWhitelist_TierSDKType {

taker_fee_share_ppm: number;
}
<<<<<<< HEAD
=======
/** AffiliateParameters defines the parameters for the affiliate program. */

export interface AffiliateParameters {
/**
* Maximum attributable volume for a referred user in a 30d rolling window in
* notional
*/
maximum_30dAttributableVolumePerReferredUserNotional: Long;
/** Referred user automatically gets set to this fee tier */

refereeMinimumFeeTierIdx: number;
/**
* Maximum attributable revenue for a referred user in a 30d rolling window in
* quote quantums
*/

maximum_30dAttributableRevenuePerReferredUserQuoteQuantums: Long;
}
/** AffiliateParameters defines the parameters for the affiliate program. */

export interface AffiliateParametersSDKType {
/**
* Maximum attributable volume for a referred user in a 30d rolling window in
* notional
*/
maximum_30d_attributable_volume_per_referred_user_notional: Long;
/** Referred user automatically gets set to this fee tier */

referee_minimum_fee_tier_idx: number;
/**
* Maximum attributable revenue for a referred user in a 30d rolling window in
* quote quantums
*/

maximum_30d_attributable_revenue_per_referred_user_quote_quantums: Long;
}
/** AffiliateOverrides defines the affiliate whitelist. */

export interface AffiliateOverrides {
/**
* List of unique whitelisted addresses.
* These are automatically put at the maximum affiliate tier
*/
addresses: string[];
}
/** AffiliateOverrides defines the affiliate whitelist. */

export interface AffiliateOverridesSDKType {
/**
* List of unique whitelisted addresses.
* These are automatically put at the maximum affiliate tier
*/
addresses: string[];
}
>>>>>>> b901a3bb (Rename proto fields to be a bit more clear (#3112))

function createBaseAffiliateTiers(): AffiliateTiers {
return {
Expand Down Expand Up @@ -283,4 +340,117 @@ export const AffiliateWhitelist_Tier = {
return message;
}

<<<<<<< HEAD
=======
};

function createBaseAffiliateParameters(): AffiliateParameters {
return {
maximum_30dAttributableVolumePerReferredUserNotional: Long.UZERO,
refereeMinimumFeeTierIdx: 0,
maximum_30dAttributableRevenuePerReferredUserQuoteQuantums: Long.UZERO
};
}

export const AffiliateParameters = {
encode(message: AffiliateParameters, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {
if (!message.maximum_30dAttributableVolumePerReferredUserNotional.isZero()) {
writer.uint32(8).uint64(message.maximum_30dAttributableVolumePerReferredUserNotional);
}

if (message.refereeMinimumFeeTierIdx !== 0) {
writer.uint32(16).uint32(message.refereeMinimumFeeTierIdx);
}

if (!message.maximum_30dAttributableRevenuePerReferredUserQuoteQuantums.isZero()) {
writer.uint32(24).uint64(message.maximum_30dAttributableRevenuePerReferredUserQuoteQuantums);
}

return writer;
},

decode(input: _m0.Reader | Uint8Array, length?: number): AffiliateParameters {
const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
let end = length === undefined ? reader.len : reader.pos + length;
const message = createBaseAffiliateParameters();

while (reader.pos < end) {
const tag = reader.uint32();

switch (tag >>> 3) {
case 1:
message.maximum_30dAttributableVolumePerReferredUserNotional = (reader.uint64() as Long);
break;

case 2:
message.refereeMinimumFeeTierIdx = reader.uint32();
break;

case 3:
message.maximum_30dAttributableRevenuePerReferredUserQuoteQuantums = (reader.uint64() as Long);
break;

default:
reader.skipType(tag & 7);
break;
}
}

return message;
},

fromPartial(object: DeepPartial<AffiliateParameters>): AffiliateParameters {
const message = createBaseAffiliateParameters();
message.maximum_30dAttributableVolumePerReferredUserNotional = object.maximum_30dAttributableVolumePerReferredUserNotional !== undefined && object.maximum_30dAttributableVolumePerReferredUserNotional !== null ? Long.fromValue(object.maximum_30dAttributableVolumePerReferredUserNotional) : Long.UZERO;
message.refereeMinimumFeeTierIdx = object.refereeMinimumFeeTierIdx ?? 0;
message.maximum_30dAttributableRevenuePerReferredUserQuoteQuantums = object.maximum_30dAttributableRevenuePerReferredUserQuoteQuantums !== undefined && object.maximum_30dAttributableRevenuePerReferredUserQuoteQuantums !== null ? Long.fromValue(object.maximum_30dAttributableRevenuePerReferredUserQuoteQuantums) : 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>): AffiliateOverrides {
const message = createBaseAffiliateOverrides();
message.addresses = object.addresses?.map(e => e) || [];
return message;
}

>>>>>>> b901a3bb (Rename proto fields to be a bit more clear (#3112))
};
28 changes: 27 additions & 1 deletion proto/dydxprotocol/affiliates/affiliates.proto
Original file line number Diff line number Diff line change
Expand Up @@ -33,4 +33,30 @@ message AffiliateWhitelist {
}
// All affiliate whitelist tiers.
repeated Tier tiers = 1 [ (gogoproto.nullable) = false ];
}
<<<<<<< HEAD
}
=======
}

// AffiliateParameters defines the parameters for the affiliate program.
message AffiliateParameters {
// Maximum attributable volume for a referred user in a 30d rolling window in
// notional
uint64 maximum_30d_attributable_volume_per_referred_user_notional = 1;

// Referred user automatically gets set to this fee tier
uint32 referee_minimum_fee_tier_idx = 2;

// Maximum attributable revenue for a referred user in a 30d rolling window in
// quote quantums
uint64 maximum_30d_attributable_revenue_per_referred_user_quote_quantums = 3;
}

// AffiliateOverrides defines the affiliate whitelist.
message AffiliateOverrides {
// List of unique whitelisted addresses.
// These are automatically put at the maximum affiliate tier
repeated string addresses = 1
[ (cosmos_proto.scalar) = "cosmos.AddressString" ];
}
>>>>>>> b901a3bb (Rename proto fields to be a bit more clear (#3112))
45 changes: 45 additions & 0 deletions protocol/x/affiliates/keeper/keeper_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -847,3 +847,48 @@ func TestGetTierForAffiliateEmptyTiers(t *testing.T) {
require.Equal(t, uint32(0), tierLevel)
require.Equal(t, uint32(0), feeSharePpm)
}
<<<<<<< HEAD
=======

func TestUpdateAffiliateParameters(t *testing.T) {
tApp := testapp.NewTestAppBuilder(t).Build()
ctx := tApp.InitChain()
k := tApp.App.AffiliatesKeeper

err := k.UpdateAffiliateParameters(ctx, &types.MsgUpdateAffiliateParameters{
Authority: constants.GovAuthority,
AffiliateParameters: types.DefaultAffiliateParameters,
})
require.NoError(t, err)

affiliateParameters, err := k.GetAffiliateParameters(ctx)
require.NoError(t, err)
require.Equal(t, uint64(100), affiliateParameters.GetMaximum_30DAttributableVolumePerReferredUserNotional())
require.Equal(t, uint32(1), affiliateParameters.GetRefereeMinimumFeeTierIdx())
require.Equal(t, uint64(100), affiliateParameters.GetMaximum_30DAttributableRevenuePerReferredUserQuoteQuantums())
}

func TestGetTierForAffiliateOverrides(t *testing.T) {
tApp := testapp.NewTestAppBuilder(t).Build()
ctx := tApp.InitChain()
k := tApp.App.AffiliatesKeeper

err := k.UpdateAffiliateTiers(ctx, types.DefaultAffiliateTiers)
require.NoError(t, err)

tierLevel, feeSharePpm, err := k.GetTierForAffiliate(ctx, constants.AliceAccAddress.String())
require.NoError(t, err)
require.Equal(t, uint32(3), tierLevel)
require.Equal(t, uint32(150_000), feeSharePpm)

err = k.SetAffiliateOverrides(ctx, types.AffiliateOverrides{
Addresses: []string{constants.AliceAccAddress.String()},
})
require.NoError(t, err)

tierLevel, feeSharePpm, err = k.GetTierForAffiliate(ctx, constants.AliceAccAddress.String())
require.NoError(t, err)
require.Equal(t, uint32(4), tierLevel)
require.Equal(t, uint32(200_000), feeSharePpm)
}
>>>>>>> b901a3bb (Rename proto fields to be a bit more clear (#3112))
Loading
Loading