技术干货 | 如何将 Rosetta API 集成到 Cosmos SDK
发布:中币网 时间:2021-05-27 00:38:10 加入收藏 打赏
本文由 Cosmos China 中文技术社区翻译,原文作者为 Frojdi Dymylja,原文链接为:
https://medium.com/tendermint/integrating-the-rosetta-api-in-cosmos-blockchains-9dbd988c20cf
由 Coinbase 开发的 Rosetta API 是一个开放标准,旨在简化区块链的部署和交互。Rosetta API 规范提供了一个通用接口,可以与不同类型的区块链互联互通。由于每个区块链在交易签名、生成请求、余额查询和其他层面都有各自独立的操作机制,因此钱包和 Coinbase 等交易所需要不断进行软件开发和维护,以满足与这些机制进行交互的需要。
Cosmos 的 Rosetta API 支持旨在使区块链搭建者能够遵循或制定符合 Coinbase 规范的协议。
为什么使用 Rosetta API 会更加方便?
Rosetta 是目前跨区块链应用交互唯一支持的规范——且 Coinbase 是世界上最大的加密货币交易所之一。Coinbase 的钱包和交易集成逐渐成为区块链基础设施的一个标准。在 Cosmos SDK 架构中,仅需添加一行代码,就能顺利集成 Rosetta API。
在 Cosmos SDK 区块链应用中集成 Rosetta API 能够帮助在交易所上线加密货币。钱包和其他基于 Rosetta API 与链进行交互的服务也会得益于此次集成。如果您曾在其他区块链中使用过 Rosetta API,就能够体会到它与 Cosmos 生态应用的集成的如鱼得水、如虎添翼。
如何将 Rosetta API 集成至 Cosmos?
将 Rosetta API 集成进 Cosmos SDK 带来了一些很有趣的挑战。其中最特别的挑战是,按照接口规范,Rosetta API 规范期望设计实现像 UTXO (尚未支付的交易结果)区块链一样工作。在基于 UTXO 的区块链中,每个区块的交易都包括一组输入(接收到的通证)和输出(已开销的通证)。这样一来,在既定高度 x 中查询某一账户的结果即为其地址输入和输出之和,这个结果是通过查询该地址从区块 0 到区块 x 所产生的所有交易输入和输出而得出的。
对于基于 Cosmos SDK 搭建的区块链来说,其状态变化不仅会发生在交易层面,还会发生在初始区块和结束区块阶段。受此类差异影响,仅通过查询账户和计算已花费通证无法获得真实余额和供应变化的完整记录。在 Cosmos SDK 生态中,用户可以通过质押获得奖励,此外,诸如委托一类的行为可以增加查询余额和供应量的途径。
https://cosmos.network/learn/staking/
为了集成 Rosetta API,我们调整了 Cosmos SDK 代码,这样的话,每次账户的余额变动就会触发事件,这些事件包括 modules 的触发,DeliverTx,BeginBlock,EndBlock。
第二个挑战是使 Rosetta API 能够支持所有区块链应用与其支持的信息。仅仅支持通证转账和委托等一般操作是不够的。我们希望可以通过 Rosetta API 实现对 Cosmos SDK 区块链所有应用的查询与转账的完整记录。
现在已经了解了我们克服这些有趣挑战的过程,下面就来看看如何将 Rosetta API 集成至 Cosmos SDK 区块链应用中吧!
Rosetta API 集成操作方法
支持 Rosetta API 集成需要做的变更在 Cosmos SDK 0.43 发布版本中已经做过介绍,此处不再赘述。如果您的 Cosmos SDK 版本较低,请先升级至 v0.43 版本。
将 RosettaCommand 添加至应用根命令文件中。
在 initRootCmd(rootCmd, encodingConfig) 代码行之后,添加以下代码:
例如,在该根命令文件中,将 Rosetta 命令添加至第 96 行。
Line 96 源代码传送门:
https://github.com/ovrclk/akash/blob/master/cmd/akash/cmd/root.go#L96
应用根命令文件位于下方目录下的 server 包内。
我们已经将 Cosmos SDK 升级至与 Rosetta API 匹配的版本,因此只需更新应用根命令文件即可。
如需在应用命令行中运行 Rosetta,请使用以下代码:
如需在运行和已公开的应用中测试并运行 Rosetta API 终端,请使用以下代码:
appd rosetta --blockchain "your application name (ex: gaia)" --network "your chain identifier (ex: testnet-1)" --tendermint "tendermint endpoint (ex: localhost:26657)" --grpc "gRPC endpoint (ex: localhost:9090)" --addr "rosetta binding address (ex: :8080)"下一步计划
当前在 Cosmos SDK 中落地的 Rosetta API 每次只能支持一条链。我们会一如既往地在 Cosmos SDK 中不断开发新功能并增强现有功能,在未来版本中将会有客户端显示实时构建编解码器和接口注册表的功能。
我们期待可以通过 Rosetta API 终端实现在无需使用特定编解码器的情况下,在正在运行的多条链中实时查询和同步写入交易。加入我们的旅程,更多更新敬请期待!
来源:COSMOS
来源:linjm1227
来源:中币网 https://www.zhongbi.net/news/blocknews/281404.html 声明:登载此文仅出于分享区块链知识,并不意味着赞同其观点或证实其描述。文章内容仅供参考,不构成投资建议。投资者据此操作,风险自担。 此文如侵犯到您的合法权益,请联系我们3111859717@qq.com,我们将第一时间处理。