区块链数据深度解析

2025年5月31日 | 阅读 10 分钟
Blockchain Data Deep Dive

链上数据:它是什么?

区块链系统中保存的每一条信息都被称为链上数据。它作为网络上发生过的每一次交易的不可更改的日志,因此对所有人都是可访问的。

它有多种链上数据,包括:

  1. 交易数据: 指的是区块链上所有交易的详细信息,包括涉及的双方、转账价格以及交易费用。
  2. 区块数据: 这包括分布式账本上每个区块的详细信息,包括前一个区块的哈希值、区块中包含的交易、其创建日期以及矿工奖励和费用。
  3. 智能合约数据: 这包括关于区块链上最近实现的每个智能合约的信息,包括构成合约的程序代码、其当前状态以及最近发布的事件。

与链下数据相比,链上信息是不可更改的,因此全面了解区块链生态系统至关重要。这些信息可用于追踪区块链上的资源流向、确认盈利交易,并得出关于网络运营的结论。

链上信息的问题在于它可能难以有效获取。虽然链上信息易于访问,但它以机器可读的方式存储,这牺牲了人文理解以换取安全性。JSON和XML是人类可读格式的示例,而这就是应用程序二进制接口(ABI)发挥作用的地方。

数据结构是什么意思?

如前所述,链上数据不能像传统数据一样保存。相反,信息通常以字节码或其他机器可读类型存储。应用程序二进制接口(ABI)帮助设计者追踪和转换信息为人可用的实体。ABI用于智能合约中描述信息结构。作为一种操作选择,ABI除了定义每个方法接收和生成的信息类型以及它与智能合约交互的方式之外,还帮助定义了信息类型。换句话说,它是一种以计算机和人都能理解的格式表示信息结构的常见方法。

区块链数据存储在哪里?

区块链数据通常存储在一组节点上,而不是一个地方,这被称为开放式账本。由于每个节点都保存信息的额外副本,节点对于区块链信息的保存和安全至关重要。

下面描述了几种不同的节点类型及其一般功能:

  1. 全节点: 顾名思义,全节点除了完整的账本记录外,还跟踪最新的网络状态(最新的128个区块)。所有客户端都需要特别最新的状态来验证接收操作。虽然可以从全节点推断所有先前的状态,但这需要大量的处理能力。当程序员想获取最新信息和区块链状态时,他们应该搜索所有节点以获取信息。从角度来看,以太坊每年大约需要十三秒才能生成一个新区块,但一个人只能通过前28到29分钟访问链值。
  2. 存档节点: 这些节点跟踪每个区块的历史状态以及访问整个账本历史记录。与完整节点相比,这使得存档节点能够更快地响应对过去信息的查询。由于存档网络不需要像全节点那样进行状态更新,因此当需要过去信息时,程序员应该访问它们。存档节点非常适合开发分析工具以及需要快速访问过去信息的应用程序的程序员。
  3. 轻节点: 它们是仅保留区块头部的站点,区块头部是网络交易所需的最少量信息。当获取基本的区块链数据(例如区块头部)时,应用程序可以选择查询多个轻节点。

数据可以以节点以外的方式存储。链下信息存储选项包括数据库、本地机器和在线存储解决方案。尽管链下数据存储不如链上数据存储安全,但它对许多应用程序仍然有益,因为它成本更低且更容易检索。当数据存储在链下时,分布式账本上通常只保留定位链下数据所需的详细信息。

区块链内存和智能合约

尽管智能合约本质上包含信息方法的存储,但它们在区块链上在同行之间进行维护。智能合约使用一种称为合约内存设计来存储数据。指导合约存储参数在持久内存中排列的原则被称为合约内存架构。

内存、调用数据以及存储是Solidity(一种用于创建智能合约的高级编程语言)可以用来告诉EVM将参数保存在何处的内存的三种类型。

  1. 内存: 这是程序执行期间临时数据存储的地方。
  2. 调用数据: 函数的参数存储在此独特的信息区域。
  3. 存储: 这是区块链永久保存数据的地方。

文件和数据存储的比较

最基本的形式是,保存数据涉及存储信息以便后续检索和使用。另一方面,当文件本身与任何关于它们的元数据分开存储时,它们的保存独立于数据的存储。通常,这种划分是为了提高安全性、降低成本或提高效率。

使用像IPFS或Arweave这样的分布式文件存储协议是分离数据存储和文件存储的一种流行方法。通过降低必须跨区块链本身保存的数据量,这些解决方案使客户能够在分布式设备集合上保存文档并变得经济。

在最高层,文件存储在链下,而它包含的信息存储在链上。当应用程序需要访问文件时,它们可以使用这些信息来获取IPFS和Arweave URL。程序可以使用此网址通过IPFS或Arweave下载文档。

IPFS:它是什么?

IPFS的内容寻址架构中的每个文件都由其内容标识符或CID确定。无论项目的位置如何,CID都是唯一的哈希值,始终指向单个项目。

因此,这意味着哈希值将随着文件的任何修改或更新而修改。文件可以使用这种内容寻址方法根据其CID而不是其位置进行保存和恢复。

以下是IPFS如何运作的简要概述:

  • 文档被赋予一个CID。
  • 之后,文件被发布到IPFS系统。
  • IPFS使用分布式哈希表(DHT)来保存关于互联网网络中哪个路由器持有与CID关联的文档的数据。
  • 可以通过使用其哈希查询DHT来定位持有文件的元素。
  • 智能合约中的令牌包含CID。

Arweave

Arweave是另一个分布式数据库解决方案,也使用CID来存储和检索信息,并将信息链接到元数据。主要区别在于Arweave鼓励节点无限期地保留数据,这是奖励和永久性的替代策略。

信息可用性、数据存储和数据发布

  1. 用户需要了解数据发布、保存和可访问性的含义才能正确理解区块链数据。
  2. 简而言之,数据可访问性是指确保区块链系统上的所有用户都能访问信息,数据发布是将数据提供给区块链上的用户行为,信息存储是在分布式账本上维护数据的过程。
  3. 虽然检查员必须将每个交易的信息从一个区块传输到同一网络上的所有检查员,然后才能将该区块添加到以太坊的区块链中,但数据的可访问性至关重要。
  4. 信息可用性问题是数字货币能够处理所有交易的核心,因为其检查员可以完成这些交易,因为验证者负责执行所有金融数据。
  5. 了解区块发布的频率,而无需了解完整的区块(数据发布),是关于数据可访问性的主要问题之一。
  6. 区块生产者不会在内容不明确的上述区块上创建区块,这是内容发布的主要问题之一。这意味着包含未发布数据的区块可能会被完全忽略。数据发布后,其存储才发挥作用,尽管所有节点会保留数据多长时间尚不清楚。
  7. 这引发了对数据可访问性的额外担忧,因为我们无法强制网络保留信息。

模块化区块链和其他数据源

  • 解决特定任务的区块链被称为模块化区块链。例如,一个灵活的区块链可以专注于信息访问,同时依靠额外的区块链或技术来处理其他功能,如解析或实现。
  • 通过采用多种策略,包括链下数据存储、数据缩减和拆分,以及更灵活的数字货币,建立替代的信息可访问性级别,使广播调用数据比将其上传到区块链更便宜。
  • EigenDA是一种特殊类型的灵活网络,它利用了另一种信息可用性层。Arweave是EigenDA(一个分布式数据可用性层)的基础。
  • EigenDA允许客户将联系信息提交给Arweave,随后验证电话呼叫数据发布到以太坊。因此,客户可以将呼叫数据上传到以太坊,而无需承担与链上呼叫数据存储相关的高昂汽油费。

链上数据类型

在讨论了链上数据的定义之后,我们将研究其各种形式以及它们的创建、存储和检索过程。

交易数据:它包含什么?

关于区块链交易的所有详细信息都包含在交易数据中,包括:

  • 发送者
  • 接收者
  • 转账数量
  • 交易费用
  • 交易时间

每当用户在分布式账本上完成一项操作时,都会生成该信息。该操作随后通过在其他网络成员中广播而得到确认并添加到公共注册表中。

Merkle树是一种树形信息结构,可用于保存和验证交易信息。Merkle树是二叉树,每个节点代表其包含信息的哈希值,从而实现快速数据验证。您只需树根的哈希值即可确认Merkle树中内容的准确性。通过在Merkle树中收集信息,分布式账本可以尽可能地保持小巧。

Patricia Merkle Tries是一种结合了Merkle树和基数树(Patricia trie)的混合结构,专门用于比特币中保存信息。

通过使用以太坊网络上的区块链浏览器(例如Etherscan),可以轻松获取交易信息。比特币扫描仪可用于跟踪货币流动、发现未经授权的交易以及创建区块链应用程序等。它们允许用户检查和浏览每个交易的信息。您必须使用交易哈希的详细信息来查找有关特定交易的详细信息。

元数据

提供有关分布式账本属性和活动的更多详细信息的数据称为元数据。这可能包含更多信息,例如:

  • 资产的名称或符号
  • 资产的总供应量
  • 资产的拥有时间线
  • 资产的合约位置

尽管与交易信息不同,信息对于分布式账本的功能并非必需,但程序员可以利用它来创建应用程序,例如可视化、钱包和区块浏览器等。元数据可能由某人直接创建(例如,资产元数据),也可能由智能合约或区块链持续创建(例如,交易信息)。

开发人员可以使用getMetadata查询来检索数据。开发人员必须使用分布式账本API(例如Alchemy API)才能使用这些查询。开发人员可以生成一系列应用程序,支持消费者理解和交互区块链系统,通过使用getMetadata查询。

事件数据

智能合约在交易执行期间发布的信息被称为事件信息。该信息可能包含以下详细信息:

  • 事件的性质
  • 生成实例的智能合约位置
  • 有关事件的信息(例如传输的比特币数量、资产的替换所有者等)

此数据可通过日志访问,并有助于程序员监控智能合约的行为。

智能合约创建日志,这些日志是分布式账本上发生的每个事件的记录。交易发票包含这些日志,可以通过提交eth_getLogs查询来查看。

调用信息

当调用目标时发送到智能合约的信息称为调用数据。换句话说,函数参数在传递给智能合约之前会暂时保存在此处。任何类型的信息,包括数字、字符、数据数组以及更多,都可能包含在调用数据中。这至关重要,因为它实现了智能合约与用户之间的通信;例如,调用数据可以用来赋予个人NFT的所有权。所有比特币操作都会产生汽油费,使用调用数据也不例外。当L2操作出现在以太坊上时,对话数据是交易的一部分。这是因为以太坊网络需要电话呼叫信息来验证交易并执行指定的智能合约操作。调用数据消耗多少汽油取决于范围和电话呼叫数据中包含的数据类型。以太坊的每个区块最大调用数据大小为1,048,576字节。

结论

总之,每个希望使用或创建Web3基础设施或服务的开发人员都会发现理解区块链数据很有帮助。交易信息、信息、事件数据、联系数据以及Blob是记录在分布式账本上的链上数据的各种类别。根据应用程序的用例,有几种方法可以在数据保存到服务器后获取这些信息。


下一主题Plaid-区块链