[英]Uniswap v2 swap() function. What are balance0 & balance1?
我正在學習 Uniswapv2 合約是如何工作的,但我似乎無法全神貫注於swap()
function。
參考: https://github.com/Uniswap/v2-core/blob/master/contracts/UniswapV2Pair.sol#L173
第 173-174 行包含:
balance0 = IERC20(_token0).balanceOf(address(this));
balance1 = IERC20(_token1).balanceOf(address(this));
我的問題是,這些余額是什么時候和誰的?
A. 這些與最近交換后的_reserve0
和_reserve1
相同,將用於同步儲備。
B. 這些是進行交換的用戶當前擁有的每個令牌的數量。
C 以上都不是。 這是另一回事。 請解釋一下這個function的流程。我在任何地方都找不到清晰簡潔的定義。
答案是“C”:)
balanceOf
是ERC20
實現中的一個映射,用於返回給定地址持有的數量:
// address => holds uint amount
mapping(address => uint) public balanceOf;
由於當前合約繼承自UniswapV2ERC20
:
contract UniswapV2Pair is IUniswapV2Pair, UniswapV2ERC20{}
它可以訪問UniswapV2ERC20.sol
由於映射balanceOf
是公共的,solidity 將 getters 分配給公共變量
在函數中:
balance0 = IERC20(_token0).balanceOf(address(this));
balance1 = IERC20(_token1).balanceOf(address(this));
address(this)
指的是當前合約UniswapV2Pair
。 所以balance0
是當前合約擁有_token0
而balance1
是當前合約地址擁有_token1
。 token0
和token1
是合約地址,每個ERC20
幣合約都會跟蹤地址及其余額。 所以你正在訪問每個代幣合約並獲得當前合約的余額。
把ERC20
合約想象成銀行。 你有token0
銀行和token1
銀行。 每家銀行都會跟蹤其用戶的余額。 balancesOf
是ERC20
代幣存儲這些余額的地方。 您當前的合約也擁有其中一些代幣,因此您只想獲得當前合約持有的代幣數量
swap
function 將被用戶調用。 在執行掉期之前,合約檢查它是否有足夠的資金
uint amount0In = balance0 > _reserve0 - amount0Out ? balance0 - (_reserve0 - amount0Out) : 0;
uint amount1In = balance1 > _reserve1 - amount1Out ? balance1 - (_reserve1 - amount1Out) : 0;
require(amount0In > 0 || amount1In > 0, 'UniswapV2: INSUFFICIENT_INPUT_AMOUNT');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.