parity rpc查询usdt_Substrate 的 RPC 客户端之 Subxt 入门篇

7f72babf32a769fa2702529d5221a20c.png

Substrate生态系统中的RPC客户端

对于区块链开发团队,除了链本身的开发之外,最重要的就是如何与链进行交互了。一般来说UI的交互界面主要给一般用户使用的,而开发团队较多使用的是RPC客户端。

其实一个简单易用的RPC客户端会节省团队很多时间。以太坊并没有独立的RPC客户端(其实太坊独立的RPC客户端组件基本都在Javascript系统中),需要的时候只能从Geth或Parity-Ethereum中自己选取相应的组件自行拼装。这是我在从事以太坊开发的时候略有不满的地方。

而Substrate一下子就有两个独立的Rust原生RPC客户端!Parity的substrate-subxt和获得了W3F Grants的substrate-api-client。

目录结构

今天我们先来简单看一下substrate-subxt。(目前看来substrate-api-client的一个可能相对优势是它支持no_std)。先看下目录结构

src/
├── error.rs
├── events.rs
├── extrinsic.rs
├── frame
│   ├── balances.rs
│   ├── contracts.rs
│   ├── mod.rs
│   └── system.rs
├── lib.rs
├── metadata.rs
├── rpc.rs
└── runtimes.rs

大部分文件通过文件名就能看出其作用。lib.rs提供了我们所需要的客户端以及生产该客户端的工厂。frame文件夹提供了对Substrate frame同名模块的支持,而runtimes.rs适配了一个默认的Substrate runtime:DefaultNodeRuntime(该runtime包含frame目录下的那几个模块)。该runtime对于处理一般的转账和查询已经是够用了。

入门实战

这里我们用Subxt向Substrate链提交一笔转账,并查询账户的余额。先上代码:

use subxt::{
    balances::{
        self,
        BalancesStore,
    },
    DefaultNodeRuntime as Runtime,
    ClientBuilder,
};
use sp_keyring::AccountKeyring;

fn main() {

    // 整个client需要由tokio驱动。首先创建一个适配
    // DefaultNodeRuntime的客户端
    let mut rt = tokio::runtime::Runtime::new().unwrap();
    let client_future = ClientBuilder::<Runtime>::new().build();
    let client = rt.block_on(client_future).unwrap();

    // 为Alice创建一个transaction builder
    let signer = AccountKeyring::Alice.pair();
    let xt = rt.block_on(client.xt(signer, None)).unwrap();

    let bob = AccountKeyring::Bob.to_account_id();
    // 从Alice向Bob发起转账
    let transfer =
        xt.submit(balances::transfer::<Runtime>(bob.clone().into(), 10_000_000));
    rt.block_on(transfer).unwrap();

    // 查询Bob的余额
    // 需要注意的是,由于上一步只能确保转账已经被提交
    // 这里的余额一般还没来得及发生改变
    println!("{:?}", rt.block_on(client.free_balance(bob.into())).unwrap());
}

涉及到的依赖

[dependencies]
tokio = "0.1"
sp-keyring = { git = "https://github.com/paritytech/substrate/", package = "sp-keyring" }
subxt = { git = "https://github.com/paritytech/substrate-subxt", package = "substrate-subxt" }

然后先跑一个Substrate的dev结点(目前的master就可以),就可以欢快地运行我们的程序和链进行交互啦。怎么样,Substrate生态中的RPC客户端是不是非常好用呢~

PS: 截止目前Subxt还有个小Bug导致编译可能无法通过,大家可以自己努力尝试解决下~

作者:John Wu(Cdot CTO,资深区块链开发者)

4d6e7839430c5daec7710640ceeedf46.png


开发了两年 Dapp、二层网络后,我转投了 Substrate 阵营
Substrate 区块链框架简介 | Hello, Substrate!

视频|Substrate 区块链开发范式简介

扫码关注公众号,回复 “1” 加入波卡群

98226896cc96658c83a4b3f46a996b08.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值