Skip to content
Open
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/examples/delta.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,13 @@ const fetcher = constructAxiosFetcher(axios);
const provider = ethers.getDefaultProvider(1);
const signer = Wallet.createRandom().connect(provider);
const account = signer.address;
const contractCaller = constructEthersContractCaller({
ethersProviderOrSigner: provider,
EthersContract: ethers.Contract,
});
const contractCaller = constructEthersContractCaller(
{
ethersProviderOrSigner: provider,
EthersContract: ethers.Contract,
},
account
);

// type AdaptersFunctions & ApproveTokenFunctions<ethers.ContractTransaction>
const deltaSDK = constructPartialSDK(
Expand Down
155 changes: 155 additions & 0 deletions src/examples/externalDelta.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
/* eslint-disable @typescript-eslint/no-unused-vars */
import axios from 'axios';
import { ethers, Wallet } from 'ethersV5';
import {
constructPartialSDK,
constructEthersContractCaller,
constructAxiosFetcher,
constructAllDeltaOrdersHandlers,
SwapSide,
} from '..';
import { startStatusCheck } from './helpers/delta';

const fetcher = constructAxiosFetcher(axios);

const provider = ethers.getDefaultProvider(8453); // Base
const signer = Wallet.createRandom().connect(provider);
const account = signer.address;
const contractCaller = constructEthersContractCaller(
{
ethersProviderOrSigner: signer,
EthersContract: ethers.Contract,
},
account
);

const deltaSDK = constructPartialSDK(
{
chainId: 8453, // Base
fetcher,
contractCaller,
},
constructAllDeltaOrdersHandlers
);

// Base tokens
const USDC = '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913';
const WETH = '0x4200000000000000000000000000000000000006';

// Aave external handler on Base
const AAVE_HANDLER = '0xe4c9d68f134b6d2380d124233002535ba786d5a1';

// Aave order types passed as `data` field
const AaveOrderTypes = {
COLLATERAL_SWAP:
'0x0000000000000000000000000000000000000000000000000000000000000000',
DEBT_SWAP:
'0x0000000000000000000000000000000000000000000000000000000000000001',
REPAY_WITH_COLLATERAL:
'0x0000000000000000000000000000000000000000000000000000000000000002',
};

// Aave Collateral Swap: swap one collateral asset for another (SELL side)
async function collateralSwapFlow() {
const amount = (10 ** 6).toString(); // 1 USDC in wei

const deltaPrice = await deltaSDK.getDeltaPrice({
srcToken: USDC,
destToken: WETH,
amount,
userAddress: account,
srcDecimals: 6,
destDecimals: 18,
side: SwapSide.SELL,
});

const signableOrderData = await deltaSDK.buildExternalDeltaOrder({
deltaPrice,
owner: account,
handler: AAVE_HANDLER,
data: AaveOrderTypes.COLLATERAL_SWAP,
srcToken: USDC,
destToken: WETH,
srcAmount: amount,
slippage: 500, // 5% slippage in bps
});

const signature = await deltaSDK.signExternalDeltaOrder(signableOrderData);

const deltaAuction = await deltaSDK.postExternalDeltaOrder({
order: signableOrderData.data,
signature,
});

startStatusCheck(() => deltaSDK.getDeltaOrderById(deltaAuction.id));
}

// Aave Debt Swap: swap one debt for another (BUY side)
async function debtSwapFlow() {
const debtAmount = (10 ** 6).toString(); // amount of debt to swap

const deltaPrice = await deltaSDK.getDeltaPrice({
srcToken: USDC,
destToken: WETH,
amount: debtAmount,
userAddress: account,
srcDecimals: 6,
destDecimals: 18,
side: SwapSide.BUY,
});

const signableOrderData = await deltaSDK.buildExternalDeltaOrder({
deltaPrice,
owner: account,
handler: AAVE_HANDLER,
data: AaveOrderTypes.DEBT_SWAP,
srcToken: USDC,
destToken: WETH,
destAmount: debtAmount,
slippage: 500, // 5% slippage in bps
});

const signature = await deltaSDK.signExternalDeltaOrder(signableOrderData);

const deltaAuction = await deltaSDK.postExternalDeltaOrder({
order: signableOrderData.data,
signature,
});

startStatusCheck(() => deltaSDK.getDeltaOrderById(deltaAuction.id));
}

// Aave Repay with Collateral: use collateral to repay debt (BUY side)
async function repayWithCollateralFlow() {
const collateralAmount = (10 ** 6).toString();

const deltaPrice = await deltaSDK.getDeltaPrice({
srcToken: USDC,
destToken: WETH,
amount: collateralAmount,
userAddress: account,
srcDecimals: 6,
destDecimals: 18,
side: SwapSide.BUY,
});

const signableOrderData = await deltaSDK.buildExternalDeltaOrder({
deltaPrice,
owner: account,
handler: AAVE_HANDLER,
data: AaveOrderTypes.REPAY_WITH_COLLATERAL,
srcToken: USDC,
destToken: WETH,
destAmount: collateralAmount,
slippage: 500, // 5% slippage in bps
});

const signature = await deltaSDK.signExternalDeltaOrder(signableOrderData);

const deltaAuction = await deltaSDK.postExternalDeltaOrder({
order: signableOrderData.data,
signature,
});

startStatusCheck(() => deltaSDK.getDeltaOrderById(deltaAuction.id));
}
10 changes: 7 additions & 3 deletions src/examples/helpers/delta.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,17 @@
import { DeltaAuction, DeltaOrderFromAPI } from '../..';
import { DeltaOrderFromAPI } from '../..';

function isExecutedDeltaAuction(
auction: Omit<DeltaAuction, 'signature'>,
auction: DeltaOrderFromAPI,
waitForCrosschain = true // only consider executed when destChain work is done
) {
if (auction.status !== 'EXECUTED') return false;

// crosschain Order is executed on destChain if bridgeStatus is filled
if (waitForCrosschain && auction.order.bridge.destinationChainId !== 0) {
if (
waitForCrosschain &&
'bridge' in auction.order &&
auction.order.bridge.destinationChainId !== 0
) {
return auction.bridgeStatus === 'filled';
}

Expand Down
41 changes: 40 additions & 1 deletion src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -144,13 +144,14 @@ import type {
BridgeMetadata,
BridgeStatus,
Bridge,
ExternalDeltaOrder,
SwapSideUnion,
} from './methods/delta/helpers/types';
import {
BuildDeltaOrderDataParams,
BuildDeltaOrderFunctions,
constructBuildDeltaOrder,
SignableDeltaOrderData,
SwapSideUnion,
} from './methods/delta/buildDeltaOrder';
import {
constructPostDeltaOrder,
Expand Down Expand Up @@ -203,6 +204,27 @@ import {
IsTokenSupportedInDeltaFunctions,
} from './methods/delta/isTokenSupportedInDelta';

import {
constructBuildExternalDeltaOrder,
BuildExternalDeltaOrderFunctions,
BuildExternalDeltaOrderParams,
} from './methods/delta/buildExternalDeltaOrder';
import type { SignableExternalOrderData } from './methods/delta/helpers/buildExternalOrderData';
import {
constructSignExternalDeltaOrder,
SignExternalDeltaOrderFunctions,
} from './methods/delta/signExternalDeltaOrder';
import {
constructPostExternalDeltaOrder,
ExternalDeltaOrderApiResponse,
PostExternalDeltaOrderFunctions,
PostExternalDeltaOrderParams,
} from './methods/delta/postExternalDeltaOrder';
import {
constructPreSignExternalDeltaOrder,
PreSignExternalDeltaOrderFunctions,
} from './methods/delta/preSignExternalDeltaOrder';

import {
constructGetQuote,
GetQuoteFunctions,
Expand Down Expand Up @@ -235,8 +257,10 @@ export {
export {
constructAllDeltaOrdersHandlers,
constructSubmitDeltaOrder,
constructSubmitExternalDeltaOrder,
DeltaOrderHandlers,
SubmitDeltaOrderParams,
SubmitExternalDeltaOrderParams,
} from './methods/delta';

export type {
Expand Down Expand Up @@ -309,6 +333,11 @@ export {
constructCancelDeltaOrder,
constructDeltaTokenModule,
constructApproveTokenForDelta,
// External Delta methods
constructBuildExternalDeltaOrder,
constructSignExternalDeltaOrder,
constructPostExternalDeltaOrder,
constructPreSignExternalDeltaOrder,
// Quote methods
constructGetQuote,
// different helpers
Expand Down Expand Up @@ -407,6 +436,16 @@ export type {
CancelAndWithdrawDeltaOrderParams,
DepositNativeAndPreSignParams,
DepositNativeAndPreSignDeltaOrderParams,
// External Delta types
ExternalDeltaOrder,
SignableExternalOrderData,
BuildExternalDeltaOrderParams,
BuildExternalDeltaOrderFunctions,
SignExternalDeltaOrderFunctions,
ExternalDeltaOrderApiResponse,
PostExternalDeltaOrderFunctions,
PostExternalDeltaOrderParams,
PreSignExternalDeltaOrderFunctions,
// types for Quote methods
GetQuoteFunctions,
QuoteParams,
Expand Down
Loading
Loading