每天进步一点点:从获取账户信息说起

获取账户信息是HIVE区块链最基本的功能之一,也是我们最常用到的功能。通过查询账户信息,我们可以知道账户的基本信息、账户的余额、账户的权限信息以及投票mana等等。

image.png
(图源 :pixabay)

但是你知道吗?是不用不同的API,获取账户信息的返回还有些差异呢,我们这里简单来介绍一下。

对节点(hived)直接发起请求

获取账户信息最方便的方式是对自己的节点发起请求,我本地运行着一个轻节点,用来做测试那是极其便利的。

获取账户信息有两种方式,一种是使用:database_api.find_accounts:

{'jsonrpc': '2.0', 'method': 'database_api.find_accounts', 'params': {'accounts': ['oflyhigh']}, 'id': 1}

另外一种是使用condenser_api.get_accounts

{'jsonrpc': '2.0', 'method': 'condenser_api.get_accounts', 'params': [['oflyhigh']], 'id': 1}

balance为例,不难看出,condenser_api对返回信息做了一些处理,使之更便于阅读:

Reveal spoiler

image.png

Reveal spoiler

image.png

除此之外,condenser_api的返回中还增加了一些内容,比如witness_votes等等

Reveal spoiler

image.png

所以说,简单来讲,condenser_api.get_accountsdatabase_api.find_accounts进行了一些包装,使其返回更多以及更加便于理解的内容。

对HIVEMIND API节点请求

尽管对轻节点使用获取账户信息API可以获取很多内容,但是还是有些内容获取不到,比如说上述两个调用,返回的posting_json_metadata等都是空的,又比如reputation等数据都是0。

Reveal spoiler

image.png

这样的话,可能我们就要对胖节点操作,而运行一个胖节点所需的资源还是很可观的,所以用户都去运行有些不太靠谱。所以最简单的方法还是使用公共的HIVEMIND API节点。

我没对HIVEMIND做更多的了解,但是我理解大意是把很多不是很重要的数据放到hivemind里,这样降低链本身的资源占用、提升链的处理能力。(如果理解不对请多指正)。

同样运行上述两个API调用,我们会发现大部分返回数据都是一致的,而posting_json_metadatareputation等则有了具体的内容:

Reveal spoiler

image.png

Reveal spoiler

image.png

结论

所以尽管是一个简单的获取账户信息功能,还有着不少的学问呢,比如说是使用condenser_api.get_accounts还是database_api.find_accounts,是对轻节点还是胖节点抑或是hivemind节点发起请求,这结果差异还是挺大的呢。

搞清楚这些并选择合适的方式,无疑会事半功倍,否则可就是事倍功半喽。