Bridge API
Solidus Bridge, bir Solidus kimlik bilgisinin durumunu sahibinin seçtiği zincirlere taşır. Böylece oradaki bir uygulama, arkasındaki veriyi görmeden bir koşulu denetleyebilir. Test ağlarında ayrıca bir USDC transferini kimlik bilgisine bağlar: onu yalnızca kimlik bilgisi olan bir adres alabilir. API, köprünün gözlediği şeyi okur. İmzalamaz ve hiçbir şeyi taşımaz.
Temel URL: https://bridge.solidus.network
Ağ: testnet. /v1/routes yanıtı "network": "testnet" der. Buradaki her şey test ağlarında
çalışır ve parasal değeri yoktur.
Kurallar
- Salt okunur. Her yol bir
GET’tir ve herkes çağırabilir. Tek istisnaGET /v1/me/exports’tur; bir Solidus oturum token’ı ister (Authorization: Bearer ...). null, köprünün bunu ölçmediği anlamına gelir. Sıfır demek değildir, sağlıklı demek de değildir. Kalp atışı yaşınullise köprü o zincirden henüz hiçbir şey duymamıştır.signed,deliveredveappliedgözlem zamanlarıdır.signed, köprünün imza eşiğine ulaşıldığını ilk gördüğü anı kaydeder; bu yüzden yoklama aralığı kadar bir alt sınırı vardır.deliveredveapplied, ağ geçidinin uygulanma olayını ilk gördüğü anı kaydeder; bunu hedef blok o zincirin kuralına göre kesinleştikten sonra görür, yani blokun arkasından kesinleşme beklemesi kadar gelir. Bu bekleme hesaba katılmadan bunlardan imzalama ya da iletim gecikmesi hesaplamayın.queuedvecommittedSolidus zincir zamanlarıdır.- İletim ve uygulama aynı işlemdir, bu yüzden
deliveredileappliedeşittir. - Bir mesajı herkes iletebilir. Yetki imzalardadır, gönderende değil. İmzaları
GET /v1/attestations/{domain}/{seq}ile okuyup hedefteki ayna sözleşmesine gönderin. Mesajın baytları Solidus RPC’sindekisolidus_getBridgeMessagesyönteminden gelir (https://rpc.solidus.network,{"domain", "fromSeq", "limit"}). Baytların keccak256 özetimessageId’dir. - Hatalar
application/problem+jsonbiçimindedir:type,title,status,codevedetail.
curl https://bridge.solidus.network/v1/statusYollar
GET /health
API süreci ayaktaysa {"status":"ok"} döner. Zincirler hakkında bir şey söylemez.
GET /v1/routes
Köprünün yapılandırıldığı zincirler. Canlı yapılandırmadan okunur.
{
"network": "testnet",
"solidusDomain": 50002,
"chains": [
{ "key": "sepolia", "name": "Ethereum Sepolia", "vm": "evm", "domain": 11155111,
"chainId": 11155111, "explorer": "https://sepolia.etherscan.io",
"functions": ["credentials", "usdc"], "contracts": { "mirror": "0x...", "registry": "0x..." } }
]
}functions, her zincirin neyi desteklediğini listeler. contracts, o zincirdeki dağıtılmış adresleri
listeler.
GET /v1/status
Köprünün zincir zincir gözlediği şey.
| Alan | Anlamı |
|---|---|
solidus | Solidus RPC’sine ulaşılıp ulaşılamadığı, son kesinleşmiş yükseklik ve ne zaman denetlendiği |
validators | total doğrulayıcıdan kaçının imzaladığı (signing) ve bir mesajın gerektirdiği threshold |
chains[].heartbeatAgeSecs | Köprünün zincirin son kalp atışının uygulandığını ilk gördüğü andan bu yana geçen saniye; bu gözlem, hedef blok kesinleştikten sonra yapılır. Bir kapının zincir üzerinde ölçtüğü yaş değildir (kapı, kalp atışının zaman damgasına kendi maxAge’ini ekler ve blok zamanıyla karşılaştırır). Hiç görmediyse null |
chains[].nextDomainSeq | Bu zincir için bir sonraki mesajın taşıyacağı sıra numarası |
chains[].sequenceGap | Bu zincir için kuyruğa alınmış ama henüz uygulanmamış mesaj sayısı |
supply | Emanet, sentetik ve yoldaki toplamlar, difference, bir alert alanı ve checkedAt |
GET /v1/stats?range=24h
Bir pencere üzerindeki sayılar. range: 24h, 7d, 30d veya all. Bilinmeyen bir aralık 24h
üzerinden yanıtlanır ve bunu range alanında söyler.
Alanlar: range, exports, messagesDelivered, medianDeliverySecs, sampleSize ve bir byChain
dizisi. Örneklem yoksa medianDeliverySecs null olur, hiçbir zaman 0 olmaz. sampleSize, kaç
iletimi kapsadığını söyler.
GET /v1/messages?limit=10
En yeni mesajlar önce gelir. limit 1 ile 50 arasına sıkıştırılır, varsayılanı 10’dur.
{ "messages": [ { "messageId": "0x...", "domain": 1399811151, "chainKey": "solana",
"domainSeq": 1035, "kind": "heartbeat", "solidusHeight": 5655587, "state": "applied",
"timestamps": { "queued": "...", "committed": "...", "signed": "...", "delivered": "...", "applied": "..." },
"deliveryTx": "0x..." } ] }GET /v1/messages/{id}
messageId ile tek bir mesaj. Köprü onu görmediyse 404.
GET /v1/attestations/{domain}/{seq}
Bir mesajın doğrulayıcı imzaları; bir hedefe gönderilmeye hazır.
{ "domain": 1399811151, "domainSeq": 1035, "messageId": "0x...", "solidusHeight": 5655587,
"threshold": 3, "signatures": [ { "signer": "0x...", "signature": "0x..." } ] }domain ve seq tam sayı olmalıdır, değilse yol 400 döner. Henüz imza yoksa 404.
GET /v1/credentials/{exportId}
Bir kimlik bilgisi dışa aktarımının, köprünün Solidus’tan en son okuduğu durumu: exportId, domain,
chainKey, holder, issuerDidHash, credentialTypeHash, status (active, revoked, expired ya
da unbound), validUntil, lastMessageId ve updatedAt. Solidus’ta kuyruğa alınan en yeni mesajı
izler; bu yüzden hedef zincir uygulamadan önce revoked diyebilir. Hedefin uygulayıp uygulamadığını
görmek için lastMessageId’nin adını verdiği mesajı GET /v1/messages/{id} ile sorgulayın. Bilinmeyen
bir kimlik için 404 ve code: export_not_found.
GET /v1/me/exports
Arayanın kimlik bilgilerinin dışa aktarımları. Authorization: Bearer <Solidus oturum token'ı> ister.
GET /v1/quotes
Test ağlarındaki kimlik bilgisine bağlı bir USDC transferi için fiyat teklifi. Sorgu parametreleri:
| Parametre | Anlamı |
|---|---|
route | <fromKey>:<toKey>: /v1/routes içinden iki farklı zincir anahtarı, örneğin sepolia:fuji |
token | usdc |
amount | Taban birimlerde pozitif bir tam sayı (6 ondalık; 1000000 1 USDC eder) |
fastFill | Hızlı doldurma teklifi istemek için true (isteğe bağlı) |
{ "lines": [
{ "id": "protocol_fee", "amount": "0", "token": "USDC", "reason": null },
{ "id": "circle_fee", "amount": "100", "token": "USDC", "reason": null },
{ "id": "destination_gas", "amount": "62650400", "token": "AVAX", "reason": null } ],
"receive": "999900", "fastFillAvailable": false, "estimatedSecs": null, "sampleSize": 2 }Her ücret ayrı bir satırdır. Köprünün hesaplayamadığı bir satırın amount değeri null olur ve bir
reason taşır. Onu azaltan herhangi bir satır null ise receive de null olur; yani toplam hiçbir
zaman tahmine dayanmaz. Yeterli karşılaştırılabilir transfer olana kadar estimatedSecs null kalır.
GET /v1/transfers?address=...
Bir adresin USDC transferleri: bir EVM adresi ya da 32 baytlık bir sahip değeri. address zorunludur;
yoksa yol 400 ve code: bad_address döner.
GET /v1/transfers/{id}
Tek bir transfer. Kimlik <sourceTx>:<logIndex> biçimindedir; iki nokta üst üste URL kodlanmalıdır.
Alanlar arasında kind, originDomain, destinationDomain, sender, recipient, amount, fee,
state, sourceTx, destinationTx, messageHash ve timestamps vardır.
GET /v1/escrows/{hash}
Kimlik bilgisine bağlı bir USDC transferinin emaneti. Alıcı onu alana ya da iade edilene kadar hedefte tutulur.
| Alan | Anlamı |
|---|---|
hash, domain, chainKey | Hangi emanet ve hangi zincirde |
finalRecipient, refundAddress | Onu kimin alabileceği ve iadenin nereye gideceği (yoksa null) |
amount, deadline | Taban birimde tutar ve son tarih |
credentialTypeHash, issuerDidHash | Emanetin adını verdiği kimlik bilgisi; vermediği sürece null |
state | held, released veya refunded |
gateReason | Hedefteki kapının şu anda vereceği gerekçe: 1 dışa aktarım yok, 2 etkin değil, 3 düzenleyen yetkili değil, 4 süresi dolmuş, 5 bayat. Emanet henüz bir kimlik bilgisinin adını vermediyse null |