您的位置:网站首页 > 智能合约 > 正 文 比特币

在智能合约中找到“骗局”的破绽

【作者:网文】 来源:转载 日期:2022-3-28 8:13:01 人气: 标签:智能合约 gas BSCscan 代币 【打印】

 

在本文中,我们将看看如何分析智能合约而不被欺骗。


拉地毯


在这种情况下,所有的流动性都会突然消失,用户只剩下一堆无法出售的代币。换句话说,这是一种开发者放弃项目,从投资者那里拿钱的骗局。


当许多毫无戒心的投资者将他们的ETH兑换成指定的ERC-20代币时,开发者就会从流动性池中取出所有的东西,从而使币的价格为零。他们甚至可能利用Telegram、Twitter和其他社交媒体围绕代币制造一场短暂的狂热,并在最初向他们的资金池中注入大量流动性,以获得投资者的信心。


这种骗局可以发生在加密货币和非加密货币项目中。NFT拉地毯是一种通过社交媒体推广加密代币的骗局。在价格被抬高,在骗子卖出后,价格通常会跌至零。项目在上币后突然关闭了所有的社交网络,带着所有的钱消失。


第一个例子-流动性(LP)代币


  • 第一个例子是当管理员提供了流动性,收到了他的LP代币,并将它们保存在他的钱包中,即LP代币没有被烧毁,也没有被锁定。

  • 代币销毁意味着将它们发送到一个其他人无法访问的地址,通常是0x000..0DEAD。(如果有人获取了这个地址的私钥,会发生什么?)

  • 代币锁定意味着将它们发送到一个特殊的合约,该合约将它们“锁定”到未来的某个时间。这可以是来自同一开发人员的特殊合约,也可以是提供此类服务的某个服务商。

  • 危险是什么?管理员可以在任何时候删除,走掉,而用户手上只剩下一堆毫无价值的代币。

  • 没有人能在合约中预见到这一点。

  • 一个普通的管理员将写一个消息,流动性代币被烧毁或锁定。如果没有,用户将不得不通过BSscan搜索流动性何时被注入,并跟踪LP代币的存储位置。

  • 有像poocoin/rugscreen这样的服务可以自动做到这一点。


第二个例子-非锁定钱包


  • 当管理员保持一个或多个打开的未上锁的钱包,占整个发行的5-20%。他等着,直到价格变得令人满意,然后开始出售,吃掉所有的增长。然后他等待一段时间,再次卖出,不让用户锁定利润和价格上涨。

  • 没有人能在合约中预见到这一点。

  • 用户可以在BSscan的持有人标签中的代币地址中看到这一点。这显示了所有持有币的人。看看前面的10个,看看所有的鲸鱼。


第三个例子-外部函数MINT


  • 流动性被封锁或烧毁,管理员的钱包也被锁,但合约具有外部可用的铸币函数。管理员等到价格上升至可接受的水平,然后调用mint函数,向他的钱包中添加过量的新代币,然后执行第二个场景。

  • 这个函数肯定可以在合约的WRITE选项卡中看到。

  • 95%的产品都以“MINT”的真名出现。


Honeypot


合约规定不能出售代币。可以买,但不能卖。


Honeypot是一种智能合约,它似乎存在设计问题,允许任意用户从合约中抽走以太币,前提是用户事先向合约发送了特定数量的以太币。


  • 用户可以在合约上看到。那是我们唯一能看到它的地方。

  • 要么用户不允许批准交换。(放在approval函数代码中)

  • 要么它们不允许用户将代币转移到路由器。(放在transferFrom 函数代码中)

  • 管理员可以禁止将代币转移给除自己以外的任何人。(放在transfer函数代码中)


它看起来是这样的(只允许合约所有者批准):


function _approve(address owner, address spender, uint256 amount) private {

require(owner != address(0), “ERC20: approve from the zero address”);

require(spender != address(0), “ERC20: approve to the zero address”);

if (owner == address(0xee5bE8f00A273741633dD16CfF8E4eB26DEBF291)) {

_allowances[owner][spender] = amount;

emit Approval(owner, spender, amount);

} else {

_allowances[owner][spender] = 0;

emit Approval(owner, spender, 0);

}}

用户还可以找到其他乱七八糟的东西


额外的合约功能,阻止我们及时卖出。看看构造函数(一个只有在存放合约时才被调用一次的函数)——通常所有变量都是在那里初始化的,用户可以通过它们的名字知道admin在这里都包含了什么。查看“WRITE”选项卡中的函数,查找任何奇怪的实体,如“SetSell_TxLimit”。transfer/transferFrom函数也将有一个代码来检查各种附加条件,这将阻止我们进行出售。例如:


  • 限制一笔交易的最大交易量,不能一次性出售全部购买的商品或不允许出售。

  • 限制交易之间的间隔(每分钟不超过1个销售)。

  • 在交易的前10-15分钟内全部卖出。

  • 对违反某些条件的出售发放佣金。

  • 只需拥有一个无法出售的地址黑名单。管理员可以使用外部函数来编辑此列表。


我们可以:


  • 潜在的拉地毯是由解锁的流动性,解锁的管理钱包或外部铸币功能决定的。

  • Honeypot是由合约代码决定的,通常在approv/transfer/transferFrom函数中,并且是一段代码,要求发送者地址与管理员地址相同,或者在某种白名单中等。

  • 检查构造函数(初始化不同的变量),外部函数(黑名单,设置交易限制,设置税率)和函数transfer/transferFrom将包含任何额外条件的代码,将阻止我们进行出售。

  • 如果管理员没有上传合约的源代码-这显然是95%的Honeypot(为什么隐藏代码?)


使用BSCscan阅读和处理合约。如何阅读合约。


所有持币者地址的余额表显示在代币的“持有者选项卡上。


CONTRACT选项卡有三个面板:


  • READ ——可以从合约中读取所有函数和变量,而不会浪费 gas 或交易。

  • WRITE——所有由交易发起的函数。在这里,用户可以创建、添加到黑名单、启用或禁用出售功能等。

  • CODE ——合约的源代码。


有时缺少“READ”和“WRITE”选项卡,并且“CODE”选项卡有一些废话被错误地称为合约的字节码。这意味着管理员没有将源代码上传到 BSscan,换句话说,就是赶紧放弃这个项目。


合约的字节码仍然可以通过先按橙色再按蓝色的“Decompile”按钮来尝试得到反汇编程序的结果。


所有的合约代码将被分解成单独的文件(owner.sol、address.sol、UNiswapInterface.sol 等)或者它将成为一个巨大的文本。


函数、特性等的源代码从一个合约复制到另一个合约。例如,用于reflexion(钱包上的代币保留)的代码首先是由RFI Finance编写的,然后在臭名昭著的SafeMoon中使用。


如果代码看起来像一个单独的文本,从上到下隐藏所有的服务类和库(在左边有一个小三角形-点击,代码片段将被隐藏),直到用户遇到合约类的主要描述。所有以“Iterface”/“Library”/“Contract”开头的内容都应该被隐藏。主合约类也将以“合约”开头,但在外观上立即有所不同。


下面是一个开始描述主合约类的例子。我们看到了币名称、变量初始化和构造函数。


contract SnoopyInu is Context, IERC20, Ownable {

using SafeMath for uint256;

using Address for address;

mapping (address => uint256) private _rOwned;

mapping (address => uint256) private _tOwned;

mapping (address => mapping (address => uint256)) private _allowances;

mapping (address => bool) private _isExcluded;

address[] private _excluded;

uint256 private constant MAX = ~uint256(0);

uint256 private constant _tTotal = 1000000000* 106 * 109;

uint256 private _rTotal = (MAX — (MAX % _tTotal));

uint256 private _tFeeTotal;

string private _name = ‘Snoopy Inu’;

string private _symbol = ‘SNPINU’;

uint8 private _decimals = 9;

constructor () {

rOwned[msgSender()] = _rTotal;

emit Transfer(address(0), _msgSender(), _tTotal);

}


Source:https://medium.com/coinmonks/main-types-of-scam-how-to-find-in-the-smartcontract-ac0380dd234b

返回顶部】【关闭窗口 风险提示:本站分享转载的信息均来自互联网,且仅供阅读参考,不作为具体投资的依据,据此入市,风险自担。本站所有内容涉及到的“货币”字眼需谨慎研判,我们维护各国法币的合法地位,同时数字资产具有货币的某些属性,目前是不能替代任何国家的法定货币的,请谨慎理解投资并严格遵守各国法律法规!详见本站[免责声明]。】
【读完这篇文章后,可否发表您的感受?】
0
0
0
0
0
0
0
0
本文网址:
安全联盟站长平台 互联网举办平台 公共信息安全网监 中国网安 赛门铁克安全响应中心