tradisys_russia | Unsorted

Telegram-канал tradisys_russia - Waves / RIDE dev chat RU

712

Waves developers Ru

Subscribe to a channel

Waves / RIDE dev chat RU

На вашем месте, я бы больше не делал утверждений, пока ваши данные не сойдутся с ожиданием. Так как с большой вероятностью, именно у вас будет ошибка.

Читать полностью…

Waves / RIDE dev chat RU

первый if включает 37? (не знаю что значит +result в js)

Читать полностью…

Waves / RIDE dev chat RU

Быстрый анализ показывает, что у вас не учитывается зеро (37)

Читать полностью…

Waves / RIDE dev chat RU

@alexeykiselev У меня нет опыта в таких вопросах, буду рад, если вы сможете доказать обратное.

Читать полностью…

Waves / RIDE dev chat RU

Я говорил не о нерандомности VRF, а о том, что часть диапазона выпадает чаще, чем другая.

У меня нет стартовых рандомных чисел. Есть текущий блок и следующий в котором в котором нужно получить рандомное число. Вот чистая функция для этого теста:

@Callable(i)
func testRandomNumber(h: Int) = {
let randomHash = sha256(blockInfoByHeight(h).value().vrf.value() + (h - 1).toBytes())
let hashInt = toInt(randomHash, 24)
let res = hashInt % 37
throw(res.toString())
}

если мы начнем перебор от 2618144 (с -1 на каждой итерации), то получим данные:

https://quickchart.io/chart?c={type:%27bar%27,data:{labels:[18,36],datasets:[{label:%27Nums%27,data:[4927,5073]}]}}
https://quickchart.io/chart?c={type:%27bar%27,data:{labels:[12,24,36],datasets:[{label:%27Nums%27,data:[3448,3276,3276]}]}}
https://quickchart.io/chart?c={type:%27bar%27,data:{labels:['red','black'],datasets:[{label:%27Nums%27,data:['4861','5139']}]}}
https://quickchart.io/chart?c={type:%27bar%27,data:{labels:['even','odd'],datasets:[{label:%27Nums%27,data:['5207','4793']}]}}

Действительно, выглядит рандомно. Но давайте попробуем начать с другого блока, например, 2612144

- https://quickchart.io/chart?c={type:%27bar%27,data:{labels:[18,36],datasets:[{label:%27Nums%27,data:[497,503]}]}}
- https://quickchart.io/chart?c={type:%27bar%27,data:{labels:[12,24,36],datasets:[{label:%27Nums%27,data:[352,336,312]}]}}
- https://quickchart.io/chart?c={type:%27bar%27,data:{labels:['red','black'],datasets:[{label:%27Nums%27,data:['481','519']}]}}
- https://quickchart.io/chart?c={type:%27bar%27,data:{labels:['even','odd'],datasets:[{label:%27Nums%27,data:['524','476']}]}}

уже не так рандомно, верно? С 18 до 36 всегда больше, с 1 до 12 всегда больше , черных всегда больше, четных всегда больше .

Можно тестить дальше 2602144:

- https://quickchart.io/chart?c={type:%27bar%27,data:{labels:[18,36],datasets:[{label:%27Nums%27,data:[479,521]}]}}
- https://quickchart.io/chart?c={type:%27bar%27,data:{labels:[12,24,36],datasets:[{label:%27Nums%27,data:[329,341,330]}]}}
- https://quickchart.io/chart?c={type:%27bar%27,data:{labels:['red','black'],datasets:[{label:%27Nums%27,data:['451','549']}]}}
- https://quickchart.io/chart?c={type:%27bar%27,data:{labels:['even','odd'],datasets:[{label:%27Nums%27,data:['502','498']}]}}


Это было бы ерундой, если бы речь шла не про деньги.

Читать полностью…

Waves / RIDE dev chat RU

В любом случае спасибо, я попрошу потестировать игру знакомых, надаюсь, они не найдут этот баг. В варианте с hash им потребовалось 70 игр, чтобы понять, что одна часть диапазона выпадает чаще и обыграть )

Читать полностью…

Waves / RIDE dev chat RU

Если подставлять любою задачу под результат - тогда все варианты рабочие ) Если пролистать этот чат, то речь раз 5 была про рандом от vrf при commit reveal, этот вариант не дает рандомного числа на большой выборке(легко предсказать если не число, то диапазоны где оно будет), далее был вариант с hash и теперь + n.toBytes. В этом варианте самый лучший показатель рандома, но если вы тестировали по диапазона который показал выше, наверное, тоже заметили, что числа все равно сползают. В текущем варианте на +-300 из 10 000, в варианте с hash (с 2я числами) было +-400. Темн не менее задача была и остаются на уровне стандартной для любого языка. В последнем варианте далеко не рандом, но выглядит почти нормально. Так что тут дело не в не-райдовском коде, я тестирую изолированную функцию ride изолированной функцией js вызывая через @waves/waves-transactions.

Читать полностью…

Waves / RIDE dev chat RU

Как раз пробую ваш вариант

Читать полностью…

Waves / RIDE dev chat RU

И в этом случае распределение равномерное
[254, 285, 264, 292, 268, 247, 259, 266, 293, 243, 270, 262, 298, 272, 286, 256, 272, 261, 279, 260, 279, 273, 281, 306, 253, 276, 248, 258, 262, 271, 257, 252, 284, 290, 289, 277, 257]

Читать полностью…

Waves / RIDE dev chat RU

могу еще раз запустить, 10000 раз, минут через 10 доложу

Читать полностью…

Waves / RIDE dev chat RU

при toBigInt числа не только положительные:

30|-11|3|21|-34|25|-16|22|-35|-13|-6|-3|12|12|9|-31|-27|19|35|-1|34|-13|-17|-20|26|25|-15|-9|31|-34|-28|-12...

from1to18: 313,
from18t36: 687,
from1to12: 687,
from13to24: 158,
from25to36: 155,
line1: 153,
line2: 154,
line3: 693,
red: 241,
black: 759,
even: 503,
odd: 497


также если брать 3и высоты, то тоже не рандомно

  let revealBlock = blockInfoByHeight( commitHeight ).valueOrErrorMessage( "unexcpected error" )
let vrf = revealBlock.vrf.valueOrErrorMessage( "unexcpected error" )
let randomHash = sha256(vrf.value())

let revealBlock2 = blockInfoByHeight( commitHeight - 10 ).valueOrErrorMessage( "unexcpected error" )
let vrf2 = revealBlock.vrf.valueOrErrorMessage( "unexcpected error" )
let randomHash2 = sha256(vrf.value())

let revealBlock3 = blockInfoByHeight( commitHeight - 20 ).valueOrErrorMessage( "unexcpected error" )
let vrf3 = revealBlock.vrf.valueOrErrorMessage( "unexcpected error" )
let randomHash3 = sha256(vrf.value())

let n1 = toInt(randomHash, 16)
let n2 = toInt(randomHash2, 16)
let n3 = toInt(randomHash3, 16)
if n1 > 0 then {
let randomNumber = n1 % 37
throw(randomNumber.toString())
} else if (n2 > 0) then {
let randomNumber = n2 % 37
throw(randomNumber.toString())
} else {
let randomNumber = n3 % 37
throw(randomNumber.toString())
}


27|6|28|2|15|0|28|14|1|6|14|21|14|5|34|16|15|6|7|3|4|11...

from1to18: 636,
from18t36: 364,
from1to12: 364,
from13to24: 330,
from25to36: 306,
line1: 338,
line2: 323,
line3: 339,
red: 499,
black: 501,
even: 505,
odd: 495

Читать полностью…

Waves / RIDE dev chat RU

Возможно, проблема в том, что toInt(randomHash, 16) в половине случаев дает отрицательное число, надо проверять более детально, как в этом случае распределяются остатки

Читать полностью…

Waves / RIDE dev chat RU

https://docs.waves.tech/en/ride/data-types/list#list-as-function-argument

Читать полностью…

Waves / RIDE dev chat RU

"call":{"args":
[
{
"type": "list",
"value": [
{
"type": "integer",
"value": 1000000000
},
{
"type": "integer",
"value": 0
}
]
}
],
"function":

Читать полностью…

Waves / RIDE dev chat RU

В типах есть лист, но с ним ошибка

Читать полностью…

Waves / RIDE dev chat RU

Вы правы, сейчас пересчитаю

Читать полностью…

Waves / RIDE dev chat RU

Поэтому все данные неверны на 1/37 как минимум

Читать полностью…

Waves / RIDE dev chat RU

вот быстрый код для теста

Читать полностью…

Waves / RIDE dev chat RU

В реальном мире, я не про тестирование через перебор, а накладывая эти данные на игру с выплатами, пользователь очень быстро начинает понимать куда ставить. Из-за этого я и говорил, что предсказать число затруднительно, но очень вероятно предсказать в каком диапазоне оно будет.

Читать полностью…

Waves / RIDE dev chat RU

Графики в студию. Утверждение о нерандомности VRF очень сильное. Я в свое время в этом тоже сомневался, построил график распределения и там сразу стало видно, что оно абсолютно равномерное. Просто прямоугольник какой-то.

Читать полностью…

Waves / RIDE dev chat RU

Я взял ваши данные из txt файла. Они абсолютно рандомные, это вы накосячили при подсчете интервалов

Читать полностью…

Waves / RIDE dev chat RU

Вы не варианты пробуйте (они все рабочие), а в своем не-райдовском коде баг ищите

Читать полностью…

Waves / RIDE dev chat RU

И с вашими данными распределение равномерное.
[279, 246, 253, 274, 274, 275, 246, 288, 292, 271, 262, 284, 283, 253, 282, 305, 282, 250, 253, 255, 253, 283, 255, 275, 272, 267, 264, 257, 295, 252, 290, 282, 260, 289, 257, 270, 272]

Читать полностью…

Waves / RIDE dev chat RU

Да, меня тогда взволновал вопрос, интересно

Читать полностью…

Waves / RIDE dev chat RU

Я проверил 100000 раз на такой функции
func pseudo(n: Int) = {
let randomHash = sha256(blockInfoByHeight(height).value().vrf.value() + n.toBytes())
let hashInt = toInt(randomHash, 24)
hashInt % 37
}
Инкрементил n, чтоб не ждать каждый раз минуту. Результаты вполне ровные:

[2687, 2710, 2732, 2710, 2643, 2589, 2792, 2721, 2663, 2732, 2777, 2737, 2750, 2707, 2604, 2685, 2689, 2646, 2766, 2620, 2701, 2604, 2647, 2705, 2687, 2755, 2713, 2767, 2716, 2745, 2731, 2732, 2713, 2689, 2788, 2646, 2701]

Читать полностью…

Waves / RIDE dev chat RU

По идее, если брать BigInt даже от всех 32 байт, то он всегда будет положительным. Попробуйте toInt(toBigInt(randomHash) % toBigInt(37))

Читать полностью…

Waves / RIDE dev chat RU

Здравствуйте!

Я на финальной стадии тестирования игры, детально проверил этот вариант при генерировании 10 000 рандомных числе, он оказался не совсем совсем рандомным.

Делал шаг -1 от 2615375 и вызывал такой метод:

@Callable(i)
func testRandomNumber(commitHeight: Int) = {
let revealBlock = blockInfoByHeight( commitHeight ).valueOrErrorMessage( "unexcpected error" )
let vrf = revealBlock.vrf.valueOrErrorMessage( "unexcpected error" )
let randomHash = sha256(vrf.value())
let randomNumber = toInt(randomHash, 16) % 37
throw(randomNumber.toString())
}


У меня вышло:

from1to18: 6473,
from18t36: 3527,
from1to12: 3527,
from13to24: 3218,
from25to36: 3255,
line1: 3295,
line2: 3210,
line3: 3495,
red: 4870,
black: 5130,
even: 5124,
odd: 4876

Я накладывал данные на интересующие меня последовательности рулетки.

Цифры от 1 до 18 выпадают в 2 раза чаще, чем от 18 до 36, также есть перекос с четным и нечетными и с красными и черными.

Как можно получить более рандомные числа?

Читать полностью…

Waves / RIDE dev chat RU

Спасибо, было бы круто добавить в доку

Читать полностью…

Waves / RIDE dev chat RU

на waves-dapp лист есть

Читать полностью…

Waves / RIDE dev chat RU

Подскажите, как используя Signer invoke передать List в args?

Читать полностью…
Subscribe to a channel