每天进步一点点:使用rust编程读取hive区块链
前几天简单地了解了一下Rust语言,然后我就一直在思索,能用Rust编程做点啥呢?不能就写个Hello World啊,那学来也没啥意义呀。
(图源 :pixabay)
然后我想,能不能用Rust写个程序,实现对HIVE区块链的访问(读取信息)以及操作(发布信息,转账、点赞等)?
当然,作为一个初学者,要实现这样的功能,无疑是高难度挑战,但是我们可以一点点来嘛,咋说来着,九尺之台,起于垒土,千里之行,始于足下。
要用rust实现对HIVE区块链的访问,大致有三个要点需要攻克(把大象装冰箱分几步?):
- 了解响应的API
- JSON编解码
- 网络访问
了解响应的API
我们可以在Hive Developer Portal找到有关HIVE上各种API的详细信息。
以获取账户信息为例,相应的API为:condenser_api.get_accounts,下边是使用curl访问API的一个简单示例:
curl -s --data '{"jsonrpc":"2.0", "method":"condenser_api.get_accounts", "params":[["hiveio"]], "id":1}' https://api.hive.blog
其它各个API,基本上大同小异。
JSON编解码
通过上述示例,我们不难发现,数据以JSON形式传递给API节点,相应的,返回数据也是JSON格式。
这样就需要我们的程序,对JSON数据进行编码和解码,以便于传输数据和解读数据。
在rust中,有很多JSON库可以使用,serde_json就是其中一个很好用的库。
网络访问
访问API节点的过程,其实就是把编码好的JSON数据发送到网络,并读取回复的过程。
比如前边我们用curl的例子,就是把相应的get_accounts的JSON数据,发送给https://api.hive.blog节点。
同样,在rust中有很多支持访问网络的库,据说较为常用的是reqwest库,但是我试着写了几行代码,没用明白。所以我选择了curl库。
测试代码
下边是一段简单的测试代码:
use curl::easy::Easy;
use serde_json::{json, from_str, to_string_pretty, Value};
fn main() {
let account = "oflyhigh";
let json_data = json!({
"jsonrpc": "2.0",
"method": "condenser_api.get_accounts",
"params": [
[account]
],
"id": 1
}).to_string();
let mut easy = Easy::new();
easy.url("https://api.hive.blog").unwrap();
easy.post(true).unwrap();
easy.post_field_size(json_data.len() as u64).unwrap();
easy.post_fields_copy(json_data.as_bytes()).unwrap();
let mut response = Vec::new();
{
let mut transfer = easy.transfer();
transfer.write_function(|data| {
response.extend_from_slice(data);
Ok(data.len())
}).unwrap();
transfer.perform().unwrap();
}
let response_string = String::from_utf8(response).unwrap();
let v:Value = from_str(&response_string).unwrap();
let pretty_json = to_string_pretty(&v).unwrap();
println!("{}", pretty_json);
}
若要成功编译上述代码,还需要在项目的Cargo.toml文件中添加如下内容:
[dependencies]
serde_json = "1.0"
curl = "0.4"
然后运行cargo run就会下载安装相应的依赖并编译运行程序,成功运行后,就会格式化输出我账户的全部内容啦。
限于篇幅,只截取部分内容:
所以,貌似使用rust编程读取hive区块链也很简单的啦(中间之曲折我就不多哭诉了)。
小伙伴们可以开动啦,用rust做一个HIVE交易机器人咋样?帮我赔钱,呜呜呜。
相关链接
Leave 每天进步一点点:使用rust编程读取hive区块链 to:
Read more #cn posts
Best Posts From oflyhigh
We have not curated any of oflyhigh's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.