Ana içeriğe geç

Ders Yedi - Çok Kullanıcılı Dapps, Kredi Protokolü

İçindekiler

  • Çok Kullanıcılı Dapps
    • SwingSet ve Cosmos Katmanı
      • SwingSet (AgoricVM)
    • cosmic-swingset Paketi
      • Gereklilikler
      • cosmic-swingset ile birden fazla ag-solo
        • 1M IST ile bir ag-solo nasıl başlatılır?
    • Örnek: LendingPool'u 3 ag-solo ve bir node local-chain kullanarak nasıl sergileriz?
      • Dapp UI'nızın doğru ag-soloya bağlandığından emin olun
  • Havuz Temelli Kredi Protokolü
    • Kredi Havuzu Nedir?
    • Kredi Havuzu Nasıl Çalışır?
    • Örnek Kullanım Senaryosu

Çok Kullanıcılı Dapps

Merkezsizleşme, güvenmediğimiz kişilerle iş yapmamızı sağlar. Bu nedenle, dapp'ler genellikle çok kullanıcılı bir şekilde tasarlanır ve kullanıcılar birbirleriyle et interact eder. Örneğin, varlıkları ticaret yapma, NFT'leri kiralamak vb. Bu, bir dapp geliştirici olarak, dapp'lerinizi birden fazla ag-solo kullanarak test etmeniz gerektiği anlamına gelir.

Agoric, simüle edilmiş bir zincir ve bir ag-solo ile hızlı testler yapmak için bir sim-chain özelliği sunar. Bu güzel ve faydalıdır ancak birden fazla ag-solonun paylaşılan bir blockchain ile çalışması gereken bir yapı için, sim-chain yetersiz kalır. Blockchain ve ag-solonun yerel olarak ayrılması için bir yol gereklidir. Bunun için cosmic-swingset paketi vardır. Ama önce, biraz bağlam.

Bağlam: SwingSet ve Cosmos Katmanı

Aşağıdaki diagram, Agoric Teknoloji Yığınını göstermektedir.

stack

Şekil 1: Agoric Teknoloji Yığını, resim Agoric Dökümanlarından alınmıştır

Alt katmanda, Agoric ağı arasında uzlaşmayı sağlayan Cosmos/Tendermint vardır. Onun üzerinde, SwingSet vardır:

SwingSet Nedir?

SwingSet, vatlar arasındaki iletişimi yöneten bir çekirdektir. Ayrıca AgoricVM olarak da adlandırılır. Bir SwingSet çekirdeğindeki her vat, XS JavaScript Engine'in sertleştirilmiş bir versiyonudur. Aşağıda, bir SwingSeti görselleştiren bir diyagram bulunmaktadır:

swingset

Şekil 2: SwingSet Çekirdeği

Yukarıdaki ekran görüntüsü Agoric Swingset Kernel and Userspace, Phase 2 güvenlik denetiminden alınmıştır. Agoric Güvenlikdeki diğer raporları kontrol etmeyi unutmayın.

cosmic-swingset Paketi

cosmic-swingset gerçek bir cosmos düğümünde çalışan bir Agoric VM çalıştırmak için birçok faydalı özelliğe sahiptir.

Gereklilikler

Cosmos SDK Go Programlama Dili kullanılarak oluşturulmuştur. Dolayısıyla, uzlaşma özelliklerine erişmek için, SwingSet ve uzlaşma katmanı arasında köprü kuracak yardımcılara ihtiyacımız var. Bu yardımcılar;

  • agd
  • ag-cosmos-helper

Bu yardımcıları kaynaktan inşa etmemiz gerekiyor;

Agoric Dökümanları - Çok Kullanıcılı Dapp'lerin Başlatılması - Kullanım - 3. ve 4. Adımları kontrol edebilirsiniz, ancak yine de kolaylık olması için adımları buraya koyacağım.

cd agoric-sdk/packages/cosmic-swingset && make

Sonra;

# $PATH içerisinde olması gereken dizini gösterir.
echo ${GOBIN-${GOPATH-$HOME/go}/bin}
# Orada kurulu bir ikiliyi çalıştırmayı dener.
ag-cosmos-helper version --long

Burada önemli olan şey, agd ve ag-cosmos-helper'ın $PATH içerisinde olması gerekliliğidir.

Başarılı bir make işlemi için gereklilikleri cosmic-swingset/README.md adresinden kontrol edebilirsiniz.

cosmic-swingset ile Birden Fazla ag-solo

cosmic-swingset paketi toplamda farklı konfigürasyonlar için 4 senaryo içerir;

  • senaryo1
  • senaryo2
  • senaryo3
  • senaryo0

Ders Yedi - Çok Kullanıcılı Dapps, Kredi Protokolü

İçindekiler

  • Çok Kullanıcılı Dapps
    • SwingSet ve Cosmos Katmanı
      • SwingSet (AgoricVM)
    • cosmic-swingset Paketi
      • Ön Koşullar
      • cosmic-swingset ile Çoklu ag-solos
        • 1M IST ile bir ag-solo nasıl başlatılır?
    • Örnek: LendingPool'u 3 ag-solo ve bir local-chain düğümü kullanarak nasıl sergileriz?
      • Dapp UI'nızın doğru ag-solo'ya bağlandığından emin olun
  • Havuz Temelli Kredi Protokolü
    • Bir Kredi Havuzu nedir?
    • Bir Kredi Havuzu nasıl çalışır?
    • Örnek Kullanım Durumu

Çok Kullanıcılı Dapps

Merkeziyetsizlik, bize güvenmediğimiz kişilerle iş yapma olanağı sağlar. Dolayısıyla, çoğu dapp, kullanıcıların birbiriyle etkileşimde bulunduğu çok kullanıcılı bir şekilde tasarlanmıştır. Örneğin, varlık alışverişi, NFT kiralaması vb. Bu, bir dapp geliştirici olarak, dapp'lerinizi birden çok ag-solo kullanarak test etmeniz gerekebileceği anlamına gelir.

Agoric, bir simüle zinciri ve bir ag-solo'nun birlikte çalıştığı hızlı testler için bir sim-chain özelliği sunar. Bu güzel ve kullanışlıdır, ancak birden çok ag-solo'nun paylaşılan bir blockchain ile çalışması gereken bir yapı için sim-chain yetersiz kalır. Blockchain ve ag-solo'yu yerelde ayırmak için bir yola ihtiyacımız var. Bunun için cosmic-swingset paketi var. Ama önce, biraz bağlam.

Bağlam: SwingSet ve Cosmos Katmanı

Aşağıda Agoric Tech Stack'in bir diyagramı gösterilmektedir

stack

Şekil 1: Agoric Teknoloji Yığını, resim Agoric Dokümantasyonundan alınmıştır

Alt katmanda Cosmos/Tendermint bulunmaktadır ve bu, Agoric ağı boyunca konsensüsü yönetir. Bunun üstünde SwingSet bulunur:

SwingSet Nedir?

SwingSet bir çekirdektir ve vatlar arasındaki iletişimi yönetir. Aynı zamanda AgoricVM olarak da adlandırılır. Bir SwingSet çekirdeği içindeki her vat, XS JavaScript Motorunun sertleştirilmiş bir sürümüdür. Aşağıda bir SwingSet'i görselleştiren bir diyagram bulunmaktadır:

swingset

Şekil 2: SwingSet Çekirdeği

Yukarıdaki ekran görüntüsü Agoric Swingset Çekirdeği ve Kullanıcı Alanı, Faz 2 güvenlik denetiminden alınmıştır. Agoric Güvenlik bölümündeki diğer raporları kontrol etmeyi unutmayın.

cosmic-swingset Paketi

cosmic-swingset gerçek bir cosmos düğümünde çalışan bir Agoric VM'yi çalıştırmak için birçok kullanışlı özelliklere sahiptir.

Ön Koşullar

Cosmos SDK Go Programlama Dili kullanılarak oluşturulmuştur. Bu nedenle, konsensüs özelliklerine erişmek için SwingSet ve konsensüs katmanı arasındaki köprüyü oluşturacak yardımcılara ihtiyacımız var. Bu yardımcılar şunlardır:

  • agd
  • ag-cosmos-helper

Bu yardımcıları kaynaktan oluşturmamız gerekiyor;

Agoric Dokümantasyonu - Çok Kullanıcılı Dapp'ler Başlatma - Kullanım - Adım 3 ve 4'ü kontrol edebilirsiniz, ama kolaylık olması açısından adımları buraya da ekleyeceğim.

cd agoric-sdk/packages/cosmic-swingset && make

Sonra;

# Yolunuzda olması gereken dizini görüntüler.
echo ${GOBIN-${GOPATH-$HOME/go}/bin}
# Orada kurulu olan bir ikiliyi çalıştırmaya çalışır.
ag-cosmos-helper version --long

Burada önemli olan şey, agd ve ag-cosmos-helper'ın $PATH'inizde olması gerektiğidir.

Başarılı bir make işlemi için cosmic-swingset/README.md 'da belirtilen ön koşulları kontrol edin.

cosmic-swingset ile Çoklu ag-solos

cosmic-swingset paketi, farklı konfigürasyonlar için toplam 4 senaryo içerir

Sadece scenario2, çoklu ag-solo kurulumu için yapılandırmayı destekler. Bu yüzden burada ona odaklanacağız. Daha fazla bilgi için cosmic-swingset/README.md ve cosmic-swingset/Makefile adreslerine bakabilirsiniz.

cosmic-swingset paketi kullanarak çok kullanıcılı bir dapp başlatmak için önce ortamı ayarlamanız gerekir;

cd agoric-sdk/packages/cosmic-swingset
make scenario2-setup BASE_PORT=8000 NUM_SOLOS=3
  • NUM_SOLOS: Oluşturmak istediğiniz ag-solos sayısı, varsayılan değer birdir.
  • BASE_PORT: İlk ag-solo için port belirtir, diğer ag-solos'lar için bir arttırır. Yukarıdaki konfigürasyonda kullanılan portlar: 8000, 8001, 8002.

Kurulum tamamlandığında, zinciri başlatabiliriz;

make scenario2-run-chain-economy

Zincir konfigürasyonu için birkaç seçenek vardır. Havuz Tabanlı Kredi Protokolü'nde, Agoric'in ekonomik hizmetlerle etkileşimde bulunmamız gerektiği için scenario2-run-chain-economy konfigürasyonunu kullanıyoruz. Eğer bu tür bir etkileşime ihtiyacınız yoksa, daha hızlı başlaması için basitçe scenario2-run-chain kullanabilirsiniz;

make scenario2-run-chain

Zinciri (yukarıdaki konfigürasyonlardan herhangi biri ile) başlattıktan sonra, artık ag-solos'ları başlatabiliriz;

cd agoric-sdk/packages/cosmic-swingset
make scenario2-run-client BASE_PORT=8000

İkinci ag-solos'u ve sonrakileri başlatırken ayarlanması gereken başka bir ortam değişkeni vardır. Bu, Prometheus tarafından ag-solos ölçümlerini izlemek için bir port belirleyen SOLO_OTEL_EXPORTER_PROMETHEUS_PORT'tur. Bu yüzden, ikinci ag-solo için başlatma komutu şu şekildedir;

cd agoric-sdk/packages/cosmic-swingset
make scenario2-run-client BASE_PORT=8001 SOLO_OTEL_EXPORTER_PROMETHEUS_PORT=9466 # 9465 varsayılan değerdir

Yukarıdaki adımı, uygun ortam değişkenlerini değiştirerek istediğiniz kadar ag-solos için tekrar edebilirsiniz.

1M IST ile bir ag-solo Nasıl Başlatılır?

Bazı çevresel bileşenlere bağlı olan bir dapp'ınız olduğunu hayal edin. Örneğin, LendingPool'un düzgün çalışması için bazı AMM Havuzlarının var olması gerekmektedir. Bu yüzden, creator'un bu havuzu AMM'ye eklemesi gerekiyor. Bu işlem çok fazla IST gerektirir ve creator, varsayılan coin config ile başlatıldığında IST'lerini tüketebilir. Bunu önlemek için şu havalı hileyi kullanıyoruz:

cd agoric-sdk/packages/cosmic-swingset
make scenario2-run-client BASE_PORT=8000 SOLO_COINS='13000000ubld,1000000000000uist,1122000000ibc/usdc1234,3344000000ibc/atom1234'

creator'ın port 8000'de çalıştığını hayal edin, SOLO_COINS ortam değişkeni coin config'i bir dize olarak içerir. Makefile'da bir varsayılan değer ayarlanmıştır, ancak yukarıdaki komutta gösterildiği gibi bu değeri değiştirmek mümkündür. uist sayısına dikkat edin, IST için ondalık basamak sayısı 6'dır yani 1M * 10 ** 6 IST birimi ilgili ag-solos cüzdanına önyüklenir. Bu, scenario2 ile testleriniz için düşünebileceğiniz kullanışlı bir hiledir.

Örnek: LendingPool'u 3 ag-solos ve bir local-chain düğümü kullanarak nasıl sergileriz?

LendingPool'da, 3 ag-solos ve bir yerel blockchain olan bir ağ konfigürasyonu kullanırız. Bu ag-solos'lar;

  • Creator
  • Alice
  • Bob

creator'ın sergileme senaryosu için g

erekli bazı şeyleri önyüklemesi gerektiğini hatırlayın. Aşağıda basit bir diyagram bulunmaktadır;

lendingPool

Yukarıda bu ortamı ayarlamak için kullandığımız birçok komut hakkında konuştuk, bu yüzden hepsini burada bir araya getireceğim;

Birinci Terminal:

cd agoric-sdk/packages/cosmic-swingset
make scenario2-setup BASE_PORT=8000 NUM_SOLOS=3 && make scenario2-run-chain-economy

İkinci Terminal, Creator:

cd agoric-sdk/packages/cosmic-swingset
make scenario2-run-client BASE_PORT=8000 SOLO_COINS='13000000ubld,1000000000000uist,1122000000ibc/usdc1234,3344000000ibc/atom1234'

Üçüncü Terminal, Alice:

cd agoric-sdk/packages/cosmic-swingset
make scenario2-run-client BASE_PORT=8001 SOLO_OTEL_EXPORTER_PROMETHEUS_PORT=9466

Dördüncü Terminal, Bob:

cd agoric-sdk/packages/cosmic-swingset
make scenario2-run-client BASE_PORT=8002 SOLO_OTEL_EXPORTER_PROMETHEUS_PORT=9467

Beşinci Terminal:

cd agoric-sdk/packages/cosmic-swingset/t1
agoric open --no-browser --repl
agoric open --no-browser --hostport=127.0.0.1:8001 --repl
agoric open --no-browser --hostport=127.0.0.1:8002 --repl

t1 dizini, anahtarlar ve adresler gibi kullanıcı bilgilerinin saklandığı yerdir. --hostport bayrağı, bu komutun çalıştırıldığında bağlanacağı ag-solonun adresini belirtir. Bu yüzden ikinci agoric open Alice'in cüzdanını açar ve üçüncüsü Bob'un cüzdanını açar.

Dapp UI'nızın doğru ag-soloya bağlandığından emin olun

Yukarıdaki adımların hepsini tamamladığınızı, LendingPool sözleşmelerini yerleştirdiğinizi ve dapp UI'ı başlattığınızı varsayalım. Dapp UI'nın Agoric ağı ile etkileşim kurmak için bir walletBridge nesnesine ihtiyacı vardır. WalletBridge yalnızca bir kullanıcı onayıyla gönderilebildiğinden, dapp UI temsil edeceği ag-soloya bağlanmalıdır. Bu durum, ag-soloya bir webSocket açarak ele alınır. Çalıştırdığımız yapılandırmayı, 3 ag-solo olduğunu hatırlayın, değil mi? Alice ve Bob kendi dapp UI'larına sahip olacaklar, peki bu dapp UI'ların doğru ag-soloya nasıl bağlandığından emin olacağız? Agoric, bunun için local.agoric.com adlı bir hizmet sunuyor. Aşağıdaki diyagram akışı gösterir;

walletBridge

Dedik ki, dapp UI'nın bir WebSocket açmak için bir adrese ihtiyacı var, bunu nasıl elde ettiği local.agoric.coma sorarak olur. Adım numarası 0'da, dapp geliştiricisi ag-solonun adresini girer ve local.agoric.com bu bilgileri tarayıcı depolamasında, çerezler gibi tutar. Bu yüzden, farklı dapp UI'ların farklı ag-solos'lara bağlanabilmesi için, ag-soloya bağlanmaya çalıştığımız tarayıcı için ayrı bir depolama alanına ihtiyacımız var. Bunun için seçenekler olabilir;

  • Alice ve Bob için farklı tarayıcılar kullanmak, Firefox ve Chrome gibi
  • Chrome kullanıyorsanız, Alice ve Bob için farklı profiller oluşturmak

LendingPool UI'si şu anda Chrome ile en uyumlu olduğu için, ikinci seçeneği tercih ediyoruz. Bu şöyle görünüyor:

aliceBob

Yukarıdaki diyagramda, kırmızı profil Alice'i temsil ederken yeşil profil Bob'u temsil ediyor. Alice'in dapp UI'si kırmızı profilde açılmalı, Bob'un dapp UI'si yeşil olanıda açılmalıdır.

Havuz Tabanlı Borç Verme Protokolü

Bir Borç Verme Havuzu Nedir?

Borç Verme Havuzu, Compound Finance ve AAVE gibi pek çok canlı örneği olan bir DeFi kavramıdır. Temel fikir, LP'lerin (Likidite Sağlayıcıları) çeşitli getiriler aradığı bir likidite havuzu olmasıdır. Çoğu zaman, bu borç verme havuzlarının kendi yönetim tokenları da vardır ve bunları da LP'lerine dağıtırlar. Ana faydalardan biri, borç verme havuzlarının şu anda likiditeye kimin erişeceği ve kimin erişemeyeceği konusunda bankaların yaptığı aynı GateKeeping işlemi yapmamasıdır.

Bir Borç Verme Havuzu Nasıl Çalışır?

Fikir harika, ama bu nasıl çalışacak? Havuz Tabanlı Borç Verme Protokolümüz, en büyük merkezi olmayan borç verme protokollerinden biri olan, belki de en büyük olan Compound Finance'dan esinlendi. Bu yüzden protokolü açıklamak için Compound'un bazı mantığını kullanacağım. Compound Finance'ın nasıl çalıştığını BytePitch'teki blog yazımızda anlatıyoruz.

Daha fazla öğrenmek isterseniz kontrol etmeyi unutmayın.

Bir merkezi olmayan borç verme protokolünün ana özelliklerinden biri Aşırı teminatlandırmadır. Blog yazımızdan aşırı teminatlandırma hakkında bir örnek:

"Kelimenin 'aşırı' anlamı, teminatın değerinin borcun değerinden daha yüksek olması gerektiğidir. Mesela, teminat olarak kullanmak üzere 100 dolarınız var ve teminatlandırma faktörü %80 ise en fazla 80 dolar borç alabilirsiniz. Ana fikir, borç vereni, borçlunun borcunu ödemezse bile, borç verenin para kaybetmemesini sağlamaktır."

Havuz Tabanlı Borç Verme Protokolü üç formüle bağlıdır. Daha fazlasını öğrenmek için Compound Whitepaper'ı kontrol edin.

  1. Kullanım Oranı: Protokoldaki toplam borç ile protokolün toplam arzı arasındaki oran.

    Image

  1. Borç Faizi: Borcun güncel faiz oranı.

    borrow-rate

  1. Döviz Kuru: Borç verme protokolündeki her havuz, havuza özel bir sarıcı token verir. Compound için bunlara cToken ve protokolümüz için AgToken denir. Döviz Kuru, gerçek token ile sarıcı token arasındaki orandır. Aşağıda formülü bulunmaktadır.

    borrow-rate

İşte, havuzdaki likiditenin faiz oranını nasıl etkilediği hakkında blog yazımızdan bir örnek:

"Örneğin, bir havuzda 1000 dolarlık bir alt varlık olduğunu ve ayrıca 100 dolarlık toplam borcun da olduğunu varsayalım. Piyasanın bu noktasında, kredilere uygulanan yıllık faiz oranının %x olduğunu da varsayalım. Eğer biri şimdi 50 dolar daha borç alırsa, mevcut piyasa durumu şuna dönüşür; 950 dolarlık alt varlık likiditesi ve 150 dolarlık toplam borç. Bu yüzden, dinamik faiz oranı uğruna, yeni yıllık faiz oranı şimdi %y ve biz eminiz ki y > x çünkü artık alt varlık likiditesi eskisinden daha az, yani paranın fiyatı, faiz oranı, artık artmıştır."

Örnek Kullanım Senaryosu

Aşağıda, döviz kurunun arttıkça tedarikçi Alice'in nasıl para kazandığını gösteren basit bir kullanım durumu bulunmaktadır:

sequenceDiagram
actor Kullanıcı as Alice
participant D as Dapp Alice
participant W as Cüzdan Alice
participant L as Borç Verme Havuzu
participant W1 as Cüzdan Bob
participant D1 as Dapp Bob
actor Kullanıcı1 as Bob
Kullanıcı->>D: Dapp sayfasını açar
Kullanıcı1 ->>D1: Dapp sayfasını açar
D->>+W: Kullanıcının onayını ister
D1 ->>+W1: Kullanıcının onayını ister
Kullanıcı->>W: Dapp'ı onaylar
Kullanıcı1->>W1: Dapp'ı onaylar
W-->>-D: Bir WalletBridge nesnesi döndürür
W1-->>-D1: Bir WalletBridge nesnesi döndürür
Kullanıcı->>+D: Belirtilen varlık ve miktarı tedarik etmek ister
D->>W: İşlemi gerçekleştirmek için onay gereklidir
Kullanıcı->>W: İşlemi onaylar
W->>L: D_TEKLİFİ ile işlemi gerçekleştirir
note over D,L: D_TEKLİFİ = {mevduat daveti yap, teklif, ödeme}
L-->>D: Başarılı
Kullanıcı1 ->>+ W1: Borç almak ister
D1->>W1: İşlemi gerçekleştirmek için onay gereklidir
Kullanıcı1 ->> W1: İşlemi onaylar
W1->>L: B_TEKLİFİ ile işlemi gerçekleştirir
note over D1,L: B_TEKLİFİ = {borç daveti yap, teklif, ödeme, teklifArgümanları}
L-->>D1: Başarılı
L->>L: Döviz Kuru arttı