寥寥可数网

手把手教你区块链java开发智能合约nft-第二篇(部署第一个NFT智能合约)

手把手教你区块链java开发智能合约nft-第二篇(部署第一个NFT智能合约)

文章目录

  • 手把手教你区块链java开发智能合约nft-第二篇(部署第一个NFT智能合约)
  • 将智能合约java代码拷贝到自己的手把手教工程目录下
  • 引入web3j 依赖
  • 调用智能合约部署到私链
  • 从链上查询已经部署的合约
  • 完整代码

手把手教你区块链java开发智能合约nft-第二篇(部署第一个NFT智能合约)

刚搞区块链开发真的是太累了,自己摸石头过河,区块动不动就报错,发智网上搜索错误,合能合一律看不出什么问题,约n约或者报错的第篇第信息太少,问同事同事不鸟,部署问领导,手把手教领导也烦,区块无奈,发智对于英文不好的合能合我,只能被迫去看英文文档了,约n约企图找出java开发的第篇第方法

在阅读本文之前,建议先阅读我的部署上一篇文章
手把手教你区块链java开发智能合约nft-第一篇
在这篇文章中,主要介绍如何搭建基本的手把手教环境,和如何将solidity编写出来的智能合约,通过tuffle编译转为json,最后转为java代码。

将智能合约java代码拷贝到自己的工程目录下

从上篇文章:
手把手教你区块链java开发智能合约nft-第一篇
的教程方法中操作,得到的java 文件,如NFT721.java
拷贝到自己项目工程对应的包目录下,包目录具体放哪里都可以,像平常写java代码一样用就好,没有限制

引入web3j 依赖

java开发基本上都是用web3j 进行RPC远程调用链上开发,为什么要用web3j,主要是web3j封装了很多关于web3的远程调用操作,也是区块链开发比较成熟的框架

org.web3jcore  4.8.7

调用智能合约部署到私链

@Test    public void deployNFT721() throws Exception {         BigInteger chainId = web3j.ethChainId().send().getChainId();        System.out.println("chainId::"+chainId);        RawTransactionManager transactionManager = new RawTransactionManager(web3j, getCredentials(),chainId.longValue());        NFT721 nft721 = NFT721.deploy(web3j,transactionManager,new StaticGasProvider(BigInteger.valueOf(22_000_000_000l),BigInteger.valueOf(6_700_000l)),"NFT721.01","harry","0x849997c5fb88d45bd3471ace2e25e0db76eee7d2","ipfs://","ipfs://").send();        //0xc095782ebd324bc9619dfa3e388eada85398179d        System.out.println("contractAddress::"+nft721.getContractAddress());        String contractURI = nft721.contractURI().send();        System.out.println("contractURI::"+contractURI);        String tokenURIPrefix = nft721.tokenURIPrefix().send();        System.out.println("tokenURIPrefix:::"+tokenURIPrefix);    }

我这里执行后,生成的合约地址是0xc095782ebd324bc9619dfa3e388eada85398179d
每执行一次部署,都会得到一个新的合约地址,部署一般执行一次就可以了,除非你需要多个合约,才需要部署多次

我这里解析一下,NFT721部署方法的参数是什么?为什么要这么写?这个其实要结合solidity编写的智能合约定义入参的。我这个NFT721智能合约,也是从别人开源框架那拷贝过来用的,让我自己写solidity,我也写不出来。如果读者也想要,可以评论区留言,我看到了会回复你的。

从链上查询已经部署的合约

@Test    public void read() throws Exception {         //部署完智能合约后得到合约地址        String contractAddress="0xc095782ebd324bc9619dfa3e388eada85398179d";        TransactionManager transactionManager = new ReadonlyTransactionManager(web3j,contractAddress);        NFT721 nft721 = NFT721.load(contractAddress,web3j,transactionManager,new DefaultGasProvider());        System.out.println("contractAddress::"+nft721.getContractAddress());        String contractURI = nft721.contractURI().send();        System.out.println("contractURI::"+contractURI);        String tokenURIPrefix = nft721.tokenURIPrefix().send();        System.out.println("tokenURIPrefix:::"+tokenURIPrefix);        BigInteger totalSupply = nft721.totalSupply().send();        System.out.println("totalSupply::"+totalSupply);    }

完整代码

public class NFT721Test { 	//我这里的案例是使用truffle搭建起来的私链,上篇文章中关于truffle的文章链接有介绍如何搭建truffle私链    Web3j web3j = Web3j.build(new HttpService("http://192.168.159.101:9545/"));    @Test    public void deployNFT721() throws Exception {         BigInteger chainId = web3j.ethChainId().send().getChainId();        System.out.println("chainId::"+chainId);        RawTransactionManager transactionManager = new RawTransactionManager(web3j, getCredentials(),chainId.longValue());        NFT721 nft721 = NFT721.deploy(web3j,transactionManager,new StaticGasProvider(BigInteger.valueOf(22_000_000_000l),BigInteger.valueOf(6_700_000l)),"NFT721.01","harry","0x849997c5fb88d45bd3471ace2e25e0db76eee7d2","ipfs://","ipfs://").send();        //0xc095782ebd324bc9619dfa3e388eada85398179d        System.out.println("contractAddress::"+nft721.getContractAddress());        String contractURI = nft721.contractURI().send();        System.out.println("contractURI::"+contractURI);        String tokenURIPrefix = nft721.tokenURIPrefix().send();        System.out.println("tokenURIPrefix:::"+tokenURIPrefix);    }    private Credentials getCredentials () {         return Credentials.create("0xade1a7bc3c13f22433872987bb233014a62e6b76abef4482e464a2ea555c31f5");    }    @Test    public void read() throws Exception {         //部署完智能合约后得到合约地址        String contractAddress="0xc095782ebd324bc9619dfa3e388eada85398179d";        TransactionManager transactionManager = new ReadonlyTransactionManager(web3j,contractAddress);        NFT721 nft721 = NFT721.load(contractAddress,web3j,transactionManager,new DefaultGasProvider());        System.out.println("contractAddress::"+nft721.getContractAddress());        String contractURI = nft721.contractURI().send();        System.out.println("contractURI::"+contractURI);        String tokenURIPrefix = nft721.tokenURIPrefix().send();        System.out.println("tokenURIPrefix:::"+tokenURIPrefix);        BigInteger totalSupply = nft721.totalSupply().send();        System.out.println("totalSupply::"+totalSupply);    }}

到这里,第一个NFT智能合约部署完成了

未经允许不得转载:寥寥可数网 » 手把手教你区块链java开发智能合约nft-第二篇(部署第一个NFT智能合约)