Transaction signature
This page is for Taurus PROTECT, version v3.44.
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
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

1.3 Details
| Step | ID | API/JOB | Swagger | Request Proto | Reply Proto | Impacted DB tables | Request State changes |
|---|---|---|---|---|---|---|---|
| 1 | CreateOutgoingRequest() | API | swagger | CreateOutgoingRequestRequest | - | requests,users,wallets,wl_addresses,rules | NONE -> CREATED |
| 2 | Request | API | - | Request | - | - | - |
| 3 | GetRequestsForApproval() | API | swagger | GetRequestsForApprovalRequest | - | requests,users | - |
| 4 | GetRequestsReply | API | - | - | GetRequestsReply | - | - |
| 5 | ApproveRequests() | API | swagger | ApproveRequestsRequest | - | users,requests,rules | CREATED -> APPROVING |
| 6 | ApproveRequestsReply | API | - | - | ApproveRequestsReply | - | - |
| 7 | GetRequestsForApproval() | API | swagger | GetRequestsForApprovalRequest | - | requests,users | - |
| 8 | GetRequestsReply | API | - | - | GetRequestsReply | - | - |
| 9 | ApproveRequests() | API | swagger | 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
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
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
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
- Order transaction you would like to sign by ID (here there is only 442)
- Sign the array of all
metada.hash - Build up the ECDSA signature, encode it in Base64
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 :76FE947687631B822419ACD181DBBB3F881F77F1480C2B5C5485B9B57CDC7C9Fecho -n "234C56C972372F7DC331900ABEF2979E5583DC61975A1D00B8BE731C3D760C6A76FE947687631B822419ACD181DBBB3F881F77F1480C2B5C5485B9B57CDC7C9F" | xxd -p -r | base64 | tr -d '\n'#I0xWyXI3L33DMZAKvvKXnlWD3GGXWh0AuL5zHD12DGp2/pR2h2MbgiQZrNGB27s/iB938UgMK1xUhbm1fNx8nw==
- Send the signed request
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
- Auth
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"
- Sign
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 :8DCF22A046E7EADF687904790D86FBAB0B27E4C09E160483298C29395C8D2A5Cecho -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
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# }# ]# }# ]# }# }# }