扒一扒Cryptopunks,讲一讲小白如何尝试理解NFT、CryptoPunks
vgy.me
vgy.me

Why

2021年NFT太火了,在google Trends,NFT关键词的搜索量远大于Blockchain,一时间觉得大家都在谈论NFT,突然间好多人的Twitter、discord等好多社交头像都变成了NFT图片。我的感受就像是这个视频NFTs - SNL(ps.这视频超搞笑)里讲的,谁能告诉我这究竟是个什么鬼?为啥大家都在买?

朋友说,不如你去扒一扒CryptoPunks,人家算是第一个NFT项目,现在一个图片也能卖几千万,扒完你大概就对NFT有点概念了。

这是个好主意!从一个具体的项目入手,先提出自己的疑问,再尝试回答,怕是一个非常有趣又有效的学习方式了!DYOR(Do Your Own Research)。

以下是总结的一些笔记,如果你也和我一样对这些问题感到好奇,可以看着玩玩。

调研前的一些问题

  1. 这个 Cryptopunks 到底是什么?它属于NFT吗?属于传说中的 ERC-721 Token 吗?
  2. 我怎么证明这个 NFT 属于我?这10000 个小图片存在什么地方?是存在链上吗?怎么存的?
  3. Cryptopunks 是谁发布的?什么时候发布的?刚发的时候卖多少钱?怎么发的?
  4. Cryptopunks 换过合约?他们为什么要换?都改了什么?
  5. CryptoPunks最近老是被诟病的版权问题是什么?
  6. 为啥大家要花那么多钱买这么个小图片?大家对此都有什么观点?

尝试一个个回答一下

这个 Cryptopunks 到底是什么?它属于 NFT 吗?属于传说中的 ERC-721 Token 吗?

什么是CryptoPunks?

CryptoPunks是John WatkinsonMatt Hall在2017年6月花了8美元交易费创建的一个NFT合约,而现在已经形成了一个交易量超过18亿美元的市场。

CryptoPunks是24x24像素的艺术图像,共计10,000个,这些图像由算法生成。大多数都是朋克风格的男孩和女孩,但也有一些罕见的类型:猿、僵尸,甚至是奇怪的外星人。每个朋克都有自己的个人资料页面,显示他们的属性以及所有权/待售状态(这里是一个例子)。

CryptoPunks合约发布时,开发团队认领了1,000个,剩下9,000个,任何拥有以太坊钱包的⼈都可以免费认领⼀个,当它们被全部认领完后,⼀个强⼤的⼆级市场就出现了。

CryptoPunks属于传说中的 ERC-721 token 吗?

不是,CryptoPunks是2017年6月推出的,而ERC-721 Token标准是2018年1月建立的,也就是CryptoPunks项目要早于ERC-721 Token 标准,CryptoPunks也许是启发ERC-721 token标准建立的原因之一.

现在有个WrapCryptoPunks项目,创建了一个ERC-721版本的CryptoPunks,所有者和CryptoPunks是一对一映射的。

什么是 NFT?非同质化是什么意思?(知道的可以跳过不看)

NFT(Non-fungible-token,非同质化代币)这个名词太火热了,但是到底什么是非同质化代币呢?

字典里面 fungible 的定义是这样的:

being of such a nature that one part or quantity may be replaced by another equal part or quantity in the satisfaction of an obligation

我大概理解下就是,fungible 的东西具有这样的性状:它的一部分或者数量都是可以被其他的部分或者数量代替的。五个字说就是:它可替代的。

打个烂大街的比方:我的五块钱纸币是可以用我的5个1块硬笔代替的,虽然他们长的不一样,但在买东西的时候,是可以替代的。

再比如我账户里有10个ETH,转账的时候,我转的是10个里面的哪一个都无所谓,因为他们是同质的,是互相可替代的。

所以像比特币、以太坊、狗狗币等等这些都是同质化代币。

知道了同质化代币,那么什么是非同质化代币呢?非同质化代币就是两个代币之间是不能替换的,比如cryptopunk#3100Cryptopunk#3101 是不一样的东西,他们代表不同的图片,当前的价值也不一样,是不能互相替代的,这种就是非同质化代币NFT。

NFT的非同质化,在合约上是怎么体现的?以CryptoPunks合约举例

什么是NFT知道了,但是NFT在合约上是怎么实现非同质化的呢?我们就以Cryptopunks的合约来举例好了。

这个合约不长,特别适合读一读!其中getPunk()是最一开始领取punk的方法,buyPunk()是购买punk的方法,这俩方法里都有关键的一句:punkIndexToAddress[punkIndex] = msg.sender, 实际上punkIndexToAddress这个参数就是用来标记所有权的,punkIndex就是punk的序号,比如punk#3100的punkIndex就是3100,msg.sender是调用合约的人,比如最初免费领取期,领取人调用getPunk()时,msg.sender就是领取人,开始交易之后,买家调用buyPunk()时,msg.sender就是购买人,所以punkIndexToAddress[punkIndex] = msg.sender就是把对应的punkIndex的所有权赋予msg.sender

比如我们拿之前以4200ETH成交的punk#3100来举例,来看看punk#3100当前的所有者是谁:

  1. 打开CryptoPunks的合约

  2. 点击Read Contract按钮(放心,读链上数据不用gas,随便点)

  3. 再点开7. punkIndexToAddress ,输入3100 ,点击Query ,得到返回地址:

    0x7b8961F67382C51C389726667ef7dD7CF95FEfd3。也就是说目前#31000x7b8961...所有。

  4. 我们去Larva Labs的官网上看一下,可以看到上面的owner也是0x7b8961...

  5. 再看看这位小伙伴的opensea地址(Opensea是目前最大NFT交易平台),发现也挂了这个NFT.

实际上这已经从合约层面回答了,我怎么证明我拥有这个NFT了。就是从链上查punkIndexToAddress[punkIndex],就能查到对应punkIndex对应的地址假设为A,查到的这个地址A就是这个punk的所有者。

可能小伙伴发现CryptoPunks的合约里面还有balanceOf[address],这个代表的是对应的地址address里面有几个punk,和同质化代币不同的是,每一个punkIndex都唯一代表了一个punk。

CryptoPunks合约中的punkIndex和punk的24*24像素的图片是怎么对应起来的?图片存在哪里?

一开始CryptoPunks是链下保存的,链上保存的是10000个punk大合照图片的哈希

上面我们已经知道了,通过CryptoPunks合约,可以查到指定punkIndex对应的所有者,但是这个punkIndex只是0-9999之间的一个整数而已,和具体的图片有半毛钱关系?

再回到合约里面,看到CryptoPunks合初始化了图片的哈希值:

string public imageHash = "ac39af4793119ee46bbff351d8cb6b5f23da60222126add4268e261199a2921b";

我们可以验证一下,把大合照下载下来,进行sha256哈希。我试了下,确实得到了上面的哈希值。

然后我们来确认下序号和图片的对应关系,比如再找下punk#3100,果然在32行,第1列找到了它!

现在CryptoPunks图片也上链啦,来看看怎么上的。

图片在链下保存,总归有点怪怪的,而且要确认具体punkIndex对应哪个图片,难道要去大合照里面扒么?而且大合照也无法查看CryptoPunks属性(发型,眼镜,胡须,帽子等)。所以2021年8月,CryptoPunks用一种比较巧妙的方式把图片也上链!他们的解决方案是创建一个新的合约CryptoPunk:Data ,存储图片信息,包含图片的像素信息,SVG信息,图片特征。10,000张图片信息全部存完之后,调用sealContract()方法把合约封起来,不允许增删改图片信息。on-chain-cryptopunks这是官网对于图片上链的说明。算了下这次图片信息上链花的交易费约4.05ETH,约合13,418USD

将图片的SVG(Scalable Vector Graphics,可缩放矢量图)上链也很有意思。SVG允许文本作为图像对象类型,也就是说我们可以通过文本内容,恢复出图像,而且SVG图片具有可扩展性,像素图片放到足够大之后都会,就会变模糊,而SVG图片不管放多大, 还是很清晰。SVG图片也很容易嵌入到代码中,特别容易进行编辑修改。

我们去链上捞punk#3100的svg信息验证一下:

  1. 在图片上链的合同CryptoPunk:Data 中点击 Read Contract
  2. 在2.punkImage中输入3100,得到一串svg信息<svg xmlns=...>
  3. 我们把这串svg信息本地保存为.svg文件,点击打开,发现就是#3100图片没错!

on-chain-cryptopunks也提供了一个demo,可以输入punkIndex直接来查看对应的punk图片。

图片上链还可以用什么方式?

采用svg和像素bit上链的方式特别好,图片相当于直接在链上,但是我们可以看到CryptoPunks是1000个2424像素的小图片,上链的Gas费就花了约4ETH,要是复杂点的图片,那这存储费用就更高了,所以一般也会采用将图片存储到去中心化文件存储服务上,然后在合约中存储文件地址相关内容的。TokenURI的,比如这个BAYC的合约,在20.tokenURI中查询#12的tokenURI得到ipfs地址:ipfs://QmeSjSinHpPnmXmspMjwiXyN6zS4E9zccariGR3jxcaWtq/12

CryptoPunks的小故事

CryptoPunks合同的变更

2017.06.09日第一个合约部署,第一个合约有漏洞?买 Cryptopunk 的时候,买家不仅能收到punk,还能把钱退回来?

2017.06.09 @larvalabs发了twitter通知了领取CryptoPunks项目。

2017.06.19,@larvalabs在Twitter上提到之前2017年6月9日部署的CryptoPunks合约有漏洞,买家不仅买到了punk,结果钱也仍然退回来了。随后又发twitter通知,他们会部署一个新的合约,并把原始Owner的数据迁移过去。

2017.09.22日修改后的合约部署,第二个合约是怎么修复漏洞的?除了修复漏洞还改了啥?(对漏洞是什么感兴趣的可以看下,不感兴趣的可以跳过)

具体可以查看两个合约不同之处的比较

可以参考这个解析

第二个合约升级之后,是怎么把第一个合同里面的数据迁移过来的?

看了一下交易,新合约通过setInitialOwner()setInitialOwners()把之前的owner数据迁移过来了,比如这笔交易,用setInitialOwners()把第50-99的punk打到创建合约的这个地址0xc352b534e8b987e036a93539fd6897f53488e56a上了

2018年,CryptoPunks的线下展览

2018年的时候,有一个CryptoPunks物理展览,他们考虑在物理世界中展览CryptoPunks,即要展现这些角色的形象,又要体现出它独特的部分,即数字所有权和拍卖的区块链机制。最终他们选择了「纸钱包」的解决方案,也就是将CryptoPunk的数字所有权打印出来,也就是将一个长密码封在一个物理信封内,然后用定制的蜡密封背面来保护里面的内容。也是一次非常有意思的尝试。
参考A Physical Model for Digital Art Ownership — The CryptoPunks in their First Gallery Show

2021年8月,CryptoPunks图片内容上链

2021年8月,Larva Labs想了个办法把CryptoPunks的图片信息存储到链上,参考On-chain Cryptopunks

2021年11月,Larva Labs开源交易CryptoPunks市场的接口代码

由于2021年,NFT的受欢迎程度和价值出现爆炸式增长,Larva Labs觉得托管一个交易量超过18亿美元的市场的需求已经超过了他们两人创意团队的规模。为了希望这个项目继续保持去中心化,并且能够脱离任何人长久的走下去,他们在2021年12月开源了Cryptopunks Market,一个交易CryptoPunks的市场的接口。参考Open-Sourcing a New Interface for the Cryptopunks Market

还有山寨的 CryptoPunks? CryptoPhunks是什么鬼?CryptoPunks有什么版权问题?

大家看看这俩图片有啥区别?
CryptoPhunk#1999CryptoPunk#1999,打开这两个链接,你能告诉我这俩的区别啥么???

有些punker认为他们拥有具体某个punk的版权,认为CryptoPhunks侵犯了他们的权益,所以Opensea这类交易平台不应该允许他们上线。

Opensea的产品主管@nate.eth在讨论关于将BAYC的衍生品下架时发表的观点是opensea不会充当仲裁者,也许有些NFT持有者会希望通过衍生品来提高曝光度,而如果有觉得不乐意看到Opensea上有自己的山寨或衍生NFT的,可以向Opensea发起DMCA请求,Opensea会将其下架。在@nate.eth的这条Twitter中也表明了Opensea不会验证致敬或衍生品。

punk#5528的所有者@SpottieWiFi证实了当他向opensea提交了CryptoPhunks的DCMA 删除请求,Phunk #5528就被下架了。

不过,虽然opensea的态度是不会验证哪些致敬或者衍生品,但是这些致敬/衍生品依然存在链上,实际上还是可以交易的,只是不能在Opensea平台上交易而已。拥有一个NFT,到底包含哪些权利,感觉也是一个很有意思的话题。CryptoPunks and Copyrights: What’s All The Fuss About?这篇文章的作者自己也买了CryptoPhunks,也搞了CryptoPunks的衍生品,然后写了一篇扒CryptoPunks版权的文章。大概有喷其版权定义不清晰之嫌。

感兴趣的时候可以再了解一下,比如Larva Labs的创始人之一@pents90层在discod里面说明CryptoPunks采用的是NFT许可证到底包含什么权益。比如2021年年底火热的话题,BAYC 将版权送给藏家,藏家可以使用猿猴的形象制作周边、衍生品;而 CryptoPunks 的制作团队 Larva Labs 却没有把版权送给藏家,具体权益的区别是如何体现的?

为啥大家要花那么多钱买这么个小图片?

CryptoPunks官网上的销售信息如下:

The average sale price of a punk over the last year is 55.22 ETH ($183,144.50 USD).
The total value of punks sold over the last year is 645,676.33 ETH ($2,141,366,175.19 USD)

平均18万刀一个,也就是100多万人民币,二三线城市,应该能买个小点的房子吧。#3100卖了758万刀,我记得当时上海有个朋友家里拆迁,赔了七百多万,我感觉这也太赚了,然后人这小图片是758万刀,约4800万人民币。关键一共有10000个punk。。。

但是在CryptoPunks四周年的博客上也提到了,在前三年,Cryptopunks的销量为86.6万美元。在第4年,他们赚了3.617亿美元。第四年是前3年的417倍多。所以价格这个夸张,应该还是跟NFT价格的起飞有关吧,CryptoPunks作为NFT的元老级项目借了势。

所以NFT为什么这么贵呢?是因为这个太好玩了吗?是因为这个平台激励了创作者创作更好的产品吗?是因为NFT让艺术家和用户有了更直接接触交易的可能吗?是因为这是一个圈子、一个社区、甚至元宇宙的入场券吗?是因为这是一个找到同类的方式吗?是投资或者投机吗?是为了抢占数字世界的地盘吗?甚至是洗钱吗?是一种炫耀的方式吗?

我不知道,但是我觉着币圈的玩家怎么着也得人手一个吧,入手的也不能太便宜了吧,总得好看又有些知名度吧。所以至少能有这一波人的需求。

这我可回答不了。。。不过这让我联想到了之前了解了下自行车的发展史,发现现在一辆普普通通的自行车,其实是经过了两百年的发展,经由各行各业的人的改造(橡胶轮胎甚至是一个兽医发明的),中途由于一股「越大越好」的风潮,车身高度一度还曾到达过诡异的2米多高。在那之后我就想,我以后可再也不会小看那些一开始看起来不太实用,或者感觉很离谱的东西,也许某一天它就会变成一个很自然、很重要的东西呢。期待能够看到后续的各种变化。

Ref. & 一些有趣的小链接

Subscribe to triceratops
Receive the latest updates directly to your inbox.
Verification
This entry has been permanently stored onchain and signed by its creator.