Skip to Content
API ReferenceBridge API

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 istisna GET /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şı null ise köprü o zincirden henüz hiçbir şey duymamıştır.
  • signed, delivered ve applied gö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. delivered ve applied, 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. queued ve committed Solidus zincir zamanlarıdır.
  • İletim ve uygulama aynı işlemdir, bu yüzden delivered ile applied eş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’sindeki solidus_getBridgeMessages yönteminden gelir (https://rpc.solidus.network, {"domain", "fromSeq", "limit"}). Baytların keccak256 özeti messageId’dir.
  • Hatalar application/problem+json biçimindedir: type, title, status, code ve detail.
curl https://bridge.solidus.network/v1/status

Yollar

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.

AlanAnlamı
solidusSolidus RPC’sine ulaşılıp ulaşılamadığı, son kesinleşmiş yükseklik ve ne zaman denetlendiği
validatorstotal doğrulayıcıdan kaçının imzaladığı (signing) ve bir mesajın gerektirdiği threshold
chains[].heartbeatAgeSecsKö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[].nextDomainSeqBu zincir için bir sonraki mesajın taşıyacağı sıra numarası
chains[].sequenceGapBu zincir için kuyruğa alınmış ama henüz uygulanmamış mesaj sayısı
supplyEmanet, 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:

ParametreAnlamı
route<fromKey>:<toKey>: /v1/routes içinden iki farklı zincir anahtarı, örneğin sepolia:fuji
tokenusdc
amountTaban birimlerde pozitif bir tam sayı (6 ondalık; 1000000 1 USDC eder)
fastFillHı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.

AlanAnlamı
hash, domain, chainKeyHangi emanet ve hangi zincirde
finalRecipient, refundAddressOnu kimin alabileceği ve iadenin nereye gideceği (yoksa null)
amount, deadlineTaban birimde tutar ve son tarih
credentialTypeHash, issuerDidHashEmanetin adını verdiği kimlik bilgisi; vermediği sürece null
stateheld, released veya refunded
gateReasonHedefteki 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
Last updated on