Skip to navigation

Request Workflow Example Api


title: “Example of Workflow” date: 2020-11-04T12:02:35+01:00 weight: 50

1. Simple transaction creation, signing and broadcast

ActorsDescription
ClientService or GUI
tg-validatordCentral daemon of the solution
tg-vaultdBridge to 1 or N HSMs
HSMHardware 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

StepIDAPI/JOBSwaggerRequest ProtoReply ProtoImpacted DB tablesRequest State changes
1CreateOutgoingRequest()APIswaggerCreateOutgoingRequestRequest-requests,users,wallets,wl_addresses,rulesNONE -> CREATED
2RequestAPI-Request---
3GetRequestsForApproval()APIswaggerGetRequestsForApprovalRequest-requests,users-
4GetRequestsReplyAPI--GetRequestsReply--
5ApproveRequests()APIswaggerApproveRequestsRequest-users,requests,rulesCREATED -> APPROVING
6ApproveRequestsReplyAPI--ApproveRequestsReply--
7GetRequestsForApproval()APIswaggerGetRequestsForApprovalRequest-requests,users-
8GetRequestsReplyAPI--GetRequestsReply--
9ApproveRequests()APIswaggerApproveRequestsRequest-users,requests,rulesAPPROVING -> APPROVED
10ApproveRequestsReplyAPI--ApproveRequestsReply--
11HandleApprovedRequestsjob---requestsAPPROVED -> HSM_READY
12HandleHsmReadyRequestsjob---requests,signed_requestsHSM_READY -> HSM_SIGNED
13HandleHsmSignedRequestsjob---requests,signed_requestsHSM_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 users

  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
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==
  1. 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 users

  1. 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"
  1. 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 :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

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
# }
# ]
# }
# ]
# }
# }
# }