如何理解 Swap 事件負載?
我正試圖圍繞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
。據我所理解,
amount0
與token0
_0xff3dd404afba451328de089424c74685bf0a43c9
amount1
與token1
_0xff3dd404afba451328de089424c74685bf0a43c9
在這種情況下,
token0
是SafeMoon合約(9 位小數)token1
是Wrapped BNB(18 位小數)如果我正確閱讀此事件,則表明我們正在用 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
事件。