Skip to content

Commit

Permalink
fix #51
Browse files Browse the repository at this point in the history
  • Loading branch information
yuichiroaoki committed Feb 9, 2022
1 parent d0270b3 commit 02d4ea3
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 46 deletions.
72 changes: 30 additions & 42 deletions src/price/1inch/index.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { config as dotEnvConfig } from "dotenv";
dotEnvConfig();
import { BigNumber, ethers } from "ethers";
import { chainId, protocols, diffAmount, loanAmount } from "../../config";
import { ethers } from "ethers";
import { chainId, diffAmount, loanAmount } from "../../config";
import { IRoute } from "../../interfaces/main";
import { ERC20Token, IToken } from "../../constants/addresses";
import { replaceTokenAddress } from "../../utils";
Expand Down Expand Up @@ -55,9 +55,7 @@ export async function checkArbitrage(
});

const resultData1 = await sendRequest(firstCallURL);
if (!!resultData1.isAxiosError) {
const e = resultData1;

if (!resultData1.data) {
updateRow(
{
fromToken: fromToken.symbol.padEnd(6),
Expand All @@ -67,15 +65,7 @@ export async function checkArbitrage(
.toFixed(2)
.padStart(7),

log:
e.response !== undefined
? e.response.status +
": " +
e.response.statusText +
" (" +
e.response.data.error +
")"
: "",
log: `${resultData1.errorMessage}`,
},
{
color: "red",
Expand All @@ -85,8 +75,8 @@ export async function checkArbitrage(
return [false, null, null];
}

const firstProtocols = resultData1.protocols;
const returnAmount = resultData1.toTokenAmount;
const firstProtocols = resultData1.data.protocols;
const returnAmount = resultData1.data.toTokenAmount;
const secondCallURL = get1inchQuoteCallUrl(
chainId,
toToken.address,
Expand All @@ -99,32 +89,30 @@ export async function checkArbitrage(
});

const resultData2 = await sendRequest(secondCallURL);
if (!!resultData2.isAxiosError) {
const e = resultData2;

if (!resultData1.data) {
updateRow(
{
fromToken: resultData1.fromToken.symbol.padEnd(6),
fromToken: fromToken.symbol.padEnd(6),
toToken: toToken.symbol.padEnd(6),

fromAmount: Number(
ethers.utils.formatUnits(
resultData1.fromTokenAmount,
resultData1.fromToken.decimals
)
)
fromAmount: Number(ethers.utils.formatUnits(amount, fromTokenDecimal))
.toFixed(2)
.padStart(7),

log:
e.response !== undefined
? e.response.status +
": " +
e.response.statusText +
" (" +
e.response.data.error +
")"
: "",
log: `${resultData1.errorMessage}`,
},
{
color: "red",
}
);

return [false, null, null];
}
if (!resultData2.data) {
updateRow(
{
log: resultData2.errorMessage,
},
{
color: "red",
Expand All @@ -133,31 +121,31 @@ export async function checkArbitrage(

return [false, null, null];
}
const secondProtocols = resultData2.protocols;
const secondProtocols = resultData2.data.protocols;

const isProfitable = amountDiff.lt(
ethers.BigNumber.from(resultData2.toTokenAmount)
ethers.BigNumber.from(resultData2.data.toTokenAmount)
);

const fromTokenAmount = Number(
ethers.utils.formatUnits(
resultData1.fromTokenAmount,
resultData1.fromToken.decimals
resultData1.data.fromTokenAmount,
resultData1.data.fromToken.decimals
)
);
const toTokenAmount = Number(
ethers.utils.formatUnits(
resultData2.toTokenAmount,
resultData2.toToken.decimals
resultData2.data.toTokenAmount,
resultData2.data.toToken.decimals
)
);
const difference = Number(toTokenAmount) - Number(fromTokenAmount);
const percentage = (difference / Number(fromTokenAmount)) * 100;

updateRow(
{
fromToken: resultData1.fromToken.symbol.padEnd(6),
toToken: resultData1.toToken.symbol.padEnd(6),
fromToken: resultData1.data.fromToken.symbol.padEnd(6),
toToken: resultData1.data.toToken.symbol.padEnd(6),

fromAmount: fromTokenAmount.toFixed(2).padStart(7),
toAmount: toTokenAmount.toFixed(2).padStart(7),
Expand Down
37 changes: 33 additions & 4 deletions src/utils/request.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,42 @@
import axios from "axios";

export const sendRequest = async (url: string) => {
let response: any = await axios
interface IRequest {
data: any;
errorMessage: string;
}

export const sendRequest = async (url: string): Promise<IRequest> => {
let response = await axios
.get(url)
.then((result) => {
return result.data;
return {
data: result.data,
errorMessage: "",
};
})
.catch((error) => {
return error;
if (error.response) {
return {
data: null,
errorMessage:
error.response.status +
": " +
error.response.statusText +
" (" +
error.response.data.error +
")",
};
} else if (error.request) {
return {
data: null,
errorMessage: "Error: No response was received",
};
} else {
return {
data: null,
errorMessage: "Error: " + error.message,
};
}
});

return response;
Expand Down

0 comments on commit 02d4ea3

Please sign in to comment.