Read Only Reentrancy | Hack Solidity (0.8)

Поделиться
HTML-код
  • Опубликовано: 10 сен 2024

Комментарии • 33

  • @smartcontractprogrammer
    @smartcontractprogrammer  Год назад +1

    0:00 - Intro
    0:55 - Initialize Foundry
    1:16 - Code Hack contract
    4:01 - Curve remove_liquidity function
    8:31 - Write test
    9:57 - Execute test
    11:15 - Code Target contract
    14:44 - Update Hack contract
    17:21 - Update test
    18:24 - Execute test again
    19:11 - Summary
    Code
    github.com/stakewithus/defi-by-example/tree/main/read-only-reentrancy
    Curve STETH contract
    github.com/curvefi/curve-contract/blob/master/contracts/pools/steth/StableSwapSTETH.vy
    Take a course
    www.smartcontract.engineer/

  • @harrydare8191
    @harrydare8191 Год назад +9

    A suggestion. You need to author a book on Solidity cause you have vast knowledge

    • @juanxaviervalverde
      @juanxaviervalverde Год назад +2

      I support the suggestion. Great mind and a helpful spirit. I'd buy your book.

  • @franklucas7542
    @franklucas7542 Год назад +5

    Please make more 0.8 hack solidity videos bro, they are helping a ton!

    • @0xsuperman
      @0xsuperman Год назад

      What does 0.8 mean?

    • @xman25ru
      @xman25ru Год назад

      @@0xsuperman solidity version

  • @trainwreck1827
    @trainwreck1827 Год назад

    This was very enlightening. Been watching for a while and this is the best.

  • @mohammadayaansiddiqui7125
    @mohammadayaansiddiqui7125 Год назад

    New playlist started. Was waiting for this ....

  • @navibongo9354
    @navibongo9354 Год назад +2

    Great vid! Love ur take on security matters. Would have loved a “how to avoid part”, but this one is fairly simple to prevent.
    Sry to persist, but could you make a video on bit-shifting in the v2 uniswap contract. With this im referring to the math behind the FixedPoint.uq122x122. Since your bit conversion video, i was left intrigued in how a bit shift would look with the dex values. Seeing as you can apply some logic to all bits in a 122 range for some purpose.
    Love your videos!
    Cheers

    • @maxdulin2353
      @maxdulin2353 Год назад

      Curve should have updated all financial state prior to sending the funds out. The reason for this being possible is the callback function in the middle of a state change.
      tldr; Don't be in an in-between state for important variables when external contract calls are made. Otherwise, the functions in use by other contracts could be manipulated via Read Only reentrancy.

  • @muratceliktepe9088
    @muratceliktepe9088 Год назад +4

    Just one question: why virtual price should be higher during remove_liquidity function execution?

    • @smartcontractprogrammer
      @smartcontractprogrammer  Год назад +4

      1. Curve shares is removed
      2. ETH is sent back, STETH is not yet sent
      So the imbalance in ETH - STETH is calculated as "profit". Hence virtual price is higher

  • @crypto_peng
    @crypto_peng Год назад +1

    How to avoid this attack? more like flash add-Liquidity, then instantly remove-liquidity to get the reward right?

  • @bhok5228
    @bhok5228 Год назад +2

    wow, impressive

  • @AllenAndersonTaylor
    @AllenAndersonTaylor Год назад +1

    Would you offer private tutoring? You really understand what you are doing.

  • @Thomasalpha-b9l
    @Thomasalpha-b9l Год назад

    why will the fallback function be triggered?

  • @ngjingxuan4320
    @ngjingxuan4320 Год назад +1

    How can we prevent this hack?

  • @Grucha1998
    @Grucha1998 Год назад +1

    This Channel is amazing!! How did you learn this stuff? 🤔

  • @wonjaechoi2762
    @wonjaechoi2762 Год назад

    What can be a contract 'A' in the code?

  • @weinbenderwladimir742
    @weinbenderwladimir742 Год назад

    Great video! Thanks for that! How to prevent these type of attacks when designing smart contracts?

  • @tele-anonymous
    @tele-anonymous Год назад

    Hello! What operation system do you use macOs or Linux ?

  • @0xivanov
    @0xivanov Год назад

    Hey! Are you using the vim extension for vscode? :)

  • @junesuprise
    @junesuprise Год назад +1

    why foundry and not hardhat?

  • @adk9321
    @adk9321 Год назад

    What is this contract for?

  • @raunaquepatra3966
    @raunaquepatra3966 Год назад

    How to prevent it?

  • @ravendonly1
    @ravendonly1 Год назад

    there is no way to avoid the hack here

  • @NishantSingh-zx3cd
    @NishantSingh-zx3cd Год назад

    if the developers reverse the sequence of loop such that the 0th element ie. ETH amount comes last in the execution of the iteration, will this vulnerability be resolved? It should look something like this:
    for i in xrange(N_COINS, 0, -1):
    value: uint256 = amounts[i] * _amount / total_supply
    assert value >= _min_amounts[i], "Withdrawal resulted in fewer coins than expected"
    amounts[i] = value
    if i == 0:
    raw_call(msg.sender, b"", value=value)
    else:
    assert ERC20(self.coins[1]).transfer(msg.sender, value)
    log RemoveLiquidity(msg.sender, amounts, empty(uint256[N_COINS]), total_supply - _amount)
    return amounts