De-Fi Dersleri VI- Uniswap V2
1- Order Book nedir ?
Türkçe karşılığı buyruk defteri yada buyruk tahtasıdır. Alım satıma bahis olan finansal varlıkların fiyat oluşumu bu buyruk defterleri üzerinden gerçekleştirilir. Bu defterin bir tarafından satıcılar satmak istedikleri fiyattan başka tarafında ise alıcılar almak istedikleri fiyat üzerinden sıralanır. Aşağıdaki örnekte görüldüğü üzere alıcı ve satıcının buluştuğu noktada (örnekte 11224.9 dolar) ilgili varlık için fiyat oluşur. Aşağıdaki örnekte kırmızı renk SATICILAR ‘ı yeşil renk ise ALICILAR’ı temsil etmektedir.
2- Neden buyruk defterini (order book) kullanmıyoruz?
Bu defter merkezi sistem üzerinden çalışmaktadır. Alıcılar ve satıcılar, merkezi bir hizmet sağlayıcının verdiği alana giriş yapıp süreçlerini gerçekleştirmektedir. Merkezi token/coin borsalarını düşünün yada direkt borsaları düşünün. Bu süreçlerin ne kadar gerçek olduğunu bilemezsiniz. Tahminen bu sistemi sağlayan kurum, süreçleri manipüle etmek ismine makus yazılımlar kullanmaktadır.
3- AMM nedir ?
Automated Market Maker (Otomatik Piyasa Yapıcı), merkezi olmayan borsaların(DEX) çalışma prensibine verilen genel isimdir. Bu piyasalarda her token/coin çiftlerinin oluşturduğu havuzlarda süreç yapılmaktadır.
Her token(coin) çiftinin bir havuzu vardır.
Mesela, BTC-ETHER havuzu, AVAX-ETH havuzu
Çiftler ortasındaki parite(değişim oranı) burada AMM mantığı ile hesaplanır.
Aşağıda uniswap v3 havuzları görülmektedir.
4- Kolay AMM mantığı nasıl işler ?
Havuzdaki tokenların miktarsal çarpımları sabit bir katsayıya eşittir. Sabit işlevi düşünün.
x* y = k
x ile y nin çarpımı daima k ya eşittir.
Basit bir örnek
x:10
y:20
x*y=200
Diyelim x=5 oldu y de sabit fonksiyonu sağlamak için 40 olur.
5*40=200
5- Uniswap v2 nasıl işler ?
Uniswap v2 havuzlarında AMM sistemi fee ile uygulanmaktadır. İlgili havuzlara token/coin koyanlara bir gelir sağlanması gerektiğinden, uniswap bu teşvik düzeneğini havızdan yapılan swaplarda fee alarak sağlamaktadır. Bu fee, uniswap v2 de binde 3‘dür.
Kaynak:https://github.com/runtimeverification/verified-smart-contracts/blob/master/uniswap/x-y-k.pdf
Bu dokuman üzerinde birinci olarak havuzlarda yapılan swaplarda token ölçülerinin nasıl değiştiği gösterilmektedir.
Gözünüz korkmasın, alın size bir uygulama.
ETH/TOKEN havuzunda
1000 ETH ve 10000 Token var
x*y=10.000.000
Havuza 4 ether veriliyor karşığında kaç token alalım ki sabit katsayı olan 10.000.000 değişmesin
(x+Δx)(y−Δy)=xy
(1000 + 4 ) (10000-Δy )=10.000.000
Δy =39.84 bulunur
Sağlama yapalım
(1004) * (9960.16)=10.000.000
Şimdi bu süreçleri fee ile görelim.
(x+rΔx)(y−Δy)=xy
Uniswap v2’de fee %0.3 dür.
Buradaki r bedeli ise (1-%0.3)=0.997
ETH/TOKEN havuzunda
1000 ETH ve 10000 Token var
x*y=10.000.000
Havuza 4 ether veriliyor karşığında kaç token alalım ki sabit katsayı olan 10.000.000 değişmesin
(x+rΔx)(y−Δy)=xy
(1000 + 0.997*4) (10000-Δy )=10.000.000
Görüldüğü üzre fee, olayın çerçevesini değiştiriyor. Sistem sizden 4.01 adet ETH vermenizi istiyor bunun karşılığında 39.722 öbür tokendan alıyorsunuz.
Δy =39.72 bulunur
Sağlama yapalım
(1003.988) * (9960.278)=10.000.000
6- Uniswap V2’de fiyat nasıl oluşur ?
Uniswap V2 de fiyatlar her havuzda yapılan değişimlerin birbirine oranlanması üzerinden yapılır.
ETH/TOKEN havuzunda
1000 ETH ve 10000 Token vardı.
Bu durumda 1 ETH = 10 TOKEN
Havuza 4 ETH verilip 39.72 TOKEN alındı.
Bu durumda 1 ETH = 9.93 TOKEN
Bu matematiği sabit katsayı ile ilişkilendirmek istersek aşağıdaki matematik ortaya çıkacaktır.
P= y/x ise
y yerine P*x yazabiliriz;
x*y=L² iken
x*x*P=L²
x=L / sqrt(P) [ x’in fiyatı]
P= y/x ise
x yerine y/P yazabiliriz;
x*y=L² iken
y/P * y=L²
y= L * sqrt(P) [ y’in fiyatı]
7- Bir Uniswap v2 Havuz Örneği
Havuzumuz DAI/ETH havuzu olsun.
Aşağıdaki süreçte havuza 607.21 DAI verilip 0.3209 ETH alınmış inceleyelim.
İncelemek için etherscan e gidelim.
İşlem öncesinde havuzda Reserve0=8.773.553 adet DAI ve Reserve1=4.650 adet ETH varmış.
Havuza 607.21 DAI verilip 0.3209 ETH alınmış .
Şu kodu anlamamız zarurî. Özür dilerim.
balance0= reserve0 + amount0In
balance0= 8.773.553 + 607.21=8.774.143
amount0In=607.21 dönecek
amount1In=0 dönecektir.
İşlem sonrası düzeltilmiş bedelleri hesaplıyoruz.
balanceOAdjusted ise= 8.774.143 *1000 -(607.21 *3)
balance1Adjusted ise= 4.649,95 *1000 – (0*3)
geliyoruz
balanceOAdjusted* balance1Adjusted >= reserve0* reserve1*(1000^2)
Uniswap v2 nedir
Uniswap Scdevstr Doc.Dr Engin Yilmaz 09062022
Kaynaklar:
https://jeiwan.net
https://medium.com/@jarekcoding/math-behind-uniswap-swap-part1-88dcc18a9612
https://github.com/Uniswap/v2-core/blob/master/contracts/UniswapV2Pair.sol
https://mirror.xyz/roherrera.eth/BMg6IoBHO8fNuyvmAuSDqjWf3ur-YZEAsNyG-aA1f9Y
https://docs.uniswap.org/protocol/V2/concepts/core-concepts/oracles
https://v2.info.uniswap.org/pair/0xa478c2975ab1ea89e8196811f51a7b7ade33eb11
https://github.com/runtimeverification/verified-smart-contracts/blob/master/uniswap/x-y-k.pdf