【ブロックチェーン】Symbolを使った開発

プログラミング勉強

なんと、暗号資産(仮想通貨)・ブロックチェーン案件を対応することになりそうで、Symbolブロックチェーンを使ったトークンで色々したい、という内容になりそうなので、調査がてら記事を書きます。

調査、開発の進捗に沿って追記していく予定です。

Symbolとは

大きく2つの意味があります。

  • ブロックチェーンの1つ
  • 上記ブロックチェーンのネイティブトークン(XYM)

開発者目線としては、XYMの存在を認識しつつも、あくまで前者を意識するようにします。

やりたいこと

Symbolブロックチェーンを使って独自トークンを作成し、そのトークンをポイントのように扱いECと連携します。

なので、

  • 独自トークン作成
  • 独自トークンの付与、移動ができるAPIを作成
  • 上記APIをECと連携

ざっくりと上記が必要そうです。

前提として必要なアプリケーション

先に以下のアプリケーションがyumなどでインストールされていないと、以降のインストール作業が出来なかったりエラーになったりするので、もしない場合はあらかじめインストールします。

  • Git
  • gcc-c++
  • docker(symbol-bootstrapで利用。エラー出たらdocker.sock の権限を環境に応じて変更)
  • anyenv + nodenv(これはなくても良いが、あったほうが何かと便利)

まずはCLIをインストール

Symbolの開発に使う、CLIをインストールします。
手順は以下の公式サイトを参考にします。
https://docs.symbol.dev/getting-started/setup-workstation.html

前提として、nodeが必要なようなので、もしない場合は先にインストールします。

ちなみに僕の場合は最初、nodeのバージョンが16だったのですが、CLIをインストールしたら、エラーになってしまいました。

なので、nodevで12の最新バージョン(12.22.10)に変更しました。

その上で、SDKをインストールしたら成功しました。Warningがそこそこ出ましたが。。。

nodenv install 12.22.10
nodenv local 12.22.10
nodenv versions
npm install --global symbol-cli

インストール後、symbol-cli コマンドが動けばインストール成功です。

% symbol-cli

  Symbol CLI v1.0.1

  USAGE

    symbol-cli <subcommand>

  SUBCOMMANDS

    account     - Get account related information
    block       - Get block related information
    chain       - Get chain related information
    converter   - Convert between data types
    metadata    - Get metadata related information
    monitor     - Monitor blocks, transactions and errors
    mosaic      - Get mosaic related information
    namespace   - Get namespace related information
    node        - Get node related information
    profile     - Manage profiles
    restriction - Get restrictions related information
    transaction - Announce transactions
   

ここまでで、ひとまずCLIのインストール完了です。

ノードについて

次にアカウントを作成しますが、ノードのサーバを正しく入力する必要があります。

ノード情報はネットに色々載ってはいるのですが、どこもうまく接続できず、仕方ないので、これも勉強ということで自分のローカルでノードサーバを立ててみたいと思います。

公式のDocumentも参照。
https://docs.symbol.dev/ja/guides/network/using-symbol-bootstrap.html

symbol-bootstrap を入れます。

npm install -g symbol-bootstrap

※最初、Nodeのバージョンが12だとうまくインストールできなかったので、nodevで14.19.0に変えました。

以下のような設定ファイル(.yml)を作成します。

nodes:
    -
        friendlyName: [好きな名前]

その後以下コマンドを実行。

symbol-bootstrap config -p testnet -a dual -c [設定ファイルの名前]

これで設定ファイルが作成されました。

続いて、docker-compose.ymlを以下コマンドで作成します。

symbol-bootstrap compose

そして以下コマンドでコンテナ起動します。-d はdocker compose本家と同じく起動完了したらコマンド入力出来るようになります。

symbol-bootstrap run -d

これで起動しました。 http://localhost:3000 にアクセスしたら以下のようなJSONが出力されます。

{"code":"ResourceNotFound","message":"/ does not exist"}

そして、symbol-cli コマンドでアカウントを作ってみましょう。
公式Documentも参照。
https://docs.symbol.dev/ja/getting-started/setup-workstation.html

% symbol-cli account generate
✔ Select the network type: › TEST_NET
✔ Do you want to save the account? … yes
✔ Select an import type: › PrivateKey
✔ Enter the Symbol node URL. (Example: http://localhost:3000): … http://localhost:3000
✔ Enter a profile name: … pustaponte
✔ Enter your wallet password: … ********
✔ Do you want to set the account as the default profile? … yes
┌──────────────────┬──────────────────────────────────────────────────────────────────┐
│ Property         │ Value                                                            │
├──────────────────┼──────────────────────────────────────────────────────────────────┤
│ Name             │ pustaponte                                                       │
├──────────────────┼──────────────────────────────────────────────────────────────────┤
│ Address          │ TD4K5T-YKTUG6-SMUCKW-5TL2N6-V7ECQV-ZMEROR-6TY                    │
├──────────────────┼──────────────────────────────────────────────────────────────────┤
│ Network          │ TEST_NET                                                         │
├──────────────────┼──────────────────────────────────────────────────────────────────┤
│ Node URL         │ http://localhost:3000                                            │
├──────────────────┼──────────────────────────────────────────────────────────────────┤
│ Generation Hash  │ 7FCCD304802016BEBBCD342A332F91FF1F3BB5E902988B352697BE245F48E836 │
├──────────────────┼──────────────────────────────────────────────────────────────────┤
│ Network Currency │ name: symbol.xym, divisibility: 6                                │
├──────────────────┼──────────────────────────────────────────────────────────────────┤
│ Profile type     │ PrivateKey                                                       │
├──────────────────┼──────────────────────────────────────────────────────────────────┤
│ Password         │(パスワード)                                                         │
├──────────────────┼──────────────────────────────────────────────────────────────────┤
│ Private key      │ CC186D0CD44D2EE6B5B24595C6D20F788B008BE60426EC0793F4B5F321A00EF3 │
└──────────────────┴──────────────────────────────────────────────────────────────────┘

SUCCESS Stored pustaponte profile

こんな感じで作成アカウントの情報が表示されれば成功です。

ひとまずこれで最低限の環境が出来ました。