文章目录
- 手把手教你区块链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.web3j core 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智能合约部署完成了