广州

点击搜索

发布

NFT铸造智能合约平台系统开发

区域:
广州 > 天河 > 珠江新城/跑马场
类别:
软件开发
地址:
广州天河区
 nft指的是数字作品。NFT一般指数字作品。【18I链上合约-259l开发系统3365】就是将图片、文字、视频、音频等数字化的内容上传到区块链上,生成一串,不可互换,不能篡改的代码。NFT全称为Non-FungibleToken,翻译过来是非同质化通证。NFT就是一种在区块链中注册的独特数字证书,可以用来记录你的艺术品或者收藏品等资产的所有权。

NFT名词解释

NFT的评价有主观和客观两个维度。NFT为非同质化代币,与非同质化代币NFT相对应的就是同质化代币FT,NFT是区块链的一个条目,而区块链是类似于等加密货币的去中心化数字账本技术。现在,艺术家、音乐家、影响者和体育特许经营公司都在使用NFT将以前廉价或免费的数字商品货币化。

该技术还响应了艺术界在日益数字化的世界中对认证和出处的需求,将一个数字文件与其创作者地联系起来。NFT完全在链上铸造,如Avastars、Aavegotchis和ArtBlocksdrop,仅依赖于各自的以太坊智能合约而存在。另一方面,一些NFT项目通过使其NFT依赖于外部的链外提供商来选择简单性和灵活性。

Dapp是一种应用程序。18I链上合约-259l开发系统3365,DApp就是D+App。Dapp(去中心化应用程序)是一种在网络上公开运行的软件应用程序,他们与普通的应用程序没有什么区别,都拥有一样的功能,但不同的是Dapp是在P2P网络上运行。

  App我们都知道是客户端应用,是application的简称。DApp就是D+App,D是英文单词
理解 tokenURI()
让我们解释一下 ERC721 tokenURI()函数的实现:

tokenURI()是 ERC721 标准的一个元数据函数,在 OpenZeppelin 文档中 :

tokenURI(uint256 tokenId) → string 返回 tokenId 代币的统一资源标识符(URI)。

通常 tokenURI 会返回一个 URI。我们可以通过连接 baseURI 和 tokenId 来获得每个 token 的 URI 结果。

在我们的tokenURI()中,将 URI 作为一个 base64 编码的对象返回。

首先,构建对象。对象中的 svg 图片也是 base64 编码的:

{
"name":"Badge #1",
"description":"Badge NFT with on-chain SVG image."
"image":"data:image/svg+xml;base64,[svg base64 encoded]"
}
复制
然后我们返回 base64 编码的对象:

data:application/json;base64,(object base64 encoded)
复制
Webapp 可以通过调用tokenURI(tokenId)获得 URI,并解码以获得名称、描述和 SVG 图片。

这里的 SVG 图片由 LOOT 项目改编的。非常简单,就是在图片中显示 tokenId:

<svg xmlns='http://www.w***/2000/svg' preserveAspectRatio='xMinYMin meet' viewBox='0 0 350 350'>
<style>.base { fill: white; font-family: serif; font-size: 300px; }</style>
<rect width='100%' height='100%' fill='brown' />
  <text x='100' y='260' class='base'>
  1
  </text>
</svg>
// test/BadgeToken.test.ts
import { expect } from "chai"
import { Signer } from "ethers"
import { ethers } from "hardhat"
import { BadgeToken } from "../typechain"

const base64 = require( "base-64")

const _name='BadgeToken'
const _symbol='BADGE'

describe("BadgeToken", function () {
let badge:BadgeToken
let account0:Signer,account1:Signer

beforeEach(async function () {
  [account0, account1] = await ethers.getSigners()
  const BadgeToken = await ethers.getContractFactory("BadgeToken")
  badge = await BadgeToken.deploy(_name,_symbol)
})

it("Should has the correct name and symbol ", async function () {
  expect(await badge.name()).to.equal(_name)
  expect(await badge.symbol()).to.equal(_symbol)
})

it("Should tokenId start from 1 and auto increment", async function () {
  const address1=await account1.getAddress()
  await badge.mintTo(address1)
  expect(await badge.ownerOf(1)).to.equal(address1)

  await badge.mintTo(address1)
  expect(await badge.ownerOf(2)).to.equal(address1)
  expect(await badge.balanceOf(address1)).to.equal(2)
})

it("Should mint a token with event", async function () {
  const address1=await account1.getAddress()
  await expect(badge.mintTo(address1))
    .to.emit(badge, 'Transfer')
    .withArgs(e***nstants.AddressZero,address1, 1)
})

it("Should mint a token with desired tokenURI (log result for inspection)", async function () {
  const address1=await account1.getAddress()
  await badge.mintTo(address1)

  const tokenUri = await badge.tokenURI(1)
  // console.log("tokenURI:")
  // console.log(tokenUri)

  const tokenId = 1
  const data = base64.decode(tokenUri.slice(29))
  const itemInfo = JSON.parse(data)
  expect(itemInfo.name).to.be.equal('Badge #'+String(tokenId))
  expect(itemInfo.description).to.be.equal('Badge NFT with on-chain SVG image.')

  const svg = base64.decode(itemInfo.image.slice(26))
  const idInSVG = svg.slice(256,-13)
  expect(idInSVG).to.be.equal(String(tokenId))
  // console.log("SVG image:")
  // console.log(svg)
})

it("Should mint 10 token with desired tokenURI", async function () {
  const address1=await account1.getAddress()

  for(let i=1;i<=10;i++){
    await badge.mintTo(address1)
    const tokenUri = await badge.tokenURI(i)

    const data = base64.decode(tokenUri.slice(29))
    const itemInfo = JSON.parse(data)
    expect(itemInfo.name).to.be.equal('Badge #'+String(i))
    expect(itemInfo.description).to.be.equal('Badge NFT with on-chain SVG image.')

    const svg = base64.decode(itemInfo.image.slice(26))
    const idInSVG = svg.slice(256,-13)
    expect(idInSVG).to.be.equal(String(i))
  }

  expect(await badge.balanceOf(address1)).to.equal(10)
})
})
相关信息
天河-棠下
2天前
荔湾-荔湾湖
2天前
天河-棠下
5月8日
天河-棠下
5月7日
天河-棠下
4月30日
天河-棠下
4月29日
查看更多广州网站/软件服务信息

免责声明:此信息系发布者(UID:739123)自行发布,本站是服务平台,仅提供信息存储空间服务,该信息内容的真实性及合法性由该发布者完全负责。

© lieju.com 联系我们