请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册
发布
  • QQ空间
  • 回复
  • 收藏

为什么说建立在ERC721智能合约上的才叫NFT?

2022-1-12 21:01


为什么说建立在ERC721智能合约上的才叫NFT?


A:为什么NFT要写智能合约?

Q:可以证明某个东西是属于某个人的,而且大家都看得到;

例如艺术品或数位资产,很难证明拥有者,大家手上都有一份,全世界的人电脑里都有BAYC-548,但版权方要怎么把这个BAYC-548卖给一个特定的人?就是发行一个代表BAYC-548的NFT,然后在拍卖掉。要是以后有人在没经过你同意散播BAYC-548,你就可以去法院展示你的NFT 证明这是你的。

所以说, 就算大家都有这个,但真正的拥有这个的人是我!

例如房产,既然他是非同质化的,这样以后就不需要房产证明或是地契之类的东西。只要发布一个NFT代表某栋房产。之后拍卖掉这个NFT,购得者就能证明自己是拥有这个房产的人,没人能抢走你的房子;


为什么说建立在ERC721智能合约上的才叫NFT?

所以,综上所述万物皆可NFT,这句话自然是没有任何问题的,但是没有发布智能合约的NFT作品是没有价值呈现,仅仅是一张图片罢了....

以下是我作为一个半吊子都不算的NFT艺术家兼程序员,带来的半吊子的写NFT智能合约的分享;希望对大家能有帮助;

OpenZeppelin Presets

我这次使用的是OpenZeppelin 的Presets;

这个网站提供一些已经实作完成的智能合约样本,像是官方ERC20 ,但我这次NFT 是基于官方ERC-721 ,各位请记住ERC-721最适合铸造NFT;

因为ERC20 Token 本身是同质化代币,每个Token 都是一模一样的。

这些文件要求我们必须参考这些标准去制作智能合约,但自己写总有漏洞啊?为了提高安全性已经所以我们可以使用已经制作好的智能合约样本开源代码;

(OpenZeppelin的安装方法和成熟的开源代码可以在微信公众号后台留言:ERC-721,我会逐个私发给你)

关于智能合约的开发这边不多做赘述,因为我们这次使用的不需要会Solidity,如果想学习可以参考OpenZeppelin 教学。


为什么说建立在ERC721智能合约上的才叫NFT?

OpenZeppelin Presets

我这次使用的是OpenZeppelin 的Presets;

这个系列就是OpenZeppelin 将不同的ERC 标准集大成已经都实作好,不用写任何Solidity 程式码就可以部署合约。

虽然是3.x 版本的文件,但应该只是文件尚未更新至4.x,因为我的npm 安装是4.1 版本也可以使用Presets。

因为我们是ERC721 ,所以这次要用到的是其中的


为什么说建立在ERC721智能合约上的才叫NFT?

ERC721是以太坊建议请求(Ethereum Request for Comment)的缩写,721是提案编号。 ERC是以太坊生态系统中的应用级标准,它们可以是代币的智能合约标准,如ERC-20,ERC的作者负责与以太坊社区建立共识,一旦提案被社区审核通过,就会成为标准。 你可以跟踪最近的ERC提案这里。 ERC-721的创建是为了提出在智能合约内跟踪和转移NFT的功能。

ERC-721是一个开放的标准,它描述了如何在EVM(以太坊虚拟机)兼容的区块链上构建非同质化代币;它是非同质化代币的标准接口;这是一套规则,使其易于与NFT 交互。 NFT不仅是ERC-721 代币,还可以是ERC-1155代币。但是ERC-721 代币是最适合铸造NFT的;

Remix IDE

这是一款以太坊官方提供的线上IDE,可以编译、执行、发布合约等等功能;

Remix IDE 连结:https://remix.ethereum.org/

但因为他是线上版本的IDE,因此档案只是暂存在线上,因此需要参考上篇教学让他与本地进行连结。

简单说明一下安装方法:

npm install -g @remix-project/remixd

确认是否安装成功

remixd -v

Link 资料夹

remixd-s<absolute-path-to-the-shared-folder>--remix-ide <your-remix-ide-URL-instance>

成功如下图提示


为什么说建立在ERC721智能合约上的才叫NFT?

然后开一个资料夹并新增一个合约


为什么说建立在ERC721智能合约上的才叫NFT?

Workspaces 记得要切到localhost,资料夹里面应该会有我们刚刚装的OpenZeppelin 的node_modules

附上我的package.json


为什么说建立在ERC721智能合约上的才叫NFT?

接着只要把合约里面的

NFT名称:U BAYC
代币代码:UB
MetaDataUR https://ipfs.io/ipfs/QmSGiYVgj24pkj58TWAMkvUgXj7MvLQXU7LmcBBagEzwrG/

其中MetaData URI 届时需要返回一个JSON

这边是使用IPFS (星际档案系统) 服务;
将档案放在这个上面才能确保不可窜改;
下载桌面版本之后建立一个资料夹即可;


为什么说建立在ERC721智能合约上的才叫NFT?

然后进入刚刚创建的资料夹后,创建一个项目档案名称0;


为什么说建立在ERC721智能合约上的才叫NFT?

内容如下档案


为什么说建立在ERC721智能合约上的才叫NFT?

当然我们Metadata JSON 里面的图片网址就是BAYC 0 这张图片,这样的意思就是我只打算铸造一个NFT !

之后就可以进入编译阶段了

对于百按下Compile 即可,如果左下没喷错误且有出现自己的合约名称和三个按钮表示成功了。

接下来就可以准备Deploy 了

这次因为我使用的环境是选择Injected Web3 因为要搭配MetaMask;
所以使用谷歌浏览器请先安装并且注册MetaMask。


为什么说建立在ERC721智能合约上的才叫NFT?

需要确认MetaMask 是在Rinkeby Test Network (右上)之后,就可以在MetaMask 上按确认,下方就会出现在rinkeby etherscan 上的Transaction 网址,可以确认进度;


为什么说建立在ERC721智能合约上的才叫NFT?

可以看到我们是在建立合约,且是在测试链上,已经成功了。接下来我们就可以铸造NFT,回到Remix 点开Deployed Contracts 如下图找到mint


为什么说建立在ERC721智能合约上的才叫NFT?

我们只要填入我们的ETH 地址,我们就可以成为这个新铸造的NFT 的永有者。输入地址后点击mint 按钮会出现如下


为什么说建立在ERC721智能合约上的才叫NFT?

一样确认没错后,按下确认按钮,之后回到Remix IDE


为什么说建立在ERC721智能合约上的才叫NFT?

一样出现在rinkeby etherscan 上的Transaction 网址


为什么说建立在ERC721智能合约上的才叫NFT?

这样就表示成功了,已经将这个Token 发送到填入的地址。

既然有了NFT 那要在哪里才能看得到呢?

OpenSea;进去之后用自己的地址注册一个帐号就可以看到自己刚刚铸造的NFT 了,注册帐号会自动跳出MetaMask,这边就过不多说了。

在OpenSea 的Metadata 标准规格中除了有更多选项之外也有说明Metadata 对应的栏位。


为什么说建立在ERC721智能合约上的才叫NFT?

简单说明一下
OpenSea 会呼叫的网址是你的Token URI + Token ID,Token ID 是流水号从0 开始,可以从我们当初铸造的时候的交易流水看到;


为什么说建立在ERC721智能合约上的才叫NFT?

再说一次我个人得出的结论:

假设达文文画了100 幅蒙娜丽莎的微笑,即使他的Metadata 一样(name=蒙娜丽莎的微笑),但他们每一幅画都不一样!都是独一无二的!也许在画的时候微笑的角度不小心多了一点点点,但这幅画还是蒙娜丽莎的微笑。这就是ERC721

但两个一块钱硬币,就是一样的东西,他是同质的,就是ERC20....

但是目前现状… NFT到底还是不是假议题…

相关新闻