Написал честное казино на эфире. А их в принципе полно, но совсем простого не нашел - пришлось написать свое. Меньше ста строчек кода на Solidity получилось.Принцип такой - кидаешь на счет контракта денег сколько надо. Все кидают денежки и ждут, пока кто-то запустит функцию roll(). Функция roll() определяет победителя исходя из циферок хеша последнего блока, собирает со всех по одинаковой сумме денег и дает ему. Сумма денег определяется так - у кого меньше всех денег, вот значит эта сумма и будет ставкой (в кредит не играем!)Выводишь когда угодно командой withdraw(). Хозяина у контракта нет, suicide вызвать невозможно.Пробовал разные имплементации алгоритма - с линкед листами, с for-циклами, много всего перепробовал, в итоге оставил самый компактный и дешевый в плане газа вариант. На тестнете обкатал, работает. Инструкции как деплоить контракты и их запускать - в readme. Вот, угощайтесь:https://bitbucket.org/bzz/100liner_casino/src
>>189673 (OP)Хм, крута. но со своей удачей, я юзать его, конечно же, не будуА где ты искал инфу о языке, на котором пишутся смартконтракты.
>>189673 (OP)> Сумма денег определяется так - у кого меньше всех денег, вот значит эта сумма и будет ставкойНо тогда человек может кидать минимальную долю эфира, и тупо обламывать всех.
>>189726Да вот не придумал как наказывать таких, отнимать их копейки на нужды казино как-то грубо. Фокус еще в том, что если лишние проверки ставить в функцию roll(), то будет кушать слишком много газа
>>189725К нам в город Виталя приезжал, рассказывал
>>189673 (OP)>roll() определяет победителя исходя из циферок хеша последнего блока>кто-то запустит функцию roll().Хуйня, Миш, давай по-новой. Так кто угодно может гарантированно выигрывать, предвычисляя результат и ставя только в случае выигрыша.
>>190033Поправил.Теперь хэш блока пишется в приватную глобальную переменую random, первый раз при создании контракта. Каждый раз при запуске функции roll() к ней добавляется новый хэш блока. Никакой злоумышленник теперь ничего не сделает, если это только не сам создатель контракта, и если он при этом всегда сам запускает roll(). Что малореалистично.
>>190278>в приватную глобальную переменуюМмм, что? Я, конечно, не особый знаток смарт-контрактов, но разве каждый смарт-контракт не выполняется на каждом полном узле сети? Это подразумевает, что у каждого участника есть все данные, нужные для его детерминированного выполнения. Я сильно сомневаюсь, что одно слово private волшебным образом сделает переменную недоступной перед вычислением. Могу быть неправ.Если хочешь действительно непредсказуемый рандом, фиксируй ставки, когда вызывается roll(), а результаты обсчитывай по следующему блоку.
>>189673 (OP)Оп, какие варианты хранения публичных ключей в блокчейне ты видишь? Допустим хочу хранить свой PGP ключ так, чтобы при написании мне письма отправитель сразу шифровал его. Но как подтвердить что запись в блокчейне вида "почта — ключ" сделана именно мною? Нужна какая-то третья сущность в которой будет идентифицирован мой ключ в блокчейне, по которому можно верефицировать мои записи. Тогда блокчейн не помогает особо, ведь можно сразу хранить ключ в этой третьей сущности, например DNSSEC.
>>192042> как подтвердить что запись в блокчейне вида "почта — ключ" сделана именно мною?Никак, это даже IRL невозможно сверки тебя с паспортом и ключом одновременно. https://en.wikipedia.org/wiki/Web_of_trustНе оп.
>>192042Ну как какие варианты хранениз публичных ключей? Можно прямо на контракте сделать маппинг, где ключом будет твой эфирный аккаунт (адрес), а значением публичный ключ PGP. Одна функция для записи значения, всего и делов-то. Но зачем?
>>189673 (OP)А тесты?
>>190452Пофиксил.В новой версии с запуском функции roll() фиксируется номер блока.Добавил функцию winner(), по ней можно посмотреть кто собственно победил. А также вызвав jackpot(), можно посмотреть сколько денег на кону
Поясните мне, в контракт можно написать кода с каким то ограниченным функционалом чтобы только производить манипуляции со средствами, или там пиздетски сложные алгоритмы можно захуячить? Типа все эти форки с токенами на эфире они написанны ЦЕЛИКОМ на эфире или эфир чисто чтобы токены раздать?
>>194726Да легко, в инете полно примеров простейших контрактов аккредитива и тп
>>194730Что легко? Crysis на эфире запустить легко? Вопрос вот о чем, а не о сложности самой писанины, а о возможостях этой писанины
Блин, охуенно, анон. Жалко я пхп жс макака, что мне тяжело разобраться как писать на этой хуйне, еще и на ангельском доки все. Зато есть идея годная, может осилю. По сабжу сомневаюсь, что в твоё казино кто-то будет играть, потому что модель ты ебанутую выбрал, риски заранее не известны, потому что хз сколько человек будет играть.
>>194744Может Civilazation 1 разве что. Кстати норм идея я считаю. Но жрать газ будет адски
>>189673 (OP)Eсли после рола победитель выведет бабки, то джекпот становится 0 и при следующем роле у тебя не сработает обнуление players.
>>194864Может, добавить функцию автоматической отправки баланса домой по достижении определенной суммы? Вот например, копишь ты на плейстейшн, кидаешь периодически в рулеточку денег. При определенной доле удачи зафиксированная тобой сумма падает тебе назад на счет. Сумму устанавливать например функцией fix(сумма в эфирах)Имеет смысл оно?
Блокчейн экономически сосёт, единственное его применение - это деньги. Потому что за сохранность своих денег люди готовы на многое. Вся эта пидерастия с Тюрингом не нужна и умрёт. А эфир сосёт вдвойне, если перейдёт на PoS. Потому что PoS-говно ничего не стоило и стоить не будет.
>>195320Думаю не имеет, потому что ты будешь проигрывать чаще и ничего не накопишь.
Если на адресе контракта лежат не только эфиры, но и какие-то токены, то как к ним доступ получить и как их пересылать? Ну и также если кто-то шлёт токены на адрес контракта, то как их обрабатывать? msg.value тут не катит уже.В общем теперь это solidity тред.
>>195324Но иначе же можно любую небольшую ставку по системе Мартингейла выкачать. Если твой флегматичный друг деньги на счету держит и не снимает. Просто докидываешь эфиру на счет и играешь, пока его баланс не вычистишь
>>195326Можно заморочиться и сделать казино для чужих ERC20-совместимых токенов. Но зачем? ERC20 стандарт в помощь
>>195332Ну это совсем другое. Тут можно добавить чтобы баланс внутренний был просто балансом, а ставки из него нужно отдельно ставить, чтобы в каждом последующем роле участвовать нужно делать новую ставку из баланса. И тем не менее, стою на своём, что в это никто не будет играть, потому что не известны риски, ладно бы я мог 1к поставить если бы знал, что шанс будет 50% и я буду играть только против одного чела, а так я поставлю первый 1к, а потом там зарегается ещё 99 челов и шанс будет 1%, такое не нужно никому.
>>195334Я так понял, что там очень геморойно всё, когда кто-то шлёт левые токены на твой контракт, то твой контракт никак не триггерится и вообще знать не знает об этом, а работает только контракт того левого токена и внутри него всё происходит. Тут можно только в два этапа реализовать, сперва на контракте левого токена даешь разрешение адресу твоего контракта воспользоваться твоими токенами, а потом уже на твой контракт шлешь запрос, что смотри я там тебе разрешил воспользоваться моими токенами, можешь их перевести себе.
>>195355Хотя можно и в один этап сделать если в токене реализована функция approveAndCall, но это пока что вроде не стандарт, так что не все её реализуют.
В чём смысл событий event? Никак не могу понять, потому что выглядит как функция, которая ничего не делает.
>>195440ну можно например к казино прикрутить эвент "вы выиграли", и слушать его в веб-интерфейсе
>>195355потому что не существует никаких токенов. есть только записи в контракте, выпускающем токены. а работать они могут совершенно по-разному. может вообще в том контракте owner может вызвать suicide когда захочет, тогда грош цена тем токенам
>>189673 (OP)отлично, оп. Завтра хуярим ico и собираем 100кк $
>>195440В общем я так понял, что таким образом реализовано логирование. Логи хранятся на блокчейне в "комментариях" к транзакциям.