Pull to refresh

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?) этапа:

  1. approve токенов для перевода

  2. вызов метода addLiquidity

  3. Если по формуле получилось что передать надо меньше чем я предложил - сделать еще один вызов approve и передать значение 0, чтобы контракт не мог забрать больше чем уже забрал в рамках предыдущего метода.

И все три вызова требуют подписи транзакции, получается юзеру два(или 3) раза придется подтверждать операцию в каком нибудь metamask-кошельке. Как это не юзерфрендли получается.

Подскажите в каком месте я ошибаюсь, и как правильно это реализовать.

Спасибо.

Каждая выпущенная акция должна быть всегда правильной. Если кто-то после меня добавляет или удаляет из пула ликвидность, моя доля должна оставаться соответствующей моему вкладу в общем объеме ликвидности.

Допустим я вложился в пул, и я моя доля составляет 20% от общего пула - это значит что я должен получать 20% от всех комиссий?

При этом если после меня кто то вложится еще - тогда моя доля в процентном соотношении очевидно будет уменьшаться и соответственно моя прибыль тоже. Я правильно понимаю ?

Sign up to leave a comment.

Articles