Substrate 的 RPC 客户端之 Subxt 入门篇
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,资深区块链开发者)
本周六的 Substrate 开发者聚会仅剩 16 个名额
本文作者 John Wu 也会到场分享哦~
点击下方卡片免费报名!
阅读更多:
开发了两年 Dapp、二层网络后,我转投了 Substrate 阵营
Substrate 区块链框架简介 | Hello, Substrate!
扫码关注公众号,回复 “1” 加入波卡群
点个 “在看” 再走吧!