Skip to content

Commit

Permalink
Merge pull request #358 from balancer-labs/develop
Browse files Browse the repository at this point in the history
Release 4.1.1-beta.1.
  • Loading branch information
John Grant authored Feb 10, 2023
2 parents 2ab5f8f + 9ec2627 commit d66e6d2
Show file tree
Hide file tree
Showing 4 changed files with 152 additions and 143 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@balancer-labs/sor",
"version": "4.1.1-beta.0",
"version": "4.1.1-beta.1",
"license": "GPL-3.0-only",
"main": "dist/index.js",
"module": "dist/index.esm.js",
Expand Down
288 changes: 148 additions & 140 deletions src/pools/linearPool/linearPool.ts
Original file line number Diff line number Diff line change
Expand Up @@ -785,154 +785,162 @@ export class LinearPool implements PoolBase<LinearPoolPairData> {
poolPairData: LinearPoolPairData,
amount: OldBigNumber
): OldBigNumber {
const bigintAmount = parseFixed(
amount.dp(18).toString(),
18
).toBigInt();
const mainBalance = poolPairData.mainBalanceScaled.toBigInt();
const wrappedBalance = poolPairData.wrappedBalanceScaled.toBigInt();
const bptSupply = poolPairData.virtualBptSupply.toBigInt();
const params = {
fee: poolPairData.swapFee.toBigInt(),
lowerTarget: poolPairData.lowerTarget.toBigInt(),
upperTarget: poolPairData.upperTarget.toBigInt(),
rate: poolPairData.rate.toBigInt(),
};
let result: bigint;
if (poolPairData.pairType === PairTypes.MainTokenToBpt) {
result = _spotPriceAfterSwapBptOutPerMainIn(
bigintAmount,
mainBalance,
wrappedBalance,
bptSupply,
params
);
} else if (poolPairData.pairType === PairTypes.BptToMainToken) {
result = _spotPriceAfterSwapMainOutPerBptIn(
bigintAmount,
mainBalance,
wrappedBalance,
bptSupply,
params
);
} else if (poolPairData.pairType === PairTypes.WrappedTokenToBpt) {
result = _spotPriceAfterSwapBptOutPerWrappedIn(
bigintAmount,
mainBalance,
wrappedBalance,
bptSupply,
params
);
} else if (poolPairData.pairType === PairTypes.BptToWrappedToken) {
result = _spotPriceAfterSwapWrappedOutPerBptIn(
bigintAmount,
mainBalance,
wrappedBalance,
bptSupply,
params
);
} else if (
poolPairData.pairType === PairTypes.MainTokenToWrappedToken
) {
result = _spotPriceAfterSwapWrappedOutPerMainIn(
bigintAmount,
mainBalance,
wrappedBalance,
bptSupply,
params
);
} else if (
poolPairData.pairType === PairTypes.WrappedTokenToMainToken
) {
result = _spotPriceAfterSwapMainOutPerWrappedIn(
bigintAmount,
mainBalance,
wrappedBalance,
bptSupply,
params
try {
const bigintAmount = parseFixed(
amount.dp(18).toString(),
18
).toBigInt();
const mainBalance = poolPairData.mainBalanceScaled.toBigInt();
const wrappedBalance = poolPairData.wrappedBalanceScaled.toBigInt();
const bptSupply = poolPairData.virtualBptSupply.toBigInt();
const params = {
fee: poolPairData.swapFee.toBigInt(),
lowerTarget: poolPairData.lowerTarget.toBigInt(),
upperTarget: poolPairData.upperTarget.toBigInt(),
rate: poolPairData.rate.toBigInt(),
};
let result: bigint;
if (poolPairData.pairType === PairTypes.MainTokenToBpt) {
result = _spotPriceAfterSwapBptOutPerMainIn(
bigintAmount,
mainBalance,
wrappedBalance,
bptSupply,
params
);
} else if (poolPairData.pairType === PairTypes.BptToMainToken) {
result = _spotPriceAfterSwapMainOutPerBptIn(
bigintAmount,
mainBalance,
wrappedBalance,
bptSupply,
params
);
} else if (poolPairData.pairType === PairTypes.WrappedTokenToBpt) {
result = _spotPriceAfterSwapBptOutPerWrappedIn(
bigintAmount,
mainBalance,
wrappedBalance,
bptSupply,
params
);
} else if (poolPairData.pairType === PairTypes.BptToWrappedToken) {
result = _spotPriceAfterSwapWrappedOutPerBptIn(
bigintAmount,
mainBalance,
wrappedBalance,
bptSupply,
params
);
} else if (
poolPairData.pairType === PairTypes.MainTokenToWrappedToken
) {
result = _spotPriceAfterSwapWrappedOutPerMainIn(
bigintAmount,
mainBalance,
wrappedBalance,
bptSupply,
params
);
} else if (
poolPairData.pairType === PairTypes.WrappedTokenToMainToken
) {
result = _spotPriceAfterSwapMainOutPerWrappedIn(
bigintAmount,
mainBalance,
wrappedBalance,
bptSupply,
params
);
} else return bnum(0);
return scale(bnum(result.toString()), -18).dp(
poolPairData.decimalsOut,
0
);
} else return bnum(0);
return scale(bnum(result.toString()), -18).dp(
poolPairData.decimalsOut,
0
);
} catch (err) {
return bnum(0);
}
}

_spotPriceAfterSwapTokenInForExactTokenOut(
poolPairData: LinearPoolPairData,
amount: OldBigNumber
): OldBigNumber {
const bigintAmount = parseFixed(
amount.dp(18).toString(),
18
).toBigInt();
const mainBalance = poolPairData.mainBalanceScaled.toBigInt();
const wrappedBalance = poolPairData.wrappedBalanceScaled.toBigInt();
const bptSupply = poolPairData.virtualBptSupply.toBigInt();
const params = {
fee: poolPairData.swapFee.toBigInt(),
lowerTarget: poolPairData.lowerTarget.toBigInt(),
upperTarget: poolPairData.upperTarget.toBigInt(),
rate: poolPairData.rate.toBigInt(),
};
let result: bigint;
if (poolPairData.pairType === PairTypes.MainTokenToBpt) {
result = _spotPriceAfterSwapMainInPerBptOut(
bigintAmount,
mainBalance,
wrappedBalance,
bptSupply,
params
);
} else if (poolPairData.pairType === PairTypes.BptToMainToken) {
result = _spotPriceAfterSwapBptInPerMainOut(
bigintAmount,
mainBalance,
wrappedBalance,
bptSupply,
params
);
} else if (poolPairData.pairType === PairTypes.WrappedTokenToBpt) {
result = _spotPriceAfterSwapWrappedInPerBptOut(
bigintAmount,
mainBalance,
wrappedBalance,
bptSupply,
params
);
} else if (poolPairData.pairType === PairTypes.BptToWrappedToken) {
result = _spotPriceAfterSwapBptInPerWrappedOut(
bigintAmount,
mainBalance,
wrappedBalance,
bptSupply,
params
);
} else if (
poolPairData.pairType === PairTypes.MainTokenToWrappedToken
) {
result = _spotPriceAfterSwapMainInPerWrappedOut(
bigintAmount,
mainBalance,
wrappedBalance,
bptSupply,
params
);
} else if (
poolPairData.pairType === PairTypes.WrappedTokenToMainToken
) {
result = _spotPriceAfterSwapWrappedInPerMainOut(
bigintAmount,
mainBalance,
wrappedBalance,
bptSupply,
params
try {
const bigintAmount = parseFixed(
amount.dp(18).toString(),
18
).toBigInt();
const mainBalance = poolPairData.mainBalanceScaled.toBigInt();
const wrappedBalance = poolPairData.wrappedBalanceScaled.toBigInt();
const bptSupply = poolPairData.virtualBptSupply.toBigInt();
const params = {
fee: poolPairData.swapFee.toBigInt(),
lowerTarget: poolPairData.lowerTarget.toBigInt(),
upperTarget: poolPairData.upperTarget.toBigInt(),
rate: poolPairData.rate.toBigInt(),
};
let result: bigint;
if (poolPairData.pairType === PairTypes.MainTokenToBpt) {
result = _spotPriceAfterSwapMainInPerBptOut(
bigintAmount,
mainBalance,
wrappedBalance,
bptSupply,
params
);
} else if (poolPairData.pairType === PairTypes.BptToMainToken) {
result = _spotPriceAfterSwapBptInPerMainOut(
bigintAmount,
mainBalance,
wrappedBalance,
bptSupply,
params
);
} else if (poolPairData.pairType === PairTypes.WrappedTokenToBpt) {
result = _spotPriceAfterSwapWrappedInPerBptOut(
bigintAmount,
mainBalance,
wrappedBalance,
bptSupply,
params
);
} else if (poolPairData.pairType === PairTypes.BptToWrappedToken) {
result = _spotPriceAfterSwapBptInPerWrappedOut(
bigintAmount,
mainBalance,
wrappedBalance,
bptSupply,
params
);
} else if (
poolPairData.pairType === PairTypes.MainTokenToWrappedToken
) {
result = _spotPriceAfterSwapMainInPerWrappedOut(
bigintAmount,
mainBalance,
wrappedBalance,
bptSupply,
params
);
} else if (
poolPairData.pairType === PairTypes.WrappedTokenToMainToken
) {
result = _spotPriceAfterSwapWrappedInPerMainOut(
bigintAmount,
mainBalance,
wrappedBalance,
bptSupply,
params
);
} else return bnum(0);
return scale(bnum(result.toString()), -18).dp(
poolPairData.decimalsOut,
0
);
} else return bnum(0);
return scale(bnum(result.toString()), -18).dp(
poolPairData.decimalsOut,
0
);
} catch (err) {
return bnum(0);
}
}

_derivativeSpotPriceAfterSwapExactTokenInForTokenOut(
Expand Down
1 change: 1 addition & 0 deletions src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,7 @@ export enum PoolFilter {
Gyro2 = 'Gyro2',
Gyro3 = 'Gyro3',
GyroE = 'GyroE',
EulerLinear = 'EulerLinear',
}

export interface PoolBase<D extends PoolPairBase = PoolPairBase> {
Expand Down
4 changes: 2 additions & 2 deletions test/testScripts/swapExample.ts
Original file line number Diff line number Diff line change
Expand Up @@ -58,15 +58,15 @@ function setUp(networkId: Network, provider: JsonRpcProvider): SOR {
}

export async function swap(): Promise<void> {
const networkId = Network.POLYGON;
const networkId = Network.MAINNET;
const provider = new JsonRpcProvider(PROVIDER_URLS[networkId]);
// gasPrice is used by SOR as a factor to determine how many pools to swap against.
// i.e. higher cost means more costly to trade against lots of different pools.
const gasPrice = BigNumber.from('14000000000');
// This determines the max no of pools the SOR will use to swap.
const maxPools = 4;
const tokenIn = ADDRESSES[networkId].USDC;
const tokenOut = ADDRESSES[networkId].brz;
const tokenOut = ADDRESSES[networkId].DAI;
const swapType: SwapTypes = SwapTypes.SwapExactIn;
const swapAmount = parseFixed('200', 6);

Expand Down

0 comments on commit d66e6d2

Please sign in to comment.