Debt Swap
Swap debt between DAI and USDC on Compound
Step 1
Installation or just use your browser console.
Step 2
Step 3
Trigger the following uniquely designed spells to fulfill this use case. Check this section for generic details around casting spells.
The DSA will cast the spells across the Compound, OasisDEX and Instapool connectors in the specified sequence.
USDC Debt -> DAI Debt
Benefits
When DAI > $1. Arbitrage benefit due to price difference of DAI & USDC.
Help make DAI stable.
Recipe
Instapool: borrow DAI
OasisDEX: Swap DAI for USDC
Compound: Payback USDC
Compound: Borrow DAI
Instapool: return DAI
Requirements
User must have a some debt in USDC.
let borrowAmount = 20; // 20 DAI
let borrowAmtInWei = dsa.tokens.fromDecimal(borrowAmount, "dai"); // borrow flash loan and swap via OasisDEX
let slippage = 0.1; // 0.1% slippage.
let dai_address = dsa.tokens.info.dai.address
let usdc_address = dsa.tokens.info.usdc.address
let buyAmount = await dsa.oasis.getBuyAmount("USDC", "DAI", borrowAmount, slippage);
let spells = dsa.Spell();
spells.add({
connector: "instapool",
method: "flashBorrow",
args: [dai_address, borrowAmtInWei, 0, 0]
});
spells.add({
connector: "oasis",
method: "sell",
args: [usdc_address, dai_address, borrowAmtInWei, buyAmount.unitAmt, 0, "423"] // setting USDC amount with id 423
});
spells.add({
connector: "compound",
method: "payback",
args: [usdc_address, 0, "423", 0] // get Payback amount with id 423
});
spells.add({
connector: "compound",
method: "borrow",
args: [dai_address, borrowAmtInWei, 0, 0]
});
spells.add({
connector: "instapool",
method: "flashPayback",
args: [dai_address, 0, 0]
});
dsa.cast(spells).then(console.log)
DAI Debt -> USDC Debt
Benefits
When DAI < $1. Arbitrage benefit due to price difference of DAI & USDC.
Help make DAI stable.
Recipe
Instapool: borrow USDC
OasisDEX: Swap USDC for DAI
Compound: Payback DAI
Compound: Borrow USDC
Instapool: return USDC
Requirements
User must have a some debt in DAI.
let borrowAmount = 20; // 20 USDC
let borrowAmtInWei = dsa.tokens.fromDecimal(borrowAmount, "usdc"); // borrow flash loan and swap via OasisDEX
let slippage = 0.2; // 0.2% slippage.
let dai_address = dsa.tokens.info.dai.address
let usdc_address = dsa.tokens.info.usdc.address
let buyAmount = await dsa.oasis.getBuyAmount("DAI", "USDC", borrowAmount, slippage);
let spells = dsa.Spell();
spells.add({
connector: "instapool",
method: "flashBorrow",
args: [usdc_address, borrowAmtInWei, 0, 0]
});
spells.add({
connector: "oasis",
method: "sell",
args: [dai_address, usdc_address, borrowAmtInWei, buyAmount.unitAmt, 0, "924"] // setting DAI amount with id 924
});
spells.add({
connector: "compound",
method: "payback",
args: [dai_address, 0, "924", 0] // get Payback amount with id 924
});
spells.add({
connector: "compound",
method: "borrow",
args: [usdc_address, borrowAmtInWei, 0, 0]
});
spells.add({
connector: "instapool",
method: "flashPayback",
args: [usdc_address, 0, 0]
});
dsa.cast(spells).then(console.log)
Last updated