Repository: hyperledger/firefly
Pull request #1151 (2023-01-17 17:41:11)

Rename operation detailedStatus to detail
Resolves https://github.com/hyperledger/firefly/issues/1149


Patch:
diff --git a/docs/reference/microservices/fftokens.md b/docs/reference/microservices/fftokens.md
index 6c0d27ad6..bcb7414c2 100644
--- a/docs/reference/microservices/fftokens.md
+++ b/docs/reference/microservices/fftokens.md
@@ -7,11 +7,9 @@ nav_order: 1
 ---
 
 # fftokens
-
 {: .no_toc }
 
 ## Table of contents
-
 {: .no_toc .text-delta }
 
 1. TOC
@@ -44,7 +42,6 @@ In a multiparty network, this operation will only be performed by one of the par
 FireFly will store a "pending" token pool after a successful creation, but will replace it with a "confirmed" token pool after a successful activation (see below).
 
 **Request**
-
 ```
 {
   "type": "fungible",
@@ -57,15 +54,15 @@ FireFly will store a "pending" token pool after a successful creation, but will
 }
 ```
 
-| Parameter | Type        | Description                                                                                                                                                                                                                       |
-| --------- | ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| type      | string enum | The type of pool to create. Currently supported types are "fungible" and "nonfungible". It is recommended (but not required) that token connectors support both. Unrecognized/unsupported types should be rejected with HTTP 400. |
-| signer    | string      | The signing identity to be used for the blockchain transaction, in a format understood by this connector.                                                                                                                         |
-| name      | string      | (OPTIONAL) If supported by this token contract, this is a requested name for the token pool. May be ignored at the connector's discretion.                                                                                        |
-| symbol    | string      | (OPTIONAL) If supported by this token contract, this is a requested symbol for the token pool. May be ignored at the connector's discretion.                                                                                      |
-| requestId | string      | (OPTIONAL) A unique identifier for this request. Will be included in the "receipt" websocket event to match receipts to requests.                                                                                                 |
-| data      | string      | (OPTIONAL) A data string that should be returned in the connector's response to this creation request.                                                                                                                            |
-| config    | object      | (OPTIONAL) An arbitrary JSON object where the connector may accept additional parameters if desired. Each connector may define its own valid options to influence how the token pool is created.                                  |
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| type | string enum | The type of pool to create. Currently supported types are "fungible" and "nonfungible". It is recommended (but not required) that token connectors support both. Unrecognized/unsupported types should be rejected with HTTP 400. |
+| signer | string | The signing identity to be used for the blockchain transaction, in a format understood by this connector. |
+| name | string | (OPTIONAL) If supported by this token contract, this is a requested name for the token pool. May be ignored at the connector's discretion. |
+| symbol | string | (OPTIONAL) If supported by this token contract, this is a requested symbol for the token pool. May be ignored at the connector's discretion. |
+| requestId | string | (OPTIONAL) A unique identifier for this request. Will be included in the "receipt" websocket event to match receipts to requests. |
+| data | string | (OPTIONAL) A data string that should be returned in the connector's response to this creation request. |
+| config | object | (OPTIONAL) An arbitrary JSON object where the connector may accept additional parameters if desired. Each connector may define its own valid options to influence how the token pool is created. |
 
 **Response**
 
@@ -84,7 +81,6 @@ Activate a token pool to begin receiving events. Generally this means the connec
 In a multiparty network, this step will be performed by every member after a successful token pool broadcast. It therefore also serves the purpose of validating the broadcast info - if the connector does not find a valid pool given the `poolLocator` and `config` information passed in to this call, the pool should not get confirmed.
 
 **Request**
-
 ```
 {
   "poolLocator": "id=F1",
@@ -94,12 +90,12 @@ In a multiparty network, this step will be performed by every member after a suc
 }
 ```
 
-| Parameter   | Type   | Description                                                                                                                                                                             |
-| ----------- | ------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| poolLocator | string | The locator of the pool, as supplied by the output of the pool creation.                                                                                                                |
-| poolData    | string | (OPTIONAL) A data string that should be permanently attached to this pool and returned in all events.                                                                                   |
-| requestId   | string | (OPTIONAL) A unique identifier for this request. Will be included in the "receipt" websocket event to match receipts to requests.                                                       |
-| config      | object | (OPTIONAL) An arbitrary JSON object where the connector may accept additional parameters if desired. This should be the same `config` object that was passed when the pool was created. |
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| poolLocator | string | The locator of the pool, as supplied by the output of the pool creation. |
+| poolData | string | (OPTIONAL) A data string that should be permanently attached to this pool and returned in all events. |
+| requestId | string | (OPTIONAL) A unique identifier for this request. Will be included in the "receipt" websocket event to match receipts to requests. |
+| config | object | (OPTIONAL) An arbitrary JSON object where the connector may accept additional parameters if desired. This should be the same `config` object that was passed when the pool was created. |
 
 **Response**
 
@@ -126,7 +122,6 @@ description of the interface methods in use for a given token pool, so the conne
 how to invoke.
 
 **Request**
-
 ```
 {
   "poolLocator": "id=F1",
@@ -150,11 +145,11 @@ how to invoke.
 }
 ```
 
-| Parameter   | Type         | Description                                                                                                                     |
-| ----------- | ------------ | ------------------------------------------------------------------------------------------------------------------------------- |
-| poolLocator | string       | The locator of the pool, as supplied by the output of the pool creation.                                                        |
-| format      | string enum  | The format of the data in this payload. Should match the `interfaceFormat` as supplied by the output of the pool creation.      |
-| methods     | object array | A list of all the methods available on the interface underpinning this token pool, encoded in the format specified by `format`. |
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| poolLocator | string | The locator of the pool, as supplied by the output of the pool creation. |
+| format | string enum | The format of the data in this payload. Should match the `interfaceFormat` as supplied by the output of the pool creation. |
+| methods | object array | A list of all the methods available on the interface underpinning this token pool, encoded in the format specified by `format`. |
 
 **Response**
 
@@ -211,18 +206,17 @@ Mint new tokens.
 }
 ```
 
-| Parameter   | Type          | Description                                                                                                                                                                                    |
-| ----------- | ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| poolLocator | string        | The locator of the pool, as supplied by the output of the pool creation.                                                                                                                       |
-| signer      | string        | The signing identity to be used for the blockchain transaction, in a format understood by this connector.                                                                                      |
-| to          | string        | The identity to receive the minted tokens, in a format understood by this connector.                                                                                                           |
-| amount      | number string | The amount of tokens to mint.                                                                                                                                                                  |
-| tokenIndex  | string        | (OPTIONAL) For non-fungible tokens that require choosing an index at mint time, the index of the specific token to mint.                                                                       |
-| uri         | string        | (OPTIONAL) For non-fungible tokens that support choosing a URI at mint time, the URI to be attached to the token.                                                                              |
-| requestId   | string        | (OPTIONAL) A unique identifier for this request. Will be included in the "receipt" websocket event to match receipts to requests.                                                              |
-| data        | string        | (OPTIONAL) A data string that should be returned in the connector's response to this mint request.                                                                                             |
-| config      | object        | (OPTIONAL) An arbitrary JSON object where the connector may accept additional parameters if desired. Each connector may define its own valid options to influence how the mint is carried out. |
-| interface   | object        | (OPTIONAL) Details on interface methods that are useful to this operation, as negotiated previously by a `/checkinterface` call.                                                               |
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| poolLocator | string | The locator of the pool, as supplied by the output of the pool creation. |
+| signer | string | The signing identity to be used for the blockchain transaction, in a format understood by this connector. |
+| to | string | The identity to receive the minted tokens, in a format understood by this connector. |
+| amount | number string | The amount of tokens to mint. |
+| tokenIndex | string | (OPTIONAL) For non-fungible tokens that require choosing an index at mint time, the index of the specific token to mint. |
+| uri | string | (OPTIONAL) For non-fungible tokens that support choosing a URI at mint time, the URI to be attached to the token. |
+| requestId | string | (OPTIONAL) A unique identifier for this request. Will be included in the "receipt" websocket event to match receipts to requests. |
+| config | object | (OPTIONAL) An arbitrary JSON object where the connector may accept additional parameters if desired. Each connector may define its own valid options to influence how the mint is carried out. |
+| interface | object | (OPTIONAL) Details on interface methods that are useful to this operation, as negotiated previously by a `/checkinterface` call. |
 
 **Response**
 
@@ -250,17 +244,16 @@ Burn tokens.
 }
 ```
 
-| Parameter   | Type          | Description                                                                                                                                                                                    |
-| ----------- | ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| poolLocator | string        | The locator of the pool, as supplied by the output of the pool creation.                                                                                                                       |
-| signer      | string        | The signing identity to be used for the blockchain transaction, in a format understood by this connector.                                                                                      |
-| from        | string        | The identity that currently owns the tokens to be burned, in a format understood by this connector.                                                                                            |
-| amount      | number string | The amount of tokens to burn.                                                                                                                                                                  |
-| tokenIndex  | string        | (OPTIONAL) For non-fungible tokens, the index of the specific token to burn.                                                                                                                   |
-| requestId   | string        | (OPTIONAL) A unique identifier for this request. Will be included in the "receipt" websocket event to match receipts to requests.                                                              |
-| data        | string        | (OPTIONAL) A data string that should be returned in the connector's response to this burn request.                                                                                             |
-| config      | object        | (OPTIONAL) An arbitrary JSON object where the connector may accept additional parameters if desired. Each connector may define its own valid options to influence how the burn is carried out. |
-| interface   | object        | (OPTIONAL) Details on interface methods that are useful to this operation, as negotiated previously by a `/checkinterface` call.                                                               |
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| poolLocator | string | The locator of the pool, as supplied by the output of the pool creation. |
+| signer | string | The signing identity to be used for the blockchain transaction, in a format understood by this connector. |
+| from | string | The identity that currently owns the tokens to be burned, in a format understood by this connector. |
+| amount | number string | The amount of tokens to burn. |
+| tokenIndex | string | (OPTIONAL) For non-fungible tokens, the index of the specific token to burn. |
+| requestId | string | (OPTIONAL) A unique identifier for this request. Will be included in the "receipt" websocket event to match receipts to requests. |
+| config | object | (OPTIONAL) An arbitrary JSON object where the connector may accept additional parameters if desired. Each connector may define its own valid options to influence how the burn is carried out. |
+| interface | object | (OPTIONAL) Details on interface methods that are useful to this operation, as negotiated previously by a `/checkinterface` call. |
 
 **Response**
 
@@ -289,18 +282,17 @@ Transfer tokens from one address to another.
 }
 ```
 
-| Parameter   | Type          | Description                                                                                                                                                                                        |
-| ----------- | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| poolLocator | string        | The locator of the pool, as supplied by the output of the pool creation.                                                                                                                           |
-| signer      | string        | The signing identity to be used for the blockchain transaction, in a format understood by this connector.                                                                                          |
-| from        | string        | The identity to be used for the source of the transfer, in a format understood by this connector.                                                                                                  |
-| to          | string        | The identity to be used for the destination of the transfer, in a format understood by this connector.                                                                                             |
-| amount      | number string | The amount of tokens to transfer.                                                                                                                                                                  |
-| tokenIndex  | string        | (OPTIONAL) For non-fungible tokens, the index of the specific token to transfer.                                                                                                                   |
-| requestId   | string        | (OPTIONAL) A unique identifier for this request. Will be included in the "receipt" websocket event to match receipts to requests.                                                                  |
-| data        | string        | (OPTIONAL) A data string that should be returned in the connector's response to this transfer request.                                                                                             |
-| config      | object        | (OPTIONAL) An arbitrary JSON object where the connector may accept additional parameters if desired. Each connector may define its own valid options to influence how the transfer is carried out. |
-| interface   | object        | (OPTIONAL) Details on interface methods that are useful to this operation, as negotiated previously by a `/checkinterface` call.                                                                   |
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| poolLocator | string | The locator of the pool, as supplied by the output of the pool creation. |
+| signer | string | The signing identity to be used for the blockchain transaction, in a format understood by this connector. |
+| from | string | The identity to be used for the source of the transfer, in a format understood by this connector. |
+| to | string | The identity to be used for the destination of the transfer, in a format understood by this connector. |
+| amount | number string | The amount of tokens to transfer. |
+| tokenIndex | string | (OPTIONAL) For non-fungible tokens, the index of the specific token to transfer. |
+| requestId | string | (OPTIONAL) A unique identifier for this request. Will be included in the "receipt" websocket event to match receipts to requests. |
+| config | object | (OPTIONAL) An arbitrary JSON object where the connector may accept additional parameters if desired. Each connector may define its own valid options to influence how the transfer is carried out. |
+| interface | object | (OPTIONAL) Details on interface methods that are useful to this operation, as negotiated previously by a `/checkinterface` call. |
 
 **Response**
 
@@ -327,16 +319,15 @@ Approve another identity to manage tokens.
 }
 ```
 
-| Parameter   | Type    | Description                                                                                                                                                                                        |
-| ----------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| poolLocator | string  | The locator of the pool, as supplied by the output of the pool creation.                                                                                                                           |
-| signer      | string  | The signing identity to be used for the blockchain transaction, in a format understood by this connector.                                                                                          |
-| operator    | string  | The identity to be approved (or unapproved) for managing the signer's tokens.                                                                                                                      |
-| approved    | boolean | Whether to approve (the default) or unapprove.                                                                                                                                                     |
-| requestId   | string  | (OPTIONAL) A unique identifier for this request. Will be included in the "receipt" websocket event to match receipts to requests.                                                                  |
-| data        | string  | (OPTIONAL) A data string that should be returned in the connector's response to this approval request.                                                                                             |
-| config      | object  | (OPTIONAL) An arbitrary JSON object where the connector may accept additional parameters if desired. Each connector may define its own valid options to influence how the approval is carried out. |
-| interface   | object  | (OPTIONAL) Details on interface methods that are useful to this operation, as negotiated previously by a `/checkinterface` call.                                                                   |
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| poolLocator | string | The locator of the pool, as supplied by the output of the pool creation. |
+| signer | string | The signing identity to be used for the blockchain transaction, in a format understood by this connector. |
+| operator | string | The identity to be approved (or unapproved) for managing the signer's tokens. |
+| approved | boolean | Whether to approve (the default) or unapprove. |
+| requestId | string | (OPTIONAL) A unique identifier for this request. Will be included in the "receipt" websocket event to match receipts to requests. |
+| config | object | (OPTIONAL) An arbitrary JSON object where the connector may accept additional parameters if desired. Each connector may define its own valid options to influence how the approval is carried out. |
+| interface | object | (OPTIONAL) Details on interface methods that are useful to this operation, as negotiated previously by a `/checkinterface` call. |
 
 **Response**
 
@@ -347,7 +338,6 @@ _See [Response Types: Async Request](#async-request)_
 ## Websocket Events
 
 A connector should expose a websocket at `/api/ws`. All emitted websocket events are a JSON string of the form:
-
 ```
 {
   "id": "event-id",
@@ -359,7 +349,6 @@ A connector should expose a websocket at `/api/ws`. All emitted websocket events
 The `event` name will match one of the names listed below, and the `data` payload will correspond to the linked response object.
 
 All events _except the receipt event_ must be acknowledged by sending an ack of the form:
-
 ```
 {
   "event": "ack",
@@ -370,7 +359,6 @@ All events _except the receipt event_ must be acknowledged by sending an ack of
 ```
 
 Many messages may also be batched into a single websocket event of the form:
-
 ```
 {
   "id": "event-id",
@@ -449,12 +437,12 @@ Many operations may happen asynchronously in the background, and will return onl
 }
 ```
 
-| Parameter         | Type        | Description                                                                                             |
-| ----------------- | ----------- | ------------------------------------------------------------------------------------------------------- |
-| headers.type      | string enum | The type of this response. Should be "TransactionSuccess", "TransactionUpdate", or "TransactionFailed". |
-| headers.requestId | string      | The ID of the request to which this receipt should correlate.                                           |
-| transactionHash   | string      | The unique identifier for the blockchain transaction which generated this receipt.                      |
-| errorMessage      | string      | (OPTIONAL) If this is a failure, contains details on the reason for the failure.                        |
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| headers.type | string enum | The type of this response. Should be "TransactionSuccess", "TransactionUpdate", or "TransactionFailed". |
+| headers.requestId | string | The ID of the request to which this receipt should correlate. |
+| transactionHash | string | The unique identifier for the blockchain transaction which generated this receipt. |
+| errorMessage| string | (OPTIONAL) If this is a failure, contains details on the reason for the failure. |
 
 ### Token Pool
 
@@ -473,18 +461,18 @@ Many operations may happen asynchronously in the background, and will return onl
 }
 ```
 
-| Parameter       | Type        | Description                                                                                                                                                                                                                                                                                 |
-| --------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| type            | string enum | The type of pool that was created.                                                                                                                                                                                                                                                          |
-| data            | string      | A copy of the data that was passed in on the creation request.                                                                                                                                                                                                                              |
-| poolLocator     | string      | A string to identify this pool, generated by the connector. Must be unique for each pool created by this connector. Will be passed back on all operations within this pool, and may be packed with relevant data about the pool for later usage (such as the address and type of the pool). |
-| standard        | string      | (OPTIONAL) The name of a well-defined token standard to which this pool conforms.                                                                                                                                                                                                           |
-| interfaceFormat | string enum | (OPTIONAL) If this connector supports the `/checkinterface` API, this is the interface format to be used for describing the interface underpinning this pool. Must be "abi" or "ffi".                                                                                                       |
-| symbol          | string      | (OPTIONAL) The symbol for this token pool, if applicable.                                                                                                                                                                                                                                   |
-| decimals        | number      | (OPTIONAL) The number of decimals used for balances in this token pool, if applicable.                                                                                                                                                                                                      |
-| info            | object      | (OPTIONAL) Additional information about the pool. Each connector may define the format for this object.                                                                                                                                                                                     |
-| signer          | string      | (OPTIONAL) If this operation triggered a blockchain transaction, the signing identity used for the transaction.                                                                                                                                                                             |
-| blockchain      | object      | (OPTIONAL) If this operation triggered a blockchain transaction, contains details on the blockchain event in FireFly's standard blockchain event format.                                                                                                                                    |
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| type | string enum | The type of pool that was created. |
+| data | string | A copy of the data that was passed in on the creation request. |
+| poolLocator | string | A string to identify this pool, generated by the connector. Must be unique for each pool created by this connector. Will be passed back on all operations within this pool, and may be packed with relevant data about the pool for later usage (such as the address and type of the pool). |
+| standard | string | (OPTIONAL) The name of a well-defined token standard to which this pool conforms. |
+| interfaceFormat | string enum | (OPTIONAL) If this connector supports the `/checkinterface` API, this is the interface format to be used for describing the interface underpinning this pool. Must be "abi" or "ffi". |
+| symbol | string | (OPTIONAL) The symbol for this token pool, if applicable. |
+| decimals | number | (OPTIONAL) The number of decimals used for balances in this token pool, if applicable. |
+| info | object | (OPTIONAL) Additional information about the pool. Each connector may define the format for this object. |
+| signer | string | (OPTIONAL) If this operation triggered a blockchain transaction, the signing identity used for the transaction. |
+| blockchain | object | (OPTIONAL) If this operation triggered a blockchain transaction, contains details on the blockchain event in FireFly's standard blockchain event format. |
 
 ### Token Transfer
 
@@ -507,19 +495,19 @@ while a burn will omit the "to" field.
 }
 ```
 
-| Parameter   | Type          | Description                                                                                                                                                                                                                                                          |
-| ----------- | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| id          | string        | An identifier for this transfer. Must be unique for every transfer within this pool.                                                                                                                                                                                 |
-| data        | string        | A copy of the data that was passed in on the mint/burn/transfer request. May be omitted if the token contract does not support a method of attaching extra data (will result in reduced ability for FireFly to correlate the inputs and outputs of the transaction). |
-| poolLocator | string        | The locator of the pool, as supplied by the output of the pool creation.                                                                                                                                                                                             |
-| poolData    | string        | The extra data associated with the pool at pool activation.                                                                                                                                                                                                          |
-| from        | string        | The identity used for the source of the transfer.                                                                                                                                                                                                                    |
-| to          | string        | The identity used for the destination of the transfer.                                                                                                                                                                                                               |
-| amount      | number string | The amount of tokens transferred.                                                                                                                                                                                                                                    |
-| tokenIndex  | string        | (OPTIONAL) For non-fungible tokens, the index of the specific token transferred.                                                                                                                                                                                     |
-| uri         | string        | (OPTIONAL) For non-fungible tokens, the URI attached to the token.                                                                                                                                                                                                   |
-| signer      | string        | (OPTIONAL) If this operation triggered a blockchain transaction, the signing identity used for the transaction.                                                                                                                                                      |
-| blockchain  | object        | (OPTIONAL) If this operation triggered a blockchain transaction, contains details on the blockchain event in FireFly's standard blockchain event format.                                                                                                             |
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| id | string | An identifier for this transfer. Must be unique for every transfer within this pool. |
+| data | string | A copy of the data that was passed in on the mint/burn/transfer request. May be omitted if the token contract does not support a method of attaching extra data (will result in reduced ability for FireFly to correlate the inputs and outputs of the transaction). |
+| poolLocator | string | The locator of the pool, as supplied by the output of the pool creation. |
+| poolData | string | The extra data associated with the pool at pool activation. |
+| from | string | The identity used for the source of the transfer. |
+| to | string | The identity used for the destination of the transfer. |
+| amount | number string | The amount of tokens transferred. |
+| tokenIndex | string | (OPTIONAL) For non-fungible tokens, the index of the specific token transferred. |
+| uri | string | (OPTIONAL) For non-fungible tokens, the URI attached to the token. |
+| signer | string | (OPTIONAL) If this operation triggered a blockchain transaction, the signing identity used for the transaction. |
+| blockchain | object | (OPTIONAL) If this operation triggered a blockchain transaction, contains details on the blockchain event in FireFly's standard blockchain event format. |
 
 ### Token Approval
 
@@ -538,15 +526,15 @@ while a burn will omit the "to" field.
 }
 ```
 
-| Parameter   | Type    | Description                                                                                                                                                                                                                                                                                 |
-| ----------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| id          | string  | An identifier for this approval. Must be unique for every approval within this pool.                                                                                                                                                                                                        |
-| data        | string  | A copy of the data that was passed in on the approval request. May be omitted if the token contract does not support a method of attaching extra data (will result in reduced ability for FireFly to correlate the inputs and outputs of the transaction).                                  |
-| poolLocator | string  | The locator of the pool, as supplied by the output of the pool creation.                                                                                                                                                                                                                    |
-| poolData    | string  | The extra data associated with the pool at pool activation.                                                                                                                                                                                                                                 |
-| operator    | string  | The identity that was approved (or unapproved) for managing tokens.                                                                                                                                                                                                                         |
-| approved    | boolean | Whether this was an approval or unapproval.                                                                                                                                                                                                                                                 |
-| subject     | string  | A string identifying the scope of the approval, generated by the connector. Approvals with the same subject are understood replace one another, so that a previously-recorded approval becomes inactive. This string may be a combination of the identities involved, the token index, etc. |
-| info        | object  | (OPTIONAL) Additional information about the approval. Each connector may define the format for this object.                                                                                                                                                                                 |
-| signer      | string  | (OPTIONAL) If this operation triggered a blockchain transaction, the signing identity used for the transaction.                                                                                                                                                                             |
-| blockchain  | object  | (OPTIONAL) If this operation triggered a blockchain transaction, contains details on the blockchain event in FireFly's standard blockchain event format.                                                                                                                                    |
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| id | string | An identifier for this approval. Must be unique for every approval within this pool. |
+| data | string | A copy of the data that was passed in on the approval request. May be omitted if the token contract does not support a method of attaching extra data (will result in reduced ability for FireFly to correlate the inputs and outputs of the transaction). |
+| poolLocator | string | The locator of the pool, as supplied by the output of the pool creation. |
+| poolData | string | The extra data associated with the pool at pool activation. |
+| operator | string | The identity that was approved (or unapproved) for managing tokens. |
+| approved | boolean | Whether this was an approval or unapproval. |
+| subject | string | A string identifying the scope of the approval, generated by the connector. Approvals with the same subject are understood replace one another, so that a previously-recorded approval becomes inactive. This string may be a combination of the identities involved, the token index, etc. |
+| info | object | (OPTIONAL) Additional information about the approval. Each connector may define the format for this object. |
+| signer | string | (OPTIONAL) If this operation triggered a blockchain transaction, the signing identity used for the transaction. |
+| blockchain | object | (OPTIONAL) If this operation triggered a blockchain transaction, contains details on the blockchain event in FireFly's standard blockchain event format. |
diff --git a/internal/identity/identitymanager.go b/internal/identity/identitymanager.go
index 79eb8f676..9ff0e3705 100644
--- a/internal/identity/identitymanager.go
+++ b/internal/identity/identitymanager.go
@@ -56,12 +56,13 @@ type Manager interface {
 }
 
 type identityManager struct {
-	database      database.Plugin
-	blockchain    blockchain.Plugin  // optional
-	multiparty    multiparty.Manager // optional
-	namespace     string
-	defaultKey    string
-	identityCache cache.CInterface
+	database               database.Plugin
+	blockchain             blockchain.Plugin  // optional
+	multiparty             multiparty.Manager // optional
+	namespace              string
+	defaultKey             string
+	multipartyRootVerifier *core.VerifierRef
+	identityCache          cache.CInterface
 }
 
 func NewIdentityManager(ctx context.Context, ns, defaultKey string, di database.Plugin, bi blockchain.Plugin, mp multiparty.Manager, cacheManager cache.Manager) (Manager, error) {
@@ -117,7 +118,7 @@ func (im *identityManager) ResolveInputSigningKey(ctx context.Context, inputKey
 			if im.defaultKey == "" {
 				return "", i18n.NewError(ctx, coremsgs.MsgNodeMissingBlockchainKey)
 			}
-			// There is no blockchain plugin defined here, so no additional verification possible, or required
+
 			return im.defaultKey, nil
 		}
 
@@ -285,12 +286,21 @@ func (im *identityManager) getDefaultVerifier(ctx context.Context) (verifier *co
 // GetMultipartyRootVerifier gets the blockchain verifier of the root org via the configuration,
 // resolving it for use as a signing key for the purpose of signing a child identity
 func (im *identityManager) GetMultipartyRootVerifier(ctx context.Context) (*core.VerifierRef, error) {
+	if im.multipartyRootVerifier != nil {
+		return im.multipartyRootVerifier, nil
+	}
+
 	orgKey := im.multiparty.RootOrg().Key
 	if orgKey == "" {
 		return nil, i18n.NewError(ctx, coremsgs.MsgNodeMissingBlockchainKey)
 	}
 
-	return im.resolveInputKeyViaBlockchainPlugin(ctx, orgKey)
+	verifier, err := im.resolveInputKeyViaBlockchainPlugin(ctx, orgKey)
+	if err != nil {
+		return nil, err
+	}
+	im.multipartyRootVerifier = verifier
+	return verifier, nil
 }
 
 // resolveInputKeyViaBlockchainPlugin calls the blockchain plugin to resolve an input key string, to the
diff --git a/internal/orchestrator/data_query.go b/internal/orchestrator/data_query.go
index b860dd434..e97e1bee8 100644
--- a/internal/orchestrator/data_query.go
+++ b/internal/orchestrator/data_query.go
@@ -128,8 +128,8 @@ func (or *orchestrator) GetOperationByID(ctx context.Context, id string) (*core.
 	return or.operations.GetOperationByIDCached(ctx, u)
 }
 
-func (or *orchestrator) GetOperationByIDWithStatus(ctx context.Context, id string) (*core.OperationWithDetailedStatus, error) {
-	var enrichedOperation *core.OperationWithDetailedStatus
+func (or *orchestrator) GetOperationByIDWithStatus(ctx context.Context, id string) (*core.OperationWithDetail, error) {
+	var enrichedOperation *core.OperationWithDetail
 	u, err := fftypes.ParseUUID(ctx, id)
 	if err != nil {
 		return nil, err
@@ -143,7 +143,7 @@ func (or *orchestrator) GetOperationByIDWithStatus(ctx context.Context, id strin
 	if op.IsBlockchainOperation() || op.IsTokenOperation() {
 		status, err := or.blockchain().GetTransactionStatus(ctx, op)
 		if err != nil {
-			status = core.OperationDetailedStatusError{
+			status = core.OperationDetailError{
 				StatusError: err.Error(),
 			}
 		}
@@ -151,17 +151,17 @@ func (or *orchestrator) GetOperationByIDWithStatus(ctx context.Context, id strin
 		// Not all blockchain plugins will necessarily implement GetTransactionStatus()
 		// so check if we get any extra status back
 		if status != nil {
-			enrichedOperation = &core.OperationWithDetailedStatus{
-				Operation:      *op,
-				DetailedStatus: status,
+			enrichedOperation = &core.OperationWithDetail{
+				Operation: *op,
+				Detail:    status,
 			}
 		} else {
-			enrichedOperation = &core.OperationWithDetailedStatus{
+			enrichedOperation = &core.OperationWithDetail{
 				Operation: *op,
 			}
 		}
 	} else {
-		enrichedOperation = &core.OperationWithDetailedStatus{
+		enrichedOperation = &core.OperationWithDetail{
 			Operation: *op,
 		}
 	}
diff --git a/internal/orchestrator/orchestrator.go b/internal/orchestrator/orchestrator.go
index 1d716fd25..c744e5afc 100644
--- a/internal/orchestrator/orchestrator.go
+++ b/internal/orchestrator/orchestrator.go
@@ -105,7 +105,7 @@ type Orchestrator interface {
 	GetDatatypeByName(ctx context.Context, name, version string) (*core.Datatype, error)
 	GetDatatypes(ctx context.Context, filter ffapi.AndFilter) ([]*core.Datatype, *ffapi.FilterResult, error)
 	GetOperationByID(ctx context.Context, id string) (*core.Operation, error)
-	GetOperationByIDWithStatus(ctx context.Context, id string) (*core.OperationWithDetailedStatus, error)
+	GetOperationByIDWithStatus(ctx context.Context, id string) (*core.OperationWithDetail, error)
 	GetOperations(ctx context.Context, filter ffapi.AndFilter) ([]*core.Operation, *ffapi.FilterResult, error)
 	GetEventByID(ctx context.Context, id string) (*core.Event, error)
 	GetEventByIDWithReference(ctx context.Context, id string) (*core.EnrichedEvent, error)
diff --git a/manifest.json b/manifest.json
index b70fe1450..db31d6ae3 100644
--- a/manifest.json
+++ b/manifest.json
@@ -56,4 +56,4 @@
   "cli": {
     "tag": "v1.1.2"
   }
-}
+}
\ No newline at end of file
diff --git a/mocks/orchestratormocks/orchestrator.go b/mocks/orchestratormocks/orchestrator.go
index 8b265666d..9991e7670 100644
--- a/mocks/orchestratormocks/orchestrator.go
+++ b/mocks/orchestratormocks/orchestrator.go
@@ -866,15 +866,15 @@ func (_m *Orchestrator) GetOperationByID(ctx context.Context, id string) (*core.
 }
 
 // GetOperationByIDWithStatus provides a mock function with given fields: ctx, id
-func (_m *Orchestrator) GetOperationByIDWithStatus(ctx context.Context, id string) (*core.OperationWithDetailedStatus, error) {
+func (_m *Orchestrator) GetOperationByIDWithStatus(ctx context.Context, id string) (*core.OperationWithDetail, error) {
 	ret := _m.Called(ctx, id)
 
-	var r0 *core.OperationWithDetailedStatus
-	if rf, ok := ret.Get(0).(func(context.Context, string) *core.OperationWithDetailedStatus); ok {
+	var r0 *core.OperationWithDetail
+	if rf, ok := ret.Get(0).(func(context.Context, string) *core.OperationWithDetail); ok {
 		r0 = rf(ctx, id)
 	} else {
 		if ret.Get(0) != nil {
-			r0 = ret.Get(0).(*core.OperationWithDetailedStatus)
+			r0 = ret.Get(0).(*core.OperationWithDetail)
 		}
 	}
 
diff --git a/pkg/core/operation.go b/pkg/core/operation.go
index 1a8a49cdd..91b8f0fc7 100644
--- a/pkg/core/operation.go
+++ b/pkg/core/operation.go
@@ -1,4 +1,4 @@
-// Copyright © 2022 Kaleido, Inc.
+// Copyright © 2023 Kaleido, Inc.
 //
 // SPDX-License-Identifier: Apache-2.0
 //
@@ -180,11 +180,11 @@ type OperationUpdate struct {
 	OnComplete     func()
 }
 
-type OperationDetailedStatusError struct {
-	StatusError string `ffstruct:"OperationDetailedStatusError" json:"error,omitempty"`
+type OperationDetailError struct {
+	StatusError string `ffstruct:"OperationDetail" json:"error,omitempty"`
 }
 
-type OperationWithDetailedStatus struct {
+type OperationWithDetail struct {
 	Operation
-	DetailedStatus interface{} `ffstruct:"OperationWithDetailedStatus" json:"detailedStatus,omitempty" ffexcludeinput:"true"`
+	Detail interface{} `ffstruct:"OperationWithDetail" json:"detail,omitempty" ffexcludeinput:"true"`
 }


Test patch:
diff --git a/internal/apiserver/route_get_op_by_id_test.go b/internal/apiserver/route_get_op_by_id_test.go
index aa23b20aa..a92d6adc3 100644
--- a/internal/apiserver/route_get_op_by_id_test.go
+++ b/internal/apiserver/route_get_op_by_id_test.go
@@ -47,7 +47,7 @@ func TestGetOperationByIDFetchStatus(t *testing.T) {
 	res := httptest.NewRecorder()
 
 	o.On("GetOperationByIDWithStatus", mock.Anything, "abcd12345").
-		Return(&core.OperationWithDetailedStatus{}, nil)
+		Return(&core.OperationWithDetail{}, nil)
 	r.ServeHTTP(res, req)
 
 	assert.Equal(t, 200, res.Result().StatusCode)
diff --git a/internal/identity/identitymanager_test.go b/internal/identity/identitymanager_test.go
index 2ee2f452c..5e522d58b 100644
--- a/internal/identity/identitymanager_test.go
+++ b/internal/identity/identitymanager_test.go
@@ -579,10 +579,10 @@ func TestResolveInputSigningIdentityByOrgVerifierFail(t *testing.T) {
 
 }
 
-func TestResolveInputSigningKeyDefaultNoBlockchain(t *testing.T) {
+func TestResolveInputSigningKeyDefault(t *testing.T) {
 	ctx, im := newTestIdentityManager(t)
-
 	im.blockchain = nil
+
 	im.defaultKey = "key123"
 
 	resolvedKey, err := im.ResolveInputSigningKey(ctx, "", KeyNormalizationBlockchainPlugin)
@@ -622,15 +622,12 @@ func TestResolveInputSigningKeyDefaultNoBlockchainInputFallback(t *testing.T) {
 
 func TestResolveInputSigningKeyDefaultNoBlockchainDefaultKeyFallback(t *testing.T) {
 	ctx, im := newTestIdentityManager(t)
-
+	im.blockchain = nil
 	im.defaultKey = "key123"
 
-	mbi := im.blockchain.(*blockchainmocks.Plugin)
-	mbi.On("ResolveInputSigningKey", ctx, "key123").Return("fullkey123", nil)
-
 	resolvedKey, err := im.ResolveInputSigningKey(ctx, "", KeyNormalizationBlockchainPlugin)
 	assert.NoError(t, err)
-	assert.Equal(t, "fullkey123", resolvedKey)
+	assert.Equal(t, "key123", resolvedKey)
 }
 
 func TestResolveInputSigningKeyOrgFallbackOk(t *testing.T) {
@@ -744,14 +741,15 @@ func TestFirstVerifierForIdentityNotFound(t *testing.T) {
 func TestResolveDefaultSigningIdentityNotFound(t *testing.T) {
 
 	ctx, im := newTestIdentityManager(t)
+	im.multipartyRootVerifier = &core.VerifierRef{
+		Type:  core.VerifierTypeEthAddress,
+		Value: "key12345",
+	}
 
 	mbi := im.blockchain.(*blockchainmocks.Plugin)
 	mmp := im.multiparty.(*multipartymocks.Manager)
 	mmp.On("GetNetworkVersion").Return(1)
-	mmp.On("RootOrg").Return(multiparty.RootOrg{
-		Key: "key12345",
-	})
-	mbi.On("ResolveInputSigningKey", ctx, "key12345").Return("key12345", nil)
+	mmp.On("RootOrg").Return(multiparty.RootOrg{})
 
 	mdi := im.database.(*databasemocks.Plugin)
 	mdi.On("GetVerifierByValue", ctx, core.VerifierTypeEthAddress, "ns1", "key12345").Return(nil, nil)
@@ -769,6 +767,10 @@ func TestResolveDefaultSigningIdentityNotFound(t *testing.T) {
 func TestResolveDefaultSigningIdentitySystemFallback(t *testing.T) {
 
 	ctx, im := newTestIdentityManager(t)
+	im.multipartyRootVerifier = &core.VerifierRef{
+		Type:  core.VerifierTypeEthAddress,
+		Value: "key12345",
+	}
 
 	id := &core.Identity{
 		IdentityBase: core.IdentityBase{
@@ -789,8 +791,7 @@ func TestResolveDefaultSigningIdentitySystemFallback(t *testing.T) {
 	mbi := im.blockchain.(*blockchainmocks.Plugin)
 	mmp := im.multiparty.(*multipartymocks.Manager)
 	mmp.On("GetNetworkVersion").Return(1)
-	mmp.On("RootOrg").Return(multiparty.RootOrg{Name: "org1", Key: "key12345"})
-	mbi.On("ResolveInputSigningKey", ctx, "key12345").Return("key12345", nil)
+	mmp.On("RootOrg").Return(multiparty.RootOrg{Name: "org1"})
 
 	mdi := im.database.(*databasemocks.Plugin)
 	mdi.On("GetVerifierByValue", ctx, core.VerifierTypeEthAddress, "ns1", "key12345").Return(nil, nil)
@@ -844,13 +845,13 @@ func TestGetMultipartyRootVerifierNotSet(t *testing.T) {
 func TestGetMultipartyRootOrgMismatch(t *testing.T) {
 
 	ctx, im := newTestIdentityManager(t)
+	im.multipartyRootVerifier = &core.VerifierRef{
+		Type:  core.VerifierTypeEthAddress,
+		Value: "fullkey123",
+	}
 
 	mmp := im.multiparty.(*multipartymocks.Manager)
-	mmp.On("RootOrg").Return(multiparty.RootOrg{
-		Key: "key12345",
-	})
-	mbi := im.blockchain.(*blockchainmocks.Plugin)
-	mbi.On("ResolveInputSigningKey", ctx, "key12345").Return("fullkey123", nil)
+	mmp.On("RootOrg").Return(multiparty.RootOrg{})
 
 	orgID := fftypes.NewUUID()
 	mdi := im.database.(*databasemocks.Plugin)
diff --git a/internal/orchestrator/data_query_test.go b/internal/orchestrator/data_query_test.go
index 3c8a653e0..b748fb3be 100644
--- a/internal/orchestrator/data_query_test.go
+++ b/internal/orchestrator/data_query_test.go
@@ -568,7 +568,7 @@ func TestGetOperationByIDWithStatus(t *testing.T) {
 	assert.Nil(t, err)
 	assert.NotNil(t, opStatus)
 	var expectedTxnStatus = &txnStatus{TxnId: "abc123"}
-	assert.Equal(t, expectedTxnStatus, opStatus.DetailedStatus)
+	assert.Equal(t, expectedTxnStatus, opStatus.Detail)
 }
 
 func TestGetOperationByIDWithGoodEmptyStatus(t *testing.T) {
@@ -585,7 +585,7 @@ func TestGetOperationByIDWithGoodEmptyStatus(t *testing.T) {
 	opStatus, err := or.GetOperationByIDWithStatus(context.Background(), u.String())
 	assert.Nil(t, err)
 	assert.NotNil(t, opStatus)
-	assert.Equal(t, nil, opStatus.DetailedStatus)
+	assert.Equal(t, nil, opStatus.Detail)
 }
 
 func TestGetOperationByIDWithStatusWrongOpType(t *testing.T) {
@@ -601,7 +601,7 @@ func TestGetOperationByIDWithStatusWrongOpType(t *testing.T) {
 	opStatus, err := or.GetOperationByIDWithStatus(context.Background(), u.String())
 	assert.Nil(t, err)
 	assert.NotNil(t, opStatus)
-	assert.Equal(t, nil, opStatus.DetailedStatus)
+	assert.Equal(t, nil, opStatus.Detail)
 }
 
 func TestGetOperationIDWithStatusBadID(t *testing.T) {
@@ -635,7 +635,7 @@ func TestGetOperationByIDWithStatusError(t *testing.T) {
 	opStatus, err := or.GetOperationByIDWithStatus(context.Background(), u.String())
 	assert.Nil(t, err)
 	assert.NotNil(t, opStatus)
-	assert.Regexp(t, "pop", opStatus.DetailedStatus)
+	assert.Regexp(t, "pop", opStatus.Detail)
 }
 
 func TestGetEventByID(t *testing.T) {