Skip to content

Pontus-X のデータサービス提供物

Pontus-X の世界では、データサービスはキーワード dataset で識別されます。このキーワードは、アセットを記述するメタデータオブジェクトの中や、Pontus-X の各ポータルで確認できます。

Pontus-X のコンポーネントは、オープンソースの Ocean Protocol プロジェクトを基盤としています。本ドキュメントが扱うのは Pontus-X エコシステムの機能の一部にすぎません。Ocean Protocol の技術スタックについて詳しくは、Ocean Protocol 公式ドキュメント を参照してください。

よくある質問

データを Pontus-X にアップロードする必要がありますか

いいえ。 データは現在の保管場所にとどまったまま Pontus-X のコンポーネントと接続されるため、自らの管理下の環境から出ることはありません。

データはどのように保護されますか

利用者がデータソースに直接アクセスすることは決してありません。生データや計算結果は、常に Provider(アクセスコントローラー)コンポーネントをプロキシとして経由して受け渡されます。データのプライバシーと主権を確保するには、自前でホストした Provider か、信頼できる第三者が提供する Provider を利用する必要があります。

データサービスを公開するには

Pontus-X エコシステムでデータサービスを公開する方法は複数あります。

Pontus-X の各ポータル

エコシステムに接続されたポータルを使ってデータサービスを公開できます。リファレンス実装である Pontus-X ポータル でも、分野特化型のポータル(たとえば EuProGigant ポータル)でも構いません。公開の手順でアセット種別として dataset を選択します。

Publish Page

JavaScript(TypeScript)と Python のライブラリ

既存のライブラリを使って、自分のアプリケーションを Pontus-X エコシステムに接続したり、作業を自動化したりできます。

Nautilus(推奨)

Nautilus は、deltaDAO が開発した TypeScript 製の Ocean.js ラッパーライブラリです。サービス提供物の公開・利用・管理を助ける多数のヘルパー関数とビルダークラスを備えています。

Nautilus はオープンソースで Apache-2.0 ライセンスのもと提供され、NPM パッケージ として利用できます。

Ocean.js

Ocean.js は、Ocean Protocol Foundation が開発する公式の JavaScript ライブラリです。サービス提供物の公開・利用・管理にあたって、スマートコントラクトとのよりきめ細かいやり取りが可能ですが、Nautilus よりも扱いは難しくなります。

Ocean.py

Ocean.py は、Ocean Protocol Foundation が開発する公式の Python ライブラリです。スマートコントラクトとやり取りして、サービス提供物の公開・利用・管理を行えます。

access(ダウンロード)型と compute 型の提供物

データサービスの提供物には、次の 2 つの種別があります。

  1. access(ダウンロード) access 型のデータセットでは、利用者が生データをダウンロードできます。Provider コンポーネントがプロキシとして機能し、利用者向けのダウンロードリンクを生成します。データへの元のアクセス資格情報が外部に露出することはありません。

  2. compute この方式では生データの共有を防げます。最も一般的なユースケースは、アルゴリズムをデータ所有者のインフラ側へ持ち込むこと(Compute-to-Data)です。データサービスの公開者は、許可リスト/拒否リストの機能を使って、信頼するアルゴリズムや公開者を設定できます。利用者が受け取るのはアルゴリズムが生成した結果のみで、入力となる生データを受け取ることはありません。

    これにより、プライバシーや知的財産上の懸念からこれまで実現できなかった、機微なデータに対する計算処理という新しいユースケースが可能になります。

対応しているデータソース

静的なファイル URL

パラメータ:
  • type — データソースの種別を指定します(必須)
  • url — ファイルの URL(必須)
  • method — HTTP メソッド(必須)
  • headers — 追加の HTTP ヘッダー(任意)
{
    "type": "url",
    "url": "https://your-files.com/file1.json",
    "method": "GET",
    "headers": {
      "Authorization": "Bearer YOUR_ACCESS_TOKEN",
      "API-KEY": "YOUR_API_KEY",
      "Custom-Header": "custom-value-if-needed"
    }
}

(REST)API

{
  "type": "url",
  "url": "https://mobility-api.com/charging_stations?available=true",
  "method": "GET",
  "headers": {
    "Authorization": "Bearer YOUR_ACCESS_TOKEN",
    "API-KEY": "YOUR_API_KEY"
  }
}

クエリパラメータ

クエリパラメータは URL の一部としてあらかじめ埋め込むこともできますし、consumerParameters として設定し、利用時に利用者自身が指定できるようにして柔軟性を高めることもできます。

:利用時に、利用者が次のクエリパラメータを動的に設定できるようにしたいとします。

  • hometown

  • age

  • developer

  • languagePreference

  1. パラメータを含まない API エンドポイントを GET リクエストとして定義します。
{
  "type": "url",
  "url": "https://my-cool.app/api",
  "method": "GET"
}
  1. consumerParameters を設定します。ポータルでは、公開手順の Access ステップにある User defined parameters の項目を使います。

Custom Parameter checkbox

Custom Parameter input form

アクセスコントローラー(Provider)はこれらのパラメータを使ってクエリ文字列を組み立てます。たとえば https://my-cool.app/api?hometown=Hamburg&age=30&developer=false&languagePreference=nodejs のようになります。これまでと同様、利用者がこの URL を目にすることはありません。復号と URL の組み立ては Provider だけが行い、結果のみが利用者へ中継されます。

POST リクエスト

リクエストが POST として記述されている場合、Provider はこれを POST の JSON ボディへ変換します。例:

{
    "hometown": "Hamburg",
    "age": 33,
    "developer": false,
    "languagePreference": "nodejs"
}

GraphQL

GraphQL は API のための強力なクエリ言語であり、さまざまなデータソースとの円滑な統合によってデータ取得を効率化するために設計されています。MongoDB、MySQL、PostgreSQL といった既存のデータソースからのデータを、そのまま統合して問い合わせられます。

GraphQL settings form

パラメータ:
  • type — データソースの種別を指定します(必須)
  • url — サーバーのエンドポイント URL(必須)
  • query — 実行するクエリ(必須)
  • headers — 追加の HTTP ヘッダー(任意)
{
  "type": "graphql",
  "url": "https://your-graphql-endpoint.app/v1/graphql",
  "headers": {
    "Authorization": "Bearer YOUR_ACCESS_TOKEN",
    "API-KEY": "YOUR_API_KEY",
    "content-type": "application/json"
  },
  "query": "query MyQuery { orders(where: {order_id: {_eq: 5}}) { info order_id product_id quantity total_price }}"
}
 

GraphQL クエリ変数の動的な指定

URL のクエリパラメータと同様に、consumerParameters を使って、利用者がクエリへ変数を渡せるようにできます。

例:
query MyQuery($orderId: Int!) {
  orders(where: {order_id: {_eq: $orderId}}) {
    info
    order_id
    product_id
    quantity
    total_price
  }
}

その他のデータソース

上記に挙げたデータソースに加えて、本スタックは IPFS(Interplanetary File System)、スマートコントラクト上のデータ、Arweave にも対応しています。

これらの選択肢について詳しくは、Ocean Protocol のドキュメント を参照してください。

アクセス制御

Pontus-X におけるアクセス制御は、provider と呼ばれるアクセスコントローラーコンポーネントによって担保されます。このコンポーネントは、サービスの対価が支払われ、かつ利用者がアクセスを許可されている場合にのみ、データへアクセスできるようにします。

ブロックチェーンのアカウント ID(アドレス)によるアクセス制御

Pontus-X の各参加者は、秘密鍵と対になったアドレスの形で、自身のブロックチェーンアカウント ID を持ちます。非対称暗号によってアドレス保有者の身元を確認し、サービスへのアクセスを許可します。

アクセスは、特定のアドレスを許可する方式(許可リスト)と、アクセスを拒否する方式(拒否リスト)のいずれでも制御できます。

Allow and deny list form

利用期間の制限

購入後に特定のサービスを利用できる期間を制限できます。これは timeout の設定で行います。

Access durection - timeout setting