Skip to content

Commit

Permalink
chore(fee-taker-ext): move whitelist discount to ResolverFee (#39)
Browse files Browse the repository at this point in the history
  • Loading branch information
vbrvk authored Jan 23, 2025
1 parent c30a17b commit b9bb13e
Show file tree
Hide file tree
Showing 6 changed files with 39 additions and 74 deletions.
38 changes: 9 additions & 29 deletions src/limit-order/extensions/fee-taker/fee-taker.extension.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@ describe('FeeTakerExtension', () => {
new Fees(
new ResolverFee(
recipients.protocolFeeRecipient,
Bps.fromPercent(2)
Bps.fromPercent(2),
Bps.fromPercent(1)
),
new IntegratorFee(
recipients.integratorFeeRecipient,
Expand All @@ -28,10 +29,7 @@ describe('FeeTakerExtension', () => {
Bps.fromPercent(5)
)
),
{
discount: Bps.fromPercent(1),
addresses: [Address.fromBigInt(100n)]
},
[Address.fromBigInt(100n)],
{
makerPermit: new Interaction(
Address.fromBigInt(1n),
Expand Down Expand Up @@ -62,10 +60,7 @@ describe('FeeTakerExtension', () => {
Bps.fromPercent(2)
)
),
{
discount: Bps.fromPercent(0),
addresses: [Address.fromBigInt(100n)]
}
[Address.fromBigInt(100n)]
)

expect(FeeTakerExtension.fromExtension(extension.build())).toEqual(
Expand All @@ -88,10 +83,7 @@ describe('FeeTakerExtension', () => {
Bps.fromPercent(5)
)
),
{
discount: Bps.fromPercent(0),
addresses: [Address.fromBigInt(100n)]
}
[Address.fromBigInt(100n)]
)

expect(FeeTakerExtension.fromExtension(extension.build())).toEqual(
Expand All @@ -107,10 +99,7 @@ describe('FeeTakerExtension', () => {
Fees.resolverFee(
new ResolverFee(Address.fromBigInt(2n), Bps.fromPercent(1))
),
{
addresses: [takerAddress], // mark taker as whitelisted resolver
discount: Bps.ZERO
}
[takerAddress] // mark taker as whitelisted resolver
)

const takingAmount = ext.getTakingAmount(takerAddress, 100_000_000n)
Expand All @@ -124,10 +113,7 @@ describe('FeeTakerExtension', () => {
Fees.resolverFee(
new ResolverFee(Address.fromBigInt(2n), Bps.fromPercent(1))
),
{
addresses: [takerAddress], // mark taker as whitelisted resolver
discount: Bps.ZERO
}
[takerAddress] // mark taker as whitelisted resolver
)

const resolverFee = ext.getResolverFee(takerAddress, 100_000_000n)
Expand All @@ -146,10 +132,7 @@ describe('FeeTakerExtension', () => {
Bps.fromPercent(10) // share
)
),
{
addresses: [takerAddress], // mark taker as whitelisted resolver
discount: Bps.ZERO
}
[takerAddress] // mark taker as whitelisted resolver
)

const integratorFee = ext.getIntegratorFee(takerAddress, 100_000_000n)
Expand All @@ -170,10 +153,7 @@ describe('FeeTakerExtension', () => {
Bps.fromPercent(10) // share
)
),
{
addresses: [takerAddress], // mark taker as whitelisted resolver
discount: Bps.ZERO
}
[takerAddress] // mark taker as whitelisted resolver
)

const protocolFee = ext.getProtocolFee(takerAddress, 100_000_000n)
Expand Down
38 changes: 18 additions & 20 deletions src/limit-order/extensions/fee-taker/fee-taker.extension.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import {BN, BytesBuilder, BytesIter} from '@1inch/byte-utils'
import assert from 'assert'
import {WhitelistInfo} from './types'
import {mulDiv, Rounding} from './mul-div'
import {Fees} from './fees'
import {ResolverFee} from './resolver-fee'
Expand All @@ -24,7 +23,10 @@ export class FeeTakerExtension {
private constructor(
public readonly address: Address,
public readonly fees: Fees,
public readonly whitelist: WhitelistInfo,
/**
* Last 10 bytes of addresses
*/
public readonly whitelist: string[],
public readonly makerPermit?: Interaction,
public readonly extraInteraction?: Interaction,
public readonly customReceiver?: Address
Expand All @@ -43,13 +45,7 @@ export class FeeTakerExtension {
/**
* If empty, then KYC token is required to fill order
*/
whitelist?: {
addresses: Address[]
/**
* Whitelisted resolvers have discount on fee
*/
discount: Bps
},
whitelist?: Address[],
extra?: {
makerPermit?: Interaction
/**
Expand All @@ -63,10 +59,7 @@ export class FeeTakerExtension {
extraInteraction?: Interaction
}
): FeeTakerExtension {
const _whitelist = {
addresses: whitelist?.addresses.map((w) => w.lastHalf()) || [],
discount: whitelist?.discount || Bps.fromPercent(0)
}
const _whitelist = whitelist?.map((w) => w.lastHalf()) || []

return new FeeTakerExtension(
address,
Expand Down Expand Up @@ -182,7 +175,8 @@ export class FeeTakerExtension {
? ResolverFee.ZERO
: new ResolverFee(
protocolFeeRecipient,
amountData.fees.resolverFee
amountData.fees.resolverFee,
amountData.whitelist.discount
),
amountData.fees.integratorFee.isZero()
? IntegratorFee.ZERO
Expand All @@ -193,7 +187,7 @@ export class FeeTakerExtension {
amountData.fees.integratorShare
)
),
amountData.whitelist,
amountData.whitelist.addresses,
permit,
extraInteraction,
customTokensRecipient
Expand Down Expand Up @@ -223,7 +217,7 @@ export class FeeTakerExtension {
public isWhitelisted(address: Address): boolean {
const half = address.lastHalf()

return this.whitelist.addresses.some((w) => w === half)
return this.whitelist.some((w) => w === half)
}

public getTakingAmount(taker: Address, orderTakingAmount: bigint): bigint {
Expand Down Expand Up @@ -346,7 +340,9 @@ export class FeeTakerExtension {
} {
const discountNumerator = this.isWhitelisted(taker)
? (Number(Fees.BASE_1E2) -
this.whitelist.discount.toFraction(Fees.BASE_1E2)) /
this.fees.resolver.whitelistDiscount.toFraction(
Fees.BASE_1E2
)) /
Number(Fees.BASE_1E2)
: 1

Expand Down Expand Up @@ -392,12 +388,14 @@ export class FeeTakerExtension {
BigInt(
// contract expects discount numerator, but class contain discount
Number(Fees.BASE_1E2) -
this.whitelist.discount.toFraction(Fees.BASE_1E2)
this.fees.resolver.whitelistDiscount.toFraction(
Fees.BASE_1E2
)
)
)
.addUint8(BigInt(this.whitelist.addresses.length))
.addUint8(BigInt(this.whitelist.length))

for (const halfAddress of this.whitelist.addresses) {
for (const halfAddress of this.whitelist) {
builder.addBytes(halfAddress)
}

Expand Down
10 changes: 9 additions & 1 deletion src/limit-order/extensions/fee-taker/resolver-fee.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,11 @@ export class ResolverFee {

constructor(
public readonly receiver: Address,
public readonly fee: Bps
public readonly fee: Bps,
/**
* whitelisted resolvers have discount on fee
*/
public readonly whitelistDiscount = Bps.ZERO
) {
if (receiver.isZero() && !fee.isZero()) {
throw new Error('fee must be zero if receiver is zero address')
Expand All @@ -18,5 +22,9 @@ export class ResolverFee {
if (!receiver.isZero() && fee.isZero()) {
throw new Error('receiver must be zero address if fee is zero')
}

if (fee.isZero() && !whitelistDiscount.isZero()) {
throw new Error('whitelist discount must be zero if fee is zero')
}
}
}
12 changes: 0 additions & 12 deletions src/limit-order/extensions/fee-taker/types.ts

This file was deleted.

5 changes: 1 addition & 4 deletions src/limit-order/limit-order-with-fee.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,7 @@ describe('LimitOrderWithFee', () => {
Bps.fromPercent(5)
)
),
{
discount: Bps.fromPercent(1),
addresses: [Address.fromBigInt(100n)]
},
[Address.fromBigInt(100n)],
{
makerPermit: new Interaction(
Address.fromBigInt(1n),
Expand Down
10 changes: 2 additions & 8 deletions tests/extensions/fee-taker/fee-taker.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,10 +55,7 @@ describe('FeeTakerExtension', () => {
Bps.fromPercent(1)
)
),
{
addresses: [takerAddress], // mark taker as whitelisted resolver
discount: Bps.ZERO
}
[takerAddress] // mark taker as whitelisted resolver
)

const order = new LimitOrderWithFee(
Expand Down Expand Up @@ -159,10 +156,7 @@ describe('FeeTakerExtension', () => {
Bps.fromPercent(50) // share
)
),
{
addresses: [takerAddress], // mark taker as whitelisted resolver
discount: Bps.ZERO
}
[takerAddress] // mark taker as whitelisted resolver
)

const order = new LimitOrderWithFee(
Expand Down

0 comments on commit b9bb13e

Please sign in to comment.