Uniswap

如何理解 Swap 事件負載?

  • June 6, 2021

我正試圖圍繞pancakeswap Swap事件(應該相當於uniswap)。

這是一個範例交易:0xd809e359a4037eb5e2617769b93f8b7fa1e708c37019b02933e1845e33c99884

此交易包含Swap事件:

Swap (
 index_topic_1 address sender,
 uint256 amount0In,
 uint256 amount1In,
 uint256 amount0Out,
 uint256 amount1Out,
 index_topic_2 address to
)

它具有以下值:

sender: 0x10ed43c718714eb63d5aa57b78b54704e256024e
amount0In: 12772329830235
amount1In: 2562091000000000000
amount0Out: 208940457743532637
amount1Out: 0
to: 0x97c2727b8f0584f45f86d2d3dead77e5c74814bc

而這個事件源於合約0xff3dd404afba451328de089424c74685bf0a43c9

據我所理解,

在這種情況下,

如果我正確閱讀此事件,則表明我們正在用 WBNB 0.2562091 換取 SafeMoon 208,940,457。

然而,

  • BscScan顯示實際轉賬金額為 188,046,411。這也可以通過查看日誌、Transfer事件來看到。
  • 目前尚不清楚amount0In( 12772329830235) 在Swap事件中扮演什麼角色。

Swap通過查看我們將 WBNB 0.2562091 交易為 SafeMoon 208,940,457的事件,如何確定?

讓我們以這個交易為例:

https://bscscan.com/tx/0xf30f0de71911e52c68a6e4b5e3821eed3fe00e0c51b2650a028c82afdcc862b0#eventlog

作為基準,讓我們使用 BoggedFinance 數據。它說:

bnb_usd=342
phx_usd=0.00000000570810
bnb_phx=60643119461
PHX - BNB LP PancakeSwap V2
7,924,800,360.499 PHX + 0.131 BNB
Liquidity Pool Totals
Pool adds $631,122 to total liquidity
PHX pooled: 55,236,876,104,150
BNB pooled: 910
Total LP Tokens: 6,970
KI pooled: 1,314,655,947,122
BNB pooled: 0.000
Total LP Tokens: 2,141.465

這是這兩個令牌之間的交換:

Token0: PHX
Token0.decimals=9
Token0.address: 0xb98d864ddcb573567b3a2258c9e5cab58fe7974e
Token1: WBNB
Token1.decimals=18
Token1.address: 0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

日誌中提到的其他地址:

Initiator: 0xC5f0Ac8AEd9D12C0645d16aB5892bb09Fc297590
Router (v2): 0x10ed43c718714eb63d5aa57b78b54704e256024e
PHX-WBNB LP: 0x2c3a0aa216cefb8c887716b993c3158f011f967e

BscScan 表示已轉移以下金額:

For 0.1 ($34.01) Wrapped BNB (WBNB)
For 5,314,263,769 PhoenixProtocol (PHX)

即 0.1 WBNB 被轉移以換取 5,314,263,769 PHX

actual=5,314,263,769 = 5,314,263,769

但是,如果我們使用 Bogged 提供的報價,則預期金額應為:

0.1 x bnb_phx = 6,064,311,946.1

expected=6,064,311,946

((expected-actual)/((expected+actual)/2))*100 = 13.18351603551288580585

即,我們預計比我們得到的多 13.18%。

0.2% 是 PancakeSwap 費用。

其餘的必須是在觀察到 Bogged 值和交易需要時間之間的滑點和錯誤的組合(畢竟這是動蕩的市場)。

契約中的一條評論指出,每筆交易都要收取 10% 的費用,這可能是造成差異的原因。

已記錄以下事件:

Deposit
Address: 0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c
Destination: 0x10ed43c718714eb63d5aa57b78b54704e256024e
Wad: 100000000000000000

這是發起者將 0.1 (100000000000000000/10^18) WBNB 傳輸到路由器。

Transfer
Address: 0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c
Source: 0x10ed43c718714eb63d5aa57b78b54704e256024e
Destination: 0x2c3a0aa216cefb8c887716b993c3158f011f967e
Wad: 100000000000000000

這是路由器將 0.1 WBNB 添加到 PHX-WBNB LP。

Transfer
Address: 0xb98d864ddcb573567b3a2258c9e5cab58fe7974e
Source: 0x2c3a0aa216cefb8c887716b993c3158f011f967e
Destination: 0xc5f0ac8aed9d12c0645d16ab5892bb09fc297590
Wad: 5314263769851279617

這是 PHX-WBNB LP 向買方發送 5,314,263,769 (5314263769851279617/10^9)。

Sync:
Address: 0x2c3a0aa216cefb8c887716b993c3158f011f967e
Reserve0: 54569750545915728248786
Reserve1: 921958306311444356872

此事件表示 PHX-WBNB LP 已更新。

Swap
Address: 0x2c3a0aa216cefb8c887716b993c3158f011f967e
Sender: 0x10ed43c718714eb63d5aa57b78b54704e256024e
Addressee: 0xc5f0ac8aed9d12c0645d16ab5892bb09fc297590
amount0In: 12888802144710313
amount1In: 100000000000000000
amount0Out: 5904737522056977352
amount1Out: 0

此事件描述了售出多少 ( amount0In, amount1In) 和收到了多少 ( amount0Out, amount1Out)。

有趣的是,5904737522056977352 與實際轉賬金額不一致。

amount_out=5,904,737,522
actual=5,314,263,769

即實際金額比amount_out說的少10.52%

((actual-amount_out)/((actual+amount_out)/2))*100 = -10.52631580448580946687

還有amount_in_0參數。 

amount_in_0=12,888,802

這等於 amount_out 的 0.2%,這似乎是 PancakeSwap 費用。

(amount_in_0/amount_out)*100 = 0.21827899973501988968

最後,amount_out不佔10%,和宣傳的合約費是一致的,而且看Swap事件好像也沒有辦法拿到實際轉賬的金額。

值得注意的是,我們使用兩個準備金計算的報價並未反映10%的費用,即初始預期金額(6,064,311,946)與(5,904,737,522)非常amount0Out吻合。

即看起來獲得實際金額的唯一方法是查看Transfer事件。

引用自:https://ethereum.stackexchange.com/questions/99553