> This page is for Taurus PROTECT, version v3.42.
> For other versions, use one of these documentation indexes:
> - v3.58 (default): https://taurushq.ferndocs.com/protect-capital/v3.58/llms.txt
> - v3.56: https://taurushq.ferndocs.com/protect-capital/v3.56/llms.txt
> - v3.54: https://taurushq.ferndocs.com/protect-capital/v3.54/llms.txt
> - v3.52: https://taurushq.ferndocs.com/protect-capital/v3.52/llms.txt
> - v3.50: https://taurushq.ferndocs.com/protect-capital/v3.50/llms.txt
> - v3.48: https://taurushq.ferndocs.com/protect-capital/v3.48/llms.txt
> - v3.46: https://taurushq.ferndocs.com/protect-capital/v3.46/llms.txt
> - v3.44: https://taurushq.ferndocs.com/protect-capital/v3.44/llms.txt
> - v3.42: https://taurushq.ferndocs.com/protect-capital/v3.42/llms.txt
> - v3.40: https://taurushq.ferndocs.com/protect-capital/v3.40/llms.txt
> - v3.38: https://taurushq.ferndocs.com/protect-capital/v3.38/llms.txt

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://taurushq.ferndocs.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://taurushq.ferndocs.com/_mcp/server.

# Transaction signature

> **Warning**
>
> **Transaction signature**
>
> This section provides developers with examples related to transaction creation and signature. It also includes sequence diagrams and step-by-step details. Please refer to this section when you want to understand details on transactions.

### 1. Simple transaction creation, signing and broadcast

| Actors        | Description                                                                            |
| ------------- | -------------------------------------------------------------------------------------- |
| Client        | Service or GUI                                                                         |
| tg-validatord | Central daemon of the solution                                                         |
| tg-vaultd     | Bridge to 1 or N HSMs                                                                  |
| HSM           | Hardware device in charge of validating busniess rules and creating signed transaction |

Thist workflow includes DB interaction and tg-vaultd/HSM interaction as an example.

#### 1.1 Conditions

* 2 signatures are required
* There are 2 clients

#### 1.2 Sequences

![Sequence diagram](https://images.taurusgroup.ch/taurus-protect-docs/media/mermaid-diagram-20201028105539.png)

#### 1.3 Details

| Step | ID                       | API/JOB | Swagger                                                                                            | Request Proto                   | Reply Proto            | Impacted DB tables                                  | Request State changes          |
| ---- | ------------------------ | ------- | -------------------------------------------------------------------------------------------------- | ------------------------------- | ---------------------- | --------------------------------------------------- | ------------------------------ |
| 1    | CreateOutgoingRequest()  | `API`   | [swagger](/protect-capital/v3.42/reference/usage-examples#22-create-outgoing-transaction)          | `CreateOutgoingRequestRequest`  | -                      | `requests`,`users`,`wallets`,`wl_addresses`,`rules` | `NONE` -> `CREATED`            |
| 2    | Request                  | `API`   | -                                                                                                  | `Request`                       | -                      | -                                                   | -                              |
| 3    | GetRequestsForApproval() | `API`   | [swagger](/protect-capital/v3.42/reference/usage-examples#23-get-request-for-approval)             | `GetRequestsForApprovalRequest` | -                      | `requests`,`users`                                  | -                              |
| 4    | GetRequestsReply         | `API`   | -                                                                                                  | -                               | `GetRequestsReply`     | -                                                   | -                              |
| 5    | ApproveRequests()        | `API`   | [swagger](/protect-capital/v3.42/reference/usage-examples#24-sign-the-transaction-with-first-user) | `ApproveRequestsRequest`        | -                      | `users`,`requests`,`rules`                          | `CREATED` -> `APPROVING`       |
| 6    | ApproveRequestsReply     | `API`   | -                                                                                                  | -                               | `ApproveRequestsReply` | -                                                   | -                              |
| 7    | GetRequestsForApproval() | `API`   | [swagger](/protect-capital/v3.42/reference/usage-examples#23-get-request-for-approval)             | `GetRequestsForApprovalRequest` | -                      | `requests`,`users`                                  | -                              |
| 8    | GetRequestsReply         | `API`   | -                                                                                                  | -                               | `GetRequestsReply`     | -                                                   | -                              |
| 9    | ApproveRequests()        | `API`   | [swagger](/protect-capital/v3.42/reference/usage-examples#26-get-the-status-of-the-transaction)    | `ApproveRequestsRequest`        | -                      | `users`,`requests`,`rules`                          | `APPROVING` -> `APPROVED`      |
| 10   | ApproveRequestsReply     | `API`   | -                                                                                                  | -                               | `ApproveRequestsReply` | -                                                   | -                              |
| 11   | HandleApprovedRequests   | `job`   | -                                                                                                  | -                               | -                      | `requests`                                          | `APPROVED` -> `HSM_READY`      |
| 12   | HandleHsmReadyRequests   | `job`   | -                                                                                                  | -                               | -                      | `requests`,`signed_requests`                        | `HSM_READY` -> `HSM_SIGNED`    |
| 13   | HandleHsmSignedRequests  | `job`   | -                                                                                                  | -                               | -                      | `requests`,`signed_requests`                        | `HSM_SIGNED` -> `BROADCASTING` |

### 2. Examples

#### 2.1 Authenticate

```Bash
curl -X POST "https://int-validator-core-crdb.t-bx.io/rjpyber72n6brsdzksotivcm33mw78q4/api/rest/v1/authentication/token" -H "accept: application/json" -H "Content-Type: application/json" -d "{ \"email\": \"team1@bank.com\", \"password\": \"XXX\"}"
#{"result":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTEsImV4dGVybmFsVXNlcklEIjoidGVhbTFAYmFuay5jb20iLCJ0ZW5hbnRJRCI6MSwiZmlyc3RuYW1lIjoiSm9obiIsImxhc3RuYW1lIjoiVDEiLCJyb2xlcyI6WyJyZXF1ZXN0Y3JlYXRvciIsInJlcXVlc3RhcHByb3ZlciJdLCJlbWFpbCI6InRlYW0xQGJhbmsuY29tIiwiZXhwIjoxNTgyMzQ5ODM0LCJpYXQiOjE1ODIyNjM0MzR9.ysWkCtXRyCWEdy65kOuU2vm7WpopBrUJN5vp3oRpO2I"}

export AUTH="Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTEsImV4dGVybmFsVXNlcklEIjoidGVhbTFAYmFuay5jb20iLCJ0ZW5hbnRJRCI6MSwiZmlyc3RuYW1lIjoiSm9obiIsImxhc3RuYW1lIjoiVDEiLCJyb2xlcyI6WyJyZXF1ZXN0Y3JlYXRvciIsInJlcXVlc3RhcHByb3ZlciJdLCJlbWFpbCI6InRlYW0xQGJhbmsuY29tIiwiZXhwIjoxNTgyNjE1NTk5LCJpYXQiOjE1ODI1MjkxOTl9.d8KCM7aLqebC5jB6YFz-5VG9Fo-I7avoLXqXj10ygvM"
```

#### 2.2 Create Outgoing Transaction

```bash
curl -X POST "https://int-validator-core-crdb.t-bx.io/rjpyber72n6brsdzksotivcm33mw78q4/api/rest/v1/requests/outgoing" -H "accept: application/json" -H "Content-Type: application/json"  -H "$AUTH" -d "{ \"amount\": \"100000\", \"fee\": \"4865\",\"fromAddressId\": \"1\",\"toAddressId\": \"204\", \"comment\": \"Ich bin eine flying Roasted Butternut Squash Boodles\", \"useUnconfirmedFunds\": true, \"feePaidByReceiver\": true}" | jq .
# {
#   "result": {
#     "id": "442",
#     "tenantId": "1",
#     "currency": "BTC",
#     "envelope": "CgM0NDIQmfGjk6Ops/oVGAEqmgUSrAEKPwoPbS80NCcvMCcvMCcvMC8wGiAeyruP7CoNYcGISzRo8iZmuVnV6M9gLiZuShy7aDtKKiABKNHEFDD/////DxIoCiIxQ3Zoeml0ZFZMUGhOVGZ3NU5rUm9YWHZveldacGZhWXQ2EJ/nBRoVCg9tLzQ0Jy8wJy8wJy8wLzAYsbcOMig0NDI6NDY5ZTMxOGUtYjcxZC00MGUwLTg0ZjctNzVlOGQwOWE3Yzg2IhMKCnJlcXVlc3RfaWQQARoDNDQyIhIKCXJ1bGVzX2tleRABGgNCVEMiEQoIY3VycmVuY3kQARoDQlRDIlsKBnNvdXJjZRAEGkcIARJDCAESIjFKTUJZTU1pOWlqSlJlVFlxdEZUU2RlVkJ6azhOSGRzVHUaCm5vc3RybyBCVEMiD20vNDQnLzAnLzAnLzAvMCIGc291cmNlImIKC2Rlc3RpbmF0aW9uEAUaRBJCCMwBEiIxQ3Zoeml0ZFZMUGhOVGZ3NU5rUm9YWHZveldacGZhWXQ2GghteSBsYWJlbCIPbS80NCcvMCcvMCcvMC84IgtkZXN0aW5hdGlvbiKeAQoGYW1vdW50EAoaiQEKAwGGoBIHMTAuMDQzMBoKMTAwNDIuOTcwMCAIKgNCVEMyA0NIRjphCh12YWxpZGF0b3ItY29yZUB0YXVydXNncm91cC5jaBJAffe4nBGVSajYYQxxzEZbQuj0snr8WOC1P506eXRn2EUsDrAnkWvNW9wfU+pwUoBVUaXl/veYW/6m/DJsEKijLCIGYW1vdW50Ih4KEXRvdGFsX2ZpYXRfYW1vdW50EAEaBzEwLjA0MzAiCwoDZmVlEAIaAhMBIh4KFGZlZV9wYWlkX2J5X3JlY2VpdmVyEAEaBHRydWU=",
#     "status": "CREATED",
#     "trails": [
#       {
#         "userId": "11",
#         "externalUserId": "team1@bank.com",
#         "action": "created",
#         "comment": "Ich bin eine flying Roasted Butternut Squash Boodles",
#         "requestStatus": "CREATED"
#       },
#       {
#         "userId": "1",
#         "externalUserId": "validator-core@taurusgroup.ch",
#         "action": "approvers_assigned",
#         "comment": "rule = [source: any, destination: any, amount: 10.0000], approvals = ['team1': 1 sig, 'team2': 1 sig]",
#         "requestStatus": "CREATED"
#       }
#     ],
#     "rule": "rule = [source: any, destination: any, amount: 10.0000], approvals = ['team1': 1 sig, 'team2': 1 sig]",
#     "approvers": {
#       "parallel": [
#         {
#           "sequential": [
#             {
#               "externalGroupID": "team1",
#               "minimumSignatures": 1
#             },
#             {
#               "externalGroupID": "team2",
#               "minimumSignatures": 1
#             }
#           ]
#         }
#       ]
#     }
#   }
# }
```

#### 2.3 Get request for approval

```Bash
curl "https://int-validator-core-crdb.t-bx.io/rjpyber72n6brsdzksotivcm33mw78q4/api/rest/v1/requests/for-approval" -H "accept: application/json" -H "Content-Type: application/json"  -H "$AUTH" | jq .
# {
#   "result": [
#     {
#       "id": "442",
#       "tenantId": "1",
#       "currency": "BTC",
#       "envelope": "CgM0NDIQmfGjk6Ops/oVGAEqmgUSrAEKPwoPbS80NCcvMCcvMCcvMC8wGiAeyruP7CoNYcGISzRo8iZmuVnV6M9gLiZuShy7aDtKKiABKNHEFDD/////DxIoCiIxQ3Zoeml0ZFZMUGhOVGZ3NU5rUm9YWHZveldacGZhWXQ2EJ/nBRoVCg9tLzQ0Jy8wJy8wJy8wLzAYsbcOMig0NDI6NDY5ZTMxOGUtYjcxZC00MGUwLTg0ZjctNzVlOGQwOWE3Yzg2IhMKCnJlcXVlc3RfaWQQARoDNDQyIhIKCXJ1bGVzX2tleRABGgNCVEMiEQoIY3VycmVuY3kQARoDQlRDIlsKBnNvdXJjZRAEGkcIARJDCAESIjFKTUJZTU1pOWlqSlJlVFlxdEZUU2RlVkJ6azhOSGRzVHUaCm5vc3RybyBCVEMiD20vNDQnLzAnLzAnLzAvMCIGc291cmNlImIKC2Rlc3RpbmF0aW9uEAUaRBJCCMwBEiIxQ3Zoeml0ZFZMUGhOVGZ3NU5rUm9YWHZveldacGZhWXQ2GghteSBsYWJlbCIPbS80NCcvMCcvMCcvMC84IgtkZXN0aW5hdGlvbiKeAQoGYW1vdW50EAoaiQEKAwGGoBIHMTAuMDQzMBoKMTAwNDIuOTcwMCAIKgNCVEMyA0NIRjphCh12YWxpZGF0b3ItY29yZUB0YXVydXNncm91cC5jaBJAffe4nBGVSajYYQxxzEZbQuj0snr8WOC1P506eXRn2EUsDrAnkWvNW9wfU+pwUoBVUaXl/veYW/6m/DJsEKijLCIGYW1vdW50Ih4KEXRvdGFsX2ZpYXRfYW1vdW50EAEaBzEwLjA0MzAiCwoDZmVlEAIaAhMBIh4KFGZlZV9wYWlkX2J5X3JlY2VpdmVyEAEaBHRydWU=",
#       "status": "CREATED",
#       "trails": [
#         {
#           "userId": "11",
#           "externalUserId": "team1@bank.com",
#           "action": "created",
#           "comment": "Ich bin eine flying Roasted Butternut Squash Boodles",
#           "date": "2020-02-19T12:24:47.748229Z",
#           "requestStatus": "CREATED"
#         },
#         {
#           "userId": "1",
#           "externalUserId": "validator-core@taurusgroup.ch",
#           "action": "approvers_assigned",
#           "comment": "rule = [source: any, destination: any, amount: 10.0000], approvals = ['team1': 1 sig, 'team2': 1 sig]",
#           "date": "2020-02-19T12:24:47.774836Z",
#           "requestStatus": "CREATED"
#         }
#       ],
#       "creationDate": "2020-02-19T12:24:47.586041Z",
#       "updateDate": "2020-02-19T12:24:47.713648Z",
#       "metadata": {
#         "hash": "fda859afd5dcc16f7abec8e7ab7fc528d90b094e43eeb111037581c45f8e16b5",
#         "payload": [
#           {
#             "column": "",
#             "key": "request_id",
#             "type": "String",
#             "value": "442"
#           },
#           {
#             "column": "",
#             "key": "rules_key",
#             "type": "String",
#             "value": "BTC"
#           },
#           {
#             "column": "",
#             "key": "currency",
#             "type": "String",
#             "value": "BTC"
#           },
#           {
#             "column": "source",
#             "key": "source",
#             "type": "Source",
#             "value": {
#               "payload": {
#                 "address": "1JMBYMMi9ijJReTYqtFTSdeVBzk8NHdsTu",
#                 "id": "1",
#                 "label": "nostro BTC",
#                 "path": "m/44'/0'/0'/0/0"
#               },
#               "type": "SourceInternalAddress"
#             }
#           },
#           {
#             "column": "destination",
#             "key": "destination",
#             "type": "Destination",
#             "value": {
#               "payload": {
#                 "address": "1CvhzitdVLPhNTfw5NkRoXXvozWZpfaYt6",
#                 "id": "204",
#                 "label": "my label",
#                 "path": "m/44'/0'/0'/0/8"
#               },
#               "type": "DestinationInternalAddress"
#             }
#           },
#           {
#             "column": "amount",
#             "key": "amount",
#             "type": "Amount",
#             "value": {
#               "currencyFrom": "BTC",
#               "currencyTo": "CHF",
#               "decimals": "8",
#               "rate": "10042.9700",
#               "valueFrom": "100000",
#               "valueTo": "10.0430"
#             }
#           },
#           {
#             "column": "",
#             "key": "total_fiat_amount",
#             "type": "String",
#             "value": "10.0430"
#           },
#           {
#             "column": "",
#             "key": "fee",
#             "type": "BigInt",
#             "value": "4865"
#           },
#           {
#             "column": "",
#             "key": "fee_paid_by_receiver",
#             "type": "String",
#             "value": "true"
#           }
#         ]
#       },
#       "rule": "rule = [source: any, destination: any, amount: 10.0000], approvals = ['team1': 1 sig, 'team2': 1 sig]",
#       "approvers": {
#         "parallel": [
#           {
#             "sequential": [
#               {
#                 "externalGroupID": "team1",
#                 "minimumSignatures": 1
#               },
#               {
#                 "externalGroupID": "team2",
#                 "minimumSignatures": 1
#               }
#             ]
#           }
#         ]
#       }
#     }
#   ],
#   "totalItems": "1"
# }
```

#### 2.4 Sign the transaction with **first user**

1. Order transaction you would like to sign by ID (here there is only 442)
2. Sign the array of all `metada.hash`
3. Build up the ECDSA signature, encode it in Base64

```Bash
echo -n '["fda859afd5dcc16f7abec8e7ab7fc528d90b094e43eeb111037581c45f8e16b5"]' | openssl  dgst -sha256 -sign yubikey1-key.pem | openssl asn1parse -inform DER
#    0:d=0  hl=2 l=  68 cons: SEQUENCE
#    2:d=1  hl=2 l=  32 prim: INTEGER           :234C56C972372F7DC331900ABEF2979E5583DC61975A1D00B8BE731C3D760C6A
#   36:d=1  hl=2 l=  32 prim: INTEGER           :76FE947687631B822419ACD181DBBB3F881F77F1480C2B5C5485B9B57CDC7C9F

echo -n "234C56C972372F7DC331900ABEF2979E5583DC61975A1D00B8BE731C3D760C6A76FE947687631B822419ACD181DBBB3F881F77F1480C2B5C5485B9B57CDC7C9F" | xxd -p -r | base64 | tr -d '\n'
#I0xWyXI3L33DMZAKvvKXnlWD3GGXWh0AuL5zHD12DGp2/pR2h2MbgiQZrNGB27s/iB938UgMK1xUhbm1fNx8nw==
```

4. Send the signed request

```Bash
curl -X POST "https://int-validator-core-crdb.t-bx.io/rjpyber72n6brsdzksotivcm33mw78q4/api/rest/v1/requests/approve" -H "accept: application/json" -H "Content-Type: application/json"  -H "$AUTH" -d "{ \"signature\": \"I0xWyXI3L33DMZAKvvKXnlWD3GGXWh0AuL5zHD12DGp2/pR2h2MbgiQZrNGB27s/iB938UgMK1xUhbm1fNx8nw==\", \"comment\": \"try01\", \"requestIds\": [ \"442\" ]}"
#{"signedRequests":"1"}
```

#### 2.5 Sign the transaction with the **second user**

1. Auth

```Bash
curl -X POST "https://int-validator-core-crdb.t-bx.io/rjpyber72n6brsdzksotivcm33mw78q4/api/rest/v1/authentication/token" -H "accept: application/json" -H "Content-Type: application/json" -d "{ \"email\": \"team2@bank.com\", \"password\": \"XXXX\"}"
#{"result":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTIsImV4dGVybmFsVXNlcklEIjoidGVhbTJAYmFuay5jb20iLCJ0ZW5hbnRJRCI6MSwiZmlyc3RuYW1lIjoiSm9obiIsImxhc3RuYW1lIjoiVDIiLCJyb2xlcyI6WyJyZxF1ZXN0YXBwcm92ZXIiXSwiZW1haWwiOiJ0ZWFtMkBiYW5rLmNvbSIsImV4cCI6MTU4MjI3NDQ1MiwiaWF0IjoxNTgyMTg4MDUyfQ.9-7pUrRG7Slpeod8NuY55cTSNOXsMGFE5Lb_GLv32AE"}
export AUTH="Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTIsImV4dGVybmFsVXNlcklExjoidGVhbTJAYmFuay5jb20iLCJ0ZW5hbnRJRCI6MSwiZmlyc3RuYW1lIjoiSm9obiIsImxhc3RuYW1lIjoiVDIiLCJyb2xlcyI6WyJyZXF1ZXN0YXBwcm92ZXIiXSwiZW1haWwiOiJ0ZWFtMkBiYW5rLmNvbSIsImV4cCI6MTU4MjI3NDQ1MiwiaWF0IjoxNTgyMTg4MDUyfQ.9-7pUrRG7Slpeod8NuY55cTSNOXsMGFE5Lb_GLv32AE"
```

2. Sign

```Bash
echo -n '["fda859afd5dcc16f7abec8e7ab7fc528d90b094e43eeb111037581c45f8e16b5"]' | openssl  dgst -sha256 -sign yubikey2-key.pem | openssl asn1parse -inform DER
#    0:d=0  hl=2 l=  70 cons: SEQUENCE
#    2:d=1  hl=2 l=  33 prim: INTEGER           :D0BC45E1436E2057E8CF8D79353045CB812718218BA23C277D5DE645F6AF3E4D
#   37:d=1  hl=2 l=  33 prim: INTEGER           :8DCF22A046E7EADF687904790D86FBAB0B27E4C09E160483298C29395C8D2A5C

echo -n "D0BC45E1436E2057E8CF8D79353045CB812718218BA23C277D5DE645F6AF3E4D8DCF22A046E7EADF687904790D86FBAB0B27E4C09E160483298C29395C8D2A5C" | xxd -p -r | base64 | tr -d '\n'
#0LxF4UNuIFfoz415NTBFy4EnGCGLojwnfV3mRfavPk2NzyKgRufq32h5BHkNhvurCyfkwJ4WBIMpjCk5XI0qXA==

curl -X POST "https://int-validator-core-crdb.t-bx.io/rjpyber72n6brsdzksotivcm33mw78q4/api/rest/v1/requests/approve" -H "accept: application/json" -H "Content-Type: application/json"  -H "$AUTH" -d "{ \"signature\": \"0LxF4UNuIFfoz415NTBFy4EnGCGLojwnfV3mRfavPk2NzyKgRufq32h5BHkNhvurCyfkwJ4WBIMpjCk5XI0qXA==\", \"comment\": \"try01\", \"requestIds\": [ \"442\" ], \"hashes\": [ \"fda859afd5dcc16f7abec8e7ab7fc528d90b094e43eeb111037581c45f8e16b5\" ]}"
#{"signedRequests":"1"}
```

#### 2.6 Get the status of the transaction

```Bash
curl "https://int-validator-core-crdb.t-bx.io/rjpyber72n6brsdzksotivcm33mw78q4/api/rest/v1/requests/442" -H "accept: application/json" -H "Content-Type: application/json"  -H "$AUTH" | jq .
# {
#   "result": {
#     "id": "442",
#     "tenantId": "1",
#     "currency": "BTC",
#     "envelope": "CgM0NDIQmfGjk6Ops/oVGAEq1AYSrAEKPwoPbS80NCcvMCcvMCcvMC8wGiAeyruP7CoNYcGISzRo8iZmuVnV6M9gLiZuShy7aDtKKiABKNHEFDD/////DxIoCiIxQ3Zoeml0ZFZMUGhOVGZ3NU5rUm9YWHZveldacGZhWXQ2EJ/nBRoVCg9tLzQ0Jy8wJy8wJy8wLzAYsbcOMig0NDI6NDY5ZTMxOGUtYjcxZC00MGUwLTg0ZjctNzVlOGQwOWE3Yzg2GlsKFwoOdGVhbTFAYmFuay5jb20aBXRyeTAxEkBmZGE4NTlhZmQ1ZGNjMTZmN2FiZWM4ZTdhYjdmYzUyOGQ5MGIwOTRlNDNlZWIxMTEwMzc1ODFjNDVmOGUxNmI1GlsKFwoOdGVhbTJAYmFuay5jb20aBXRyeTAxEkBmZGE4NTlhZmQ1ZGNjMTZmN2FiZWM4ZTdhYjdmYzUyOGQ5MGIwOTRlNDNlZWIxMTEwMzc1ODFjNDVmOGUxNmI1IhMKCnJlcXVlc3RfaWQQARoDNDQyIhIKCXJ1bGVzX2tleRABGgNCVEMiEQoIY3VycmVuY3kQARoDQlRDIlsKBnNvdXJjZRAEGkcIARJDCAESIjFKTUJZTU1pOWlqSlJlVFlxdEZUU2RlVkJ6azhOSGRzVHUaCm5vc3RybyBCVEMiD20vNDQnLzAnLzAnLzAvMCIGc291cmNlImIKC2Rlc3RpbmF0aW9uEAUaRBJCCMwBEiIxQ3Zoeml0ZFZMUGhOVGZ3NU5rUm9YWHZveldacGZhWXQ2GghteSBsYWJlbCIPbS80NCcvMCcvMCcvMC84IgtkZXN0aW5hdGlvbiKeAQoGYW1vdW50EAoaiQEKAwGGoBIHMTAuMDQzMBoKMTAwNDIuOTcwMCAIKgNCVEMyA0NIRjphCh12YWxpZGF0b3ItY29yZUB0YXVydXNncm91cC5jaBJAffe4nBGVSajYYQxxzEZbQuj0snr8WOC1P506eXRn2EUsDrAnkWvNW9wfU+pwUoBVUaXl/veYW/6m/DJsEKijLCIGYW1vdW50Ih4KEXRvdGFsX2ZpYXRfYW1vdW50EAEaBzEwLjA0MzAiCwoDZmVlEAIaAhMBIh4KFGZlZV9wYWlkX2J5X3JlY2VpdmVyEAEaBHRydWU=",
#     "status": "BROADCASTING",
#     "trails": [
#       {
#         "userId": "11",
#         "externalUserId": "team1@bank.com",
#         "action": "created",
#         "comment": "Ich bin eine flying Roasted Butternut Squash Boodles",
#         "date": "2020-02-19T12:24:47.748229Z",
#         "requestStatus": "CREATED"
#       },
#       {
#         "userId": "1",
#         "externalUserId": "validator-core@taurusgroup.ch",
#         "action": "approvers_assigned",
#         "comment": "rule = [source: any, destination: any, amount: 10.0000], approvals = ['team1': 1 sig, 'team2': 1 sig]",
#         "date": "2020-02-19T12:24:47.774836Z",
#         "requestStatus": "CREATED"
#       },
#       {
#         "userId": "11",
#         "externalUserId": "team1@bank.com",
#         "action": "approved",
#         "comment": "try01",
#         "date": "2020-02-20T08:12:51.209785Z",
#         "requestStatus": "APPROVING"
#       },
#       {
#         "userId": "12",
#         "externalUserId": "team2@bank.com",
#         "action": "approved",
#         "comment": "try01",
#         "date": "2020-02-20T08:43:53.445343Z",
#         "requestStatus": "APPROVING"
#       },
#       {
#         "userId": "1",
#         "externalUserId": "validator-core@taurusgroup.ch",
#         "action": "approval_completed",
#         "date": "2020-02-20T08:43:53.667491Z",
#         "requestStatus": "APPROVED"
#       },
#       {
#         "userId": "1",
#         "externalUserId": "validator-core@taurusgroup.ch",
#         "action": "hsm_ready",
#         "date": "2020-02-20T08:43:58.097522Z",
#         "requestStatus": "HSM_READY"
#       },
#       {
#         "userId": "1",
#         "externalUserId": "validator-core@taurusgroup.ch",
#         "action": "hsm_signed",
#         "comment": "transaction signed by the HSM: 442:469e318e-b71d-40e0-84f7-75e8d09a7c86",
#         "date": "2020-02-20T08:44:04.448018Z",
#         "requestStatus": "HSM_SIGNED"
#       },
#       {
#         "userId": "1",
#         "externalUserId": "validator-core@taurusgroup.ch",
#         "action": "broadcasting",
#         "comment": "broadcasting transaction (id: '442:469e318e-b71d-40e0-84f7-75e8d09a7c86', hash: '1a1c279eed33c4bcb36ba3c79062b76c166e84e76efa1c7b60ba3c689042b160')",
#         "date": "2020-02-20T08:44:13.270210Z",
#         "requestStatus": "BROADCASTING"
#       }
#     ],
#     "signedRequests": [
#       {
#         "id": "322",
#         "signedRequest": "01000000012a4a3b68bb1c4a6e262e60cfe8d559b96626f268344b88c1610d2aec8fbbca1e010000006b483045022100956bad7056aa431d17b1127adb0be883d931aa7de211c3e8c04d37aa4654c20402204bf316025c82f11a47f6333b6e196bba758cc7e67a1de85b75e5f40a35947845012102de4efb33938e1ba6936cf01d8b6f78d4587644d923f2fd1b4db260159dc1e348ffffffff029f730100000000001976a91482d1a692a74887c0f7b22728f751c746f809ec9688acb19b0300000000001976a914be4b41a078c0be0567bfdbfa0a4ab0b90652d54888ac00000000",
#         "status": "BROADCASTING",
#         "hash": "1a1c279eed33c4bcb36ba3c79062b76c166e84e76efa1c7b60ba3c689042b160",
#         "creationDate": "2020-02-20T08:44:04.439848Z",
#         "updateDate": "2020-02-20T08:44:13.251440Z",
#         "broadcastDate": "2020-02-20T08:44:13.251440Z"
#       }
#     ],
#     "creationDate": "2020-02-19T12:24:47.586041Z",
#     "updateDate": "2020-02-20T08:44:13.257347Z",
#     "metadata": {
#       "hash": "fda859afd5dcc16f7abec8e7ab7fc528d90b094e43eeb111037581c45f8e16b5",
#       "payload": [
#         {
#           "column": "",
#           "key": "request_id",
#           "type": "String",
#           "value": "442"
#         },
#         {
#           "column": "",
#           "key": "rules_key",
#           "type": "String",
#           "value": "BTC"
#         },
#         {
#           "column": "",
#           "key": "currency",
#           "type": "String",
#           "value": "BTC"
#         },
#         {
#           "column": "source",
#           "key": "source",
#           "type": "Source",
#           "value": {
#             "payload": {
#               "address": "1JMBYMMi9ijJReTYqtFTSdeVBzk8NHdsTu",
#               "id": "1",
#               "label": "nostro BTC",
#               "path": "m/44'/0'/0'/0/0"
#             },
#             "type": "SourceInternalAddress"
#           }
#         },
#         {
#           "column": "destination",
#           "key": "destination",
#           "type": "Destination",
#           "value": {
#             "payload": {
#               "address": "1CvhzitdVLPhNTfw5NkRoXXvozWZpfaYt6",
#               "id": "204",
#               "label": "my label",
#               "path": "m/44'/0'/0'/0/8"
#             },
#             "type": "DestinationInternalAddress"
#           }
#         },
#         {
#           "column": "amount",
#           "key": "amount",
#           "type": "Amount",
#           "value": {
#             "currencyFrom": "BTC",
#             "currencyTo": "CHF",
#             "decimals": "8",
#             "rate": "10042.9700",
#             "valueFrom": "100000",
#             "valueTo": "10.0430"
#           }
#         },
#         {
#           "column": "",
#           "key": "total_fiat_amount",
#           "type": "String",
#           "value": "10.0430"
#         },
#         {
#           "column": "",
#           "key": "fee",
#           "type": "BigInt",
#           "value": "4865"
#         },
#         {
#           "column": "",
#           "key": "fee_paid_by_receiver",
#           "type": "String",
#           "value": "true"
#         }
#       ]
#     },
#     "rule": "rule = [source: any, destination: any, amount: 10.0000], approvals = ['team1': 1 sig, 'team2': 1 sig]",
#     "approvers": {
#       "parallel": [
#         {
#           "sequential": [
#             {
#               "externalGroupID": "team1",
#               "minimumSignatures": 1
#             },
#             {
#               "externalGroupID": "team2",
#               "minimumSignatures": 1
#             }
#           ]
#         }
#       ]
#     }
#   }
# }
```