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

原文作者:余弦,慢雾创始人

原文来源:Twitter

注:原文来自慢雾创始人余弦发布长推,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) ——漏洞导致的分叉文化

慢雾创始人余弦: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 当前的“官方”)。

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

转载声明:本文 由CoinON抓取收录,观点仅代表作者本人,不代表CoinON资讯立场,CoinON不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。若以此作为投资依据,请自行承担全部责任。

声明:图文来源于网络,如有侵权请联系删除

风险提示:投资有风险,入市需谨慎。本资讯不作为投资理财建议。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 2023年4月23日 下午6:29
下一篇 2023年4月23日 下午6:29

相关推荐

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

星期日 2023-04-23 18:29:47

注:原文来自慢雾创始人余弦发布长推,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) ——漏洞导致的分叉文化

慢雾创始人余弦: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 当前的“官方”)。

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