コネクションチェーンシナリオスクリプトリファレンス
はじめに
本書の位置づけ
本書は、異なるブロックチェーン同士を安全に連携させるセキュリティ技術ConnectionChain
(※1 以降、CCとも記載)の機能、およびAPI仕様について説明しています。ConnectionChainを利用してアプリケーションおよびサービスを企画、または開発される方を対象に書かれています。また、本書を読むにあたってはインターネットやWebAPIに関する基本的な知識が必要です。
(※1) 富士通プレスリリース:ブロックチェーン同士を安全につなげるセキュリティ技術を開発、技術紹介ページ:ConnectionChain
本書の構成
本書は、以下の構成となっています。
章
内容
1. コネクションチェーンの機能
コネクションチェーンの概要、主な機能、API利用の流れについて説明します。コネクションチェーンの全体像を理解されたい場合に参照ください。
2. インターフェース(API仕様)
コネクションチェーンのAPI仕様について説明します。コネクションチェーンのAPIを試したり、アプリ開発を行ったりする場合に参照ください。
1. コネクションチェーンの機能
1.1 機能概要
ConnectionChainは、異なるブロックチェーン同士を連携することが可能な技術です。独立して運用される2つ以上のシステム(例えば金流管理、商流管理用のブロックチェーン)を、連携ノードを介してつなぎ、中央のブロックチェーンがHubとなって連携処理のロジックや実行証跡を管理することができます(図1参照)。

図1:ConnectionChainの概要
図中の連携ノードは、様々なブロックチェーン基盤のブロックチェーン操作を抽象化するコネクタであり、連携ノードによって様々なブロックチェーン基盤(※2)と接続することが可能です。連携ノードのソースコードはLinux Foundationの運営するブロックチェーン統合プロジェクトHyperledger Cacti
において公開されていますので、ご興味のある方は以下サイトなどを参照ください。
Hyperledger Cactiサイト:https://www.hyperledger.org/use/cacti
ソースコード(GitHub):https://github.com/hyperledger/cacti
(※2) Fujitsu Research Portal(以下、研究所ポータル)においては、Data e-TRUSTおよびEthereum Sepoliaテストネットとの接続をサポートしています。
研究所ポータルにおけるConnectionChainの機能構成を図2に示します。ConnectionChainは、マルチシナリオ機能(シナリオ情報管理、シナリオ制御)、鍵管理機能の2つの機能から構成されます。

図2:ConnectionChainの機能構成
<マルチシナリオ機能の仕組み>
各連携先ブロックチェーン(EC)に対する取引群を疑似言語によって表現したシナリオスクリプト
を記述することによってブロックチェーン間を連携することが可能な機能です。研究所ポータルでは、Data e-TRUSTにおけるAPI実行、およびEthereum(Sepoliaテストネット)における取引実行をサポートしています。シナリオスクリプトに従った連携処理は、Coreサーバおよびブロックチェーンにて行われ、連携処理の決定や連携証跡の記録がブロックチェーンにデプロイされたスマートコントラクトによって行われます。
<鍵管理機能の仕組み>
EC(研究所ポータルにおいてはEthereum)に登録されたアカウントの秘密鍵を管理する機能です。Coreサーバは、連携処理の実行時、エンドユーザから与えられた鍵を特定する識別子(クライアントID)を用いてウォレットサーバに対して取引の署名を依頼し、署名済の取引を得る仕組みとなっています。クライアントIDはエンドユーザのAzure IDに紐づいており、自身が保持する秘密鍵での取引署名のみ可能となっています。
機能に関するより実用的な説明や利用の流れについては、1.2 マルチシナリオ機能(シナリオ情報管理、シナリオ制御)、1.3 鍵管理機能 を参照ください。
1.2 マルチシナリオ機能(シナリオ情報管理、シナリオ制御)
マルチシナリオ機能は、各連携先ブロックチェーン(EC)に対する取引群を疑似言語によって表現したシナリオスクリプト
を記述することによってブロックチェーン間を連携することが可能な機能です。シナリオスクリプトは、ECの種別に依存しない共通形式での記述をサポートしており、以下の形式となっています(図3)。

図3:シナリオスクリプトの形式
シナリオスクリプトは、主にシナリオID、動作情報(配列)、初回動作ID、実行時指定パラメータ名、認証用パラメータ名で構成されます。動作情報にはECに対する処理(取引実行、参照など)が含まれており、シナリオを開始した際には、動作情報に定義された処理が初回動作IDから順に実行されることになります。実行時指定パラメータ名、認証用パラメータ名はシナリオ開始時に投入された値を本スクリプト内で扱うための変数名となっており、前者をインスタンス動的値と呼びます。動作情報には、EC操作情報(配列)、次動作情報(配列)が含まれており、それぞれECに対する処理(どんなECに対してどのような処理を行うか)と、次動作IDを決定するための遷移条件(ECの処理結果(複数可)に基づいて、どんな場合にどの動作を次に実行するか)を定義しています。シナリオを開始した際には、以下の流れで次動作IDが空文字になるまでシナリオスクリプトに従った処理が実行されることになります。
(初回動作に含まれる)EC操作群実行⇒EC操作結果に基づく遷移条件判定・次動作決定
⇒(次動作に含まれる)EC操作群実行⇒EC操作結果に基づく遷移条件判定・次動作決定…
続いて、マルチシナリオ機能を利用する際のAPI実行の大まかな流れを説明します(図4)。

図4:マルチシナリオ機能利用の流れ
利用者が本機能を利用する際には主に、図の赤枠のフローに従います。最初にシナリオ情報登録APIを実行し、先ほど説明したシナリオスクリプトをCCに登録します。登録したシナリオを、シナリオ有効化APIを実行することで有効化すると、シナリオは実行可能な状態になります。シナリオ開始APIを実行すると、CCにてシナリオスクリプトに定義された処理が実行されます。実行結果は、シナリオ状況取得APIを実行することで確認することができます。
1.3 鍵管理機能
鍵管理機能は、EC(研究所ポータルにおいてはEthereum)に登録されたアカウントの秘密鍵を管理する機能です。利用の流れと本機能の仕組みについて、図5で説明します。

図5:鍵管理機能利用の流れ
利用者が本機能を利用するのは、前節で説明したシナリオスクリプトにCCからEthereumの取引を実行する処理
が定義されている場合になります。つまり、Ethereumで実行する取引についてCCにて署名を行う場合です(※)。このような場合、まず利用者は、クライアントID、Ethereumアドレスの秘密鍵を含むクライアント情報をウォレットサーバに登録します(図の①)。Ethereumアドレスの秘密鍵は、MetaMaskなどのウォレットからエクスポートします(Ethereumメインネットなどでサービス利用しているアドレスとは別に、CCの実行専用に作成してください)。Ethereumにて取引実行するためのガス代や送金額は登録するアドレスにて保持している必要があります。ガス代の入手は、https://sepoliafaucet.com/などをご利用ください。また、MetaMaskのウォレット作成やネットワーク接続については、環境価値アプリユーザマニュアルの2.1 MetaMask導入、ETHアカウント作成を参考ください。
シナリオ実行時、利用者は①にて登録した鍵の識別子であるクライアントIDをシナリオ開始APIの実行引数に投入します(図の②)。シナリオ実行中にEthereumの取引をCCが実行する際には、投入されたクライアントIDを用いてウォレットサーバに取引署名の依頼がなされます。ウォレットサーバは登録された秘密鍵での署名を認可したうえで取引に署名します。そして署名済み取引はCoreサーバへ返却され、Ethereumに送信されるという流れになります。
(※) Data e-TRUSTのみとの連携、Ethereumでの取引を監視するEC起点動作起動を利用する場合は該当しません。
2. インターフェース(API仕様)
本章では、コネクションチェーンのAPI仕様について説明する(インタフェース詳細は、OpenAPIドキュメントを参照)。2.2 シナリオ情報仕様ではシナリオ情報登録・更新APIのinputとなるシナリオ情報について説明している。異常終了時のレスポンスについては、2.3 エラーコード/メッセージ一覧を参照。
2.1 共通仕様
ConnectionChainを利用する場合、あらかじめ弊社にて利用者登録(ID発行)を実施する必要があります。本マニュアルで説明しているAPIリクエストの際には、利用者IDを用いて認証をおこない、アクセストークン(<ACCESS_TOKEN>
)を取得した後、各APIリクエストにAuthorization: Bearer <ACCESS_TOKEN>
ヘッダを設定する必要があります。 利用者IDおよび認証、アクセストークンの詳細については研究所ポータルのWebページを参考ください。
2.2 シナリオ情報仕様
2.2.1 動的値対応(※1)
@+インスタンス動的値名
を指定することで、シナリオ実行時/実行中にインプットした値が利用できる。インスタンス動的値名には、シナリオ実行開始時に設定する値を特定する変数名(initParamNames)、ECから返却/通知された値を特定する変数名(paramName)が利用できる。動的値名を指定した場合は、シナリオ実行中に対応する値(シナリオ実行開始時、ECからの返却/通知時にインプット)で置き換えられる。
例) インスタンス動的値名「username」、インスタンス動的値「taro」の場合
シナリオの記述:{"target":"@username"} → 置換後の値:{"target":"taro"}
また、インスタンス動的値が数値として扱える場合は四則演算での計算式表現が可能(引数(args)や遷移条件(condition)、フィルタ(filter)の値が主な対象)。
例)2*@value+(100+&rate)/100
ただし、動的値を含まない計算や指数表記、余り計算、10進数以外での計算はサポート外
例)(2**3+4)%10
2.2.2 動的値部分置換対応(※2)
インスタンス動的値名を「'(シングルクォーテーション)」で囲むことで文字列の一部分のみをシナリオ実行中に置き換えることができる。
例) インスタンス動的値名「username」、インスタンス動的値「taro」の場合
シナリオの記述:{"url":"http://x.x.x/'@username'/test"} → 置換後の値:{"url":"http://x.x.x/taro/test"}
さらに、この置換は「'」で囲まれていない動的値の値変換よりも先に行うため、それらの動的値名に対しても適用できる。
例)インスタンス動的値名が「user_admin」「user_normal」「userType」の場合
"@user_'@userType'"と記述すれば、userTypeの値をadmin/normalに切り替えることでuser_admin/user_normalに対応する動的値を参照できるようになる。
2.2.3 遷移条件(condition)について(※3)
{operationId:<EC操作ID>, type:<操作種別>, result.<フィールド名><比較演算子><値>}、またはそれらを||、&&で連結した文字列。
||と&&が混在する場合は組み合わせを明確に()で囲むこと。
<操作種別>:REF / REQ / EVEのいずれか
REF⇒参照系EC操作(残高参照やAPIでのGETリクエストなど、ECの状態変更を伴わない操作)のレスポンスを表す
REQ⇒要求系EC操作(ECの取引実行やAPIでのPOSTリクエストなど、ECの状態変更を伴う操作)のレスポンスを表す
EVE⇒イベント通知のあるリクエスト(要求系EC操作含む)やフィルタ設定を行った場合の、ECからのイベント通知を表す
<フィールド名>:responseやeventのname領域で定義した名前
<比較演算子>:「==」「!=」「>=」「<=」「>」「<」を指定可能。
「>」「<」を含む場合は数値として、含まない場合(「==」、「!=」)は文字列としての比較を行う。
<値>:動的値対応。なお、空文字を扱いたい場合は「’’(シングルクォーテーション2つ)」を記述する
例)ECから通知されるイベントに含まれるfrom(eventのname領域に記述)の値の一致で判定したい場合
{operationId:1, type:EVE, result.from==0x407d73d8a49eeb85d32cf465507dd71d507100c1}
例)EC操作で返却される値、およびECから通知されるイベントに含まれる値の一致で判定したい場合
{operationId:1, type:REQ, result.from==0x407d73d8a49eeb85d32cf465507dd71d507100c1} && {operationId:1, type:EVE, result.from==0x407d73d8a49eeb85d32cf465507dd71d507100c1}
「操作結果を問わず、操作要求自体が成功/失敗した場合」のみで遷移条件を判定したい場合、フィールド名を省略し、以下のように記述する。
result<比較演算子(==または!=)><値(OKまたはNG)>
例)EC操作で直接返却される値を参照せずに、成功かどうかのみで判定する場合
{operationId:1, type:REQ, result==OK}
なお、値にOK
が記述できるのは、当該のoperationIdのEC操作について、responseやeventを省略した場合であるため注意(NG
の記述については、responseやeventの記載有無を問わない)。
遷移条件の注意事項
遷移条件(condition)の判定で既に次動作へ遷移したにも関わらず、再び判定済のcondition判定が行われ、次動作が実行される場合があるため、condition記述の際には以下に注意してほしい。
判定する“operations”に記述した「operation」と、operationの結果である「同期結果(REQ or REF)・非同期結果(EVE)」をAND(“&&”)で網羅的にカバーすること
NGな例1)同期結果(REQ)によって、conditionId:2が先に満たされ、非同期結果(EVE)によってconditionId:1も満たしてしまうのでNG(動作IDtransfer
が2回実行)
nextActions:[
{conditionId:"1", condition:"{operationId:1, type:REQ, <conditionA>} && {operationId:1, type:EVE, <conditionB>}", nextActionId:"transfer"},
{conditionId:"2", condition:"{operationId:1, type:REQ, <conditionA>}", nextActionId:"transfer"}
]
⇒conditionId:2は不要(REQとEVE両方の操作種別をconditionで用いる場合は単独で書かない)
NGな例2)同期結果(REQ)によってconditionId:1が満たされ、非同期結果(EVE)によってconditionId:2も満たしてしまうのでNG(動作IDtransfer
が2回実行)
nextActions:[
{"conditionId":"1", "condition":"{operationId:1, type:REQ, result==OK}","nextActionId": "transfer"},
{"conditionId": "2", "condition":"{operationId:1, type:EVE, result.to==xx}", "nextActionId": "transfer"}
]
⇒以下のように、同期結果(REQ)、非同期結果(EVE)を&&
でつないで記述すること(REQとEVE両方の操作種別をconditionで用いる場合は単独で書かない)。
nextActions:[
{"conditionId":"1", "condition":"{operationId:1, type:REQ, result==OK} && {operationId:1, type:EVE, result.to==xx}","nextActionId": "transfer"}
]
NGな例3)operationId:1の非同期結果(EVE)によってconditionId:1が満たされ、operationId:2の非同期結果によってconditionId:2も満たされてしまうのでNG(動作IDtransferX
、transferY
が両方実行)
nextActions:[
{conditionId:"1", condition:"{operationId:1, type:EVE, <conditionA>}", nextActionId:"transferX"},
{conditionId:"2", condition:"{operationId:2, type:EVE, <conditionB>}", nextActionId:"transferY"}
]
⇒以下のように、同じ動作内に非同期結果を用いるEC操作が複数ある場合は、&&
でつないで記述すること(操作種別EVEのconditionを複数用いる場合は単独で書かない)
nextActions:[
{conditionId:"1", condition:"{operationId:1, type:EVE, <conditionA>} && {operationId:2, type:EVE, <conditionB>}", nextActionId:"transferX"}
]
2.2.4 EC起点の動作起動(※4)
<機能説明>
本機能は、ECの秘密鍵を弊社に預ける(1.3 鍵管理機能参照)ことやCCから取引実行することのリスク・工数を加味したうえで、CC以外のアプリケーションからECの取引実行を行いたい場合に利用する。CCではシナリオ実行によりECの取引実行を監視し、別ECに対する処理に繋げることができる。
<具体的な利用方法>
- ECからイベントとして通知される結果に対する特定/記録用情報(event)とイベント通知条件となるTx内変数名/値(filter)をセットで記述することで、ECにおいて実行された取引をCCが監視することができる。
- filterの記述は、txidなど取引を一意に指定する情報を記載すること(想定外の取引をフィルタし、遷移条件判定してしまう恐れがあるため)。
- EC操作情報(operation)の記載はchainIdのみ定義し、遷移条件(condition)には操作種別がEVEの条件を記載して判定する。
- Ethereum起点で動作起動を行う場合、Ethereumにて取引実行してから25ブロックがコミットされるまで(約5分)に、EC起点の動作起動を定義したシナリオを開始し、filterがセットされるようにすること(CCにてキャッシュしているEthereumのブロック数が25ブロックであるため)。
例)シナリオ開始パラメータで与えたインスタンス動的値(txId)を用いてEthereumの取引をフィルタし、from/to値を特定する場合
{
"operationId":"1",
"operation": {
"chainId":"Geth"
},
"filter": {"hash":"@txId"},
"event": [{"name":"from","path":"from"},{"name":"to", "path":"to"}]
}
2.2.5 各連携先の入力仕様
シナリオ情報に含まれる次の値については、ECの種別によって、入力仕様が異なる(以下、各ECにおける入力仕様を参照)
- 取引実行用関数名(func)
- 取引実行用関数に与える引数(args)
- EC操作で直接返却される結果に対する特定/記録用情報(response)
- ECからイベントとして通知される結果に対する特定/記録用情報(event)
- イベント通知条件となるTx内変数名/値(filter)
各表の機能/func
ごとに、遷移条件(condition)に含まれる操作種別(type)に指定可能な値が異なる(色別で表現)。
赤:REF(参照系EC操作)
青:REQ(要求系EC操作)、EVE(イベント通知のあるリクエスト)
Ethereumテストネット(chainId:Geth)
機能/func
args
response
filter, event
パラメータ
必須
型
説明
Web3.ethの
関数呼出し/call
fcn
〇
string
web3.eth関数(※)の関数名
(※) web3jsにて、web3.eth.<関数名>にて呼び出し可能な関数名.
引数にArray[string]を与える関数であれば呼び出し可能(例:getBalance)
sendSignedTransactionなど、ECの状態を変更する関数は指定しないこと。
参考:web3jsドキュメント
web3.eth関数の返却値を参照し、pathを設定
参考:web3jsドキュメント
例:getBalanceの場合
[{"name":"amount", "path":""}]
(残高が返却され, amount変数に格納)
基本的に本機能は取引を実行するためのものでない(参照のみ)ため、記述しないこと
args
Array
[string]
上記、web3.eth関数の引数
例:
["0x407d73d8a49eeb85d32cf465507dd71d507100c1"]
送金/send
from
〇
string
移転元アドレス
アドレスは0xを先頭に付与し、全て小文字である必要あり
例:0x407d73d8a49eeb85d32cf465507dd71d507100c1
トランザクションレシートが返却されるので、responseにて使用したい場合は以下のように記述
※pathは「transactionReceipt」を先頭に付ける
[{"name": "status", "path":"transactionReceipt.status"}]
(取引ステータスをstatus変数に格納)
参考:トランザクションレシートの形式(getTransactionReceipt関数の返却値)
CCに通知される取引の形式(以下)にしたがって、取引内容の絞り込み(filter)、および特定&event変数への代入が可能。
※event変数へ代入された値は全て文字列に変換される。アドレス値は,全て小文字に変換したうえで記述すること
※eventやfilterも記述しても取引確定まで保証できないことに注意(主に記録目的)。取引確定やスマートコントラクトの実行成功は同期的に検知し、conditionに「result==OK」と記載することで判定可能
■filterの記述例(toの内容で絞り込み)
{"to":"0x407d73d8a49eeb85d32cf465507dd71d507100c1"}
■eventの記述例(valueの値をamount変数に代入)
[{"name":"amount", "path":"value"}]
■CCに通知される取引の形式
参考:web3.eth.getTransactionの返却値
{
"hash":"<トランザクションID>",
"nonce": "<ナンス>",
"blockHash": "<ブロックハッシュ>",
"blockNumber": "<ブロック番号>",
"transactionIndex": "<Txのインデックス>",
"from": "<送信元アドレス>",
"to": "<送信先アドレス>",
"value": "<送金額(wei)>",
"gasPrice": "<ガスの値段>",
"gas": "<手数料>",
"input": "<取引のinputデータ>"
}
※inputのデコードは未サポート(eventにはデコード前のデータを記述)
to
〇
string
移転先アドレス
アドレスは0xを先頭に付与し、全て小文字である必要あり
amount
〇
string
移転量(単位はwei)
指数表記も対応
例:3.78*10^14、3.78e14
gas
string
消費ガス量(単位はgas)
例(送金時のGasLimit):21000
コントラクト実行(send)/
contractSend
abis
〇
Array
[object]
コントラクトのABI
例:[{"constant":true,"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],…},…]
インスタンス動的値に格納することも可能. その場合ABIに含まれる全ての「"」の直前に「\\\」を付加(エスケープ)して文字列化したうえで動的値に格納すること.
動的値例:"[{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes4\\\",\\\"name\\\":\\\"interfaceId\\\",\\\"type\\\":\\\"bytes4\\\"}],…},…]"
from
〇
string
送信元アドレス
アドレスは0xを先頭に付与し、全て小文字である必要あり
to
〇
string
コントラクトアドレス
アドレスは0xを先頭に付与し、全て小文字である必要あり
例:0x06012c8cf97bead5deae237070f9587f8e7a266d
method
〇
string
コントラクト関数名
例:issueNFT
params
〇
Array
[string]
コントラクトの実行引数. パラメータがない関数の場合は空配列を指定.
実行引数をArray[string]以外で与える場合は未サポート
例:["token0", "0x407d73d8a49eeb85d32cf465507dd71d507100c1"]
options
object
コントラクト実行時に含めるパラメータ(gasPrice, gas, valueなど取引実行のパラメータ)を記載. data, nonceはCC内部で設定されるため指定しないこと
例:{"gas":"210000", "value":"10000"}
コントラクト実行(call)/
contractCall
abis
〇
Array
[object]
contractSendと同じ
コントラクト実行の返却値に従う. 返却値は全て文字列に変換される
■単一の返却値の場合
pathに空文字を設定して特定
例:[{"name": "value1", "path":""}]
■複数の返却値の場合
pathに配列の番号を設定して値を特定
例:[{"name": "value1", "path":"payload[0]"},{"name": "value2", "path":"payload[1]"}]
本機能は取引を実行しないため記述しないこと
to
〇
string
method
〇
string
params
〇
Array
[string]
options
object
コントラクトのcall時に含めるパラメータ(from, gasPrice, gas)を記載.
例:{"gas":"210000"}
Web3.eth.contractクラスのcall関数呼び出し時のoptionsに設定
Data e-TRUST(chainId:CDL)
CDLの用語やAPIの仕様詳細については、Fujitsu Computing as a Service Data e-TRUST APIリファレンスマニュアルを参照
機能/func
args
response
filter, event
パラメータ
必須
型
説明
履歴登録
("POST /trail_registration"を実行する機能)/
registerHistoryData
eventId
string
履歴ID
ヘッダー部(cdl:Lineage要素)として登録される。指定しない場合はシステムが自動的に付与する。
文字列 (アルファベット[a-z][A-Z]、数字[0-9]、_、-)
最大文字数: 100文字
登録した履歴JSONデータ
履歴JSONフォーマットは、Fujitsu Computing as a Service Data e-TRUST 機能説明書の"付録A 証跡・監査機能のJSONフォーマット"を参照
同期処理のためfilter,eventの設定はなし
lineageId
string
リネージュID
ヘッダー部(cdl:Lineage要素)として登録される。
文字列 (アルファベット[a-z][A-Z]、数字[0-9]、_、-)
最大文字数: 100文字
tags
object
ローカルデータ名のリスト
ローカルデータ部(cdl:Tags要素)として登録される。
properties
object
追加プロパティ
グローバルデータ部(cdl:Event要素)として登録される。
リネージュ取得
("GET /trail_acquisition/{cdleventid}"を実行する機能)
/getLineage
eventId
〇
string
リネージュ取得対象の履歴ID
リネージュのJSONデータ (履歴JSONデータ群の配列)
履歴JSONフォーマットは、Fujitsu Computing as a Service Data e-TRUST 機能説明書の"付録A 証跡・監査機能のJSONフォーマット"を参照
direction
string
リネージュ検索方向
以下のいずれかを指定。デフォルト値はBACKWARD
・BACKWARD: 前履歴方向のリネージュ取得
・FORWARD: 次履歴方向のリネージュを取得
・BOTH: 両方向のリネージュを取得
depth
string
リネージュをたどる深さ
以下のいずれかを指定。デフォルト値は"-1"
・0: 指定履歴IDの履歴のみを取得
・整数値: 指定履歴IDから前後指定個数の履歴を取得
・-1: 指定履歴IDの履歴を含む全てのリネージュを取得
履歴検索(検索対象:ヘッダー部)
("POST /trail_search_headers"を実行する機能)
/searchByHeader
searchType
〇
string
検索で使用するマッチタイプ
以下の3種類いずれかの検索方法を指定
・exactmatch: 完全一致検索
・partialmatch: 部分一致検索
・regexpmatch: 正規表現検索
ヘッダ部が検索条件にマッチした履歴群 (履歴JSONオブジェクトの配列)
履歴JSONフォーマットは、Fujitsu Computing as a Service Data e-TRUST 機能説明書の"付録A 証跡・監査機能のJSONフォーマット"を参照
fields
〇
object
検索条件
以下の形式で、属性名と属性値を指定する(複数指定可)
{"attribute":"value"}
履歴検索(検索対象:グローバルデータ部)
("POST /trail_search_globaldata"を実行する機能)
/searchByGlobalData
searchType
〇
string
検索で使用するマッチタイプ
以下の3種類いずれかの検索方法を指定
・exactmatch: 完全一致検索
・partialmatch: 部分一致検索
・regexpmatch: 正規表現検索
グローバルデータ部が検索条件にマッチした履歴群 (履歴JSONオブジェクトの配列)
履歴JSONフォーマットは、Fujitsu Computing as a Service Data e-TRUST 機能説明書の"付録A 証跡・監査機能のJSONフォーマット"を参照
fields
〇
object
検索条件
以下の形式で、属性名と属性値を指定する(複数指定可)
{"attribute":"value"}
2.3 エラーコード/メッセージ一覧
ConnectionChainの各API実行におけるエラーコード/メッセージ一覧を以下に記載する。今後のバージョンアップにより、エラーコードやメッセージの内容は変更の可能性がある。
2.3.1 シナリオ情報管理、シナリオ制御
シナリオ情報管理、シナリオ制御のAPI実行においてエラーが発生した場合、以下の形式のレスポンスボディが返却される。
{
"error":{
"code":<エラーコード>,
"message":<エラーメッセージ>
}
}
パラメータ
型
説明
error
object
エラー内容
code
int
エラーコード
message
string
エラーメッセージ
<エラーコード/エラーメッセージ一覧>
HTTPステータス
エラーコード
エラーメッセージ
エラー内容/対応
404
1002
登録されていないシナリオIDです。
対象のシナリオIDに対応するシナリオ情報が存在しないエラー。シナリオ情報更新、シナリオ情報取得、シナリオ有効化/無効化、シナリオ開始API実行時に発生。対象のシナリオIDに対応するシナリオ情報が登録されていることを確認し、必要に応じてシナリオ情報を登録する。
1003
登録されていないシナリオ実行IDです。
シナリオ状況取得API実行時に、対象のシナリオ実行IDに対応するシナリオ状況が存在しないエラー。シナリオ実行IDがあっていることを確認し、APIを実行する。
1004
有効化されていないシナリオです。
シナリオ開始時に、対象のシナリオIDに対応するシナリオ情報が有効化されていないエラー。シナリオが有効化されていることをシナリオ情報取得API実行により確認し、シナリオ有効化を行う。
422
2004
シナリオデータが指定されていません。
シナリオ情報登録、更新時にシナリオデータが指定されていないエラー。リクエストボディにシナリオデータを指定し、APIを実行する。
2005
シナリオIDが指定されていません。
シナリオ情報登録、シナリオ開始時にシナリオIDが指定されていないエラー。リクエストボディにシナリオIDを指定し、APIを実行する。
2006
シナリオデータに動作リストが定義されていません。
シナリオ情報登録/更新時に、シナリオデータにactions配列が定義されていないエラー。リクエストボディにactions配列を定義し、APIを実行する。
2007
シナリオデータの動作情報に動作IDが定義されていません。
シナリオ情報登録/更新時に、シナリオデータにactionIdが定義されていないエラー。リクエストボディの各動作情報にactionIdを定義し、APIを実行する。
2008
シナリオデータの動作情報にEC操作情報が定義されていません。
シナリオ情報登録/更新時に、シナリオデータにoperations配列が定義されていないエラー。リクエストボディにoperations配列を定義し、APIを実行する。
2009
シナリオデータの動作情報にEC操作IDが定義されていません。
シナリオ情報登録/更新時に、シナリオデータにoperationIdが定義されていないエラー。リクエストボディの各EC操作情報にoperationIdを定義し、APIを実行する。
2010
シナリオデータの動作情報にEC操作情報内容が定義されていません。
シナリオ情報登録/更新時に、シナリオデータにoperationが定義されていないエラー。リクエストボディの各EC操作情報にoperationを定義し、APIを実行する。
2011
シナリオデータのEC操作情報内容にChainIDが定義されていません。
シナリオ情報登録/更新時に、シナリオデータのoperationにchainIdが定義されていないエラー。リクエストボディの各operationにchainIdを定義し、APIを実行する。
2014
シナリオデータのEC操作情報内容に認証用パラメータキーとSignerが両方指定されています。
シナリオ情報登録/更新時に、シナリオデータのoperationにauthParamKeyとsignerが両方指定されているエラー。signerとauthParamKeyのいずれかのみを指定してAPIを実行する(ただしsignerは未サポート)。
2015
シナリオデータの動作情報に次動作遷移条件IDが定義されていません。
シナリオ情報登録/更新時に、シナリオデータのnextActions配列に含まれる要素について、conditionIdが定義されていないエラー。リクエストボディの各nextActions配列にconditionIdを定義し、APIを実行する。
2016
シナリオデータの動作情報に次動作遷移条件が定義されていません。
シナリオ情報登録/更新時に、シナリオデータのnextActions配列に含まれる要素について、conditionが定義されていないエラー。リクエストボディの各nextActions配列にconditionを定義し、APIを実行する。
2017
シナリオ有効フラグが指定されていません。
シナリオ有効化/無効化時に、シナリオ有効フラグが含まれていないエラー。リクエストボディにavailabilityを指定し、APIを実行する。
2050
シナリオデータに初期動作IDが定義されていません。
シナリオ情報登録/更新時に、シナリオデータの1stActionIdが定義されていないエラー。リクエストボディに1stActionIdを定義し、APIを実行する。
2051
初期動作IDで指定された動作情報がシナリオデータに存在しません。
シナリオ情報登録/更新時に、シナリオデータの1stActionIdに定義したactionIdの動作情報がシナリオデータに存在しないエラー。リクエストボディに含まれるactionIdの1つと1stActionIdが一致するように1stActionIdを定義し、APIを実行する。
2052
シナリオデータの動作情報に次動作情報が定義されていません。
シナリオ情報登録/更新時に、シナリオデータのnextActions配列が定義されていないエラー。リクエストボディの各nextActions配列を定義し、APIを実行する。
2053
シナリオデータの動作IDが重複して定義されています。
シナリオ情報登録/更新時に、同一actionIdの動作情報が複数定義されているエラー。リクエストボディの各動作情報についてactionIdが重複しないように定義し、APIを実行する。
2054
シナリオデータの動作情報にEC操作IDが重複して定義されています。
シナリオ情報登録/更新時に、シナリオデータのoperations配列について、同一operationIdのoperationが複数定義されているエラー。リクエストボディの各EC操作情報についてoperarionIdが重複しないように定義し、APIを実行する。
2055
シナリオデータの動作情報に次動作遷移条件IDが重複して定義されています。
シナリオ情報登録/更新時に、シナリオデータのnextActions配列について、同一conditionIdの遷移条件が複数定義されているエラー。リクエストボディの各遷移条件についてconditionIdが重複しないように定義し、APIを実行する。
2056
シナリオデータのEC操作結果特定用情報内で、同じ名前が複数回定義されています。
シナリオ情報登録/更新時に、シナリオデータのoperations配列に含まれるresponse, event配列内のオブジェクトについて、同一のname/paramNameが複数定義されているエラー。リクエストボディの各response, event配列内のオブジェクトについてname/paramNameが重複しないように定義し、APIを実行する。
2057
認証用パラメータキー一覧で定義していない値が、EC操作情報内容に使用されています。
シナリオ情報登録/更新時に、シナリオデータのoperations配列に含まれる各operationのauthParamKeyについて、authParamKeysにて定義されていない値が定義されているエラー。リクエストボディの各EC操作情報についてauthParamKeysに定義されている値をauthParamKeyに定義し、APIを実行する。
2058
シナリオデータのEC操作情報として、取引実行関数またはフィルタ定義の指定が最低限必要です。
シナリオ情報登録/更新時に、シナリオデータのoperations配列に含まれる各operationについて、funcとfilterのどちらも定義されていないエラー。リクエストボディの各EC操作情報についてfuncもしくはfilterを定義し、APIを実行する。
2059
シナリオ開始時指定パラメータ名一覧で、同じ名前が複数回定義されています。
シナリオ情報登録/更新時に、シナリオデータのinitParamNamesに同一の値を複数定義しているエラー。リクエストボディのinitParamNamesについて値が重複しないように定義し、APIを実行する。
2060
認証用パラメータキー一覧で、同じ名前が複数回定義されています。
シナリオ情報登録/更新時に、シナリオデータのauthParamKeysに同一の値を複数定義しているエラー。リクエストボディのauthParamKeysについて値が重複しないように定義し、APIを実行する。
2061
シナリオデータの次動作情報で、未定義の動作IDが指定されています。
シナリオ情報登録/更新時に、シナリオデータのnextActions配列に含まれる要素について、nextActionIdに記載したactionIdが定義されていないエラー。リクエストボディのnextActionIdに、定義されているactionId(もしくは空文字)を定義し、APIを実行する。
2062
シナリオデータの次動作情報で、現在の動作と同じ動作IDが指定されています。
シナリオ情報登録/更新時に、シナリオデータのnextActions配列に含まれる要素について、nextActionIdに記載したactionIdが現在のactionIdと同一であるエラー。リクエストボディのnextActionIdに、現在のactionId以外のactionId(もしくは空文字)を定義し、APIを実行する。
2063
シナリオデータの次動作情報で、実行済みの動作と同じ動作IDが指定されています。
シナリオ情報登録/更新時に、シナリオデータのnextActions配列に含まれる要素について、nextActionIdに記載したactionIdが実行済のactionIdと同一であるエラー。リクエストボディのnextActionIdに、実行済のactionId以外のactionId(もしくは空文字)を定義し、APIを実行する。
2064
シナリオデータの動作情報または次動作遷移条件で、未定義のパラメータ名が指定されています。
シナリオ情報登録/更新時に、シナリオデータのoperations配列に含まれる各operation(chainId, func, args, filter)、nextActions配列に含まれる要素に未定義のインスタンス動的値名(@+文字列)を定義している場合のエラー。インスタンス動的値名をリクエストボディのinitParamNamesやevent,response配列の要素paramNamesに定義し、APIを実行する。
2065
シナリオデータの次動作遷移条件が正しい形式で記述されていません。
シナリオ情報登録/更新時に、シナリオデータのnextActions配列に含まれる要素(condition)の形式エラー。リクエストボディに正しい形式のconditionを定義し、APIを実行する。参考:遷移条件の形式{operationId:<EC操作ID>, type:<操作種別>, result.<フィールド名><比較演算子><値>}、またはそれらを\|\|、&&で連結した文字列。\|\|と&&が混在する場合は組み合わせを明確に()で囲むこと。
2066
シナリオデータの次動作遷移条件で、operatonId領域の書式が不正または記述されていません。
シナリオ情報登録/更新時、シナリオデータのnextActions配列に含まれる要素(condition)について、operationIdの記述エラー。リクエストボディのconditionに正しいoperationIdの書式にしたがって定義し、APIを実行する。
2067
シナリオデータの次動作遷移条件で、operatonId領域の値が指定されていません。
シナリオ情報登録/更新時、シナリオデータのnextActions配列に含まれる要素(condition)について、operationIdの記述エラー。リクエストボディのconditionについて「operationId:」に続けてEC操作IDの値を定義し、APIを実行する。
2068
シナリオデータの次動作遷移条件で、未定義のEC操作IDがoperatonId領域に指定されています。
シナリオ情報登録/更新時、シナリオデータのnextActions配列に含まれる要素(condition)について、operationIdに未定義のoperationIdが指定されているエラー。リクエストボディのconditionに含まれるoperationIdに、同Action内で定義されているoperationIdの値を定義し、APIを実行する。
2069
シナリオデータの次動作遷移条件で、type領域の書式が不正または記述されていません。
シナリオ情報登録/更新時、シナリオデータのnextActions配列に含まれる要素(condition)について、typeの記述エラー。リクエストボディのconditionに正しいtypeの書式にしたがって定義し、APIを実行する。
2070
シナリオデータの次動作遷移条件で、type領域の値が指定されていません。
シナリオ情報登録/更新時、シナリオデータのnextActions配列に含まれる要素(condition)について、typeの記述エラー。リクエストボディのconditionについて「type:」に続けて操作種別を定義し、APIを実行する。
2071
シナリオデータの次動作遷移条件で、type領域の値に[REF/REQ/EVE]以外が指定されています。
シナリオ情報登録/更新時、シナリオデータのnextActions配列に含まれる要素(condition)について、typeに[REF/REQ/EVE]以外の文字列が指定されているエラー。リクエストボディのconditionに含まれるtypeに[REF/REQ/EVE]のいずれかを定義し、APIを実行する。
2072
シナリオデータの次動作遷移条件で、result要素の書式が不正または記述されていません。
シナリオ情報登録/更新時、シナリオデータのnextActions配列に含まれる要素(condition)について、resultの記述エラー。リクエストボディのconditionに正しいresultの書式にしたがって定義し、APIを実行する。
2073
シナリオデータの次動作遷移条件で、result要素に使用する演算子が不正または記述されていません。
シナリオ情報登録/更新時、シナリオデータのnextActions配列に含まれる要素(condition)について、result要素に使用する演算子エラー。リクエストボディのconditionに含まれるresultに、「==」、「!=」、「>=」、「<=」、「>」、「<」のいずれかの演算子を定義し、APIを実行する。
2074
シナリオデータの次動作遷移条件で、result要素のフィールド名が記述されていません。
シナリオ情報登録/更新時、シナリオデータのnextActions配列に含まれる要素(condition)について、result要素のフィールド名(「.」に続けて記述)の記述エラー。リクエストボディのconditionに含まれるresultに、「.」に続けてフィールド名を定義し、APIを実行する。
2075
シナリオデータの次動作遷移条件で、EC操作結果特定用情報に未定義の名前がresult要素のフィールド名に指定されています。
シナリオ情報登録/更新時、シナリオデータのnextActions配列に含まれる要素(condition)について、result要素のフィールド名(「.」に続けて記述)がresponse, event(のname)に定義されていないエラー。リクエストボディのconditionに含まれるresultに、遷移条件のoperationIdに定義したEC操作IDのoperationに含まれるresponse, event(のname)で定義されているフィールド名を定義し、APIを実行する。
2076
シナリオデータの次動作遷移条件で、フィールド名なしのresult要素に使用可能な演算子は[==/!=]、値は[OK/NG]のみです。
シナリオ情報登録/更新時、シナリオデータのnextActions配列に含まれる要素(condition)について、result要素のフィールド名(「.」に続けて記述)を定義しなかった場合、使用している演算子と値のエラー。リクエストボディのconditionに含まれるresultに、「==」,「!=」のいずれかの演算子、「OK」,「NG」のいずれかの値を定義し、APIを実行する。
2077
シナリオデータの動作情報または次動作遷移条件で、不正な計算式が記述されています。
シナリオ情報登録/更新時に、シナリオデータのoperations配列に含まれる各operation、nextActions配列に含まれる要素(condition)に記述された計算式の形式エラー。リクエストボディに正しい形式の計算式を定義し、APIを実行する。
2078
シナリオデータのEC操作結果特定用情報で、パスの書式が不正です。
シナリオ情報登録/更新時に、シナリオデータのoperations配列に含まれるresponse, event配列内のオブジェクトについて、pathの書式が不正であるエラー。リクエストボディの各response, event配列内のオブジェクトについて正しい形式のpathを定義し、APIを実行する。
2079
開始時指定パラメータ名一覧は配列で指定してください。
シナリオ情報登録/更新時に、シナリオデータのinitParamNamesが配列でないエラー。リクエストボディのinitParamNamesに配列を定義し、APIを実行する。
2080
認証用パラメータキー一覧は配列で指定してください。
シナリオ情報登録/更新時に、シナリオデータのauthParamKeysが配列でないエラー。リクエストボディのauthParamKeysに配列を定義し、APIを実行する。
2081
シナリオデータの動作リストは配列で指定してください。
シナリオ情報登録/更新時に、シナリオデータのactionsが配列でないエラー。リクエストボディのactionsに配列を定義し、APIを実行する。
2082
シナリオデータのEC操作情報は配列で指定してください。
シナリオ情報登録/更新時に、シナリオデータのoperationsが配列でないエラー。リクエストボディのoperationsに配列を定義し、APIを実行する。
2083
シナリオデータのEC操作結果特定用情報は配列で指定してください。
シナリオ情報登録/更新時に、シナリオデータのoperations配列に含まれるresponse, event配列が配列でないエラー。リクエストボディのresponse, eventに配列を定義し、APIを実行する。
2084
シナリオデータの次動作情報は配列で指定してください。
シナリオ情報登録/更新時に、シナリオデータのnextActions配列が配列でないエラー。リクエストボディのnextActionsに配列を定義し、APIを実行する。
2085
シナリオデータの次動作遷移条件で、result要素の値が記述されていません。
シナリオ情報登録/更新時、シナリオデータのnextActions配列に含まれる要素(condition)について、result要素の演算子に続けて値が記述されていないエラー。リクエストボディのconditionに含まれるresultに、演算子に続けて値を定義し、APIを実行する。
2100
シナリオ開始時指定パラメータの数が、シナリオデータで定義された数と一致しません。
シナリオ開始時に指定するparams配列のパラメータ数が、シナリオデータで定義されたinitParamNames配列の数と一致しないエラー。シナリオ開始時のparamsもしくはシナリオデータのinitParamNamesを変更し、両者の数を合わせたうえでAPIを実行する。
2101
認証用パラメータの数が、シナリオデータで定義された数と一致しません。
シナリオ開始時に指定するauthParams配列のパラメータ数が、シナリオデータで定義されたauthParamKeys配列の数と一致しないエラー。シナリオ開始時のauthParamsもしくはシナリオデータのauthParamKeysを変更し、両者の数を合わせたうえでAPIを実行する。
2102
シナリオ開始時指定パラメータは文字列の配列で指定してください。
シナリオ開始時に指定するparams配列に指定する値が文字列の配列でないエラー。リクエストボディのparamsに文字列の配列を指定し、APIを実行する。
2103
認証用パラメータは配列で指定してください。
シナリオ開始時に指定するauthParams配列に指定する値が文字列の配列でないエラー。リクエストボディのauthParamsに文字列の配列を指定し、APIを実行する。
400
2104
シナリオ開始情報が指定されていません。
シナリオ開始時にリクエストボディが指定されていないエラー。リクエストボディにJSON形式でパラメータを指定し、APIを実行する。
2200
リクエストデータのサイズが上限を超えています。
各APIの実行時にリクエストデータのサイズが上限(50MB)を超えているエラー。上限より小さいサイズのリクエストデータを指定し、各APIを実行する。
500
3000
内部エラーです。
内部エラー。時間をおいて何度か実行し、それでもエラーが解消しない場合は弊社担当者へ連絡する。
3002
既に登録済みのシナリオIDです。
シナリオ情報登録時、指定したシナリオIDに対応するシナリオ情報がすでに登録されているエラー。シナリオIDを変更してシナリオ情報登録APIを実行、もしくはシナリオ情報更新APIを実行する。
3003
既に登録済みの実行状況IDです。
シナリオ開始時にシナリオ実行ID(stateId)を指定した場合、指定したシナリオ実行IDがすでに登録されているエラー。stateIdを変更してAPIを実行する。
403
4001
シナリオ情報を操作する権限がありません。
シナリオ情報更新/削除/無効化/有効化時、実行ユーザがシナリオ情報を操作する権限を持たないエラー。シナリオ登録を行ったユーザのアクセストークンをAuthorizationヘッダに指定し、APIを実行する。
503
5000
他シナリオの実行によるロック中です。少し待ってから再度実行してください。
シナリオ開始時、他ユーザの実行中により実行を受け付けられないエラー。20秒程度待ってから再度APIを実行する(他ユーザの実行状況によっては、20秒以上待たされる可能性あり)。
-
9000
不明なエラーです。
Coreサーバにて定義されていないエラーコードが返却された場合のエラー。弊社担当者へ連絡する。
2.3.2 鍵管理
鍵管理API実行時にエラーが発生した場合、以下のエラーメッセージが返却される。仕様に従った正しいリクエストを何度か行ったうえで下表に記載のないエラーが発生している場合は、弊社担当者へ連絡すること。
<エラーメッセージ一覧>
HTTPステータス
エラーメッセージ(レスポンスボディ)
エラー内容/対応
400
{"result":"not exist!"}
ログイン時、指定したクライアントIDのクライアント情報が存在しないエラー。存在するクライアントIDを指定し、APIを実行する。(存在することはクライアント情報一覧取得API実行により確認)
{"result": "invalid parameter!"}
入力パラメータの指定エラー(必須指定のパラメータ無し、サイズオーバー)。必須パラメータを指定し、APIを実行する。
403
{"result": "not authorized!"}
クライアント情報更新/削除、取引署名時に当該のクライアントIDに対する操作権限が無いエラー。
自身が登録したクライアントIDを指定してAPIを実行する。
404
Not Found
リクエストしたパスにリソースが存在しないエラー。パスが正しいことを確認し、APIを実行する。
500
{"result":"already exist!"}
クライアント情報登録時に、指定したクライアントIDのクライアント情報がすでに存在するエラー。指定するクライアントIDを変更し、APIを実行する。
{"result":"not exist!"}
クライアント情報更新時に、指定したクライアントIDのクライアント情報が存在しないエラー。存在するクライアントIDを指定し、APIを実行する。(存在することはクライアント情報取得API実行により確認)
はじめに
本書の位置づけ
本書は、異なるブロックチェーン同士を安全に連携させるセキュリティ技術ConnectionChain
(※1 以降、CCとも記載)の機能、およびAPI仕様について説明しています。ConnectionChainを利用してアプリケーションおよびサービスを企画、または開発される方を対象に書かれています。また、本書を読むにあたってはインターネットやWebAPIに関する基本的な知識が必要です。
(※1) 富士通プレスリリース:ブロックチェーン同士を安全につなげるセキュリティ技術を開発、技術紹介ページ:ConnectionChain
本書の構成
本書は、以下の構成となっています。
章 | 内容 |
---|---|
1. コネクションチェーンの機能 | コネクションチェーンの概要、主な機能、API利用の流れについて説明します。 コネクションチェーンの全体像を理解されたい場合に参照ください。 |
2. インターフェース(API仕様) | コネクションチェーンのAPI仕様について説明します。 コネクションチェーンのAPIを試したり、アプリ開発を行ったりする場合に参照ください。 |
1. コネクションチェーンの機能
1.1 機能概要
ConnectionChainは、異なるブロックチェーン同士を連携することが可能な技術です。独立して運用される2つ以上のシステム(例えば金流管理、商流管理用のブロックチェーン)を、連携ノードを介してつなぎ、中央のブロックチェーンがHubとなって連携処理のロジックや実行証跡を管理することができます(図1参照)。
図1:ConnectionChainの概要
図中の連携ノードは、様々なブロックチェーン基盤のブロックチェーン操作を抽象化するコネクタであり、連携ノードによって様々なブロックチェーン基盤(※2)と接続することが可能です。連携ノードのソースコードはLinux Foundationの運営するブロックチェーン統合プロジェクトHyperledger Cacti
において公開されていますので、ご興味のある方は以下サイトなどを参照ください。
Hyperledger Cactiサイト:https://www.hyperledger.org/use/cacti
ソースコード(GitHub):https://github.com/hyperledger/cacti
(※2) Fujitsu Research Portal(以下、研究所ポータル)においては、Data e-TRUSTおよびEthereum Sepoliaテストネットとの接続をサポートしています。
研究所ポータルにおけるConnectionChainの機能構成を図2に示します。ConnectionChainは、マルチシナリオ機能(シナリオ情報管理、シナリオ制御)、鍵管理機能の2つの機能から構成されます。
図2:ConnectionChainの機能構成
<マルチシナリオ機能の仕組み>
各連携先ブロックチェーン(EC)に対する取引群を疑似言語によって表現したシナリオスクリプト
を記述することによってブロックチェーン間を連携することが可能な機能です。研究所ポータルでは、Data e-TRUSTにおけるAPI実行、およびEthereum(Sepoliaテストネット)における取引実行をサポートしています。シナリオスクリプトに従った連携処理は、Coreサーバおよびブロックチェーンにて行われ、連携処理の決定や連携証跡の記録がブロックチェーンにデプロイされたスマートコントラクトによって行われます。
<鍵管理機能の仕組み>
EC(研究所ポータルにおいてはEthereum)に登録されたアカウントの秘密鍵を管理する機能です。Coreサーバは、連携処理の実行時、エンドユーザから与えられた鍵を特定する識別子(クライアントID)を用いてウォレットサーバに対して取引の署名を依頼し、署名済の取引を得る仕組みとなっています。クライアントIDはエンドユーザのAzure IDに紐づいており、自身が保持する秘密鍵での取引署名のみ可能となっています。
機能に関するより実用的な説明や利用の流れについては、1.2 マルチシナリオ機能(シナリオ情報管理、シナリオ制御)、1.3 鍵管理機能 を参照ください。
1.2 マルチシナリオ機能(シナリオ情報管理、シナリオ制御)
マルチシナリオ機能は、各連携先ブロックチェーン(EC)に対する取引群を疑似言語によって表現したシナリオスクリプト
を記述することによってブロックチェーン間を連携することが可能な機能です。シナリオスクリプトは、ECの種別に依存しない共通形式での記述をサポートしており、以下の形式となっています(図3)。
図3:シナリオスクリプトの形式
シナリオスクリプトは、主にシナリオID、動作情報(配列)、初回動作ID、実行時指定パラメータ名、認証用パラメータ名で構成されます。動作情報にはECに対する処理(取引実行、参照など)が含まれており、シナリオを開始した際には、動作情報に定義された処理が初回動作IDから順に実行されることになります。実行時指定パラメータ名、認証用パラメータ名はシナリオ開始時に投入された値を本スクリプト内で扱うための変数名となっており、前者をインスタンス動的値と呼びます。動作情報には、EC操作情報(配列)、次動作情報(配列)が含まれており、それぞれECに対する処理(どんなECに対してどのような処理を行うか)と、次動作IDを決定するための遷移条件(ECの処理結果(複数可)に基づいて、どんな場合にどの動作を次に実行するか)を定義しています。シナリオを開始した際には、以下の流れで次動作IDが空文字になるまでシナリオスクリプトに従った処理が実行されることになります。
(初回動作に含まれる)EC操作群実行⇒EC操作結果に基づく遷移条件判定・次動作決定
⇒(次動作に含まれる)EC操作群実行⇒EC操作結果に基づく遷移条件判定・次動作決定…
続いて、マルチシナリオ機能を利用する際のAPI実行の大まかな流れを説明します(図4)。
図4:マルチシナリオ機能利用の流れ
利用者が本機能を利用する際には主に、図の赤枠のフローに従います。最初にシナリオ情報登録APIを実行し、先ほど説明したシナリオスクリプトをCCに登録します。登録したシナリオを、シナリオ有効化APIを実行することで有効化すると、シナリオは実行可能な状態になります。シナリオ開始APIを実行すると、CCにてシナリオスクリプトに定義された処理が実行されます。実行結果は、シナリオ状況取得APIを実行することで確認することができます。
1.3 鍵管理機能
鍵管理機能は、EC(研究所ポータルにおいてはEthereum)に登録されたアカウントの秘密鍵を管理する機能です。利用の流れと本機能の仕組みについて、図5で説明します。
図5:鍵管理機能利用の流れ
利用者が本機能を利用するのは、前節で説明したシナリオスクリプトにCCからEthereumの取引を実行する処理
が定義されている場合になります。つまり、Ethereumで実行する取引についてCCにて署名を行う場合です(※)。このような場合、まず利用者は、クライアントID、Ethereumアドレスの秘密鍵を含むクライアント情報をウォレットサーバに登録します(図の①)。Ethereumアドレスの秘密鍵は、MetaMaskなどのウォレットからエクスポートします(Ethereumメインネットなどでサービス利用しているアドレスとは別に、CCの実行専用に作成してください)。Ethereumにて取引実行するためのガス代や送金額は登録するアドレスにて保持している必要があります。ガス代の入手は、https://sepoliafaucet.com/などをご利用ください。また、MetaMaskのウォレット作成やネットワーク接続については、環境価値アプリユーザマニュアルの2.1 MetaMask導入、ETHアカウント作成を参考ください。
シナリオ実行時、利用者は①にて登録した鍵の識別子であるクライアントIDをシナリオ開始APIの実行引数に投入します(図の②)。シナリオ実行中にEthereumの取引をCCが実行する際には、投入されたクライアントIDを用いてウォレットサーバに取引署名の依頼がなされます。ウォレットサーバは登録された秘密鍵での署名を認可したうえで取引に署名します。そして署名済み取引はCoreサーバへ返却され、Ethereumに送信されるという流れになります。
(※) Data e-TRUSTのみとの連携、Ethereumでの取引を監視するEC起点動作起動を利用する場合は該当しません。
2. インターフェース(API仕様)
本章では、コネクションチェーンのAPI仕様について説明する(インタフェース詳細は、OpenAPIドキュメントを参照)。2.2 シナリオ情報仕様ではシナリオ情報登録・更新APIのinputとなるシナリオ情報について説明している。異常終了時のレスポンスについては、2.3 エラーコード/メッセージ一覧を参照。
2.1 共通仕様
ConnectionChainを利用する場合、あらかじめ弊社にて利用者登録(ID発行)を実施する必要があります。本マニュアルで説明しているAPIリクエストの際には、利用者IDを用いて認証をおこない、アクセストークン(<ACCESS_TOKEN>
)を取得した後、各APIリクエストにAuthorization: Bearer <ACCESS_TOKEN>
ヘッダを設定する必要があります。 利用者IDおよび認証、アクセストークンの詳細については研究所ポータルのWebページを参考ください。
2.2 シナリオ情報仕様
2.2.1 動的値対応(※1)
@+インスタンス動的値名
を指定することで、シナリオ実行時/実行中にインプットした値が利用できる。インスタンス動的値名には、シナリオ実行開始時に設定する値を特定する変数名(initParamNames)、ECから返却/通知された値を特定する変数名(paramName)が利用できる。動的値名を指定した場合は、シナリオ実行中に対応する値(シナリオ実行開始時、ECからの返却/通知時にインプット)で置き換えられる。
例) インスタンス動的値名「username」、インスタンス動的値「taro」の場合
シナリオの記述:{"target":"@username"} → 置換後の値:{"target":"taro"}
例)2*@value+(100+&rate)/100
例)(2**3+4)%10
2.2.2 動的値部分置換対応(※2)
インスタンス動的値名を「'(シングルクォーテーション)」で囲むことで文字列の一部分のみをシナリオ実行中に置き換えることができる。
例) インスタンス動的値名「username」、インスタンス動的値「taro」の場合
シナリオの記述:{"url":"http://x.x.x/'@username'/test"} → 置換後の値:{"url":"http://x.x.x/taro/test"}
例)インスタンス動的値名が「user_admin」「user_normal」「userType」の場合
"@user_'@userType'"と記述すれば、userTypeの値をadmin/normalに切り替えることでuser_admin/user_normalに対応する動的値を参照できるようになる。
2.2.3 遷移条件(condition)について(※3)
{operationId:<EC操作ID>, type:<操作種別>, result.<フィールド名><比較演算子><値>}、またはそれらを||、&&で連結した文字列。
||と&&が混在する場合は組み合わせを明確に()で囲むこと。
<操作種別>:REF / REQ / EVEのいずれか
REF⇒参照系EC操作(残高参照やAPIでのGETリクエストなど、ECの状態変更を伴わない操作)のレスポンスを表す
REQ⇒要求系EC操作(ECの取引実行やAPIでのPOSTリクエストなど、ECの状態変更を伴う操作)のレスポンスを表す
EVE⇒イベント通知のあるリクエスト(要求系EC操作含む)やフィルタ設定を行った場合の、ECからのイベント通知を表す
<フィールド名>:responseやeventのname領域で定義した名前
<比較演算子>:「==」「!=」「>=」「<=」「>」「<」を指定可能。
「>」「<」を含む場合は数値として、含まない場合(「==」、「!=」)は文字列としての比較を行う。
<値>:動的値対応。なお、空文字を扱いたい場合は「’’(シングルクォーテーション2つ)」を記述する
例)ECから通知されるイベントに含まれるfrom(eventのname領域に記述)の値の一致で判定したい場合
{operationId:1, type:EVE, result.from==0x407d73d8a49eeb85d32cf465507dd71d507100c1}
例)EC操作で返却される値、およびECから通知されるイベントに含まれる値の一致で判定したい場合
{operationId:1, type:REQ, result.from==0x407d73d8a49eeb85d32cf465507dd71d507100c1} && {operationId:1, type:EVE, result.from==0x407d73d8a49eeb85d32cf465507dd71d507100c1}
result<比較演算子(==または!=)><値(OKまたはNG)>
例)EC操作で直接返却される値を参照せずに、成功かどうかのみで判定する場合
{operationId:1, type:REQ, result==OK}
OK
が記述できるのは、当該のoperationIdのEC操作について、responseやeventを省略した場合であるため注意(NG
の記述については、responseやeventの記載有無を問わない)。
遷移条件の注意事項
遷移条件(condition)の判定で既に次動作へ遷移したにも関わらず、再び判定済のcondition判定が行われ、次動作が実行される場合があるため、condition記述の際には以下に注意してほしい。
判定する“operations”に記述した「operation」と、operationの結果である「同期結果(REQ or REF)・非同期結果(EVE)」をAND(“&&”)で網羅的にカバーすること
NGな例1)同期結果(REQ)によって、conditionId:2が先に満たされ、非同期結果(EVE)によってconditionId:1も満たしてしまうのでNG(動作IDtransfer
が2回実行)
nextActions:[
{conditionId:"1", condition:"{operationId:1, type:REQ, <conditionA>} && {operationId:1, type:EVE, <conditionB>}", nextActionId:"transfer"},
{conditionId:"2", condition:"{operationId:1, type:REQ, <conditionA>}", nextActionId:"transfer"}
]
NGな例2)同期結果(REQ)によってconditionId:1が満たされ、非同期結果(EVE)によってconditionId:2も満たしてしまうのでNG(動作IDtransfer
が2回実行)
nextActions:[
{"conditionId":"1", "condition":"{operationId:1, type:REQ, result==OK}","nextActionId": "transfer"},
{"conditionId": "2", "condition":"{operationId:1, type:EVE, result.to==xx}", "nextActionId": "transfer"}
]
&&
でつないで記述すること(REQとEVE両方の操作種別をconditionで用いる場合は単独で書かない)。
nextActions:[
{"conditionId":"1", "condition":"{operationId:1, type:REQ, result==OK} && {operationId:1, type:EVE, result.to==xx}","nextActionId": "transfer"}
]
NGな例3)operationId:1の非同期結果(EVE)によってconditionId:1が満たされ、operationId:2の非同期結果によってconditionId:2も満たされてしまうのでNG(動作IDtransferX
、transferY
が両方実行)
nextActions:[
{conditionId:"1", condition:"{operationId:1, type:EVE, <conditionA>}", nextActionId:"transferX"},
{conditionId:"2", condition:"{operationId:2, type:EVE, <conditionB>}", nextActionId:"transferY"}
]
&&
でつないで記述すること(操作種別EVEのconditionを複数用いる場合は単独で書かない)
nextActions:[
{conditionId:"1", condition:"{operationId:1, type:EVE, <conditionA>} && {operationId:2, type:EVE, <conditionB>}", nextActionId:"transferX"}
]
2.2.4 EC起点の動作起動(※4)
<機能説明>
本機能は、ECの秘密鍵を弊社に預ける(1.3 鍵管理機能参照)ことやCCから取引実行することのリスク・工数を加味したうえで、CC以外のアプリケーションからECの取引実行を行いたい場合に利用する。CCではシナリオ実行によりECの取引実行を監視し、別ECに対する処理に繋げることができる。
<具体的な利用方法>
- ECからイベントとして通知される結果に対する特定/記録用情報(event)とイベント通知条件となるTx内変数名/値(filter)をセットで記述することで、ECにおいて実行された取引をCCが監視することができる。
- filterの記述は、txidなど取引を一意に指定する情報を記載すること(想定外の取引をフィルタし、遷移条件判定してしまう恐れがあるため)。
- EC操作情報(operation)の記載はchainIdのみ定義し、遷移条件(condition)には操作種別がEVEの条件を記載して判定する。
- Ethereum起点で動作起動を行う場合、Ethereumにて取引実行してから25ブロックがコミットされるまで(約5分)に、EC起点の動作起動を定義したシナリオを開始し、filterがセットされるようにすること(CCにてキャッシュしているEthereumのブロック数が25ブロックであるため)。
例)シナリオ開始パラメータで与えたインスタンス動的値(txId)を用いてEthereumの取引をフィルタし、from/to値を特定する場合
{
"operationId":"1",
"operation": {
"chainId":"Geth"
},
"filter": {"hash":"@txId"},
"event": [{"name":"from","path":"from"},{"name":"to", "path":"to"}]
}
2.2.5 各連携先の入力仕様
シナリオ情報に含まれる次の値については、ECの種別によって、入力仕様が異なる(以下、各ECにおける入力仕様を参照)
- 取引実行用関数名(func)
- 取引実行用関数に与える引数(args)
- EC操作で直接返却される結果に対する特定/記録用情報(response)
- ECからイベントとして通知される結果に対する特定/記録用情報(event)
- イベント通知条件となるTx内変数名/値(filter)
各表の機能/func
ごとに、遷移条件(condition)に含まれる操作種別(type)に指定可能な値が異なる(色別で表現)。
赤:REF(参照系EC操作)
青:REQ(要求系EC操作)、EVE(イベント通知のあるリクエスト)
Ethereumテストネット(chainId:Geth)
機能/func |
args |
response |
filter, event |
|||
パラメータ |
必須 |
型 |
説明 |
|||
Web3.ethの |
fcn |
〇 |
string |
web3.eth関数(※)の関数名 |
web3.eth関数の返却値を参照し、pathを設定 |
基本的に本機能は取引を実行するためのものでない(参照のみ)ため、記述しないこと |
args |
Array |
上記、web3.eth関数の引数 |
||||
送金/send |
from |
〇 |
string |
移転元アドレス |
トランザクションレシートが返却されるので、responseにて使用したい場合は以下のように記述 |
CCに通知される取引の形式(以下)にしたがって、取引内容の絞り込み(filter)、および特定&event変数への代入が可能。 |
to |
〇 |
string |
移転先アドレス |
|||
amount |
〇 |
string |
移転量(単位はwei) |
|||
gas
|
string |
消費ガス量(単位はgas) |
||||
コントラクト実行(send)/ |
abis |
〇 |
Array |
コントラクトのABI |
||
from |
〇 |
string |
送信元アドレス |
|||
to |
〇 |
string |
コントラクトアドレス |
|||
method |
〇 |
string |
コントラクト関数名 |
|||
params |
〇 |
Array |
コントラクトの実行引数. パラメータがない関数の場合は空配列を指定. |
|||
options |
object |
コントラクト実行時に含めるパラメータ(gasPrice, gas, valueなど取引実行のパラメータ)を記載. data, nonceはCC内部で設定されるため指定しないこと |
||||
コントラクト実行(call)/ |
abis |
〇 |
Array |
contractSendと同じ |
コントラクト実行の返却値に従う. 返却値は全て文字列に変換される |
本機能は取引を実行しないため記述しないこと |
to |
〇 |
string |
||||
method |
〇 |
string |
||||
params |
〇 |
Array |
||||
options |
object |
コントラクトのcall時に含めるパラメータ(from, gasPrice, gas)を記載. |
Data e-TRUST(chainId:CDL)
CDLの用語やAPIの仕様詳細については、Fujitsu Computing as a Service Data e-TRUST APIリファレンスマニュアルを参照
機能/func |
args |
response |
filter, event |
|||
パラメータ |
必須 |
型 |
説明 |
|||
履歴登録 |
eventId |
string |
履歴ID |
登録した履歴JSONデータ |
同期処理のためfilter,eventの設定はなし
|
|
lineageId |
string |
リネージュID |
||||
tags |
object |
ローカルデータ名のリスト |
||||
properties |
object |
追加プロパティ |
||||
リネージュ取得 |
eventId |
〇 |
string |
リネージュ取得対象の履歴ID |
リネージュのJSONデータ (履歴JSONデータ群の配列) |
|
direction |
string |
リネージュ検索方向 |
||||
depth |
string |
リネージュをたどる深さ |
||||
履歴検索(検索対象:ヘッダー部) |
searchType |
〇 |
string |
検索で使用するマッチタイプ |
ヘッダ部が検索条件にマッチした履歴群 (履歴JSONオブジェクトの配列) |
|
fields |
〇 |
object |
検索条件 |
|||
履歴検索(検索対象:グローバルデータ部) |
searchType |
〇 |
string |
検索で使用するマッチタイプ |
グローバルデータ部が検索条件にマッチした履歴群 (履歴JSONオブジェクトの配列) |
|
fields |
〇 |
object |
検索条件 |
2.3 エラーコード/メッセージ一覧
ConnectionChainの各API実行におけるエラーコード/メッセージ一覧を以下に記載する。今後のバージョンアップにより、エラーコードやメッセージの内容は変更の可能性がある。
2.3.1 シナリオ情報管理、シナリオ制御
シナリオ情報管理、シナリオ制御のAPI実行においてエラーが発生した場合、以下の形式のレスポンスボディが返却される。
{
"error":{
"code":<エラーコード>,
"message":<エラーメッセージ>
}
}
パラメータ | 型 | 説明 |
---|---|---|
error | object | エラー内容 |
code | int | エラーコード |
message | string | エラーメッセージ |
<エラーコード/エラーメッセージ一覧>
HTTPステータス | エラーコード | エラーメッセージ | エラー内容/対応 |
---|---|---|---|
404 | 1002 | 登録されていないシナリオIDです。 | 対象のシナリオIDに対応するシナリオ情報が存在しないエラー。シナリオ情報更新、シナリオ情報取得、シナリオ有効化/無効化、シナリオ開始API実行時に発生。対象のシナリオIDに対応するシナリオ情報が登録されていることを確認し、必要に応じてシナリオ情報を登録する。 |
1003 | 登録されていないシナリオ実行IDです。 | シナリオ状況取得API実行時に、対象のシナリオ実行IDに対応するシナリオ状況が存在しないエラー。シナリオ実行IDがあっていることを確認し、APIを実行する。 | |
1004 | 有効化されていないシナリオです。 | シナリオ開始時に、対象のシナリオIDに対応するシナリオ情報が有効化されていないエラー。シナリオが有効化されていることをシナリオ情報取得API実行により確認し、シナリオ有効化を行う。 | |
422 | 2004 | シナリオデータが指定されていません。 | シナリオ情報登録、更新時にシナリオデータが指定されていないエラー。リクエストボディにシナリオデータを指定し、APIを実行する。 |
2005 | シナリオIDが指定されていません。 | シナリオ情報登録、シナリオ開始時にシナリオIDが指定されていないエラー。リクエストボディにシナリオIDを指定し、APIを実行する。 | |
2006 | シナリオデータに動作リストが定義されていません。 | シナリオ情報登録/更新時に、シナリオデータにactions配列が定義されていないエラー。リクエストボディにactions配列を定義し、APIを実行する。 | |
2007 | シナリオデータの動作情報に動作IDが定義されていません。 | シナリオ情報登録/更新時に、シナリオデータにactionIdが定義されていないエラー。リクエストボディの各動作情報にactionIdを定義し、APIを実行する。 | |
2008 | シナリオデータの動作情報にEC操作情報が定義されていません。 | シナリオ情報登録/更新時に、シナリオデータにoperations配列が定義されていないエラー。リクエストボディにoperations配列を定義し、APIを実行する。 | |
2009 | シナリオデータの動作情報にEC操作IDが定義されていません。 | シナリオ情報登録/更新時に、シナリオデータにoperationIdが定義されていないエラー。リクエストボディの各EC操作情報にoperationIdを定義し、APIを実行する。 | |
2010 | シナリオデータの動作情報にEC操作情報内容が定義されていません。 | シナリオ情報登録/更新時に、シナリオデータにoperationが定義されていないエラー。リクエストボディの各EC操作情報にoperationを定義し、APIを実行する。 | |
2011 | シナリオデータのEC操作情報内容にChainIDが定義されていません。 | シナリオ情報登録/更新時に、シナリオデータのoperationにchainIdが定義されていないエラー。リクエストボディの各operationにchainIdを定義し、APIを実行する。 | |
2014 | シナリオデータのEC操作情報内容に認証用パラメータキーとSignerが両方指定されています。 | シナリオ情報登録/更新時に、シナリオデータのoperationにauthParamKeyとsignerが両方指定されているエラー。signerとauthParamKeyのいずれかのみを指定してAPIを実行する(ただしsignerは未サポート)。 | |
2015 | シナリオデータの動作情報に次動作遷移条件IDが定義されていません。 | シナリオ情報登録/更新時に、シナリオデータのnextActions配列に含まれる要素について、conditionIdが定義されていないエラー。リクエストボディの各nextActions配列にconditionIdを定義し、APIを実行する。 | |
2016 | シナリオデータの動作情報に次動作遷移条件が定義されていません。 | シナリオ情報登録/更新時に、シナリオデータのnextActions配列に含まれる要素について、conditionが定義されていないエラー。リクエストボディの各nextActions配列にconditionを定義し、APIを実行する。 | |
2017 | シナリオ有効フラグが指定されていません。 | シナリオ有効化/無効化時に、シナリオ有効フラグが含まれていないエラー。リクエストボディにavailabilityを指定し、APIを実行する。 | |
2050 | シナリオデータに初期動作IDが定義されていません。 | シナリオ情報登録/更新時に、シナリオデータの1stActionIdが定義されていないエラー。リクエストボディに1stActionIdを定義し、APIを実行する。 | |
2051 | 初期動作IDで指定された動作情報がシナリオデータに存在しません。 | シナリオ情報登録/更新時に、シナリオデータの1stActionIdに定義したactionIdの動作情報がシナリオデータに存在しないエラー。リクエストボディに含まれるactionIdの1つと1stActionIdが一致するように1stActionIdを定義し、APIを実行する。 | |
2052 | シナリオデータの動作情報に次動作情報が定義されていません。 | シナリオ情報登録/更新時に、シナリオデータのnextActions配列が定義されていないエラー。リクエストボディの各nextActions配列を定義し、APIを実行する。 | |
2053 | シナリオデータの動作IDが重複して定義されています。 | シナリオ情報登録/更新時に、同一actionIdの動作情報が複数定義されているエラー。リクエストボディの各動作情報についてactionIdが重複しないように定義し、APIを実行する。 | |
2054 | シナリオデータの動作情報にEC操作IDが重複して定義されています。 | シナリオ情報登録/更新時に、シナリオデータのoperations配列について、同一operationIdのoperationが複数定義されているエラー。リクエストボディの各EC操作情報についてoperarionIdが重複しないように定義し、APIを実行する。 | |
2055 | シナリオデータの動作情報に次動作遷移条件IDが重複して定義されています。 | シナリオ情報登録/更新時に、シナリオデータのnextActions配列について、同一conditionIdの遷移条件が複数定義されているエラー。リクエストボディの各遷移条件についてconditionIdが重複しないように定義し、APIを実行する。 | |
2056 | シナリオデータのEC操作結果特定用情報内で、同じ名前が複数回定義されています。 | シナリオ情報登録/更新時に、シナリオデータのoperations配列に含まれるresponse, event配列内のオブジェクトについて、同一のname/paramNameが複数定義されているエラー。リクエストボディの各response, event配列内のオブジェクトについてname/paramNameが重複しないように定義し、APIを実行する。 | |
2057 | 認証用パラメータキー一覧で定義していない値が、EC操作情報内容に使用されています。 | シナリオ情報登録/更新時に、シナリオデータのoperations配列に含まれる各operationのauthParamKeyについて、authParamKeysにて定義されていない値が定義されているエラー。リクエストボディの各EC操作情報についてauthParamKeysに定義されている値をauthParamKeyに定義し、APIを実行する。 | |
2058 | シナリオデータのEC操作情報として、取引実行関数またはフィルタ定義の指定が最低限必要です。 | シナリオ情報登録/更新時に、シナリオデータのoperations配列に含まれる各operationについて、funcとfilterのどちらも定義されていないエラー。リクエストボディの各EC操作情報についてfuncもしくはfilterを定義し、APIを実行する。 | |
2059 | シナリオ開始時指定パラメータ名一覧で、同じ名前が複数回定義されています。 | シナリオ情報登録/更新時に、シナリオデータのinitParamNamesに同一の値を複数定義しているエラー。リクエストボディのinitParamNamesについて値が重複しないように定義し、APIを実行する。 | |
2060 | 認証用パラメータキー一覧で、同じ名前が複数回定義されています。 | シナリオ情報登録/更新時に、シナリオデータのauthParamKeysに同一の値を複数定義しているエラー。リクエストボディのauthParamKeysについて値が重複しないように定義し、APIを実行する。 | |
2061 | シナリオデータの次動作情報で、未定義の動作IDが指定されています。 | シナリオ情報登録/更新時に、シナリオデータのnextActions配列に含まれる要素について、nextActionIdに記載したactionIdが定義されていないエラー。リクエストボディのnextActionIdに、定義されているactionId(もしくは空文字)を定義し、APIを実行する。 | |
2062 | シナリオデータの次動作情報で、現在の動作と同じ動作IDが指定されています。 | シナリオ情報登録/更新時に、シナリオデータのnextActions配列に含まれる要素について、nextActionIdに記載したactionIdが現在のactionIdと同一であるエラー。リクエストボディのnextActionIdに、現在のactionId以外のactionId(もしくは空文字)を定義し、APIを実行する。 | |
2063 | シナリオデータの次動作情報で、実行済みの動作と同じ動作IDが指定されています。 | シナリオ情報登録/更新時に、シナリオデータのnextActions配列に含まれる要素について、nextActionIdに記載したactionIdが実行済のactionIdと同一であるエラー。リクエストボディのnextActionIdに、実行済のactionId以外のactionId(もしくは空文字)を定義し、APIを実行する。 | |
2064 | シナリオデータの動作情報または次動作遷移条件で、未定義のパラメータ名が指定されています。 | シナリオ情報登録/更新時に、シナリオデータのoperations配列に含まれる各operation(chainId, func, args, filter)、nextActions配列に含まれる要素に未定義のインスタンス動的値名(@+文字列)を定義している場合のエラー。インスタンス動的値名をリクエストボディのinitParamNamesやevent,response配列の要素paramNamesに定義し、APIを実行する。 | |
2065 | シナリオデータの次動作遷移条件が正しい形式で記述されていません。 | シナリオ情報登録/更新時に、シナリオデータのnextActions配列に含まれる要素(condition)の形式エラー。リクエストボディに正しい形式のconditionを定義し、APIを実行する。 参考:遷移条件の形式 {operationId:<EC操作ID>, type:<操作種別>, result.<フィールド名><比較演算子><値>}、またはそれらを\|\|、&&で連結した文字列。\|\|と&&が混在する場合は組み合わせを明確に()で囲むこと。 |
|
2066 | シナリオデータの次動作遷移条件で、operatonId領域の書式が不正または記述されていません。 | シナリオ情報登録/更新時、シナリオデータのnextActions配列に含まれる要素(condition)について、operationIdの記述エラー。リクエストボディのconditionに正しいoperationIdの書式にしたがって定義し、APIを実行する。 | |
2067 | シナリオデータの次動作遷移条件で、operatonId領域の値が指定されていません。 | シナリオ情報登録/更新時、シナリオデータのnextActions配列に含まれる要素(condition)について、operationIdの記述エラー。リクエストボディのconditionについて「operationId:」に続けてEC操作IDの値を定義し、APIを実行する。 | |
2068 | シナリオデータの次動作遷移条件で、未定義のEC操作IDがoperatonId領域に指定されています。 | シナリオ情報登録/更新時、シナリオデータのnextActions配列に含まれる要素(condition)について、operationIdに未定義のoperationIdが指定されているエラー。リクエストボディのconditionに含まれるoperationIdに、同Action内で定義されているoperationIdの値を定義し、APIを実行する。 | |
2069 | シナリオデータの次動作遷移条件で、type領域の書式が不正または記述されていません。 | シナリオ情報登録/更新時、シナリオデータのnextActions配列に含まれる要素(condition)について、typeの記述エラー。リクエストボディのconditionに正しいtypeの書式にしたがって定義し、APIを実行する。 | |
2070 | シナリオデータの次動作遷移条件で、type領域の値が指定されていません。 | シナリオ情報登録/更新時、シナリオデータのnextActions配列に含まれる要素(condition)について、typeの記述エラー。リクエストボディのconditionについて「type:」に続けて操作種別を定義し、APIを実行する。 | |
2071 | シナリオデータの次動作遷移条件で、type領域の値に[REF/REQ/EVE]以外が指定されています。 | シナリオ情報登録/更新時、シナリオデータのnextActions配列に含まれる要素(condition)について、typeに[REF/REQ/EVE]以外の文字列が指定されているエラー。リクエストボディのconditionに含まれるtypeに[REF/REQ/EVE]のいずれかを定義し、APIを実行する。 | |
2072 | シナリオデータの次動作遷移条件で、result要素の書式が不正または記述されていません。 | シナリオ情報登録/更新時、シナリオデータのnextActions配列に含まれる要素(condition)について、resultの記述エラー。リクエストボディのconditionに正しいresultの書式にしたがって定義し、APIを実行する。 | |
2073 | シナリオデータの次動作遷移条件で、result要素に使用する演算子が不正または記述されていません。 | シナリオ情報登録/更新時、シナリオデータのnextActions配列に含まれる要素(condition)について、result要素に使用する演算子エラー。リクエストボディのconditionに含まれるresultに、「==」、「!=」、「>=」、「<=」、「>」、「<」のいずれかの演算子を定義し、APIを実行する。 | |
2074 | シナリオデータの次動作遷移条件で、result要素のフィールド名が記述されていません。 | シナリオ情報登録/更新時、シナリオデータのnextActions配列に含まれる要素(condition)について、result要素のフィールド名(「.」に続けて記述)の記述エラー。リクエストボディのconditionに含まれるresultに、「.」に続けてフィールド名を定義し、APIを実行する。 | |
2075 | シナリオデータの次動作遷移条件で、EC操作結果特定用情報に未定義の名前がresult要素のフィールド名に指定されています。 | シナリオ情報登録/更新時、シナリオデータのnextActions配列に含まれる要素(condition)について、result要素のフィールド名(「.」に続けて記述)がresponse, event(のname)に定義されていないエラー。リクエストボディのconditionに含まれるresultに、遷移条件のoperationIdに定義したEC操作IDのoperationに含まれるresponse, event(のname)で定義されているフィールド名を定義し、APIを実行する。 | |
2076 | シナリオデータの次動作遷移条件で、フィールド名なしのresult要素に使用可能な演算子は[==/!=]、値は[OK/NG]のみです。 | シナリオ情報登録/更新時、シナリオデータのnextActions配列に含まれる要素(condition)について、result要素のフィールド名(「.」に続けて記述)を定義しなかった場合、使用している演算子と値のエラー。リクエストボディのconditionに含まれるresultに、「==」,「!=」のいずれかの演算子、「OK」,「NG」のいずれかの値を定義し、APIを実行する。 | |
2077 | シナリオデータの動作情報または次動作遷移条件で、不正な計算式が記述されています。 | シナリオ情報登録/更新時に、シナリオデータのoperations配列に含まれる各operation、nextActions配列に含まれる要素(condition)に記述された計算式の形式エラー。リクエストボディに正しい形式の計算式を定義し、APIを実行する。 | |
2078 | シナリオデータのEC操作結果特定用情報で、パスの書式が不正です。 | シナリオ情報登録/更新時に、シナリオデータのoperations配列に含まれるresponse, event配列内のオブジェクトについて、pathの書式が不正であるエラー。リクエストボディの各response, event配列内のオブジェクトについて正しい形式のpathを定義し、APIを実行する。 | |
2079 | 開始時指定パラメータ名一覧は配列で指定してください。 | シナリオ情報登録/更新時に、シナリオデータのinitParamNamesが配列でないエラー。リクエストボディのinitParamNamesに配列を定義し、APIを実行する。 | |
2080 | 認証用パラメータキー一覧は配列で指定してください。 | シナリオ情報登録/更新時に、シナリオデータのauthParamKeysが配列でないエラー。リクエストボディのauthParamKeysに配列を定義し、APIを実行する。 | |
2081 | シナリオデータの動作リストは配列で指定してください。 | シナリオ情報登録/更新時に、シナリオデータのactionsが配列でないエラー。リクエストボディのactionsに配列を定義し、APIを実行する。 | |
2082 | シナリオデータのEC操作情報は配列で指定してください。 | シナリオ情報登録/更新時に、シナリオデータのoperationsが配列でないエラー。リクエストボディのoperationsに配列を定義し、APIを実行する。 | |
2083 | シナリオデータのEC操作結果特定用情報は配列で指定してください。 | シナリオ情報登録/更新時に、シナリオデータのoperations配列に含まれるresponse, event配列が配列でないエラー。リクエストボディのresponse, eventに配列を定義し、APIを実行する。 | |
2084 | シナリオデータの次動作情報は配列で指定してください。 | シナリオ情報登録/更新時に、シナリオデータのnextActions配列が配列でないエラー。リクエストボディのnextActionsに配列を定義し、APIを実行する。 | |
2085 | シナリオデータの次動作遷移条件で、result要素の値が記述されていません。 | シナリオ情報登録/更新時、シナリオデータのnextActions配列に含まれる要素(condition)について、result要素の演算子に続けて値が記述されていないエラー。リクエストボディのconditionに含まれるresultに、演算子に続けて値を定義し、APIを実行する。 | |
2100 | シナリオ開始時指定パラメータの数が、シナリオデータで定義された数と一致しません。 | シナリオ開始時に指定するparams配列のパラメータ数が、シナリオデータで定義されたinitParamNames配列の数と一致しないエラー。シナリオ開始時のparamsもしくはシナリオデータのinitParamNamesを変更し、両者の数を合わせたうえでAPIを実行する。 | |
2101 | 認証用パラメータの数が、シナリオデータで定義された数と一致しません。 | シナリオ開始時に指定するauthParams配列のパラメータ数が、シナリオデータで定義されたauthParamKeys配列の数と一致しないエラー。シナリオ開始時のauthParamsもしくはシナリオデータのauthParamKeysを変更し、両者の数を合わせたうえでAPIを実行する。 | |
2102 | シナリオ開始時指定パラメータは文字列の配列で指定してください。 | シナリオ開始時に指定するparams配列に指定する値が文字列の配列でないエラー。リクエストボディのparamsに文字列の配列を指定し、APIを実行する。 | |
2103 | 認証用パラメータは配列で指定してください。 | シナリオ開始時に指定するauthParams配列に指定する値が文字列の配列でないエラー。リクエストボディのauthParamsに文字列の配列を指定し、APIを実行する。 | |
400 | 2104 | シナリオ開始情報が指定されていません。 | シナリオ開始時にリクエストボディが指定されていないエラー。リクエストボディにJSON形式でパラメータを指定し、APIを実行する。 |
2200 | リクエストデータのサイズが上限を超えています。 | 各APIの実行時にリクエストデータのサイズが上限(50MB)を超えているエラー。上限より小さいサイズのリクエストデータを指定し、各APIを実行する。 | |
500 | 3000 | 内部エラーです。 | 内部エラー。時間をおいて何度か実行し、それでもエラーが解消しない場合は弊社担当者へ連絡する。 |
3002 | 既に登録済みのシナリオIDです。 | シナリオ情報登録時、指定したシナリオIDに対応するシナリオ情報がすでに登録されているエラー。シナリオIDを変更してシナリオ情報登録APIを実行、もしくはシナリオ情報更新APIを実行する。 | |
3003 | 既に登録済みの実行状況IDです。 | シナリオ開始時にシナリオ実行ID(stateId)を指定した場合、指定したシナリオ実行IDがすでに登録されているエラー。stateIdを変更してAPIを実行する。 | |
403 | 4001 | シナリオ情報を操作する権限がありません。 | シナリオ情報更新/削除/無効化/有効化時、実行ユーザがシナリオ情報を操作する権限を持たないエラー。シナリオ登録を行ったユーザのアクセストークンをAuthorizationヘッダに指定し、APIを実行する。 |
503 | 5000 | 他シナリオの実行によるロック中です。少し待ってから再度実行してください。 | シナリオ開始時、他ユーザの実行中により実行を受け付けられないエラー。20秒程度待ってから再度APIを実行する(他ユーザの実行状況によっては、20秒以上待たされる可能性あり)。 |
- | 9000 | 不明なエラーです。 | Coreサーバにて定義されていないエラーコードが返却された場合のエラー。弊社担当者へ連絡する。 |
2.3.2 鍵管理
鍵管理API実行時にエラーが発生した場合、以下のエラーメッセージが返却される。仕様に従った正しいリクエストを何度か行ったうえで下表に記載のないエラーが発生している場合は、弊社担当者へ連絡すること。
<エラーメッセージ一覧>
HTTPステータス | エラーメッセージ(レスポンスボディ) | エラー内容/対応 |
---|---|---|
400 | {"result":"not exist!"} | ログイン時、指定したクライアントIDのクライアント情報が存在しないエラー。存在するクライアントIDを指定し、APIを実行する。(存在することはクライアント情報一覧取得API実行により確認) |
{"result": "invalid parameter!"} | 入力パラメータの指定エラー(必須指定のパラメータ無し、サイズオーバー)。必須パラメータを指定し、APIを実行する。 | |
403 | {"result": "not authorized!"} | クライアント情報更新/削除、取引署名時に当該のクライアントIDに対する操作権限が無いエラー。 自身が登録したクライアントIDを指定してAPIを実行する。 |
404 | Not Found | リクエストしたパスにリソースが存在しないエラー。 |
500 | {"result":"already exist!"} | クライアント情報登録時に、指定したクライアントIDのクライアント情報がすでに存在するエラー。指定するクライアントIDを変更し、APIを実行する。 |
{"result":"not exist!"} | クライアント情報更新時に、指定したクライアントIDのクライアント情報が存在しないエラー。存在するクライアントIDを指定し、APIを実行する。(存在することはクライアント情報取得API実行により確認) |