polkascan开发更新第5期——Substrate 接口

Web3scan的作用是访问和读懂多链数据。而我们正在为polkadot生态系统开发一个多链勘探和数据分析平台。
头等仓APP下载

polkascan开发更新第5期——Substrate 接口
Web3scan的作用是访问和读懂多链数据。而我们正在为polkadot生态系统开发一个多链勘探和数据分析平台。

本次更新是我们为polkadot生态系统开发了一个丰富的Substrate Interface(API),供任何基于Substrate的区块链完整解码区块链的运行时。本次更新交付了一个通用的丰富的SubstrateAPI和SubstratePython库。

波卡公司正在构建多链探测和数据分析技术,特别是Polkascan的多链探测技术。第一波资助金资助了两个python库:

· Py-Scale-Codec

Substrate不能得知运行时数据,它的数据采用的是SCALE Codec编码。而我们的Python SCALE-Codec库是轻量级、高效的二进制序列化和反序列化编码解码器的Python实现。当与JSON-RPC API交互时,编码解码器能让用户处理有意义的数据。

· Py-Substrate-Interface

当请求Substrate节点提供所需数据时,Python Substrate Interface库为重复的任务提供了一个基于Python的抽象层。

之前的开发限制了这些库满足区块浏览器的需求。这次我们扩展并完善了两个库的功能,现在远远能满足区块浏览器的需要。现在不需要区块浏览器用例中那些丰富的数据库,就能访问和读懂多链数据。

波卡团队从第一天开发Polkadot生态系统就信心满满,我们认为Substrate和Polkadot运行时环境将解决许多区块链业内问题。此外,我们在Python方面投入了大量资金。本项目(指Substrate Interface)旨在降低Python与基于Substrate的链的摩擦,Python库的完成将使波卡生态系统中的许多团队受益。最重要的是,这项资助工作让Python开发人员可以与现有的或新的Python应用程序或任何其他语言的应用程序与现有的和新的Substrate链集成。

1. 开始入门

此次开发更新能让你运行一个自己的丰富Substrate Interface。

1.1.Github上的Substrate Interface

资源库:可以在我们的Github organization找到丰富的Substrate Interface源代码。Github organization由许多不同的资源库组成,共同组成了丰富的Substrate Interface。我们在这些资源库中为分支和发布的版本采用了许多约定。
polkascan开发更新第5期——Substrate 接口

分支:每个资源库的主分支中都包含了我们最近的工作。

版本:本次的开发更新版本号为“v0.9.x”。

1.2.Substrate Interface的组件有哪些?

Substrate Interface由许多不同的软件组件组成,这些组件共同协调接口。Substrate Interface API提供了JSON-RPC端点,在Python Substrate Interface库和Python SCALE编解码器库的帮助下,能与Substrate的标准JSON-RPC接口进行大量交互。Substrate Interface GUI已经作为一个基本的用户接口来展示如何在前端Typescript应用程序中应用丰富的接口。我们选择为所有组件提供完整的Docker支持,因此所有资源库的根目录中都有dockerfile。虽然这四个不同的组件的丰富的Substrate Interface可以在其他项目独立应用,我们还是开发了第五个软件Substrate Interface,它能用Docker Compose粘合所有组件。

1.3.要求

· 推荐硬件:内存:>2GB(越大越好),存储:>5GB (SSD更好),处理器:内核越多越快越好(Intel i3)。

· 软件要求:Git、Docker、Docker Compose。

· 在Mac、Linux和Windows上测试丰富的Substrate Interface。

1.4.运行Substrate Interface

本段是运行v0.9的逐步指南。*在自己的计算机上发布丰富的Substrate Interface。本段中的说明也可以查看我们的Github资源库。

· 克隆资源库:

git clone https://github.com/polkascan/substrate-interface.git

· 转到新文件夹:

cd substrate-interface

· 检查可用的标记版本:

git tag

· 检查最新的0.9.x版本范围(用最高的数字代替“x”):

git checkout 0.9.x

· 初始化并更新子模区块:

git submodule update——init——recursive

· 建立和初始化其他容器:

# Default public Kusama CC3 node by Parity Technologies

docker-compose up --build

# OR

# Local Kusama CC3 archive node

docker-compose -f docker-compose.kusama-cc3-local.yml up --build

· Substrate Interface API现在可在Postman使用:http://127.0.0.1:8000

· Substrate Interface GUI现在可以在浏览器中使用:http://127.0.0.1:8001

polkascan开发更新第5期——Substrate 接口
1.5.注意事项

第1.4节中的步骤6为Kusama CC3构建并运行一个使用奇偶校验技术(wss:// Kusama-rpc.polkadot.io/)的公共Substrate节点的Substrate Interface。替代方案是为Kusama CC3运行一个完整的本地存档节点。如果你需要更高的性能(network i/o),或者在使用公共节点设置永久WebSocket连接时遇到防火墙问题,那么运行本地节点可能会帮到你。

1.6.清理

下面的[docker]命令可以帮你清理。

· 停止用Docker的容器编写文件。

docker-compose down

# OR

docker-compose -f docker-compose.kusama-cc3-local.yml down

· 删除所有未使用的容器、卷和映像

docker system prune

[confirm] Y

· 删除所有容器和图像

docker system prune -a

[confirm] Y

· 删除所有卷

docker volume prune

[confirm] Y

2. Substrate Interface API

Substrate Interface API为Substrate节点提供了JSON-RPC接口,与普通Substrate节点的JSON-RPC接口完全兼容。例如,RPC中的chain_getBlock提供了当前区块链头部区块的详细信息。RPC中的rpc_methods为所有已知组(例如作者、链、状态、系统等)提供了一个受支持的RPC-methods发现机制。

Substrate Interface API扩展了可用的RPC-methods,使用一个全新的组:运行时,用当前和曾经的Substrate节点所有运行时数据丰富了JSON-RPC接口。

扩展后的RPC-methods允许使用不同粒度级别的运行时元数据发现机制,如:模区块、调用函数、存储函数、事件、常量、错误和类型注册表。反过来也就是说,这些发现机制支持在运行时元数据解码的语境下,查询Substrate节点存储,并允许在运行时元数据编码语境下,组合交易。这些组合交易依次等待外部钱包或签署者进行签名,例如Parity Signer(奇偶签名人)。

当前和扩展的RPC-methods已完全收录在Postman Collection。收录的文档为所有当前和扩展的RPC-method提供了测试示例,你可以点击Postman Collect文件屏幕上方的‘Run in Postman’,轻松地将文档导入到自己的Postman应用中。执行完入门指南后,通过URI: http://127.0.0.1:8000就能在Postman使用Substrate Interface API,你需要先在Postman Collection中预置这个URI。

polkascan开发更新第5期——Substrate 接口

Substrate Interface API为Substrate节点提供了丰富的JSON-RPC接口。JSON-RPC标准是一个通用的接口信封,无论在怎样的开发环境下,任何开发人员都可以使用。Postman Collection文件为所有RPC-methods提供了多达25种开发环境(c#、cURL、Go、Java、Javascript、NodeJs、OCaml、PHP、Python、Ruby)的代码片段。

polkascan开发更新第5期——Substrate 接口

应能说明波卡奖助金项目具有广泛适用性。
polkascan开发更新第5期——Substrate 接口

3.Substrate Interface GUI

遵循了上述的入门指南后,浏览器接入URI:http://127.0.0.1:8001便可使用Substrate Interface GUI。

polkascan开发更新第5期——Substrate 接口Substrate Interface GUI提供了三个通用组件,执行原始rpc、查询链状态和组合交易。这些组件复制了类似的Polkadot JS应用程序各自的功能,却不需要使用Poldadot的Typescipt/Javascript库。下表提供了接入Substrate Interface GUI组件及其对应的Polkadot JS应用程序的超链接。

| Section      | Substrate Interface GUI | Polkadot JS Apps |                 

|--------------|-------------------------|------------------|

| Raw RPC      | link                    | link             |

| Chain State  | link                    | link             |

| Compose Call | link                 | link             |

执行原始远程进程调用(RPC)

rpc-method控件收录了Substrate Interface提供的所有远程进程调用方法。包括所有原生的Substrate客户端方法,因此与常规的Substrate客户端完全向后兼容。此外,还有大量的新方法可用于该项目的资助工作。例如,在任何区块高度(通过区块号或区块哈希)查询Kusama CC3运行时的TypeRegistry。

polkascan开发更新第5期——Substrate 接口

查询运行时链状态

存储函数控件收录了运行时的所有存储函数。例如,在任何区块高度(通过区块号或区块哈希)都可以轻松查询ss58编码帐户地址的FreeBalance。

polkascan开发更新第5期——Substrate 接口

组合调用(未签名的交易有效负载)

调用函数控件收录了运行时的所有调用函数。传输交易有效负载可以组成一个ss58编码的帐户地址。未签名的交易有效负载可以由外部钱包或签名者(如奇偶签名者)签名。这有待进一步研究,需要通过二维码实现通用离线签名。因此,外部签名仍然超出了该项目交付的范围。
polkascan开发更新第5期——Substrate 接口

注:Substrate Interface GUI主要是为了方便演示如何在Typescript (Angular)应用框架中应用Substrate Interface API (section 2)。也就是说Substrate Interface GUI还远远不够完善,尚待提升性能。例如:针对三个组件的输入参数类型做动态输入控制解析。但这个功能超出了本项目的范畴。

4. Python Substrate Interface

Python Substrate Interface库专门与Substrate节点交互,处理SCALL编码与解码(Substrate JSON-RPC的默认输出和输入格式)、元数据解析、类型注册表管理和类型版本控制变得更加便捷。Substrate Interface库是供Substrate Interface(当然还有更广泛的Polkascan堆栈)使用的。

polkascan开发更新第5期——Substrate 接口

本次的资助项目完成了Python Substrate Interface的通用功能,并能作为独立的Python库使用。

资助工作提供了一个完整的工件堆栈,来说明如何应用这个库。也就是说,这个库可以在任何基于python的应用程序中独立应用。存储库根中的readme提供了如何在自己的Python项目中使用PyhtonSubstrate Interface库的详细信息。

初始化

初始化接口,得到Kusama CC3链的头部区块散列。因为还没有重用连接,WebSocket支持目前仍然非常有限。在对http的支持得到改进之前,建议将http -endpoint与本地替换节点(例如http://127.0.0.1:9933)一起使用。

substrate = SubstrateInterface(

 url="wss://kusama-rpc.polkadot.io/",

 address_type=2,

 type_registry_preset='kusama'

)

substrate.get_chain_head()

Readme中包含一些额外的示例,这些示例演示了如何获取特定区块的extrinsics、调用存储和组合未签名交易的有效负载。

5. Python SCALE编解码器

Python SCALE编解码器库是一个轻量级、高效的二进制序列化和反序列化编解码器。Python SCALE编解码器供Python Substrate Interface(当然还有更广泛的polkascan堆栈)使用。

本次的资助项目完成了Python SCALE编解码器的通用功能,并能作为独立的Python库使用。

通过Pdoc可以获得完整的Python库文档。

polkascan开发更新第5期——Substrate 接口

此外,部分资助工作是提供一套广泛的单元测试,确保库的功能的质量与一致性。这些单元测试还需要为Python开发人员就关于如何利用库的丰富特性提供适当提示。Python SCALE Codec的单元测试包括以下组件:元数据、类型编码、类型注册表、核心SCALE类型和组合交易负载。
polkascan开发更新第5期——Substrate 接口

单元测试的输入说明了如何使用ss58编码的帐户地址或十六进制的公钥来区分帐户,还解释了如何使用十进制表示转账金额。单元测试的输出是一个未签名的交易有效负载,它可以由外部钱包提供者或签名者进行签名,例如奇偶校验签名者(如第2节中介绍的Substrate Interface GUI所示)。单元测试使用预期的输出来评估库方法的质量。组合交易负载组件的所有单元测试的预期输出的基线,已经被Polkadot JS应用程序收集作为参考客户端。

由于单元测试是针对最近的Kusama CC3运行时(1040)而设置的,所以我们相信Python SCALE Codec会符合SCALE Codec (JS和RUST)的参考客户机的特性要求。

6.应用前景

本次开发更新和交付成果,已经超出了我们在拨款申请中提到的工作量。这个项目可以成为任何非typescript应用程序开发人员与任何Substrate运行时交互的首选库/应用程序。该项目的组件为Substrate运行时提供了丰富的API,并提供了完整的解码环境。我们的团队将继续开发和完善本次开发更新中所涉及的组件。

6.1.近期开发活动

· 新员工培训网络

Substrate Interface目前支持Kusama CC3。我们的目标是为所有主要公共Substrate网络提供交钥匙服务。

· WS-support

扩展目前有限的WebSocket支持的Substrate Interface。

· 重构区块浏览器资源库

Substrate Interface可以让开发人员在现有的区块浏览器资源库中更好地分离关注事项。进行大量的重构,改进和清理区块浏览器资源库的代码库。

· 奇偶签名者支持

未签名的交易有效负载可以由外部钱包或签名者(如奇偶签名者)进行签名。有待进一步的研究,需要通过二维码实现通用离线签名。

· 发布测试版

Substrate Interface v1.0测试版不久后将发布。

6.2.未来重大项目的探索

Polkadot JS应用替代方案

本次开发更新完成了大量底层功能完整的Python库。我们即将摸索开发一个完全基于Python堆栈的完整Polkadot JS应用程序。这种方法对广大社区的吸引力在于,它提供了一个完整的Polkadot JS应用程序替代方案,而不依赖于基于Javascript/Typescript的库。对于更广泛的Polkadot/Substrate社区来说,Polkadot JS应用变得越来越重要,从风险管理的角度来看,社区将从一个完全独立的替代方案中受益。

· 基于python的Polkadot运行时环境

python库符合我们“构建完整基于python的Polkadot运行时环境(PRE)实现”的中长期目标。构建Python PRE的关键组件有:
1)SCALE-codec
2) Trie DB
3) Libp2p网络
4)Consensus Babe/Grandpa
5)WASM解释程序
一些组件(3和5)可能很快就会在社区中应用。

关于Polkascan和Web3scan

Polkascan通过提供区块勘探和数据分析技术,为Polkadot生态系统做贡献。我们将持续更新多链浏览器平台polkascan.io。你可以通过以下公共资源跟踪项目进展:Medium、Twitter和GitHub,如果你想看中文版,可以关注头等仓。

本文由 区块链资讯平台头等仓 作者:Mark 发表,其版权均为 区块链资讯平台头等仓 所有,文章内容系作者个人观点,不代表 区块链资讯平台头等仓 对观点赞同或支持。如需转载,请注明文章来源。
头等仓APP下载

发表评论