Tapyrus API リリースノート

2024-10-03

バグ修正&細かい変更

  • マテリアルトラッキングAPIのアイテムの登録およびアイテムの一括処理でfrom_addressがユーザーのウォレットに存在しないアドレスを指定した際に予期しないエラーが発生する問題を修正しました。
  • トークンAPIのトークン焼却のAPIの応答にブロードキャストされたトランザクションのtxidを含めるようにしました。
  • トークンAPI(新規発行、再発行、送付、複数アドレスへの送付、焼却)を使用した際のレスポンスがAPIドキュメントに記載されたものと異なっていたため、APIドキュメントを修正しました。

2024-05-29

バグ修正&細かい変更

  • タイムスタンプAPI(v1, v2)のタイムスタンプデータを返すAPIで、APIドキュメントに記載のないhexフィールドが応答に含まれる問題を対応しました。
  • その他のAPIでAPIドキュメントの記載内容と異なる応答を返すものについてはAPIドキュメントの修正を行いました。

2024-04-11

新機能

マテリアルトラッキングAPI(ベータ版)を追加しました

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

タイムスタンプAPIとトークンAPIに新しいバージョンのAPI(v2)が新しく提供されます

  • タイムスタンプの記録と更新のAPIでは、パラメータprefix、contentにhex文字列のみを受け付け、内部でバイナリーデータに変換してブロックチェーンに記録する方式を採用しました。
  • タイムスタンプの取得APIでは、タイムスタンプの一覧を返す際に、ページングした結果のみを返すようにしました。
  • トークンの総量取得APIでは、所有するトークンの総量を取得して一覧で返す際に、ページングした結果のみを返すようにしました。
  • トークン情報取得APIを追加しました。このAPIではユーザーが所有しているトークンの情報を返します。
  • トークンの所有を表す署名を生成するAPIを追加しました。トークンを所有していることを証明するために、トークンがロックされている鍵を使って任意のメッセージにデジタル署名することができます。

既存のバージョン(v1)も引き続き利用可能です。

不具合の修正&軽微な修正

  • Timestampを一覧で取得するAPIのレスポンスにTrackable Timestampが更新された後のタイムスタンプのID(next_id)を含むようにしました。
  • ユーザの作成API で、パラメーターの送り方によって 500 エラーが発生する問題に対応しました。

その他

2023-11-22

非推奨な API

ユーザー情報 API の addresses, balances は v1.8.2 から非推奨になります

ユーザー情報 API の addresses, balances は v1.8.2 から非推奨になります。 トークンの残高の取得および、アドレスの一覧の取得は、それぞれ トークンの総量取得 API、アドレスの一覧 API を利用することを推奨します。 addresses, balances は将来のバージョンで削除される予定です。

不具合の修正&軽微な修正

Timestampを記録 API で、prefix または、 digest: none の時の content にユニコードの制御文字が含まれる場合に不正な値がブロックチェーンに記録される問題を修正しました。

1.8.1 までは、Timestamp を記録 API で以下の場合に不正な値がブロックチェーンに記録されていました。

  • type=simple かつ prefix パラメーターに hex 表現で1桁になるユニコードの制御文字が含まれる場合
  • type=simpleかつdigest=noneで、contentまたはcontent_hash` パラメーターに hex 表現で1桁になるユニコードの制御文字が含まれる場合

例えば以下のパラメーターで Timestamp を記録 API を実行します。

{
  "prefix": "app ",
  "content": "Hello, World!",
  "digest": "none"
}

この場合、1.8.1 ではブロックチェーンに記録される値は以下のようになります。

OP_RETURN OP_PUSHBYTES_17 617070148656c6c6f2c20576f726c64210

これは正しくない値で、以下のようになるべきです。

OP_RETURN OP_PUSHBYTES_17 6170700148656c6c6f2c20576f726c6421

前者の問題は \u0001 のような HEX 表現で1桁になる文字が含まれる場合に、"01" と変換せずに "1" に変換してしまっています。 また、全体として偶数桁となるように最後に不要な "0" が加えられています。

この問題は 1.8.2 で修正されています。 1.8.2 リリース時点では、該当するデータの登録は全てのエンドポイントにおいて確認されていません。

その他

このバージョンにはその他の軽微な修正が含まれています。

2023-04-10

不具合の修正

トークンの新規発行 API で metadata パラメーターを指定した場合に、トークンの新規発行に稀に失敗することがある問題を修正しました

Timestampを記録 API で type パラメーターに trackable を指定した場合に、記録に稀に失敗することがある問題を修正しました

2022-12-08

新機能

ユーザーの作成 API を追加しました

これまでAPIのユーザーはダッシュボードでのみ作成が可能でしたが、v1.8.0からユーザー作成用のAPIを追加しました。この API を実行するには管理者権限をもったユーザーのアクセストークンを利用してリクエストをする必要があります。管理者権限はダッシュボードで設定することができます。

詳細は API ドキュメントをご確認ください。

バグ修正&細かい変更

tracking API のサブジェクトの登録とサブジェクトの移動の送り先アドレスへの検証を追加しました

送り先アドレスは、同一の Tapyrus API エンドポイント内で生成されたトラッキングアドレスである必要があります。これを検証する処理を追加しました。これに違反した場合はエラーとなります。

2022-11-09

新機能

メタデータを含むトークンが発行できるようになりました

トークンの新規発行 API に新しいパラメーター metadata が追加されました。 このパラメーターに任意の文字列を指定することで、その文字列のデータと発行されるトークンの関連をブロックチェーン上に記録することができます。 詳細は トークンの新規発行 API のドキュメントを確認してください。

バグ修正&細かい変更

プロックチェーンへの操作が短期間に多く行われた際に発生していたエラーへの対応を行いました

ブロックチェーンへの操作を行う API の利用が短時間に連続した際に 500 エラー(Internal Server Error)が発生することがありました。 この問題への対策を強化し、極力発生しないように改善を行いました。

Timestamp を記録 API の content の長さ制限を 255 バイトに変更しました

Timestamp を記録 API の content の長さ制限を 255 バイトに変更しました。 これまでは 400 バイトまで受け付けていましたが、内部構造上の最適化のため、既存のユースケースにおいて問題ないことを確認した上で 255 バイトへ変更しました。

tracking API のdestinationsパラメーターに多くの宛先を渡すとエラーになる問題への対応

tracking API で destinations パラメーターに多くの項目を渡すと Insufficient fee エラーが発生することがありました。 これはブロックチェーンに配信されるトランザクションデータのサイズが大きくなり手数料が不足するために発生していました。 適切な手数料を設定されるように修正されました。

その他複数の細かい改善が含まれます。

2022-06-10

新機能

OpenID Connect を使ったユーザ認証機能(β版)を追加しました

これまでダッシュボードで発行するアクセストークンを利用した API の呼び出しのみをサポートしていましたが、 OAuth2.0 を利用したアクセストークンの発行プロセスを新たに追加しました。

認証処理には OpenID Connect が利用可能です。外部の OpenID Provider が提供する認証を利用して、Tapyrus API のユーザを認証することができます。

利用を許可する OpenID Provider はダッシュボードから設定可能になります。 ご利用になりたいお客様はお問い合わせください。

バグ修正&細かい変更

不正な token_id が指定された場合に適切なエラーメッセージを返す修正しました

トークンの再発行 API で、不正な token_id が指定された際にエラーメッセージを添えて 400 エラーで返すように変更しました。 もともとは 500 エラーになっていたため、利用者側で原因の把握が難しかったですが、エラーメッセージをみてデバッグが可能になります。

トークンの送金 API で手数料不足で 500 エラーになる問題を修正しました

トークンの送付 及び 複数アドレスへのトークン送付 API で split に大きな値を指定したり、TX の入力に多くの UTXO がセットされるなどして TX のサイズが大きくなってしまうと TX の手数料不足により 500 エラーが返る問題がありましたが修正されました。 TX のサイズに合わせて適切な手数料が設定されるように修正されました。

2022-05-09

新機能

タイムスタンプ API への項目を追加しました

Timestamp一覧表示 及び Timestamp表示 API の応答に、タイムスタンプが発行されたトランザクションが取り込まれたブロックの高さとタイムスタンプを含めるようにしました。

バグ修正&細かい変更

split パラメーターの指定値によるエラー発生を修正しました

トークンの新規発行 及び トークンの再発行 API で、 split パラメーターに 26 以上の値をセットするとエラーになる問題を修正しました。

2022-04-08

新機能

タイムスタンプ API への変更

バグ修正&細かい変更

Timestampを記録 及び Trackable Timestampの更新 API へ以下の変更を行いました。

content_hash パラメーターを非推奨とし、 content パラメーターを新たに追加しました。

また、新たに digest パラメーターを追加しました。 sha256, double_sha256, none のいずれかをとり、 content パラメーターで受け取った値を指定されたハッシュ関数でハッシュ化した上でブロックチェーンへ記録します。none が指定された場合はハッシュ化しません。

指定されない場合は sha256 を指定した場合の動作になります。v1.3.0 以前は常に sha256 でハッシュ化した値をブロックチェーンへ記録していました。

prefix, content に 16 進数の文字列以外が渡されたときに、不正な変換を行い情報量が欠落する問題を修正しました。これにより後述の「後方互換性を破壊する変更」が発生していますので注意してください。

後方互換性を破壊する変更

過去のバージョンでは、prefix, content_hash パラメーターをブロックチェーンに記録する際に、16進数の文字列以外の値を指定すると、情報量の欠落が発生していました。(chaintope/glueby#138) 例えば、"test" という文字列を content_hash に指定した場合、内部的に以下のような変換を加えていました。(Ruby のコードです)

['test'].pack('H*') # => "ÞÍ"

しかし、'test' は 16 進数の文字列表現ではないため、これは不正な値になります。 この問題を回避するために、prefix および新しく追加した content に渡された値をブロックチェーンに記録するとき、16進数の文字列として扱い変換を行うのではなく、そのまま記録するようにしました。

これまで(v1.3.0) の動作

パラメーターが { prefix: "TMESTAMPAPP", content_hash: "Content for Timestamp" } の時、 ブロックチェーンに記録される値(16進数表現)は d26ecda69a99b908759c868f67a82a5a09cbf2f47895b410f795224cc7f6ea9f51a1115f579c となります。

v1.4.0 の動作

パラメーターが { prefix: "TMESTAMPAPP", content: "Content for Timestamp" } の時、 ブロックチェーンに記録される値(16進数表現)は 54494d455354414d5041505033643134363961613432376639373932316131623731633539383163313834383034313234363239303339346133326563323666646565323638356264656365 となります。

またこれを ASCII 文字列として解釈した場合は TIMESTAMPAPP3d1469aa427f97921a1b71c5981c1848041246290394a32ec26fdee2685bdece となります。

"Content for Timestamp" を SHA256 した値は以下のようになり、これは v1.4.0 の結果と一致します。ここから v1.3.0 以前は不正な値が記録されていたことが分かります。

irb(main):006:0> Tapyrus.sha256('Content for Timestamp').bth
=> "3d1469aa427f97921a1b71c5981c1848041246290394a32ec26fdee2685bdece"
content_hash は残されますが非推奨です

前述の通り content_hash の挙動には問題があります。ただし、16 進数文字列を渡した場合は利用可能であるため、後方互換性を維持する観点から残しています。ただし、今後のメジャーバージョンアップで削除される予定なので、新しくこのAPIを使う際には利用しないように気を付けてください。 また、すでに使っている場合は、content への移行を検討してください。

2022-03-23

新機能

バグ修正&細かい変更

サブジェクトの移動のエラー処理を修正しました

サブジェクトの移動 API で所有していないサブジェクト移動をしようとした際に 500 エラーを返していた問題を修正しました。 修正により The sender doesn't hold all or part of subject_ids in the transporting subjects のエラーメッセージを 400 エラーで返します。

サブジェクトの登録時のエラー処理を修正しました

サブジェクトの登録 API で、トラッキングアドレス(アドレスの生成 API で purposetracking を指定し生成したアドレス)ではない自分のアドレスを from_address へ指定すると正常に処理を完了してしまう問題を修正しました。 The from_address is not supplier's tracking address のエラーメッセージを 400 エラーとして返すように変更されています。

2022-03-04

新機能

Trackable Timestampの更新を追加しました

Trackable Timestampの更新 API を追加しました。詳細は API ドキュメントをご確認ください。

階層化したサブジェクトの消費をサポートしました

トラッキングの サブジェクトを消費 API で階層化されたサブジェクトの消費をサポートしました。