Comments 2
Объясните пожалуйста следующий момент:
} else {
uint256 ethReserve = address(this).balance - msg.value;
uint256 tokenReserve = getReserve();
uint256 tokenAmount = (msg.value * tokenReserve) / ethReserve;
require(_tokenAmount >= tokenAmount, "insufficient token amount");
IERC20 token = IERC20(tokenAddress);
token.transferFrom(msg.sender, address(this), tokenAmount);
}
В строке 7 происходит трансфер токенов от платящего в счет обменника. Но ведь для того чтобы обменник мог сделать transferFrom, платящий должен сначала сделать approve нужного количества токенов? Т.е. для юзера эта операция будет происходить в два(или 3?) этапа:
approve токенов для перевода
вызов метода addLiquidity
Если по формуле получилось что передать надо меньше чем я предложил - сделать еще один вызов approve и передать значение 0, чтобы контракт не мог забрать больше чем уже забрал в рамках предыдущего метода.
И все три вызова требуют подписи транзакции, получается юзеру два(или 3) раза придется подтверждать операцию в каком нибудь metamask-кошельке. Как это не юзерфрендли получается.
Подскажите в каком месте я ошибаюсь, и как правильно это реализовать.
Спасибо.
Каждая выпущенная акция должна быть всегда правильной. Если кто-то после меня добавляет или удаляет из пула ликвидность, моя доля должна оставаться соответствующей моему вкладу в общем объеме ликвидности.
Допустим я вложился в пул, и я моя доля составляет 20% от общего пула - это значит что я должен получать 20% от всех комиссий?
При этом если после меня кто то вложится еще - тогда моя доля в процентном соотношении очевидно будет уменьшаться и соответственно моя прибыль тоже. Я правильно понимаю ?
Программирование DeFi: Uniswap. Часть 2