Cara Didit merutekan pertukaran
Ketika pelanggan Didit mengirim transfer, Didit mencoba jalur-jalur ini secara berurutan sesuai prioritas dan menggunakan jalur pertama yang dapat menjangkau Anda:
Tabel di atas mencakup transfer yang dikirim pelanggan Didit.
Ketika Anda mengirim transfer kepada pelanggan Didit, Didit hanya dapat menerimanya sebagai permintaan transfer
TRP, setelah host TRP publik Didit aktif (host tersebut belum merespons, lihat endpoint TRP), atau, setelah penyelesaian, sebagai pendaftaran sunrise: saat ini tidak ada jalur jaringan maupun saluran email yang mengirimkan transfer masuk kepada pelanggan Didit.
Jalur jaringan (GTR, TRUST, VERIFYVASP, SYGNA) berjalan melalui keanggotaan di sisi pengirim.
Saat ini, keanggotaan itu harus berupa keanggotaan jaringan milik pelanggan Didit yang terhubung: Didit belum memiliki keanggotaan platform di jaringan mana pun dan sedang melakukan onboarding sebagai penyedia.
GTR tidak disertakan secara default, dan persyaratan keanggotaan yang sama berlaku untuk keempat jaringan.
Pengirim sebaiknya memeriksa objek networks di Dapatkan Pengaturan Travel Rule: didit berarti keanggotaan Didit membawa aplikasi tersebut sebagai peserta miliknya sendiri di jaringan, own berarti keanggotaan pelanggan yang terhubung, off berarti perutean platform dinonaktifkan, dan unavailable berarti belum ada yang dapat mengirim melalui jaringan tersebut untuk aplikasi ini.
Hingga Didit memiliki keanggotaan platform, tidak ada jaringan yang melaporkan didit.
Mengaktifkan Travel Rule tidak mengaktifkan keanggotaan jaringan.
Lihat jaringan Travel Rule untuk mengetahui apa yang dapat dijangkau setiap jaringan saat ini.
Jika Anda berada di salah satu jaringan tersebut dan pelanggan Didit memiliki keanggotaannya sendiri di sana, bagikan pengenal jaringan Anda kepadanya, dan transfer akan sampai kepada Anda melalui jaringan yang sudah Anda operasikan.
Melalui SYGNA, jawaban izin Anda menyelesaikan atau menolak transfer: Didit melakukan polling status transfer setiap 5 menit, dan juga mendaftarkan https://trp.didit.me/sygna/callbacks/permission/{token}/ sebagai callback untuk setiap permintaan izin, dengan token yang dibuat untuk transfer tersebut.
Callback itu berada di host TRP publik Didit, yang belum melayani permintaan.
permission_status dengan nilai ACCEPTED memindahkan transfer pengirim ke COMPLETED, dan REJECTED memindahkannya ke COUNTERPARTY_VASP_GENERAL_DECLINE, atau ke COUNTERPARTY_MISMATCHED_DATA ketika reject_code bernilai BVRC007 (nama penerima tidak cocok).
Callback memerlukan tanda tangan Anda: tanpa tanda tangan yang valid, callback menjawab 401 dengan {"status": "INVALID_SIGNATURE"}, 404 untuk token yang tidak dikenal, dan 200 lagi untuk keputusan yang sudah diterapkan.
Jika tidak ada keanggotaan bersama, TRP adalah jalur yang perlu direncanakan: bagikan Travel Address Anda kepada pelanggan Didit, dan transfer mereka akan sampai ke endpoint TRP Anda. Jawaban yang Anda berikan dalam respons permintaan akan langsung menyelesaikan atau menolak transfer; jawaban yang Anda kirim kemudian ke callback Didit memerlukan host TRP publik Didit, yang belum aktif.
Ketika tidak ada jalur yang dapat mengidentifikasi Anda, Didit menjalankan satu langkah resolusi tambahan: atribusi analitik blockchain.
Dompet tujuan dicocokkan dengan data analitik blockchain, dan ketika dompet tersebut diatribusikan ke layanan bursa atau kustodi Anda, Didit mencatat nama Anda di direktori VASP-nya dan mencoba kembali jalur-jalur dengan nama tersebut.
Ini berarti Anda dapat diidentifikasi meskipun pengirim hanya memberikan alamat.
Transfer yang diatribusikan hanya dirutekan secara otomatis kepada Anda setelah entri direktori Anda memiliki rute: endpoint TRP yang terverifikasi, daftar jaringan, atau kontak kepatuhan (lihat Masuk ke direktori VASP Didit).
Dengan demikian, rantai resolusi lengkapnya adalah: pelanggan Didit yang telah membuktikan kendali atas dompet (INTERNAL) dan Travel Address yang disimpan pengirim untuk dompet itu, lalu jalur protokol dan jaringan, kemudian analitik blockchain.
Travel Address
Setiap VASP Didit dengan Travel Rule aktif memiliki Travel Address, yaitu string ringkas yang diawalita dan mengodekan URL endpoint permintaan transfer TRP pribadinya.
Pelanggan Didit membaca Travel Address mereka dari pengaturan Travel Rule dan membagikannya kepada pihak lawan. Ketika pelanggan Didit memberikan Travel Address-nya kepada Anda, Anda sudah memiliki semua yang diperlukan untuk menghubunginya melalui TRP.
Pengodean mengikuti konvensi Travel Address TRP:
- Hapus awalan
ta. - Dekode sisanya dengan Base58Check (alfabet Bitcoin, checksum double-SHA256).
- Byte hasil dekode adalah URL permintaan tanpa skemanya; tambahkan
https://di depannya. - URL selalu memuat pasangan kueri
t=i(tipe: inquiry).
{profile_uuid} mengidentifikasi profil VASP yang di-hosting. Kirimkan permintaan transfer Anda (POST) ke URL tersebut, dan kueri endpoint identitas yang sesuai terlebih dahulu untuk memverifikasi siapa yang sedang Anda ajak berkomunikasi.
Bentuk kedua adalah Travel Address per dompet: Travel Address ini menunjuk satu dompet milik pelanggan Didit (receiving_travel_address pada buku alamatnya), sehingga permintaan Anda sampai ke dompet tersebut tanpa pelanggan harus mencocokkannya berdasarkan nomor rekening atau nama pemegang rekening. Travel Address ini merespons dengan 404 setelah dompet dihapus atau tercatat sebagai milik VASP lain.
Endpoint TRP
Didit menggunakan TRP API versi3.2.1 di URL dasar https://trp.didit.me.
Semua endpoint bertukar JSON melalui HTTPS.
Dua header TRP berikut penting:
api-version: versi protokol TRP yang Anda gunakan, misalnya3.2.1. Wajib ada pada inquiry dan pada kedua callback.request-identifier: ID unik Anda untuk permintaan tersebut, yang dikembalikan di header respons. Wajib ada pada inquiry dan pada kedua callback.
400.
Setiap respons dari Didit membawa api-version: 3.2.1 dan mengembalikan request-identifier Anda.
GET /identity
Mengembalikan identitas operator platform. Tidak ada header yang diperlukan.GET /trp/identity//
Mengembalikan identitas VASP spesifik yang akan menjadi lawan transaksi Anda. Gunakan ini untuk memverifikasi nama dan LEI sebelum mengirim PII. Didit melakukan pemeriksaan yang sama secara terbalik saat ia yang memulai: jika identitas yang dilaporkan endpoint Anda tidak cocok dengan LEI atau nama yang diharapkan, pertukaran dibatalkan.404 jika profil tidak ada atau pengaturan Travel Rule-nya dinonaktifkan.
POST /trp/inquiries//
Mengirim inquiry transfer. Anda adalah VASP pengirim, dan pelanggan Didit adalah VASP penerima.
Pada jalur ini, aset diidentifikasi dengan DTI, dan satu DTI mengidentifikasi token pada satu blockchain.
Saat ini Didit memetakan
BTC (4H95J0R2X), ETH (X9J9K872S), dan USDC di sembilan jaringan, dengan aset lain yang akan ditambahkan seiring waktu.
Lihat Pengidentifikasi aset TRP untuk daftar lengkapnya.
Inquiry dengan DTI yang tidak dikenali Didit tetap diterima dan ditampilkan kepada VASP penerima dengan DTI sebagai kode aset.
Respons 200 berarti inquiry diterima untuk diproses. 400 berarti header TRP tidak lengkap atau body tidak valid. 404 berarti profil (atau dompet dari alamat per dompet) tidak dikenal atau dinonaktifkan. 422 berarti permintaan menggunakan ekstensi TRP: Didit tidak mendukung ekstensi apa pun, sehingga header api-extensions atau kunci extensions dalam body ditolak.
Mengirim ulang request-identifier yang sama bersifat idempoten: inquiry yang asli digunakan kembali, bukan diduplikasi.
Kemudian Didit membuat transfer masuk di aplikasi pelanggan dan mencocokkannya dengan buku alamat dompet dan kebijakan pelanggan.
Penerima dicocokkan berdasarkan dompet yang disebut oleh Travel Address per dompet. Jika tidak ada, dicocokkan dengan alamat dompet pertama di IVMS101.beneficiary.accountNumber. Jika itu juga tidak ada, dicocokkan dengan nama beneficiaryPersons[0].naturalPerson terhadap entri dompet terverifikasi milik pelanggan.
Respons 200 membawa jawabannya jika Didit dapat memberikannya segera:
{"approved": {"address": "...", "callback": "..."}}jika inquiry disetujui otomatis. Didit tidak mengirim persetujuan itu lagi kecallbackAnda.{"rejected": "NOT_ENOUGH_COUNTERPARTY_DATA: inquiry carries no beneficiary identification"}jika inquiry tidak menyebutkan penerima maupun alamat dompet, jadi selalu sertakan keduanya.{"version": "3.2.1"}jika keputusan menunggu pelanggan Didit. Resolusi kemudian dikirim sebagai POST ke URLcallbackAnda, dengan salah satu dari dua body berikut.
originatingVASP adalah yang dilihat pelanggan Didit sebagai VASP pengirim transfer tersebut.
Didit tidak menetapkan batas waktu untuk inquiry yang Anda kirim, dan pelanggan Didit yang membatalkan inquiry tidak mengirimkan penolakan kepada Anda, jadi terapkan batas waktu Anda sendiri.
Setelah Anda menerima persetujuan dan menyiarkan transfer on-chain, tutup pertukaran dengan mengirim POST ke URL approved.callback yang telah diberikan kepada Anda:
{ "canceled": "reason" } ke URL yang sama.
txid memindahkan transfer di sisi penerima ke FINISHED. canceled memindahkannya ke CANCELLED.
Kedua callback menjawab 204 setelah diproses, 404 untuk token yang tidak dikenal atau transfer yang tidak lagi menunggu callback tersebut, dan 400 untuk body yang tidak berisi salah satu dari dua kolom callback.
Menanggapi permintaan yang dikirim Didit kepada Anda
Ketika pelanggan Didit mengirim transfer kepada Anda melalui TRP, Didit:- Mengambil
/identitydi root host dari URL permintaan Anda (https://{your-host}/identity), lalu memverifikasi nama dan LEI yang dilaporkan terhadap yang diharapkan pelanggan. Jika rute berasal dari direktori Didit,/identityAnda harus melaporkan LEI dari entri direktori tersebut. - Mengirim POST permintaan transfer ke URL permintaan Anda dengan struktur isi yang sama seperti di atas:
asset.dti,amountdalam satuan dasar sebagai angka JSON,callback, dan payloadIVMS101.
2xx yang dihitung sebagai terkirim. Jawaban 3xx ditolak karena pengalihan (redirect) tidak diikuti. Jawaban lainnya dicatat pada linimasa transfer pelanggan beserta kode status Anda, misalnya refused by counterparty (HTTP 403): ....
Kedua panggilan membawa kedua header TRP, dan Didit tidak mengikuti pengalihan HTTP pada keduanya, jadi layani /identity dan URL permintaan secara langsung. Jika /identity tidak dapat dijangkau, tidak melaporkan LEI, melaporkan LEI yang berbeda padahal pelanggan memberikan LEI, atau melaporkan nama yang tidak cocok, Didit berhenti sebelum mengirim permintaan dan transfer pelanggan berpindah ke COUNTERPARTY_VASP_NOT_REACHABLE. Jika POST permintaan kemudian gagal, atau endpoint Anda menjawabnya dengan status 4xx atau 5xx, transfer juga berpindah ke COUNTERPARTY_VASP_NOT_REACHABLE.
callback dalam permintaan tersebut mengarah ke endpoint resolusi Didit (/trp/callbacks/resolution/{token}/).
Balas dengan mengirim isi resolusi melalui POST, sama seperti yang digunakan Didit: { "approved": { "address": "...", "callback": "..." } } untuk menyetujui (callback Anda adalah tempat Didit akan mengirim konfirmasi on-chain), atau { "rejected": "reason" } untuk menolak.
Kirim kedua header TRP bersama body tersebut.
Didit menjawab 204 setelah diproses, 404 jika transfer tidak lagi menunggu resolusi, dan 400 untuk persetujuan tanpa address atau yang callback-nya bukan URL http(s) publik yang dapat dipanggil Didit.
Setelah disetujui, sisi Didit beralih ke COMPLETED. Setelah pelanggan melaporkan hash on-chain, Didit mengirim POST { "txid": "..." } ke callback konfirmasi yang Anda berikan (atau { "canceled": "reason" } jika transfer dibatalkan lebih dahulu).
Token callback hanya dapat digunakan untuk satu tujuan dan tidak dapat ditebak, serta dibuat khusus untuk setiap transfer. Perlakukan URL callback lengkap sebagai rahasia, dan perhatikan bahwa resolusi hanya diterima selama transfer masih menunggu resolusi.
Pengambilan melalui email
Jika tidak ada kanal protokol yang menjangkau Anda dan pelanggan Didit memberikan email kepatuhan Anda, Didit beralih ke email: kontak kepatuhan Anda menerima pesan yang menyebutkan VASP pengirim beserta tautan pengambilan aman sekali pakai. Tidak diperlukan akun, kunci API, atau integrasi. Token tautan itulah autentikasinya. Saat tautan dibuka, halaman menampilkan pertukaran yang tertunda. API di baliknya, yang dipanggil oleh halaman yang di-hosting tersebut atas nama Anda, bersifat publik:amount adalah desimal tersimpan apa adanya, sehingga memuat seluruh 18 tempat desimal.
decision bernilai accept atau decline. Pada accept, berikan nama penerima sebagaimana tercatat di data Anda agar sisi pengirim dapat menjalankan pencocokan nama. Atau kirim respons IVMS 101 lengkap sebagai ivms_response, yang nama penerimanya kemudian diutamakan.
Pada decline, Anda dapat memberikan decline_reason (data_mismatch, not_our_customer, wallet_not_hosted, sanctions, risk_appetite, jurisdiction, insufficient_data atau other) dan decline_detail hingga 512 karakter, yang wajib diisi untuk other.
Accept tanpa beneficiary_name dicatat sebagai ketidakcocokan jika pengirim memberikan nama penerima, kecuali pengirim mematikan pencocokan nama.
Respons berupa {"status": "..."} hasil, yaitu COMPLETED jika nama cocok, COUNTERPARTY_MISMATCHED_DATA jika tidak cocok, atau COUNTERPARTY_VASP_GENERAL_DECLINE setelah penolakan.
Anda hanya dapat merespons sekali, selama transfer masih menunggu Anda. Setelah Anda merespons, setelah transfer dibatalkan, atau setelah tenggat konfirmasinya, kedua endpoint mengembalikan 410, dan token yang tidak dikenal mengembalikan 404.
Permintaan menampilkan kolom-kolom pengirim yang dibagikan oleh sisi pengirim dan ivms_request IVMS 101 dalam bahasa yurisdiksi Anda. Anda juga akan diingatkan 72, 24, dan 6 jam sebelum tenggat selama Anda belum menjawab.
Sunrise: transfer yang diselesaikan sebelum pertukaran
Ketika transfer mencapai dompet pelanggan Didit sebelum pertukaran Travel Rule terjadi, karena belum ada jalur bersama pada saat itu, data tetap dapat dikirim setelah penyelesaian. Kirim payload Travel Rule kepada pelanggan Didit (pihak lawan Anda yang merupakan penerima) melalui kanal normal Anda, lalu minta mereka mendaftarkannya. Mereka memanggilPOST /v3/travel-rule/inbound/ dengan jaringan tempat deposit, txid, alamat dompet, jumlah, mata uang, dan data originator Anda.
Sertakan identitas VASP Anda, yaitu nama, LEI, dan Travel Address, sebagai originating_vasp dalam payload tersebut, sehingga transfer pelanggan Didit mencatat siapa yang mengirim deposit.
Data ini tetap berada pada transfer tersebut dan tidak pernah membuat atau mengubah entri direktori Anda.
LEI harus berupa LEI 20 karakter yang valid, dan Travel Address harus valid. Jika tidak, pendaftaran akan ditolak.
Masuk ke direktori VASP Didit
Didit memelihara direktori VASP yang dijadikan rujukan oleh perutean keluar pelanggan Didit. Entri berasal dari sumber-sumber berikut:- Registri interim MiCA ESMA untuk penyedia layanan aset kripto, dibaca setiap minggu: nama Anda, LEI, dan negara anggota asal jika Anda terdaftar di sana.
- Direktori publik TRISA, dibaca setiap minggu: siapa Anda, negara Anda, dan entri Anda di TRISA.
- Registri LEI global, yang mengisi LEI Anda, nama hukum lain, dan negara.
- Atribusi analitik blockchain, ketika dompet tujuan dipetakan ke layanan bursa atau kustodian Anda: Didit menambahkan atau mencocokkan entri Anda dan menyimpan nama hasil atribusi sebagai alias.
- Staf Didit, yang mengkurasi entri: pengenal perutean dan daftar jaringan yang telah mereka verifikasi, kontak kepatuhan, alias, serta merek beserta entitasnya.
originating_vasp pada pendaftaran sunrise atau Travel Address pada suatu transfer, hanya berlaku untuk transfer pelanggan tersebut dan tidak pernah mengubah entri Anda.
Permintaan informasi transfer yang Anda kirim ke pelanggan Didit juga tidak membuat atau memperbarui entri Anda.
Entri Anda akan merutekan transfer ke Anda ketika entri tersebut memuat endpoint TRP yang terverifikasi, daftar jaringan yang dapat digunakan pengirim, atau kontak kepatuhan untuk cadangan email.
Alamat kepatuhan di domain Anda sendiri yang menjawab permintaan melalui tautan respons akan menjadi kontak yang dapat digunakan oleh setiap pelanggan Didit.
Selama entri Anda belum memiliki rute, pelanggan Didit hanya dapat menjangkau Anda melalui kolom yang mereka teruskan pada setiap transfer: Travel Address Anda, pengenal jaringan Anda (counterparty_gtr_vasp_code, counterparty_trust_membership_id, counterparty_verifyvasp_id, atau counterparty_sygna_vasp_code), atau email kepatuhan Anda (counterparty_vasp_email).
Agar dapat dijangkau saat ini, bagikan Travel Address, pengenal jaringan, atau email kepatuhan Anda kepada pelanggan Didit yang bekerja dengan Anda.
Daftar periksa untuk VASP pihak lawan
- Anda sudah menjalankan TRP: bagikan Travel Address dan LEI Anda kepada pelanggan Didit - transfer
BTC,ETH, danUSDCmereka akan tiba sebagai permintaan TRP standar di endpoint Anda. Jawab dalam respons permintaan Anda: respons berikutnya memerlukan host TRP publik Didit, yang belum aktif. - Anda menggunakan GTR, TRUST, atau VerifyVASP: bagikan pengenal jaringan Anda; transfer akan tiba melalui jaringan tersebut jika pelanggan Didit memiliki keanggotaan sendiri di sana. Didit membaca jawaban GTR atau VerifyVASP Anda dari jaringan, tetapi tidak membaca jawaban TRUST, sehingga Anda juga perlu mempublikasikan endpoint TRP ketika pertukaran melalui TRUST harus diselesaikan. Jaringan Travel Rule menjelaskan kapan hal itu berubah.
- Anda menggunakan Sygna Bridge: bagikan kode VASP Sygna Anda; ketika pelanggan Didit memiliki keanggotaan Sygna sendiri, jawaban izin Anda akan menyelesaikan atau menolak transfer setelah Didit membacanya melalui polling.
- Anda belum memiliki kanal protokol: berikan kepada pelanggan Didit email kepatuhan yang dipantau - Anda akan menerima tautan untuk mengambil permintaan dan dapat merespons dari halaman yang di-hosting tanpa integrasi apa pun.
- Suatu transfer sudah diselesaikan: kirimkan datanya kepada pelanggan Didit melalui pendaftaran sunrise.
- Anda juga ingin mengirim ke VASP Didit: minta Travel Address pihak lawan Anda dari pengaturan Travel Rule Didit mereka, lalu ikuti POST /trp/inquiries setelah host TRP publik Didit aktif.
Langkah berikutnya
Travel Rule
Produk untuk pelanggan: siklus hidup, pengaturan, jalur, dan API /v3/.
Widget kepemilikan dompet
Cara bukti kepemilikan dari sisi penerima dikumpulkan ketika dompet bersifat swakelola.
Pendaftaran sunrise
Mendaftarkan data Travel Rule untuk deposit yang sudah diselesaikan secara on-chain.
Webhook
Cara pelanggan Didit mengamati setiap perubahan status transfer di sisi mereka.