Multiple Trust Anchors

Support for multiple trust anchors hasn’t been released yet. These docs are a preview of what’s to come.

Veriscope now supports multiple trust anchors (MTAs) thus enabling VASPs and Service Providers to deploy a single Veriscope instance and run multiple trust anchor accounts.

This is particularly useful for VASPs that operate multiple entities (e.g. Binance Australia vs Bahrain vs Cyprus etc.) and Service Providers who service 100s of individual VASP entities (e.g. Sygna).

Support for MTAs was introduced in Veriscope v3.6.0 and is backwards compatiable. To upgrade an earlier version of Veriscope, please follow the instructions in our Veriscope Change Log.

How MTAs are handled

MTAs are handled in the Veriscope Node .env file:

cd ~/veriscope/veriscope_ta_node/.env
  1. which includes three variables for trust anchor(s):

    • TRUST_ANCHOR_PREFNAME

    • TRUST_ANCHOR_ACCOUNT

    • TRUST_ANCHOR_PK

Multiple trust anchors can be added via a comma separated list, e.g.:

* `TRUST_ANCHOR_PREFNAME`="ta1", "ta2", "ta3", "ta4", "ta5"
* `TRUST_ANCHOR_ACCOUNT`=0x...15, 0x...25, 0x...35, etc.
* `TRUST_ANCHOR_PK`=aa...10, ab...20, ac...30, etc.

There is no upper limit to how many trust anchors can be added.

Sample Node .env file
#DO NOT INCLUDE "0x" prefix in TRUST_ANCHOR_PK
TRUST_ANCHOR_PREFNAME="Singapore VASP", "ta1", "ta2"
TRUST_ANCHOR_ACCOUNT=0x...15, 0x...25, 0x...35
TRUST_ANCHOR_PK=aa...10, ab...20, ac...30
`WEBHOOK_CLIENT_SECRET`=abcdefg*

HTTP="http://localhost:8545"
WS="ws://localhost:8545"
WEBHOOK="http://localhost:8000/webhook"
HTTP_API_PORT=8080
TEMPLATE_HELPER_PORT=8090

CONTRACTS=/opt/veriscope/veriscope_ta_node/artifacts/

#veriscope testnet
TRUST_ANCHOR_MANAGER_CONTRACT_ADDRESS="0x........06"
TRUST_ANCHOR_STORAGE_CONTRACT_ADDRESS="0x........66"
TRUST_ANCHOR_EXTRA_DATA_GENERIC_CONTRACT_ADDRESS="0x.......4c"
TRUST_ANCHOR_EXTRA_DATA_UNIQUE_CONTRACT_ADDRESS="0x........a8"

#redis
REDIS_URI=redis://127.0.0.1:6379
LOG_LEVEL=info

SIGN_MESSAGE="VERISCOPE"
Do not include "0x" prefix in TRUST_ANCHOR_PK value(s).

Veriscope UI

The Veriscope UI, in particular, the VASP Profile (prev. Manage Your Organization) page where trust anchor data is viewed, IVMS data is added, and key-value pairs are set now supports multiple trust anchors. To view the latest UI, see the Get comfortable with the Veriscope Web Application page.

Veriscope API

The Veriscope API nows support multiple trust anchors. Trust anchor account address has been added as a variable to each of the following endpoints:

Get Trust Anchor Accounts

Example 1. endpoint
`GET` {{baseUrl}}/api/v1/server/get_trust_anchor_accounts
Example 2. response (200 OK)
{
    "id": 1,
    "ta_prefname": "[email protected]",
    "ta_jurisdiction": 0,
    "user_id": 1,
    "created_at": "2022-06-14T05:48:17.000000Z",
    "updated_at": "2022-06-14T05:53:01.000000Z",
    "account_address": "0xF937c412e7172c2c8978cEdD850DDD08e0D95e60",
    "public_key": "eb7a66b64a0c04362aa8384d28068106f0e41d24adf507afcc64e3d5b756aa2cd6dd33fdf1a5db36e63fffd37fa654a3d1cb6778bcf6de0352cc0e6e2f323209",
    "signature_hash": "0x0b709dd4809f36a22fe48250b24a5e41e8aea491bace26627f5c68ea9b4fad3f",
    "signature": "{\"r\":\"0x12fe4dc19292e0efef7119193e33e4a92f9e859fe5850c75b6a5dd64c7b9b383\",\"s\":\"0x549b32f75b25aa8233f633dfef51b3353db4c499e119f10d44e24d15e5cd054b\",\"v\":\"0x26\"}",
    "legal_person_name": "[email protected]",
    "legal_person_name_identifier_type": "LEGL",
    "address_type": "BIZZ",
    "street_name": "South Bridge",
    "building_number": "1233",
    "building_name": "ABCXYZ",
    "postcode": "000003",
    "town_name": "Hogwarts Place",
    "country_sub_division": "Province",
    "country": "HP"
}

Set V3 Attestation

Example 3. endpoint
`POST` {{baseUrl}}/api/v1/server/set_v3_attestation
Example 4. params
"ta_account":"0xF937c412e7172c2c8978cEdD850DDD08e0D95e60"
"user_account":"0x96ee3769a2422215626b8a32594e8fbd5dd1b61a"
"jurisdiction":"196"
"coin_blockchain":"ETH"
"coin_token":"POOL"
"coin_address":"0x5481fabc980af705c556517426c81a963af5657d"
"coin_memo":"end-to-end walkthrough"
  • user_account is the originator/sender user account_address from Create Shyft User

  • jurisdiction is the originator/sender VASP jurisdiction id from Get Jurisdictions

Create KYC Template

Example 5. endpoint
`POST` {{baseUrl}}/api/v1/server/create_kyc_template
Example 6. params
"attestation_hash": "0xfad4deb39b71171e0ce68e019d0c3b73873aa9a25220a018334b91e705e2ae76"
"user_account": "0x279623a9378725fe271dccd8a390228f81c87a5e"
"user_public_key": "0x0409e8d4a705e9dff75c5d082b601a8326b77c61b763df76ec242f24b85abd070fcada35335033ec0bfe8308dfcf0ea551b0193836219bbb535f059ade08140772"
"user_signature": "{"r":"0x8edb489caf90ea1ec47b185099825b763b0dbfee72cf0685c0662fe96b178dd5","s":"0x3eb2f91b549512aeb8438fac961cca34c47873c11ce17f383f54c4346458b149","v":"0x26"}"
"user_signature_hash": "0x7ec005c40fadb64f4180dcc14d9f5927f649096a08478a4a5a112a3aa77ca549"
"ivms_encrypt": (optional)
"coin_transaction_hash": (optional)
"coin_transaction_value": (optional)
"ivms_state_code": (optional)
"coin_address_crypto_proof": (Optional)
Example 7. response (200 OK)
{
    "attestation_hash": "0xfad4deb39b71171e0ce68e019d0c3b73873aa9a25220a018334b91e705e2ae76",
    "status": "BE_TA_VERIFIED",
    "webhook_status": "START",
    "ivms_status": "START",
    "updated_at": "2022-06-27T02:51:36.000000Z",
    "created_at": "2022-06-27T02:51:35.000000Z",
    "id": 12,
    "coin_blockchain": "ETH",
    "coin_token": "POOL",
    "coin_address": "0x5481fabc980af705c556517426c81a963af5657d",
    "coin_memo": "end-to-end walkthrough",
    "coin_transaction_hash": "",
    "coin_transaction_value": "",
    "sender_ta_address": "0xF937c412e7172c2c8978cEdD850DDD08e0D95e60",
    "sender_user_address": "0x96Ee3769a2422215626b8A32594e8fBD5Dd1b61a",
    "beneficiary_ta_address": "0x1358D8FF6bF65002d051c059b95E60f54007516e",
    "beneficiary_ta_public_key": "0e67d158116a7c330953bde9d53dac5db35a7af64337f5b3de5246ab576d98e4d2f32cb96e0b291332573eed2884edb0a626e58525e7d89ce1ecb1dd50d9ee89",
    "beneficiary_ta_signature_hash": "0x0b709dd4809f36a22fe48250b24a5e41e8aea491bace26627f5c68ea9b4fad3f",
    "beneficiary_ta_signature": "{\"r\":\"0x221ad084d6a3eaa93446508033ed746a831d5fd31748dfb5a8eb1c850555218e\",\"s\":\"0x0e731078734180087e61fcd7c9248e8172608c2a645a438c379fc08aedbbaa70\",\"v\":\"0x26\"}",
    "beneficiary_user_address": "0x279623a9378725fe271dccd8a390228f81c87a5e",
    "beneficiary_user_public_key": "0x0409e8d4a705e9dff75c5d082b601a8326b77c61b763df76ec242f24b85abd070fcada35335033ec0bfe8308dfcf0ea551b0193836219bbb535f059ade08140772",
    "beneficiary_user_signature_hash": "0x7ec005c40fadb64f4180dcc14d9f5927f649096a08478a4a5a112a3aa77ca549",
    "beneficiary_user_signature": "{\"r\":\"0x8edb489caf90ea1ec47b185099825b763b0dbfee72cf0685c0662fe96b178dd5\",\"s\":\"0x3eb2f91b549512aeb8438fac961cca34c47873c11ce17f383f54c4346458b149\",\"v\":\"0x26\"}",
    "sender_ta_url": "https://ks-node-3.veriscope.network/kyc-template",
    "beneficiary_ta_url": "https://ks-node-4.veriscope.network/kyc-template",
    "beneficiary_user_crypto_proof":"",
    "beneficiary_user_crypto_proof_status":""
}

Retry KYC Template

Example 8. endpoint
`GET` {{baseUrl}}/api/v1/server/retry_kyc_template
Example 9. params
"attestation_hash": "0xcbc6c36db378cce99028a5417b6c8a36ecc67c686692685f2decb3365dfc0f34"
Example 10. response (200 OK)
{
  "id": 139,
  "attestation_hash": "0xcbc6c36db378cce99028a5417b6c8a36ecc67c686692685f2decb3365dfc0f34",
  "beneficiary_ta_address": "0x4DA45d42921bc14015c469e2eecCC2793301Ef27",
  "beneficiary_ta_public_key": "1fd1f70da541b4be0490637ad3ac033c7a69f12263a1fc4a093fae762f9edbbbd80181d6764737df00bad18bd7acbe146d03e49f2cccccdc9600197d8d6acc3c",
  "beneficiary_user_address": "0xe96e217759e62a044040d5593b462855e74fca41",
  "beneficiary_user_public_key": "0x0414bc390bb3f1124e727822164035971612059cb8b9af6880ae71ca88b42d732f79bef5dc2d6e31a5c49d98631b6d23f6ffbf033b15acca447995730df3aa69d2",
  "beneficiary_ta_signature_hash": "0x0b709dd4809f36a22fe48250b24a5e41e8aea491bace26627f5c68ea9b4fad3f",
  "beneficiary_ta_signature": "{\"r\":\"0x3f6a5f8e4a0b1398806dae4a99947a552d72afd740aca4653555d176f43f9a54\",\"s\":\"0x55bf1ec46e9cfbd157540a320a6fadc94259bcdc1699f78626e896413c30d840\",\"v\":\"0x25\"}",
  "crypto_address_type": null,
  "crypto_address": null,
  "crypto_public_key": null,
  "crypto_signature_hash": null,
  "crypto_signature": null,
  "sender_ta_address": "0x10a32419ABcfbaaae91D0e03bc8390c418E65680",
  "sender_ta_public_key": "12eea3e1969efb01617b0b4d5ece86d9f6d885e84d2908d695d0940478e6d357ff939732e15fceb562893e48681fe0221724946ccba65e6c9953b2e3866b27f1",
  "sender_user_address": "0xbf2b6e8d4bdd767ec236cc5652b80713ce19eadb",
  "sender_user_public_key": "0x04d95277e0eda4eba445d8bb746f137872ed7f5302aec4e4655396fbad352fbb19a86696e527c155f9feb93b7ac2e86066a7a7e33e031fd93257b40cedffacbbe7",
  "sender_ta_signature_hash": "0x0b709dd4809f36a22fe48250b24a5e41e8aea491bace26627f5c68ea9b4fad3f",
  "sender_ta_signature": "{\"r\":\"0xa671ceaf2ff7ce84bf5137757ce8f39b792d97f751d192a7e67fa8d2f78cd7f4\",\"s\":\"0x221852ba79ac4744ba5a4bba9cb44dfe14c80c06b1000e42ec9109d3cbd38de3\",\"v\":\"0x26\"}",
  "payload": null,
  "beneficiary_kyc": null,
  "sender_kyc": null,
  "created_at": "2022-06-09T14:51:30.000000Z",
  "updated_at": "2022-06-09T15:41:14.000000Z",
  "kyc_template_state_id": null,
  "beneficiary_user_signature_hash": "0x7ec005c40fadb64f4180dcc14d9f5927f649096a08478a4a5a112a3aa77ca549",
  "beneficiary_user_signature": "{\"r\":\"0x65424575fc10828b9b0f005d6a54dd86cc23d393c844d3a2cef33659b4391b8b\",\"s\":\"0x298e075645749d954ac90582b92ca877c1829e8037bf7f0a3803ae62291d8a81\",\"v\":\"0x26\"}",
  "sender_user_signature_hash": "0x7ec005c40fadb64f4180dcc14d9f5927f649096a08478a4a5a112a3aa77ca549",
  "sender_user_signature": "{\"r\":\"0xfb20891f9f08bcf12d97930c1917137712057d491ffedc883e04a4990d7730d8\",\"s\":\"0x7e9235069c34a90d82e937dc5901c9f9e55c511ed35ccd940233862c77eaf23d\",\"v\":\"0x26\"}",
  "beneficiary_ta_url": "https://beneficiary.veriscope.network/kyc-template",
  "sender_ta_url": "https://originator.veriscope.network/kyc-template",
  "beneficiary_kyc_decrypt": null,
  "sender_kyc_decrypt": null,
  "coin_blockchain": "ETH",
  "coin_token": "ETH",
  "coin_address": "0xa6ff79f3aca5e4bb9639852c042da1de62740322",
  "coin_memo": null,
  "coin_transaction_hash": "",
  "coin_transaction_value": "",
  "status": "OR_TA_VERIFIED",
  "webhook_status": "OR_DATA_REQ_RECEIVED",
  "ivms_status": "START",
  "beneficiary_user_crypto_proof":"",
  "beneficiary_user_crypto_proof_status":""
}
Example 11. response (400 Bad Request)
{
  "error": { "field_name": ["Your error message goes here"] }
}

Postman Collection

The Veriscope Postman Collection has also be updated to support multiple trust anchors. Be sure to download and use the latest. See The Veriscope Postman Collection.