LibraVistaのlibra-vista-apiとLibra CoreのgRPC概要

2019年7月9日

LibraVistaは、Facebook Libra のテストネット(Testnet)のエクスプローラーを提供するサービスです。

 

そのLibraVistaが、アカウント状態の取得や、Libraの発行(mint)を行うAPIサービスとしての「libra-vista-api」を公開しました。

 

libra-vista-api

 

なおLibraのアカウント(アドレス)自体は、事前に作成しておく必要があります。下記の関連ページをご参照下さい。

 

FacebookのLibra Testnetを試す[送金][mnemonic][recover]

 

 

例えばリクエストした任意のアカウント(アドレス)において、その状態として下記のようなレスポンスがJSONとして返ってきます。

addressはリクエストしたアカウントのアドレスです。balanceはそのアドレスが保存しているLibraの量、そしてLibraを受け取った回数(receivedEventCount)などが表示されているのが確認できます。

 

 

 

Libra Core と gRPC


 

Libra Core(Testnet)のソースは下記リンクのGithubにおいて公開されていますが、主にRust言語によって記述され、多くの.protoファイルが存在するのが確認できます。

 

https://github.com/libra/libra

 

Libraは、client(クライアント)とvalidator(検証者)間においてgRPCによる通信がおこなわれています。また様々な.protoファイルには、そのメッセージとインターフェイスが定義されています。このような仕組みによってイーサリアムにおけるweb3.jsと同じようなモジュールを、様々な言語によって構築できます。

 

 

 

https://developers.libra.org/docs/assets/papers/the-libra-blockchain.pdf  から抜粋

 

 

そのようなgRPCでの仕様をラップし、HTTPによるAPIとしてテストネットを利用できるようにしたのが、libra-vista-apiです。

 

実際にLibraの本番環境が可動した時に、Moveによるスマートコントラクトも含めどのような開発の流れになるのかはまだまだ分かりませんが、2020年においてはFinTechにおいてもAPIエコノミーとしてのアプリ構築の流れがいよいよ加速していきそうです。

 

 

gRPCでLibraのTestnetと接続


 

下記コードはNode.jsによるコードで、gRPCによってLibraのTestnetと接続するクライアントを記述しています。具体的にはアカウント(f7550da222f〜)をリクエストし、そのアカウントの状態がバイナリデータとしてレスポンスされる機能を実装しています。

 

client.js

3行目

admission_control.proto には、上述で引用したイラストの「admission control」機能に関するメッセージとインターフェイスとしてのServiceが記述されています。27行目のupdateToLatestLedgerはそのメソッドの一つで、admission_control.protoには下記のように記述されています。

リクエストとしてUpdateToLatestLedgerRequest、レスポンスとしてUpdateToLatestLedgerResponseが指定されているのが確認できます。この2つのメッセージの具体的な内容は、importされているget_with_proof.protoファイルで定義されています。つまりアカウントの状態(account state)は、このupdateToLatestLedgerメソッドがクエリの役目となり、定義されたメッセージをリクエストすることにより取得できます。

 

18行目

ac.testnet.libra.org:8000 と接続しています。Node.jsによるgRPCの記述は下記ページをご覧下さい。

 

Node.jsではじめるgRPC

 

 

 

起動の方法

 

まずプロジェクトを作成し、Node.jsでのgRPC実装に必要な2つのモジュールをインストールします。

 

プロジェクト内で上述したファイル(client.js)を作成したら、同ディレクトリ上にprotoディレクトリを作成します(mkdir proto)。その中に admission_control.proto ファイルと、依存する他の.protoファイルも配置します。依存するファイルは主に libra/types/src/proto/ 内にあります。

 

本記事でのprotoディレクトリ内のファイル一覧

 

client.jsを起動させます。

レスポンスとしてのアカウントの状態は、バイト列として返ってくるので(上述4行目のblob)、実際にはこの文字列からデータを切り出す必要があります。

 

参照ページ

Unpacking AccountResource in Python

 

 

参照ページ


 

‘libravista-api’, a developer-friendly API to Libra chain data, is released

 

Admission Control

 

Libra gRPC

 

 

 

LINEで送る
Pocket

Copyright © 2019 思考の葉 All Rights Reserved.  プライバシーポリシー