• 【无标题】


    手把手教你区块链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.web3j</groupId>
      <artifactId>core</artifactId>
      <version>4.8.7</version>
    </dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    调用智能合约部署到私链

        @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);
        }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    我这里执行后,生成的合约地址是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);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    完整代码

    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);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

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

  • 相关阅读:
    Ubuntu16.04系统在Docker容器搭建 Gitlab 服务器
    如何用sklearn对随机森林调参
    从零开始搭建医药领域知识图谱实现智能问答与分析服务(含码源):含Neo4j基于垂直网站数据的医药知识图谱构建、医药知识图谱的自动问答等
    【接口技术】定时计数器习题
    html 学习 之 文本标签
    sqli-labs/Less-58
    Python命令行可以用下划线_代表上一次计算的结果
    【队列】933. Number of Recent Calls
    设计模式之美——单一职责原则和开闭原则
    Linux常用命令
  • 原文地址:https://blog.csdn.net/huangxuanheng/article/details/125436306