Get desktop application:
View/edit binary Protocol Buffers messages
The TRISAHealth service is optional but highly recommended for VASP members to implement. The Status endpoint allows the TRISA Directory Service to perform health checks with VASP's TRISA Node and report the service conditions of the TRISA network. Because a down TRISA node will prevent travel rule compliant virtual asset transactions, the health service is intended to quickly identify network problems and notify members as quickly as possible. NOTE: the TRISAHealth service must also be behind mTLS so that the health check service can verify the identity certificates being used for the TRISANetwork service.
The number of failed health checks that proceeded the current check.
The timestamp of the last health check, successful or otherwise.
Current service status as defined by the recieving system. The system is obliged to respond with the closest matching status in a best-effort fashion. Alerts will be triggered on service status changes if the system does not respond and the previous system state was not unknown.
Suggest to the directory service when to check the health status again.
The TRISANetwork service defines the peer-to-peer interactions between VASPs that are necessary to conduct compliance information exchanges. All TRISA members must implement all services described by the TRISA protocol to ensure that exchanges are conducted correctly and securely. The primary RPCs are Transfer and TransferStream which allow VASPs to exchange compliance information before conducting a virtual asset transaction. The other RPCs facilitate Transfers, allowing address confirmations prior to a transfer and public key exchange so that transaction envelopes can be encrypted and signed.
Address confirmation allows an originator VASP to establish that a beneficiary VASP has control of a crypto wallet address, prior to sending transaction information with sensitive PII data.
AddressConfirmation is returned by the counterparty after receiving an Address proof-of-control query. The counterparty should echo the address received (updating it as necessary) then specify controlled_by_entity as true if it is controlled by the receiving party or false and include an error if it is not. This is sufficient for simple address confirmation. For other
The address that is being confirmed by the counterparty.
Specify true if the crypto address is controlled by the counterparty; specifying this as true is sufficient for simple address confirmation. If the counterparty cannot or will not perform the address confirmation they can mark this field as false and include an error code and message. Counterparties that will never do address confirmation should return a gRPC Unimplemented status code to this RPC.
Rejection errors should be specified in the response if the counterparty cannot or will not perform an address confirmation. Generally the error codes that are returned here are UNKNOWN_WALLET_ADDRESS, UNSUPPORTED_NETWORK, UNSUPPORTED_ADDRESS_CONFIRMATION, or CANNOT_CONFIRM_CONTROL_OF_ADDRESS -- but other codes may be used if necessary.
If the confirmation type is key/token or on-chain then additional details must be specified for the address confirmation. If the confirmation type is simple, then this field may be left empty.
The encrypted transaction envelope uses asymmetric (public/private) encryption to exchange a symmetric key and signature for the transaction blob. To facilitate transaction signatures, VASPs must be able to exchange public signing keys if they have not already obtained them from the directory service.
SigningKey provides metadata for decoding a PEM encoded PKIX public key for RSA encryption and transaction signing. The SigningKey is a lightweight version of the Certificate information stored in the Directory Service.
x.509 metadata information for ease of reference without parsing the key.
Validity information
The serialized public key to PKIX, ASN.1 DER form.
To conduct an information exchange prior to a virtual asset transaction, an originating VASP will send an encrypted transaction envelope to the beneficiary VASP containing a unique ID for the transaction, the encrypted transaction bundle, and metadata associated with the transaction cipher. In response, the beneficiary will validate the transaction request, then return the beneficiary's transaction information using the same unique transaction ID. The TRISANetwork provides both a unary RPC for simple, single transactions and a transaction stream for high throughput transaction workloads.
Address specifies a crypto address that requires a proof-of-control verification. There are three types of verification: simple, key-based, and on-chain. In simple address confirmation, the counterparty simply replies y/n if they control the address. In key-based control, a token encrypted with the public keys is sent to the counterparty which must decrypt it with the private key and return it. In on-chain proof-of-control, a transaction is placed on the chain for some small random amount of the specified asset, random enough that it can be confirmed by the originator.
Used as request type in: TRISANetwork.ConfirmAddress
Used as field type in:
Required fields for all address confirmation RPCs that identify the crypto address and network that needs to be validated as well as the requested type.
Optional details that may be necessary for the specific chain such as the asset type for chains that support multiple assets or a memo/destination tag.
If the confirmation type is key/token or on-chain then additional details must be specified for the address confirmation. If the confirmation type is simple, then this field may be left empty.
Used in:
Used in: ,
Error codes are standardized in the TRISA network to prevent confusion and to allow easy identification of rejections or other problems so that the repair of the connection or information exchange can be expedited.
Human readable message stating the reason for the error, should be loggable and actionable. Both standardized and unique/detail messages are acceptable.
If the message that caused the error should be retried with a fix; otherwise the rejection is permenant and the request should not be retried.
Any additional data or reasons for the rejection, e.g. a parent error, a diff, a location for redirect, etc. The payload of the additional data should be described by the error code.
Used in:
Errors 0-49 are reserved for service-specific errors Default error - something very bad happened.
Generic error - could not handle request, retry later.
Alias: Sygna BVRC Rejected Type
Alias: Sygna BVRC Rejected Code
The service is currently in maintenance mode and cannot respond.
The RPC is not currently implemented by the TRISA node.
Request could not be processed by recipient.
Alias: Sygna BVRC Rejected Code
Errors 50-99 are reserved for transaction rejections. Default rejection - no specified reason for rejecting the transaction.
VASP does not control the specified wallet address.
VASP does not have KYC information for the specified wallet address.
Typo left for backwards compatibility.
Specifically, the Originator account cannot be identified.
Specifically, the Beneficiary account cannot be identified.
Alias: Sygna BVRC Rejected Type
Alias: Sygna BVRC Rejected Code
VASP cannot support the fiat currency or coin described in the transaction.
Alias: Sygna BVRC Rejected Code
Alias: helpful if the chain is not a currency
No longer able to receive more transaction inflows
Alias: Sygna BVRC Rejected Code
VASP will not support the requested confirmation type
VASP cannot confirm they control the requested address, but doesn't necessarily indicate that they do not control the address.
An internal compliance check has failed or black listing has occurred
Alias: Sygna BVRC Rejected Code
VASP not able to implement travel rule compliance.
VASP unwilling to conduct the transaction because of a risk assessment.
Wallet address or transaction is not available on this network.
Errors 100-149 are reserved for authentication or cryptography failures. Default access denied - no specified reason for forbidding the transaction.
Could not sign transaction because no signing key is available.
Could not sign transaction because keys have been revoked.
Could not verify certificates with any certificate authority.
A trusted connection could not be established.
An HMAC signature could not be verified
The transaction bundle cannot be decrypted with the specified key
Could not decode or decrypt private transaction data
Alias: Sygna BVRC Rejected Type
Alias: Sygna BVRC Rejected Code
The algorithm specified by the encryption or signature is not implemented
Errors 150-199 are reserved for repairing exchange information. Generic bad request - usually implies retry when reuqest is fixed.
Could not parse the identity record; specify the type in extra
Alias: Sygna BVRC Rejected Type
Alias: Sygna BVRC Rejected Code
Could not parse the transaction data record; specify the type in extra
There are missing required fields in the transaction data, a list of these fields is specified in extra.
The identity record is not complete enough for compliance purposes of the receiving VASPs. Required fields or format specified in extra.
There was an error validating a field in the transaction data (specified in extra)
If the review period has exceeded the required compliance timeline
Cancel the ongoing TRISA exchange as no longer required or no longer able to send funds on the chain. No further response expected.
Used in:
The decrypted token to confirm to the user that the counterparty has control of the private keys of the crypto address.
Used in:
A token encrypted by the public key of the wallet address.
The algorithm used to encrypt the token.
The signature of the public key, used to identify the key pair.
Used in:
The RFC3339 encoded timestamp of when transaction will be visible.
The actual amount posted in the transaction for verification.
The transaction ID of the confirmation, if available
Used in:
The beneficiary address of the wallet to send the proof of control amount to.
Amount of the transaction (usually a small amount) - this is the nonce value.
The RFC3339 encoded timestamp of when the transaction must be posted by.
Payload contains the compliance identity information that must be exchanged in a secure fashion, transaction information for both counterparties to uniquely identify the transaction on the chain, and timestamps that are used for regulatory non-repudiation. This payload is serialized and encrypted to be sent in the SecureEnvelope as well as digitally signed to ensure that the payload has not been tampered with after transmission. The internal message types of the payload are purposefully generic to allow flexibility with the data needs for different exchanges.
Identity contains any valid identity structure. The expected format is the IVMS101 IdentityPayload which contains the originator and beneficiary identities, the originator and beneficiary VASP identities, as well as the transfer path of any intermediate VASPs. The identity payload can be bidirectional (containing both originator and beneficiary identities) or unidirectional - containing only the identity of the sender. In the bidirectional case, the identity may be purposefully partial to allow the recipient to fill in the details. In the unidirectional case, the identities must be collated after.
Transaction contains network specific information about the exchange or transfer. It can also contain transfer control messages such as Pending messages to facilitate multi-message compliance exchanges. These messages must all be digtially signed for auditing purposes.
Timestamps that describe when the payload was originally sent and when it was accepted or received by the counterparty. These timestamps must be in the payload so that they are digitally signed for non-repudiation. Both timestamps should be RFC-3339 formatted strings with timezone information.
Encrypted transaction envelope that is the outer layer of the TRISA information exchange protocol and facilitates the secure storage of KYC data in a transaction. The envelope specifies a unique id to reference the transaction out-of-band (e.g in the blockchain layer) and provides the necessary information so that only the originator and the beneficiary can decrypt the trnasaction data.
Used as request type in: TRISANetwork.Transfer, TRISANetwork.TransferStream
Used as response type in: TRISANetwork.Transfer, TRISANetwork.TransferStream
The transaction identifier generated by the sender. Any message concerning the same blockhain transaction requires the same envelope ID on both sending and responding RPCs.
Encrypted payload that contains the IVMS 101 IdentityPayload for compliance and a generic transaction payload that is used to identify the transaction on the blockchain or perform flow control messages in TRISA itself. This payload should be encrypted using the encryption algorithm and key defined below.
Encryption key used to encrypt the compliance payload, usually generated on a per-envelope basis. To seal the envelope, this key should be encrypted with the public key of the recipient. If this key is in the clear, the sealed flag should be false.
The encryption algorithm used to encrypt the compliance payload. This string should provide enough information for the recipient to understand how to decrypt the payload including algorithm, variants, block length, etc.
HMAC signature calculated from encrypted encrypted compliance payload using the hmac algorithm and secret defined below. This signature provides non-repudiation to regulators and counterparties that ensure the envelope has not been tampered with after receipt, particularly when comparing two envelopes.
The HMAC secret used to calculate the HMAC signature. To seal the envelope, this secret should be encrypted with the public key of the recipient. If this secret is in the clear, the sealed flag should be false.
The algorithm used to calculate the HMAC signature. This string should provide enough information for the recipient to understand how to compute the HMAC including algorithm, block length, hashing function, etc.
Rejection/TRISA errors should be specified in the SecureEnvelope for correct compliance processing and not returned as a gRPC error. E.g. if the counterparty wishes to send a TRISA error, they should send an OK gRPC response with the error in this field. Networking errors such as unavailable, mTLS failure, or timeouts are handled separately from compliance-related errors.
The RFC-3339 formatted timestamp at nanosecond resolution. Used to order SecureEnvelopes related to the same transaction. While this timestamp is likely the same as the sent_at timestamp in the compliance payload, it does not serve the same purpose. The compliance payload timestamps are for non-repudiation, whereas this timestamp is for envelope and communication management.
Metadata related to the public key cryptography that seal the envelope by encrypting the encryption key and hmac secret such that only the recipient can fully decrypt the envelope. If the envelope is sealed, it indicates that the encryption key and hmac secret are encrypted with a public key, whose signature can be used for the recipient to identify the key pair required for decryption.
The state refers to the condition that the sending party feels that the secure envelope exchange is in. This can optionally be used to signal to the counterparty the intent of a transfer message
Used in:
Used in:
the transfer state is unknown or not specified
this is the first message in the TRISA workflow
action is required by the sending party
action is required by the receiving party (rarely used)
some state of the travel rule exchange requires repair
the travel rule exchange is accepted and awaiting the transaction
the travel rule and on-chain transaction have been completed
the travel rule exchange is rejected and should not proceed