# 小白如何通过代码查看是否是貔貅代币

By [🐖 猪猪Bang](https://paragraph.com/@balcke) · 2023-08-06

---

简介
==

最近各种新奇土狗骗局真的是层出不从，各种各样骚操作都有。

想起以前在 BSC冲狗的时候， 最多也就 直接貔貅 增发 撤池子，而现在，又延迟貔貅 又内联汇编直接增发 又恶意转移，这咋玩。

以前看到合约开源基本上都安全，现在合约开源都不一定能保证安全。

以前看到锁了池子，就可以冲了，现在还有假锁池子一说，还能抽回出来。

以前用工具检测了不是貔貅，冲了不怕卖不出去，现在还有延迟貔貅，过了一会或dev关交易后旧卖不出去

各种骗局层出不从，并且在当前熊市，土狗内部都是pvp的情况下，胜率更低，骗局更多。

思路
==

直接总结，如果是我去买一个代币，我会去如何判断这个代币是否安全。

① 使用检测代币安全的工具判断是否安全

② 查看交易对池子是否已经上锁或丢黑洞

③ 源码查看是否有交易后门

④ 本地节点跑一次看能否出块

对于我来说，最主要的点就是这四个，当然，这只是看一个代币安全与否，而不是 值不值得买！

可能对于小白来说，第 3、4点比较困难，不过我相信看完这篇文章，第三点还是可以很简单的做到的。

使用检测代币安全工具
==========

市面上有非常多的代币安全检测工具，如 电报机器人 检测网站 交易网站 甚至 okdex 其实也可以检测，我这边放几个我常用的网站和工具。

telegram工具：

**aegisweb3：**

[https://www.aegisweb3.com/bot](https://www.aegisweb3.com/bot)

**粉红查币：**

[https://t.me/Pink\_ChaHeYue](https://t.me/Pink_ChaHeYue)

网站：

**quickintel：**

[https://quicki.quickintel.io/scanner](https://quicki.quickintel.io/scanner)

**goplus：**

[https://gopluslabs.io/token-security/](https://gopluslabs.io/token-security/)

**defi：**

[https://de.fi/scanner/](https://de.fi/scanner/)

然后对于交易土狗来说，我都会使用okdex，会自带安全性检测，也挺好。

对于使用工具的话，我会手工都去查一遍，只要有一个有问题，我都不会去购买，毕竟在熊市这个pvp场来说，保住本金才是我的唯一想法。

查看交易对池子是否已经上锁或丢黑洞
=================

对于第二点，我也是使用工具来查看，不过我会在第三点看代码的时候，再通过交易记录去查看是否已经上锁

第一个工具也是粉红查币：

[https://t.me/Pink\_ChaHeYue](https://t.me/Pink_ChaHeYue)

![](https://storage.googleapis.com/papyrus_images/0f068bf37d0fc000cade3f71ae7db85437ebebc9afc27c19b19352892c107dac.png)

defi：

[https://de.fi/scanner/](https://de.fi/scanner/)

![](https://storage.googleapis.com/papyrus_images/4c83b320eaa0be89afb94d50b8873c83b2a62aff0451cd88bd67be29afecc575.png)

tokentool:

[https://tokentool.app/audit/contract](https://tokentool.app/audit/contract)

![](https://storage.googleapis.com/papyrus_images/5c117d089d71c44c49b8abd586bd5b9ba6a337c0bbf583b796a5e5358e8c6a1b.png)

源码查看是否有交易后门
===========

这是这篇文章的重头戏，也是我一直想写的事情，我尽量写通俗易懂一点，希望可以帮助到大家。

首先，我们可以看一下，一个代币的生命流程是怎样的

包含 创建 → 加池子 → 开放交易 → 锁池子 → 交易 → rug/关闭交易 等

![简单流程](https://storage.googleapis.com/papyrus_images/a4ede060341190e990b12bc8f92ac2d8b1503388de0205de8dbea6305bd9e8f7.png)

简单流程

上图只是一个简单流程，但是对于我们日常使用来说，已经足够了

对于我来说，我的查看步骤是如何的呢

① 查看dev是否是第一次发币(有的连续发几个rug币都不换地址的)

② 查看加了多少池子，池子是否已经丢掉权限

③ 查看合约代码approve方法，是否有假授权限

④ 查看transfer方法，是否有高税，黑白名单，禁止交易等逻辑

**注：闭源的，我都默认不玩，除非是大牛市，熊市太难了**

**① 查看dev是否第一次发币**

打开ehterscan，搜索代币合约，点击创建者地址

![](https://storage.googleapis.com/papyrus_images/00f6cce68f700b7d5bad5c742451069236a73648c3082f2c3808b16b8f1a5a0c.png)

直接拉到最开始的交易，查看是否有发过其他代币，查看创建代币的话，直接看 To 里面有没有 Create:xxx 即可

![](https://storage.googleapis.com/papyrus_images/385429abd737f4f4aabb9d80124467d887f8c88c0cc3d1087227c94b86f86269.png)

**② 查看加了多少池子，池子是否已经丢掉权限**

查看加池子的话，我们可以看 dev地址的交易记录，主要是看 **Add Liquidity** 这个方法

![](https://storage.googleapis.com/papyrus_images/3fb7d727d8fa15a39a71f66f8a17d07ecfb377173a6d1ec965f3fda10ffcf491.png)

查看内部交易详情，只需要跟着图片，1，2，3去查看即可。

我们说一下这个凭证，凭证就是这个 UNI-V2 的这个代币地址，比如钱包A去添加池子，uniswap就会将这个凭证返回给 钱包A，后续钱包A就可以拿上这个凭证去调用uniswap池子里面的各种方法了，如撤池子！

注意我们要记录这个凭证返回了多少数量，以及正确的地址，有的人锁池子是锁一部分数量，以及锁的假凭证！

![](https://storage.googleapis.com/papyrus_images/f7f9c9a6f8ab58d3fe0433a99fab359c815f96b3f55fb4935ff25dabf6ee7664.png)

然后我们去查看，是否已经锁池子或者丢黑洞，既然我们已经知道凭证是干嘛的， 那这个时候，锁池子/丢黑洞的操作，实际上，就是对凭证进行操作，如将凭证转移到黑洞，如将凭证通过其他智能合约锁上一定时间内无法操作。

这个时候，我们可以查看一下 调用者dev 的交易记录，专门看 _Transfer_方法 或 lockLPToken方法 或 lock方法

1.直接将凭证发送到一个无法操作的地址(黑洞最好，因为发送给其他地址的话，如果合约有留后门，也是可以直接调用代币合约地址里面的代币存量的)

![](https://storage.googleapis.com/papyrus_images/c9e565d0b66d5033af0f4c49016240af3c7e83619f22b8d240b99066ba2328d4.png)

2.利用UNCX的智能合约，锁定池子凭证

![](https://storage.googleapis.com/papyrus_images/615c7dca1c5260b15a7c4cbae63f57b34e5ef368a0fded5bdc9b73d368f72002.png)

3.利用PinkSale的智能合约，锁定池子凭证

![](https://storage.googleapis.com/papyrus_images/1598bda3d340d75a38078b24d61b562ba15e867a9b56bd820231542279749bfc.png)

为什么会有 lockLPToken 或 lock方法呢，其实这些都是使用了第三方的锁池工具，第三方会使用一个智能合约，在调用此方法的时候，会将凭证锁住一定量的时间，让dev无法操作池子凭证。

如

UNCX Network的锁池智能合约地址：0x663a5c229c09b049e36dcc11a9b0d4a8eb9db214

PinkSale的锁池智能合约地址：

0x71B5759d73262FBb223956913ecF4ecC51057641

看锁没锁池子，最主要是看三点

1、锁的数量是多少，是不是和添加的池子返回的凭证数量一致

2、锁池子的时间锁了多长时间

3、锁池子的合约是否是正确的，因为有的人会自己创建一个智能合约，然后创建了一个 LOCK 的方法，他们会去调用这个方法，会让人误以为是锁了。其实调用的是自定义的方法而已，随时可以解锁，此时我们就要注意，锁池的交互的智能合约地址是不是常见的，有没有标签，如果都没有的话，就默认不玩吧。

**③ 查看合约代码approve方法，是否有假授权限**

这个基本上就是直接跳到代币合约的地址，然后查看 \_approve的方法即可

看授权方法，最主要两个点

1、require() 的判断有没有一些特殊的判断

2、是不是给 \_allowances 赋值

其实授权方法没啥大问题，基本上都是在 \_transfer 转账方法里面做的权限判断不让出售

![](https://storage.googleapis.com/papyrus_images/f32ea867d731df567b0f06c0d662e2eeaae784a7baac85d477e36e76eb31cc6f.png)

**④ 查看transfer方法，是否有高税，黑白名单，禁止交易等逻辑**

对于 \_transfer 方法，我们一样也是使用代码搜索的方式，然后查看有没有特殊校验

其实查看貔貅，我最主要只看三个点

1、require() 有没有特殊校验

     require(): 括号内部会有一个判断，如果判断是错误的话，此时就不会继续往下执行，而是直接拒绝。

     所以require里面如果有特殊校验的话，很有可能会导致我们无法交易，卖不出去，然后导致貔貅

2、有没有一些特殊属性，比如 balckadd\[\] whiteadd\[\]等这些属性

     有的时候会用一些属性来做判断，这些属性会在其他方法里面，或者创建的时候赋值，我们看这些属性的话，也可以直接通过搜索去查看，然后判断是不是后门

3、最后调用转账方法的时候，是否确实是转账指定的数量，查看 balances\[\] 属性

     最后会调用实际的 transfer方法，如果转账的数量在中途给减少了，那很有可能，卖1万，其实只卖了100，就会导致想卖的和实际卖的不相符。

先看一个正确没问题的转账方法，并且一步一步看，里面做了什么

在查看代码的时候，我们还是根据几个关键点，

require() 方法里面的判断

\_balances\[\]属性的值的改变

下面这张图的代码，是最简单的转账代码，也是没有任何问题的转账代码

![](https://storage.googleapis.com/papyrus_images/f71d9dcf5abc54380c53c6fbb01e589068251f4d8fe8429d5a54e44179f8e5ec.png)

然后我们这个时候查看一个关于延迟貔貅代币的解析

[https://twitter.com/0xblackecn/status/1683735574153428992?s=20](https://twitter.com/0xblackecn/status/1683735574153428992?s=20)

其实看完上面两个代码解析的时候，我们最主要关注的点还是在于 require() 和 一些 if()的判断中。

特别遇到一些需要特殊属性的判断，我们这个时候就需要在代码上进行特殊属性的搜索，在搜索的时候，查看是否会赋值，我们的地址是否在这个属性中。

如以下案例

![](https://storage.googleapis.com/papyrus_images/e7c921968dc749e2223c5420e762fb5ff648084b794828b85128c246b9f27fa0.png)

对于转账的方法，我们必须要打起十二分精神，多次查看 requre() 和 if() 等操作。

总结
==

其实对于代币是否是貔貅的话，目前这些操作都比较适合小白了，对于一些如用内联汇编去做事情的，不仅很难看出来，也很耗费时间，遇到这种，那就确实是太倒霉了，dev的技术也确实很高超。

---

*Originally published on [🐖 猪猪Bang](https://paragraph.com/@balcke/CZJAFN0jDKi75FXbDMml)*
