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

行业热点3年前 (2023)发布 EditorY
10,522 0

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

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

https://m.marit.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 认可。

为什么会出现这种情况,尤其是 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 onSellTo; // specify to sell on 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 当前的“官方”)。

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

本站声明:网站内容来源于网络,如有侵权,请联系我们,我们将及时处理。

© 版权声明

相关文章