Belgeler

RPC API başvurusu

Bir düğümün cüzdanlara sunduğu HTTP arayüzü: dört uç nokta, durum ve hatalar için JSON, bloklar ve ödemeler için sıkıştırılmış ikili kodlama.

Test ağı: coinlerin değeri yoktur

Herkese açık test düğümünün temel URL'si https://node.tint.top adresidir. Arayüz asla bir anahtar veya tutar görmez: cüzdan hazır ödemeleri gönderir ve şifresini kendisi çözdüğü bütün blokları okur.

Uç noktalar

Yöntem ve yolYanıtı
GET /v1/statusZincirin nerede olduğu, JSON olarak.
GET /v1/blocks/{height}Kesinleşmiş bir blok, tel kodlamasında.
GET /v1/blocks?from=NN yüksekliğinden itibaren ödemeli bloklar, bir blok toplu paketi olarak.
POST /v1/transactionsTel kodlamasında bir ödeme alır; tanımlayıcısını JSON olarak yanıtlar.

GET /v1/status

istek
curl -s https://node.tint.top/v1/status
yanıt (örnek değerler)
{
  "chain_id": 6073471695170043905,
  "height": 128431,
  "tip": "9f3c…e21a",
  "genesis": "04b7…c9d0",
  "queued": 0,
  "pools": [
    { "asset": 1, "native": 20000000000000, "other": 10000000000000, "fee_bps": 30 }
  ]
}
AlanAnlamı
chain_idAğın tanımlayıcısı; her imzaya ve blok özetine bağlıdır.
heightSon kesinleşmiş bloğun yüksekliği.
tipSon kesinleşmiş bloğun özeti, onaltılık olarak.
genesisİlk bloğun özeti, onaltılık olarak. İki test ağı aynı chain_id'yi paylaşabilir; bu alan onları ayırt eder.
queuedBlok bekleyen ödemeler.
pools[].assetHavuzun yerel coine karşı takas ettiği coin (1, TUSD'dir).
pools[].native, pools[].otherHavuzun elinde tuttuğu miktar, birim olarak (1 coin = 100,000,000 birim), son kesinleşmiş bloğa göre.
pools[].fee_bpsHavuzun komisyonu on binde bir olarak; 30, %0,3'tür.

GET /v1/blocks/{height}

Kesinleşmiş bir bloğu application/octet-stream olarak döndürür. Kesinleşmiş bir blok asla değişmez; bu yüzden yanıt Cache-Control: public, max-age=31536000, immutable taşır. Sayısal olmayan bir yükseklik invalid_height, bilinmeyen bir yükseklik not_found yanıtı verir.

GET /v1/blocks?from=N

N yüksekliğinden itibaren ödeme içeren blokları, yanıtın kapsadığı son yükseklikle (through) birlikte tek bir blok toplu paketi (application/octet-stream) olarak döndürür. Yetişmeye çalışan bir cüzdan, through değerinden sonraki yükseklikten yeniden sorar. Yanıt zincirle birlikte büyür, bu yüzden Cache-Control: no-store ile gönderilir. from tam sayı olmalıdır.

POST /v1/transactions

İstek gövdesi olarak tel kodlamasında hazır bir ödeme gönderin. Onu cüzdan oluşturur; biçim tint-core içindeki wire.rs modülünde tanımlıdır: sabit genişlikli alanlar, her değer için tek geçerli kodlama, sondaki bayt yok.

istek
curl -s -X POST https://node.tint.top/v1/transactions \
  -H 'content-type: application/octet-stream' \
  --data-binary @payment.bin
yanıt
{ "txid": "5be1…07af" }

Bir işlem, varlık (u32), bir son kullanma yüksekliği (u64) ve bir tür (ödeme için 0, takas için 1) ile başlar; ardından bir paket gelir: bayraklar, bir değer dengesi, bir çapa, eylem sayısı ve ispatlarıyla eylemler. Bir takas, satın alınan coini, ödenen tutarı ve ikinci bir paketi ekler.

Hatalar

Hatalar JSON'dur: {"error":{"code":"...","message":"..."}}.

HTTPcodeAnlamı
400malformedGövde bir ödeme değil.
400invalid_heightYükseklik veya from tam sayı değil.
404not_foundBu yükseklikte kesinleşmiş blok yok veya böyle bir kaynak yok.
409double_spendBu ödemenin bir notası zaten harcanmış.
409conflictBekleyen başka bir ödeme aynı notalardan birini harcıyor.
409price_movedHavuz artık bu takasın istediğini vermiyor.
413too_largeÖdeme, zincirin izin verdiğinden büyük.
422rejectedÖdeme zincirin bir kuralını çiğniyor; ileti hangisi olduğunu söyler.
429rate_limitedBu istemci adresi istek bütçesini kullandı. Retry-After başlığından sonra yeniden deneyin.
500internalDüğüm denetleyemedi veya kodlayamadı.
503busy, queue_fullDüğüm başka ödemeleri doğruluyor veya kuyruğu dolu. Yeniden deneyin; Retry-After: 1.

İstek sınırları

Varsayılan olarak her istemci adresi sürekli saniyede 50 istek yapabilir, ani artış 100'dür ve tüm istemcilerde aynı anda en fazla 4 ödeme doğrulanır. İşletmeciler ikisini de değiştirebilir. Bir ters vekil sunucunun arkasında düğüm, istemcileri vekil sunucunun X-Forwarded-For içine yazdığı son adrese göre sayar; önceki girdilere inanmaz.

Örnek: zinciri izlemek

python (sunucu tarafı)
import json, time, urllib.request

BASE = "https://node.tint.top"

while True:
    with urllib.request.urlopen(f"{BASE}/v1/status", timeout=10) as r:
        status = json.load(r)
    print(status["height"], status["queued"])
    time.sleep(5)

Bir düğüm işletmecisinin bu arayüzden yine de öğrenebileceği şey, bir ödemenin geldiği ağ adresidir. Tutarlar, göndericiler ve alıcılar ispatın ve şifreli notaların içindedir.