Skip to content
Merged
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
11 changes: 7 additions & 4 deletions src/permissionless/bindings/treasury-splitter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -108,13 +108,16 @@ export class TreasurySplitterContract extends BaseContract<typeof abi> {
functionName: decoded.functionName,
...this.parseFunctionParams(decoded),
};
} case "setDefaultSplit": {
}
case "setDefaultSplit": {
const [receivers, proportions] = args;
return {
receivers: json_stringify(receivers),
proportions: json_stringify(proportions.map((proportion) => `${proportion / 100}% [${proportion}]`))

,
proportions: json_stringify(
proportions.map(
proportion => `${proportion / 100}% [${proportion}]`,
),
),
};
}

Expand Down
1 change: 1 addition & 0 deletions src/sdk/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ export * from "./market/index.js";
export * from "./options.js";
export * from "./plugins/index.js";
export * from "./poolMigration/index.js";
export * from "./pools/index.js";
export * from "./router/index.js";
export * from "./sdk-gov-legacy/index.js";
export * from "./sdk-legacy/index.js";
Expand Down
127 changes: 127 additions & 0 deletions src/sdk/pools/AbstractPoolService.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
import { ierc20ZapperDepositsAbi } from "../../abi/iERC20ZapperDeposits.js";
import { iethZapperDepositsAbi } from "../../abi/iETHZapperDeposits.js";
import { iZapperAbi } from "../../abi/iZapper.js";
import { iPoolV300Abi } from "../../abi/v300.js";
import { SDKConstruct } from "../base/index.js";
import type { GearboxSDK } from "../GearboxSDK.js";
import type {
AddLiquidityCall,
AddLiquidityProps,
RemoveLiquidityCall,
RemoveLiquidityProps,
} from "./types.js";

export abstract class AbstractPoolService extends SDKConstruct {
#version: number;

constructor(sdk: GearboxSDK, version: number) {
super(sdk);

this.#version = version;
this.logger?.debug(`Created PoolService with version: ${this.#version}`);
}

public addLiquidity({
collateral,
pool,
account,
zapper,
permit,
nativeTokenAddress,
referralCode = 0n,
migrate,
}: AddLiquidityProps): AddLiquidityCall {
if (zapper?.tokenIn === nativeTokenAddress) {
return [
{
target: zapper.zapper,
abi: iethZapperDepositsAbi,
functionName: "depositWithReferral",
args: [account, referralCode],
value: collateral.balance,
},
];
} else if (zapper) {
return permit
? [
{
target: zapper.zapper,
abi: ierc20ZapperDepositsAbi,
functionName: "depositWithReferralAndPermit",
args: [
collateral.balance,
account,
referralCode,
permit.deadline,
permit.v,
permit.r,
permit.s,
],
},
]
: [
{
target: zapper.zapper,
abi: ierc20ZapperDepositsAbi,
functionName: "depositWithReferral",
args: [collateral.balance, account, referralCode],
},
];
} else {
if (migrate) throw Error("No zapper for migration");

return [
{
target: pool,
abi: iPoolV300Abi,
functionName: "depositWithReferral",
args: [collateral.balance, account, referralCode],
},
];
}
}

public removeLiquidity({
pool,
amount,
account,
zapper,
permit,
}: RemoveLiquidityProps): RemoveLiquidityCall {
if (zapper) {
return permit
? [
{
target: zapper.zapper,
abi: iZapperAbi,
functionName: "redeemWithPermit",
args: [
amount,
account,
permit.deadline,
permit.v,
permit.r,
permit.s,
],
},
]
: [
{
target: zapper.zapper,
abi: iZapperAbi,
functionName: "redeem",
args: [amount, account],
},
];
} else {
return [
{
target: pool,
abi: iPoolV300Abi,
functionName: "redeem",
args: [amount, account, account],
},
];
}
}
}
6 changes: 6 additions & 0 deletions src/sdk/pools/PoolServiceV300.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import { AbstractPoolService } from "./AbstractPoolService.js";
import type { IPoolsService } from "./types.js";

export class PoolServiceV300
extends AbstractPoolService
implements IPoolsService {}
6 changes: 6 additions & 0 deletions src/sdk/pools/PoolServiceV310.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import { AbstractPoolService } from "./AbstractPoolService.js";
import type { IPoolsService } from "./types.js";

export class PoolServiceV310
extends AbstractPoolService
implements IPoolsService {}
23 changes: 23 additions & 0 deletions src/sdk/pools/createPoolService.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import { isV300, isV310 } from "../constants/index.js";
import type { GearboxSDK } from "../GearboxSDK.js";
import type { AbstractPoolService } from "./AbstractPoolService.js";
import { PoolServiceV300 } from "./PoolServiceV300.js";
import { PoolServiceV310 } from "./PoolServiceV310.js";

/**
* @sdk
* @version version of desired pool service; either v300 or v310
* @returns
*/
export function createPoolService(
sdk: GearboxSDK,
version: number,
): AbstractPoolService {
if (isV300(version)) {
return new PoolServiceV300(sdk, version);
}
if (isV310(version)) {
return new PoolServiceV310(sdk, version);
}
throw new Error(`Unsupported Pool Service version ${version}`);
}
3 changes: 3 additions & 0 deletions src/sdk/pools/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export * from "./AbstractPoolService.js";
export * from "./createPoolService.js";
export * from "./types.js";
107 changes: 107 additions & 0 deletions src/sdk/pools/types.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
import type { Address } from "viem";
import type { ierc20ZapperDepositsAbi } from "../../abi/iERC20ZapperDeposits.js";
import type { iethZapperDepositsAbi } from "../../abi/iETHZapperDeposits.js";
import type { iZapperAbi } from "../../abi/iZapper.js";
import type { iPoolV300Abi } from "../../abi/v300.js";
import type { PoolData_Legacy } from "../index.js";
import type { Asset } from "../router/index.js";

interface PermitResult {
r: Address;
s: Address;
v: number;

token: Address;
owner: Address;
spender: Address;
value: bigint;

deadline: bigint;
nonce: bigint;
}

export interface AddLiquidityProps {
collateral: Asset;
pool: Address;
account: Address;

migrate: boolean;

zapper: PoolData_Legacy["zappers"][Address][Address] | undefined;
permit: PermitResult | undefined;
nativeTokenAddress: Address;

referralCode: bigint | undefined;
}
export type AddLiquidityCall = [
| {
target: Address;
abi: typeof iethZapperDepositsAbi;
functionName: "depositWithReferral";
args: [Address, bigint];
value: bigint;
}
| {
target: Address;
abi: typeof ierc20ZapperDepositsAbi;
functionName: "depositWithReferralAndPermit";
args: [bigint, Address, bigint, bigint, number, Address, Address];
}
| {
target: Address;
abi: typeof ierc20ZapperDepositsAbi;
functionName: "depositWithReferral";
args: [bigint, Address, bigint];
}
| {
target: Address;
abi: typeof iPoolV300Abi;
functionName: "depositWithReferral";
args: [bigint, Address, bigint];
},
];

export interface RemoveLiquidityProps {
pool: Address;
amount: bigint;
account: Address;
permit: PermitResult | undefined;

zapper: PoolData_Legacy["zappers"][Address][Address];
}
export type RemoveLiquidityCall = [
| {
target: Address;
abi: typeof iZapperAbi;
functionName: "redeemWithPermit";
args: [bigint, Address, bigint, number, Address, Address];
}
| {
target: Address;
abi: typeof iZapperAbi;
functionName: "redeem";
args: [bigint, Address];
}
| {
target: Address;
abi: typeof iPoolV300Abi;
functionName: "redeem";
args: [bigint, Address, Address];
},
];

export interface IPoolsService {
/**
* Add liquidity to a pool
* @param props - {@link AddLiquidityProps}
* @returns - {@link AddLiquidityCall}
*/
addLiquidity(props: AddLiquidityProps): AddLiquidityCall;

/**
* Remove liquidity from a pool
* @param props - {@link RemoveLiquidityProps}
* @returns - {@link RemoveLiquidityCall}
*/
removeLiquidity(props: RemoveLiquidityProps): RemoveLiquidityCall;
}
Loading