zoukankan      html  css  js  c++  java
  • hyperchain HVM使用java编写智能合约的编译、部署流程

    新建合约项目

    hvm的智能合约最好新建一个maven项目,一般通过模板来创建其中参数如下:
    GroupId:cn.hyperchain
    ArtifactId:java-contract-archetype
    Version:1.0.2
    项目中分为了两个部分:合约(SBank),调用接口(ISBank)
    接口是提供给应用程序使用的

    合约编译

    使用命令:mvn compile
    mvn jar
    生成jar包即可部署

    合约部署

    直接读取jar包部署
    代码如下

        DefaultHttpProvider defaultHttpProvider=new DefaultHttpProvider.Builder().setUrl(url).build();
        ProviderManager providerManager = ProviderManager.createManager(defaultHttpProvider);
        ContractService contractService = ServiceManager.getContractService(providerManager);
        AccountService accountService = ServiceManager.getAccountService(providerManager);
        Account account = accountService.genAccount(Algo.ECRAW);
        InputStream inputStream1 = new BufferedInputStream(new FileInputStream("target/TrainingPlatformContract-1.0-SNAPSHOT.jar"));
        Transaction transaction=new Transaction.HVMBuilder(account.getAddress())
                .deploy(inputStream1)
                .build();
        transaction.sign(account);
        ReceiptResponse receiptResponse = contractService.deploy(transaction).send().polling();
        String contractAddress = receiptResponse.getContractAddress();
        System.out.println("contract address: " + contractAddress);
        System.out.println("帐户地址:"+account.getAddress());
        System.out.println("账户私钥:" + account.getPrivateKey());
    

    合约调用

    首先每个方法需要在应用程序中编写一个InvokeBean类,举例:

    public class InvokeTransfer implements BaseInvoke<Boolean, ISBank> {
        private String from;
        private String to;
        private int value;
        public InvokeTransfer(){
    
        }
        public InvokeTransfer(String from,String to,int value){
            this.from=from;
            this.to=to;
            this.value=value;
        }
    ...
    }
    

    调用代码:

            Transaction transaction1 = new Transaction.HVMBuilder(account.getAddress()).invoke(receiptResponse.getContractAddress(), new InvokeTransfer("1","2",1)).build();
            transaction1.sign(account);
            ReceiptResponse receiptResponse1 = contractService.invoke(transaction1).send().polling();
            System.out.println(receiptResponse1.getRet());
    
  • 相关阅读:
    html总结:背景图片拉伸
    html总结:表格中的文字居中
    html总结:float实现span和input输入框同行
    servlet总结:Servlet基础
    js总结:JavaScript入门
    河北科技创新平台年报系统涉众分析
    确定业务问题的范围-上下文的范围模型
    问题账户需求分析
    Struts2------OGNL表达式
    Struts入门
  • 原文地址:https://www.cnblogs.com/PanYuDi/p/14531748.html
Copyright © 2011-2022 走看看