Где найти контракт ICO с линейным /логарифмическим уменьшением?

Я взглянул на некоторые существующие контракты с толпой:

Ниже приведен график ASCII из исходного кода Арагона. Вместо этапов я хотел бы найти контракт, который реализует линейное или логарифмическое уменьшение в количестве токенов ...

 введите описание изображения здесь>> </a> </p></body></html>

5 голосов | спросил Michal Stefanow 19 J000000Wednesday17 2017, 01:17:16

2 ответа


3

Предположим, что у нас есть M максимальное количество токенов для продажи, I начальная цена каждого токена и F конечная цена каждого токена. Давайте назовем f функцию, которая дает цену каждого токена, мы знаем, что f(0) = I и f(M) = F. Если вам нужна линейная цена, то f(x) = I + (F - I) * x / M.

Проблема заключается в том, чтобы определить, сколько токенов мы получим, когда заплатим V и уже есть K. Скажем, мы получим токены D, мы знаем, что наша начальная цена будет f(K) и окончательный приз f(K + D), а общая цена будет находиться под графиком. Да, математика!

 Функция цены токена для эмитированных токенов

Итак, мы будем иметь уравнение

 Стоимость D токенов от K

Чтобы определить количество токенов для продажи для V эфиров, нам нужно решить уравнение второй степени (F-I)D 2 + 2(MI + (F-I)K)D - 2MV = 0. Да, больше математики!

 (-b +/- sqrt (b ^ 2 - 4ac)) /(2a)

Например, на графике у меня есть I=100, F=225, M=500. Затем, когда есть K=150 для 1000 эфиров, мы получим:

D = (-2*(50000+125*k)+sqrt(4*(50000+125*k)**2 + 500000*v))/250 = 7.225268630201346

(другое решение для D отрицательно)

Если мы хотим приобрести 10 токенов, когда уже было продано 150, мы должны заплатить (K = 150, D = 10)

V = ID + (F-I)*(2KD + D^2)/(2M)
V = 1000 + 125*(20*150 + 100)/1000
V = 1387.5

Чтобы вычислить общую рекаутацию, положим K = 0, D = 500

V = 100*500 + 125*(500^2)/(2*500)
V = 81250.0

Мы можем проверить, что это область графика.

ответил Ismael 28 J000000Friday17 2017, 06:03:49
1

Код твердости, основанный на решении by @Ismael, предполагает линейное увеличение цены.

// tokens sold
uint256 tokensSold;
// tokens to be sold in total

uint tokensToBeSold = 100000000*(10**18);
uint ip = 5000;
uint fp = 10000;
// final price - initial price
uint256 pd = fp - ip;
// total supply * initial price
uint256 tsip = tokensToBeSold * ip;

// helper token emission functions
function howMany(uint256 value) public returns (uint256){
    uint256 a = sqrt(4 * ((tsip + pd * tokensSold) ** 2) + value.mul(8 * pd * tokensToBeSold));
    uint256 b = 2 * (tsip + pd* tokensSold);
    uint256 c = 2 * pd;

    // get a result with
    return round(((a - b)* 10) / c);
}

// Rounding function for the first decimal
function round(uint x) internal returns (uint y) {
    uint z = x % 10;

    if (z < 5) {
        return x / 10;
    }

    else {
        return (x / 10) + 1;
    }
}

// Squareroot implementation
function sqrt(uint x) internal returns (uint y) {
    uint z = (x + 1) / 2;
    y = x;
    while (z < y) {
        y = z;
        z = (x / z + z) / 2;
    }
}
ответил j j 19 FebruaryEurope/MoscowbMon, 19 Feb 2018 14:19:26 +0300000000pmMon, 19 Feb 2018 14:19:26 +030018 2018, 14:19:26

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132