라타끄 뒤 샌드위치

9268 단어
Le MEV(éxtraction de valeur pour les mineurs) est un problème qu'existe en PoW(preuve de travail) comme en PoS(preuve de staking). Le MEV donne une avantage aux mineurs sur les autres utilisateurs du blockchain. veux pas ça. C'est pour ça qu'il y a différentes manières de le battletre comme flash bots ou même des idées a niveau du protocol. Malheureusement ce problème persiste et c'est mieux de l'attaquer depuis différentes angles. Peut prévenir un des attaques plus connues: L'attaque du Sandwich에 대한 montre의 En ce 비디오 댓글. va faire un token qui protège l'achat ou vente du token dans les DEXes en-chain.

Eneigenphi des exemples des Attaques de Sandwich on chain.

전위 드 초보자



Pour ce video tu auras besoin de Metamask ou n'importe quel wallet compatible avec l'EVM et aussi du GoerliETH que tu peux trouver gratuitement en un faucet .

토큰 ERC20 avec mécanisme 안티 샌드위치



Faites는 블록체인 que vous êtes en train d'utiliser에 라우터가 존재하지 않는 유틸리티에 주목합니다.
  • 유니스왑 라우터: 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
  • 퀵스왑 라우터: 0xa5E0829CaCEd8fFDD4De3c43696c57F7D7A678ff
  • 팬케이크스왑 라우터: 0x10ED43C718714eb63d5aA57B78B54704E256024E

  • // SPDX-License-Identifier: MIT
    pragma solidity 0.8.16;
    
    import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
    
    interface IUniswapV2Factory {
        function createPair(address tokenA, address tokenB) external returns (address pair);
    }
    
    interface IUniswapV2Router {
        function factory() external pure returns (address);
        function WETH() external pure returns (address);
    }
    
    contract MyToken is ERC20 {
        mapping(address => uint256) public lastTxByAddress;
        uint public blockCooldownAmount = 1;
        address pair;
    
        constructor() ERC20("My Token", "MTKN") {
            _mint(msg.sender, 1_000_000 ether);
    
            IUniswapV2Router uniswapRouter = IUniswapV2Router(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
            pair = IUniswapV2Factory(uniswapRouter.factory()).createPair(address(this), uniswapRouter.WETH());
        }
    
        function _beforeTokenTransfer(
            address from,
            address to,
            uint256 amount
        ) internal override {
            amount;
            if(from == pair)
            {
                ensureMaxTxFrequency(to);
                lastTxByAddress[to] = block.number;
            } else if(to == pair)
            {
                ensureMaxTxFrequency(from);
                lastTxByAddress[from] = block.number;
            }else
            {
                ensureMaxTxFrequency(from);
                lastTxByAddress[from] = block.number;
                ensureMaxTxFrequency(to);
                lastTxByAddress[to] = block.number;
            }
        }
    
        function ensureMaxTxFrequency(address addr) internal virtual {
            bool isAllowed = lastTxByAddress[addr] == 0 ||
                ((lastTxByAddress[addr] + blockCooldownAmount) < (block.number + 1));
            require(isAllowed, "Max tx frequency exceeded!");
        }
    }
    


    ¡ Merci pour voir ce 비디오!

    Suivez nous ici en dev.to et en pour ce qui a à voir avec Blockchain en Francais.

    좋은 웹페이지 즐겨찾기