如何用用Python制作NFT区块链作品

目录
  • 什么是 NFT?
  • ERC20 与 ERC721
  • NFT 有什么用?
  • NFT 的价值
  • 如何制作 NFT
  • 如何进行无限定制的 NFT
  • 快速上手
  • ERC721 代币标准
  • 什么是 NFT 元数据和 TokenURI?
  • TokenURI
  • 链下元数据与链上元数据

什么是 NFT?

NFT英文全称为Non-Fungible Token,翻译成中文就是:非同质化代币,具有不可分割、不可替代、独一无二等特点。NFT由于其非同质化、不可拆分的特性,使得它可以和现实世界中的一些商品绑定。换言之,其实就是发行在区块链上的数字资产,这个资产可以是游戏道具、数字艺术品、门票等,并且具有唯一性和不可复制性。由于NFT具备天然的收藏属性和便于交易,加密艺术家们可以利用NFT创造出独一无二的数字艺术品。

ERC20 与 ERC721

NFT 是类似于 ERC20 的区块链token标准,如 AAVE、SNX 和 LINK(技术上为 ERC677)。ERC20 是“可替代”的代币,意思是“可替换”或“可互换”。

例如,无论您使用什么美元纸币,您的美元纸币都将值 1 美元。美元钞票上的序列号可能不同,但钞票是可以互换的,无论如何它们都值 1 美元。

另一方面,NFT 是“不可替代的”,它们遵循自己的代币标准 ERC721。例如,蒙娜丽莎是“不可替代的”。即使有人可以复制它,但永远只有一个蒙娜丽莎。如果蒙娜丽莎是在区块链上创建的,它将是 NFT。

NFT 有什么用?

NFT 通过将合约永久地部署在链上,让创作者、艺术家、游戏设计师等创造价值。

你将永远知道谁创造了 NFT,谁拥有 NFT,它来自哪里等等,这种独特性让他们比传统艺术更有价值。在传统艺术中,理解什么是“假货”可能很棘手,而链上的历史很容易追溯。

由于智能合约和 NFT 是 100% 可编程的,NFT 还可以添加内置的版税和任何其他功能。补偿艺术家一直是一个问题,因为通常艺术家的作品在没有任何归属的情况下四处传播。

越来越多的艺术家和工程师开始利用这一巨大的附加值,因为这最终成为艺术家获得工作报酬的好方法。不仅如此,NFT 还是一种展示您的创造力并成为数字世界收藏家的有趣方式。

NFT 的价值

NFT 已经走过了漫长的道路,我们不断看到 NFT 的销售额创下纪录,例如下面这幅名为“每天:前 5,000 天”的画作售价为 6930 万美元。

NFT也是在数字世界中创造艺术和了解智能合约创建的一种有趣、动态和引人入胜的方式。所以现在将教你制作 NFT 所需的一切知识。

如何制作 NFT

现在,制作 NFT 的最简单方法就是前往 Opensea、Rarible 或 Mintible 等平台,并按照他们的分步指南在他们的平台上进行部署即可。

你可以 100% 走这条路,但是你可能会被平台绑定。你无法实现无限的定制,或者真正利用 NFT 的任何优势。

如果你想用代码来实现,学习一些扎实的知识,并有能力以无限的创造力创造出一些东西,那么请继续阅读!

如何进行无限定制的 NFT

首先介绍NFT Brownie Mix。这是一个包含大量样板代码的工作仓库。

https://github.com/PatrickAlphaC/nft-mix

先决条件

我们需要安装一些东西才能开始:

  • Python
  • Nodejs 和 npm
  • Metamask

如果您不熟悉 Metamask,您可以按照下面教程进行设置。

https://docs.chain.link/docs/install-metamask/

Rinkeby Testnet ETH 和 LINK

我们还将部署在 Rinkeby 以太坊测试链上!

测试链是测试我们的智能合约在现实世界中表现的好方法。我们需要 Rinkeby ETH 和 Rinkeby LINK,我们可以从 Chainlink 文档中最新水龙头的链接中免费获得它们。

我们还需要将 rinkeby LINK 的token添加到metamask中,我们可以按照 LINK 文档进行操作。

https://docs.chain.link/docs/acquire-link/

注意一定要使用 Rinkeby 而不是 Ropsten。在使用像以太坊这样的智能合约平台时,我们需要支付一点 ETH,而从链下获取数据时,我们需要支付一点 LINK。这就是我们需要获取测试链上的LINK 和 ETH 的原因。

下面这件作品就是我们要部署到 OpenSea 的 NFT。

https://testnets.opensea.io/assets/0x8acb7ca932892eb83e4411b59309d44dddbc4cdf/0

快速上手

git clone https:
//github.com/PatrickAlphaC/nft-mix

cd nft-mix

现在我们需要安装 ganache-cli 和 eth-brownie。

pip install eth-brownie

npm install -g ganache-cli

现在我们可以设置我们的环境变量。如果您不熟悉环境变量,只需将它们添加到 .env 文件中,然后运行:

source .env

.env的示例应该在你刚刚克隆的 repo 中,并注释掉了环境变量。请确保取消注释以使用它们!

您需要一个 WEB3_INFURA_PROJECT_ID和一个 PRIVATE_KEY 。WEB3_INFURA_PROJECT_ID 可以在注册免费 Infura 帐户时找到。这将为我们提供一种将交易发送到区块链的方法。

我们还需要一个私钥,您可以从您的 Metamask 中获取。点击 3 个小点,然后单击帐户详细信息和导出私钥。如果您投入现金进去,请不要与任何人分享此密钥!

export
 PRIVATE_KEY=YOUR_KEY_HERE

export
 WEB3_INFURA_PROJECT_ID=YOUR_PROJECT_ID_HERE

现在我们可以部署我们的 NFT 合约并使用以下两个命令创建我们的第一个收藏品。

brownie run scripts/simple_collectible/deploy_simple.py --network rinkeby

brownie run scripts/simple_collectible/create_collectible.py --network rinkeby

第一个脚本将我们的 NFT 合约部署到 Rinkeby 区块链,第二个脚本创建了我们的第一个收藏品。

您刚刚部署了第一个智能合约!

它根本没有什么作用,但别担心——我将在本教程的高级部分向您展示如何在 OpenSea 上渲染它。首先,让我们看看 ERC721 代币标准。

ERC721 代币标准

我们来看看我们刚刚部署的合约,在 SimpleCollectible.sol 文件中。

我们将 OpenZeplin 包用于 ERC721 token。导入的这个包允许我们使用典型 ERC721 token的所有功能。这定义了我们的代币将具有的所有功能,例如 transfer——将代币转移给新用户, safeMint——创建新代币,等等。

您可以通过查看 OpenZepplin ERC721 代币合约找到赋予我们合约的所有功能。我们的合约在下面一行继承了这些功能:

https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/ERC721.sol

contract SimpleCollectible is ERC721 {

这就是 Solidity 继承的方式。当我们部署一个合约时,构造函数会被自动调用,它需要一些参数。

我们还使用了 ERC721 的构造函数,在我们的构造函数中,我们只需要给它一个名称和一个符号。在我们的例子中,它是“Dogie”和“DOG”。这意味着我们创建的每个 NFT 都将是 Dogie/DOG 类型。

这就像每张口袋妖怪卡仍然是口袋妖怪,或者交易卡上的每个棒球运动员仍然是棒球运动员。每个棒球运动员都是独一无二的,但他们仍然都是棒球运动员。我们只是使用 DOG 类型。

我们在顶部有 tokenCounter 来计算我们创建了多少这种类型的 NFT。每个新token都会根据当前的 tokenCounter 获得一个 tokenId。

实际上可以使用 createCollectible 函数创建 NFT。这就是我们在 create_collectible.py 脚本中所写的。

_safeMint函数创建新的 NFT,并将其分配给调用 createdCollectible的人,也就是 msg.sender,并使用从 tokenCounter 派生的 newItemId。这就是我们如何通过检查 tokenId的所有者来跟踪谁拥有什么。

您会注意到我们还调用了 _setTokenURI。让我们来看一下。

什么是 NFT 元数据和 TokenURI?

当创建智能合约和创建 NFT 时,人们很快意识到将大量数据部署到区块链是非常昂贵的。小至 1 KB 的图像的存储成本很容易超过 100 万美元。

这显然是 NFT 的一个问题,因为拥有创意艺术意味着您必须将这些信息存储在某个地方。他们还想要一种轻量级的方式来存储有关 NFT 的属性——这就是 tokenURI 和元数据发挥作用的地方。

TokenURI

NFT 上的 tokenURI 是token“外观”的唯一标识符。URI 可以是通过 HTTPS 的 API 调用、IPFS 哈希值或任何其他独特的东西。

它们遵循显示元数据的标准,如下所示:

这些显示了 NFT 的外观及其属性。图像部分指向 NFT 外观的另一个 URI。这使得 Opensea、Rarible 和 Mintable 等 NFT 平台可以轻松地在其平台上呈现 NFT,因为它们都在寻找这种元数据。

链下元数据与链上元数据

现在你可能会想“等等......如果元数据不在链上,这是否意味着我的 NFT 可能会在某个时候消失”?你是对的。

您认为链下元数据意味着您不能使用该元数据让您的智能合约相互交互也是正确的。

这就是为什么我们要专注于链上元数据,以便我们可以对 NFT 进行编程以相互交互。

但是,我们仍然需要链下元数据的图像部分,因为我们没有一种很好的方法来在链上存储大图像。但是别担心,我们仍然可以通过使用 IPFS 在去中心化网络上免费做到这一点。

这是来自 IPFS 的 imageURI示例,它显示了在龙与地下城教程中创建的 ChainlinkElf。

https://blog.chain.link/build-deploy-and-sell-your-own-dynamic-nft/

我们没有为简单的 NFT 设置 tokenURI,因为我们只想展示一个基本示例。

下一篇将讲解 NFT 进阶知识,这样就可以看到我们用链上元数据实现的一些惊人功能,在 opeansea 上渲染 NFT,并让我们的狗狗振作起来!

以上就是如何用用Python制作NFT区块链作品的详细内容,更多关于Python制作NFT区块链作品的资料请关注我们其它相关文章!

(0)

相关推荐

  • python区块及区块链的开发详解

    接着上一篇交易记录整合交易类,这里描述区块的开发. 首先我们要明白一个区块,需要的内容,包括交易记录集合,时间戳,哈希,上一个区块的哈希.明白了这个,下面就容易代码开发了. import datetime import hashlib from Message import DaDaMessage, InvalidMessage from Transaction import Transaction class Block: #不定参数,*args,区块集合 def __init__(self,

  • 用不到50行的Python代码构建最小的区块链

    译者注:随着比特币的不断发展,它的底层技术区块链也逐步走进公众视野,引起大众注意.本文用不到50行的Python代码构建最小的数据区块链,简单介绍了区块链去中心化的结构与其实现原理. 尽管一些人认为区块链是一个等待问题的解决方案,但毫无疑问,这种新技术是计算机的奇迹.但是,区块链到底是什么呢? 区块链 它是比特币或其他加密货币进行交易的数字账本,账本按时间顺序记录并对外公开. 在更一般的术语中,它是一个公共数据库,新数据存储在一个名为块的容器中,并被添加到一个不可变链(后来的区块链)中添加了过去

  • Python实现类似比特币的加密货币区块链的创建与交易实例

    虽然有些人认为区块链是一个早晚会出现问题的解决方案,但是毫无疑问,这个创新技术是一个计算机技术上的奇迹.那么,究竟什么是区块链呢? 区块链 以比特币(Bitcoin)或其它加密货币按时间顺序公开地记录交易的数字账本. 更通俗的说,它是一个公开的数据库,新的数据存储在被称之为区块(block)的容器中,并被添加到一个不可变的链(chain)中(因此被称为区块链(blockchain)),之前添加的数据也在该链中.对于比特币或其它加密货币来说,这些数据就是一组组交易,不过,也可以是其它任何类型的数据

  • Python实现基于POS算法的区块链

    区块链中的共识算法 在比特币公链架构解析中,就曾提到过为了实现去中介化的设计,比特币设计了一套共识协议,并通过此协议来保证系统的稳定性和防攻击性. 并且我们知道,截止目前使用最广泛,也是最被大家接受的共识算法,是我们先前介绍过的POW(proof of work)工作量证明算法.目前市值排名前二的比特币和以太坊也是采用的此算法. 虽然POW共识算法取得了巨大的成功,但对它的质疑也从来未曾停止过. 其中最主要的一个原因就是电力消耗.据不完全统计,基于POW的挖矿机制所消耗的电量是非常巨大的,甚至比

  • python实现简单区块链结构

    区块链 比特币从诞生到现在已经10年了,最近接触到了区块链相关的技术,为了揭开其背后的神秘面纱,我就从头开始构建一个简单的区块链. 从技术上来看:区块是一种记录交易的数据结构,反映了一笔交易的资金流向.系统中已经达成的交易的区块连接在一起形成了一条主链,所有参与计算的节点都记录了主链或主链的一部分. 一.比特币内部结构 比特币内部结构有四部分: previous hash: 上一个区块的hash data:交易数据 time stamp:区块生成的时间戳 nonce:挖矿计算次数 二.实现的比特

  • python简单区块链模拟详解

    最近学习了一点python,那就试着做一做简单的编程练习. 首先是这个编程的指导图,如下: 对的,类似一个简单区块链的模拟. 代码如下: class DaDaBlockCoin: #index 索引,timestamp 时间戳,data 交易记录,self_hash交易hash,last_hash,上个hash def __init__(self,idex,timestamp,data,last_hash): self.idex = idex self.timestamp = timestamp

  • 使用Python从零开始撸一个区块链

    作者认为最快的学习区块链的方式是自己创建一个,本文就跟随作者用Python来创建一个区块链. 对数字货币的崛起感到新奇的我们,并且想知道其背后的技术--区块链是怎样实现的. 但是完全搞懂区块链并非易事,我喜欢在实践中学习,通过写代码来学习技术会掌握得更牢固.通过构建一个区块链可以加深对区块链的理解. 准备工作 本文要求读者对Python有基本的理解,能读写基本的Python,并且需要对HTTP请求有基本的了解. 我们知道区块链是由区块的记录构成的不可变.有序的链结构,记录可以是交易.文件或任何你

  • Python学习入门之区块链详解

    前言 本文将给大家简单介绍关于区块链(BlockChain)的相关知识,并用Python做一简单实现.下面话不多说,来一起看看详细的介绍: 什么是区块链 简单来说,区块链就是把加密数据(区块)按照时间顺序进行叠加(链)生成的永久.不可逆向修改的记录.具体来说,它区块链是由一串使用密码学方法产生的数据块组成的,每一个区块都包含了上一个区块的哈希值(hash),从创始区块(genesis block)开始连接到当前区块,形成块链.每一个区块都确保按照时间顺序在上一个区块之后产生,否则前一个区块的哈希

  • Python从零开始创建区块链

    作者认为最快的学习区块链的方式是自己创建一个,本文就跟随作者用Python来创建一个区块链. 对数字货币的崛起感到新奇的我们,并且想知道其背后的技术--区块链是怎样实现的. 但是完全搞懂区块链并非易事,我喜欢在实践中学习,通过写代码来学习技术会掌握得更牢固.通过构建一个区块链可以加深对区块链的理解. 准备工作 本文要求读者对Python有基本的理解,能读写基本的Python,并且需要对HTTP请求有基本的了解. 我们知道区块链是由区块的记录构成的不可变.有序的链结构,记录可以是交易.文件或任何你

  • 如何用用Python制作NFT区块链作品

    目录 什么是 NFT? ERC20 与 ERC721 NFT 有什么用? NFT 的价值 如何制作 NFT 如何进行无限定制的 NFT 快速上手 ERC721 代币标准 什么是 NFT 元数据和 TokenURI? TokenURI 链下元数据与链上元数据 什么是 NFT? NFT英文全称为Non-Fungible Token,翻译成中文就是:非同质化代币,具有不可分割.不可替代.独一无二等特点.NFT由于其非同质化.不可拆分的特性,使得它可以和现实世界中的一些商品绑定.换言之,其实就是发行在区

  • 详解python实现简单区块链结构

    区块链 比特币从诞生到现在已经10年了,最近接触到了区块链相关的技术,为了揭开其背后的神秘面纱,我就从头开始构建一个简单的区块链. 从技术上来看:区块是一种记录交易的数据结构,反映了一笔交易的资金流向.系统中已经达成的交易的区块连接在一起形成了一条主链,所有参与计算的节点都记录了主链或主链的一部分. 一.比特币内部结构 比特币内部结构有四部分: previous hash: 上一个区块的hash data:交易数据 time stamp:区块生成的时间戳 nonce:挖矿计算次数 二.实现的比特

  • web3.js调用链上的方法操作NFT区块链MetaMask详解

    目录 实例化链上方法 MetaMask 首先要初始化web3 实例化链 调用链上方法授权 调用游戏链上方法质押NFT 实例化链上方法 公司的项目全是区块链项目,最近这个项目是要构建一个链上的游戏社区,目前这个功能是用户可以质押NFT到游戏的链上,然后游戏那边就可以有人去参加竞赛,然后质押人可以赎回NFT. MetaMask web3.js MetaMask 浏览器插件用的是小狐狸MetaMask 网络用的是测试网络Rinkeby,记得切换网络,把设置 > 高级 > 显示测试网络 打开 let

  • Python区块链范围结论及Genesis Block的添加教程

    目录 Genesis Block添加 结论 Genesis Block添加 将块添加到区块链包括将创建的块附加到我们的 TPCoins 列表. TPCoins.append (block0) 请注意,与系统中的其余块不同,genesis块只包含一个由TPCoins系统的发起者启动的事务.现在,您将通过调用我们的全局函数转储区块链的内容 dump_blockchain : dump_blockchain(TPCoins) 执行此功能时,您将看到以下输出 : Number of blocks in 

  • 你应该知道的区块链运作7个核心技术

    区块链运作的7个核心技术,你知道几个? 1.区块链的链接 顾名思义,区块链即由一个个区块组成的链.每个区块分为区块头和区块体(含交易数据)两个部分.区块头包括用来实现区块链接的前一区块的哈希(PrevHash)值(又称散列值)和用于计算挖矿难度的随机数(nonce).前一区块的哈希值实际是上一个区块头部的哈希值,而计算随机数规则决定了哪个矿工可以获得记录区块的权力. 2.共识机制 区块链是伴随比特币诞生的,是比特币的基础技术架构.可以将区块链理解为一个基于互联网的去中心化记账系统.类似比特币这样

  • 14张图看懂什么是区块链技术

    区块链技术最初源于解决"拜占庭将军"问题,金融科技的发展使得区块链技术有了更好的应用场景.它最显著的特征是去中心化,当然在应用中也存在一些技术和安全的挑战.欲知何为区块链?且看图示详解. 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们. 您可能感兴趣的文章: 用不到50行的Python代码构建最小的区块链 Python学习入门之区块链详解 你应该知道的区块链运作7个核心技术 200行代码轻松实现一个简单的区块链 利用swoole+redis实现股票和区块链服务

随机推荐