Com Didit encamina un intercanvi
Quan un client de Didit envia una transferència, Didit prova aquests canals en un ordre de prioritat estricte i utilitza el primer que pugui arribar a tu:
La taula anterior cobreix les transferències que envia un client de Didit.
Quan tu envies una transferència a un client de Didit, Didit només la pot acceptar com a
TRP consulta de transferència, quan l’host públic TRP de Didit estigui activat (encara no respon, consulta endpoints TRP), o, després de la liquidació, com a registre sunrise: avui cap canal de xarxa ni cap canal de correu no lliura una transferència entrant a un client de Didit.
Els canals de xarxa (GTR, TRUST, VERIFYVASP, SYGNA) funcionen amb una membresia del costat de l’ordenant.
Avui això ha de ser la membresia connectada pròpia del client de Didit: Didit no té cap membresia de plataforma en cap d’aquestes xarxes encara i està en procés d’alta com a proveïdor.
GTR no s’inclou per defecte, i el mateix requisit de membresia s’aplica a les quatre xarxes.
L’ordenant hauria de revisar l’objecte networks a Obtenir la configuració de Travel Rule: didit vol dir que la membresia de Didit té aquesta aplicació com a participant propi a la xarxa, own vol dir una membresia de client connectada, off vol dir que l’encaminament de la plataforma està desactivat, i unavailable vol dir que res pot enviar per aquesta xarxa per a l’aplicació de moment.
Mentre Didit no tingui una membresia de plataforma, cap xarxa informa didit.
Activar Travel Rule no activa una membresia de xarxa.
Consulta xarxes de Travel Rule per saber a què dona accés cada xarxa avui.
Si ets en una d’aquestes xarxes i el client de Didit té la seva pròpia membresia, comparteix el teu identificador de xarxa amb ell i la transferència t’arribarà per la xarxa que ja fas servir.
Per SYGNA, la teva resposta de permís completa o rebutja la transferència: Didit consulta l’estat de la transferència cada 5 minuts, i també registra https://trp.didit.me/sygna/callbacks/permission/{token}/ com a callback de cada sol·licitud de permís, amb un token generat per a aquesta transferència.
Aquest callback està a l’host públic TRP de Didit, que encara no atén sol·licituds.
Un permission_status de ACCEPTED passa la transferència de l’ordenant a COMPLETED, i REJECTED la passa a COUNTERPARTY_VASP_GENERAL_DECLINE, o a COUNTERPARTY_MISMATCHED_DATA quan el reject_code és BVRC007 (el nom del beneficiari no coincideix).
El callback necessita la teva signatura: respon 401 amb {"status": "INVALID_SIGNATURE"} sense una signatura vàlida, 404 per a un token desconegut, i 200 de nou per a una decisió que ja s’ha aplicat.
Sense cap membresia compartida, TRP és el camí a planificar: comparteix la teva Travel Address amb el client de Didit, i les seves transferències arribaran al teu endpoint TRP. Una resposta que donis en la teva resposta a la consulta completa o rebutja la transferència de seguida; una resposta que enviïs més tard al callback de Didit necessita l’host públic TRP de Didit, que encara no està activat.
Quan cap dels canals et pot identificar, Didit fa un pas de resolució més: atribució mitjançant analítica de blockchain.
La cartera de destinació es resol mitjançant les dades d’analítica de blockchain i, quan s’atribueix al teu servei d’intercanvi o de custòdia, Didit registra el teu nom al seu directori de VASP i torna a provar els canals amb aquest identificador.
Això vol dir que pots ser identificat fins i tot quan l’ordenant només va proporcionar una adreça.
Les transferències atribuïdes t’arriben automàticament només quan la teva entrada del directori té un encaminament: un endpoint TRP verificat, un registre en una xarxa, o un contacte de compliment (consulta Entrar al directori de VASP de Didit).
La cadena de resolució completa és, doncs: un client de Didit que ha demostrat el control de la cartera (INTERNAL) i la Travel Address que l’ordenant hi va guardar, després els canals de protocol i de xarxa, i després l’analítica de blockchain.
Travel addresses
Tot VASP de Didit amb Travel Rule activat té una Travel Address: una cadena compacta que comença perta i codifica la URL del seu endpoint personal de consulta de transferències TRP.
Els clients de Didit la llegeixen a la seva configuració de Travel Rule i la comparteixen amb les contraparts. Quan un client de Didit us facilita la seva, teniu tot el necessari per contactar-lo per TRP.
La codificació segueix la convenció de Travel Address de TRP:
- Elimina el prefix
ta. - Descodifica el resultat en Base58Check (alfabet de Bitcoin, suma de verificació de doble SHA-256).
- Els bytes descodificats són la URL de consulta sense l’esquema; afegeix-hi
https://al davant. - La URL sempre inclou el parell de consulta
t=i(tipus: consulta).
{profile_uuid} identifica el perfil allotjat del VASP. Envia les teves consultes de transferència mitjançant POST a aquesta URL i consulta primer l’endpoint d’identitat corresponent per verificar amb qui estàs parlant.
La segona forma és una Travel Address per cartera: indica una cartera concreta del client de Didit (receiving_travel_address a la seva llibreta d’adreces), de manera que la teva consulta arriba a aquella cartera sense que el client l’hagi de fer coincidir pel número de compte o pel nom del titular. Respon 404 quan la cartera s’ha eliminat o quan consta com a pertanyent a un altre VASP.
Endpoints TRP
Didit utilitza la versió3.2.1 del protocol TRP a l’URL base https://trp.didit.me.
Tots els endpoints intercanvien JSON sobre HTTPS.
Hi ha dues capçaleres TRP importants:
api-version- la versió del protocol TRP que parles, per exemple3.2.1. És obligatòria en les consultes i en els dos callbacks.request-identifier- el teu identificador únic de la sol·licitud, que es torna a enviar a les capçaleres de la resposta. És obligatòria en les consultes i en els dos callbacks.
400.
Cada resposta de Didit inclou api-version: 3.2.1 i torna a enviar el teu request-identifier.
GET /identity
Retorna la identitat de l’operador de la plataforma. No cal cap capçalera.GET /trp/identity//
Retorna la identitat del VASP concret amb què estàs a punt d’intercanviar - utilitza-la per verificar el nom i el LEI abans d’enviar dades personals identificables (PII). Didit fa la mateixa comprovació en sentit invers quan inicia l’intercanvi: si la identitat que informa el teu endpoint no coincideix amb el LEI o el nom esperats, l’intercanvi s’avorta.404 quan el perfil no existeix o quan la seva configuració de Travel Rule està desactivada.
POST /trp/inquiries//
Envia una consulta de transferència: tu ets el VASP ordenant, i el client de Didit és el VASP beneficiari.
En aquest canal els actius s’identifiquen pel DTI, i un DTI identifica un token en una única blockchain.
Didit mapeja avui
BTC (4H95J0R2X), ETH (X9J9K872S) i USDC en nou xarxes, i se’n podran afegir més amb el temps.
Consulta identificadors d’actius TRP per a la llista completa.
Una consulta amb un DTI que Didit no reconeix s’accepta igualment i es mostra al VASP beneficiari amb el DTI com a codi d’actiu.
Una resposta 200 indica que la consulta s’ha acceptat per al seu processament; 400 vol dir que falten les capçaleres TRP o el cos no és vàlid; 404 vol dir que el perfil (o la cartera d’una Travel Address per cartera) és desconeguda o està desactivada; i 422 vol dir que la sol·licitud utilitza una extensió TRP: Didit no en suporta cap, de manera que es rebutja una capçalera api-extensions o una clau extensions al cos.
Tornar a enviar el mateix request-identifier és idempotent: es reutilitza la consulta original en lloc de duplicar-la.
Després, Didit crea la transferència entrant a l’aplicació del client i la resol segons la llibreta d’adreces de carteres i la política del client.
Identifica el beneficiari per la cartera que especifica una Travel Address per cartera; si no, per la primera adreça de cartera de IVMS101.beneficiary.accountNumber; o, si no n’hi ha cap, pel nom de beneficiaryPersons[0].naturalPerson comparat amb les entrades de cartera verificades del client.
La resposta 200 porta la resposta quan Didit la pot donar de seguida:
{"approved": {"address": "...", "callback": "..."}}quan la consulta s’ha aprovat automàticament. Didit no envia aquesta aprovació també al teucallback.{"rejected": "NOT_ENOUGH_COUNTERPARTY_DATA: inquiry carries no beneficiary identification"}quan la consulta no indica ni el beneficiari ni una adreça de cartera; per això inclou sempre les dues coses.{"version": "3.2.1"}quan la decisió està pendent del client de Didit. La resolució arribarà més tard com a POST a la teva URL decallback, amb un dels dos cossos següents.
originatingVASP és el que el client de Didit veu com a VASP ordenant de la transferència.
Didit no fixa cap termini per a les consultes que envies, i un client de Didit que cancel·la una consulta no t’envia cap rebuig, així que aplica el teu propi temps d’espera.
Després de rebre una aprovació i difondre la transferència on-chain, tanca l’intercanvi fent un POST a la URL approved.callback que se’t va donar:
{ "canceled": "reason" } a la mateixa URL en cas que avortis la transferència.
txid passa la transferència del costat del beneficiari a FINISHED; canceled la passa a CANCELLED.
Els dos callbacks responen 204 quan s’han processat, 404 per a un token desconegut o una transferència que ja no espera aquest callback, i 400 per a un cos que no porta cap dels dos camps del callback.
Resolució de les consultes que Didit t’envia
Quan un client de Didit inicia una transferència cap a tu per TRP, Didit:- Obté
/identitya l’arrel de l’amfitrió de la URL de consulta (https://{your-host}/identity) i verifica el nom i el LEI informats respecte al que espera el client. Quan la ruta prové del directori de Didit, el teu/identityha d’informar del LEI d’aquella entrada del directori. - Envia un POST d’una consulta de transferència a la teva URL de consulta, amb la mateixa estructura del cos que l’anterior:
asset.dti, unamounten unitats base com a número JSON, uncallbacki el payloadIVMS101.
2xx es considera lliurada. Una 3xx es rebutja, perquè els redireccionaments no se segueixen, i qualsevol altra resposta es registra a la línia de temps de la transferència del client amb el codi d’estat que has retornat, per exemple refused by counterparty (HTTP 403): ....
Totes dues crides porten les dues capçaleres TRP, i Didit no segueix els redireccionaments HTTP en aquestes crides, així que serveix /identity i la URL de consulta directament.
Si /identity no és accessible, no informa d’un LEI o n’informa un de diferent quan el client n’ha subministrat un, o informa d’un nom que no coincideix, Didit s’atura abans d’enviar la consulta i la transferència del client passa a COUNTERPARTY_VASP_NOT_REACHABLE.
Si després el POST de la consulta falla o el teu endpoint la respon amb un estat 4xx o 5xx, la transferència també passa a COUNTERPARTY_VASP_NOT_REACHABLE.
El callback d’aquella consulta apunta a l’endpoint de resolució de Didit (/trp/callbacks/resolution/{token}/).
Respon fent un POST amb els mateixos cossos de resolució que fa servir Didit: { "approved": { "address": "...", "callback": "..." } } per aprovar (el teu callback és on Didit publicarà la confirmació on-chain), o { "rejected": "reason" } per rebutjar.
Envia-hi les dues capçaleres TRP.
Didit respon amb 204 un cop gestionada la sol·licitud, 404 quan la transferència ja no espera cap resolució, i 400 per a una aprovació sense address o quan el callback no és una URL http(s) pública que Didit pugui cridar.
En aprovar, la part de Didit passa a COMPLETED. Quan el client informa del hash on-chain, Didit fa un POST de { "txid": "..." } al callback de confirmació que has indicat (o de { "canceled": "reason" } si la transferència es cancel·la abans).
Els tokens de callback són secrets amb una única finalitat, no endevinables, generats per a cada transferència: tracta les URL completes de callback com a confidencials, i tingues en compte que una resolució només s’accepta mentre la transferència encara n’espera una.
Recollida per correu electrònic
Si no t’arriba cap canal de protocol i el client de Didit ha subministrat el teu correu de compliment, Didit recorre al correu electrònic: el teu contacte de compliment rep un missatge que identifica la VASP ordenant amb un enllaç segur de recollida d’un sol ús. No cal cap compte, clau d’API ni integració: el token de l’enllaç és l’autenticació. En obrir l’enllaç es mostra l’intercanvi pendent. L’API que hi ha a sota (que la pàgina allotjada gestiona en nom teu) és pública:amount és el decimal emmagatzemat tal qual, de manera que porta les 18 xifres decimals completes.
decision és accept o decline. En acceptar, indica el nom del beneficiari tal com consta als teus registres, perquè la part ordenant pugui fer la seva comparació de noms, o envia la teva resposta IVMS 101 completa com a ivms_response, i aleshores prevaldrà el nom del beneficiari que hi consta.
En rebutjar, pots indicar un decline_reason (data_mismatch, not_our_customer, wallet_not_hosted, sanctions, risk_appetite, jurisdiction, insufficient_data o other) i un decline_detail de fins a 512 caràcters, obligatori per a other.
Una acceptació sense beneficiary_name es registra com a discrepància quan el remitent ha subministrat un nom de beneficiari, tret que el remitent hagi desactivat la comparació de noms.
La resposta és el {"status": "..."} resultant: COMPLETED quan els noms coincideixen, COUNTERPARTY_MISMATCHED_DATA quan no coincideixen, o COUNTERPARTY_VASP_GENERAL_DECLINE després d’un rebuig.
Només pots respondre una vegada, mentre la transferència espera la teva resposta: després de respondre, després que la transferència es cancel·li, o després del seu termini de confirmació, tots dos endpoints retornen 410, i un token desconegut retorna 404.
La sol·licitud mostra els camps de l’ordenant que comparteix el remitent i un ivms_request IVMS 101, en l’idioma de la teva jurisdicció, i se’t recorda 72, 24 i 6 hores abans del termini mentre no hagis respost.
Sunrise: transferències liquidades abans de l’intercanvi
Quan una transferència arriba a la cartera d’un client de Didit abans que hagi tingut lloc cap intercanvi de Travel Rule, perquè en aquell moment no existia cap via compartida, les dades es poden lliurar igualment després de la liquidació. Envia el payload de la Travel Rule al client de Didit (la teva contrapart beneficiària) pel teu canal habitual i demana-li que la registri. El client cridaPOST /v3/travel-rule/inbound/ amb la cadena del dipòsit, el txid, l’adreça de la cartera, l’import, la moneda i les teves dades de l’ordenant.
Inclou la identitat de la teva VASP (nom, LEI i Travel Address) com a originating_vasp en aquest payload, perquè el registre de la transferència del client de Didit indiqui qui ha enviat el dipòsit.
Queda associat a aquella transferència i mai no crea ni modifica la teva entrada al directori.
El LEI ha de ser un LEI vàlid de 20 caràcters, i la Travel Address ha de ser-ne una de vàlida, o el registre es rebutja.
Com entrar al directori de VASP de Didit
Didit manté un directori de VASP que consulta l’encaminament de transferències sortints dels seus clients. Les entrades provenen d’aquestes fonts:- El registre provisional MiCA de l’ESMA de proveïdors de serveis de criptoactius, consultat cada setmana: el teu nom, el LEI i l’estat membre d’origen, si hi figures.
- El directori públic de TRISA, consultat cada setmana: qui ets, el teu país i la teva inscripció a TRISA.
- El registre global de LEI, que omple el teu LEI, altres noms legals i el país.
- L’atribució d’analítica de blockchain, quan una adreça de cartera de destinació es resol cap al teu servei d’intercanvi o de custòdia: Didit afegeix o relaciona la teva entrada i conserva el nom atribuït com a àlies.
- El personal de Didit, que gestiona les entrades: identificadors d’encaminament i inscripcions de xarxa verificats, contactes de compliment, àlies, i marques amb les seves entitats.
originating_vasp en un registre sunrise o una adreça de viatge en una transferència, es queda en la transferència d’aquest client i mai no canvia la teva entrada. Les consultes de transferència que tu enviïs a un client de Didit tampoc no creen ni actualitzen la teva entrada.
La teva entrada encamina una transferència cap a tu quan porta un endpoint TRP verificat, una inscripció de xarxa que el remitent pot utilitzar, o un contacte de compliment per a l’alternativa del correu electrònic. Una adreça de compliment d’un dels teus propis dominis que respon a una sol·licitud mitjançant el seu enllaç de resposta esdevé un contacte que qualsevol client de Didit pot utilitzar.
Mentre la teva entrada no porti cap ruta, un client de Didit només pot contactar amb tu mitjançant els camps que transmet a cada transferència: la teva adreça de viatge, el teu identificador de xarxa (counterparty_gtr_vasp_code, counterparty_trust_membership_id, counterparty_verifyvasp_id o counterparty_sygna_vasp_code), o el teu correu de compliment (counterparty_vasp_email).
Per ser accessible avui, comparteix la teva adreça de viatge, el teu identificador de xarxa o el teu correu de compliment amb els clients de Didit amb qui treballes.
Llista de verificació per a VASP contrapart
- Ja utilitzes TRP: comparteix la teva adreça de viatge i el teu LEI amb el client de Didit; les seves transferències de
BTC,ETHiUSDCarriben com a consultes TRP estàndard al teu endpoint. Respon a la consulta: una resposta posterior requereix l’amfitrió públic de TRP de Didit, que encara no està disponible. - Ets a GTR, TRUST o VerifyVASP: comparteix el teu identificador de xarxa; les transferències arriben per aquesta xarxa quan el client de Didit té la seva pròpia membresia allà. Didit llegeix la teva resposta de GTR o VerifyVASP des de la xarxa, però no la de TRUST; per tant, publica també un endpoint TRP quan s’hagi de completar un intercanvi mitjançant TRUST. Xarxes de Travel Rule expliquen quan això canvia.
- Ets a Sygna Bridge: comparteix el teu codi VASP de Sygna; quan el client de Didit té la seva pròpia membresia de Sygna, la teva resposta de permís fa que la transferència es completi o es rebutgi un cop Didit la llegeix mitjançant sondeig.
- Encara no tens cap canal de protocol: dona al client de Didit un correu de compliment supervisat; rebràs enllaços per recollir les consultes i podràs respondre des de la pàgina allotjada sense cap integració.
- Una transferència ja s’ha liquidat: lliura les dades mitjançant el registre sunrise a través del client de Didit.
- També vols originar transferències cap a VASP de Didit: demana a la teva contrapart la seva adreça de viatge des de la configuració de Travel Rule de Didit, i després segueix POST /trp/inquiries quan l’amfitrió públic de TRP de Didit estigui en funcionament.
Següents passos
Travel Rule
El producte per als clients: cicle de vida, configuració, vies i l’API /v3/.
Giny de titularitat de la cartera
Com es recullen les proves de titularitat de la part beneficiària quan una cartera és autoallotjada.
Registre sunrise
Registre de dades de la Travel Rule per a dipòsits que ja s’han liquidat on-chain.
Webhooks
Com els clients de Didit observen cada transició de l’intercanvi al seu costat.