Docs

Docs

  • 文档
  • github

›操作指南

概述

  • 简介
  • 术语
  • 版本发布

架构特性

  • 整体架构
  • 共识机制
  • 账本存储
  • 智能合约
  • 数据归档
  • 数据可视化
  • 消息订阅

快速入门

  • 部署安装
  • 使用示例
  • 配置说明

操作指南

  • EVM
  • HVM
  • 消息订阅
  • 数据可视化
  • 交互式命令

SDK

  • LITESDK
  • JAVASDK

数据可视化

准备工作

1.安装mysql

2.安装solidity编译器

操作步骤

1.开启mysql并创建一个和要导出的namespace名字相同的schema,以global为例:

mysql> create schema global; 

2.编辑namespace.toml文件中配置项:

vi namespaces/global/config/namespace.toml

3.开启节点监听功能

 [[service]]
      service_name = "Radar"

这两行在配置文件中已经存在,使用之前要保证其不能处于注释状态

[radar-params]
    viewable_db_type = "mysql"
    mysql_connURL  = "<username>:<password>@tcp(<address>)/%s?charset=utf8"  

viewable_db_type是数据库类型,暂时只支持mysql;mysql_connURL是连接mysql的url。<address>是mysql服务器地址,格式为ip:port或url:port,mysql的端口一般为3306。<username>是登陆用户名,<password>是登录密码。如连接到本机的root用户:

"root:root@tcp(127.0.0.1:3306)/%s?charset=utf8"

4.启动hyperchain,部署合约

5.调用SDK,通知radar监听合约

合约方法为

public ReceiptReturn listenContract (String sourceCode, String addr, int index)

三个参数分别代表合约源码,合约地址和希望监听合约的节点的id。下面是一个例子:

public void TestRadar() throws Exception {
    String SourceCode = Utils.readFile("solidity.source/c1.sol");
    int id = 1;
    //deploy Contract
    String contractAddress = deployContract("Bank", SourceCode);
    Assert.assertEquals(contrtactAddress.length(), 42);
    // notify radar to listen to contract
    hyperchain.listenContract(SourceCode, contractAddress, id);
}

另外,也可以直接向想要监听并导出数据的节点发送jsonRPC命令来通知radar监听合约。命令的格式如下:

curl <节点ip:port> --data '{
"jsonrpc":"2.0",
"method":"radar_registerContract",
"params":[{"source":"<处理后的合约源码>",
"address":"<合约地址>"}],
"id":1
}'

jsonRPC命令中需要对源码字符串进行处理。处理规则如下:

1.去除所有注释(包含 “/**/”注释和“//“注释)。

2.去除所有换行符和制表符。

3.将所有引号转义(即,将所有"前面加上)。

  1. 发送交易,观察mysql中的schema是否存储了正确的合约数据

注意事项

  1. 因为mysql表名长度有限(64字符),故结构名、数组变量、字典变量名不宜过长

  2. 不要在合约中使用constant关键字

  3. 合约中不需要声明solidity版本号,不要出现pragma solidity ^0.4.24;。这一限制将在后续版本中解除。

  4. 使用solidity0.4.24及以前的版本,最新版本的支持后续会实现。如果通过brew安装过老版本的solidity,之后升级到了最新版,可以使用brew switch solidity 0.4.24命令恢复到0.4.24版本,其他版本相应修改后面的数字。

  5. 合约中不要使用复杂变量(数组字典元素、结构中的字段、msg.sender等)直接作为字典变量的key值,可以将其替换为简单的合约状态变量。例如:

contract test{
    mapping (uint => uint) a;
    uint [] b;
...
   function t(){
      a[b[0]] = 1; //b[0]是数组变量,需要一个简单状态变量作为中间变量
   }
} 

可改为

contract test{
    mapping (uint => uint) a;
    uint [] b;
    uint c; 
    ...
   function t(){
      c = b[0]; 
      a[c] = 1;
   }
} 
← 消息订阅交互式命令 →
  • 准备工作
  • 操作步骤
  • 注意事项
QTechGitHub
Copyright © 2025 Hyperchain Co., Ltd.