NFT鏈上鑄造合成交易系統開發丨openseaNFT平臺搭建技術
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=' 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(ethers.constants.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)
})
})
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70012429/viewspace-2944376/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 鑄造NFT鏈上合成交易智慧合約平臺系統開發丨技術介紹
- NFT鑄造交易丨Opensae交易平臺系統開發技術分析
- NFT鏈上鑄造opensea交易系統開發技術方案
- NFT交易平臺系統開發丨NFT發行鑄造交易系統開發詳情原始碼搭建原始碼
- NFT鏈上鑄造交易平臺系統開發功能分析
- 公鏈NFT交易鑄造平臺系統開發詳情技術分析丨框架程式碼框架
- NFT鏈上鑄造智慧合約平臺系統開發詳情丨區塊鏈技術上區塊鏈
- NFT鑄造交易合成盲盒交易系統開發詳情丨DAPP技術框架APP框架
- NFT鑄造合集智慧合約交易平臺系統開發丨技術介紹
- NFT鑄造交易合成平臺系統開發丨區塊鏈智慧合約部署程式碼詳情區塊鏈
- NFT 鑄造交易 OpenSea 平臺系統開發案例技術介紹
- NFT鑄造合成遊戲系統開發技術方案遊戲
- NFT鑄造合成鏈上理財系統開發模式模式
- NFT交易平臺Opensea丨NFT藝術品鑄造交易系統開發功能分析原始碼部署原始碼
- NFT鑄造合成質押挖礦系統開發|NFT交易開發
- NFT鏈遊GameFi系統開發技術|NFT藏品鑄造技術GAM
- NFT鑄造智慧合約交易平臺系統開發丨Opensea系統開發介紹
- NFT鏈上鑄造交易智慧合約專案開發搭建
- OpenSea藏品交易平臺開發NFT系統搭建技術
- 鏈上NFT鑄造發行交易平臺開發功能分析原始碼部署原始碼
- NFT發行鑄造合集交易平臺系統開發原始碼部署原始碼
- NFT鑄造鏈上智慧合約系統開發(詳情方案)丨NFT鏈上鑄造智慧合約系統開發(需求原始碼)原始碼
- NFT交易平臺商城開發系統錢包搭建技術
- openseaNFT藝術品交易平臺如何開發搭建
- NFT鏈上鑄造交易智慧合約開發demo
- NFT鑄造鏈上智慧合約模式系統開發丨DAPP技術介紹模式APP
- NFT鏈遊合成遊戲系統程式設計開發技術丨dapp丨NFT丨GameFi遊戲程式設計APPGAM
- DAPP鏈上合約鑄造NFT質押挖礦系統開發技術APP
- NFT鑄造合成交易盲盒質押系統開發詳情方案
- NFT鏈上鑄造交易智慧合約模式系統開發詳情介紹模式
- NFT數字藏品鑄造系統開發(開發方案)丨NFT數字藏品鑄造系統開發(開發原始碼)原始碼
- NFT鏈上鑄造智慧合約系統開發(模型探討) | NFT鏈上智慧合約鑄造系統原始碼demo模型原始碼
- NFT鑄造鏈上智慧合約系統開發(詳細說明)丨NFT鑄造鏈上智慧合約原始碼版開發原始碼
- NFT鑄造合約平臺系統開發詳情案例
- NFT鑄造競拍交易平臺dapp系統開發合約部署詳情APP
- NFT鑄造合成質押挖礦模式系統開發分析模式
- NFT鑄造理財系統開發技術講解方案
- NFT遊戲開發交易系統搭建技術遊戲開發