Giter Club home page Giter Club logo

flashloanusecases's People

Contributors

amadeobrands avatar dependabot[bot] avatar ggviana avatar robsonsjre avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

flashloanusecases's Issues

Lost Contract

Today and thank you for a course with brilliant content.

I would like to know how I can access an already deployed contract. After deploying the contract and transferring funds to it run successfully. I then closed the remix window. How would I communicate with the contract again? I have copied the address that I sent the funds to from my metamask history and pasted that into the at address field in the run and deploy section of remix. But alas doesn't resolve the deployed contract.

In this case, it's not the end of the world since this is just a test net but if this was a real world I would have certainly wanted to be able to access my contract again.

Warning while compiling contracts.

Hello,

When I go to compile contracts/sample/flashloan.sol I get the following warning. How do I solve this error? (I tried using pragma solidity >=0.5.0 <0.6.0;, However it does not work)

https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v2.5.0/contracts/utils/Address.sol:1:1: SyntaxError: Source file requires different compiler version (current compiler is 0.5.0+commit.1d4f565a.Emscripten.clang - note that nightly builds are considered to be strictly less than the released version pragma solidity ^0.5.5; ^---------------------^

Error and warning when compiling 'myfirstflashloan.sol'

Hi, when I try to compile the code I get the below...

https://github.com/mrdavey/ez-flashloan/blob/remix/contracts/aave/FlashLoanReceiverBase.sol:33:13: Warning: Return value of low-level calls not used.
_destination.call.value(_amount)("");
^----------------------------------^

and

https://github.com/mrdavey/ez-flashloan/blob/remix/contracts/aave/FlashLoanReceiverBase.sol:33:13: Warning: Return value of low-level calls not used.
_destination.call.value(_amount)("");
^----------------------------------^

Can you please give some advice how to proceed?

Thank

Arbitrage contract error

Hi, I need a little help with arbitrage contract I keep getting this error when I try to call "makeArbitrage":

status false Transaction mined but execution failed
transaction hash 0x89483cebae54a2943700ef10ce531f9bc6e50f661b4304f57d328e0dd794421b
from 0xf783c77b3282E86DF0Eda02972281E0768F5df31
to Arbitrage.makeArbitrage(uint256) 0x7a8f0c81bA8e6CcF06Ea95D108f4E9c3aD32Ef56
gas 3000000 gas
transaction cost 321070 gas
hash 0x89483cebae54a2943700ef10ce531f9bc6e50f661b4304f57d328e0dd794421b
input 0x3dd...00000
decoded input { "uint256 amount": { "_hex": "0x056bc75e2d63100000" } }
decoded output -
logs []
value 0 wei

Problem deploying it to Mainnet

Hi, so i want to deploy my code using the mainnet.
I put in the right adresses. Now i understand I need to choose : "Web3 provider" right? (not the injected web3)
Im using a mac and how do I enable this code? geth --rpc --rpccorsdomain https://remix.ethereum.org
where do i type it in, basically How do I get this started correctly? :)

all the best!

Using Main Net

Hi Guys,

Please help me get the correct address for these parts:

    address public constant UNISWAP_FACTORY_A = 0xECc6C0542710a0EF07966D7d1B10fA38bbb86523;
    address public constant UNISWAP_FACTORY_B = 0x54Ac34e5cE84C501165674782582ADce2FDdc8F4;

I already researched the part for FlashLoanReceiverBase, DAI_ADDRESS, & BAT_ADDRESS.

  FlashLoanReceiverBase(address(0x506B0B2CF20FAA8f38a4E2B524EE43e1f4458Cc5))
   // main net: 0x24a42fD28C976A61Df5D00D0599C34c4f90748c8
   // test net - kovan: 0x506B0B2CF20FAA8f38a4E2B524EE43e1f4458Cc5

   address public constant DAI_ADDRESS = 0xFf795577d9AC8bD7D90Ee22b6C1703490b6512FD;
   // Main net DAI_ADDRESS = 0x6B175474E89094C44Da98b954EedeAC495271d0F
   address public constant BAT_ADDRESS = 0x2d12186Fbb9f9a8C28B3FfdD4c42920f8539D738;
   // Main net BAT_ADDRESS = 0x0D8775F648430679A709E98d2b0Cb6250d2887EF

Gas Estimation Failed

with this error:

Gas estimation errored with the following message (see below). The transaction execution will likely fail. Do you want to force sending?
The execution failed due to an exception. Reverted

Mainnetwork problem

Hey so...this pops up and I cannot deploy my contract...whats the matter?
What i did:
got 25$ worth of DAI in my metamask and 0.4 eth
1.copy + paste the code from git hub
2. added the right addresses...please check for me is :
UNISWAP 1 factory this? : 0xc0a47dFe034B400B47bDaD5FecDa2621de6c4d95
UNISWAP 2 factory this? : 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f
3. then added the token addresses
saved it deployed and this comes up... what to do and what does this mean?

Zrzut ekranu 2020-07-10 o 17 39 20

can i get some assistance?

hello.. i am new at the academy of Ivan.. but so far i found everything very confusing.. maybe because i am not a programmer and i am not really interested in code and programming.. I AM A TRADER... for the last 10 years i was trading all types of instruments.. so of course i got interested when i saw Ivan speaking on his videos about arbitrage..

So the thing is that you prepared all this stuff of DEFI 201 and arbitrage, more in a "programmer way" and you forgot about traders... but in fact.. if you think about it.. arbitrage is a trading concept and not a programming concept.. so you should made the course dedicated to traders! because really.. i have already spent many hours trying to get this working and i just cannot..

For couple seconds i ask you to stand on the shoes of a trader who never in his life wrote a line of code and who doesnt understand most of the terms that you are mentioning in the course.. and you know? any trader who comes to your courses looking for the arbitrage.. when he starts to listen all those terms and to see the coding and that.. he will just run away.. same as i wanted just to close the browser and go to my charts to continue doing my work as usually

So please guys.. as Amadeo said in every of his videos.. if we have a request, we could submit it here.. then my request and i guess, talking from all traders interested on this... PLEASE, make a little document, slide, video or whatever.. specifying each steps, one by one, to do this of arbitrage.... but do it for traders.. not for programmers..

this means that for example.. is not necessary that you try to explain all the terms, functions and that.. would be easier if you just make a little document like...

Step 1. Get metamask wallet
Step 2. Go to Remix Ethereum
Step 3. copy and paste your wallet address in this exact line of code..
Step 4.....

in fact, all the videos that you made, you could resume it a little document with each step.. and then any TRADER could get into this without complications...

I hope you can do this and post it here or in the DEFI 201 files.. otherwise i really think that hardly any trader will be even interested on it

Bag Gateway & No AAve Faucet

Hey,

  1. https://faucet.kovan.network/ gives Bad Gateway now. ive requested on glitter but still waiting. Can you please send me Kovan Test ETH to

0x53CD3F17F2723bA185e67989A73a5aAFb5fAca2f

  1. the aave things has been resolved. stil need the KETH please,

thank you

Problem with arbitrage flash loan between 4 tokens

Hi Amadeo
I need your help with a question, because if I try to do more than one swap between several tokens, it won't allow me. I put the token addresses but it only makes the switch between Dai and Bat. I attach the code. Thank you

pragma solidity ^0.5.0;

import "https://github.com/mrdavey/ez-flashloan/blob/remix/contracts/aave/FlashLoanReceiverBase.sol";
import "https://github.com/mrdavey/ez-flashloan/blob/remix/contracts/aave/ILendingPool.sol";
import "https://github.com/Robsonsjre/FlashloanUsecases/blob/master/contracts/interfaces/IUniswap.sol";

//1 DAI = 1000000000000000000 (18 decimals)
/*

  • Arbitrageur is a contract to simulate the usage of flashloans

  • to make profit out of a market inbalacement

  • For this example we deployed 2 Uniswap instances which we'll

  • call by ExchangeA and ExchangeB

  • The steps happens as following:

    1. Borrow DAI from Aave
    1. Buy BAT with DAI on ExchangeA
    1. Sell BAT for DAI on ExchangeB
    1. Buy MKR with DAI on ExchangeC
    1. Sell MKR for DAI on ExchangeD
    1. Buy SNX with DAI on ExchangeE
    1. Sell SNX for DAI on ExchangeF
    1. Repay Aave loan
    1. Keep the profits
      */
      contract Arbitrageur is
      FlashLoanReceiverBase(address(0x506B0B2CF20FAA8f38a4E2B524EE43e1f4458Cc5)){ //primer paso declarar las direcciones de los contratos del token y de los exchange

    address public constant SNX_ADDRESS = 0x7FDb81B0b8a010dd4FFc57C3fecbf145BA8Bd947;
    address public constant MKR_ADDRESS = 0x61e4CAE3DA7FD189e52a4879C7B8067D7C2Cc0FA;
    address public constant DAI_ADDRESS = 0xFf795577d9AC8bD7D90Ee22b6C1703490b6512FD;
    address public constant BAT_ADDRESS = 0x2d12186Fbb9f9a8C28B3FfdD4c42920f8539D738;
    address public constant UNISWAP_FACTORY_A = 0xECc6C0542710a0EF07966D7d1B10fA38bbb86523;
    address public constant UNISWAP_FACTORY_B = 0x54Ac34e5cE84C501165674782582ADce2FDdc8F4;
    address public constant UNISWAP_FACTORY_C = 0xECc6C0542710a0EF07966D7d1B10fA38bbb86523;
    address public constant UNISWAP_FACTORY_D = 0x54Ac34e5cE84C501165674782582ADce2FDdc8F4;
    address public constant UNISWAP_FACTORY_E = 0x54Ac34e5cE84C501165674782582ADce2FDdc8F4;
    address public constant UNISWAP_FACTORY_F = 0xECc6C0542710a0EF07966D7d1B10fA38bbb86523;

    ILendingPool public lendingPool;
    IUniswapExchange public exchangeA;
    IUniswapExchange public exchangeB;
    IUniswapFactory public uniswapFactoryA;
    IUniswapFactory public uniswapFactoryB;
    IUniswapExchange public exchangeC;
    IUniswapExchange public exchangeD;
    IUniswapFactory public uniswapFactoryC;
    IUniswapFactory public uniswapFactoryD;
    IUniswapExchange public exchangeE;
    IUniswapExchange public exchangeF;
    IUniswapFactory public uniswapFactoryE;
    IUniswapFactory public uniswapFactoryF;

    constructor() public {
    // Instantiate Uniswap Factory A
    uniswapFactoryA = IUniswapFactory(UNISWAP_FACTORY_A);
    // get Exchange A Address
    address exchangeA_address = uniswapFactoryA.getExchange(DAI_ADDRESS);
    // Instantiate Exchange A
    exchangeA = IUniswapExchange(exchangeA_address);

     //Instantiate Uniswap Factory B
     uniswapFactoryB = IUniswapFactory(UNISWAP_FACTORY_B);
     // get Exchange B Address
     address exchangeB_address = uniswapFactoryB.getExchange(BAT_ADDRESS);
     //Instantiate Exchange B
     exchangeB = IUniswapExchange(exchangeB_address);
     
        // Instantiate Uniswap Factory C
     uniswapFactoryC = IUniswapFactory(UNISWAP_FACTORY_C);
     // get Exchange C Address
     address exchangeC_address = uniswapFactoryC.getExchange(DAI_ADDRESS);
     // Instantiate Exchange C
     exchangeC = IUniswapExchange(exchangeC_address);
    
     //Instantiate Uniswap Factory D
     uniswapFactoryD = IUniswapFactory(UNISWAP_FACTORY_D);
     // get Exchange D Address
     address exchangeD_address = uniswapFactoryD.getExchange(MKR_ADDRESS);
     //Instantiate Exchange D
     exchangeD = IUniswapExchange(exchangeD_address);
     
        // Instantiate Uniswap Factory E
     uniswapFactoryE = IUniswapFactory(UNISWAP_FACTORY_E);
     // get Exchange E Address
     address exchangeE_address = uniswapFactoryE.getExchange(DAI_ADDRESS);
     // Instantiate Exchange E
     exchangeA = IUniswapExchange(exchangeE_address);
    
     //Instantiate Uniswap Factory F
     uniswapFactoryF = IUniswapFactory(UNISWAP_FACTORY_F);
     // get Exchange F Address
     address exchangeF_address = uniswapFactoryF.getExchange(SNX_ADDRESS);
     //Instantiate Exchange F
     exchangeF = IUniswapExchange(exchangeF_address);
     
     // get lendingPoolAddress
     address lendingPoolAddress = addressesProvider.getLendingPool();
     //Instantiate Aaave Lending Pool B
     lendingPool = ILendingPool(lendingPoolAddress);
    

    }

    event loanProfit(uint256 revenue, uint256 totalDebt, uint256 dairevenue); //declaro el evento y las informacion que voy a enviar a traves de él

    /*

    • Start the arbitrage
      */
      function makeArbitrage(uint256 amount) public onlyOwner {
      bytes memory data = "";

      ERC20 dai = ERC20(DAI_ADDRESS);
      lendingPool.flashLoan(address(this), DAI_ADDRESS, amount, data);

      // Any left amount of DAI is considered profit
      uint256 profit = dai.balanceOf(address(this));

      // Sending back the profits
      require(
      dai.transfer(msg.sender, profit),
      "Could not transfer back the profit"
      );
      }

    function executeOperation(
    address _reserve,
    uint256 _amount,
    uint256 _fee,
    bytes calldata _params
    ) external {
    // If transactions are not mined until deadline the transaction is reverted
    uint256 deadline = getDeadline();

     ERC20 dai = ERC20(DAI_ADDRESS);
     ERC20 bat = ERC20(BAT_ADDRESS);
     ERC20 mkr = ERC20(MKR_ADDRESS);
     ERC20 snx = ERC20(SNX_ADDRESS);
     
     // Buying BAT at Exchange A
     require(
         dai.approve(address(exchangeA), _amount),
         "Could not approve DAI sell"
     );
    
     uint256 tokenBought = exchangeA.tokenToTokenSwapInput(
         _amount,
     	1,
         1,
         deadline,
         BAT_ADDRESS
     );
    
     require(
         bat.approve(address(exchangeB), tokenBought),
         "Could not approve DAI sell"
     );
    
     // Selling BAT at Exchange B
        uint256 daiBought = exchangeB.tokenToTokenSwapInput(
         tokenBought,
         1,
         1,
         deadline,
         DAI_ADDRESS
     );
     
     // Buying MKR at Exchange C
     require(
         dai.approve(address(exchangeC), daiBought),
         "Could not approve DAI sell"
     );
    
     uint256 buymkr = exchangeC.tokenToTokenSwapInput(
         daiBought,
         1,
         1,
         deadline,
         MKR_ADDRESS
     );
    
     require(
         mkr.approve(address(exchangeD), buymkr),
         "Could not approve DAI sell"
     );
    
     // Selling MKR at Exchange D
       uint256 sellmkr = exchangeD.tokenToTokenSwapInput(
         buymkr,
         1,
         1,
         deadline,
         DAI_ADDRESS
     );
     
     	// Buying SNX at Exchange E
     require(
         dai.approve(address(exchangeE), sellmkr),
         "Could not approve DAI sell"
     );
    
     uint256 buysnx = exchangeE.tokenToTokenSwapInput(
         sellmkr,
         1,
         1,
         deadline,
         SNX_ADDRESS
     );
    
     require(
         snx.approve(address(exchangeF), buysnx),
         "Could not approve DAI sell"
     );
    
     // Selling SNX at Exchange F
       uint256 dairevenue = exchangeF.tokenToTokenSwapInput(
         buysnx,
         1,
         1,
         deadline,
         DAI_ADDRESS
     );
    
     // Repay loan
     uint256 totalDebt = _amount.add(_fee);
    
     	
     uint256 revenue = dairevenue - totalDebt;
     
     
     
     require(dairevenue > totalDebt, "Did not profit");
     
     
     	
     transferFundsBackToPoolInternal(_reserve, totalDebt);
     
     
     //withdrawAll;
     
     emit loanProfit(revenue,  totalDebt,  dairevenue); //hago que el evento envie la informacion que necesitamos
    

    }

    function getDeadline() internal view returns (uint256) {
    return now + 3000;
    }

    function withdrawAll () public onlyOwner returns (uint){
    ERC20 dai = ERC20(DAI_ADDRESS);

    uint256 gain = dai.balanceOf(address(this));
    uint toTransfer = gain;
    gain =0;
    msg.sender.transfer(toTransfer); //si esta accion falla hace un revert de la operacion
    return toTransfer;
    }
    

}

Failed transaction on Etherscan - applicable for Post byzantium blocks only

My steps:
Send 3000 DAI to the contract
Executed the contract

Actual result: When executed contract, Remix shows "Gas Estimation Error" and if proceed with and sumbit the transaction, on etherescan im getting Falied transaction and TX was reverted

Screen Shot 2021-06-23 at 5 46 19 PM

Screen Shot 2021-06-23 at 5 47 20 PM

NOTE: I believe this is not a fee issue, it is related to ethereum hard fork (byzantium blocks), but still I dont quite understand why its failing

Robson!

Robson, boa noite!

Tudo bem?
Muito legal a aula sobre o flashloan, queria dizer que, apesar de algumas dificuldades - não sou programador -, consegui executar a tarefa proposta. Fiquei muito contente.

O que você está fazendo atualmente em SP? Está trabalhando com DeFi?

Abraços,

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.