Köprü sessizleştiğinde bir kapı neden kapanır ve maxAge nasıl seçilir
Solidus Bridge üzerine kurulmuş bir kapı, köprü sessizleştiğinde 5 numaralı gerekçeyle, STALE ile reddeder. maxAge ne kadar sessizliğin fazla olduğunu belirler ve onu siz seçersiniz. Bu sayfa Sepolia, Fuji ve Arc'taki EVM kapısını kapsar. Veriyi görmeden bir koşulu denetleyin sayfası kapıyı kurar. Doğrulayıcıların nasıl imzaladığı ve ağ geçidinin nasıl ilettiği sayfası bir iletim duraksamasının nasıl göründüğünü gösterir.
Bayat ne demek
Kapı denetimlerini sabit bir sırada çalıştırır ve ilk başarısızlığı bildirir: aktarım yok (1), etkin değil (2), veren yetkili değil (3), süresi dolmuş (4), bayat (5). STALE sonuncudur. Aktarımı olmayan bir sahip gidip bir tane alabilir. Sessiz bir köprünün ardındaki sahip yalnızca bekleyebilir.
Son denetim, aynanın saklanan tek kalp atışını okur. Hiçbiri uygulanmamışsa ya da şu geçerliyse STALE döndürür:
hb.solidusTimestamp == 0 || hb.solidusTimestamp + maxAge < block.timestamp
maxAge çağıranın seçimidir, saniye cinsinden. onlyCredentialed modifier'ının üçüncü argümanı ve @solidus-network/bridge içindeki checkGate işlevinin maxAge alanıdır. Kapı kütüphanesinin varsayılanı yoktur. Sepolia'daki örnek kasa bir gün geçirir (MAX_AGE() değeri 2026-10-08 tarihinde 86400 okundu); bu bir örnektir, tavsiye değil. STALE alan bir sahip, diğer dört denetimi aynanın son duyduğuna göre geçmiştir.
Bir kapı sessizlikte neden kapanır
Bir hedef zincir bir iptali yalnızca bir mesajdan öğrenir. Hiçbiri uygulanmazsa zincir "hiçbir şey değişmedi" ile "bir şey değişti ve kimse bana söylemedi" arasındaki farkı ayırt edemez. Son duruma sonsuza dek güvenmek, taşıma katmanı kapalıyken iptal edilmiş bir belgeyi kabul ederdi.
Kalp atışları kapıya yaşam kanıtı verir. Solidus zinciri, bir blokun sonunda aralığı geçmiş etkin her hedef için, saniye cinsinden blok zamanıyla damgalı bir kalp atışı kuyruğa alır. Ayna mesajları sıkı sırayla kabul eder; bu yüzden bir kalp atışının uygulanması, ondan önce kuyruğa alınan her mesajın zaten uygulandığı anlamına gelir. Taze bir kalp atışı, aynanın zaman damgasına kadar güncel olduğunu söyler. Eski bir kalp atışı, o andan bu yana geçen zaman hakkında hiçbir şey söylemez.
Dolayısıyla maxAge, kabul ettiğiniz kör penceredir. Son maxAge saniyede kuyruğa alınmış bir iptal henüz uygulanmamış olabilir. Sağlıklı bir köprüde gerçek pencere iletim gecikmesidir. Bir duraksamada maxAge değerine kadar büyür. Bir kimlik belgesi iptal edildiğinde ne olur sayfası bir iptali bu yol boyunca izler.
maxAge seçin
Bu sayfadaki bir sayıyı değil, bir yöntemi kullanın.
- Aralığı ölçün. Hedefiniz için kalp atışları arasındaki aralığı.
- Gecikmeyi ölçün. Kuyruğa alınma zamanından, atışı uygulayan hedef bloğa kadar. İmzalamayı, ağ geçidinin yoklamasını ve bloğa girişi içerir.
- Toplayın. Toplam, sağlıklı bir köprüde bir kalp atışının ulaştığı en eski yaştır; bir sonrakinin uygulanmasından hemen öncesi.
- Kaçırılan atışlar için pay ekleyin. Her biri bir aralık ekler.
- Kesinleşme beklemesini yalnızca önem taşıdığı yerde ekleyin. Bir sözleşme işleminin indiği bloğu okur, bu yüzden bekleme orada sayılmaz.
safeya dafinalizedetiketindeki zincir dışı okumalarda ve API'nin atışı uygulanmış gördüğü andan başlayanheartbeatAgeSecsdeğerinde sayılır. 2026-10-08 tarihinde yaklaşık 17:08 UTC'de bir Sepolia kalp atışılatestetiketinde 312 saniye,safeetiketinde 348 vefinalizedetiketinde 564 saniye eski okundu.
Yönetişim her hedef için aralığı belirler, bu yüzden daha sonra yeniden ölçün. 2026-10-08 tarihli bir gün:
| Nicelik | Sepolia | Fuji | Arc |
|---|---|---|---|
| Kuyruğa alınan kalp atışları arasındaki aralık, saniye | 600 ile 601 (12 aralık) | 600 ile 601 (12 aralık) | 600 ile 601 (11 aralık) |
| Kuyruktan hedef bloğa, medyan ve en çok, saniye | 73 ve 181 (11 atış) | 22 ve 44 (13 atış) | 15 ve 49 (12 atış) |
| Bir sonraki atıştan önceki en eski yaş, en çok, saniye | 781 (10 çift) | 645 (12 çift) | 630 (11 çift) |
| Hedef bloktan API'nin "uygulandı" anına, saniye | 797 ile 1167 (11 atış) | 22 ile 84 (13 atış) | 4 ile 5 (12 atış) |
Her aynada lastHeartbeat() değerini 17:06 ile 17:25 UTC arasında 34 kez okumak, zincir başına üç kalp atışı buldu; 600 ve 601 saniye arayla.
Bu, tek bir zincir ve tek bir gün üzerinde bir aritmetiktir, kopyalanacak bir değer değil. Sepolia'nın en eski sağlıklı yaşı olan 781 saniye artı 600 saniyelik üç kaçırılmış atış, 2,581 saniye eder.
Saat. İki zincir ayrı saat tutar ve bir kalp atışı hedefin saatinin ilerisinde olabilir. Bu yüzden kapı maxAge değerini zaman damgasına ekler. Zaman damgasını blok zamanından çıkarmak taşma yapar ve geri alırdı. Yukarıdaki gecikme rakamları iki saat arasındaki farkı içerir. Zincir dışında checkGate işlevine now değerini, en son bloğun zaman damgası olarak geçirin; çünkü varsayılan olarak makinenizin saatidir. API'nin heartbeatAgeSecs değeri yine farklı bir ölçüdür: API'nin atışı uygulanmış gördüğü andan sayılır. 17:09:32 UTC'de Sepolia için 619 dedi; aynanın kendi yaşı 372 idi.
İki değer karşılaştırıldı
İki örnek, Sepolia sayılarına karşı.
| Sıkı, 900 sn | Gevşek, 86,400 sn | |
|---|---|---|
| Sağlıklı köprü | Açık; ölçülen en eski yaşa göre 119 sn payla | Açık |
| Bir kalp atışı kaçırıldı | Bir sonraki atış uygulanana kadar dürüst sahiplere kapalı | Açık |
| İletim durur | Son kalp atışının zaman damgasından yaklaşık 900 sn sonra kapanır | Ondan sonra bir güne kadar açık kalır |
| Kaçırabileceği iptaller | Son 15 dakikada kuyruğa alınanlar | Son günde kuyruğa alınanlar |
Aralık artı gecikmeye eşit ya da altındaki bir değer, sağlıklı bir köprüde dürüst sahipleri reddeder. maxAge 600 olsaydı, ölçülen 10 döngüde Sepolia kapısı her döngünün 14 ile 181 saniyesi boyunca kapalı olurdu. Gevşek bir değer bundan kaçınır ve daha uzun bir kör pencereye mal olur. Onu, geç gelen bir iptalin sözleşmenize neye mal olduğuna göre ayarlayın.
Doğru mesajı gösterin
STALE sahip hakkında hiçbir şey söylemez. Kimlik belgesi, aynanın son bildiği hâliyle diğer dört denetimi geçti ve sahibin yaptığı hiçbir şey sonucu değiştirmez. Bunu söyleyin:
Bu ağdaki denetimler duraklatıldı. Sorun kimlik belgenizde değil. Daha sonra yeniden deneyin.
Onlara yeniden doğrulatmayın, yeniden aktarmalarını ya da belgeyi vereni aramalarını söylemeyin. İptal olan NOT_ACTIVE gibi ifade etmeyin. İşlemi göndermeden önce checkGate çağırın, böylece sahip bunu geri alınan bir işlem için ödeme yapmadan önce okur. gateReasonName(result.reason) stale döndürür ve heartbeatAgeSecs yaşı verir. Durum sayfası kalp atışı yaşını canlı gösterir.
Tek komutla görün
Sepolia aynasının son kalp atışını ve en son blok zamanını vekil üzerinden okuyun, sonra kapının formülünü üç maxAge değeri için uygulayın. Ayna sözleşmesini okuyun sayfası --nonce 0 değerini açıklar.
M=0x0a5a0d19206f436d67B7b87BF4c889d5b769517A
R=https://rpc.solidus.network/bridge/11155111
HB=$(cast call $M 'lastHeartbeat()(uint64,uint64,bytes32)' --rpc-url $R --nonce 0 | head -1 | cut -d' ' -f1)
NOW=$(cast block latest -f timestamp --rpc-url $R)
echo "heartbeat $HB block $NOW age $((NOW - HB))"
for MAXAGE in 60 900 86400; do
if (( HB == 0 || HB + MAXAGE < NOW )); then echo "maxAge $MAXAGE -> STALE"; else echo "maxAge $MAXAGE -> fresh"; fi
done
heartbeat 1791480193 block 1791480300 age 107
maxAge 60 -> STALE
maxAge 900 -> fresh
maxAge 86400 -> fresh
2026-10-08 tarihinde saat 17:25 UTC'de çalıştırıldı. Solidus kalp atışını 17:23:13 ile damgaladı ve Sepolia bloğu 107 saniye sonradır; bu yüzden 60 değerinde bir maxAge reddeder.
Kontrol, sözleşmesi olmayan bir adresi okur. Bir hata basar, yaş basmaz.
cast call 0x0000000000000000000000000000000000000001 'lastHeartbeat()(uint64,uint64,bytes32)' \
--rpc-url $R --nonce 0
# Error: could not decode output; did you specify the wrong function return data type?
Bridge API başvurusu heartbeatAgeSecs değerini tanımlar. Entegrasyon adımları geliştiriciler sayfasında, kısa cevaplar SSS sayfasında.
Okumaya devam edin
- Ayna sözleşmesini Solidity, TypeScript ve komut satırından okuyun
- Verify'ın düzenlediği bir kimlik belgesini başka bir zincire aktarma ve Solidus'un yolda neleri denetlediği
- Bir veren bir kimlik belgesini iptal ettiği an ile başka bir zincirdeki bir sözleşmenin onu reddettiği an arasında ne olur
- Kimlik belgesi ayna sözleşmesi neler yapabilir ve neler yapamaz, zincir üzerinde gösterilmiş