LINE Blockchain APIを使ってみる

# はじめに

つい先日[NFT総合マーケットプレイス「LINE NFT」 4月13日(水)に提供開始](https://linecorp.com/ja/pr/news/ja/2022/4171)というプレスリリースが出てNFTマーケットβが正式リリースになるんだなあと思いました。
開発者としてはコンテンツ流通がどうこうというよりはAPIでどこまで触れるんだろうとかが気になります。

そこで今回はまずLINE Blockchainの概要の説明からサービスの作成、APIリクエストまでをざっとやってみようと思います。

# LINE Blockchain

まず、LINEのBlockchainサービスを理解するためには以下のサービス名称をおさえておく必要があります。

1. LINE Blockchain
2. LINE Blockchain Developers
3. LINE BITMAX Wallet

## LINE Blockchain

LINE BlockchainはLINE社が運営しているプライベートチェーン・ネットワークです。

## LINE Blockchain Developers

LINE Blockchainを基盤として、それを利用するために必要な各種機能を提供する開発者向けプラットフォーム。トークンの作成・鋳造・転送・焼却、ブロックチェーンのトランザクションの記録・取得およびサービス管理機能を提供しています。

## LINE BITMAX Wallet

 LINEの仮想通貨ウォレットサービス。LINE IDユーザーが保有するトークンを取得・転送できます。現時点でNTFマーケット機能がβ版で提供されています。LINE Blockchain Developers APIでLINE BITMAX Walletの各種機能を利用できます。

各種サービスの連携は下図のように説明されてます。

![68747470733a2f2f696d672e6573612e696f2f75706c6f6164732f70726f64756374696f6e2f6174746163686d656e74732f333530352f323032322f30332f30372f31303835362f35663063336232372d346566372d343464372d396564622d3436626431343234336233362e706e67.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/313d23a5-04c4-f8e0-d526-43e155a6f755.png)


ざっくり言うとLINE Blockchainを利用した開発を始めるには、LINE Blockchain DevelopersにサインインしてLINE BlockchainのTestnetに参加するところからです。この時点でLINE BITMAX Walletの口座開設は必要ないはずですが、Mainetで実際にサービスを運用する際には必要になると思われます。

# LINE Blockchain サービスを登録する

とりあえず体系的なことはこれくらいにしてAPIを使う手順をやっていきます。

## LINE Blockchainサービスを作成する

[LINE Developer Console](https://developers.line.biz/console/)にサインインして新しいプロバイダを作成します。利用規約にチェックをいれて同意ボタンをクリックすると以下のようなダイアログが表示されます。継続するためには申請ボタンをクリックします。

![68747470733a2f2f696d672e6573612e696f2f75706c6f6164732f70726f64756374696f6e2f6174746163686d656e74732f333530352f323032322f30332f30372f31303835362f30666338633564332d316638382d343139612d626539632d6566656630353532633666392e706e67.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/ede46dcc-95ab-aacc-d2a5-7db314ef009d.png)


プロバイダが作成されると以下の画面からブロックチェーンサービスを選択します。

![68747470733a2f2f696d672e6573612e696f2f75706c6f6164732f70726f64756374696f6e2f6174746163686d656e74732f333530352f323032322f30332f30372f31303835362f64623231643934362d613733332d343865632d393962382d6263623033333437376665652e706e67.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/6d36c31d-afc5-f3d0-72c3-c5328305db2f.png)


チャンネル名やメールアドレスなど必要な情報を入力します。必須項目をすべて入力してから「チャンネルを作成してLINE Blockchain Developersに移動」をクリックします。

![68747470733a2f2f696d672e6573612e696f2f75706c6f6164732f70726f64756374696f6e2f6174746163686d656e74732f333530352f323032322f30332f30372f31303835362f66313333323961362d363463312d343732312d386661332d3863633832326433613837662e706e67.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/22d8fda0-77a4-641d-461d-094eeb306e5c.png)

![68747470733a2f2f696d672e6573612e696f2f75706c6f6164732f70726f64756374696f6e2f6174746163686d656e74732f333530352f323032322f30332f30372f31303835362f33313766643534632d663232382d346362302d623563352d6435643836643835643466652e706e67.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/f663402d-043d-5e06-5109-7808e4ca4ab9.png)

はじめてBlockchainチャンネルを作成する場合はLINE BlockchainのTestnetであるCashewに参加するための審査が行われます。審査結果は登録したメールアドレスに送信されるのでしばらく待ちます。

![68747470733a2f2f696d672e6573612e696f2f75706c6f6164732f70726f64756374696f6e2f6174746163686d656e74732f333530352f323032322f30332f30372f31303835362f36653030633961632d303266632d346661362d623137302d6434343937663634623536302e706e67.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/7d214bd4-ece9-c2d0-9184-12c2a469fed3.png)

承認されると以下のようなメールが届いてLINE Blockchainサービスが利用可能になります。

![68747470733a2f2f696d672e6573612e696f2f75706c6f6164732f70726f64756374696f6e2f6174746163686d656e74732f333530352f323032322f30332f30372f31303835362f35353531313237632d336537642d343430612d396131352d3264643138336532386339342e706e67.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/b263fc07-2ca2-b2af-f8db-81aea328caad.png)

作成したチャンネルのブロックチェーンタブをクリックすると`LINE Blockchain Developersに移動`というボタンがあるのでクリックします。

![68747470733a2f2f696d672e6573612e696f2f75706c6f6164732f70726f64756374696f6e2f6174746163686d656e74732f333530352f323032322f30332f32372f31303835362f31646530656633662d336332342d343433632d386462312d3264323534343765333838382e706e67.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/92890888-73f4-a029-4f5b-d32f309b1810.png)

チェーンに`Cashew`を指定。サービスカテゴリーとターゲット国・地域を任意に設定してサービス同意にチェックを入れ`作成`ボタンをクリックします。

![68747470733a2f2f696d672e6573612e696f2f75706c6f6164732f70726f64756374696f6e2f6174746163686d656e74732f333530352f323032322f30332f32372f31303835362f32353336613432642d633662642d343835612d393762312d3964633132663365623431642e706e67.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/065604c0-683e-ec97-13b4-d2b9a48c4ef1.png)

作成されたサービスの確認画面が表示されます。ここで表示される`API Key`と`API Secret`をメモ帳などに控えておきます。特に`API Secret`は今後再表示されないので忘れずにコピーしておきます。コピー後`確認`ボタンをクリックします。

![68747470733a2f2f696d672e6573612e696f2f75706c6f6164732f70726f64756374696f6e2f6174746163686d656e74732f333530352f323032322f30332f32372f31303835362f63663865376363352d356364632d343239612d623634632d3164323735326531356131642e706e67.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/4a68b279-e4c9-a870-fc79-62bf4b2043e3.png)

Secretをコピーしたかを確認する入力画面が表示されるのでコピーした`API Secret`を入力し`OK`ボタンをクリックします。

![68747470733a2f2f696d672e6573612e696f2f75706c6f6164732f70726f64756374696f6e2f6174746163686d656e74732f333530352f323032322f30332f32372f31303835362f36633663616638322d633234382d343539612d393937362d6235376331656531313664302e706e67.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/341262a5-8549-2466-90a2-53669934c814.png)

任意のWallet名を入力して新しいWalletを作成します。

![68747470733a2f2f696d672e6573612e696f2f75706c6f6164732f70726f64756374696f6e2f6174746163686d656e74732f333530352f323032322f30332f32372f31303835362f33366533663030612d333063322d346261622d396439362d3839383065626135393137312e706e67.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/a8e8b47e-92ae-76fe-e553-54c3f1b55a87.png)

作成されたWalletの`Wallet Secret`をコピーしておきます。

![68747470733a2f2f696d672e6573612e696f2f75706c6f6164732f70726f64756374696f6e2f6174746163686d656e74732f333530352f323032322f30332f32372f31303835362f34376561346665322d616161382d346432332d613066302d6438336434663465656134382e706e67.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/eb4f90e1-0f81-cca2-6e44-6bba9ee13cde.png)

`Wallet Secret`を入力して`OK`ボタンをクリックします。ここで作成したWalletは今後`Owner Wallet`、`受信Wallet`とも呼ばれます。

![68747470733a2f2f696d672e6573612e696f2f75706c6f6164732f70726f64756374696f6e2f6174746163686d656e74732f333530352f323032322f30332f32372f31303835362f64666666366537302d356661642d343461632d383662392d6163346330326439623837382e706e67.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/76c6eef4-680f-c44f-b806-8676c4890faa.png)

Service Tokenを作成します。任意の`Token名`、`Tokenシンボル`を入力して最下段の`作成`ボタンをクリックします。

![68747470733a2f2f696d672e6573612e696f2f75706c6f6164732f70726f64756374696f6e2f6174746163686d656e74732f333530352f323032322f30332f32372f31303835362f63393433633133332d633939642d346637642d626534312d3434323233633565393730342e706e67.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/5f71eacf-c1ef-c09b-7908-c70096b28723.png)

Walletを作成したときにコピーした`Wallet Secret`を入力して`OK`ボタンをクリックします。

![68747470733a2f2f696d672e6573612e696f2f75706c6f6164732f70726f64756374696f6e2f6174746163686d656e74732f333530352f323032322f30332f32372f31303835362f66386638383235372d653833632d343761632d616238302d3564663337656632633632392e706e67.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/04658667-8a45-ecde-abb6-6b186a123622.png)

Service Tokenが作成されました。`確認`ボタンをクリックします。

![68747470733a2f2f696d672e6573612e696f2f75706c6f6164732f70726f64756374696f6e2f6174746163686d656e74732f333530352f323032322f30332f32372f31303835362f34383332623466622d373834392d343332652d623064632d3930343631323933366136612e706e67.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/35071e65-2737-1912-dd7a-8559f74ede0d.png)

Item Token用の契約IDを作成します。`作成`ボタンをクリックします。

<img width="431" alt="スクリーンショット 2022-03-27 15.47.12.png (80.2 kB)" src="https://img.esa.io/uploads/production/attachments/3505/2022/03/27/10856/5f5f8931-08e5-4f12-8d8a-ba2cc948754a.png">

Walletを作成したときにコピーした`Wallet Secret`を入力して`OK`ボタンをクリックします。

![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f36313939352f30343635383636372d386134352d656364652d616262362d3662313836613132333632322e706e67.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/13c99718-6e39-5f37-3360-de16cb2807c5.png)

Item Token用の契約IDが作成されました。コピーしてから`確認`ボタンをクリックします。

![68747470733a2f2f696d672e6573612e696f2f75706c6f6164732f70726f64756374696f6e2f6174746163686d656e74732f333530352f323032322f30332f32372f31303835362f65336466356365612d653433312d343262622d613135362d6334333739303732316331362e706e67.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/eb73bc8e-9dbd-cec4-0645-5b81a921c33f.png)

これでブロックチェーンサービスが作成できました。

![68747470733a2f2f696d672e6573612e696f2f75706c6f6164732f70726f64756374696f6e2f6174746163686d656e74732f333530352f323032322f30332f32372f31303835362f65336466373865382d386435372d343832632d613737342d3265653663376365393430342e706e67.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/78f961ea-71fa-d202-8862-b6fbc5c9b40e.png)

# LINE Blockchain APIを叩いてみる

APIの使い方は[APIリファレンス](https://docs-blockchain.line.biz/ja/api-guide/API-Reference)に記載されています。これに従ってcurlなどで叩いてもいいのですが、[認証](https://docs-blockchain.line.biz/ja/api-guide/Authentication)の手続きがセキュアでやや複雑なため今回は簡単に[JavaScript SDK](https://docs-blockchain.line.biz/ja/sdk/javascript-guide)を使って基本的なAPIにアクセスしてみます。

# LINE Blockchain Developers SDK for JavaScriptを使ってみる

まず環境を準備してSDKをインストールします。

```shell
mkdir lbd-sdk && cd $_
yarn init
yarn add -D typescript ts-node
yarn add @line/lbd-sdk-js
yarn run tsc --init
mkdir src
```

[JavaScriptライブラリガイド](https://docs-blockchain.line.biz/ja/sdk/javascript-guide#test-to-get-server-time)に掲載されているサンプルコードを元にサーバー時刻を取得するコードを書きます。

```
vi src/index.ts
```

```src/index.ts
import * as devSdk from '@line/lbd-sdk-js';

const BASE_URL = 'https://test-api.blockchain.line.me';
const SERVICE_API_KEY = 'your own service api-key';
const SERVICE_API_SECRET = 'your own service api-secret';

const main = async () => {
  const httpClient = new devSdk.HttpClient(BASE_URL, SERVICE_API_KEY, SERVICE_API_SECRET);
  const res = await httpClient.time();
  console.log(res);
};

main();

```

`SERVICE_API_KEY`と`SERVICE_API_SECRET`の値はサービス作成のときに控えた`API Key`と`API Secret`に置き換えてください。

実行してみます。

```shell
yarn run ts-node src/index.ts

{
  responseTime: 1648366198361,
  statusCode: 1000,
  statusMessage: 'Success'
}
✨  Done in 1.70s.
```

正常にサーバー時刻が取得できました。SDKを使うと簡単ですね。

# おわりに

Blockchainサービスの登録方法は他のLINEサービスに比べて複雑だと思いますが、そもそもBlockchain開発自体の複雑性を考えるとBlockchain networkの参加からWalletの作成、トークンの発行までがすべてGUIで設定できるのはBlockchain初心者には易しいほうだと感じます。これからBlockchainを学びたいという初学者には開発のながれをざっと体験できるわかりやすい開発環境かもしれません。

今回はLINE Blockchainサービスを登録してSDKを使ってAPIにアクセスしてみるところまでやってみました。次回はTokenの取得や転送など具体的なAPIの使い方を探ってみようと思います。