慢雾创始人余弦:3分钟了解CryptoPunks V1 (wrapped) ——漏洞导致的分叉文化

互联网 阅读 667 2023-04-23 18:08:00

注:原文来自慢雾创始人余弦发布长推,MarsBit整理如下:

今天看到这篇文章科普了 Wrapped CryptoPunks:

https://m.marsbit.cc/newsdetailShare/20230423094035639766.html…

正好之前有一些笔记,也顺便分享出来,方便大家对早年分叉存在的 CryptoPunks V1 (wrapped) @v1punks 也有个对比了解;-)

Punks 目前存在的主要形态有:

- CryptoPunks - ERC20 版本,早于 NFT 721 标准

- Wrapped CryptoPunks - CryptoPunks 的 Wrapper 版本,兼容了 721 标准,方便交易

- CryptoPunks V1 (wrapped) - 也称 V1 Punks,早年分叉且兼容 721 标准

分别对应如图,前两者都是 Yuga Labs 认可。

慢雾创始人余弦:3分钟了解CryptoPunks V1 (wrapped) ——漏洞导致的分叉文化

慢雾创始人余弦:3分钟了解CryptoPunks V1 (wrapped) ——漏洞导致的分叉文化

为什么会出现这种情况,尤其是 V1 Punks 的出现,是因为最早缘起 2017 年 CryptoPunks 的一个漏洞: https://etherscan.io/address/0x6ba6f2207e343923ba692e5cae646fb0f566db8d#code…

简单来说就是买家买一个 Punk,花的 ETH 不会给到卖家,会回到自己的口袋,等于是空手套白狼了。代码上的核心在于:

struct Offer {

bool isForSale;

uint punkIndex;

address seller;

uint minValue; // in ether

address onlySellTo; // specify to sell only to a specific person

}

buyPunk 函数:

punkNoLongerForSale(punkIndex); // 这里面将 msg.sender 覆盖了 offer.seller,导致下面的 offer.seller 引用实际上是指向 msg.sender(即买家):

pendingWithdrawals[offer.seller] += msg.value;

修复的核心是:

address seller = offer.seller; // 每次 buyPunk 都会初始化这个 seller,这样就确保 seller 不会被覆盖。

好,这是起源。后来 Larva Labs 2017 年就修复了。万万没想到,2022.1.17,V1 Punks 基于最早这个漏洞代码搞了所谓的真正的 CryptoPunks,采用 ERC721 全新封装: https://v1punks.io https://etherscan.io/address/0x282bdd42f4eb70e7a9d9f40c8fea0825b7f68c5d#code… 搞得有模有样,可能 Larva Labs 最不该的就是卖了 V1 Punks,然后再踩一脚,导致 V1 Punks 更知名了。参考:

The Two CryptoPunks, V1 and V2: Can V1 and V2 CryptoPunks Coexist or Will Copyright Tear Them Apart">https://papers.ssrn.com/sol3/papers.cfm?abstract_id=4032777

期间,因为 Larva Labs 打官司,OpenSea 一度下了 V1 Punks,不过后来又恢复了: https://opensea.io/collection/official-v1-punks… 至此,V1 Punks 的文化诞生。Larva Labs 正统的 CryptoPunks 等卖给了 BAYC 的公司 Yuga Labs(这个成为了 CryptoPunks 当前的“官方”)。

这段历史挺有意思,对于安全研究来说也很有意义,一个漏洞导致的分叉文化。

免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
上一篇:AC Capital:Sui生态全景一览 下一篇:Meme币实用指南:避免踩坑和发现机会的最佳工具

您可能感兴趣