区块链浏览器是一个实用的网络服务,用于访问、浏览和查找区块链网络的内容。它可用于检查提交的区块链交易、查看区块数据和其他信息,以及跟踪以太坊站点状态。区块链浏览器允许用户查看比特币和以太坊区块链上的所有活动,例如智能合约、查看ERC20代币的余额等等。用户可以通过区块链浏览器监控各种区块链活动,及时查看已经发生的变化和交易。

区块链浏览器中的所有信息都会以直观的方式显示出来,比如区块高度、区块奖励、挖矿交易数量等,这些信息一目了然。

通过使用区块链浏览器,用户可以追踪比特币和以太坊的所有公开交易历史,从而避免欺诈交易和超出合约范围的行为。用户还可以对应用程序(例如智能合约)进行实时监控,以便获取最新的活动信息。

此外,区块链浏览器还可以提供丰富的用户界面,为用户提供高质量的网络空间体验。用户界面由简单的图表和表格组成,允许用户直观地浏览区块链上的各种活动数据。

最后,区块链浏览器还可以根据地址、交易ID等关键词搜索区块链上所有记录的数据,获得准确的搜索结果。

总的来说,区块链浏览器是一个非常实用的工具,可以帮助用户跟踪比特币、以太坊等各大区块链的活动,及时发现变化和交易。使用它可以帮助用户更好地了解区块链网络,提高对当今互联网技术的综合掌握。

https://www.nmghlhltmy.com/cn



打开区块链浏览器,可以看到...


前言

随着区块链技术的不断发展和应用,公众对区块链技术的认识也逐渐加深。我们都知道区块链具有可追溯、不可篡改等技术特性,那么如何查询和追踪链上的数据呢?这就是我们今天要分享的主角——区块链浏览器。

区块链浏览器:链上数据可视化的主窗口。它是一个为用户提供浏览和查询区块链上所有信息的能力的工具。通过这个窗口,可以直观地呈现区块信息、交易信息、账户信息等重要的加密数据。因此,区块链浏览器对于区块链用户来说至关重要。以目前国外开源区块链项目以太坊为例。其社区开源浏览器Etherscan承载了大量的用户流量,是分析链上行为最便捷的工具。


本文将从区块链浏览器开发实践经验开始,与大家分享如何快速搭建区块链浏览器。



浏览器可以渲染什么?


通过分析一些开源浏览器,我们总结出区块链浏览器显示的典型区块链信息有以下几类:

- 块高度

- 交易数量

- 交易趋势

- 黑名单

- 最近交易列表等



可以直接获取浏览器数据吗?


通常区块链会提供必要的链SDK信息来帮助开发者获取链上区块和交易数据,但其提供的接口往往比较基础,比如如何获取区块高度、获取某个的详细信息等。这些数据直接对应页面上的区块列表、区块详情、交易明细等基础数据,无法通过浏览器直接获取链SDK。所需的全部信息。

因此,一个好的区块浏览器需要支持本地处理和链上数据的处理。

首先,通过监控不同区块链底层的区块和交易数据,当链上产生新的区块时,监控系统可以立即通过链SDK获取该区块的信息;随后,系统将相关数据缓存到数据库,并按需设计各种统计逻辑,完成数据处理统计。因此,区块链浏览器页面上的数据并不是通过链上 SDK 直接请求的,而是源自本地列表数据和统计数据

相比一般通过链SDK直接获取的模式,我们更需要的是一种将区块数据缓存在本地,并在链上处理数据的方法,大幅提升前端获取区块链浏览器的速度数据。 ,但读者可能对此解决方案有两个疑问:

针对问题1,显然这个时间差主要来自于本地定时获取链上数据的频率。因此,通过将频率范围控制在合理范围内,可以实现极短的延迟,基本不会影响用户使用。浏览器性能体验。第二个问题是研发设计人员在这个规划中需要重点关注和解决的问题。



如何保证数据的真实性和有效性?


事实上,为了保证数据浏览器中数据的真实性,区块浏览器需要添加数据验证模块,即用户可以通过简单的接口调用,快速验证数据的真实性。例如,上述验证模块中的接口主要包括以下功能:

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

交易证明:用于证明区块链账本数据中是否存在特定交易或交易执行结果;

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

因此,通过上面的分解,我们可以理解整个浏览器数据获取、处理、验证的流程如下:




区块链浏览器设计实践


前面已经初步介绍了区块链浏览器的设计思路和整体运行流程。下面我们以趣链BaaS区块链浏览器为例。 详细介绍这款区块浏览器的具体设计,以及如何实现不同区块链中区块和交易数据的收集和存储。如下图,整个自研浏览器组件的整体结构如下:


自研浏览器组件架构图

为了方便大家理解,我们先简单描述一下架构图中各个模块的功能:

Ø数据公共处理层:负责数据存储优化等功能,下一条推文将重点介绍相关功能设计;

Ø采集适配层:负责不同区块链数据的采集和适配;

Ø定时服务:负责定时触发采集和统计逻辑。采集器主要利用趣链BaaS自研的链驱动功能,与不同区块链底层进行交互,获取最新的区块和交易数据。 。在:

■采集模块:负责定时主动触发采集逻辑,包括数据处理等功能;

■统计模块

​​​ 1)统计模块也是一个定时服务,定期判断是否有新数据进入数据库;

​ ​ ​ 2)如果有新数据产生,会触发统计逻辑,如区块数、交易数、合约数、合约调用数等指标统计;

3)统计数据直接录入数据库或更新现有数据;

现在通过这些介绍,我们可以重点关注趣联自研的浏览器组件如何在一项服务中获取不同区块链的数据。首先,我们为其设计了一个抽象集合层。调用时,我们只需要传入趣链BaaS自研的链驱动即可。

例如,以下示例展示了如何获取最新的块接口:

// Collector 收集器定义type Collector 接口 { // GetLatestBlock 获取最新区块  GetLatestBlock() (*Block, error)}

接下来,我们将通过实现趣链区块链平台的区块数据采集代码来实际演示它是如何工作的。

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

* 进入hpc目录

cd hpcgo mod init hpctouch main.go

* 成功的目录结构如下

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

* go.mod引入依赖

模块 hpc go 1.17 需要 (www.nmghlhltmy.com/blocface/chainsdk v0.0.1)

* Main.go编辑器,请注意代码注释的附加说明:首先将实现自定义接口Collector的对象注册到执行器中,引入收集器执行器,并执行;

*注:如果链上没有区块,该方法返回 &bs.Block{}, nil。不同的区块链可以通过定制的实现方式达到集合效果;

package main import ( bs "www.nmghlhltmy.com/blocface/chainsdk/pkg/collect/base" "www.nmghlhltmy.com/blocface/chainsdk/pkg/collect/collectinter") func main() { err : =collectinter.Register(mockImp{}) if err != nil {panic(err) }collectinter.Execute()}类型mockImpstruct{}func(mmockImp)GetLatestBlock()(*bs.Block,error){panic( “自定义实现以获取最新区块”)}

* 工具包中提供信息对象,例如提供节点或链相关信息

type 基本结构 { 节点字符串 节点结构 { 名称字符串 类型字符串 字符串主机端口

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

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

通过以上步骤,我们就实现了趣链区块链平台的区块数据采集。然后,我们只需要在趣联自研的浏览器组件中调用并引入相关的客户端包,并根据驱动二进制文件的路径创建一个新的客户端即可。能。

// NewChainClient 新链客户端func NewChainClient(tool, channel, cfgRootPath string, node base.Node, opts ...ClientOpt) (*ChainClient, error) { abs, err := filepath.Abs​​(tool ) if err != nil { return nil, error.Wrap(err, "获取绝对路径") } marshal, err := json.Marshal(node) if err != nil { return nil, error.Wrap(err, " marshal 节点") } c := &ChainClient{ 工具:abs,节点:字符串(marshal),通道:通道,configRootPath:cfgRootPath,超时:10 * time.Second, } for _, opt := range opts { opt(c ) }返回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, "解码响应 [%s]", out) } return &b, nil}

以下是趣链BaaS区块链浏览器的前端页面。您只需调用内部接口,即可直接从数据库中获取所需信息。我们为用户提供区块、交易、合约、账户等多个维度。 直观的链上数据呈现让用户更好地了解链上整体业务运行情况。




总结



趣联自研浏览器组件通过上述模型实现无差异化的调用逻辑,实现对不同区块链底层数据的统一支持,充分预留新区块链底层灵活的扩展性。通过以上核心功能模块设计,区块链浏览器的最小化产品MVP已经基本实现。

当然,实际构建区块链浏览器时还存在很多挑战。最典型的挑战之一是如何处理大数据量。相信细心的读者已经看到了前面架构介绍中提到的内容。数据公共处理层,该模块主要负责优化数据存储,保证数据存储不会随着时间的推移而增加,充分减轻服务器存储部分的压力。我们将在后续推文中重点介绍这一点~


尼美智慧库 | ©All Rights Reserved.