Read Only Reentrancy | Hack Solidity (0.8)

Поділитися
Вставка
  • Опубліковано 13 гру 2024

КОМЕНТАРІ • 33

  • @smartcontractprogrammer
    @smartcontractprogrammer  2 роки тому +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 2 роки тому +9

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

    • @juanxaviervalverde
      @juanxaviervalverde 2 роки тому +2

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

  • @moayaan1911
    @moayaan1911 2 роки тому

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

  • @franklucas7542
    @franklucas7542 2 роки тому +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 2 роки тому

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

  • @muratctp
    @muratctp 2 роки тому +4

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

    • @smartcontractprogrammer
      @smartcontractprogrammer  2 роки тому +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

  • @navibongo9354
    @navibongo9354 2 роки тому +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

    • @strikeout5
      @strikeout5 2 роки тому

      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.

  • @crypto_peng
    @crypto_peng 2 роки тому +1

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

  • @AllenAndersonTaylor
    @AllenAndersonTaylor 2 роки тому +1

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

  • @weinbenderwladimir742
    @weinbenderwladimir742 2 роки тому

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

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

    why will the fallback function be triggered?

  • @bhok5228
    @bhok5228 2 роки тому +2

    wow, impressive

  • @0xivanov
    @0xivanov 2 роки тому

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

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

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

  • @ngjingxuan4320
    @ngjingxuan4320 2 роки тому +1

    How can we prevent this hack?

  • @Grucha1998
    @Grucha1998 2 роки тому +1

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

  • @tele-anonymous
    @tele-anonymous 2 роки тому

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

  • @junesuprise
    @junesuprise 2 роки тому +1

    why foundry and not hardhat?

  • @adk9321
    @adk9321 2 роки тому

    What is this contract for?

  • @raunaquepatra3966
    @raunaquepatra3966 2 роки тому

    How to prevent it?

  • @ravendonly1
    @ravendonly1 2 роки тому

    there is no way to avoid the hack here

  • @NishantSingh-zx3cd
    @NishantSingh-zx3cd 2 роки тому

    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