샌드위치 공격
eigenphi에서 메인넷의 샌드위치 공격 사례를 찾을 수 있습니다.
시작하기 전에
이 튜토리얼에서는 Metamask 또는 faucet에서 얻을 수 있는 Goerli 자금과 호환되는 다른 지갑이 필요합니다.
샌드위치 방지 메커니즘이 있는 ERC20 토큰
사용 중인 블록체인에 존재하는 라우터 주소를 사용하고 있는지 확인하십시오.
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!");
}
}
이 비디오를 시청해 주셔서 감사합니다!
블록체인 개발과 관련된 모든 것을 보려면 dev.to 및 in에서 우리를 팔로우하세요.
Reference
이 문제에 관하여(샌드위치 공격), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/filosofiacodigoen/sandwich-attack-3hl7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)