撰文:李厚尧 (BD Lead)、许博远 (Tech Lead)、马育麒 (Community Lead)

这不会是一段轻松的旅程,但我们相信这是一段重要的旅程。我们必须抓住这一刻,共同努力,将平衡从垄断转向去中心化的未来。 - Yaniv Tal,The Graph Project Lead

我们正式宣布 EthSign 已与 The Graph 合作并集成以进行实时数据查询。 本文将概述 The Graph 以及 EthSign 为何使用 The Graph。 在 此处 了解如何以开发人员身份使用 The Graph
去中心化数据查询:EthSign 与 The Graph 合作进行实时区块链索引


什么是 The Graph?

The Graph 是去中心化网络的索引和查询层。开发人员构建和发布开放 API,称为 Subgraphs,应用程序可以使用 GraphQL 查询这些 API。 Graph 目前支持对来自以太坊、IPFS 和 PoA 的数据进行索引,更多网络即将推出。迄今为止,大约 17,000 名开发人员已为应用程序部署了超过 11,000 个 Subgraphs,例如 Uniswap、Synthetix、Aragon、Gnosis、Balancer、Livepeer、DAOstack、AAVE、Decentraland 等。

如果您是构建应用程序或 Web3 应用程序的开发人员,您可以使用 Subgraphs 从区块链索引和查询数据。 Graph 允许应用程序在 UI 中高效地呈现数据,并允许其他开发人员也使用您的 Subgraph!您可以部署 Subgraphs 或查询 Graph Explorer 中的现有子图。 The Graph 欢迎您成为 The Graph 主网上的索引器、策展人和 / 或委托人。


EthSign 集成 The Graph

在 EthSign 2.0 中,我们严重依赖 event 来跟踪智能合约的状态。想知道您发起了哪些文件签名?我们需要查询;想知道哪些文件与您共享?我们需要查询;这种对 event 的过度依赖在本地测试期间不是问题,但一旦部署到公共网络上就证明是致命的。我们的智能合约加载速度非常慢,而且部署时间越长,情况就越糟。

因此,解决方案是要么重构智能合约,以便检索当前状态不再依赖于扫描过去的 event,要么使用第三方索引服务。最后,我们采用了两种方法。虽然我们重组了我们的智能合约以明确跟踪其当前状态作为备份,但事实证明 The Graph 是一项出色的服务,非常适合我们的用例。我们没有联系区块链网络并等待长达 10 秒的响应,而是联系 The Graph 并获得即时响应。

除了令人难以置信的索引性能外,The Graph 强大的映射系统使我们能够在检测到某些 event 后放置自定义触发器。它的 GraphQL 实体和查询机制也使检索数据变得容易和高效。整个体验是如此流畅,以至于我们决定使用 The Graph 来跟踪 EthSign 的当前状态,包括特定用户的所有合约(本质上是文档,不要与 EthSign 智能合约混淆),每个合约的状态,以及每个合约的历史。

例如,这是一个在 The Graph 中被表示为 GraphQL 实体的合约:

type Contract @entity {
id: ID!
initiator: User!
name: Bytes!
birth: BigInt!
expiration: BigInt!
doc_storage_id0: Bytes
doc_storage_id1: Bytes
meta_storage_id0: Bytes
meta_storage_id1: Bytes
totalSigners: Int!
currentSigners: Int!
currentSignedSigners: Int!
currentSignedSignersList: [User!]!
status: Int!
events: [Event!]!
}

当发出 LogSignedDocument 的 Solidity event 时,The Graph 会自动执行以下更新特定合约当前状态的代码:

export function handleLogSignedDocument(event: LogSignedDocument): void {
let ethsignEvent = new Event(event.transaction.hash.toHex() + "-" + event.logIndex.toString());
ethsignEvent.type = "LogSignedDocument";
ethsignEvent.blockNumber = event.block.number;
ethsignEvent.timestamp = event.block.timestamp;
ethsignEvent.contract = Contract.load(event.params.documentKey.toHexString()).id;
ethsignEvent.involvedParty = event.params.signer;
ethsignEvent.save();
let ethsignContract = Contract.load(event.params.documentKey.toHexString());
let events = ethsignContract.events;
events.push(ethsignEvent.id);
ethsignContract.events = events;
++ethsignContract.currentSignedSigners;
if (ethsignContract.currentSignedSigners == ethsignContract.totalSigners) {
ethsignContract.status = 3;
}
let currentSignedSignersList = ethsignContract.currentSignedSignersList;
currentSignedSignersList.push(event.params.signer.toHexString());
ethsignContract.currentSignedSignersList = currentSignedSignersList;
ethsignContract.save();
}

正如我们所见,The Graph 为使用无服务器云功能的开发人员提供了令人难以置信的熟悉体验,并充当区块链元数据的 L2 解决方案。


一致的愿景

EthSign 电子签名平台的一些最强大的功能是跨链集成和无缝的多链用户体验。 EthSign 的智能合约部署在以太坊和许多与 EVM 兼容的区块链上( Avalanche、BSC、Polygon、Fantom、Moonbeam 等)。 The Graph 也是如此。 The Graph 已经扩展到许多区块链,并将索引开放数据带到 Ethereum、Polygon、NEAR、Polkadot、Celo、Avalanche、BSC、Fantom 和许多其他区块链。 就像 The Graph 一样,EthSign 将继续这种跨链愿景,这就是 Web 3 的未来。
去中心化数据查询:EthSign 与 The Graph 合作进行实时区块链索引
总结一下,The Graph 充当催化剂,为 EthSign 用户提供非常友好的用户体验。


此处 访问 EthSign
您的意见对我们很重要,提供反馈
加入 EthSign Discord 社区