Главная Настройка Mobile Контакты NSFW Каталог Пожертвования Купить пасскод Pics Adult Pics API Архив Реквест доски Каталог стикеров Реклама
Доски


[Ответить в тред] Ответить в тред

Check this out!

[Назад][Обновить тред][Вниз][Каталог] [ Автообновление ] 32 | 1 | 12
Назад Вниз Каталог Обновить

Казино на эфире: контракт 100 строчек bzz 25/06/17 Вск 22:02:14  189673  
download.jpeg (5Кб, 275x183)
images.jpeg (4Кб, 275x183)
Написал честное казино на эфире. А их в принципе полно, но совсем простого не нашел - пришлось написать свое. Меньше ста строчек кода на Solidity получилось.

Принцип такой - кидаешь на счет контракта денег сколько надо. Все кидают денежки и ждут, пока кто-то запустит функцию roll().
Функция roll() определяет победителя исходя из циферок хеша последнего блока, собирает со всех по одинаковой сумме денег и дает ему. Сумма денег определяется так - у кого меньше всех денег, вот значит эта сумма и будет ставкой (в кредит не играем!)

Выводишь когда угодно командой withdraw().
Хозяина у контракта нет, suicide вызвать невозможно.

Пробовал разные имплементации алгоритма - с линкед листами, с for-циклами, много всего перепробовал, в итоге оставил самый компактный и дешевый в плане газа вариант. На тестнете обкатал, работает. Инструкции как деплоить контракты и их запускать - в readme.
Вот, угощайтесь:
https://bitbucket.org/bzz/100liner_casino/src
Аноним 25/06/17 Вск 22:47:07  189725
>>189673 (OP)
Хм, крута. но со своей удачей, я юзать его, конечно же, не буду
А где ты искал инфу о языке, на котором пишутся смартконтракты.
Аноним 25/06/17 Вск 22:47:47  189726
>>189673 (OP)
> Сумма денег определяется так - у кого меньше всех денег, вот значит эта сумма и будет ставкой
Но тогда человек может кидать минимальную долю эфира, и тупо обламывать всех.
Аноним 26/06/17 Пнд 00:16:45  189860
>>189726
Да вот не придумал как наказывать таких, отнимать их копейки на нужды казино как-то грубо. Фокус еще в том, что если лишние проверки ставить в функцию roll(), то будет кушать слишком много газа
Аноним 26/06/17 Пнд 00:27:03  189875
>>189725
К нам в город Виталя приезжал, рассказывал
Аноним 26/06/17 Пнд 09:08:24  190033
>>189673 (OP)
>roll() определяет победителя исходя из циферок хеша последнего блока
>кто-то запустит функцию roll().
Хуйня, Миш, давай по-новой. Так кто угодно может гарантированно выигрывать, предвычисляя результат и ставя только в случае выигрыша.
Аноним 26/06/17 Пнд 14:41:10  190278
>>190033
Поправил.
Теперь хэш блока пишется в приватную глобальную переменую random, первый раз при создании контракта.
Каждый раз при запуске   функции roll() к ней добавляется новый хэш блока.

Никакой злоумышленник теперь ничего не сделает, если это только не сам создатель контракта, и если он при этом всегда сам запускает roll(). Что малореалистично.
Аноним 26/06/17 Пнд 17:47:14  190452
>>190278
>в приватную глобальную переменую
Ммм, что? Я, конечно, не особый знаток смарт-контрактов, но разве каждый смарт-контракт не выполняется на каждом полном узле сети? Это подразумевает, что у каждого участника есть все данные, нужные для его детерминированного выполнения. Я сильно сомневаюсь, что одно слово private волшебным образом сделает переменную недоступной перед вычислением. Могу быть неправ.
Если хочешь действительно непредсказуемый рандом, фиксируй ставки, когда вызывается roll(), а результаты обсчитывай по следующему блоку.
Аноним 27/06/17 Втр 18:34:08  192042
>>189673 (OP)
Оп, какие варианты хранения публичных ключей в блокчейне ты видишь? Допустим хочу хранить свой PGP ключ так, чтобы при написании мне письма отправитель сразу шифровал его. Но как подтвердить что запись в блокчейне вида "почта — ключ" сделана именно мною? Нужна какая-то третья сущность в которой будет идентифицирован мой ключ в блокчейне, по которому можно верефицировать мои записи. Тогда блокчейн не помогает особо, ведь можно сразу хранить ключ в этой третьей сущности, например DNSSEC.
Аноним 27/06/17 Втр 19:38:11  192096
>>192042
> как подтвердить что запись в блокчейне вида "почта — ключ" сделана именно мною?
Никак, это даже IRL невозможно сверки тебя с паспортом и ключом одновременно. https://en.wikipedia.org/wiki/Web_of_trust
Не оп.
Аноним 28/06/17 Срд 00:26:21  192359
>>192042
Ну как какие варианты хранениз публичных ключей? Можно прямо на контракте сделать маппинг, где ключом будет твой эфирный аккаунт (адрес), а значением публичный ключ PGP. Одна функция для записи значения, всего и делов-то. Но зачем?
Аноним 28/06/17 Срд 00:47:13  192374
>>189673 (OP)
А тесты?
Аноним 02/07/17 Вск 15:49:07  194699
>>190452
Пофиксил.
В новой версии с запуском функции roll() фиксируется номер блока.
Добавил функцию winner(), по ней можно посмотреть кто собственно победил. А также вызвав jackpot(), можно посмотреть сколько денег на кону
Аноним 02/07/17 Вск 17:14:03  194726
Поясните мне, в контракт можно написать кода с каким то ограниченным функционалом чтобы только производить манипуляции со средствами, или там пиздетски сложные алгоритмы можно захуячить? Типа все эти форки с токенами на эфире они написанны ЦЕЛИКОМ на эфире или эфир чисто чтобы токены раздать?
Аноним 02/07/17 Вск 17:37:18  194730
>>194726
Да легко, в инете полно примеров простейших контрактов аккредитива и тп
Аноним 02/07/17 Вск 18:41:10  194744
>>194730
Что легко? Crysis на эфире запустить легко? Вопрос вот о чем, а не о сложности самой писанины, а о возможостях этой писанины
Аноним 03/07/17 Пнд 01:33:57  194864
Блин, охуенно, анон. Жалко я пхп жс макака, что мне тяжело разобраться как писать на этой хуйне, еще и на ангельском доки все. Зато есть идея годная, может осилю. По сабжу сомневаюсь, что в твоё казино кто-то будет играть, потому что модель ты ебанутую выбрал, риски заранее не известны, потому что хз сколько человек будет играть.
Аноним 04/07/17 Втр 11:46:24  195302
>>194744
Может Civilazation 1 разве что. Кстати норм идея я считаю. Но жрать газ будет адски
Аноним 04/07/17 Втр 12:46:11  195316
>>189673 (OP)
Eсли после рола победитель выведет бабки, то джекпот становится 0 и при следующем роле у тебя не сработает обнуление players.
Аноним 04/07/17 Втр 12:56:12  195320
>>194864
Может, добавить функцию автоматической отправки баланса домой по достижении определенной суммы? Вот например, копишь ты на плейстейшн, кидаешь периодически в рулеточку денег. При определенной доле удачи зафиксированная тобой сумма падает тебе назад на счет. Сумму устанавливать например функцией fix(сумма в эфирах)

Имеет смысл оно?
Аноним 04/07/17 Втр 13:04:56  195323
Блокчейн экономически сосёт, единственное его применение - это деньги. Потому что за сохранность своих денег люди готовы на многое. Вся эта пидерастия с Тюрингом не нужна и умрёт. А эфир сосёт вдвойне, если перейдёт на PoS. Потому что PoS-говно ничего не стоило и стоить не будет.
Аноним 04/07/17 Втр 13:07:46  195324
>>195320
Думаю не имеет, потому что ты будешь проигрывать чаще и ничего не накопишь.
Аноним 04/07/17 Втр 13:12:08  195326
Если на адресе контракта лежат не только эфиры, но и какие-то токены, то как к ним доступ получить и как их пересылать? Ну и также если кто-то шлёт токены на адрес контракта, то как их обрабатывать? msg.value тут не катит уже.

В общем теперь это solidity тред.
Аноним 04/07/17 Втр 14:14:59  195332
>>195324
Но иначе же можно любую небольшую ставку по системе Мартингейла выкачать. Если твой флегматичный друг деньги на счету держит и не снимает. Просто докидываешь эфиру на счет и играешь, пока его баланс не вычистишь
Аноним 04/07/17 Втр 14:19:39  195334
>>195326
Можно заморочиться и сделать казино для чужих ERC20-совместимых токенов. Но зачем? ERC20 стандарт в помощь
Аноним 04/07/17 Втр 15:01:20  195349
>>195332
Ну это совсем другое. Тут можно добавить чтобы баланс внутренний был просто балансом, а ставки из него нужно отдельно ставить, чтобы в каждом последующем роле участвовать нужно делать новую ставку из баланса. И тем не менее, стою на своём, что в это никто не будет играть, потому что не известны риски, ладно бы я мог 1к поставить если бы знал, что шанс будет 50% и я буду играть только против одного чела, а так я поставлю первый 1к, а потом там зарегается ещё 99 челов и шанс будет 1%, такое не нужно никому.
Аноним 04/07/17 Втр 15:12:58  195355
>>195334
Я так понял, что там очень геморойно всё, когда кто-то шлёт левые токены на твой контракт, то твой контракт никак не триггерится и вообще знать не знает об этом, а работает только контракт того левого токена и внутри него всё происходит. Тут можно только в два этапа реализовать, сперва на контракте левого токена даешь разрешение адресу твоего контракта воспользоваться твоими токенами, а потом уже на твой контракт шлешь запрос, что смотри я там тебе разрешил воспользоваться моими токенами, можешь их перевести себе.
Аноним 04/07/17 Втр 20:21:33  195437
>>195355
Хотя можно и в один этап сделать если в токене реализована функция approveAndCall, но это пока что вроде не стандарт, так что не все её реализуют.
Аноним 04/07/17 Втр 20:25:01  195440
В чём смысл событий event? Никак не могу понять, потому что выглядит как функция, которая ничего не делает.
Аноним 05/07/17 Срд 00:22:31  195503
>>195440
ну можно например к казино прикрутить эвент "вы выиграли", и слушать его в веб-интерфейсе
Аноним 05/07/17 Срд 00:29:49  195505
>>195355
потому что не существует никаких токенов. есть только записи в контракте, выпускающем токены. а работать они могут совершенно по-разному. может вообще в том контракте owner может вызвать suicide когда захочет, тогда грош цена тем токенам
Аноним 05/07/17 Срд 00:55:23  195508
>>189673 (OP)
отлично, оп. Завтра хуярим ico и собираем 100кк $
Аноним 05/07/17 Срд 01:08:01  195509
>>195440
В общем я так понял, что таким образом реализовано логирование. Логи хранятся на блокчейне в "комментариях" к транзакциям.

[Назад][Обновить тред][Вверх][Каталог] [Реквест разбана] [Подписаться на тред] [ ] 32 | 1 | 12
Назад Вверх Каталог Обновить

Топ тредов
Избранное