Read Only Reentrancy | Hack Solidity (0.8)

Поділитися
Вставка
  • Опубліковано 27 вер 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.

  • @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 ....

  • @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?

  • @Thomasalpha-b9l
    @Thomasalpha-b9l Рік тому

    why will the fallback function be triggered?

  • @ngjingxuan4320
    @ngjingxuan4320 Рік тому +1

    How can we prevent this hack?

  • @bhok5228
    @bhok5228 Рік тому +2

    wow, impressive

  • @Grucha1998
    @Grucha1998 Рік тому +1

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

  • @weinbenderwladimir742
    @weinbenderwladimir742 Рік тому

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

  • @wonjaechoi2762
    @wonjaechoi2762 Рік тому

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

  • @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?

  • @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

  • @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

  • @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.

  • @AllenAndersonTaylor
    @AllenAndersonTaylor Рік тому +1

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

  • @raunaquepatra3966
    @raunaquepatra3966 Рік тому

    How to prevent it?

  • @tele-anonymous
    @tele-anonymous Рік тому

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