curl -X POST https://verification.didit.me/v3/travel-rule/widget/{token}/proofs/ \
-H 'Content-Type: application/json' \
-d '{"method": "MESSAGE_SIGNING"}'import requests
url = "https://verification.didit.me/v3/travel-rule/widget/{token}/proofs/"
payload = {
"wallet_address": "<string>",
"chain": "<string>"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({wallet_address: '<string>', chain: '<string>'})
};
fetch('https://verification.didit.me/v3/travel-rule/widget/{token}/proofs/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://verification.didit.me/v3/travel-rule/widget/{token}/proofs/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'wallet_address' => '<string>',
'chain' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://verification.didit.me/v3/travel-rule/widget/{token}/proofs/"
payload := strings.NewReader("{\n \"wallet_address\": \"<string>\",\n \"chain\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://verification.didit.me/v3/travel-rule/widget/{token}/proofs/")
.header("Content-Type", "application/json")
.body("{\n \"wallet_address\": \"<string>\",\n \"chain\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://verification.didit.me/v3/travel-rule/widget/{token}/proofs/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"wallet_address\": \"<string>\",\n \"chain\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"proof_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"method": "MESSAGE_SIGNING",
"status": "PENDING",
"wallet_address": "<string>",
"chain": "<string>",
"deposit_address": "<string>",
"expected_amount": "<string>",
"expires_at": "2023-11-07T05:31:56Z",
"challenge": "<string>",
"rejection_reason": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"attempts": 123,
"failure_reason": ""
}{
"proof_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"method": "MESSAGE_SIGNING",
"status": "PENDING",
"wallet_address": "<string>",
"chain": "<string>",
"deposit_address": "<string>",
"expected_amount": "<string>",
"expires_at": "2023-11-07T05:31:56Z",
"challenge": "<string>",
"rejection_reason": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"attempts": 123,
"failure_reason": ""
}{
"detail": "<string>",
"code": "",
"status": "PENDING",
"proof_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"method": "MESSAGE_SIGNING",
"max_attempts": 123,
"attempts_used": 123,
"attempts_remaining": 123
}{
"detail": "<string>",
"code": "",
"status": "PENDING",
"proof_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"method": "MESSAGE_SIGNING",
"max_attempts": 123,
"attempts_used": 123,
"attempts_remaining": 123
}بدء إثبات ملكية المحفظة عبر API - ودجت Travel Rule
ابدأ إثبات ملكية المحفظة في Didit برمز جلسة الودجت: توقيع الرسالة، اختبار Satoshi، لقطة شاشة أو إقرار. اختيار الطريقة مجددًا يستأنفها.
curl -X POST https://verification.didit.me/v3/travel-rule/widget/{token}/proofs/ \
-H 'Content-Type: application/json' \
-d '{"method": "MESSAGE_SIGNING"}'import requests
url = "https://verification.didit.me/v3/travel-rule/widget/{token}/proofs/"
payload = {
"wallet_address": "<string>",
"chain": "<string>"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({wallet_address: '<string>', chain: '<string>'})
};
fetch('https://verification.didit.me/v3/travel-rule/widget/{token}/proofs/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://verification.didit.me/v3/travel-rule/widget/{token}/proofs/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'wallet_address' => '<string>',
'chain' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://verification.didit.me/v3/travel-rule/widget/{token}/proofs/"
payload := strings.NewReader("{\n \"wallet_address\": \"<string>\",\n \"chain\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://verification.didit.me/v3/travel-rule/widget/{token}/proofs/")
.header("Content-Type", "application/json")
.body("{\n \"wallet_address\": \"<string>\",\n \"chain\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://verification.didit.me/v3/travel-rule/widget/{token}/proofs/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"wallet_address\": \"<string>\",\n \"chain\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"proof_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"method": "MESSAGE_SIGNING",
"status": "PENDING",
"wallet_address": "<string>",
"chain": "<string>",
"deposit_address": "<string>",
"expected_amount": "<string>",
"expires_at": "2023-11-07T05:31:56Z",
"challenge": "<string>",
"rejection_reason": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"attempts": 123,
"failure_reason": ""
}{
"proof_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"method": "MESSAGE_SIGNING",
"status": "PENDING",
"wallet_address": "<string>",
"chain": "<string>",
"deposit_address": "<string>",
"expected_amount": "<string>",
"expires_at": "2023-11-07T05:31:56Z",
"challenge": "<string>",
"rejection_reason": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"attempts": 123,
"failure_reason": ""
}{
"detail": "<string>",
"code": "",
"status": "PENDING",
"proof_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"method": "MESSAGE_SIGNING",
"max_attempts": 123,
"attempts_used": 123,
"attempts_remaining": 123
}{
"detail": "<string>",
"code": "",
"status": "PENDING",
"proof_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"method": "MESSAGE_SIGNING",
"max_attempts": 123,
"attempts_used": 123,
"attempts_remaining": 123
}معلمات المسار
token جلسة مبهم يُعاد عند إنشاء جلسة الأداة.
الجسم
طريقة الإثبات التي اختارها المستخدم النهائي. يجب أن تكون إحدى الطرق المسموح بها في allowed_methods ضمن السياق.
MESSAGE_SIGNING, SATOSHI_TEST, SCREENSHOT, SELF_DECLARATION القيمة الافتراضية هي wallet_address الخاص بالجلسة. يجب أن يطابق محفظة التحويل عندما تكون الجلسة مرتبطة بتحويل.
128القيمة الافتراضية هي سلسلة الكتل الخاصة بالجلسة.
32الاستجابة
تم استئناف الإثبات المفتوح بالفعل لهذه الطريقة.
MESSAGE_SIGNING, SATOSHI_TEST, SCREENSHOT, SELF_DECLARATION PENDING: اختار المستخدم النهائي هذه الطريقة ولم يُبت في الإثبات بعد. يؤدي التوقيع الفاشل أو الإيداع التجريبي غير القابل للقراءة أو غير المؤكد بعد إلى إبقاء الإثبات PENDING مع وجود failure_reason، حتى يتمكن المستخدم النهائي من المحاولة مجددًا؛ ويُعاد فحص إيداع SATOSHI_TEST المُرسل تلقائيًا حتى تُغلق نافذته الزمنية، بينما تنتظر لقطة شاشة SCREENSHOT المُرسلة مراجعتك. VERIFIED: تم إثبات الملكية. REJECTED: الإيداع التجريبي غير صحيح فعليًا (مُرسِل آخر، أو ليس المبلغ المتوقع إلى عنوان الإيداع، أو أقدم من التحدي، أو معاملة أثبتت بالفعل محفظة أخرى) أو قام المراجِع برفض لقطة الشاشة؛ ويوضح failure_reason السبب بدقة. الإثبات المرفوض نهائي ويستهلك إحدى محاولات الجلسة. EXPIRED: لم يعد بالإمكان البت في الإثبات (أُغلقت نافذته الزمنية، أو غيّر المستخدم النهائي الطريقة، أو انتهت جلسة الأداة، أو تغيّر حامل المحفظة)؛ ويوضح failure_reason السبب بدقة.
PENDING, VERIFIED, REJECTED, EXPIRED معرّف السلسلة القياسي لإدخال دفتر العناوين الذي يخصه الإثبات، على سبيل المثال ETH، BTC، SOL، TRX.
عنوان الإيداع الذي يجب على العميل إرسال مبلغ اختبار Satoshi إليه. يتوفر فقط في إثبات SATOSHI_TEST.
المبلغ الدقيق على السلسلة، بالعملة الأصلية للإيداع، الذي يجب أن يتطابق معه إيداع اختبار Satoshi. موجود فقط في إثبات SATOSHI_TEST.
الموعد النهائي للنافذة الزمنية لاختبار ساتوشي الخاص بهذا الإثبات. يظهر فقط في إثبات من نوع SATOSHI_TEST؛ ويتم تمديد expires_at الخاص بجلسة عنصر الواجهة لتغطيته عند تقديم SATOSHI_TEST.
رسالة صادرة عن Didit يوقّعها العميل بمحفظته. تتوفر فقط في إثبات MESSAGE_SIGNING.
سبب رفض الإثبات، كجملة باللغة الإنجليزية للمستخدم النهائي. يظهر فقط عندما تكون status هي REJECTED؛ ويكون فارغاً عندما يرفض المراجِع لقطة شاشة (تبقى ملاحظتك لديك).
عدد المرات التي تم فيها تقديم أدلة لهذا الإثبات (التوقيعات، معرّفات المعاملات، عمليات الرفع).
سبب عدم نجاح المحاولة الأخيرة، أو سبب إغلاق الإثبات. يكون فارغاً إذا لم يفشل أي شيء.
, SIGNATURE_INVALID, SIGNATURE_UNSUPPORTED_SCHEME, DEPOSIT_NOT_FOUND, DEPOSIT_UNCONFIRMED, DEPOSIT_LOOKUP_FAILED, DEPOSIT_MISMATCH, DEPOSIT_STALE, TXID_REUSED, CHAIN_UNSUPPORTED, WINDOW_EXPIRED, OWNERSHIP_CHANGED, METHOD_SWITCHED, REVIEW_REJECTED, ABANDONED