簡體   English   中英

Uniswap v2 swap() function。balance0 和 balance1 是什么?

[英]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”:)

balanceOfERC20實現中的一個映射,用於返回給定地址持有的數量:

 // 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是當前合約擁有_token0balance1是當前合約地址擁有_token1 token0token1是合約地址,每個ERC20幣合約都會跟蹤地址及其余額。 所以你正在訪問每個代幣合約並獲得當前合約的余額。

ERC20合約想象成銀行。 你有token0銀行和token1銀行。 每家銀行都會跟蹤其用戶的余額。 balancesOfERC20代幣存儲這些余額的地方。 您當前的合約也擁有其中一些代幣,因此您只想獲得當前合約持有的代幣數量

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM