Download OpenAPI specification:Download
これは chaintope 社が開発するブロックチェーン Tapyrus を使ったブロックチェーンに関係する機能を簡単に利用するための REST API です。 現在以下のユースケースをサポートしています。これは今後も拡張されていきます。
また、以下の機能をベータ版として提供しています。
Tapyrus ブロックチェーンについては以下の情報を参照してください。
Tapyrus API は REST API として提供されています。利用を開始するためには、Tapyrus API の エンドポイント
に対して、 認証
済みの
トークンを使いアクセスする必要があります。また、認証されたユーザーはそれぞれが自身のウォレットを Tapyrus API 内部に持つことになります。
ウォレットではそのユーザーのトークンなどのアセットを管理するための鍵が管理され、アセットの移動などで利用されます。
エンドポイントは以下のフォーマットで作成されます。
https://xxx.api.tapyrus.chaintope.com/api/v1
xxx
の部分は各ユーザー固有の識別子になります。正式なURLは、ダッシュボードで確認できます。
ダッシュボードに登録すると、chaintopeが登録情報を確認後、お客様のAPIエンドポイントを設定します。 エンドポイントが設定されるまでは、APIの機能はご利用いただけません。
Tapyrus APIに接続する際には、クライアント証明書が必要になります。ダッシュボードの「クライアント証明書」のメニューより、 クライアント証明書を発行してください。 発行すると秘密鍵と公開鍵の証明書を含むPKCS#12形式のファイルがダウンロードできます。
ダッシュボードからAPIに接続するユーザーを作成します。Tapyrus APIではユーザー単位にウォレットが作成されます。 ウォレットではアセットの受け取りや、送付に必要な公開鍵と秘密鍵のペアが管理されています。 そのため、認証を行ったユーザーごとに独立したアセットの管理が可能になります。
ダッシュボードの、「ユーザー一覧」からアクセスするユーザーを作成することができます。 ユーザーを作成すると、そのユーザー用のアクセストークンが発行されます。このアクセストークンとクライアント証明書の両方が漏洩すると、 不正アクセスが可能になるため、データの取り扱いには十分注意してください。
クライアント証明書とユーザーが作成されると、APIにアクセスできるようになります。簡単な接続確認は、curlで以下のように行なえます。
$ openssl pkcs12 -in <ダウンロードした.p12ファイルのパス> -out cert.pem -nodes -clcerts
$ curl -X GET -H 'Authorization: Bearer <ユーザーのアクセストークン>' "https://xxx.api.tapyrus.chaintope.com/api/v1/timestamps" -E cert.pem
成功するとAPIへのアクセスが可能になっています。これらの認証情報を使って、以下に記載する各APIがご利用いただけます。
ブロックチェーンに任意の値をタイムスタンプとして記録します。
現在、記録方法として2種類のtype
(simple
(デフォルト)、trackable
)をサポートしています。
simple
を指定した場合は、値がトランザクション内のOP_RETURNアウトプットに直接埋め込まれます。
単純に値をブロックチェーンに記録する場合はsimple
の利用を推奨します。
trackable
を指定した場合は、コンテンツのハッシュ値を組み合わせたPay to Contractアドレスが生成され、コンテンツのハッシュ値は間接的に記録されます。
アドレスは、Timestampの戻り値の1つであるpayment_base
と指定されたprefix
、コンテンツハッシュ値を使って次のように計算されます。
コンテンツハッシュ値はdigest
の指定に従ってcontent
をハッシュ化したものです。(digest
がnone
の場合は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
を使用)
sha256
: SHA256ハッシュ化double_sha256
: SHA256の二重ハッシュ化none
: 値をハッシュ化せずそのまま記録
prefix
には任意の値(Hex文字列)を指定できます。prefix
はdigest
の指定に関わらず、ハッシュ化されずにそのまま content
の前に付与されてブロックチェーンに記録されます。Timestamp API v1はprefix
、content
に任意の文字列を受け取り、それをバイナリデータとして扱いますが、
Timestamp API v2ではprefix
、content
にhex文字列のみを受け付け、内部でバイナリーデータに変換してブロックチェーンに記録します。
以下は、type
にsimple
を指定した場合のリクエストボディの例です。
{
"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
以下の場合はエラーとして扱われます。
type
がsimple
、trackable
のいずれでもない場合content
が指定されていない場合content
がHex文字列ではない場合content
が256文字以上の場合digest
がsha256
、double_sha256
、none
以外の場合prefix
がHex文字列ではない場合prefix
が21文字以上の場合現在、タイムスタンプAPIには2つのバージョン(1、2)が存在します。 バージョン1では、
content
、prefix
には任意の文字列を指定できます。content
、prefix
はバイナリデータとして扱います。上記と同じデータをバージョン1(POST /api/v1/timestamps)で登録した場合、ブロックチェーンにはOP_RETURNアウトプット内に以下の形式で記録されます。
OP_RETURN 373436353733373436313730373037623232363636393635366336343331323233613230323237363631366337353635333132323764
all
) content
, digest
, prefix
, type
を受け取り、ブロックチェーンにハッシュ値をタイムスタンプとして記録します。
content required | string or null (TimestampContentHex) ^([0-9a-fA-F]{2}){0,127}$ 最大 127 バイト(254文字)のHex文字列 |
digest | string or null (Digest) Enum: "sha256" "double_sha256" "none" |
prefix | string^([0-9a-fA-F]{2}){0,10}$ |
type | string (TimestampType) Default: "simple" Enum: "simple" "trackable" |
{- "content": "436f6e74656e7420666f722054696d657374616d70",
- "digest": "sha256",
- "prefix": "0102030405060708090a",
- "type": "trackable"
}
{- "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
}
ブロックチェーンに記録したタイムスタンプを取得し、content_hash
,prefix
,txid
を一覧で表示します。
all
) {- "count": 2,
- "timestamps": [
- {
- "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
}
]
}
タイムスタンプ ID に対応する Timestamp を表示します。
all
) id required | integer Timestamp id。 |
{- "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
タイプのタイムスタンプを更新する新たなタイムスタンプを記録します。更新されたタイムスタンプは latest
フィールドに false
が返る様になり、最新のものではない事が確認出来るようになります。
また、ブロックチェーン上では IDを指定したタイムスタンプに対応する Pay to Contract UTXO をインプットとして持つ新たなトランザクションがブロードキャストされます。そのトランザクションのアウトプットリストには古いタイムスタンプが登録されたときと同様に Pay to Contract アドレス宛の支払いアウトプットがセットされます。
これにより、古いタイムスタンプの UTXO は消費され、更新された新たなタイムスタンプを記録する UTXO が生まれます。この仕組みにより、この API によって発行されるトランザクションが、更新対象の古いタイムスタンプを更新する唯一のものであることが保証されます。
all
) id required | integer 更新する対象となるタイムスタンプのIDです。 |
content
, digest
, prefix
を受け取り、ブロックチェーンにハッシュ値をタイムスタンプとして記録します。
content required | string or null (TimestampContentHex) ^([0-9a-fA-F]{2}){0,127}$ 最大 127 バイト(254文字)のHex文字列 |
digest | string or null (Digest) Enum: "sha256" "double_sha256" "none" |
prefix | string^([0-9a-fA-F]{2}){0,10}$ |
{- "content": "436f6e74656e7420666f722054696d657374616d70",
- "digest": "sha256",
- "prefix": "0102030405060708090a"
}
{- "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
}
ブロックチェーンに任意の値をタイムスタンプとして記録します。
現在、記録方法として2種類のtype
(simple
(デフォルト)、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
を使用)
sha256
: SHA256ハッシュ化double_sha256
: SHA256の二重ハッシュ化none
: 値をハッシュ化せずそのまま記録v1.3.0 まであった content_hash
は v1.4.0 からは非推奨です。content
を使用してください。content_hash
は将来のメジャーバージョンアップで削除されます。
all
) content
, digest
, prefix
, type
を受け取り、ブロックチェーンにハッシュ値をタイムスタンプとして記録します。
content | string or null (TimestampContent) 最大 255 バイト |
digest | string or null (Digest) Enum: "sha256" "double_sha256" "none" |
prefix | string |
type | string (TimestampType) Default: "simple" Enum: "simple" "trackable" |
{- "content": "Content for Timestamp",
- "digest": "sha256",
- "prefix": "TIMESTAMPAPP",
- "type": "trackable"
}
{- "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
}
ブロックチェーンに記録したタイムスタンプを取得し、content_hash
,prefix
,txid
を一覧で表示します。
all
) [- {
- "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
}
]
タイムスタンプ ID に対応する Timestamp を表示します。
all
) id required | integer Timestamp id。 |
{- "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
タイプのタイムスタンプを更新する新たなタイムスタンプを記録します。更新されたタイムスタンプは latest
フィールドに false
が返る様になり、最新のものではない事が確認出来るようになります。
また、ブロックチェーン上では IDを指定したタイムスタンプに対応する Pay to Contract UTXO をインプットとして持つ新たなトランザクションがブロードキャストされます。そのトランザクションのアウトプットリストには古いタイムスタンプが登録されたときと同様に Pay to Contract アドレス宛の支払いアウトプットがセットされます。
これにより、古いタイムスタンプの UTXO は消費され、更新された新たなタイムスタンプを記録する UTXO が生まれます。この仕組みにより、この API によって発行されるトランザクションが、更新対象の古いタイムスタンプを更新する唯一のものであることが保証されます。
all
) id required | integer 更新する対象となるタイムスタンプのIDです。 |
content
, digest
, prefix
を受け取り、ブロックチェーンにハッシュ値をタイムスタンプとして記録します。
content required | string or null (TimestampContent) 最大 255 バイト |
digest | string or null (Digest) Enum: "sha256" "double_sha256" "none" |
prefix | string |
{- "content": "Content for Timestamp",
- "digest": "sha256",
- "prefix": "TIMESTAMPAPP"
}
{- "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
}
任意の数のトークンを新規発行します。
all
) amount
を受け取り指定した数のトークンを新規発行します。
任意でtoken_type
を設定し、トークンの種類を指定できます。
token_type
が未指定な場合、再発行可能なトークンが発行されます。
トークンの種類は以下の通りです。
また、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文字。 |
{- "amount": 100,
- "token_type": 1,
- "split": 100,
- "metadata": "Content of token metadata"
}
{- "token_id": "c3ec2fd806701a3f55808cbec3922c38dafaa3070c48c803e9043ee3642c660b46",
- "txid": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc"
}
所有するトークンの総量を取得し、トークン識別子(token_id
)ごとに総量(amount
)を一覧で表示します。
all
) confirmation_only | boolean (ConfirmationOnlyParam) Example: confirmation_only=true オプションで |
per | integer (PerPageParam) >= 1 Default: 25 1ページあたりの件数 |
page | integer (PageNumberParam) >= 1 Default: 1 ページ番号 |
{- "count": 1,
- "tokens": [
- {
- "token_id": "c3ec2fd806701a3f55808cbec3922c38dafaa3070c48c803e9043ee3642c660b46",
- "amount": 100,
- "metadata": "Content of token metadata",
- "p2c_address": "1CY6TSSARn8rAFD9chCghX5B7j4PKR8S1a",
- "payment_base": "02124fd6b3c968390be4828058efc941b83f8ce9ccb00cfde86423744dbcb82576"
}
]
}
指定した識別子を持つ再発行可能なトークンを任意の量再発行します。
all
) token_id required | string (TokenIdParam) トークンの識別子。 |
amount required | integer |
split | integer |
{- "amount": 100,
- "split": 100
}
{- "token_id": "c3ec2fd806701a3f55808cbec3922c38dafaa3070c48c803e9043ee3642c660b46",
- "txid": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc"
}
任意の数のトークンを指定したアドレスに対して送付します。
all
) token_id required | string (TokenIdParam) トークンの識別子。 |
address
でトークンを送付する相手のアドレスを指定し、amount
で送付するトークンの量を指定します。
address required | string |
amount | integer |
{- "address": "1CY6TSSARn8rAFD9chCghX5B7j4PKR8S1a",
- "amount": 100
}
{- "token_id": "c3ec2fd806701a3f55808cbec3922c38dafaa3070c48c803e9043ee3642c660b46",
- "txid": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc"
}
任意の数のトークンを指定した複数のアドレスに対して送付します。
all
) token_id required | string (TokenIdParam) トークンの識別子。 |
アドレスと量の配列を指定します。
配列の各要素ではaddress
でトークンを送付する相手のアドレスを指定し、amount
で送付するトークンの量を指定します。"
required | Array of objects (TransferTokenRequest) |
{- "destinations": [
- {
- "address": "1CY6TSSARn8rAFD9chCghX5B7j4PKR8S1a",
- "amount": 100
}
]
}
{- "token_id": "c3ec2fd806701a3f55808cbec3922c38dafaa3070c48c803e9043ee3642c660b46",
- "txid": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc"
}
任意の数のトークンを焼却します。
all
) token_id required | string (TokenIdParam) トークンの識別子。 |
amount | integer (AmountParam) Example: amount=100
|
{- "token_id": "c3ec2fd806701a3f55808cbec3922c38dafaa3070c48c803e9043ee3642c660b46",
- "txid": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc"
}
指定した識別子のトークンの情報を取得します。
all
) token_id required | string (TokenIdParam) トークンの識別子。 |
confirmation_only | boolean (ConfirmationOnlyParam) Example: confirmation_only=true オプションで |
per | integer (PerPageParam) >= 1 Default: 25 1ページあたりの件数 |
page | integer (PageNumberParam) >= 1 Default: 1 ページ番号 |
{- "count": 100,
- "outputs": [
- {
- "txid": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc",
- "index": 0,
- "address": "1CY6TSSARn8rAFD9chCghX5B7j4PKR8S1a",
- "amount": 100,
- "status": "unconfirmed"
}
]
}
トークンを所有していることを証明するために、トークンがロックされている鍵を使って任意のメッセージにデジタル署名を生成する。署名はTIP-0137(https://github.com/chaintope/tips/blob/main/tip-0137.md)に従って作成される
all
) txid required | string or null (TransactionId) トランザクションID |
index required | integer [ 0 .. 4294967295 ] ユーザーが保持するトークンが記録されているトランザクションのアウトプットリスト内のインデックスです |
message | string^([0-9a-fA-F]{2}){0,1024}$ 署名対象のメッセージの 16 進数文字列表現 |
{- "txid": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc",
- "index": 0,
- "message": "01020304050607"
}
{- "jws": "eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NksifQ.eyJ0eGlkIjoiMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMSIsImluZGV4IjoxLCJjb2xvcl9pZCI6ImMzZWMyZmQ4MDY3MDFhM2Y1NTgwOGNiZWMzOTIyYzM4ZGFmYWEzMDcwYzQ4YzgwM2U5MDQzZWUzNjQyYzY2MGI0NiIsInZhbHVlIjoxLCJzY3JpcHRfcHVia2V5IjoiMjFjM2VjMmZkODA2NzAxYTNmNTU4MDhjYmVjMzkyMmMzOGRhZmFhMzA3MGM0OGM4MDNlOTA0M2VlMzY0MmM2NjBiNDZiYzc2YTkxNGZjNzI1MGEyMTFkZWRkYzcwZWU1YTI3MzhkZTVmMDc4MTczNTFjZWY4OGFjIiwiYWRkcmVzcyI6IjIyVmRRNVZqV2NGOXpnc25QUW9kRkJTMVBCUVBhQVFFWFNvZmt5TXYyRDl6VjFNZE5oZWFBeTdzcm9UZzUybXdXNWFwTmh4UHFCNlg0WVJHIiwiZGF0YSI6IjAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZiJ9.s08khWD9aixrUHWcqNVXRH5lRDAnvTYbQDHBx1qr1kyTIru9HE2hxZo0q-ANcXj4O4WMZGS6xZe5BPLc1Uat5g"
}
任意の数のトークンを新規発行します。
all
) amount
を受け取り指定した数のトークンを新規発行します。
任意でtoken_type
を設定し、トークンの種類を指定できます。
token_type
が未指定な場合、再発行可能なトークンが発行されます。
トークンの種類は以下の通りです。
また、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文字。 |
{- "amount": 100,
- "token_type": 1,
- "split": 100,
- "metadata": "Content of token metadata"
}
{- "token_id": "c3ec2fd806701a3f55808cbec3922c38dafaa3070c48c803e9043ee3642c660b46",
- "txid": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc"
}
所有するトークンの総量を取得し、トークン識別子(token_id
)ごとに総量(amount
)を一覧で表示します。
all
) confirmation_only | boolean (ConfirmationOnlyParam) Example: confirmation_only=true オプションで |
[- {
- "token_id": "c3ec2fd806701a3f55808cbec3922c38dafaa3070c48c803e9043ee3642c660b46",
- "amount": 100,
- "metadata": "Content of token metadata",
- "p2c_address": "1CY6TSSARn8rAFD9chCghX5B7j4PKR8S1a",
- "payment_base": "02124fd6b3c968390be4828058efc941b83f8ce9ccb00cfde86423744dbcb82576"
}
]
指定した識別子を持つ再発行可能なトークンを任意の量再発行します。
all
) token_id required | string (TokenIdParam) トークンの識別子。 |
amount required | integer |
split | integer |
{- "amount": 100,
- "split": 100
}
{- "token_id": "c3ec2fd806701a3f55808cbec3922c38dafaa3070c48c803e9043ee3642c660b46",
- "txid": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc"
}
任意の数のトークンを指定したアドレスに対して送付します。
all
) token_id required | string (TokenIdParam) トークンの識別子。 |
address
でトークンを送付する相手のアドレスを指定し、amount
で送付するトークンの量を指定します。
address required | string |
amount | integer |
{- "address": "1CY6TSSARn8rAFD9chCghX5B7j4PKR8S1a",
- "amount": 100
}
{- "token_id": "c3ec2fd806701a3f55808cbec3922c38dafaa3070c48c803e9043ee3642c660b46",
- "txid": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc"
}
任意の数のトークンを指定した複数のアドレスに対して送付します。
all
) token_id required | string (TokenIdParam) トークンの識別子。 |
アドレスと量の配列を指定します。
配列の各要素ではaddress
でトークンを送付する相手のアドレスを指定し、amount
で送付するトークンの量を指定します。"
required | Array of objects (TransferTokenRequest) |
{- "destinations": [
- {
- "address": "1CY6TSSARn8rAFD9chCghX5B7j4PKR8S1a",
- "amount": 100
}
]
}
{- "token_id": "c3ec2fd806701a3f55808cbec3922c38dafaa3070c48c803e9043ee3642c660b46",
- "txid": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc"
}
任意の数のトークンを焼却します。
all
) token_id required | string (TokenIdParam) トークンの識別子。 |
amount | integer (AmountParam) Example: amount=100
|
{- "token_id": "c3ec2fd806701a3f55808cbec3922c38dafaa3070c48c803e9043ee3642c660b46",
- "txid": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc"
}
サブジェクト(トラッキングの対象となる物)を登録し、新規でトラッキングを開始します。指定されたサブジェクトがすでにトラッキング中の場合はトラッキングの開始に失敗します。
all
) from_address required | string 供給元を表すアドレス |
required | Array of objects (TrackingDestination) サブジェクトの移動先を表します。 |
{- "from_address": "1CY6TSSARn8rAFD9chCghX5B7j4PKR8S1a",
- "destinations": [
- {
- "address": "mnzdZUieW2Hqe9GzZzVbcA7nHkDeFhJFzd",
- "subjects": [
- "6948DF80-14BD-4E04-8842-7668D9C001F5"
]
}
]
}
{- "txid": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc"
}
サブジェクトの移動を記録します。サブジェクトがトラッキング中でない場合は記録に失敗します。
all
) required | Array of objects (TrackingDestination) サブジェクトの移動先を表します。 |
{- "destinations": [
- {
- "address": "mnzdZUieW2Hqe9GzZzVbcA7nHkDeFhJFzd",
- "subjects": [
- "6948DF80-14BD-4E04-8842-7668D9C001F5"
]
}
]
}
{- "txid": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc"
}
トラッキング中のサブジェクトが消費されたものとみなして、トラッキングを終了します。サブジェクトがトラッキング中でない場合は失敗します。
all
) subjects required | Array of strings (TrackingSubjectId) 消費したサブジェクトを示します。 |
{- "subjects": [
- "6948DF80-14BD-4E04-8842-7668D9C001F5"
]
}
{- "txid": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc"
}
サブジェクトの移動の履歴を返します。履歴は発生日時の昇順でソートされています。
all
) subject_id required | string (TrackingSubjectId) Example: 6948DF80-14BD-4E04-8842-7668D9C001F5 サブジェクトの識別子。 |
[- {
- "trace_id": 1,
- "subject_id": "6948DF80-14BD-4E04-8842-7668D9C001F5",
- "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
}
]
サブジェクトの移動履歴(trace)に関する情報を返します。
all
) trace_id required | number サブジェクトの移動履歴(trace)に一意に振られたID |
{- "trace_id": 1,
- "subject_id": "6948DF80-14BD-4E04-8842-7668D9C001F5",
- "parents": [
- {
- "subject_id": "6948DF80-14BD-4E04-8842-7668D9C001F5",
- "merkle_root": "a6964be0afa2451a7e95806b90ae6e9d2de35b9e6c94a168133e8d354d401267",
- "merkle_path": [
- "a6964be0afa2451a7e95806b90ae6e9d2de35b9e6c94a168133e8d354d401267"
]
}
], - "child_subject_ids": [
- "6948DF80-14BD-4E04-8842-7668D9C001F5"
], - "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が存在しない場合は空のリストを返します。
all
) address required | string Example: mnzdZUieW2Hqe9GzZzVbcA7nHkDeFhJFzd アドレス |
per | integer (PerPageParam) >= 1 Default: 25 1ページあたりの件数 |
page | integer (PageNumberParam) >= 1 Default: 1 ページ番号 |
{- "count": 1,
- "subjects": [
- "6948DF80-14BD-4E04-8842-7668D9C001F5"
]
}
この機能は現在ベータ版としてのみ提供しています。 以下の制限にご注意ください
マテリアルトラッキング API(ベータ版) は、製品に含まれる原材料の量を秘匿したまま、 サプライチェーンにおける原材料のトレースを可能にするため のプロトコルを REST API から実行可能にするものです。 これは例えば、原材料、メーカー、サプライヤー、リサイクル事業者を通じて移動する製品の 原材料の量を第三者から秘匿したまま追跡することを可能にします。
トラッキング対象の アイテム
は複数の材料 (マテリアル
) とその量で構成されます。Tapyrus ブロックチェーン上にはこれら
から計算されたコミットメント(*1) が記録され、各種材料の量が直接記録されることはありません。これによって、製品の原材料の量を秘匿したままトレースを可能にします。
またこの API は、材料について秘匿された状態のまま、各取引で不正な材料の混入がないことを検証可能にするという特徴があります。 これによりサプライチェーンの監査コストを削減できる可能性があります。
※注意
アイテムの詳細は Tapyrus ブロックチェーンには記録されず秘匿されますが、同一の Tapyrus API エンドポイントを利用しているユーザは取得できます。 アイテムの詳細の公開範囲を厳密に管理する必要がある場合は、ご利用の API エンドポイントへのアクセス権の管理にご注意ください。
(*1): コミットメントとは、暗号学の手法で、ある情報を秘密にして固定(コミット)し、後からその情報を公開(オープン)することができるものを指します。この手法では、情報は変更できず、予め公開された証拠でその正当性が確認できます。
マテリアルトラッキングを利用するためには、まずマテリアルトラッキング専用のアドレスを作成する必要があります。 このアドレスは、特定の場所、工場、工程、またはサプライチェーンの参加者を識別する識別子として機能し、トラッキング対象のアイテムを操作できる権限が誰にあるのかを示します。 アイテムは常にアドレスに所属し、そのアドレスに対応する秘密鍵を使用してのみ操作することができます。
アイテムは追跡対象物を表します。アイテムは複数種類の材料から構成され、材料は「材料名(name)」「量(quantity)」「単位(unit)」で表現されます。 例えば、「アルミニウム100キログラム」「銅200グラム」などがアイテムの構成要素となり得ます。 アイテムは、Tapyrusブロックチェーン上に対応するトランザクション出力と対応します。
1 回の処理でこれらのオペレーションを組み合わせることができます。 その 1 回の処理は、1つの Tapyrus トランザクションとしてブロックチェーンに記録されます。
マテリアルトラッキング API は以下の特徴を持ちます。
マテリアルトラッキング API に送られる材料の内訳は、Tapyrus API のデータベースに保存されますが、公開される Tapyrus ブロックチェーンにはそのまま記録されることはなく、 第三者から完全に秘匿されます。 具体的には、材料の情報とブラインドファクターから計算されたコミットメントだけが、 Tapyrus ブロックチェーンに記録されます。
マテリアルトラッキング API の重要な特徴として、1回の処理(1つのトランザクション)の前後で材料の種類や量が変化しないことを誰でも検証できることが挙げられます。 この検証には材料の内訳といった秘匿された情報は必要ありません。 ブロックチェーンに記録されたコミットメントをもとに暗号学的に検証することができます。
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接頭辞
Q
(quetta)R
(ronna)Y
(yotta)Z
(zetta)E
(exa)P
(peta)T
(tera)G
(giga)M
(mega)k
(kilo)h
(hecto)da
(deca)d
(deci)c
(centi)m
(milli)µ
(micro)n
(nano)p
(pico)f
(femto)a
(atto)z
(zepto)y
(yocto)r
(ronto)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)オペレーションによって 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 を利用して取得することができます。
アイテムの輸送 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_address
は null
になります。
レスポンス
{
"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
の値txid
と index
)ここまでトラッキングしてきたアイテムを取引先へ納品するとします。
このとき取引先がこれまで利用したものとは違う 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
の詳細な説明を参照してください。
複数のアイテムを登録することができ、登録されたアイテムはユーザーのウォレット内のアドレスに送付されます。
また、以下の場合はエラーとして扱われます。
all
) from_address | string アイテムの供給元を表すアドレス |
required | Array of objects (TrackingMaterialAndDestination) |
{- "from_address": "mnzdZUieW2Hqe9GzZzVbcA7nHkDeFhJFzd",
- "mint": [
- {
- "materials": [
- {
- "name": "Co",
- "quantity": 600,
- "unit": "g"
}
], - "to_address": "mnzdZUieW2Hqe9GzZzVbcA7nHkDeFhJFzd"
}
]
}
{- "txid": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc",
- "tracking_payloads": [
- {
- "item_id": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc00000000",
- "txid": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc",
- "index": 0,
- "to_address": "mnzdZUieW2Hqe9GzZzVbcA7nHkDeFhJFzd",
- "materials": [
- {
- "name": "Co",
- "quantity": 600,
- "unit": "g"
}
], - "r": "d0833391074e4066d455430d31c4cb82db8204b2932169358ee50e369ce30a8f",
- "commitment": "03b42c5519e2489529a9bd8304de54a68c558af23c1d5b15a9777f03db0e07fa64"
}
]
}
複数の送り先に、指定された配分でアイテムを送ります。 送り先の情報として、送り先のトラッキングアドレス、その送り先へ送る材料名と量と単位の組を指定することができます。 送る量の総和はユーザーが保持している量を超えることはできません。 また、以下の場合はエラーとして扱われます。
all
) item_ids required | Array of strings |
Array of objects (TrackingMaterialAndDestination) 輸送する対象の材料と送り先のアドレスの一覧 | |
Array of objects (TrackingMaterial) 焼却する対象の材料の一覧 | |
change_address | string お釣りの送り先アドレス |
{- "item_ids": [
- "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc00000000"
], - "transfer": [
- {
- "materials": [
- {
- "name": "Co",
- "quantity": 600,
- "unit": "g"
}
], - "to_address": "mnzdZUieW2Hqe9GzZzVbcA7nHkDeFhJFzd"
}
], - "burn": [
- {
- "name": "Co",
- "quantity": 600,
- "unit": "g"
}
], - "change_address": "mnzdZUieW2Hqe9GzZzVbcA7nHkDeFhJFzd"
}
{- "txid": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc",
- "tracking_payloads": [
- {
- "item_id": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc00000000",
- "txid": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc",
- "index": 0,
- "to_address": "mnzdZUieW2Hqe9GzZzVbcA7nHkDeFhJFzd",
- "materials": [
- {
- "name": "Co",
- "quantity": 600,
- "unit": "g"
}
], - "r": "d0833391074e4066d455430d31c4cb82db8204b2932169358ee50e369ce30a8f",
- "commitment": "03b42c5519e2489529a9bd8304de54a68c558af23c1d5b15a9777f03db0e07fa64"
}
]
}
アイテムの登録・輸送・焼却を一括で行います。 アイテムの登録・輸送・焼却を行うアイテムの材料名と量と単位の組、アドレスをそれぞれ指定します。
以下の場合はエラーとして扱われます。
all
) 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 お釣りの送り先アドレス |
{- "item_ids": [
- "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc00000000"
], - "from_address": "mnzdZUieW2Hqe9GzZzVbcA7nHkDeFhJFzd",
- "mint": [
- {
- "materials": [
- {
- "name": "Co",
- "quantity": 600,
- "unit": "g"
}
], - "to_address": "mnzdZUieW2Hqe9GzZzVbcA7nHkDeFhJFzd"
}
], - "transfer": [
- {
- "materials": [
- {
- "name": "Co",
- "quantity": 600,
- "unit": "g"
}
], - "to_address": "mnzdZUieW2Hqe9GzZzVbcA7nHkDeFhJFzd"
}
], - "burn": [
- {
- "name": "Co",
- "quantity": 600,
- "unit": "g"
}
], - "change_address": "mnzdZUieW2Hqe9GzZzVbcA7nHkDeFhJFzd"
}
{- "txid": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc",
- "tracking_payloads": [
- {
- "item_id": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc00000000",
- "txid": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc",
- "index": 0,
- "to_address": "mnzdZUieW2Hqe9GzZzVbcA7nHkDeFhJFzd",
- "materials": [
- {
- "name": "Co",
- "quantity": 600,
- "unit": "g"
}
], - "r": "d0833391074e4066d455430d31c4cb82db8204b2932169358ee50e369ce30a8f",
- "commitment": "03b42c5519e2489529a9bd8304de54a68c558af23c1d5b15a9777f03db0e07fa64"
}
]
}
ユーザーにかかわるアイテムの一覧を返します。 ユーザにかかわるアイテムには以下が含まれます。
all
) 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' が指定されれば、自分が送ったアイテムを返します。 アドレスが指定されている場合はそのアドレスから送られたアイテムを返します。 指定するアドレスは自分のトラッキングアドレスである必要があります。 |
{- "count": 1,
- "items": [
- {
- "item_id": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc00000000",
- "txid": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc",
- "index": 0,
- "mint_address": "mnzdZUieW2Hqe9GzZzVbcA7nHkDeFhJFzd",
- "to_address": "mnzdZUieW2Hqe9GzZzVbcA7nHkDeFhJFzd",
- "materials": [
- {
- "name": "Co",
- "quantity": 600,
- "unit": "g"
}
], - "r": "d0833391074e4066d455430d31c4cb82db8204b2932169358ee50e369ce30a8f",
- "commitment": "03b42c5519e2489529a9bd8304de54a68c558af23c1d5b15a9777f03db0e07fa64",
- "block_height": 101,
- "block_time": 1626169080,
- "tx_index": 1,
- "moved": true
}
]
}
エンドポイントを共有していないステークホルダーからアイテムの値を登録します。 アイテムの値には以下のデータが含まれます。
登録時は入力された値からコミットメントを計算してその値をアイテムに含まれるコミットメント値と合致するか検証します。
以下の場合はエラーとして扱われます。
all
) txid required | string or null (TransactionId) トランザクションID |
index required | integer [ 0 .. 4294967295 ] |
required | Array of objects (TrackingMaterial) |
r required | string |
{- "txid": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc",
- "index": 0,
- "materials": [
- {
- "name": "Co",
- "quantity": 600,
- "unit": "g"
}
], - "r": "d0833391074e4066d455430d31c4cb82db8204b2932169358ee50e369ce30a8f"
}
{- "item_id": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc00000000",
- "txid": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc",
- "index": 0,
- "mint_address": "mnzdZUieW2Hqe9GzZzVbcA7nHkDeFhJFzd",
- "to_address": "mnzdZUieW2Hqe9GzZzVbcA7nHkDeFhJFzd",
- "materials": [
- {
- "name": "Co",
- "quantity": 600,
- "unit": "g"
}
], - "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
キーのノードをたどることで、より過去のトレースデータを取得することができます。
all
) item_id required | string アイテムID |
depth | integer [ 1 .. 5 ] Default: 3 最大の深さ |
{- "item": {
- "item_id": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc00000000",
- "txid": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc",
- "index": 0,
- "mint_address": "mnzdZUieW2Hqe9GzZzVbcA7nHkDeFhJFzd",
- "to_address": "mnzdZUieW2Hqe9GzZzVbcA7nHkDeFhJFzd",
- "materials": [
- {
- "name": "Co",
- "quantity": 600,
- "unit": "g"
}
], - "r": "d0833391074e4066d455430d31c4cb82db8204b2932169358ee50e369ce30a8f",
- "commitment": "03b42c5519e2489529a9bd8304de54a68c558af23c1d5b15a9777f03db0e07fa64",
- "block_height": 101,
- "block_time": 1626169080,
- "tx_index": 1,
- "moved": true
}, - "leaf": true,
- "parents": [
- { }
]
}
指定したアイテムのその時点以降の流通経路(子孫)の情報を木構造で返します。
応答の JSON の最上位のオブジェクトは木構造のルートノードであり、 item_id
で指定したアイテムを持ちます。
children
キーはそのアイテムの直接の子(つまり直接の転送先)のアイテムのリストです。
再帰的な構造を持ち、 children
キーのノードをたどることで、より指定した時点以降のトレースデータを取得することができます。
all
) item_id required | string アイテムID |
depth | integer [ 1 .. 5 ] Default: 3 最大の深さ |
{- "item": {
- "item_id": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc00000000",
- "txid": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc",
- "index": 0,
- "mint_address": "mnzdZUieW2Hqe9GzZzVbcA7nHkDeFhJFzd",
- "to_address": "mnzdZUieW2Hqe9GzZzVbcA7nHkDeFhJFzd",
- "materials": [
- {
- "name": "Co",
- "quantity": 600,
- "unit": "g"
}
], - "r": "d0833391074e4066d455430d31c4cb82db8204b2932169358ee50e369ce30a8f",
- "commitment": "03b42c5519e2489529a9bd8304de54a68c558af23c1d5b15a9777f03db0e07fa64",
- "block_height": 101,
- "block_time": 1626169080,
- "tx_index": 1,
- "moved": true
}, - "leaf": true,
- "children": [
- { }
]
}
指定されたアイテムの詳細情報を返します。
all
) item_id required | string アイテムID |
{- "item_id": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc00000000",
- "txid": "6fce02d39279f6d645ecc710ebcf1dbb7b8104106553d8da13f5db79c5a628fc",
- "index": 0,
- "mint_address": "mnzdZUieW2Hqe9GzZzVbcA7nHkDeFhJFzd",
- "to_address": "mnzdZUieW2Hqe9GzZzVbcA7nHkDeFhJFzd",
- "materials": [
- {
- "name": "Co",
- "quantity": 600,
- "unit": "g"
}
], - "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"
}
これまで生成したアドレスを一覧にして返します。
任意でpurpose
を設定し、取得するアドレスの種類を指定できます。未指定の場合、汎用的に使うアドレスのみ取得します。
purpose
にgeneral
と入力すると、生成したアドレスのうち、汎用的に使うアドレスのみ取得します。
purpose
にall
と入力すると、生成したアドレスすべて取得します。
purpose
にtracking
と入力すると、生成したアドレスのうち、トラッキングに使用されているアドレスを取得します。
purpose
にmaterial_tracking
と入力すると、生成したアドレスのうち、マテリアルトラッキングに使用されているアドレスを取得します。
all
) per | integer (PerPageParam) >= 1 Default: 25 1ページあたりの件数 |
page | integer (PageNumberParam) >= 1 Default: 1 ページ番号 |
purpose | string (PurposeAddressParam) 取得したいアドレス |
{- "count": 1,
- "addresses": [
- "mnzdZUieW2Hqe9GzZzVbcA7nHkDeFhJFzd"
]
}
受金用のアドレスを生成して返します。
任意でpurpose
を設定し、生成するアドレスの種類を指定できます。未指定の場合、汎用的に使うアドレスを生成します。
purpose
に general
と入力する、または未指定の場合、汎用的に使うアドレスを生成します。purpose
に tracking
と入力すると、トラッキングに使用するアドレスを生成します。purpose
に material_tracking
と入力すると、マテリアルトラッキングに使用するアドレスを生成します。all
) purpose | string |
{- "purpose": "general"
}
"mnzdZUieW2Hqe9GzZzVbcA7nHkDeFhJFzd"
ユーザーを新しく作成します。この API を実行するには管理者権限をもったユーザーのアクセストークンを利用してリクエストをする必要があります。管理者権限はダッシュボードで設定することができます。
all
) subject required | string [ 1 .. 128 ] characters 作成するユーザーの名前やクライアントアプリケーションにおけるIDなど、ユーザーを識別するための任意の文字列を指定できます。 |
expires_at | integer 作成するユーザーのアクセストークンの有効期限を UNIX タイムの秒単位で指定できます。 |
{- "subject": "user 01",
- "expires_at": 1231006505
}
{- "subject": "user 01",
- "expires_at": 1231006505,
- "issue_at": 1231006505,
- "access_token": "PRzX5gAh7jV0JNUG56OMnx9krwejuE4axMlCRXLaEye5prBntiI80FWC5BonryyZ"
}
ユーザーのid
,balances
, addresses
の情報を返します。id
は sub
要素で返します。
balances
はユーザーが持つ TPC (Tapyrus の基軸コイン)の残高を返しますが、Tapyrus API ユーザーが直接 TPC を利用するのは非推奨です。また、将来のバージョンで削除されます。
balances
、addresses
は非推奨です。トークンの残高の取得および、アドレスの一覧の取得は、それぞれ トークンの総量取得 API
、アドレスの一覧 API
を利用することを推奨します。これらは将来のバージョンで削除されます。
all
) confirmation_only | boolean (ConfirmationOnlyParam) Example: confirmation_only=true オプションで |
{- "sub": 1,
- "balances": {
- "<token_id>": 1000000000
}, - "addresses": [
- "1FkZ5tBroQA8GiNstmtjLcYjGcqZTfJJhh"
]
}