国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

手把手教你區(qū)塊鏈java開發(fā)智能合約nft-第五篇(鑄造第一個NFT)

這篇具有很好參考價值的文章主要介紹了手把手教你區(qū)塊鏈java開發(fā)智能合約nft-第五篇(鑄造第一個NFT)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

手把手教你區(qū)塊鏈java開發(fā)智能合約nft-第五篇(鑄造第一個NFT)

回顧

初學(xué)區(qū)塊鏈,那真叫一個痛苦并無助。如果沒有人帶你的話

今天寫的這篇是在前面文章基礎(chǔ)上寫的,初學(xué)區(qū)塊鏈的朋友建議先看我前面寫的文章
手把手教你區(qū)塊鏈java開發(fā)智能合約nft-第一篇
手把手教你區(qū)塊鏈java開發(fā)智能合約nft-第二篇(部署第一個NFT智能合約)
手把手教你區(qū)塊鏈java開發(fā)智能合約nft token-第三篇(部署token)
手把手教你區(qū)塊鏈java開發(fā)智能合約nft(第四篇)-如何動態(tài)獲取gasPrice和gasLimit?

部署NFT721

關(guān)于部署NFT721 ,可以參考之前的文章:
手把手教你區(qū)塊鏈java開發(fā)智能合約nft-第二篇(部署第一個NFT智能合約)

部署完成后,將得到一個NFT721的智能合約地址:contractAddress,這個智能合約地址值需要保存好,待會鑄造NFT時需要用到它

比如我在部署合約完成后,得到的contractAddress值為:0x1fc51bf18b49d29f7a40825914e8c68f4ce7b255

鑄造NFT

鑄造NFT也是比較簡單的,直接調(diào)用NFT721 的方法mint 就可以了,主要難點(diǎn)是在對數(shù)據(jù)的簽名上
直接上代碼吧

 @Test
    public void mint() throws Exception {
        //NFT721合約地址
        String contractAddress="0x1fc51bf18b49d29f7a40825914e8c68f4ce7b255";
        String tokenId="2";   //上鏈的NFT id
        String tokenURI="/static/uploadQmVJoMsgcsCCz75ZHzup7e8boqhBz9R8SKYwKknFEWamzA.png";   //上鏈的tokenId對應(yīng)的值
        //鑄造NFT需要用到的私鑰,在部署合約時指定的地址對應(yīng)的私鑰
        String miner="0x5369576889297382912123166219811286283737728368986117127236719812";

        TransactionManager transactionManager = getRawTransactionManager();
        ContractGasProvider contractGasProvider = getContractGasProvider();
        NFT721 nft721 = NFT721.load(contractAddress, web3j, transactionManager, contractGasProvider);
        Credentials credentials = getCredentials();

        ECKeyPair ecKeyPair = ECKeyPair.create(Numeric.hexStringToByteArray(miner));

        Type<BigInteger> tId = new Uint(new BigInteger(tokenId));
        String a = contractAddress + Numeric.cleanHexPrefix(TypeEncoder.encode(tId));
        a = Hash.sha3(a);
        byte[] b = Numeric.hexStringToByteArray(a);
        Sign.SignatureData data = Sign.signPrefixedMessage(b, ecKeyPair);


        ArrayList<NFT721.Fee> fees = Lists.newArrayList(new NFT721.Fee(credentials.getAddress(), BigInteger.valueOf(200)));
        TransactionReceipt transactionReceipt = nft721.mint(new BigInteger(tokenId), new BigInteger(data.getV()), data.getR(), data.getS(),
                fees, tokenURI).send();
        System.out.println("mint:hash::"+transactionReceipt.getTransactionHash());
        System.out.println("mint:getContractAddress::"+transactionReceipt.getContractAddress());
    }

關(guān)鍵代碼說明:

  • 首先定義了一些傳入的參數(shù),這里當(dāng)做局部變量定義出來
  • 加載智能合約NFT721對象,要用這個對象來調(diào)用mint鑄造NFT
     NFT721 nft721 = NFT721.load(contractAddress, web3j, transactionManager, contractGasProvider);
  • 對上鏈數(shù)據(jù)進(jìn)行簽名
//利用簽名賬戶對應(yīng)的私鑰對上鏈的tokenId等數(shù)據(jù)進(jìn)行簽名
 ECKeyPair ecKeyPair = ECKeyPair.create(Numeric.hexStringToByteArray(miner));

        Type<BigInteger> tId = new Uint(new BigInteger(tokenId));
        String a = contractAddress + Numeric.cleanHexPrefix(TypeEncoder.encode(tId));
        a = Hash.sha3(a);
        byte[] b = Numeric.hexStringToByteArray(a);
        Sign.SignatureData data = Sign.signPrefixedMessage(b, ecKeyPair);
  • 鑄造NFT
        ArrayList<NFT721.Fee> fees = Lists.newArrayList(new NFT721.Fee(credentials.getAddress(), BigInteger.valueOf(200)));
        TransactionReceipt transactionReceipt = nft721.mint(new BigInteger(tokenId), new BigInteger(data.getV()), data.getR(), data.getS(),
                fees, tokenURI).send();

mint方法參數(shù)說明:
public RemoteFunctionCall mint(BigInteger tokenId, BigInteger v, byte[] r, byte[] s, List _fees, String tokenURI)

tokenId:上鏈的tokenId,或者可以理解為NFT的id,必須保證在鏈上唯一
v: 簽名數(shù)據(jù)的v
r:簽名數(shù)據(jù)的R
s:簽名數(shù)據(jù)的S
_fees: (我也不太理解具體是什么)從字面上理解是費(fèi)用信息,

Fee構(gòu)造方法需要傳入兩個參數(shù):
public Fee(String recipient, BigInteger value) {
super(new Address(recipient),
new Uint256(value));
this.recipient = recipient;
this.value = value;
}
從命名上看:
recipient : 接受者
value:費(fèi)用

tokenURI:tokenURI,具體上鏈的數(shù)據(jù),上鏈后可以通過tokenId查看的數(shù)據(jù),一個tokenId需要指定一個tokenURI

執(zhí)行完以上代碼,沒有報錯的話,等一會就會鑄造成功了
這樣就完成了NFT的鑄造了文章來源地址http://www.zghlxwxcb.cn/news/detail-401993.html

根據(jù)tokenId查看NFT鏈上數(shù)據(jù)

    @Test
    public void tokenURI() throws Exception {

        String contractAddress="0x1fc51bf18b49d29f7a40825914e8c68f4ce7b255";
        String tokenId="2";
        TransactionManager transactionManager = getRawTransactionManager();
        ContractGasProvider contractGasProvider = getContractGasProvider();
        NFT721 nft721 = NFT721.load(contractAddress, web3j, transactionManager, contractGasProvider);
        String tokenURI = nft721.tokenURI(new BigInteger(tokenId)).send();
        System.out.println("tokenURI::"+tokenURI);
    }

完整代碼

package net.sandboxol.support.deploy.mint;

import net.sandboxol.support.deploy.NFT721;
import net.sandboxol.support.utils.Web3Util;
import org.assertj.core.util.Lists;
import org.junit.Test;
import org.web3j.abi.TypeEncoder;
import org.web3j.abi.datatypes.Type;
import org.web3j.abi.datatypes.Uint;
import org.web3j.crypto.Credentials;
import org.web3j.crypto.ECKeyPair;
import org.web3j.crypto.Hash;
import org.web3j.crypto.Sign;
import org.web3j.protocol.Web3j;
import org.web3j.protocol.core.methods.response.TransactionReceipt;
import org.web3j.protocol.http.HttpService;
import org.web3j.tx.RawTransactionManager;
import org.web3j.tx.TransactionManager;
import org.web3j.tx.gas.ContractGasProvider;
import org.web3j.tx.gas.StaticGasProvider;
import org.web3j.utils.Numeric;

import java.io.IOException;
import java.math.BigInteger;
import java.util.ArrayList;

public class DeployMintTest {
    Web3j web3j = Web3j.build(new HttpService("http://192.168.159.101:8545/"));
	private String userId="214158";
    private String siteId="ishow";
    @Test
    public void mint() throws Exception {

        String contractAddress="0x1fc51bf18b49d29f7a40825914e8c68f4ce7b255";
        String tokenId="2";
        String tokenURI="/static/uploadQmVJoMsgcsCCz75ZHzup7e8boqhBz9R8SKYwKknFEWamzA.png";
        //私鑰
        String miner="0x5369576889297382912123166219811286283737728368986117127236719812";

        TransactionManager transactionManager = getRawTransactionManager();
        ContractGasProvider contractGasProvider = getContractGasProvider();
        NFT721 nft721 = NFT721.load(contractAddress, web3j, transactionManager, contractGasProvider);
        Credentials credentials = getCredentials();

        ECKeyPair ecKeyPair = ECKeyPair.create(Numeric.hexStringToByteArray(miner));



        Type<BigInteger> tId = new Uint(new BigInteger(tokenId));
        String a = contractAddress + Numeric.cleanHexPrefix(TypeEncoder.encode(tId));
        a = Hash.sha3(a);
        byte[] b = Numeric.hexStringToByteArray(a);
        Sign.SignatureData data = Sign.signPrefixedMessage(b, ecKeyPair);


        ArrayList<NFT721.Fee> fees = Lists.newArrayList(new NFT721.Fee(credentials.getAddress(), BigInteger.valueOf(200)));
        TransactionReceipt transactionReceipt = nft721.mint(new BigInteger(tokenId), new BigInteger(data.getV()), data.getR(), data.getS(),
                fees, tokenURI).send();
        System.out.println("mint:hash::"+transactionReceipt.getTransactionHash());
        System.out.println("mint:getContractAddress::"+transactionReceipt.getContractAddress());
    }


    @Test
    public void tokenURI() throws Exception {

        String contractAddress="0x1fc51bf18b49d29f7a40825914e8c68f4ce7b255";
        String tokenId="1";
        TransactionManager transactionManager = getRawTransactionManager();
        ContractGasProvider contractGasProvider = getContractGasProvider();
        NFT721 nft721 = NFT721.load(contractAddress, web3j, transactionManager, contractGasProvider);
        String tokenURI = nft721.tokenURI(new BigInteger(tokenId)).send();
        System.out.println("tokenURI::"+tokenURI);
    }

    private Credentials getCredentials () {
    //這個Web3Util 是自己定義的工具,能根據(jù)userId和siteId生成Credentials 對象的工具,大家可以自己構(gòu)造,我這個有其他依賴,不方便提供源碼
        return Web3Util.getUserCredentials(userId,siteId);
    }

    private TransactionManager getRawTransactionManager() throws IOException {
        BigInteger chainId = web3j.ethChainId().send().getChainId();
        return new RawTransactionManager(web3j, getCredentials(),chainId.longValue());
    }

    private ContractGasProvider getContractGasProvider(){
        return new StaticGasProvider(BigInteger.valueOf(22_000_000_000l),BigInteger.valueOf(6_700_000l));
    }
}

NFT721 相關(guān)智能合約源碼下載

到了這里,關(guān)于手把手教你區(qū)塊鏈java開發(fā)智能合約nft-第五篇(鑄造第一個NFT)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 這個人工智能社區(qū)火爆了!手把手教你零代碼搞定大模型應(yīng)用開發(fā)

    這個人工智能社區(qū)火爆了!手把手教你零代碼搞定大模型應(yīng)用開發(fā)

    ????????想給自己做個私人定制的旅行攻略,滿足個性化的出游需求,還要細(xì)致關(guān)注到天氣、穿衣、老人孩子的作息等等,但太耗時費(fèi)力怎么辦?讓AI幫忙搞定。一位開發(fā)者在AI Studio星河大模型社區(qū)用短短數(shù)小時就做好了“旅行規(guī)劃家”智能應(yīng)用。像這樣的應(yīng)用,在星河社

    2024年02月07日
    瀏覽(95)
  • 【Java技術(shù)專題】「Guava開發(fā)指南」手把手教你如何進(jìn)行使用Guava工具箱進(jìn)行開發(fā)系統(tǒng)實(shí)戰(zhàn)指南(基礎(chǔ)編程篇)

    Preconditions(前置條件):讓方法調(diào)用的前置條件判斷更簡單 。 Guava在Preconditions 類中提供了若干前置條件判斷的實(shí)用方法,我們強(qiáng)烈建議在 Eclipse 中靜態(tài)導(dǎo)入這些方法。每個方法都有三個變種: 當(dāng)方法沒有額外參數(shù)時,拋出的異常中不包含錯誤消息,這會使得調(diào)用方很難確

    2024年02月07日
    瀏覽(95)
  • 手把手教你寫stm32f103智能風(fēng)扇

    手把手教你寫stm32f103智能風(fēng)扇

    本系統(tǒng)可以分為兩個模式來進(jìn)行運(yùn)行,分別為手動模式和自動模式,同時,在上電進(jìn)入系統(tǒng)后,還會有一個模式選擇的界面產(chǎn)生。 模式選擇:在此界面中,可以通過按鍵K1來控制模式選擇,兩個模式分別為手動模式和自動模式;通過按鍵K2可以進(jìn)入模式。 手動模式:在手動模

    2023年04月17日
    瀏覽(93)
  • 動手實(shí)踐丨手把手教你用STM32做一個智能魚缸

    動手實(shí)踐丨手把手教你用STM32做一個智能魚缸

    摘要: 本文基于STM32單片機(jī)設(shè)計了一款基于物聯(lián)網(wǎng)的智能魚缸。 本文分享自華為云社區(qū)《基于STM32+華為云IOT設(shè)計的物聯(lián)網(wǎng)魚缸【玩轉(zhuǎn)華為云】》,作者: DS小龍哥 。 為了緩解學(xué)習(xí)、生活、工作帶來的壓力,提升生活品質(zhì),許多人喜歡在家中、辦公室等場所養(yǎng)魚。為節(jié)省魚友

    2024年01月16日
    瀏覽(29)
  • 手把手教你配置BSC(幣安智能鏈)網(wǎng)絡(luò),只需5分鐘

    手把手教你配置BSC(幣安智能鏈)網(wǎng)絡(luò),只需5分鐘

    這里就用小狐貍(Metamask)錢包了,因?yàn)楸救藞孕庞煤傚X包日后可以擼到空投。 1、PC端Chrome瀏覽器安裝metamask錢包插件 要去Metamask官網(wǎng)下載錢包哦,然后把插件添加至Chrome瀏覽器擴(kuò)展程序中 這個不會的小伙伴歡迎留言,我可以再出一個教程。 2、打開metamask,找到自定義RP

    2024年02月14日
    瀏覽(22)
  • 手把手教你5分鐘搭建RabbitMq開發(fā)環(huán)境

    手把手教你5分鐘搭建RabbitMq開發(fā)環(huán)境

    演示環(huán)境 1、使用Vagrant 和 VirtualBox創(chuàng)建linux虛擬機(jī) 不知道Vagrant怎么使用的可以看這里。 ①在cmd窗口執(zhí)行命令 vagrant init generic/centos7 ,初始化linux啟動環(huán)境 ②執(zhí)行啟動命令 vagrant up 啟動Linux虛擬機(jī) ③修改當(dāng)前目錄的Vagrantfile文件,為虛擬機(jī)配置內(nèi)網(wǎng)ip,后面登錄的時候會用到

    2023年04月12日
    瀏覽(27)
  • 手把手教你在Windows下搭建Vue開發(fā)環(huán)境

    手把手教你在Windows下搭建Vue開發(fā)環(huán)境

    最近有小伙伴不會Vue環(huán)境的部署,小孟親自測試了下,大家有需要的可以按照下面的學(xué)習(xí)。 如果想看視頻的,也可以看視頻的教程: https://www.bilibili.com/video/BV1if4y1X7BS/?spm_id_from=333.788.recommend_more_video.-1vd_source=e64f225fc5daf048d2687502cb23bb3b 在Windows下搭建Vue開發(fā)環(huán)境: 官網(wǎng)https://n

    2024年02月08日
    瀏覽(27)
  • 手把手教你開發(fā)第一個HarmonyOS (鴻蒙)移動應(yīng)用

    手把手教你開發(fā)第一個HarmonyOS (鴻蒙)移動應(yīng)用

    移動應(yīng)?開發(fā): Android IOS HarmonyOS (鴻蒙) 文檔概覽-HarmonyOS應(yīng)用開發(fā)官網(wǎng) 2.1 系統(tǒng)的定義 2.1.1 系統(tǒng)的定位 HarmonyOS有三?特征: 搭載該操作系統(tǒng)的設(shè)備在系統(tǒng)層?融為?體、形成超級終端,讓設(shè)備的硬件能?可以彈性 擴(kuò)展,實(shí)現(xiàn)設(shè)備之間 硬件互助,資源共享。 對消費(fèi)者??,

    2024年02月02日
    瀏覽(101)
  • 手把手教你搭建VUE+VScode+elementUI開發(fā)環(huán)境

    手把手教你搭建VUE+VScode+elementUI開發(fā)環(huán)境

    1.安裝node.js 按照VUE必須先要安裝node.js (1)打開NodeJs官網(wǎng):https://nodejs.org/en/download/ ,根據(jù)系統(tǒng)下載,Windows操作系統(tǒng)一般選擇是64-bit。 (2)點(diǎn)擊64-bit就開始下載了。 (3)雙擊安裝,安裝過程基本直接“NEXT”就可以了。(windows的安裝msi文件在過程中會直接添加path的系統(tǒng)變

    2024年02月09日
    瀏覽(29)
  • 小白指南:手把手教你用低代碼開發(fā)一個應(yīng)用頁面

    小白指南:手把手教你用低代碼開發(fā)一個應(yīng)用頁面

    原文鏈接: 小白指南:手把手教你用低代碼開發(fā)一個應(yīng)用頁面,點(diǎn)擊鏈接查看更多技術(shù)內(nèi)容; 一、什么是低代碼開發(fā) 在了解低代碼開發(fā)之前,我們先看看使用低代碼開發(fā)的效果。 低代碼開發(fā)效果示例 低代碼開發(fā)是DevEco Studio為HarmonyOS開發(fā)者提供的可視化頁面的開發(fā)方式,具

    2024年02月09日
    瀏覽(86)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包