首页 网站首页 行业资讯 区块链 查看内容

企业新闻推广 2022-8-19 16:13 8541 0

打开区块链浏览器,你能看到...

前言

随着区块链技术的不竭成长和利用落地,公共慢慢加深了对区块链技术的熟悉。我们都晓得,区块链具有可追溯、不成篡改等技术特点,那末链上的数据若何查询、溯源呢?这就是我们明天要分享的配角—区块链阅读器。

区块链阅读器:是链上数据可视化的首要窗口,是供给用户阅读与查询区块链一切信息的工具。借助这一窗口,如区块信息、买卖信息、账户信息等重要的加密数据得以直观显现。是以,区块链阅读器对于区块链利用者而言相当重要。以今朝国外开源区块链项目以太坊为例,其社区开源阅读器Etherscan承载大量用户流量,是分析链上行为最便利的工具。


翻开区块链阅读器,你能看到...

本文将从区块链阅读器研发实操经历切入,与大师交换若何快速构建一个区块链阅读器。


阅读器可以显现什么?


经过度析一些开源阅读器,我们总结出区块链阅读器展现的典型区块链信息以下几类:

- 区块高度

- 买卖数

- 买卖趋向

- 区块列表

- 比来买卖列表等


阅读器数据可以间接获得吗?


凡是,区块链供给需要的链SDK信息,用以帮助开辟者获得链上区块和买卖数据,可是其供给的接口常常是根本性的,例如若何获得区块高度、获得某个区块详情、获得某个买卖详情等,这些数据间接对应了页面上的区块列表、区块详情、买卖详情等根本数据,没法间接经过链SDK获得阅读器所需的的全量信息。

为此,一个好的区块阅读器是需要支持在当地停止链上数据的加工与处置。

首先,经过对分歧区块链底层的区块和买卖数据等停止监听,当链上发生新区块时,监听系统可经过链SDK第一时候获得该区块的信息;随后,系统将相关数据停止缓存入库,按需设想多种统计逻辑以完成数据的加工统计。是以,区块链阅读器页面上的数据并非间接经过链上SDK间接请求获得,而是源于当地的列表数据和统计数据

较于通用的间接经过链SDK获得的形式,我们更需要的是一个经过当地缓存区块数据而且加工链上数据的方式来明显提升前端对区块链阅读器数据获得速度,但对于这一计划读者能够会发生两个质疑:

  • 组件是按时获得链上SDK数据的,那就意味着当地数据与链上数据存在时差,这会影响利用体验么?
  • 由于不是链上间接获得,那若何保障当地缓存内的数据实在有用性呢?

针对质疑一,明显这个时差首要源于当地按时获得链上数据的频次,是以经过控制频次范围在公道范围内,便可以实现极短的延时,根基不会影响用户利用阅读器的性能体验。而针对质疑二是本计划中研发设想职员需要重点关注并处理的。


若何保障数据实在有用?


现实上,为了确保数据阅读器数据的实在性,区块阅读器需要增加数据校验模块,即用户可以经过简单的接口挪用与区块链停止交互,快速考证数据的实在性。例如,上述校验模块中接口首要包括以下功用:

区块证实:用于证实特定区块能否在区块链的账本数据中存在;

买卖证实:用于证实特定买卖大概买卖履行成果能否在区块链账本数据中存在;

账户证实:用于证实特定账户数据能否在区块链账本数据中存在;

是以经过上述分化,我们可以将全部阅读器的数据获得、加工、校验的流程了解以下:


翻开区块链阅读器,你能看到...

区块链阅读器设想实操


前面已初步先容了区块链阅读器的设想思绪以及整体运作流程。下面我们以趣链BaaS区块链阅读器为例,具体先容该区块阅读器的具体设想,若何实现分歧区块链的区块及买卖数据收集和存储。以下所示,全部自研阅读器组件整体架构以下:


翻开区块链阅读器,你能看到...

自研阅读器组件架构图

为便于大师了解,我们首先对架构图中的各模块功用停止简单描写:

Ø数据公共处置层:负责数据存储优化等功用,将鄙人一篇推文中侧重先容相关的功用设想;

Ø收集适配层:负责分歧区块链数据的收集适配;

Ø按时办事:负责按时触发收集和统计逻辑,收集器首要经过趣链BaaS的自研链驱动功用实现与分歧的区块链底层停止交互而且获得最新的区块和买卖数据。其中:

■收集模块:负责按时自动触发收集逻辑,包括数据处置等功用;

■统计模块

1)统计模块也是按时办事,按时判定能否有新数据入库;

2)若发生新数据则会触发统计逻辑,如区块数、买卖数、合约数、合约挪用数等目标统计;

3)统计数据将间接入库大概更新已稀有据;

现在有了这些先容,我们便可以将眼光聚焦在趣链自研阅读器组件是若何在一个办事里面获得分歧区块链的数据。首先,我们对其设想了一个笼统收集层,在具体挪用时只需传入趣链BaaS自研的链驱动即可。

例如,以下示例展现了若何获得最新区块接口:

// Collector collector definitiontype Collector interface {  // GetLatestBlock 获得最新的区块  GetLatestBlock() (*Block, error)}

随后,经过若何实现趣链区块链平台的区块数据收集代码来现实演示若何运作,

* 自建项目`hpc`,建立目录

* 进入 hpc目录

cd hpcgo mod init hpctouch main.go

* 成功目录结构以下

.├── go.mod└── main.go

* go.mod 引入依靠

module hpc  go 1.17  require (    git.hyperchain.cn/blocface/chainsdk v0.0.1)

* main.go 编辑, 可关注代码正文的补充描写:首先,将自界说实现接口Collector的工具注册进履行器,引入收集器履行器,履行即可;

*留意:若链上没有区块,此方式返回 &bs.Block{}, nil,各类分歧的区块链可经过自界说实现方式来到达收集结果;

package main  import (    bs "git.hyperchain.cn/blocface/chainsdk/pkg/collect/base"      "git.hyperchain.cn/blocface/chainsdk/pkg/collect/collectinter")  func main() {    err := collectinter.Register(mockImp{})    if err != nil {        panic(err)    }    collectinter.Execute()}  type mockImp struct {}    func (m mockImp) GetLatestBlock() (*bs.Block, error) {    panic("自界说实现获得最新区块")}

* 工具包中供给信息工具,如供给节点大概链的相关信息

type Base struct {    node string     Node struct {        Name             string         Type             string         Host             string        Ports            string         UniqueName       string     }                          Channel        string  }

* 编译打包(平台 GOOS=linux 架构GOARCH=amd64)

  GOOS=linux GOARCH=amd64 go build -ldflags="-w -s" -gcflags="all=-N -l" -o hpc .

经过上述步调,我们实现了趣链区块链平台的区块数据收集,随后,我们只需在趣链自研阅读器组件中挪用引入相关的客户端包,按照驱动二进制的途径新建客户端即可。

// NewChainClient new chain clientfunc NewChainClient(tool, channel, cfgRootPath string, node base.Node, opts ...ClientOpt) (*ChainClient, error) {  abs, err := filepath.Abs(tool)  if err != nil {    return nil, errors.Wrap(err, "get absolute path")  }  marshal, err := json.Marshal(node)  if err != nil {    return nil, errors.Wrap(err, "marshal node")  }  c := &ChainClient{    tool:           abs,    node:           string(marshal),    channel:        channel,    configRootPath: cfgRootPath,    timeout:        10 * time.Second,  }  for _, opt := range opts {    opt(c)  }  return c, nil}

挪用逻辑获得最新区块示例

func (c ChainClient) GetLatestBlock() (*base.Block, error) {  command := fmt.Sprintf("%s -p '%s'  -m GetLatestBlock ", c.tool, c.configRootPath)  out, err := util.NewDefaultCMD(command, []string{}, util.WithTimeout(int(c.timeout.Seconds())), util.WithForceKill(true), util.WithErrPrint(false)).Run()  if err != nil {    return nil, errors.Wrap(err, "call GetLatestBlock")  }  out = strings.TrimSuffix(out, "\n")  var b = base.Block{}  err = deocde([]byte(out), &b)  if err != nil {    return nil, errors.Wrapf(err, "decode resp [%s]", out)  }  return &b, nil}

以下是趣链BaaS的区块链阅读器前端页面,只需调取内部接口便可以间接从数据库中获得所需的信息,我们从区块、买卖、合约、账户等多个维度为用户供给直观的链上数据显现,便于用户更好的洞悉链上营业运转全貌。


翻开区块链阅读器,你能看到...


总结


趣链自研阅读器组件经过上述形式实现无差别化的挪用逻辑,到达对分歧区块链底层数据的同一支持,并充实预留了新区块链底层的灵活扩大性。经过上述焦点功用模块设想,根基实现了区块链阅读器的最小化产物MVP

固然,现实在搭建区块链阅读器时,还有很多应战,最典型的应战之一就是若何应对大数据量,相信仔细的读者已经看到前面的架构先容中提到了数据公共处置层,这一模块首要就是停止数据存储相关的优化,保证数据存储不会随时候的增加而不竭增加,充实减轻办事器存储部分的压力,我们将在后续推文中侧重先容~

最新评论(0)

© 2022-2024 企业新闻网 Powered by Discuz! X3.4

本站内容由网友分享或转载自互联网公开内容,如有侵权请反馈到邮箱 1415941@qq.com,我们会在3个工作日内删除,加急删除请添加站长微信:15314649589

微信扫描,加站长微信

企业新闻网