assembly/core/strategies/protocols/aave-v2/deposit-and-borrow.ts

96 lines
2.2 KiB
TypeScript
Raw Normal View History

2021-08-25 11:13:23 +00:00
import {
defineStrategy,
defineInput,
StrategyInputType,
StrategyProtocol
} from "../../helpers";
2021-08-22 11:27:02 +00:00
export default defineStrategy({
2021-08-25 11:13:23 +00:00
protocol: StrategyProtocol.AAVE_V2,
2021-08-22 11:27:02 +00:00
name: "Deposit & Borrow",
description: "Deposit collateral & borrow asset in a single txn.",
2021-08-25 11:13:23 +00:00
details: `<p class="text-center">This strategy executes:</p>
<ul>
<li>Deposit collateral</li>
<li>Borrow Debt</li>
</ul>`,
2021-08-22 11:27:02 +00:00
author: "Instadapp Team",
inputs: [
2021-08-22 15:45:37 +00:00
defineInput({
2021-08-22 11:27:02 +00:00
type: StrategyInputType.INPUT_WITH_TOKEN,
name: "Debt",
2021-08-25 11:13:23 +00:00
placeholder: ({ input }) =>
input.token ? `${input.token.symbol} to Payback` : "",
2021-08-22 11:27:02 +00:00
validate: ({ input }) => {
if (!input.token) {
2021-08-25 11:13:23 +00:00
return "Debt token is required";
2021-08-22 11:27:02 +00:00
}
2021-08-25 11:13:23 +00:00
if (!input.value) {
return "Deb amount is required";
2021-08-22 12:54:23 +00:00
}
2021-08-25 11:13:23 +00:00
// if (input.token.balance < input.value) {
// return "Your amount exceeds your maximum limit.";
// }
2021-08-22 18:32:28 +00:00
},
2021-08-25 11:13:23 +00:00
defaults: ({ getTokenByKey }) => ({
token: getTokenByKey?.("eth")
})
2021-08-22 15:45:37 +00:00
}),
defineInput({
2021-08-22 11:27:02 +00:00
type: StrategyInputType.INPUT_WITH_TOKEN,
name: "Collateral",
2021-08-25 11:13:23 +00:00
placeholder: ({ input }) =>
input.token ? `${input.token.symbol} to Withdraw` : "",
validate: ({ input }) => {
if (!input.token) {
return "Collateral token is required";
}
if (!input.value) {
return "Collateral amount is required";
}
},
defaults: ({ getTokenByKey }) => ({
token: getTokenByKey?.("dai")
2021-08-23 23:07:53 +00:00
})
2021-08-22 15:45:37 +00:00
})
2021-08-22 11:27:02 +00:00
],
2021-08-25 11:13:23 +00:00
spells: async ({ inputs, convertTokenAmountToBigNumber }) => {
2021-08-22 15:45:37 +00:00
return [
{
connector: "aave_v2",
method: "deposit",
2021-08-25 11:13:23 +00:00
args: [
inputs[0].token.address,
convertTokenAmountToBigNumber(
inputs[0].value,
inputs[0].token.decimals
),
0,
0
]
2021-08-22 15:45:37 +00:00
},
{
connector: "aave_v2",
method: "borrow",
2021-08-25 11:13:23 +00:00
args: [
inputs[1].token.address,
convertTokenAmountToBigNumber(
inputs[1].value,
inputs[1].token.decimals
),
2,
0,
0
]
2021-08-22 15:45:37 +00:00
}
];
2021-08-22 11:27:02 +00:00
}
});