如何使用java脚手架调用合约接口

如何使用java脚手架调用合约接口(以HelloWorld为例提供示范)

前提条件

部署好fisco-bcos区块链网络,此处是通过webase依赖包一键部署区块链网络
在虚拟机或者云服务器部署区块链网络并开放相应的端口,使用windows端导入java项目时,请使用内网IP或公网IP导出项目

1.编写合约HelloWorld.sol

pragma solidity ^0.4.25;
contract HelloWorld{
    string str;
    
    constructor(){
        str = "Hello World";
    }
    
    function setStr(string memory _str)public {
        str = _str;
    }
    
    function getStr()public view returns(string memory){
        return str;
    }
}

2.部署编译合约

在这里插入图片描述

3.导出java项目

第一步点击到处java项目
在这里插入图片描述

第二步,选择节点,选择用户,选择已编译HelloWorld合约
在这里插入图片描述
在这里插入图片描述
第三步,把下载好的Java项目导入IDEA
打开IDEA,点击左上角文件,点击打开,然后找到下载好的项目导入,构建项目需要一定的时间下载gradel包管理器和依赖
导入后成功构建,如下所示:

在这里插入图片描述

4.分析项目源码目录中的raw包和service包下的java文件在这里插入图片描述

HelloWorld.java

HelloWorld.java是一个合约的Java封装类,用于与HelloWorl.sol进行交互。
该类的主要功能包括:

  1. 定义合约的二进制表示:通过BINARY_ARRAY定义合约的字节码表示,BINARY定义非SM模式的合约二进制代码,SM_BINARY定义SM模式的合约二进制代码。
  2. 定义合约的ABI (Application Binary Interface):通过ABI_ARRAY定义合约的ABI,即合约的函数和参数的描述。
  3. 定义合约的函数名称:FUNC_SETSTR表示设置字符串变量的函数名,FUNC_GETSTR表示获取字符串变量的函数名。
  4. 实现合约的部署和加载方法:
    • deploy方法用于部署HelloWorld合约到区块链,并返回一个HelloWorld的实例。
    • load方法用于加载已部署的HelloWorld合约。需要提供合约地址、区块链客户端和密钥对。
  5. 实现合约函数的具体操作方法:
    • setStr方法用于设置HelloWorld合约中字符串变量的值。
    • getStr方法用于获取HelloWorld合约中字符串变量的值。
  6. 在构造函数中初始化合约:
    • 通过传入合约地址、区块链客户端和密钥对,在构造函数中调用父类Contract的构造方法进行初始化。

总的来说,HelloWorld.java定义了一个与HelloWorld合约进行交互的封装类,提供了部署和加载合约的方法,以及具体操作合约函数的方法。它管理了与合约的交互逻辑,并提供了简化的接口,供应用程序进行与合约的交互和操作。

代码如下所示:

package org.example.HelloWorld.raw;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.fisco.bcos.sdk.abi.FunctionReturnDecoder;
import org.fisco.bcos.sdk.abi.TypeReference;
import org.fisco.bcos.sdk.abi.datatypes.Function;
import org.fisco.bcos.sdk.abi.datatypes.Type;
import org.fisco.bcos.sdk.abi.datatypes.Utf8String;
import org.fisco.bcos.sdk.abi.datatypes.generated.tuples.generated.Tuple1;
import org.fisco.bcos.sdk.client.Client;
import org.fisco.bcos.sdk.contract.Contract;
import org.fisco.bcos.sdk.crypto.CryptoSuite;
import org.fisco.bcos.sdk.crypto.keypair.CryptoKeyPair;
import org.fisco.bcos.sdk.model.CryptoType;
import org.fisco.bcos.sdk.model.TransactionReceipt;
import org.fisco.bcos.sdk.model.callback.TransactionCallback;
import org.fisco.bcos.sdk.transaction.model.exception.ContractException;
@SuppressWarnings("unchecked")
public class HelloWorld extends Contract {
   
    // 合约的二进制代码表示
    public static final String[] BINARY_ARRAY = {
   
            // 合约的字节码...
    };
    public static final String BINARY = org.fisco.bcos.sdk.utils.StringUtils.joinAll("", BINARY_ARRAY);
    public static final String[] SM_BINARY_ARRAY = {
   };
    public static final String SM_BINARY = org.fisco.bcos.sdk.utils.StringUtils.joinAll("", SM_BINARY_ARRAY);
    // 合约的ABI(应用程序二进制接口)
    public static final String[] ABI_ARRAY = [
            // 合约的ABI...
    ];
    public static final String ABI = org.fisco.bcos.sdk.utils.StringUtils.joinAll("", ABI_ARRAY);
    // 函数名称
    public static final String FUNC_SETSTR = "setStr";
    public static final String FUNC_GETSTR = "getStr";
    // 合约的构造函数
    protected HelloWorld(String contractAddress, 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值