Skip to content

Commit

Permalink
fumbling around
Browse files Browse the repository at this point in the history
  • Loading branch information
MattPereira committed Sep 21, 2024
1 parent d4c0b7e commit dcce8bc
Show file tree
Hide file tree
Showing 8 changed files with 294 additions and 165 deletions.
Empty file.
Empty file.
1 change: 1 addition & 0 deletions examples/approvals/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from './signPermit2';
34 changes: 34 additions & 0 deletions examples/approvals/signPermit2.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import {
AllowanceTransfer,
Permit2Batch,
PermitDetails,
PERMIT2,
BALANCER_ROUTER,
MaxSigDeadline,
ChainId,
} from '../../src';

export const signPermit2 = async (client, details: PermitDetails[]) => {
const chainId = ChainId.SEPOLIA;

const batch: Permit2Batch = {
details,
spender: BALANCER_ROUTER[chainId],
sigDeadline: MaxSigDeadline,
};

const { domain, types, values } = AllowanceTransfer.getPermitData(
batch,
PERMIT2[chainId],
chainId,
);

const signature = await client.signTypedData({
message: { ...values },
domain,
primaryType: 'PermitBatch',
types,
});

return { signature, batch };
};
69 changes: 69 additions & 0 deletions examples/swaps/queryCustomPath.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
// use custom path to query and return the queryOutput
/**
* Example showing how to query swap using paths from the SOR
*
* Run with:
* pnpm example ./examples/swaps/queryCustomPath.ts
*/
import { config } from 'dotenv';
config();

import {
ChainId,
SwapKind,
Swap,
ExactInQueryOutput,
ExactOutQueryOutput,
} from '../../src';

import { Address, parseUnits } from 'viem';

const queryCustomPath = async () => {
// User defined
const rpcUrl = process.env.SEPOLIA_RPC_URL;
const chainId = ChainId.SEPOLIA;
const pool = '0xb27aC1DD8192163CFbD6F977C91D31A07E941B87' as Address; // Constant Product Pool from scaffold balancer v3
const tokenIn = {
address: '0x83f953D2461C6352120E06f5f8EcCD3e4d66d042' as Address, // MockToken1 from scaffold balancer v3
decimals: 18,
};
const tokenOut = {
address: '0x9d57eDCe10b7BdDA98997613c33ff7f3e34F4eAd' as Address,
decimals: 18,
};
const swapKind = SwapKind.GivenIn;
const tokens = [tokenIn, tokenOut];
const protocolVersion = 3 as const;
const inputAmountRaw = parseUnits('1', 18);
const outputAmountRaw = parseUnits('1', 18);

const customPaths = [
{
pools: [pool],
tokens,
protocolVersion,
inputAmountRaw,
outputAmountRaw,
},
];
const swapInput = { chainId, swapKind, paths: customPaths };

// Swap object provides useful helpers for re-querying, building call, etc
const swap = new Swap(swapInput);

// Get up to date swap result by querying onchain
const queryOutput = (await swap.query(rpcUrl)) as
| ExactInQueryOutput
| ExactOutQueryOutput;

// Construct transaction to make swap
if (queryOutput.swapKind === SwapKind.GivenIn) {
console.log(`Updated amount: ${queryOutput.expectedAmountOut.amount}`);
} else {
console.log(`Updated amount: ${queryOutput.expectedAmountIn.amount}`);
}

return { swap, queryOutput };
};

export default queryCustomPath;
82 changes: 82 additions & 0 deletions examples/swaps/querySmartPath.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
/**
* Example showing how to query swap using paths from the SOR
*
* Run with:
* pnpm example ./examples/swaps/querySmartPath.ts
*/
import { config } from 'dotenv';
config();

import {
BalancerApi,
API_ENDPOINT,
ChainId,
SwapKind,
Token,
TokenAmount,
Swap,
} from '../../src';

const querySmartPath = async () => {
// User defined
const rpcUrl = process.env.SEPOLIA_RPC_URL;
const chainId = ChainId.SEPOLIA;
const swapKind = SwapKind.GivenOut;
const tokenIn = new Token(
chainId,
'0xE8d4E9Fc8257B77Acb9eb80B5e8176F4f0cBCeBC',
18,
'MockToken1',
);
const tokenOut = new Token(
chainId,
'0xF0Bab79D87F51a249AFe316a580C1cDFC111bE10',
18,
'MockToken2',
);
const swapAmount =
swapKind === SwapKind.GivenIn
? TokenAmount.fromHumanAmount(tokenIn, '1.2345678910')
: TokenAmount.fromHumanAmount(tokenOut, '1.2345678910');

// API is used to fetch best path from available liquidity
const balancerApi = new BalancerApi(API_ENDPOINT, chainId);

const sorPaths = await balancerApi.sorSwapPaths.fetchSorSwapPaths({
chainId,
tokenIn: tokenIn.address,
tokenOut: tokenOut.address,
swapKind,
swapAmount,
});

const swapInput = {
chainId,
paths: sorPaths,
swapKind,
};

// Swap object provides useful helpers for re-querying, building call, etc
const swap = new Swap(swapInput);

console.log(
`Input token: ${swap.inputAmount.token.address}, Amount: ${swap.inputAmount.amount}`,
);
console.log(
`Output token: ${swap.outputAmount.token.address}, Amount: ${swap.outputAmount.amount}`,
);

// Get up to date swap result by querying onchain
const queryOutput = await swap.query(rpcUrl);

// Construct transaction to make swap
if (queryOutput.swapKind === SwapKind.GivenIn) {
console.log(`Updated amount: ${queryOutput.expectedAmountOut.amount}`);
} else {
console.log(`Updated amount: ${queryOutput.expectedAmountIn.amount}`);
}

return queryOutput;
};

export default querySmartPath;
165 changes: 0 additions & 165 deletions examples/swaps/swap.ts

This file was deleted.

Loading

0 comments on commit dcce8bc

Please sign in to comment.