撰文:Beosin
今年的 Memecoin 一直是加密市场以及各大公链生态的重点。从年初起,Solana 生态中涌现了许多涨幅惊人的 Memecoin 和 Memecoin 发射平台 Pump.Fun,吸引了大量用户参与发行和交易各种 Meme 代币。其它生态的 memecoin 交易也异常火热,如 TRON 生态的 SunPump,两周协议净赚百万美元;BNB Chain 推出了 「Meme 创新之战」。
随着 memecoin 热潮而来的问题是用户需要避坑各种潜在的安全风险。此前,Beosin 已针对 Memecoin 发射平台的安全性进行了详细分析,提前对 Dexx 这类发射平台的中心化风险做了警示,并审计了 Tokr.fun、Pumpup、Pump404 等多个 Memecoin 发射平台。
今天,我们将从安全角度分析在 memecoin 中常见的风险与作恶手段,帮助没有技术基础的用户也能掌握一些识别相关风险的能力,避免资金受损。
中心化风险
近期,Dexx 事件再一次提醒用户需要注意平台的中心化风险。此部分,我们将针对当前最大的 memecoin 发射平台 Pump.Fun 进行分析:
通过链上交易,我们可查找到 Pump.Fun 的合约地址为 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P。该合约代码并未开源,由多签地址 (7gZufwwAo17y5kg8FMyJy2phgpvv9RSdzWtdXiWHjFr8) 控制。
但查询该多签地址,目前实际是由单一地址 (4zJkeipCFGvfcJvKm4TY57ED9uEdL3sBRvs8TPdZKG5Q) 控制,存在单点风险。
Link: https://solscan.io/account/6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P
5 月 17 日,Pump.Fun 因运营问题导致私钥泄露,造成了 190 万美元损失。项目私钥的管理以及多签的应用在防范单点故障上尤其重要。
Pump.Fun 在进行 memecoin 发行时,用户需要在 「内池」 通过 $SOL 铸造代币,这一过程的代币价格由 Bonding Curve(联合曲线)决定。对于每一个 memecoin,Pump.Fun 都会创建一个对应的 Bonding Curve 程序,其中的数据字段如下:
其中 tokenTotalSupply 设置为 10 亿枚,virtualSolReserves、virtualTokenReserves、realTokenReserves 和 realSolReserves 作为 AMM 的参数用于计算代币价格。当其他用户在 「内池」 铸造了 8 亿枚代币后,complete 字段变为 true,随后该 memecoin 在 Raydium 流动性池公开交易。
检查 Pump.Fun 发行的任意 memecoin 合约数据,我们可以看到其 update Authority 的特权地址为 Pump.fun Token Mint Authority(TSLvdd1pWpHVjahSpsvCXUbgwsL3JAcvokwaKt1eokM),负责铸币。「mint」 字段为对应的 memecoin 合约地址及代币信息。
这些 memecoin 合约不存在代币拓展功能,是最简单的 SPL 代币。
因此,不存在特权地址通过代币拓展中的 Permanent Delegate、TransferFee 等功能进行作恶,对参与 memecoin 交易的用户造成损失。
$Cheems 事件争议
11 月 25 日,Binance 宣布上线 Cheems 合约。其代币应声上涨 35%,然后不到 1 分钟暴跌超过 60%,引起了大量的争议。
分析链上 $Cheems 的代币交易,我们可以发现抛售代币的地址为 0xbb8365B1BA2462ffDce9C894Ada84478f474Fefc。通过 Beosin KYT 分析该地址,其结果如图所示:
11 月 25 日,该地址通过 Pancakeswap 和 OKX DEX 聚合器,在 1 分钟内卖出了 3312 亿 $Cheems,获得 406.21$BNB,随后将地址中所有 $BNB 存入 Binance。
Beosin KYT资金流向图虽然
有很多用户质疑该地址为 「老鼠仓」,但通过 KYT 对该地址过往交易的分析,这个地址可能是 Smart Money Address,有多次波段交易:
自 11 月 18 日起,该地址开始建仓 $Cheems,在建仓过程中也有不断卖出。11 月 18 日,该地址先是购买了约 1310 亿 $Cheems,4 小时后,便卖出了 413 亿 $Cheems。11 月 21 日,该地址还从 Gate.io 交易所提出 3795 亿 $Cheems,2 小时后,又在链上卖出 1758 亿 $Cheems。11 月 22 日与 23 日,也有大量买入,部分卖出的操作。资金整体流向如下图所示:
Beosin KYT 资金流向图
本次争议中的相关地址为
0xbb8365b1ba2462ffdce9c894ada84478f474fefc
0x0d0707963952f2fba59dd06f2b425ace40b492fe
0xbff62cee932fe7496a88c9193e9ba3fd5eeff46d
除了平台风险与链上 PVP 外,用户在进行 memecoin 的交易时还可能遭遇 「貔貅盘」 诈骗。之前,Beosin 已通过案例帮助用户了解此类貔貅盘骗局和预防措施,以下是更为全面的有关 memecoin 骗局的梳理:
仿盘假币
在各条链,每天都有大量新的 memecoin 上线,似乎到处都是暴富的机会。但实际上仿盘项目层出不穷,用户难以分辨代币的真伪。
许多 memecoin 的部署者会复制已经爆火项目的名称和代币标识,创建相同名称的代币合约。用户可能因为没有仔细检查代币的合约地址而误入仿盘,甚至诈骗盘、貔貅盘,导致代币无法卖出。
此外,加密社区和代币发行方就 memecoin 的大小写之争也导致了相关代币价格的暴涨暴跌。近期的 $NEIRO 与 $neiro、$ELIZA 和 $eliza 的争议和价格波动表明了 memecoin 的超高风险性,用户需了解相关 memecoin 的信息、社区反馈并小心项目方通过消息操纵市场。
限制卖出
在用户购买 memecoin 的经历中,可能遇到过类似 「貔貅盘」 的骗局,购买的代币无法卖出或是难以卖出。以下是常见的骗子通过合约代码限制用户卖出的方式:
(1) 黑名单 / 白名单
代币发行方可以在代币合约中设置黑名单 / 白名单功能以限制代币的交易,比如用户地址被加入黑名单,那么该用户可能就无法调用代币合约中的 transfer () 或者 transferFrom () 转移代币。
非黑名单的地址才能进行代币转移
(2) 修改余额
代币发行方还可以通过智能合约操控用户的代币余额,将用户的代币余额改为极低的数值。如果余额的更新仅记录在合约内部,那么受害者在区块链浏览器上仍能看到自己持有的代币,但是实际上无法出售超过合约记录数量的代币。如果受害者的余额更新上链了,那么用户会发现自己购买的 memecoin 减少甚至余额为 0。
以下是将黑名单地址的余额设置为 0 的 Solidity 代码示例:
除 EVM 生态外,Solana 也存在类似的修改余额的功能 —— 代币程序的 Permanent Delegate 拓展:
Permanent Delegate 是 Solana 官方对代币功能的扩展,管理员在任何时候都有权转移或销毁代币。其目的是为了适用于部分应用场景,例如代币回收、稳定币监管。在创建代币时,创建者可利用 createInitializePermanentDelegateInstruction 指令来初始化 permanentDelegate。
由于 Permanent Delegate 的权限过大,一些黑客利用该拓展功能发行代币,吸引用户购买其代币后,通过销毁或转移获益:
使用 Permanent Delegate 销毁代币
(3) 交易门槛
在用户买入某些 memecoin 后,其无法卖出的原因是合约中设有严苛的卖出门槛:要求用户必须超过设定的代币数量(而这个代币数量远超用户的代币持有量)才能卖出或是需要扣除高额的交易税。
如下图的代码示例,合约开发者可改变 amountToBurn 的参数设置交易税,当参数设置为 2 时,用户交易需要扣除 50% 的代币数量。
Solana 的代币拓展中也存在 TransferFee 这一功能,用于向代币的每笔交易进行收税。配置 TransferFee 需要设置以下字段:
Fee in basis points: 每次转账收取的费用,以基点为单位。
Maximum fee: 转账费用上限。
Transfer fee authority: 可以修改 TransferFee 的地址
Withdraw withheld authority: 可以转移代币账户中扣留的代币的地址
由于存在转账费用上限,所以 Solana 中通过设置交易税费从而实现貔貅盘的方式并不常用,更多是通过代币转移或是代币销毁导致用户蒙受损失。
(4) 暂停交易
代币的发行方可以在合约中控制合约的暂停状态以限制代币的交易,一旦合约进入暂停状态,合约的转账功能将全部无法使用,用户也无法进行交易。
比如下图的 Solidity 代码示例,转账只有在合约未处于暂停状态时才会调用_update 更新用户余额。
(5) 最短持币时间
在用户购买 memecoin 后,需要最短持有一段时间过后才可以再进行交易。然而该时间由代币的发行方进行设置,并可以任意修改。他们可以通过将最短持有时间修改为极大值从而使用户无法交易。
比如下图的 Solidity 代码部分示例,转账是需要满足当前转账时间大于等于用户上次更新时间 + 合约中设置的延迟时间。
独特的手续费
在用户购买 memecoin 后,与其他用户进行交易时,不会收取手续费。而当其通过 DEX(如 Uniswap)进行卖出时,则会收取手续费,除卖出以外,用户添加流动性或者参与质押的收益也会受到影响。
比如下图的 Solidity 代码示例,转账只有在 to 地址是合约地址的情况下才会对代币交易收税。
或者手续费的收取并非从本次转账金额中扣除,而是额外减少发送者的余额,这种方式一旦处理不当,则会严重影响到 DEX 中的价格,导致代币价值归 0。
额外减少 from 地址的余额
增发代币
增发代币是常见的实现 Rug Pull 的方式。因为代币合约的 owner 或是特权地址拥有铸币权限,它们可以通过增发代币并卖出进行获利。这在 EVM 生态、Solana、TON 中都是常见的潜在风险,以下是 TON 某个 Jetton 代币的 mint 函数,存在增发机制:
代币分配中心化
代币分配中心化问题是区块链项目中的一个常见风险,代币的大部分供应被项目方团队所掌控,可以通过代币投票在链上治理中操控关键决策或者通过大额买卖操控市场价格等方式影响用户的资产。
如下图的 Solidity 代码所示,代币在部署时会将所有代币总量分配给合约的部署者。
代理升级
代币合约使用代理升级模式是一种常见的智能合约设计模式,可以通过代理合约实现逻辑的升级,而不改变存储合约的数据结构。虽然这种模式带来了灵活性,但同时也存在一些潜在的风险和危害。代币的发行方可以随意更改合约逻辑,导致代币持有者资产的丢失或被盗。
如下图的 Solidity 代码所示,合约的 Admin 能够修改实现合约的地址,一旦修改为错误的合约甚至恶意合约,那么将导致用户资产的丢失或者被盗。
如何避坑?
Memecoin 热潮下的骗局层出不穷,如果用户未多加辨明,便很有可能落入相关骗局,资金受损。因此,Beosin 安全团队建议用户:
1. 理性看待 Memecoin 的暴富效应与 KOL 宣传效应。在一个全新的代币上线 DEX 后,用户需要保持理性,不产生 FOMO 情绪,不盲目跟风。
2. 不相信 「内部信息」 或 「机密消息」。这些通常是骗局设置陷阱的手法,目的是引诱用户在没有进行信息筛选和调研的情况下冒险投资。
3. 在购买代币前,用户应检查以下关键点:
代币合约是否开源
是否有审计报告
是否有黑 / 白名单机制
是否有交易税,交易税的具体收取方式
是否具有暂停机制
是否具有如限制交易量,最小持币量,最短持币时间等特殊机制
合约 owner 权限可以调用的函数,权限是否过高
合约是否使用代理模式
合约的 owner 权限如何管理,是否多签或者放弃
Beosin 此前已对 Tokr.fun、Pumpup、Pump404 在内的多个 memecoin 发射平台和代币合约进行了详尽的安全审计,确保其合约代码的安全性、 业务实现逻辑的正确性,保障项目和用户的资金安全。
4. 许多交易平台和风险监测工具会为用户列明代币合约检测项,参考这些信息有助于用户提高识别骗局的准确率。用户在进行交易前可参考多个安全工具的检测结果,以下是常用的风险检测工具:
Honeypot: https://honeypot.is/
Token Sniffer: https://tokensniffer.com/
OKX: https://www.okx.com/zh-hans/web3/dex-market
GoPlus: https://gopluslabs.io/token-security
De.Fi: https://de.fi/scanner
Beosin Alert: https://chromewebstore.google.com/detail/beosin-alert/lgbhcpagiobjacpmcgckfgodjeogceji
总结
本文我们总结了 memecoin 常见的作恶方式,从中可以发现,memecoin 尽管充满了机遇与可能性,但也伴随着各种各样的陷阱。用户必须对 memecoin 的交易保持高度的警惕性和谨慎性,以降低资金损失的风险。在 Web3 的世界里,安全永远是第一位的。