выводить токены. Внутри вычисляется процент, который остается в контракте. Этот процент указывается овнером. Как сделать так, чтобы этот процент мог быть не целым? к примеру 0.1%
Ну сохрани 10 и дели на 100, чтобы узнать реальный процент, например как тут. Но это ты должен логику контракта менять, может быть там в коде только целые проценты
а что это за ссылка? там нет sol контрактов
У тебя контракт на солане, чат про EVM контракты, а ссылка вообще на контракт под TVM (тон) 🙂
Например что бы можно было сделать 2 знака после запятой, например так 0.01, то мы условимся что 10000 - это 100%, тогда 10 - это 0.1%. В расчётах примерно так tokens * percent / 10000
/** * @param amount number from whom we take fee * @param scale scale for rounding. 100 is 1/100 (percent). we can encreace scale if we want better division (like we need to take 0.5% instead of 5%, then scale = 1000) */ function calculateFee(uint256 amount, uint256 scale) internal view returns (uint256) { uint a = amount / scale; uint b = amount % scale; uint c = promille_fee / scale; uint d = promille_fee % scale; return a * c * scale + a * d + b * c + (b * d + scale - 1) / scale; }
последняя строчка округляет net до ближайшего целочисленного значения (в большую сторону) с точностью до 18 знаков после запятой я использовал эту функцию для высчета суммы комиссии (которую потом вычитал) p.s. последнюю строчку я скопипастил со стэковерфлоу и не имею ни малейшего понятия как она работает, но работает
так же с помощью этой штуки можно брать и более мелкие проценты и работать с пылью
Что даёт "internal view"?
Internal подразумевает что это прост служебная функция контракта которая видна только внутри
а что такое promille fee?
то есть все равно не получается идеально точное значение сделать
Обсуждают сегодня