对于区块链开发团队,除了链本身的开发之外,最重要的就是如何与链进行交互了。一般来说 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)。先看下目录结构
hide/ ├── 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::::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::(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” 加入波卡群
点个 “在看” 再走吧!
声明:本内容为作者独立观点,不代表 CoinVoice 立场,且不构成投资建议,请谨慎对待,如需报道或加入交流群,请联系微信:VOICE-V。
简介:波卡(Polkadot)第一中文社区,带你寻找 Web 3.0 时代新机遇!
评论0条