Tapyrus API (1.9.0)

Download OpenAPI specification:Download

イントロダクション

これは chaintope 社が開発するブロックチェーン Tapyrus を使ったブロックチェーンに関係する機能を簡単に利用するための REST API です。 現在以下のユースケースをサポートしています。これは今後も拡張されていきます。

  • Timestamp: 任意のデータをタイムスタンプとしてブロックチェーンに記録
  • Token: 新しいトークンの発行、送金、焼却。NFTも利用可能
  • Tracking: トレーサビリティを目的としてたサブジェクトの移動履歴を記録

また、以下の機能をベータ版として提供しています。

  • MaterialTracking: 製品に含まれる原材料の量を秘匿したまま、サプライチェーンにおけるアイテムの移動履歴を記録

Tapyrus ブロックチェーンについては以下の情報を参照してください。

Tapyrus API の利用法

Tapyrus API は REST API として提供されています。利用を開始するためには、Tapyrus API の エンドポイント に対して、 認証 済みの トークンを使いアクセスする必要があります。また、認証されたユーザーはそれぞれが自身のウォレットを Tapyrus API 内部に持つことになります。 ウォレットではそのユーザーのトークンなどのアセットを管理するための鍵が管理され、アセットの移動などで利用されます。

Tapyrus API のエンドポイント

エンドポイントは以下のフォーマットで作成されます。

https://xxx.api.tapyrus.chaintope.com/api/v1

xxxの部分は各ユーザー固有の識別子になります。正式なURLは、ダッシュボードで確認できます。

API接続の準備

ダッシュボードに登録すると、chaintopeが登録情報を確認後、お客様のAPIエンドポイントを設定します。 エンドポイントが設定されるまでは、APIの機能はご利用いただけません。

クライアント証明書

Tapyrus APIに接続する際には、クライアント証明書が必要になります。ダッシュボードの「クライアント証明書」のメニューより、 クライアント証明書を発行してください。 発行すると秘密鍵と公開鍵の証明書を含むPKCS#12形式のファイルがダウンロードできます。

ユーザーの登録

ダッシュボードからAPIに接続するユーザーを作成します。Tapyrus APIではユーザー単位にウォレットが作成されます。 ウォレットではアセットの受け取りや、送付に必要な公開鍵と秘密鍵のペアが管理されています。 そのため、認証を行ったユーザーごとに独立したアセットの管理が可能になります。

ダッシュボードの、「ユーザー一覧」からアクセスするユーザーを作成することができます。 ユーザーを作成すると、そのユーザー用のアクセストークンが発行されます。このアクセストークンとクライアント証明書の両方が漏洩すると、 不正アクセスが可能になるため、データの取り扱いには十分注意してください。

接続確認

クライアント証明書とユーザーが作成されると、APIにアクセスできるようになります。簡単な接続確認は、curlで以下のように行なえます。

  1. ダウンロードしたPKCS#12ファイルからcert.pemを生成。 $ openssl pkcs12 -in <ダウンロードした.p12ファイルのパス> -out cert.pem -nodes -clcerts
  2. cert.pemとアクセストークンを使ってAPIへアクセス。 $ curl -X GET -H 'Authorization: Bearer <ユーザーのアクセストークン>' "https://xxx.api.tapyrus.chaintope.com/api/v1/timestamps" -E cert.pem

成功するとAPIへのアクセスが可能になっています。これらの認証情報を使って、以下に記載する各APIがご利用いただけます。

Authentication

OAuth2

Security Scheme Type OAuth2
authorizationCode OAuth Flow
Authorization URL: /oauth2/v1/authorize
Token URL: /oauth2/v1/token
Scopes:
  • all -

    Grant all operation

timestamp v2

タイムスタンプ V2 API

Timestampを記録

ブロックチェーンに任意の値をタイムスタンプとして記録します。 現在、記録方法として2種類のtypesimple(デフォルト)、trackable)をサポートしています。

simpleを指定した場合は、値がトランザクション内のOP_RETURNアウトプットに直接埋め込まれます。 単純に値をブロックチェーンに記録する場合はsimpleの利用を推奨します。

trackableを指定した場合は、コンテンツのハッシュ値を組み合わせたPay to Contractアドレスが生成され、コンテンツのハッシュ値は間接的に記録されます。 アドレスは、Timestampの戻り値の1つであるpayment_baseと指定されたprefix、コンテンツハッシュ値を使って次のように計算されます。 コンテンツハッシュ値はdigestの指定に従ってcontentをハッシュ化したものです。(digestnoneの場合はcontentがそのまま使用されます。)

  • digestがsha256の場合はコンテンツは1回だけハッシュ化されます。

    アドレスの公開鍵 = payment_base + SHA256(payment_base || prefix || コンテンツハッシュ値(SHA256))G
  • digestがdouble_sha256の場合は1回ハッシュ化したものをさらにもう一回ハッシュ化します。

    アドレスの公開鍵 = payment_base + SHA256(payment_base || prefix || コンテンツハッシュ値(DOUBLE SHA256))G
  • digestがnoneの場合は、コンテンツはハッシュ化されません。

    アドレスの公開鍵 = payment_base + SHA256(payment_base || prefix || コンテンツの値)G

※Gは楕円曲線の生成元。公開鍵からアドレスを導出すると、戻り値の1つであるp2c_addressと合致します。 trackableを使用するとハッシュ値は間接的に記録されますが、ブロックチェーン上で使用可能なアセットとして管理できます。 そのため、ある記録を持つデータを更新する場合に、このアセットを使用して新しいtrackableアセットを作成することで、 記録の更新、最新性を表現することが可能になります。未使用な記録のみlatestがtrueになります。

contentで指定した値(Hex文字列)は、digestで指定した方法でハッシュ化されます。 digest指定方法の種類は以下の通りです。(未指定の場合sha256を使用)

  • 1: sha256: SHA256ハッシュ化
  • 2: double_sha256: SHA256の二重ハッシュ化
  • 3: none: 値をハッシュ化せずそのまま記録 prefixには任意の値(Hex文字列)を指定できます。prefixdigestの指定に関わらず、ハッシュ化されずにそのまま contentの前に付与されてブロックチェーンに記録されます。

Timestamp API v1はprefixcontentに任意の文字列を受け取り、それをバイナリデータとして扱いますが、 Timestamp API v2ではprefixcontentにhex文字列のみを受け付け、内部でバイナリーデータに変換してブロックチェーンに記録します。

以下は、typesimpleを指定した場合のリクエストボディの例です。

{
  "type": "simple",
  "digest": "none",
  "prefix": "74657374617070",
  "content": "7b226669656c6431223a202276616c756531227d"
}

登録に成功した場合は以下のようなレスポンスを返します。

{
  "id": 1,
  "version": "2",
  "txid": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc",
  "status": "confirmed",
  "content_hash": "7b226669656c6431223a202276616c756531227d",
  "prefix": "74657374617070",
  "wallet_id": "b831e51927edc7b3a21869909d526e51",
  "timestamp_type": "simple",
  "block_height": 101,
  "block_time": 1626169080
}

ブロックチェーンにはOP_RETURNアウトプット内に以下の形式で記録されます。

OP_RETURN 746573746170707b226669656c6431223a202276616c756531227d

以下の場合はエラーとして扱われます。

  • typesimpletrackableのいずれでもない場合
  • contentが指定されていない場合
  • contentがHex文字列ではない場合
  • contentが256文字以上の場合
  • digestsha256double_sha256none以外の場合
  • prefixがHex文字列ではない場合
  • prefixが21文字以上の場合

v1との違いについて

現在、タイムスタンプAPIには2つのバージョン(1、2)が存在します。 バージョン1では、

  • contentprefixには任意の文字列を指定できます。
  • 指定されたcontentprefixはバイナリデータとして扱います。

上記と同じデータをバージョン1(POST /api/v1/timestamps)で登録した場合、ブロックチェーンにはOP_RETURNアウトプット内に以下の形式で記録されます。

OP_RETURN 373436353733373436313730373037623232363636393635366336343331323233613230323237363631366337353635333132323764
Authorizations:
OAuth2 (all)
Request Body schema: application/json

content, digest, prefix, type を受け取り、ブロックチェーンにハッシュ値をタイムスタンプとして記録します。

content
required
string (TimestampContentHex) ^([0-9a-fA-F]{2}){0,127}$

最大 127 バイト(254文字)のHex文字列

digest
string (Digest)
Enum: "sha256" "double_sha256" "none"
prefix
string^([0-9a-fA-F]{2}){0,10}$
type
string (TimestampType)
Default: "simple"
Enum: "simple" "trackable"

Responses

Request samples

Content type
application/json
{
  • "content": "436f6e74656e7420666f722054696d657374616d70",
  • "digest": "sha256",
  • "prefix": "0102030405060708090a",
  • "type": "trackable"
}

Response samples

Content type
application/json
{
  • "id": 2,
  • "version": "1",
  • "txid": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc",
  • "status": "unconfirmed",
  • "content_hash": "3d1469aa427f97921a1b71c5981c1848041246290394a32ec26fdee2685bdece",
  • "prefix": "TIMESTAMPAPP",
  • "wallet_id": "b831e51927edc7b3a21869909d526e51",
  • "latest": "true",
  • "timestamp_type": "trackable",
  • "block_height": 101,
  • "block_time": 1626169080,
  • "p2c_address": "1CY6TSSARn8rAFD9chCghX5B7j4PKR8S1a",
  • "payment_base": "02124fd6b3c968390be4828058efc941b83f8ce9ccb00cfde86423744dbcb82576",
  • "prev_id": 1,
  • "next_id": 3
}

Timestamp一覧表示

ブロックチェーンに記録したタイムスタンプを取得し、content_hash,prefix,txidを一覧で表示します。

Authorizations:
OAuth2 (all)

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Timestamp表示

タイムスタンプ ID に対応する Timestamp を表示します。

Authorizations:
OAuth2 (all)
path Parameters
id
required
integer

Timestamp id。Timestamp を記録 API(POST /timestamps) の返り値の JSON の id 要素の値です。

Responses

Response samples

Content type
application/json
{
  • "id": 2,
  • "version": "1",
  • "txid": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc",
  • "status": "unconfirmed",
  • "content_hash": "3d1469aa427f97921a1b71c5981c1848041246290394a32ec26fdee2685bdece",
  • "prefix": "TIMESTAMPAPP",
  • "wallet_id": "b831e51927edc7b3a21869909d526e51",
  • "latest": "true",
  • "timestamp_type": "trackable",
  • "block_height": 101,
  • "block_time": 1626169080,
  • "p2c_address": "1CY6TSSARn8rAFD9chCghX5B7j4PKR8S1a",
  • "payment_base": "02124fd6b3c968390be4828058efc941b83f8ce9ccb00cfde86423744dbcb82576",
  • "prev_id": 1,
  • "next_id": 3
}

Trackable Timestampの更新

trackable タイプのタイムスタンプを更新する新たなタイムスタンプを記録します。更新されたタイムスタンプは latest フィールドに false が返る様になり、最新のものではない事が確認出来るようになります。

また、ブロックチェーン上では IDを指定したタイムスタンプに対応する Pay to Contract UTXO をインプットとして持つ新たなトランザクションがブロードキャストされます。そのトランザクションのアウトプットリストには古いタイムスタンプが登録されたときと同様に Pay to Contract アドレス宛の支払いアウトプットがセットされます。

これにより、古いタイムスタンプの UTXO は消費され、更新された新たなタイムスタンプを記録する UTXO が生まれます。この仕組みにより、この API によって発行されるトランザクションが、更新対象の古いタイムスタンプを更新する唯一のものであることが保証されます。

Authorizations:
OAuth2 (all)
path Parameters
id
required
integer

更新する対象となるタイムスタンプのIDです。

Request Body schema: application/json

content, digest, prefix を受け取り、ブロックチェーンにハッシュ値をタイムスタンプとして記録します。

content
required
string (TimestampContentHex) ^([0-9a-fA-F]{2}){0,127}$

最大 127 バイト(254文字)のHex文字列

digest
string (Digest)
Enum: "sha256" "double_sha256" "none"
prefix
string^([0-9a-fA-F]{2}){0,10}$

Responses

Request samples

Content type
application/json
{
  • "content": "436f6e74656e7420666f722054696d657374616d70",
  • "digest": "sha256",
  • "prefix": "0102030405060708090a"
}

Response samples

Content type
application/json
{
  • "id": 2,
  • "version": "1",
  • "txid": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc",
  • "status": "unconfirmed",
  • "content_hash": "3d1469aa427f97921a1b71c5981c1848041246290394a32ec26fdee2685bdece",
  • "prefix": "TIMESTAMPAPP",
  • "wallet_id": "b831e51927edc7b3a21869909d526e51",
  • "latest": "true",
  • "timestamp_type": "trackable",
  • "block_height": 101,
  • "block_time": 1626169080,
  • "p2c_address": "1CY6TSSARn8rAFD9chCghX5B7j4PKR8S1a",
  • "payment_base": "02124fd6b3c968390be4828058efc941b83f8ce9ccb00cfde86423744dbcb82576",
  • "prev_id": 1,
  • "next_id": 3
}

timestamp v1

タイムスタンプ V1 API

Timestampを記録

ブロックチェーンに任意の値をタイムスタンプとして記録します。 現在、記録方法として2種類のtypesimple(デフォルト)、trackable)をサポートしています。

simpleを指定した場合は、値がトランザクション内のOP_RETURNアウトプットに直接埋め込まれます。 単純に値をブロックチェーンに記録する場合はsimpleの利用を推奨します。

trackableを指定した場合は、コンテンツのハッシュ値を組み合わせたPay to Contractアドレスが生成され、コンテンツのハッシュ値は間接的に記録されます。 アドレスは、Timestampの戻り値の1つであるpayment_baseと指定されたコンテンツハッシュを使って次のように計算されます。

  • digestがsha256の場合はコンテンツは1回だけハッシュ化されます。

    アドレスの公開鍵 = payment_base + SHA256(payment_base || prefix || コンテンツハッシュ値(SHA256))G
  • digestがdouble_sha256の場合は1回ハッシュ化したものをさらにもう一回ハッシュ化します。

    アドレスの公開鍵 = payment_base + SHA256(payment_base || prefix || コンテンツハッシュ値(DOUBLE SHA256))G
  • digestがnoneの場合は、コンテンツはハッシュ化されません。

    アドレスの公開鍵 = payment_base + SHA256(payment_base || prefix || コンテンツの値)G

※Gは楕円曲線の生成元。公開鍵からアドレスを導出すると、戻り値の1つであるp2c_addressと合致します。 trackableを使用するとハッシュ値は間接的に記録されますが、ブロックチェーン上で使用可能なアセットとして管理できます。 そのため、ある記録を持つデータを更新する場合に、このアセットを使用して新しいtrackableアセットを作成することで、 記録の更新、最新性を表現することが可能になります。未使用な記録のみlatestがtrueになります。

contentで指定した値は、digestで指定した方法でハッシュ化されます。 digest指定方法の種類は以下の通りです。(未指定の場合sha256を使用)

  • 1: sha256: SHA256ハッシュ化
  • 2: double_sha256: SHA256の二重ハッシュ化
  • 3: none: 値をハッシュ化せずそのまま記録

v1.3.0 まであった content_hash は v1.4.0 からは非推奨です。content を使用してください。content_hashは将来のメジャーバージョンアップで削除されます。

Authorizations:
OAuth2 (all)
Request Body schema: application/json

content, digest, prefix, type を受け取り、ブロックチェーンにハッシュ値をタイムスタンプとして記録します。

content
required
string (TimestampContent)

最大 255 バイト

digest
string (Digest)
Enum: "sha256" "double_sha256" "none"
prefix
string
type
string (TimestampType)
Default: "simple"
Enum: "simple" "trackable"

Responses

Request samples

Content type
application/json
{
  • "content": "Content for Timestamp",
  • "digest": "sha256",
  • "prefix": "TIMESTAMPAPP",
  • "type": "trackable"
}

Response samples

Content type
application/json
{
  • "id": 2,
  • "version": "1",
  • "txid": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc",
  • "status": "unconfirmed",
  • "content_hash": "3d1469aa427f97921a1b71c5981c1848041246290394a32ec26fdee2685bdece",
  • "prefix": "TIMESTAMPAPP",
  • "wallet_id": "b831e51927edc7b3a21869909d526e51",
  • "latest": "true",
  • "timestamp_type": "trackable",
  • "block_height": 101,
  • "block_time": 1626169080,
  • "p2c_address": "1CY6TSSARn8rAFD9chCghX5B7j4PKR8S1a",
  • "payment_base": "02124fd6b3c968390be4828058efc941b83f8ce9ccb00cfde86423744dbcb82576",
  • "prev_id": 1,
  • "next_id": 3
}

Timestamp一覧表示

ブロックチェーンに記録したタイムスタンプを取得し、content_hash,prefix,txidを一覧で表示します。

Authorizations:
OAuth2 (all)

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Timestamp表示

タイムスタンプ ID に対応する Timestamp を表示します。

Authorizations:
OAuth2 (all)
path Parameters
id
required
integer

Timestamp id。Timestamp を記録 API(POST /timestamps) の返り値の JSON の id 要素の値です。

Responses

Response samples

Content type
application/json
{
  • "id": 2,
  • "version": "1",
  • "txid": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc",
  • "status": "unconfirmed",
  • "content_hash": "3d1469aa427f97921a1b71c5981c1848041246290394a32ec26fdee2685bdece",
  • "prefix": "TIMESTAMPAPP",
  • "wallet_id": "b831e51927edc7b3a21869909d526e51",
  • "latest": "true",
  • "timestamp_type": "trackable",
  • "block_height": 101,
  • "block_time": 1626169080,
  • "p2c_address": "1CY6TSSARn8rAFD9chCghX5B7j4PKR8S1a",
  • "payment_base": "02124fd6b3c968390be4828058efc941b83f8ce9ccb00cfde86423744dbcb82576",
  • "prev_id": 1,
  • "next_id": 3
}

Trackable Timestampの更新

trackable タイプのタイムスタンプを更新する新たなタイムスタンプを記録します。更新されたタイムスタンプは latest フィールドに false が返る様になり、最新のものではない事が確認出来るようになります。

また、ブロックチェーン上では IDを指定したタイムスタンプに対応する Pay to Contract UTXO をインプットとして持つ新たなトランザクションがブロードキャストされます。そのトランザクションのアウトプットリストには古いタイムスタンプが登録されたときと同様に Pay to Contract アドレス宛の支払いアウトプットがセットされます。

これにより、古いタイムスタンプの UTXO は消費され、更新された新たなタイムスタンプを記録する UTXO が生まれます。この仕組みにより、この API によって発行されるトランザクションが、更新対象の古いタイムスタンプを更新する唯一のものであることが保証されます。

Authorizations:
OAuth2 (all)
path Parameters
id
required
integer

更新する対象となるタイムスタンプのIDです。

Request Body schema: application/json

content, digest, prefix を受け取り、ブロックチェーンにハッシュ値をタイムスタンプとして記録します。

content
required
string (TimestampContent)

最大 255 バイト

digest
string (Digest)
Enum: "sha256" "double_sha256" "none"
prefix
string

Responses

Request samples

Content type
application/json
{
  • "content": "Content for Timestamp",
  • "digest": "sha256",
  • "prefix": "TIMESTAMPAPP"
}

Response samples

Content type
application/json
{
  • "id": 2,
  • "version": "1",
  • "txid": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc",
  • "status": "unconfirmed",
  • "content_hash": "3d1469aa427f97921a1b71c5981c1848041246290394a32ec26fdee2685bdece",
  • "prefix": "TIMESTAMPAPP",
  • "wallet_id": "b831e51927edc7b3a21869909d526e51",
  • "latest": "true",
  • "timestamp_type": "trackable",
  • "block_height": 101,
  • "block_time": 1626169080,
  • "p2c_address": "1CY6TSSARn8rAFD9chCghX5B7j4PKR8S1a",
  • "payment_base": "02124fd6b3c968390be4828058efc941b83f8ce9ccb00cfde86423744dbcb82576",
  • "prev_id": 1,
  • "next_id": 3
}

token v2

トークン V2 API

トークンの新規発行

任意の数のトークンを新規発行します。

Authorizations:
OAuth2 (all)
Request Body schema: application/json

amountを受け取り指定した数のトークンを新規発行します。 任意でtoken_typeを設定し、トークンの種類を指定できます。 token_typeが未指定な場合、再発行可能なトークンが発行されます。 トークンの種類は以下の通りです。

  • 1: 再発行可能なトークン
  • 2: 再発行不可能なトークン
  • 3: NFT

また、token_typeが未指定または1の場合、任意でトークン識別子idを指定することで、指定したトークン識別子のトークンを再発行します。 splitを指定することで発行するトランザクションにsplit数分のアウトプットを追加し、 各アウトプットに均等になるようにトークンを発行できます。 トークンの量に余りが出る場合、余りの値の調整は最後のアウトプットで行われます。 発行量がsplitよりも小さい場合、指定された発行量の数分のアウトプットが作られます。 例えば、amountに10、splitに3を指定した場合、トランザクションのアウトプットは3つに分割され、 それぞれに含まれるトークンの数量は3, 3, 4 となります。 splitに指定できる値の範囲は1以上、100以下です。 metadataとしてトークン発行に任意のデータを関連づけることができます。 metadataを指定した場合は、そのハッシュ値を組み合わせたPay to Contractアドレスが生成され、metadataは間接的にブロックチェーンに記録されます。 アドレスは、戻り値の1つであるpayment_baseと指定されたメタデータを使って次のように計算されます。

アドレスの公開鍵 = payment_base + SHA256(payment_base || メタデータ)G

※Gは楕円曲線の生成元。公開鍵からアドレスを導出すると、戻り値の1つであるp2c_addressと合致します。

amount
required
integer
token_type
integer
split
integer
metadata
string

トークンに関連するメタデータとなる任意の文字列(URLやハッシュ値など)で、最大400文字。

Responses

Request samples

Content type
application/json
{
  • "amount": 100,
  • "token_type": 1,
  • "split": 100,
  • "metadata": "Content of token metadata"
}

Response samples

Content type
application/json
{
  • "token_id": "c3ec2fd806701a3f55808cbec3922c38dafaa3070c48c803e9043ee3642c660b46",
  • "txid": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc",
  • "p2c_address": "1CY6TSSARn8rAFD9chCghX5B7j4PKR8S1a",
  • "payment_base": "02124fd6b3c968390be4828058efc941b83f8ce9ccb00cfde86423744dbcb82576"
}

トークンの総量取得

所有するトークンの総量を取得し、トークン識別子(token_id)ごとに総量(amount)を一覧で表示します。

Authorizations:
OAuth2 (all)
query Parameters
confirmation_only
boolean (ConfirmationOnlyParam)
Example: confirmation_only=true

オプションでconfirmation_onlyを設定でき、trueの場合ブロックチェーン上で承認済みのトークンのみを取得し、falseの場合未承認のトークンも含めて取得します。デフォルトはtrueです。

per
integer (PerPageParam) >= 1
Default: 25

1ページあたりの件数

page
integer (PageNumberParam) >= 1
Default: 1

ページ番号

Responses

Response samples

Content type
application/json
{
  • "count": 1,
  • "tokens": [
    ]
}

トークンの再発行

指定した識別子を持つ再発行可能なトークンを任意の量再発行します。

Authorizations:
OAuth2 (all)
path Parameters
token_id
required
string (TokenIdParam)

トークンの識別子。

Request Body schema: application/json
amount
required
integer
split
integer

Responses

Request samples

Content type
application/json
{
  • "amount": 100,
  • "split": 100
}

Response samples

Content type
application/json
{
  • "token_id": "c3ec2fd806701a3f55808cbec3922c38dafaa3070c48c803e9043ee3642c660b46",
  • "txid": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc",
  • "p2c_address": "1CY6TSSARn8rAFD9chCghX5B7j4PKR8S1a",
  • "payment_base": "02124fd6b3c968390be4828058efc941b83f8ce9ccb00cfde86423744dbcb82576"
}

トークンの送付

任意の数のトークンを指定したアドレスに対して送付します。

Authorizations:
OAuth2 (all)
path Parameters
token_id
required
string (TokenIdParam)

トークンの識別子。

Request Body schema: application/json

addressでトークンを送付する相手のアドレスを指定し、amountで送付するトークンの量を指定します。

address
required
string
amount
integer

Responses

Request samples

Content type
application/json
{
  • "address": "1CY6TSSARn8rAFD9chCghX5B7j4PKR8S1a",
  • "amount": 100
}

Response samples

Content type
application/json
{
  • "token_id": "c3ec2fd806701a3f55808cbec3922c38dafaa3070c48c803e9043ee3642c660b46",
  • "txid": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc",
  • "p2c_address": "1CY6TSSARn8rAFD9chCghX5B7j4PKR8S1a",
  • "payment_base": "02124fd6b3c968390be4828058efc941b83f8ce9ccb00cfde86423744dbcb82576"
}

複数アドレスへのトークン送付

任意の数のトークンを指定した複数のアドレスに対して送付します。

Authorizations:
OAuth2 (all)
path Parameters
token_id
required
string (TokenIdParam)

トークンの識別子。

Request Body schema: application/json

アドレスと量の配列を指定します。 配列の各要素ではaddressでトークンを送付する相手のアドレスを指定し、amountで送付するトークンの量を指定します。"

required
Array of objects (TransferTokenRequest)

Responses

Request samples

Content type
application/json
{
  • "destinations": [
    ]
}

Response samples

Content type
application/json
{
  • "token_id": "c3ec2fd806701a3f55808cbec3922c38dafaa3070c48c803e9043ee3642c660b46",
  • "txid": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc",
  • "p2c_address": "1CY6TSSARn8rAFD9chCghX5B7j4PKR8S1a",
  • "payment_base": "02124fd6b3c968390be4828058efc941b83f8ce9ccb00cfde86423744dbcb82576"
}

トークンの焼却

任意の数のトークンを焼却します。

Authorizations:
OAuth2 (all)
path Parameters
token_id
required
string (TokenIdParam)

トークンの識別子。

query Parameters
amount
integer (AmountParam)
Example: amount=100

amountを受け取り、指定した量のトークンを焼却します。 amountが未入力の場合全てのトークンを焼却します。

Responses

トークンの情報取得

指定した識別子のトークンの情報を取得します。

Authorizations:
OAuth2 (all)
path Parameters
token_id
required
string (TokenIdParam)

トークンの識別子。

query Parameters
confirmation_only
boolean (ConfirmationOnlyParam)
Example: confirmation_only=true

オプションでconfirmation_onlyを設定でき、trueの場合ブロックチェーン上で承認済みのトークンのみを取得し、falseの場合未承認のトークンも含めて取得します。デフォルトはtrueです。

per
integer (PerPageParam) >= 1
Default: 25

1ページあたりの件数

page
integer (PageNumberParam) >= 1
Default: 1

ページ番号

Responses

Response samples

Content type
application/json
{
  • "count": 100,
  • "outputs": [
    ]
}

トークン所有の証明作成

トークンを所有していることを証明するために、トークンがロックされている鍵を使って任意のメッセージにデジタル署名を生成する。署名はTIP-0137(https://github.com/chaintope/tips/blob/main/tip-0137.md)に従って作成される

Authorizations:
OAuth2 (all)
Request Body schema: application/json
txid
required
string (TransactionId)

トランザクションID

index
required
integer [ 0 .. 4294967295 ]

ユーザーが保持するトークンが記録されているトランザクションのアウトプットリスト内のインデックスです

message
string^([0-9a-fA-F]{2}){0,1024}$

署名対象のメッセージの 16 進数文字列表現

Responses

Request samples

Content type
application/json
{
  • "txid": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc",
  • "index": 0,
  • "message": "01020304050607"
}

Response samples

Content type
application/json
{
  • "jws": "eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NksifQ.eyJ0eGlkIjoiMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMSIsImluZGV4IjoxLCJjb2xvcl9pZCI6ImMzZWMyZmQ4MDY3MDFhM2Y1NTgwOGNiZWMzOTIyYzM4ZGFmYWEzMDcwYzQ4YzgwM2U5MDQzZWUzNjQyYzY2MGI0NiIsInZhbHVlIjoxLCJzY3JpcHRfcHVia2V5IjoiMjFjM2VjMmZkODA2NzAxYTNmNTU4MDhjYmVjMzkyMmMzOGRhZmFhMzA3MGM0OGM4MDNlOTA0M2VlMzY0MmM2NjBiNDZiYzc2YTkxNGZjNzI1MGEyMTFkZWRkYzcwZWU1YTI3MzhkZTVmMDc4MTczNTFjZWY4OGFjIiwiYWRkcmVzcyI6IjIyVmRRNVZqV2NGOXpnc25QUW9kRkJTMVBCUVBhQVFFWFNvZmt5TXYyRDl6VjFNZE5oZWFBeTdzcm9UZzUybXdXNWFwTmh4UHFCNlg0WVJHIiwiZGF0YSI6IjAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZiJ9.s08khWD9aixrUHWcqNVXRH5lRDAnvTYbQDHBx1qr1kyTIru9HE2hxZo0q-ANcXj4O4WMZGS6xZe5BPLc1Uat5g"
}

token v1

トークン V1 API

トークンの新規発行

任意の数のトークンを新規発行します。

Authorizations:
OAuth2 (all)
Request Body schema: application/json

amountを受け取り指定した数のトークンを新規発行します。 任意でtoken_typeを設定し、トークンの種類を指定できます。 token_typeが未指定な場合、再発行可能なトークンが発行されます。 トークンの種類は以下の通りです。

  • 1: 再発行可能なトークン
  • 2: 再発行不可能なトークン
  • 3: NFT

また、token_typeが未指定または1の場合、任意でトークン識別子idを指定することで、指定したトークン識別子のトークンを再発行します。 splitを指定することで発行するトランザクションにsplit数分のアウトプットを追加し、 各アウトプットに均等になるようにトークンを発行できます。 トークンの量に余りが出る場合、余りの値の調整は最後のアウトプットで行われます。 発行量がsplitよりも小さい場合、指定された発行量の数分のアウトプットが作られます。 例えば、amountに10、splitに3を指定した場合、トランザクションのアウトプットは3つに分割され、 それぞれに含まれるトークンの数量は3, 3, 4 となります。 splitに指定できる値の範囲は1以上、100以下です。 metadataとしてトークン発行に任意のデータを関連づけることができます。 metadataを指定した場合は、そのハッシュ値を組み合わせたPay to Contractアドレスが生成され、metadataは間接的にブロックチェーンに記録されます。 アドレスは、戻り値の1つであるpayment_baseと指定されたメタデータを使って次のように計算されます。

アドレスの公開鍵 = payment_base + SHA256(payment_base || メタデータ)G

※Gは楕円曲線の生成元。公開鍵からアドレスを導出すると、戻り値の1つであるp2c_addressと合致します。

amount
required
integer
token_type
integer
split
integer
metadata
string

トークンに関連するメタデータとなる任意の文字列(URLやハッシュ値など)で、最大400文字。

Responses

Request samples

Content type
application/json
{
  • "amount": 100,
  • "token_type": 1,
  • "split": 100,
  • "metadata": "Content of token metadata"
}

Response samples

Content type
application/json
{
  • "token_id": "c3ec2fd806701a3f55808cbec3922c38dafaa3070c48c803e9043ee3642c660b46",
  • "txid": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc",
  • "p2c_address": "1CY6TSSARn8rAFD9chCghX5B7j4PKR8S1a",
  • "payment_base": "02124fd6b3c968390be4828058efc941b83f8ce9ccb00cfde86423744dbcb82576"
}

トークンの総量取得

所有するトークンの総量を取得し、トークン識別子(token_id)ごとに総量(amount)を一覧で表示します。

Authorizations:
OAuth2 (all)
query Parameters
confirmation_only
boolean (ConfirmationOnlyParam)
Example: confirmation_only=true

オプションでconfirmation_onlyを設定でき、trueの場合ブロックチェーン上で承認済みのトークンのみを取得し、falseの場合未承認のトークンも含めて取得します。デフォルトはtrueです。

Responses

Response samples

Content type
application/json
[
  • {
    }
]

トークンの再発行

指定した識別子を持つ再発行可能なトークンを任意の量再発行します。

Authorizations:
OAuth2 (all)
path Parameters
token_id
required
string (TokenIdParam)

トークンの識別子。

Request Body schema: application/json
amount
required
integer
split
integer

Responses

Request samples

Content type
application/json
{
  • "amount": 100,
  • "split": 100
}

Response samples

Content type
application/json
{
  • "token_id": "c3ec2fd806701a3f55808cbec3922c38dafaa3070c48c803e9043ee3642c660b46",
  • "txid": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc",
  • "p2c_address": "1CY6TSSARn8rAFD9chCghX5B7j4PKR8S1a",
  • "payment_base": "02124fd6b3c968390be4828058efc941b83f8ce9ccb00cfde86423744dbcb82576"
}

トークンの送付

任意の数のトークンを指定したアドレスに対して送付します。

Authorizations:
OAuth2 (all)
path Parameters
token_id
required
string (TokenIdParam)

トークンの識別子。

Request Body schema: application/json

addressでトークンを送付する相手のアドレスを指定し、amountで送付するトークンの量を指定します。

address
required
string
amount
integer

Responses

Request samples

Content type
application/json
{
  • "address": "1CY6TSSARn8rAFD9chCghX5B7j4PKR8S1a",
  • "amount": 100
}

Response samples

Content type
application/json
{
  • "token_id": "c3ec2fd806701a3f55808cbec3922c38dafaa3070c48c803e9043ee3642c660b46",
  • "txid": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc",
  • "p2c_address": "1CY6TSSARn8rAFD9chCghX5B7j4PKR8S1a",
  • "payment_base": "02124fd6b3c968390be4828058efc941b83f8ce9ccb00cfde86423744dbcb82576"
}

複数アドレスへのトークン送付

任意の数のトークンを指定した複数のアドレスに対して送付します。

Authorizations:
OAuth2 (all)
path Parameters
token_id
required
string (TokenIdParam)

トークンの識別子。

Request Body schema: application/json

アドレスと量の配列を指定します。 配列の各要素ではaddressでトークンを送付する相手のアドレスを指定し、amountで送付するトークンの量を指定します。"

required
Array of objects (TransferTokenRequest)

Responses

Request samples

Content type
application/json
{
  • "destinations": [
    ]
}

Response samples

Content type
application/json
{
  • "token_id": "c3ec2fd806701a3f55808cbec3922c38dafaa3070c48c803e9043ee3642c660b46",
  • "txid": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc",
  • "p2c_address": "1CY6TSSARn8rAFD9chCghX5B7j4PKR8S1a",
  • "payment_base": "02124fd6b3c968390be4828058efc941b83f8ce9ccb00cfde86423744dbcb82576"
}

トークンの焼却

任意の数のトークンを焼却します。

Authorizations:
OAuth2 (all)
path Parameters
token_id
required
string (TokenIdParam)

トークンの識別子。

query Parameters
amount
integer (AmountParam)
Example: amount=100

amountを受け取り、指定した量のトークンを焼却します。 amountが未入力の場合全てのトークンを焼却します。

Responses

tracking

トラッキングAPI

サブジェクトの登録

サブジェクト(トラッキングの対象となる物)を登録し、新規でトラッキングを開始します。指定されたサブジェクトがすでにトラッキング中の場合はトラッキングの開始に失敗します。

Authorizations:
OAuth2 (all)
Request Body schema: application/json
from_address
required
string

供給元を表すアドレス

required
Array of objects (TrackingDestination)

サブジェクトの移動先を表します。

Responses

Request samples

Content type
application/json
{
  • "from_address": "1CY6TSSARn8rAFD9chCghX5B7j4PKR8S1a",
  • "destinations": [
    ]
}

Response samples

Content type
application/json
{
  • "txid": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc"
}

サブジェクトの移動

サブジェクトの移動を記録します。サブジェクトがトラッキング中でない場合は記録に失敗します。

Authorizations:
OAuth2 (all)
Request Body schema: application/json
required
Array of objects (TrackingDestination)

サブジェクトの移動先を表します。

Responses

Request samples

Content type
application/json
{
  • "destinations": [
    ]
}

Response samples

Content type
application/json
{
  • "txid": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc"
}

サブジェクトを消費

トラッキング中のサブジェクトが消費されたものとみなして、トラッキングを終了します。サブジェクトがトラッキング中でない場合は失敗します。

Authorizations:
OAuth2 (all)
Request Body schema: application/json
subjects
required
Array of strings (TrackingSubjectId)

消費したサブジェクトを示します。

Responses

Request samples

Content type
application/json
{
  • "subjects": [
    ]
}

Response samples

Content type
application/json
{
  • "txid": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc"
}

トレース一覧

サブジェクトの移動の履歴を返します。履歴は発生日時の昇順でソートされています。

Authorizations:
OAuth2 (all)
path Parameters
subject_id
required
string (TrackingSubjectId)
Example: 6948DF80-14BD-4E04-8842-7668D9C001F5

サブジェクトの識別子。

Responses

Response samples

Content type
application/json
[
  • {
    }
]

トレースの詳細

サブジェクトの移動履歴(trace)に関する情報を返します。

Authorizations:
OAuth2 (all)
path Parameters
trace_id
required
number

サブジェクトの移動履歴(trace)に一意に振られたID

Responses

Response samples

Content type
application/json
{
  • "trace_id": 1,
  • "subject_id": "6948DF80-14BD-4E04-8842-7668D9C001F5",
  • "parents": [
    ],
  • "child_subject_ids": [
    ],
  • "tracking_payload": "545001fd8001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002df31817469c8c55647",
  • "tracking_payload_output_index": 1,
  • "inclusion_proof": "7598e2d934e1502a2e4e15f1ca3329bd444815430d6cdfe8465cdead162f824d3ed8d0fec153db11789998e1dae08f1210fe8dede07362b51a432c5dcf597388738b46b3bf72d2120e7c5ae9324940e159754d6548255c1b189507be2fcbae45eff9ee348b767ff382773444200f2e89c1469366306557c178d07deafb1c8197e20482237f0bc1f273021ee3fcbf1ad06f1c77829a91f2834d96d7d3eadd06fe8b81959d52cd979e0881ea7e6efdd1e2f5441bf30f346ada077ae16dcf4dec545e4116202dfe42a3a38d009cc5ae539942a9d73e945495913a22386c833660c51e381338c65bd474346210ac4530d7d5a186b416fab9ea06fbfd8ddcdd0311cb34b1175ea50a0b9364a0a6e4a815f964d2249308bae0853c611f44c9a3445a6138f028852d9eca13fc09bcd9b1f8606710240907d7697b2e851e0bd8ba26f015b962c296edf9e4b00d23083c9c504f10ffdc02ae8328532ebd3bb36a30b7a630ddf4129a1e9e21c4d787c980d12d8c978e598ad31ab0e371397b864b1dd4ac26",
  • "txid": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc",
  • "tx_index": 0,
  • "block_height": 101,
  • "block_time": 1626169080,
  • "from_address": "mnzdZUieW2Hqe9GzZzVbcA7nHkDeFhJFzd",
  • "to_address": "mnzdZUieW2Hqe9GzZzVbcA7nHkDeFhJFzd",
  • "moved": true
}

サブジェクトの一覧

指定したアドレスが所持しているsubjectのリストを取得します。 指定するアドレスは自身が生成したアドレスでなければいけません。 自身が生成したアドレスでない場合はHTTPステータスコードとして404(Not Found)を返します。 subjectが階層化されている場合は、下位階層のsubjectも含めて返します。 指定したアドレスに対応するsubjectが存在しない場合は空のリストを返します。

Authorizations:
OAuth2 (all)
path Parameters
address
required
string
Example: mnzdZUieW2Hqe9GzZzVbcA7nHkDeFhJFzd

アドレス

query Parameters
per
integer (PerPageParam) >= 1
Default: 25

1ページあたりの件数

page
integer (PageNumberParam) >= 1
Default: 1

ページ番号

Responses

Response samples

Content type
application/json
{
  • "count": 1,
  • "subjects": [
    ]
}

material_tracking(β版)

この機能は現在ベータ版としてのみ提供しています。 以下の制限にご注意ください

  • ベータ版の期間中にAPIのパラメータやパスに変更が加えられる可能性があります。ご利用中のアプリケーションやシステムのコードを定期的に確認してください。
  • ベータ版では、データベースのデータ構成に関して変更が加えられる可能性があります。ベータ版を使用して登録されたデータについてはその後のバージョンで参照される際に制約を受けるなどの影響が出る可能性があります。ただし、Tapyrus ブロックチェーンに記録されたトランザクションについては変更されることはありません。

マテリアルトラッキング API(ベータ版) は、製品に含まれる原材料の量を秘匿したまま、 サプライチェーンにおける原材料のトレースを可能にするため のプロトコルを REST API から実行可能にするものです。 これは例えば、原材料、メーカー、サプライヤー、リサイクル事業者を通じて移動する製品の 原材料の量を第三者から秘匿したまま追跡することを可能にします。

トラッキング対象の アイテム は複数の材料 (マテリアル) とその量で構成されます。Tapyrus ブロックチェーン上にはこれら から計算されたコミットメント(*1) が記録され、各種材料の量が直接記録されることはありません。これによって、製品の原材料の量を秘匿したままトレースを可能にします。

またこの API は、材料について秘匿された状態のまま、各取引で不正な材料の混入がないことを検証可能にするという特徴があります。 これによりサプライチェーンの監査コストを削減できる可能性があります。

※注意

アイテムの詳細は Tapyrus ブロックチェーンには記録されず秘匿されますが、同一の Tapyrus API エンドポイントを利用しているユーザは取得できます。 アイテムの詳細の公開範囲を厳密に管理する必要がある場合は、ご利用の API エンドポイントへのアクセス権の管理にご注意ください。

(*1): コミットメントとは、暗号学の手法で、ある情報を秘密にして固定(コミット)し、後からその情報を公開(オープン)することができるものを指します。この手法では、情報は変更できず、予め公開された証拠でその正当性が確認できます。

用語説明

トラッキングアドレス

マテリアルトラッキングを利用するためには、まずマテリアルトラッキング専用のアドレスを作成する必要があります。 このアドレスは、特定の場所、工場、工程、またはサプライチェーンの参加者を識別する識別子として機能し、トラッキング対象のアイテムを操作できる権限が誰にあるのかを示します。 アイテムは常にアドレスに所属し、そのアドレスに対応する秘密鍵を使用してのみ操作することができます。

アイテム

アイテムは追跡対象物を表します。アイテムは複数種類の材料から構成され、材料は「材料名(name)」「量(quantity)」「単位(unit)」で表現されます。 例えば、「アルミニウム100キログラム」「銅200グラム」などがアイテムの構成要素となり得ます。 アイテムは、Tapyrusブロックチェーン上に対応するトランザクション出力と対応します。

オペレーション: 鋳造(Mint)、輸送(Transfer)、焼却(Burn)

  • 鋳造(Mint) は新しいアイテムをTapyrusブロックチェーン上に登録する操作です。
  • 輸送(Transfer) は既に登録されたアイテムを別のトラッキングアドレスに転送する操作です。1つのアイテムを分割して複数の送り先に送ることや、複数のアイテムを1つの送り先に送ることも可能です。
  • 焼却(Burn) はアイテム、またはアイテムの一部をこれ以上転送できない状態にする操作です。アイテムが全て消費された場合や、アイテムの一部が消費された場合に行われます。また、加工や選別等によりアイテムに含まれる材料の量が減少した場合にもこの操作が行われます。

1 回の処理でこれらのオペレーションを組み合わせることができます。 その 1 回の処理は、1つの Tapyrus トランザクションとしてブロックチェーンに記録されます。

マテリアルトラッキング API の特徴

マテリアルトラッキング API は以下の特徴を持ちます。

  • 製品に含まれる材料の量や割合を秘匿したまま Tapyrus ブロックチェーンに記録できる
  • 各取引で不正な材料の混入がないことを検証可能にする

製品に含まれる材料の量や割合を秘匿したまま Tapyrus ブロックチェーンに記録できる

マテリアルトラッキング API に送られる材料の内訳は、Tapyrus API のデータベースに保存されますが、公開される Tapyrus ブロックチェーンにはそのまま記録されることはなく、 第三者から完全に秘匿されます。 具体的には、材料の情報とブラインドファクターから計算されたコミットメントだけが、 Tapyrus ブロックチェーンに記録されます。

各取引で不正な材料の混入がないことを検証可能にする

マテリアルトラッキング API の重要な特徴として、1回の処理(1つのトランザクション)の前後で材料の種類や量が変化しないことを誰でも検証できることが挙げられます。 この検証には材料の内訳といった秘匿された情報は必要ありません。 ブロックチェーンに記録されたコミットメントをもとに暗号学的に検証することができます。

3つのオペレーションのうち鋳造だけがこの検証に含まれません。 サプライチェーンにおける鋳造のプロセスの安全性だけを担保することができれば、 そのサプライチェーンで流通するアイテムや材料は、サプライチェーンの末端に至るまで不正に水増しされていないことを誰でも検証できるようになると言えます。

この特徴を利用することでサプライチェーンの過程でおこる不正な材料の混入を低コストで検知することができます。

検証の流れ

検証の方法について簡単に説明します。

  1. Tapyrus Core ノードを Tapyrus API が使用するブロックチェーンに参加する設定で起動し、同期を完了させます
  2. 検証を実施したい Tapryus トランザクションの入力のコミットメントと出力のコミットメントを取得します
  3. 入力のコミットメントの合算値と出力のコミットメントの合算値の差を計算し、これが楕円曲線上の無限遠点になっていることを確認します

この検証に成功すると、対象の Tapyrus トランザクションは入力と出力の間で材料の種類や量が変化していないことが保証されます。

利用方法

サプライチェーンで扱う材料の種類を定義する

マテリアルトラッキング API の利用を開始するにあたって、トラッキングする材料(マテリアル)の定義を導入対象のサプライチェーン内で合意する必要があります。 材料は「材料名(name)」「量(quantity)」「単位(unit)」から定義されます。

例えば、アルミニウム合金を扱うサプライチェーンを例にするとトラッキングする材料は以下のように定義されるかもしれません。

材料 材料名 単位
アルミニウム Al g
Cu g
マグネシウム Mg g
マンガン Mn g
ケイ素 Si g

このように定義された材料名と単位はサプライチェーン内で一貫して使用される必要があります。 このうち、材料名と単位を API では扱うことになります。表記の揺らぎがでないように厳密にどの文字を利用するのかまで定義し、サプライチェーン内で合意する必要があります。

単位はそのサプライチェーンで扱う必要がある精度を十分に表現できる最小の単位を定義することをお勧めします。 これはサプライチェーンの途中でより小さい単位に変換を行おうとすると、焼却(Burn)と鋳造(Mint) を行う必要が生まれ、 後述するアイテムの詳細を公開しなくても取引の前後で材料の量が不変であることを検証可能にする機能が活用できなくなるためです。

単位のルール

単位は以下の基本的な単位と、SI接頭辞を組み合わせて使用することができます。

基本的な単位

  • メートル: m
  • グラム: g
  • モル: mol
  • 平方メートル: m2
  • 立方メートル: m3

SI接頭辞

  • 10 ^ 30: Q (quetta)
  • 10 ^ 27: R (ronna)
  • 10 ^ 24: Y (yotta)
  • 10 ^ 21: Z (zetta)
  • 10 ^ 18: E (exa)
  • 10 ^ 15: P (peta)
  • 10 ^ 12: T (tera)
  • 10 ^ 9: G (giga)
  • 10 ^ 6: M (mega)
  • 10 ^ 3: k (kilo)
  • 10 ^ 2: h (hecto)
  • 10 ^ 1: da (deca)
  • 10 ^ -1: d (deci)
  • 10 ^ -2: c (centi)
  • 10 ^ -3: m (milli)
  • 10 ^ -6: µ (micro)
  • 10 ^ -9: n (nano)
  • 10 ^ -12: p (pico)
  • 10 ^ -15: f (femto)
  • 10 ^ -18: a (atto)
  • 10 ^ -21: z (zepto)
  • 10 ^ -24: y (yocto)
  • 10 ^ -27: r (ronto)
  • 10 ^ -30: q (quecto)

  • キログラム: kg
  • キロメートル: km
  • マイクロメートル: µm

ここに含まれない単位(例えばリットルやフィートなど)で量の数値を持っている場合は、ここで許可された単位に変換してから登録してください。 これらの単位で表現できない単位を使用する必要がある場合は chaintope 社までお問い合わせください。

アイテムを定義する

各ステークホルダー内またはステークホルダー間で輸送されるアイテムは実際には何であるかについて決めておく必要があります。 マテリアルトラッキング API がサポートするのは、アイテム単位でのトラッキングです。 このアイテムが具体的に何を指すかは、適用対象のサプライチェーンやそれに参加するステークホルダーによって異なります。

そのため、アイテムがトレースを行う際の起点とする単位となります。 最初に取り決めたアイテムより小さい単位で、後からトレースをしたいとなってもできないことに注意してください。

例えばある部品メーカーが製造する際にアイテムを同じ時間単位で製造された 10 ロット単位で扱うことにしたとします。 その後ある1つのロットの部品に重大な不良品が含まれる可能性が発覚しました。 その1つのロットの流通先をトレースしたくても、実際には10ロット単位で管理していたため、 問題のロットが流通した可能性がある範囲を特定するには一緒に管理されている 10 ロットすべてについて調査をする必要があります。

できるだけ細かい単位でアイテムを定義すればよいかというとそうはなりません。 アイテムの輸送では、アイテムごとの材料の割合を変えずに、ただアイテムを所有しているアドレスだけを移動させたい場合、 アイテムごとに1つのトランザクションを作成する必要があります。 複数のアイテムを1つのトランザクションで輸送すると、アイテムが混ざってしまい、輸送トランザクションの各アウトプットそれぞれが、 インプットのどれと対応するかわからなくなります。 そして、トランザクションの発行には費用がかかるため、アイテムをどの粒度で管理したいのかと言うことと、コストのバランスを取る必要があります。

トラッキングアドレスを生成する

利用を開始するためにサプライチェーンのすべてのステークホルダーはトラッキングアドレスを生成する必要があります。 直接取引があるステークホルダーは取引相手にアドレスを伝えることで、相手からアイテムを受け取ることができます。

アドレスの生成 API を使い生成します。 purpose には material_tracking を指定します。

アドレスの生成 APIリクエストボディ

{
  "purpose": "material_tracking"
}

レスポンス

"14CZAF6gva9Ayd8oLZg7EWGpjF5MCNJYhM"

サプライチェーンの例

次のセクションでは、APIを使ってサプライチェーン内でアイテムの鋳造(Mint)、輸送(Transfer)の方法を説明します。 さらに、アイテムを使って新たなアイテムを製造する例も示します。 アイテムの流れは図で示されています。矢印はAPIによるアイテムの操作を表しています。 「鋳造(Mint)」や「輸送(Transfer)」の矢印は一つずつですが、製造のための矢印は二つあります。 扱うアイテムや送り先が増えると、「鋳造(Mint)」や「輸送(Transfer)」に関連する矢印も増えます。

サプライチェーンの例

アイテムの鋳造(Mint)

アイテムの鋳造(Mint)

サプライチェーンに参加する材料は鋳造(Mint)オペレーションによって Tapyrus ブロックチェーン上に登録することでトラッキングを開始します。 アイテムの登録 API を利用して、材料を鋳造することができます。

アルミニウム合金の素材となるアルミニウムを鋳造する場合、以下のような JSON をリクエストボディにセットして API を実行します。

アイテムの登録 APIリクエストボディ

{
  "from_address": "14CZAF6gva9Ayd8oLZg7EWGpjF5MCNJYhM",
  "mint": [
    {
      "to_address": "14CZAF6gva9Ayd8oLZg7EWGpjF5MCNJYhM",
      "materials": [
        { "name": "Al", "quantity": 500000, "unit": "g" }
      ]
    }
  ]
}

実行に成功すると以下のような応答が返ります。

レスポンス

{
  "txid": "d4676c9fed254a5951968f7b72156c99fa8ace4708406ee96bf3cc5bb26a2cc4",
  "tracking_payloads": [
    {
      "item_id": "d4676c9fed254a5951968f7b72156c99fa8ace4708406ee96bf3cc5bb26a2cc400000000",
      "txid": "d4676c9fed254a5951968f7b72156c99fa8ace4708406ee96bf3cc5bb26a2cc4",
      "index": 0,
      "materials": [
        {
          "name": "Al",
          "quantity": 500000,
          "unit": "g"
        }
      ],
      "r": "80b7018888e5469e9097b844d3d24cca06e98c929db50c69dccf1d2e0008e449",
      "commitment": "0223859323520cb294dc3e3a2bb62e5c293e586cc5deb3fc9df01406831f4a8bb9",
      "to_address": "14CZAF6gva9Ayd8oLZg7EWGpjF5MCNJYhM"
    }
  ]
}

応答に含まれる item_id の値は、この鋳造されたアイテムを使用するために必要になります。 また、鋳造されたアイテムは Tapyrus ブロックチェーン上に記録されており、 どこに記録されているかは txid 及び、index(txid のトランザクションのアウトプットのインデックス) で見つけることができます。

仮に応答に含まれる情報を忘れても ユーザのアイテム一覧取得 API を利用して取得することができます。

アイテムの輸送(Transfer)

アイテムの輸送(Transfer)

アイテムの輸送 API ではアイテムを別のトラッキングアドレスへ移動することができます。 アイテムの鋳造(Mint) で登録したアイテムを出荷して、取引先に送る場合などに利用します。

例えば、前のセクションで登録したアイテムを送る場合、次のような JSON をリクエストボディにセットして API を実行します。

アイテムの輸送 APIリクエストボディ

{
  "item_ids": [
    "d4676c9fed254a5951968f7b72156c99fa8ace4708406ee96bf3cc5bb26a2cc400000000"
  ],
  "transfer": [
    {
      "materials": [
        { "name": "Al", "quantity": 500000, "unit": "g" }
      ],
      "to_address": "12nePnPumNoUDLiJLihprsSwV7T78R1J1X"
    }
  ]
}

実行に成功すると以下のような応答が返ります。

レスポンス

{
  "txid": "a3f943bf63dde234ca6bf3e5eddb12ede1cd417cd9e317eb19d39fc005974403",
  "tracking_payloads": [
    {
      "item_id": "a3f943bf63dde234ca6bf3e5eddb12ede1cd417cd9e317eb19d39fc00597440300000000",
      "txid": "a3f943bf63dde234ca6bf3e5eddb12ede1cd417cd9e317eb19d39fc005974403",
      "index": 0,
      "materials": [
        {
          "name": "Al",
          "quantity": 500000,
          "unit": "g"
        }
      ],
      "r": "80b7018888e5469e9097b844d3d24cca06e98c929db50c69dccf1d2e0008e449",
      "commitment": "0223859323520cb294dc3e3a2bb62e5c293e586cc5deb3fc9df01406831f4a8bb9",
      "to_address": "12nePnPumNoUDLiJLihprsSwV7T78R1J1X"
    }
  ]
}

アイテムの製造

アイテムの製造

また、輸送だけではなく、複数のアイテムに含まれる材料を組み合わせて新しいアイテムを生成することもできます。 いま輸送したアイテムと、別のアイテムを組み合わせて新しいアイテムを生成する例を紹介します。

アルミニウムを主成分とする合金を生成します。使用する材料の 0.2% が製造の過程で失われると仮定します。 失われる材料は、焼却(Burn)オペレーションによってブロックチェーンにそれ以上流通できない形で記録されます。

アイテムの輸送 APIリクエストボディ

{
  "item_ids": [
    "a3f943bf63dde234ca6bf3e5eddb12ede1cd417cd9e317eb19d39fc00597440300000000",
    ...
  ],
  "transfer": [
    {
      "materials": [
        { "name": "Al", "quantity": 499000, "unit": "g" },
        { "name": "Cu", "quantity": 2047, "unit": "g" },
        { "name": "Mg", "quantity": 2047, "unit": "g" },
        { "name": "Mn", "quantity": 4094, "unit": "g" },
        { "name": "Si", "quantity": 4606, "unit": "g" }
      ],
      "to_address": "12nePnPumNoUDLiJLihprsSwV7T78R1J1X"
    }
  ],
  "burn": [
        { "name": "Al", "quantity": 1000, "unit": "g" },
        { "name": "Cu", "quantity": 4, "unit": "g" },
        { "name": "Mg", "quantity": 4, "unit": "g" },
        { "name": "Mn", "quantity": 8, "unit": "g" },
        { "name": "Si", "quantity": 9, "unit": "g" }
  ]
}

実行に成功すると以下のような応答が返ります。応答に含まれる1つめの item_id が新しく生成されたアイテムの ID です。 Tapyrus ブロックチェーン上には commitment の値だけが記録され、materials 等の詳細は秘匿されます。 2つめの item_id は焼却されたものを示しており、送り先アドレスを示す to_addressnull になります。

レスポンス

{
  "txid": "0700dae442f960503ebde27d626318f2f6a41eb6fc0981c52c6f598568631d5c",
  "tracking_payloads": [
    {
      "item_id": "0700dae442f960503ebde27d626318f2f6a41eb6fc0981c52c6f598568631d5c00000000",
      "txid": "0700dae442f960503ebde27d626318f2f6a41eb6fc0981c52c6f598568631d5c",
      "index": 0,
      "materials": [
        { "name": "Al", "quantity": 499000, "unit": "g" },
        { "name": "Cu", "quantity": 2047, "unit": "g" },
        { "name": "Mg", "quantity": 2047, "unit": "g" },
        { "name": "Mn", "quantity": 4094, "unit": "g" },
        { "name": "Si", "quantity": 4606, "unit": "g" }
      ],
      "r": "c60b763ee27da675edaaaa69a3183112ad6335334f88c51b6e432d8a1a55831a",
      "commitment": "03408c1ac8a6588575947e4b0b09d6dc786cb6fb8c9ac38bcb7d10c814e96045fa",
      "to_address": "12nePnPumNoUDLiJLihprsSwV7T78R1J1X"
    },
    {
      "item_id": "0700dae442f960503ebde27d626318f2f6a41eb6fc0981c52c6f598568631d5c00000002",
      "txid": "0700dae442f960503ebde27d626318f2f6a41eb6fc0981c52c6f598568631d5c",
      "index": 2,
      "materials": [
        { "name": "Al", "quantity": 1000, "unit": "g" },
        { "name": "Cu", "quantity": 4, "unit": "g" },
        { "name": "Mg", "quantity": 4, "unit": "g" },
        { "name": "Mn", "quantity": 8, "unit": "g" },
        { "name": "Si", "quantity": 9, "unit": "g" }
      ],
      "r": "68f51100ea75344fb384e4590f75fda0e732f6090907988c26b56ba6cbb26f2d",
      "commitment": "033093b78c787655a9782ff153d43c8f9f637149bd11609575857c5065ff10f364",
      "to_address": null
    }
  ]
}

取引相手と共有する値(共有値) について

同じTapyrus API エンドポイントを共有していない取引相手へアイテムを送る場合、以下のデータ(共有値)を取引先と共有する必要があります。

  • コミットメントに含まれる材料と量と単位
  • ブランドファクター r の値
  • コミットメントが記録されたトランザクションのアウトプットを示すアウトポイント( txidindex )

ここまでトラッキングしてきたアイテムを取引先へ納品するとします。 このとき取引先がこれまで利用したものとは違う Tapyrus API エンドポイント(https://xxxxxxxx.api.tapyrus.chaintope.com の xxxxxxxx が異なるエンドポイント)を利用してる場合に、 取引先が受け取ったアイテムを操作するためにはこの 共有値 を共有しておく必要があります。

共有値 を受け取った取引先は アイテム詳細の登録 API を使い、共有値を Tapyrus API へ登録します。 これによって、受け取ったアイテムを操作することができるようになります。

開示値について

アイテムの詳細取得 API の応答に含まれる opened_value (開示値) は、あるアイテムに含まれる材料の内訳を公開し、その内容が Tapyrus ブロックチェーン上に記録されたコミットメントと一致することを検証するために必要なすべての情報を含んだ JWT 形式のデータです。 不特定多数へアイテムの品質を提示する際に利用できます。

アイテムの登録

新しいアイテムを登録します。アイテムの内容として以下を指定する必要があります。

  • 材料名(name)
  • 量(quantity)
  • 単位(unit)

材料名は255文字以内の文字列、量は1以上、2^64-1 以下の整数値、単位は文字列で指定します。利用可能な単位は、リクエストパラメーター unit の詳細な説明を参照してください。 複数のアイテムを登録することができ、登録されたアイテムはユーザーのウォレット内のアドレスに送付されます。 また、以下の場合はエラーとして扱われます。

  • 量が最大値(2^64-1)を超えた場合
  • 量が最小値(1)未満の場合
  • 材料名の文字数が最大値(255)を超えた場合
  • 単位が定義済みの単位セットに含まれない場合
Authorizations:
OAuth2 (all)
Request Body schema: application/json
from_address
string

アイテムの供給元を表すアドレス

required
Array of objects (TrackingMaterialAndDestination)

Responses

Request samples

Content type
application/json
{
  • "from_address": "mnzdZUieW2Hqe9GzZzVbcA7nHkDeFhJFzd",
  • "mint": [
    ]
}

Response samples

Content type
application/json
{
  • "txid": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc",
  • "tracking_payloads": [
    ]
}

アイテムの輸送

複数の送り先に、指定された配分でアイテムを送ります。 送り先の情報として、送り先のトラッキングアドレス、その送り先へ送る材料名と量と単位の組を指定することができます。 送る量の総和はユーザーが保持している量を超えることはできません。 また、以下の場合はエラーとして扱われます。

  • 送る対象のアイテムをユーザーが保持していない場合
  • 送る対象のアイテムがすでに輸送済みの場合
  • アイテムごとの送り先の量の総和が送り元の量の総和を超えた場合
  • 送り先のアイテムの量が最大値(2^64-1)を超えた場合
  • 送り先のアイテムの量が最小値(1)未満の場合
  • 送り元のアイテムの材料にない材料が送り先の材料に指定された場合
  • 送り元のアイテムのにない単位が送り先の単位に指定された場合
Authorizations:
OAuth2 (all)
Request Body schema: application/json
item_ids
required
Array of strings
Array of objects (TrackingMaterialAndDestination)

輸送する対象の材料と送り先のアドレスの一覧

Array of objects (TrackingMaterial)

焼却する対象の材料の一覧

change_address
string

お釣りの送り先アドレス

Responses

Request samples

Content type
application/json
{
  • "item_ids": [
    ],
  • "transfer": [
    ],
  • "burn": [
    ],
  • "change_address": "mnzdZUieW2Hqe9GzZzVbcA7nHkDeFhJFzd"
}

Response samples

Content type
application/json
{
  • "txid": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc",
  • "tracking_payloads": [
    ]
}

アイテムの一括処理

アイテムの登録・輸送・焼却を一括で行います。 アイテムの登録・輸送・焼却を行うアイテムの材料名と量と単位の組、アドレスをそれぞれ指定します。

以下の場合はエラーとして扱われます。

  • 登録するアイテムの量が最大値(2^64-1)を超えた場合
  • 登録するアイテムの量が最小値(1)未満の場合
  • 登録するアイテムの材料名の文字数が最大値(255)を超えた場合
  • 単位が定義済みの単位セットに含まれない場合
  • アイテムごとの送り先の量の総和が送り元の量の総和を超えた場合
  • 送る対象のアイテムをユーザーが保持していない場合
  • 送る対象のアイテムがすでに輸送済みの場合
  • 送り先のアイテムの量が最大値(2^64-1)を超えた場合
  • 送り先のアイテムの量が最小値(1)未満の場合
  • 送り元のアイテムの材料にない材料が送り先の材料に指定された場合
  • 送り元のアイテムのにない単位が送り先の単位に指定された場合
  • 焼却する対象のアイテムをユーザーが保持していない場合
  • 焼却する対象のアイテムがすでに輸送済みの場合
  • 焼却するアイテムの量が送り元の量の総和を超えた場合
  • 焼却するアイテムの量が最大値(2^64-1)を超えた場合
  • 焼却するアイテムの量が最小値(1)未満の場合
  • 送り元のアイテムの材料にない材料が焼却するアイテムの材料に指定された場合
  • 送り元のアイテムの材料にない材料が焼却するアイテムの単位に指定された場合
Authorizations:
OAuth2 (all)
Request Body schema: application/json
item_ids
required
Array of strings
from_address
string

アイテムの供給元を表すアドレス

required
Array of objects (TrackingMaterialAndDestination)

新たに登録する対象の材料と送り先のアドレスの一覧

required
Array of objects (TrackingMaterialAndDestination)

輸送する対象の材料と送り先のアドレスの一覧

required
Array of objects (TrackingMaterial)

焼却する対象の材料の一覧

change_address
string

お釣りの送り先アドレス

Responses

Request samples

Content type
application/json
{
  • "item_ids": [
    ],
  • "from_address": "mnzdZUieW2Hqe9GzZzVbcA7nHkDeFhJFzd",
  • "mint": [
    ],
  • "transfer": [
    ],
  • "burn": [
    ],
  • "change_address": "mnzdZUieW2Hqe9GzZzVbcA7nHkDeFhJFzd"
}

Response samples

Content type
application/json
{
  • "txid": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc",
  • "tracking_payloads": [
    ]
}

ユーザーのアイテム一覧取得

ユーザーにかかわるアイテムの一覧を返します。 ユーザにかかわるアイテムには以下が含まれます。

  1. ユーザーが作成したトランザクションに含まれるアイテム
  2. ユーザー宛に送られたアイテム 一覧はページネートされた形式で一定の件数ずつ返されます。
Authorizations:
OAuth2 (all)
query Parameters
per
integer (PerPageParam) >= 1
Default: 25

1ページあたりの件数

page
integer (PageNumberParam) >= 1
Default: 1

ページ番号

moved
boolean

移動済み(UTXOが使用済み)のアイテムを返すかを指定します。

to
string
Default: "self"

'self' が指定されれば、自分宛てのアイテムを返します。 アドレスが指定されている場合はそのアドレス宛のアイテムを返します。 このパラメータが指定されていない場合のデフォルトは'self'です。 指定するアドレスは自分のトラッキングアドレスである必要があります。 アイテムの送り先を指定した取得をしない場合は空文字を指定してください。

from
string

'self' が指定されれば、自分が送ったアイテムを返します。 アドレスが指定されている場合はそのアドレスから送られたアイテムを返します。 指定するアドレスは自分のトラッキングアドレスである必要があります。

Responses

Response samples

Content type
application/json
{
  • "count": 1,
  • "items": [
    ]
}

アイテム詳細の登録

エンドポイントを共有していないステークホルダーからアイテムの値を登録します。 アイテムの値には以下のデータが含まれます。

  • コミットメントに含まれる材料と量と単位
  • ブラインドファクター(r)の値
  • コミットメントが記録されたトランザクションのアウトプットを示すアウトポイント(txid と index)

登録時は入力された値からコミットメントを計算してその値をアイテムに含まれるコミットメント値と合致するか検証します。

以下の場合はエラーとして扱われます。

  • txid, indexに対応するアイテムが存在しない場合
  • コミットメントの検証に失敗した場合
  • 既に登録されているアイテムの場合
Authorizations:
OAuth2 (all)
Request Body schema: application/json
txid
required
string (TransactionId)

トランザクションID

index
required
integer [ 0 .. 4294967295 ]
required
Array of objects (TrackingMaterial)
r
required
string

Responses

Request samples

Content type
application/json
{
  • "txid": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc",
  • "index": 0,
  • "materials": [
    ],
  • "r": "d0833391074e4066d455430d31c4cb82db8204b2932169358ee50e369ce30a8f"
}

Response samples

Content type
application/json
{
  • "item_id": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc00000000",
  • "txid": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc",
  • "index": 0,
  • "mint_address": "mnzdZUieW2Hqe9GzZzVbcA7nHkDeFhJFzd",
  • "to_address": "mnzdZUieW2Hqe9GzZzVbcA7nHkDeFhJFzd",
  • "materials": [
    ],
  • "r": "d0833391074e4066d455430d31c4cb82db8204b2932169358ee50e369ce30a8f",
  • "commitment": "03b42c5519e2489529a9bd8304de54a68c558af23c1d5b15a9777f03db0e07fa64",
  • "block_height": 101,
  • "block_time": 1626169080,
  • "tx_index": 1,
  • "moved": true,
  • "opened_value": "eyJhbGciOiJFUzI1NksifQ.eyJpdGVtX2lkIjoiYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYTAwMDAwMDAwIiwidHhpZCI6ImFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEiLCJpbmRleCI6MCwiY29tbWl0bWVudCI6IjAzMTRhYWMzOWQ3YzVjMWUzZmIzYjhjODc4MDk4NjQwYjdiMjE0NmExOTU0MWU1OTc5MmY2ZDdjODcyNjZkNjczYSIsInBvaW50IjoiMDM0MzlmZWZjYjQ1ZWRkZWJhYTczOGFhZWUyZDkzNjE3OGNkYjlmMWRmNmI4NTk3MDY5ZTA5ZmZmNmIyOGI5MDdlIiwibWF0ZXJpYWxzIjpbeyJuYW1lIjoiQSIsInF1YW50aXR5Ijo2MDAsInVuaXQiOiJnIn0seyJuYW1lIjoiQiIsInF1YW50aXR5IjoyMDAsInVuaXQiOiJnIn0seyJuYW1lIjoiQyIsInF1YW50aXR5IjoyMDAsInVuaXQiOiJnIn1dfQ.XejyBBWGaAqc-x-omKqHqgmzU4y-m_5-lraFdKpCYfir_diNy3LfxAsYAAjpx1bmBkajPSuVFiyKWsOi7EMv_w"
}

アイテムの先祖ツリーの取得

指定したアイテムの過去の流通経路(先祖)の情報を木構造で返します。 応答の JSON の最上位のオブジェクトは木構造のルートノードであり、 item_id で指定したアイテムを持ちます。 parents キーはそのアイテムの直接の親のアイテムのリストです。 再帰的な構造を持ち、 parents キーのノードをたどることで、より過去のトレースデータを取得することができます。

Authorizations:
OAuth2 (all)
query Parameters
item_id
required
string

アイテムID

depth
integer [ 1 .. 5 ]
Default: 3

最大の深さ

Responses

Response samples

Content type
application/json
{
  • "item": {
    },
  • "leaf": true,
  • "parents": [
    ]
}

アイテムの子孫ツリーの取得

指定したアイテムのその時点以降の流通経路(子孫)の情報を木構造で返します。 応答の JSON の最上位のオブジェクトは木構造のルートノードであり、 item_id で指定したアイテムを持ちます。 children キーはそのアイテムの直接の子(つまり直接の転送先)のアイテムのリストです。 再帰的な構造を持ち、 children キーのノードをたどることで、より指定した時点以降のトレースデータを取得することができます。

Authorizations:
OAuth2 (all)
query Parameters
item_id
required
string

アイテムID

depth
integer [ 1 .. 5 ]
Default: 3

最大の深さ

Responses

Response samples

Content type
application/json
{
  • "item": {
    },
  • "leaf": true,
  • "children": [
    ]
}

アイテムの詳細取得

指定されたアイテムの詳細情報を返します。

Authorizations:
OAuth2 (all)
query Parameters
item_id
required
string

アイテムID

Responses

Response samples

Content type
application/json
{
  • "item_id": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc00000000",
  • "txid": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc",
  • "index": 0,
  • "mint_address": "mnzdZUieW2Hqe9GzZzVbcA7nHkDeFhJFzd",
  • "to_address": "mnzdZUieW2Hqe9GzZzVbcA7nHkDeFhJFzd",
  • "materials": [
    ],
  • "r": "d0833391074e4066d455430d31c4cb82db8204b2932169358ee50e369ce30a8f",
  • "commitment": "03b42c5519e2489529a9bd8304de54a68c558af23c1d5b15a9777f03db0e07fa64",
  • "block_height": 101,
  • "block_time": 1626169080,
  • "tx_index": 1,
  • "moved": true,
  • "opened_value": "eyJhbGciOiJFUzI1NksifQ.eyJpdGVtX2lkIjoiYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYTAwMDAwMDAwIiwidHhpZCI6ImFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEiLCJpbmRleCI6MCwiY29tbWl0bWVudCI6IjAzMTRhYWMzOWQ3YzVjMWUzZmIzYjhjODc4MDk4NjQwYjdiMjE0NmExOTU0MWU1OTc5MmY2ZDdjODcyNjZkNjczYSIsInBvaW50IjoiMDM0MzlmZWZjYjQ1ZWRkZWJhYTczOGFhZWUyZDkzNjE3OGNkYjlmMWRmNmI4NTk3MDY5ZTA5ZmZmNmIyOGI5MDdlIiwibWF0ZXJpYWxzIjpbeyJuYW1lIjoiQSIsInF1YW50aXR5Ijo2MDAsInVuaXQiOiJnIn0seyJuYW1lIjoiQiIsInF1YW50aXR5IjoyMDAsInVuaXQiOiJnIn0seyJuYW1lIjoiQyIsInF1YW50aXR5IjoyMDAsInVuaXQiOiJnIn1dfQ.XejyBBWGaAqc-x-omKqHqgmzU4y-m_5-lraFdKpCYfir_diNy3LfxAsYAAjpx1bmBkajPSuVFiyKWsOi7EMv_w"
}

address

アドレスの一覧

これまで生成したアドレスを一覧にして返します。 任意でpurposeを設定し、取得するアドレスの種類を指定できます。未指定の場合、汎用的に使うアドレスのみ取得します。

  • purposegeneralと入力すると、生成したアドレスのうち、汎用的に使うアドレスのみ取得します。

  • purposeallと入力すると、生成したアドレスすべて取得します。

  • purposetrackingと入力すると、生成したアドレスのうち、トラッキングに使用されているアドレスを取得します。

  • purposematerial_trackingと入力すると、生成したアドレスのうち、マテリアルトラッキングに使用されているアドレスを取得します。

Authorizations:
OAuth2 (all)
query Parameters
per
integer (PerPageParam) >= 1
Default: 25

1ページあたりの件数

page
integer (PageNumberParam) >= 1
Default: 1

ページ番号

purpose
string (PurposeAddressParam)

取得したいアドレス

Responses

Response samples

Content type
application/json
{
  • "count": 1,
  • "addresses": [
    ]
}

アドレスの生成

受金用のアドレスを生成して返します。 任意でpurposeを設定し、生成するアドレスの種類を指定できます。未指定の場合、汎用的に使うアドレスを生成します。

  • purposegeneral と入力する、または未指定の場合、汎用的に使うアドレスを生成します。
  • purposetracking と入力すると、トラッキングに使用するアドレスを生成します。
  • purposematerial_tracking と入力すると、マテリアルトラッキングに使用するアドレスを生成します。
Authorizations:
OAuth2 (all)
Request Body schema: application/json
purpose
string

Responses

Request samples

Content type
application/json
{
  • "purpose": "general"
}

Response samples

Content type
application/json
"mnzdZUieW2Hqe9GzZzVbcA7nHkDeFhJFzd"

user

ユーザーの作成

ユーザーを新しく作成します。この API を実行するには管理者権限をもったユーザーのアクセストークンを利用してリクエストをする必要があります。管理者権限はダッシュボードで設定することができます。

Authorizations:
OAuth2 (all)
Request Body schema: application/json
subject
required
string [ 1 .. 128 ] characters

作成するユーザーの名前やクライアントアプリケーションにおけるIDなど、ユーザーを識別するための任意の文字列を指定できます。

expires_at
integer

作成するユーザーのアクセストークンの有効期限を UNIX タイムの秒単位で指定できます。

Responses

Request samples

Content type
application/json
{
  • "subject": "user 01",
  • "expires_at": 1231006505
}

Response samples

Content type
application/json
{
  • "subject": "user 01",
  • "expires_at": 1231006505,
  • "access_token": "PRzX5gAh7jV0JNUG56OMnx9krwejuE4axMlCRXLaEye5prBntiI80FWC5BonryyZ"
}

ユーザー情報

ユーザーのid,balances, addressesの情報を返します。idsub 要素で返します。

balances はユーザーが持つ TPC (Tapyrus の基軸コイン)の残高を返しますが、Tapyrus API ユーザーが直接 TPC を利用するのは非推奨です。また、将来のバージョンで削除されます。

balancesaddresses は非推奨です。トークンの残高の取得および、アドレスの一覧の取得は、それぞれ トークンの総量取得 APIアドレスの一覧 API を利用することを推奨します。これらは将来のバージョンで削除されます。

Authorizations:
OAuth2 (all)
query Parameters
confirmation_only
boolean (ConfirmationOnlyParam)
Example: confirmation_only=true

オプションでconfirmation_onlyを設定でき、trueの場合ブロックチェーン上で承認済みのトークンのみを取得し、falseの場合未承認のトークンも含めて取得します。デフォルトはtrueです。

Responses

Response samples

Content type
application/json
{
  • "sub": 1,
  • "balances": {
    },
  • "addresses": [
    ]
}