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

文章目录

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

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

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

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

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

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

引入web3j 依赖

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

<dependency>
  <groupId>org.web3jgroupId>
  <artifactId>coreartifactId>
  <version>4.8.7version>
dependency>

调用智能合约部署到私链

    @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,智能合约)