6.3.3 Chain33接入说明

  1. 使用chain33 client与节点进行交互

  • 示例:

       ./chain33-cli --rpc_laddr 
       "https://4PRFS2zJmhYYqzKllW:cVlWcaXx8K77OCTSXI@bsng153JTlU.bsngate.com:19602/node1"  block last_header
       {
           "version": 0,
           "parentHash": 
      "0x0000000000000000000000000000000000000000000000000000000000000000",
    
           "txHash": "0x22db70a26130f2fe4758fd65bf016949c1c46f5642b4a556f8a0ff7a41350898",
    
           "stateHash": 
      "0xc34a7713273f1ac2256355c754b6c8ed9b9c726b84d16866ccaa4b7df29d7cc8",
    
           "height": 0,
    
           "blockTime": 1620443036658,
    
           "txCount": 1,
    
           "hash": "0xa17a19fc1b525b783130fe4ce797feb815039e5fb96e06ea4e6a600ee0970170",
    
           "difficulty": 520159231
      }
    

  2. 使用JSON-RPC API与节点进行交互

  可以使用curl和Postman进行调用。

  • 示例:

       curl -H "Content-Type: application/json"   -d 
       '{"jsonrpc":"2.0","method":"Chain33.GetLastHeader","params":[],"id":2}'   
       https://4PRFS2zJmhYYqzKllW:cVlWcaXx8K77OCTSXI@bsng153JTlU.bsngate.com:19602/node1
    
       {"id":2,"result":{"version":0,"parentHash":"0x0000000000000000000000000000000000000000000000000000000000000000","txHash":"0x22db70a26130f2fe4758fd65bf016949c1c46f5642b4a556f8a0ff7a41350898","stateHash":"0xc34a7713273f1ac2256355c754b6c8ed9b9c726b84d16866ccaa4b7df29d7cc8","height":0,"blockTime":1620443036658,"txCount":1,"hash":"0xa17a19fc1b525b783130fe4ce797feb815039e5fb96e06ea4e6a600ee0970170","difficulty":520159231},"error":null}
    

  3. 使用JAVA SDK与节点进行交互

  • 示例:

       package com.hll.bty;
    
       import cn.chain33.javasdk.client.RpcClient;
       import cn.chain33.javasdk.utils.EvmUtil;
       import cn.chain33.javasdk.utils.HexUtil;
       import org.junit.Test;
    
       import com.alibaba.fastjson.JSONArray;
    
       public class EvmTest {
    
          //格式为https://授权用户名:授权密码@peer节点RPC端点
    
           RpcClient client = new 
              RpcClient("https://4PRFS2zJmhYYqzKllW:cVlWcaXx8K77OCTSXI@bsng153JTlU.bsngate.com:19602/node1");
    
           @Test
    
           public void testEvmContract() throws InterruptedException {
    
              String privateKey = 
              "73363A3A483A0916835EB8B803D23EBE27631BE96E9FCA0CBBFB702EABC21BAC";
    
              String code = "0x608060405234801561001057600080fd5b5060c78061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c806360fe47b11460375780636d4ce63c146062575b600080fd5b606060048036036020811015604b57600080fd5b8101908080359060200190929190505050607e565b005b60686088565b6040518082815260200191505060405180910390f35b8060008190555050565b6000805490509056fea2646970667358221220ed06cf1aefb69c19593b31e7039b83768108c2943ca726b68b351622b14a292f64736f6c63430007040033";
    
              String abi = "[\n" +
                  "\t{\n" +
                  "\t\t\"inputs\": [],\n" +
                  "\t\t\"name\": \"get\",\n" +
                  "\t\t\"outputs\": [\n" +
                  "\t\t\t{\n" +
                  "\t\t\t\t\"internalType\": \"uint256\",\n" +
                  "\t\t\t\t\"name\": \"\",\n" +
                  "\t\t\t\t\"type\": \"uint256\"\n" +
                  "\t\t\t}\n" +
                  "\t\t],\n" +
                  "\t\t\"stateMutability\": \"view\",\n" +
                  "\t\t\"type\": \"function\"\n" +
                  "\t},\n" +
                  "\t{\n" +
                  "\t\t\"inputs\": [\n" +
                  "\t\t\t{\n" +
                  "\t\t\t\t\"internalType\": \"uint256\",\n" +
                  "\t\t\t\t\"name\": \"_x\",\n" +
                  "\t\t\t\t\"type\": \"uint256\"\n" +
                  "\t\t\t}\n" +
                  "\t\t],\n" +
                  "\t\t\"name\": \"set\",\n" +
                  "\t\t\"outputs\": [],\n" +
                  "\t\t\"stateMutability\": \"nonpayable\",\n" +
                  "\t\t\"type\": \"function\"\n" +
                  "\t}\n" +
                  "]";
    
          // 部署合约      
           String txEncode = EvmUtil.createEvmContract(HexUtil.fromHexString(code), "", "evm-sdk-test-para0", abi, privateKey);
           String submitTransaction = client.submitTransaction(txEncode);
           String contractName = submitTransaction;
           System.out.println(submitTransaction);
           Thread.sleep(1000);
    
          // 调用合约
           txEncode = EvmUtil.callEvmContract("".getBytes(),"", 0, "set(15)", contractName, privateKey);
           submitTransaction = client.submitTransaction(txEncode);
           System.out.println(submitTransaction);    
           Thread.sleep(1000);
    
          // 计算合约地址
           String contractAddress = client.convertExectoAddr("user.evm." + contractName);
           System.out.println(contractAddress);
    
          // 查询
           JSONArray result = client.queryEVMABIResult(contractAddress, "user.evm." + contractName, "get()");
           System.out.println("查询结果: " + result.toJSONString());
    
          // 再次调用合约
           txEncode = EvmUtil.callEvmContract("".getBytes(),"", 0, "get()", contractName, privateKey);
           submitTransaction = client.submitTransaction(txEncode);
           System.out.println(submitTransaction);
    
          }   
    
      }
    
Copyright 北京红枣科技有限公司

results matching ""

    No results matching ""

    results matching ""

      No results matching ""