Skip to content

Commit

Permalink
Merge pull request #17 from balancer-labs/develop
Browse files Browse the repository at this point in the history
Update to new Linear Pools
  • Loading branch information
John Grant authored Dec 10, 2021
2 parents bc87905 + b935601 commit e31e5a9
Show file tree
Hide file tree
Showing 6 changed files with 104 additions and 35 deletions.
2 changes: 1 addition & 1 deletion balancer-js/examples/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ interface TestToken {

// Kovan version
export const STABAL3PHANTOM: TestToken = {
address: '0x21ff756ca0cfcc5fff488ad67babadffee0c4149',
address: '0x8fd162f338b770f7e879030830cde9173367f301',
decimals: 18,
};

Expand Down
97 changes: 77 additions & 20 deletions balancer-js/examples/relayerSwapUnwrap.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,20 @@ import { Wallet } from '@ethersproject/wallet';
import { JsonRpcProvider } from '@ethersproject/providers';
import { Contract } from '@ethersproject/contracts';

import { BalancerSDK, Network, ConfigSdk, SUBGRAPH_URLS, AaveHelpers } from '../src/index';
import {
BalancerSDK,
Network,
ConfigSdk,
SUBGRAPH_URLS,
AaveHelpers,
} from '../src/index';
import { FundManagement } from '../src/swapsService/types';
import { WRAPPED_AAVE_DAI, WRAPPED_AAVE_USDC, WRAPPED_AAVE_USDT, STABAL3PHANTOM } from './constants';
import {
WRAPPED_AAVE_DAI,
WRAPPED_AAVE_USDC,
WRAPPED_AAVE_USDT,
STABAL3PHANTOM,
} from './constants';

import balancerRelayerAbi from '../src/abi/BalancerRelayer.json';

Expand All @@ -23,8 +34,8 @@ async function runRelayerSwapUnwrapExactIn() {
const config: ConfigSdk = {
network: Network.KOVAN,
rpcUrl: `https://kovan.infura.io/v3/${process.env.INFURA}`,
subgraphUrl: SUBGRAPH_URLS[Network.KOVAN]
}
subgraphUrl: SUBGRAPH_URLS[Network.KOVAN],
};

const provider = new JsonRpcProvider(config.rpcUrl);
const key: any = process.env.TRADER_KEY;
Expand All @@ -42,20 +53,45 @@ async function runRelayerSwapUnwrapExactIn() {
};

// This is using a helper function to get the up to date rates for the Aave tokens
const daiRate = await AaveHelpers.getRate('0x26575a44755e0aaa969fdda1e4291df22c5624ea', provider);
const usdcRate = await AaveHelpers.getRate('0x26743984e3357eFC59f2fd6C1aFDC310335a61c9', provider);
const usdtRate = await AaveHelpers.getRate('0xbfd9769b061e57e478690299011a028194d66e3c', provider);
const daiRate = await AaveHelpers.getRate(
'0x26575a44755e0aaa969fdda1e4291df22c5624ea',
provider
);
const usdcRate = await AaveHelpers.getRate(
'0x26743984e3357eFC59f2fd6C1aFDC310335a61c9',
provider
);
const usdtRate = await AaveHelpers.getRate(
'0xbfd9769b061e57e478690299011a028194d66e3c',
provider
);

const txInfo = await balancer.relayer.swapUnwrapAaveStaticExactIn(
[STABAL3PHANTOM.address, STABAL3PHANTOM.address, STABAL3PHANTOM.address],
[WRAPPED_AAVE_DAI.address, WRAPPED_AAVE_USDC.address, WRAPPED_AAVE_USDT.address],
[parseFixed('1', 16).toString(), parseFixed('1', 16).toString(), parseFixed('1', 16).toString()],
[
STABAL3PHANTOM.address,
STABAL3PHANTOM.address,
STABAL3PHANTOM.address,
],
[
WRAPPED_AAVE_DAI.address,
WRAPPED_AAVE_USDC.address,
WRAPPED_AAVE_USDT.address,
],
[
parseFixed('1', 16).toString(),
parseFixed('1', 16).toString(),
parseFixed('1', 16).toString(),
],
[daiRate, usdcRate, usdtRate],
funds,
'50000000000000000' // Slippage 5%
);

const relayerContract = new Contract(relayerAddress, balancerRelayerAbi, provider);
const relayerContract = new Contract(
relayerAddress,
balancerRelayerAbi,
provider
);
const tx = await relayerContract
.connect(wallet)
.callStatic[txInfo.function](txInfo.params, {
Expand All @@ -79,7 +115,7 @@ async function runRelayerSwapUnwrapExactOut() {
const config: ConfigSdk = {
network: Network.KOVAN,
rpcUrl: `https://kovan.infura.io/v3/${process.env.INFURA}`,
subgraphUrl: SUBGRAPH_URLS[Network.KOVAN]
subgraphUrl: SUBGRAPH_URLS[Network.KOVAN],
};

const provider = new JsonRpcProvider(config.rpcUrl);
Expand All @@ -98,20 +134,41 @@ async function runRelayerSwapUnwrapExactOut() {
};

// This is using a helper function to get the up to date rates for the Aave tokens
const daiRate = await AaveHelpers.getRate('0x26575a44755e0aaa969fdda1e4291df22c5624ea', provider);
const usdcRate = await AaveHelpers.getRate('0x26743984e3357eFC59f2fd6C1aFDC310335a61c9', provider);
const usdtRate = await AaveHelpers.getRate('0xbfd9769b061e57e478690299011a028194d66e3c', provider);
const daiRate = await AaveHelpers.getRate(
'0x26575a44755e0aaa969fdda1e4291df22c5624ea',
provider
);
const usdcRate = await AaveHelpers.getRate(
'0x26743984e3357eFC59f2fd6C1aFDC310335a61c9',
provider
);
const usdtRate = await AaveHelpers.getRate(
'0xbfd9769b061e57e478690299011a028194d66e3c',
provider
);

const txInfo = await balancer.relayer.swapUnwrapAaveStaticExactOut(
[STABAL3PHANTOM.address, STABAL3PHANTOM.address, STABAL3PHANTOM.address],
[WRAPPED_AAVE_DAI.address, WRAPPED_AAVE_USDC.address, WRAPPED_AAVE_USDT.address],
[parseFixed('1', 16).toString(), '1000', '1000'], // Amount of unwrapped Aave token we want to receive
[
STABAL3PHANTOM.address,
STABAL3PHANTOM.address,
STABAL3PHANTOM.address,
],
[
WRAPPED_AAVE_DAI.address,
WRAPPED_AAVE_USDC.address,
WRAPPED_AAVE_USDT.address,
],
[parseFixed('1', 16).toString(), '1000', '1000'], // Amount of unwrapped Aave token we want to receive
[daiRate, usdcRate, usdtRate],
funds,
'50000000000000000' // Slippage 5%
);

const relayerContract = new Contract(relayerAddress, balancerRelayerAbi, provider);
const relayerContract = new Contract(
relayerAddress,
balancerRelayerAbi,
provider
);
const tx = await relayerContract
.connect(wallet)
.callStatic[txInfo.function](txInfo.params, {
Expand All @@ -127,4 +184,4 @@ async function runRelayerSwapUnwrapExactOut() {

// TS_NODE_PROJECT='tsconfig.testing.json' ts-node ./examples/relayerSwapUnwrap.ts
// runRelayerSwapUnwrapExactOut();
runRelayerSwapUnwrapExactIn();
runRelayerSwapUnwrapExactIn();
2 changes: 1 addition & 1 deletion balancer-js/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@balancer-labs/sdk",
"version": "0.0.3",
"version": "0.0.4",
"description": "JavaScript SDK for interacting with the Balancer Protocol V2",
"license": "GPL-3.0-only",
"homepage": "https://github.com/balancer-labs/balancer-sdk/balancer-js#readme",
Expand Down
4 changes: 2 additions & 2 deletions balancer-js/src/constants/subgraph.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@ import { Network } from './network';

export const SUBGRAPH_URLS = {
[Network.MAINNET]:
'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-v2',
'https://api.thegraph.com/subgraphs/name/mendesfabio/balancer-v2',
[Network.GÖRLI]:
'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-goerli-v2',
[Network.KOVAN]:
'https://api.thegraph.com/subgraphs/name/destiner/balancer-kovan-v2',
'https://api.thegraph.com/subgraphs/name/mendesfabio/balancer-kovan-v2',
[Network.POLYGON]:
'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-polygon-v2',
[Network.ARBITRUM]: `https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-arbitrum-v2`,
Expand Down
32 changes: 22 additions & 10 deletions balancer-js/src/swapsService/queryBatchSwap.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,13 @@ import { BigNumberish } from '@ethersproject/bignumber';
import { Contract } from '@ethersproject/contracts';
import { AddressZero, Zero } from '@ethersproject/constants';
import { SOR, SwapTypes, SwapInfo } from 'sor-linear';
import { SwapType, BatchSwapStep, FundManagement, QueryWithSorInput, QueryWithSorOutput } from './types';
import {
SwapType,
BatchSwapStep,
FundManagement,
QueryWithSorInput,
QueryWithSorOutput,
} from './types';

/*
* queryBatchSwap simulates a call to `batchSwap`, returning an array of Vault asset deltas. Calls to `swap` cannot be
Expand Down Expand Up @@ -46,7 +52,8 @@ export async function queryBatchSwapWithSor(
vaultContract: Contract,
queryWithSor: QueryWithSorInput
): Promise<QueryWithSorOutput> {
if (queryWithSor.fetchPools.fetchPools) await sor.fetchPools([], queryWithSor.fetchPools.fetchOnChain);
if (queryWithSor.fetchPools.fetchPools)
await sor.fetchPools([], queryWithSor.fetchPools.fetchOnChain);

const swaps: BatchSwapStep[][] = [];
const assetArray: string[][] = [];
Expand All @@ -67,7 +74,9 @@ export async function queryBatchSwapWithSor(
const batchedSwaps = batchSwaps(assetArray, swaps);

const returnTokens =
queryWithSor.swapType === SwapType.SwapExactIn ? queryWithSor.tokensOut : queryWithSor.tokensIn;
queryWithSor.swapType === SwapType.SwapExactIn
? queryWithSor.tokensOut
: queryWithSor.tokensIn;
const returnAmounts: string[] = Array(returnTokens.length).fill(Zero);
let deltas: BigNumberish[] = Array(batchedSwaps.assets.length).fill(Zero);
try {
Expand All @@ -79,12 +88,15 @@ export async function queryBatchSwapWithSor(
batchedSwaps.assets
);

returnTokens.forEach(
(t, i) =>
(returnAmounts[i] =
deltas[batchedSwaps.assets.indexOf(t.toLowerCase())].toString() ??
Zero.toString())
);
if (deltas.length > 0) {
returnTokens.forEach(
(t, i) =>
(returnAmounts[i] =
deltas[
batchedSwaps.assets.indexOf(t.toLowerCase())
].toString() ?? Zero.toString())
);
}
} catch (err) {
console.error(`queryBatchSwapTokensIn error: ${err}`);
}
Expand All @@ -93,7 +105,7 @@ export async function queryBatchSwapWithSor(
returnAmounts,
swaps: batchedSwaps.swaps,
assets: batchedSwaps.assets,
deltas: deltas.map(d => d.toString()),
deltas: deltas.map((d) => d.toString()),
};
}

Expand Down
2 changes: 1 addition & 1 deletion balancer-js/yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -2186,7 +2186,7 @@ slice-ansi@^4.0.0:

"sor-linear@github:balancer-labs/balancer-sor#john/linear-package":
version "2.0.0-beta.8"
resolved "https://codeload.github.com/balancer-labs/balancer-sor/tar.gz/0d98ca50db03109614128eb4e9aea6f6f9a3cfb5"
resolved "https://codeload.github.com/balancer-labs/balancer-sor/tar.gz/024b016aa1bbb6dd48877e41c5d738ede34437a3"
dependencies:
"@georgeroman/balancer-v2-pools" "^0.0.7"
isomorphic-fetch "^2.2.1"
Expand Down

0 comments on commit e31e5a9

Please sign in to comment.