Tam zincirli oyunun saat döngüsünü oluşturmak için OPStack nasıl kullanılır?

Yazar: Gametaverse

Genelde oyunlar döngü tabanlıdır. Bir oyun döngüsü, tipik olarak kullanıcı girişinin işlenmesi, oyun durumunun güncellenmesi ve oyun dünyasının oluşturulmasından oluşan yinelemeli bir süreçtir. Bu döngü, oyun çalışırken devam eder ve oyun dünyasının akmasını sağlamak için genellikle saniyede onlarca ila yüzlerce kez çalışır.

Bununla birlikte, blok zincirinin mimarisi itme tabanlıdır. Blockchain, ağdaki düğümler aracılığıyla bilgi paylaşan ve depolayan dağıtılmış bir veritabanıdır. Bir düğüm yeni bir işlem (transfer, sözleşme çağrısı vb.) oluşturduğunda, işlem ağa gönderilir ve diğer düğümler işlemi aldıktan sonra bunu doğrular ve blok zincirine ekler. Bu pasif bir süreçtir, düğümler aktif olarak yeni işlemler aramayacak, ağdaki diğer düğümlerin yeni işlemler göndermesini bekleyecektir. Bu nedenle, blok zincirinin mimarisinin itme tabanlı olduğu söylenir.

Bu nedenle, tam zincirli oyunda saat döngülerine sahip bir döngü sistemi uygulamak çok önemlidir. Ne de olsa, sözde "özerk dünya"da, hepimiz bazı NPC'lerin veya sanal ortamların blok zincirine itilen aşağıdaki işlem girdilerini pasif bir şekilde geliştirmek yerine zaman içinde otomatik olarak gelişebileceğini umuyoruz.

@therealbytes, Conway's Game of Life'ın otomatik bir tik-tik uygulamasını çalıştıran OP Stack'e dayalı bir kavram kanıtı onay zinciri (saat döngülerine sahip zincir) geliştirdi, bakalım bunu nasıl uyguladığını görelim.

Çeviriyi basit tutmak için, tik'i kelimenin tam anlamıyla "tik" olarak çeviriyoruz, bu da "döngü saat döngüsü" anlamına geliyor.

Ticking-Optimizm, Optimism Bedrock toplama mimarisine dayanan "Ticking Blockchain"in konsept kanıtı uygulamasıdır.

Tik zincirinde "tik sözleşmesi" adı verilen özel bir akıllı sözleşme vardır ve her blok protokol tarafından otomatik olarak çağrılacaktır. Bu, diğer akıllı sözleşmelerin, kullanıcıların işlem göndermesine gerek kalmadan belirli zamanlarda veya aralıklarla otomatik olarak tetiklenmesine olanak tanır.

Nasıl başarılır

Optimism'in yeni modüler toplama mimarisi Optimism Bedrock, "Mevduat İşlemi" adı verilen yeni bir işlem türü sunar. Normal işlemlerden farklı olarak, mevduat işlemleri:

  • Katman 1'den bloklar.

  • İmza doğrulaması gerekmez.

  • L1 üzerinden L2 gazı satın alın, böylece L2 gazı iade edilemez.

Orijinal Bedrock'ta para yatırma işlemleri iki şey için kullanılıyordu:

  • Doğrudan L1'e gönderilen işlemleri yürütün.

  • Her blokta önceden konuşlandırılmış L2 sözleşmeleri için L1 özelliklerini (sayı, zaman damgası, hash vb.) ayarlayın.

İkinci durumda, işlemler toplama düğümleri tarafından oluşturulur. Gaz ücreti ödemez ve kullanılan gaz gaz havuzundan düşülmez.

Ticking-Optimizm, toplama düğümünü değiştirir ve ayrıca aynı şekilde çalışan bir "tik işlemi" oluşturur, ancak L1 özelliğini ayarlamak yerine, önceden 0x4200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000. Bu sözleşme, hedef değişkenini ayarlayarak başka bir sözleşmeyi çağırabilir.

Motivasyon

Bilet zincirlerinin gücünü göstermek için, blok zincirinde birden fazla NPC'nin (oyuncu olmayan karakterlerin) harita etrafında hareket ettiği bir oyun hayal edin. Titreşim zinciri olmadan iki ana tasarım yaklaşımımız var:

  • Tembel güncelleme. İstemci tarafında, NPC'ler sürekli hareket ediyor gibi görünür, ancak konumları yalnızca kullanıcılar onlarla etkileşime geçmek için işlem gönderdiğinde zincir üzerinde güncellenir. Sözleşme daha sonra zincir üzerindeki son güncellemesine ve o zamandan beri geçen blok sayısına göre NPC'nin yeni konumunu hesaplar.

  • Manuel işaretleme. Haritadaki her NPC'nin konumunu ayarlayan bir güncelleme işlevi tanımlıyoruz ve harici bir hesabın onu periyodik olarak aramasını sağlıyoruz.

Bir tickchain ile çözüm, manuel işaretlemeye benzer, ancak onay sözleşmesi, güncelleme işlevini manuel yerine otomatik olarak çağırır.

Manuel keneler yerine kene zincirinin "otomatik kene" kullanmanın avantajları şunlardır:

  • Güncellemeler anlaşma ile garanti edilir.

  • Güncelleme, bloktaki tüm işlemlerden önce gerçekleştirilecek ve protokolün bir parçası olduğu için önlenemez.

  • Güncelleme işlemleri normal gaz piyasasına katılmaz.

Ancak, otomatik işaretler özel bir blok zinciri gerektirir. Güncelleme hızı aynıysa, manuel ve otomatik işaretleme, düğümde aynı bilgi işlem kaynaklarını gerektirir. Öte yandan, tembel güncellemeler genellikle daha ucuzdur çünkü zincir üstü güncellemeler daha küçük ve daha seyrektir.

Ek olarak, güncellenmesi gereken durum büyüdükçe onay işlemlerinin hesaplama maliyeti de artar. Bu, geliştiriciler üzerinde, uygulamalarını maliyetlerin asla zincirin destekleyebileceğini aşmayacak şekilde tasarlamaları için ek bir baskı oluşturur.

Bu büyük dezavantajlara rağmen, otomatik işaretlemeler, belirli uygulama türleri için tembel güncellemelerden daha uygundur.

  1. Durum her zaman açıkça zincirde ve günceldir

Tikler, akıllı sözleşmelerin açık form ifadeleri kullanılarak güncellenen dinamik bir duruma sabit maliyetle erişmesini sağlar.

Durum (yukarıdaki örnekte, NPC'nin konumu) her zaman zincir üzerinde sabit, nispeten düşük bir gaz maliyetiyle okunabilir. Ancak son güncellemeden bu yana blok sayısı arttıkça mevcut durumu hesaplama maliyeti artacak ve gas maliyeti daha da artacaktır.

Sabit bir hızla hareket eden bir varlığın konumunu güncelliyorsak, son ayarlanan konumundan herhangi bir yığında nerede olması gerektiğini ve güncellemeden bu yana parça sayısını hesaplayabiliriz. Bu işlemin maliyeti, güncellemeler arasındaki blok sayısıyla artmaz.

Öte yandan, güncellediğimiz durum Conway'in Hayat Oyunu (veya üç yerçekimi simülasyonu) gibi bir şeyse, güncelleme maliyeti son güncellemeden bu yana adım sayısıyla doğrusal olarak artar. Bu bir problem çünkü kullanıcıların ödemeye razı oldukları veya zincirin destekleyebileceği miktarın ötesine geçebilir.

  1. İstemcilerin farklı işlevleri

Yavaş güncellemelerde, güncelleme mantığının hem akıllı sözleşmede hem de istemcide uygulanması gerekir. İşaretleme ile yalnızca blok zincirinde uygulanması gerekir ve müşteriler zincir üzerindeki olaylara kolayca tepki verebilir.

  1. Kod daha basit ve gözden geçirilmesi daha kolay

Tembel güncellemeler, geliştiricilerin güncelleme mantığını birçok fonksiyona ve akıllı sözleşmeye yaymasına olanak tanır ve her fonksiyon yalnızca belirli işlemler yürütüldüğünde tetiklenir. Buna karşılık, tik-tik yaklaşımı, yalnızca periyodik olarak tetiklenmesi garanti edilen bir güncelleme işlevi gerektirir. İkincisi, durum tutarlılığını ve bütünlüğünü korumayı kolaylaştırır.

Ayrıca, her yeni bir yavaş güncelleme durumu eklendiğinde (örneğin, yeni bir NPC türü), bunu hesaba katmak için tüm güncelleme işlevlerinin değiştirilmesi gerekebilir. Bu, kod tabanını daha karmaşık ve sorunlara açık hale getirir.

  1. Kullanıcılar güncelleme ücretini ödemezler.

Gecikmeli güncellemelerin maliyeti genellikle büyük farklılıklar gösterir ve kullanıcılar işlemlerini, güncelleme yükünün çoğu başkalarına düşecek şekilde düzenleyebilir. İşaretlerle, tüm operasyonların maliyeti nispeten sabittir ve MEV saldırılarına karşı savunmasız değildir.

Conway'in Game of Life Demosu

Conway's Game of Life'ın etkileşimli bir sürümünü çalıştıran bir tickchain demosu oluşturdum. Zincir, yürütme motorunda hücresel otomat mantığını içerecek şekilde değiştirildi, bu da onu daha verimli hale getirerek, akıllı sözleşme bayt kodu olarak uygulanabilecek olandan daha büyük bir oyun tahtasına izin veriyor.

Demonun kaynak kodu:

Tanıtım videosu:

View Original
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
  • Reward
  • Comment
  • Share
Comment
0/400
No comments
Trade Crypto Anywhere Anytime
qrCode
Scan to download Gate app
Community
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)