像nerd一样把玩NFT

Posted vigor2323

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了像nerd一样把玩NFT相关的知识,希望对你有一定的参考价值。

Jargon File中对nerd词条有两条解释:在主流俚语中,nerd是贬义词,指的是那些高智商却没有什么社交天赋的人;而在行话里nerd则是一种赞扬,指那些懂得什么才是真正重要、有趣的东西,厌烦被一些琐碎事情打扰的人1

本文仅供nerd、hacker阅读。(小白可以退下了)

由于是给技术人员看的,所以就不解释那么详细了。(毕竟都不是小白了)

Q:我是一名技术人员,请问我能否用编程的方式mint一个NFT?

A:可以的,你可以在Ethereum试试,推荐用Solidity语言。

可以用Remix和小狐狸结合的方式,按照ERC721标准,编译和部署一个铸造NFT的合约。(不过比较挑浏览器,我用firefox试过是可以的。)

也可以用web3.py和infura结合的方式来做,网上有一些教程2,可以试试看。

还可以用Ethereum Studio这种IDE来做,我感觉这个用起来最顺手,推荐。

测试的时候,可以在以太坊的测试网Rinkeby上做,这样可以反复测试,不用担心gas费的问题。

我测试用的NFT合约代码是一个比较简单的,参考这篇文章:如何创建和部署ERC-721(NFT)?

主要内容如下(头部import的合约文件略去):

contract newNFT is NFTokenMetadata, Ownable{
 
 constructor() {
   nftName = "my NFT";
   nftSymbol = "ICE";
  }
 
 function mint(address _to, uint256 _tokenId, string calldata _uri)external onlyOwner {
   super._mint(_to, _tokenId);
   super._setTokenUri(_tokenId, _uri);
  }
 
}

这个合约,在部署时会运行构造函数,确定这个NFT的名字和代号。mint函数通过参数确定一个NFT的地址、编号和链接,onlyOwner表明只能是合约拥有者调用,而_mint和_setTokenUri都是在基合约中定义的。

当铸造NFT时,调用mint接口,在_to参数中填入地址,_tokenId填入NFT的ID号(可以自己随意定义),_uri填入链接,这个链接指向一个描述该NFT的metadata信息的json格式文件,其中含有image项,image链接到真正的作品。

Q:我如何把自己编程铸造的NFT,导入到opensea里面去?

A:opensea提供了接口,方便导入已经铸造在以太坊上的NFT。

通过这个链接:

https://opensea.io/get-listed/step-two

注意:如果是在测试网Rinkeby做的NFT,把上述链接中的域名改为testnets.opensea.io

打开链接,填入合约地址,即可查看自己地址上拥有的NFT。

opensea是通过tokenURI这个接口来查询获取NFT的metadata并最终显示艺术品的。

Q:我导入进去,怎么不能显示我的图片?

A:仔细检查你的tokenURI,确保你的metadata是按照格式写的,不要马虎,不要动不动多弄出一个逗号出来。

考验你细心谨慎的时候到了!

可以直接刷新这个链接要求OpenSea读取你的NFT:

https://testnets.opensea.io/assets/0xacc94cc…………d73b0/17

不过作为一个nerd,你可别忘了中间那串数字,是一个合约地址,记着换成你的合约地址!

如果你改了metadata,可以点击这个图标刷新:

Q:我能在交易平台上买一个加密朋克吗?

A:不能。还是去其官网买比较好。

交易平台通常买卖的是符合ERC721和ERC1155标准的NFT,加密朋克出来的时间比较早(2017年中期),那时还没有ERC721协议。所以交易平台不支持加密朋克。

如果你在opensea上看到有punk,要么是不能交易的(没有buy按钮),要么是包装过的,要么是假的。

Q:我想研究加密朋克的一些技术细节,怎么做。

A:可以去Etherscan,查看加密朋克的合约源码,并通过函数调用看看具体数据。

加密朋克的合约地址:

0xb47e3cd837ddf8e4c57f05d70ab865de6e193bbb

想了解其底层细节的,可以学习学习solidity语言。

Q:我看opensea上有wrapped punk,那是怎么回事?

A:opensea上有一种“包装”(wrapped)的加密朋克,Rarible站也有“包装”后的朋克。可以买这些wrappedpunk,然后解包装得到真正的punk。

加密朋克本身不支持ERC721,所以有网站提供包装功能,以便用户可以在交易平台买卖punk。其实就是把用户的punk抵押在网站那里,它发行一个新的NFT(支持RFC721),叫做wrappedpunks,这就可以拿到opensea上交易了。他还提供解包装,用户提交包装后的punk,他返还用户之前抵押的punk。

加密朋克官网统计,有三百多个punk被包装了。官方不建议买这种包装后的,因为有可能买到假的。

Q:那wrap的原理是啥?wrap以后和wrap之前是什么关系?

A:赞!这是nerd才会问的问题。

提供包装的这个网站,叫“Wrapped PUNKS:Turn your CryptoPunks into ERC721”,网站地址是:

https://wrappedpunks.com/

用钱包连接上去以后,这个网站就能知道你有没有punk

很遗憾,我并没有任何punk,不然我可以展示一下是怎么wrap的。

在Etherscan上可以看到wrappedpunks的合约代码。

该合约地址:0xb7f7f6c52f2e2fdb1963eab30438024864c313f6

看完代码,我推断wrap是这样做的:

(以下:Wrappedpunks合约简称wrap合约,Cryptopunks合约简称crypto合约,此外,还有一个UserProxy合约,简称proxy合约)

punk拥有者通过wrap合约建立一个proxy合约(也即所谓的注册proxy),然后用户把punk转给这个proxy合约的合约地址,在mint wrappedpunk的时候,proxy合约把punk转给warp合约地址,然后给原拥有者一个wrapped punk。

解包装时,先burn(销毁)这个wrappedpunk,然后wrap合约调用crypto合约的transfer,把punk返回给原拥有者。

可见,是有两套punk,一套是真实punk,一套是wrappedpunk,包装时,把punk转给了wrap合约地址,用户拿到一个wrappedpunk,用户解包装时,把wrappedpunk销毁,把punk还给用户。

比如第60号punk,在2021年2月4号,先是转给了proxy合约地址,然后proxy合约又转给了wrap合约。

如果你是小白误入,以上看不懂没关系,这些是给nerd看的。

Q:有没有什么通用的方法,看自己以太坊地址下有多少NFT?

A:每个NFT合约都是有个地址的,通过etherscan,可以查看该合约地址下的细节。

加密朋克的合约地址:

0xb47e3cd837ddf8e4c57f05d70ab865de6e193bbb

无聊猿的合约地址:

0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d

比如在cryptopunks合约地址下,调用balanceOf函数,来看自己有没有punk。

我输入自己的地址,点击Query,输出结果为0,表明我并没有punk。

上面展示的是手动方法,对于一些交易平台或者相关网站(比如wrappedpunks),会自动去查。当你用自己的matemask钱包连接上去后,网站知道你的地址,就会自动调用balanceof接口去查看你是否有一个punk。

加密朋克合约还提供了一个punkIndexToAddress这个接口,可以查看第几号punk在谁手里,比如你填入4,可以查出来拥有者的地址是:

0xC352B534e8b987e036A93539Fd6897F53488e56a。

Q:我有一个钱包,钱包里能显示我的NFT吗?

A:有些钱包支持NFT展示,事实上也是去查你拥有几个NFT,是第几号NFT,然后将其展示出来。

如果没有的话,显示的就是0。

我曾经很想买一个实验一下,但是我没有Ether,所以买不了。

Q:如果我把NFT从我的钱包转给别人,会是什么效果?

A:从本质上讲,在这个NFT合约下,该NFT的拥有者地址从你的变成他的。

从钱包上看,你的钱包里没有这个NFT了,而他的钱包里,多了一个NFT。

这是不是很像实物的转移!

这就是NFT让人着迷的地方。

Q:老师,我特别想看看CryptoPunks的代码,可是我不懂Solidity语言,您能帮我解读一下它的代码吗?

A:没问题,安排!

文|卫剑钒

推荐阅读:

用人话说说最近大火的NFT

用直观抓住NFT是什么

NFT这么香,到底解决了什么问题

支付宝、腾讯都发了NFT?监管是怎么看的?


  1. geek or nerd?(https://m.sohu.com/a/255319673_99992021) 

  2. 用 Python 中的 web3.py 库开发 Dapp(https://blog.csdn.net/BF02jgtRS00XKtCx/article/details/118077490) 

以上是关于像nerd一样把玩NFT的主要内容,如果未能解决你的问题,请参考以下文章

提高代码质量之代码审查

如何像浏览器一样在 Java 中组合 URL 片段?

执行代码时有时不显示对话框片段

梳理市面上的2大NFT定价范式和4种解决方案

web3.0 nft 是什么? nft的意义是什么?

NFT「分子」Loot助推元宇宙链上进化