Pirichainを触ってみる

以前、データをブロックチェーン上に取り込む可能性について考えたことがありました。
そんな中、昨年に登場したPirichainに興味を持ちました。
今回は、Pirichainを試してみた結果、その特徴や動作概要についてご紹介したいと思います。

## Pirichainとは
ブロックチェーンの基盤を提供していくれている団体は非常に多く存在します。
PirichainもEthereumやPolygon/MATICと同様にブロックチェーンエコシステムとして基盤を提供してくれています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2849535/957b9935-c7d6-0c3c-7b5a-5e3513846d94.png)

**※ 公式サイトから抜粋**
Pirichainは、企業が独自のエコシステムを構築できる先進的なBaaSテクノロジーです。データとアセットのブロックチェーン上での透明かつセキュアな取引を実現し、スマートシナリオにより低コストかつ意味のあるデータ処理を実現します。Pirichainは各業界での革新をもたらし、健康、金融、教育など幅広い領域で利用可能です。柔軟で効率的なデータエコシステムの構築をサポートし、多様なデータを統合的に管理できます。また、ブロックチェーンの信頼性と透明性を活かし、未来志向のテクノロジーをサポートしています。

公式サイトはこちらから：

https://pirichain.com/

## Pirichainの特徴的な機能
今回は、Pirichainのエコシステムを利用してどのようなことができるか検証してみました。
検証を進める中で気になった点をご紹介いたします。
なお、各機能の詳細は、Pirichainホワイトペーパを参照ください。

https://whitepaper.pirichain.com/v1.0.3/

なお、個人的には特に興味あった内容は、以下の2点です。

* ブロックデータに各種情報(Key Value形式)を安価に埋め込むことができる。
* ブロックデータに埋め込む際に暗号化機能を持ち備えており、情報の複合も他ユーザ間で行える。
※ 各種データベースとの連携アダプタも備えているということですが、こちらはアダプタを入手することができず、検証ができませんでした。

今回検証してみて私が感じた特徴的な点を以下に紹介します。

### 1\. ブロックチェーン上に安全な情報の埋め込みが可能
Pirichainでは、ブロックデータに特定の情報を安価に埋め込むことが可能です。このブロックデータはパブリックに公開されていますが、暗号化機能が備わっており、送信者と受信者（情報を公開する者と閲覧する者）は公開キー方式を利用して、お互いに内容を確認できます。
この機能には非常に興味があった点であり、詳細は別途紹介させていただきます。

### 2\. アカウント（アドレス）の定義
アカウントを生成する際には、Pirichainの事前に設定されたバックエンドと通信する機能を利用します。
生成されるアカウントには通常利用を目的としたものだけでなく、運用に特化したアカウントも用意されています。
アカウントを生成した後、必要に応じて運用アカウントに切り替えることで、そのアドレスを運用目的で利用可能です。
これにより、運用アカウントを介して暗号化された情報を復号し、安全に情報を共有できます。
詳細については別途ご紹介いたします。

### 3\. スマートコントラクト（Chaincode）の利用
スマートコントラクトは、Pirichainでは「スマートシナリオ（Smart Scenario）」と呼ばれ、JavaScript言語でのソースコードの記述が可能です。
※ ホワイトペーパには、Typescriptという言葉もありますが、今回はJavaScript言語で検証をしました。

### 4\. Pirichainにおける独自トークンの発行
Pirichainでは、Pirichain団体が事前に用意した「createToken」という機能を使用することで、独自のトークンを簡単に発行することができます。
一般的に、他のブロックチェーンではERC-20に対応したソースコードをデプロイすることで独自トークンを発行します。しかし、Pirichainでは異なるアプローチが採用されています。

### 5\. Virtual Machine
他のチェーンが多く採用している、EVM（Ethereum Virtual Machine）互換ではなく、Pirichainは、独自のアーキテクチャを採用しています。

### 6\. Javascript(Typescript)クライアント用ライブラリ
クライアント用のライブラリは、以下のサイトから入手可能です。
実際の実装例については、また別途ご紹介いたします。

https://www.npmjs.com/package/@pirichain/core

### 7\. Pirichain機能を利用するためのAPIの提供
Pirichainの機能を利用するために、すべてAPIが用意されています。
以下のページから実際にAPIを実行するためのUIが提供されています。
APIの公式ページはこちらから。

https://docs.pirichain.com/

:::note warn
上記のページからリクエストを実行する際には、TestnetおよびMainnetへのリクエストが混在しています。
全ての機能を確認する場合は、Postmanやcurlコマンドの実行環境を別途用意し、適切なエンドポイントを指定して実行することをお勧めします。
:::

### 8\. Testnetの利用
Testnet上で挙動を確認するうえで、ソースコードのデプロイやリクエスト実行を行います。
その際に必要になるのがTestnet用のPIRIトークンです。
PirichainではFausetサイトは存在しておらず、Testnet用のPIRIトークンが必要な場合は、Testnet用のアカウントを作成後、トークン発行関数APIを実行します。
もしくは、Pirichianサポート窓口に問い合わせて、PIRIトークンを送付してもらいます。
詳細は別途紹介いたします。

## PirichainのTestnetで動作確認した点
動作確認するにあたり、以下の操作を行いました。
詳細については、別途紹介します。

* アカウント（アドレス）の発行
* Testnet用PIRIトークンの入手
* 独自のトークンの発行
* スマートシナリオ（Smart Scenario）の操作 ※デプロイはせずテスト実行のみ
* ブロックデータの書き込み
* 通常アカウントと運用アカウントの挙動確認
* ブロックデータの暗号化と復号処理の検証

## Pirichainを検証してみての所感
当初から気になっていた、ブロックデータへの情報掲載方法や暗号化、複合処理、そして運用アカウントを利用した情報の安全な運用など、一通りの機能が提供されており、非常に有用なチェーンであると感じました。

## 今後は
このような機能を運用する際に、私は個人的にはWeb3.0の観点からクライアント用のウォレットが必要かなと感じました。鍵の管理が重要であるという認識があり、Metamaskのようなブラウザと連動するツールがあると便利かなと考えています。
次回はクライアント側のフロントエンドを実装してみたいと思います。