Skip to content

Commit edea72b

Browse files
author
JoaoCampos89
committed
fix: set allowance to allowance holder
1 parent 5c89e8c commit edea72b

File tree

2 files changed

+33
-10
lines changed

2 files changed

+33
-10
lines changed

src/erc20.ts

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ export const prepare = async (marketConfig: MarketConfig): Promise<MarketData> =
3232

3333
const multi = new MultiCall(signer.provider);
3434

35-
const [blockNumber, balancesAndAllowances] = await multi.getBalancesAndAllowances(tokens, owner, spender)
35+
const [blockNumber, balancesAndAllowances] = await multi.getBalancesAndAllowances(tokens, owner, spender)
3636

3737
const {
3838
balance: quoteBalance,
@@ -42,7 +42,7 @@ export const prepare = async (marketConfig: MarketConfig): Promise<MarketData> =
4242

4343

4444

45-
if (quoteAllowance.lt(MINIMUM_ALLOWANCE_THRESHOLD)) {
45+
/* if (quoteAllowance.lt(MINIMUM_ALLOWANCE_THRESHOLD)) {
4646
const tokenContract = new ethers.Contract(quoteToken, ERC20Abi, signer);
4747
console.log('Preparing allowance for quote token')
4848
if (!IS_SIMULATION) {
@@ -51,14 +51,14 @@ export const prepare = async (marketConfig: MarketConfig): Promise<MarketData> =
5151
const tx = await tokenContract.approve(spender, MAX_ALLOWANCE, gasEstimation);
5252
await tx.wait();
5353
}
54-
}
54+
}*/
5555

5656
const {
5757
balance: baseBalance,
5858
allowance: baseAllowance
5959
} = balancesAndAllowances[baseToken];
6060

61-
if (baseAllowance.lt(MINIMUM_ALLOWANCE_THRESHOLD)) {
61+
/* if (baseAllowance.lt(MINIMUM_ALLOWANCE_THRESHOLD)) {
6262
const tokenContract = new ethers.Contract(baseToken, ERC20Abi, signer);
6363
console.log('Preparing allowance for base token')
6464
if (!IS_SIMULATION) {
@@ -68,9 +68,8 @@ export const prepare = async (marketConfig: MarketConfig): Promise<MarketData> =
6868
await tx.wait();
6969
}
7070
71-
}
71+
}*/
7272

73-
console.log('All allowances ok we are ready for trade');
7473

7574
return {
7675
...marketConfig,
@@ -85,6 +84,16 @@ export const prepare = async (marketConfig: MarketConfig): Promise<MarketData> =
8584
}
8685
}
8786

87+
export async function setAllowanceToAllowanceHolder({actual, spender, chainId, baseToken}: {actual: string, spender: string, chainId: number, baseToken: string}){
88+
const signer = getSigner(chainId);
89+
const tokenContract = new ethers.Contract(baseToken, ERC20Abi, signer);
90+
if(Number(actual) === 0){
91+
const gasEstimation = await getGasEstimation(chainId)
92+
const tx = await tokenContract.approve(spender, MAX_ALLOWANCE, gasEstimation);
93+
await tx.wait();
94+
}
95+
}
96+
8897
export const refetchBalances = async (marketData: MarketData): Promise<MarketData> => {
8998
const chainId = marketData.chainId;
9099
const baseToken = marketData.baseTokenBalance.token;

src/trade.ts

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { getSigner } from "./provider";
66
import { MarketData } from "./types";
77
import { getSwapQuote } from "./zerox_service";
88
import { getGasEstimation } from "./gasEstimator";
9+
import { setAllowanceToAllowanceHolder } from "./erc20";
910

1011

1112

@@ -39,12 +40,20 @@ export const executeTrade = async (market: MarketData) => {
3940
return;
4041
}
4142
}
43+
44+
if(quote.data?.issues?.allowance){
45+
console.log('setting allowance on sell token');
46+
const {actual, spender} = quote.data.issues?.allowance;
47+
await setAllowanceToAllowanceHolder({actual, spender, chainId: market.chainId, baseToken: sellToken})
48+
}
49+
50+
4251
console.log(`doing a buy a amount of ${randomBuyAmount} base token`)
4352

4453

4554
if (!IS_SIMULATION) {
4655
const gasEstimator = await getGasEstimation(market.chainId);
47-
const { data, to, value, gas, gasPrice } = quote.data.transaction;
56+
const { data, to, value} = quote.data.transaction;
4857
const tx = await signer.sendTransaction({ data, to, value, ...gasEstimator });
4958
console.log(`waiting buy trade to be validated onchain: `, tx)
5059
await tx.wait();
@@ -73,7 +82,7 @@ export const executeTrade = async (market: MarketData) => {
7382
const sellAmount = parseUnits(randomSellAmount.toFixed(6), market.quoteTokenBalance.token.decimals).toString();
7483
const quote = await getSwapQuote({ sellAmount, sellToken, buyToken, taker, intentOnFill: false, slippagePercentage }, market.chainId);
7584

76-
console.log(quote.data.gasPrice);
85+
7786

7887
if (BigNumber.from(quote.data.sellAmount).lt(market.baseTokenBalance.balance)) {
7988
//const sellAmount = market.baseTokenBalance.balance.toString();
@@ -87,12 +96,17 @@ export const executeTrade = async (market: MarketData) => {
8796
return;
8897
}
8998
}
99+
90100
console.log(`doing a sell a amount of ${randomSellAmount} base token`)
91-
101+
if(quote.data?.issues?.allowance){
102+
console.log('setting allowance on sell token');
103+
const {actual, spender} = quote.data.issues?.allowance;
104+
await setAllowanceToAllowanceHolder({actual, spender, chainId: market.chainId, baseToken: sellToken})
105+
}
92106

93107
if (!IS_SIMULATION) {
94108
const gasEstimator = await getGasEstimation(market.chainId);
95-
const { data, to, value, gas, gasPrice } = quote.data.transaction;
109+
const { data, to, value } = quote.data.transaction;
96110
const tx = await signer.sendTransaction({ data, to, value, ...gasEstimator });
97111
console.log(`waiting sell trade to be validated onchain:`, tx)
98112
await tx.wait();

0 commit comments

Comments
 (0)