Bitcoin Forum

Local => Кодеры => Topic started by: TonyStark1 on July 23, 2017, 08:42:11 AM



Title: Смарт-контракт на эфире, вопрос
Post by: TonyStark1 on July 23, 2017, 08:42:11 AM
Возможно ли сделать контракт вида , юзер шлет эфир на адрес , контракт сверяет хеш текущего блока если первый знак хеша буква шлет обратно эфир х2 (баланс изначально есть для этого на адресе) , если цифра то ни чего не шлет.
То есть получается схема работает без использования токенов используя только эфир


Title: Re: Смарт-контракт на эфире, вопрос
Post by: romeo-karrera on July 23, 2017, 11:37:20 AM
Возможно ли сделать контракт вида , юзер шлет эфир на адрес , контракт сверяет хеш текущего блока если первый знак хеша буква шлет обратно эфир х2 (баланс изначально есть для этого на адресе) , если цифра то ни чего не шлет.
То есть получается схема работает без использования токенов используя только эфир

конечно возможно 


Title: Re: Смарт-контракт на эфире, вопрос
Post by: TonyStark1 on July 23, 2017, 01:25:29 PM
а какая примерная комиссия будет за его обработку?

п.с. если кто то может за оплату написать его для меня , пишите в лч


Title: Re: Смарт-контракт на эфире, вопрос
Post by: rembit77 on July 24, 2017, 12:37:48 AM
а какая примерная комиссия будет за его обработку?

п.с. если кто то может за оплату написать его для меня , пишите в лч

как обычно стандартный газ как и за любую другую вещь на сети эфира.. вроде так.


Title: Re: Смарт-контракт на эфире, вопрос
Post by: ferumflex on July 24, 2017, 06:38:46 AM
не нашел такую возможность в смарт контрактах вот документация на сайте https://solidity.readthedocs.io/en/develop/units-and-global-variables.html

Quote
block.blockhash(uint blockNumber) returns (bytes32): hash of the given block - only works for 256 most recent blocks excluding current

хеш блока работает только для последних 256 блоков, исключая текущий. То есть проблема в том чтобы получить хеш текущего блока и мне кажется это логично.

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

конечно возможно 
Вы нашли другой способ? )


Title: Re: Смарт-контракт на эфире, вопрос
Post by: romeo-karrera on July 24, 2017, 06:53:13 AM
Quote
Вы нашли другой способ? )

хм поправили доку?

раньше там было написано так

block.blockhash (function(uint) returns (bytes32)): hash of the given block - only works for 256 most recent blocks


Title: Re: Смарт-контракт на эфире, вопрос
Post by: nagor2 on July 26, 2017, 01:45:42 PM
Ну по мне так это логично. Как можно посчитать хэш блока, если он еще не достроился? При добавлении в него новых транзакций, его хэш, понятно, должен поменяться. Вы же заранее не можете знать, какие транзакции и кто будет выполнять. Можно слегка подправить задачу. Человек отправляет деньги на контракт. Контракт их держит. Далее считается следующий блок и по результатам подсчета отправляются "выйгрыши" )))
Как-то так) Далее процедура повторяется) Написать такое видится не сложным.


Title: Re: Смарт-контракт на эфире, вопрос
Post by: ferumflex on July 26, 2017, 07:10:29 PM
К сожалению так тоже не работает. Контракт пассивен он сам себя вызвать не может по таймеры вызвать тоже не может; Его можно вызвать когда кто то запускается функцию контракта.

Тут нужно использовать случайное число, вот другой вопрос где его взять?

Я так прикинул что можно взять sha256 от таких параметров как block.coinbase + block.timestamp


Title: Re: Смарт-контракт на эфире, вопрос
Post by: nagor2 on July 28, 2017, 12:44:07 PM
К сожалению так тоже не работает. Контракт пассивен он сам себя вызвать не может по таймеры вызвать тоже не может; Его можно вызвать когда кто то запускается функцию контракта.

Тут нужно использовать случайное число, вот другой вопрос где его взять?

Я так прикинул что можно взять sha256 от таких параметров как block.coinbase + block.timestamp

Годная мысль. Что касается невозможности, то можно сделать так: пока строится текущий блок, собираются заявки в какую-нибудь мапу, по которой можно пробежаться. Прежде чем добавлять в эту мапу, сверяется block.timestamp с последним достроенным блоком. Это делается каждый раз при вызове функции "сделать ставку". Если timestamp, хранимый на данный момент в контракте и timestamp последнего блока не совпадают, значит достроился новый блок и надо "отправить выйгрыши" и начать новую мапу. Пробегаемся по старой, отправляем выйгрыши, и обнуляем ее. Профит. Если функция "сделать ставку" вызывается достаточно часто, то и выйгрыши будут приходить регулярно.


Title: Re: Смарт-контракт на эфире, вопрос
Post by: nagor2 on July 28, 2017, 12:50:38 PM
Опять же, можно сделать функцию, которую может вызвать любой юзверь - "разослать выйгрыши".
Которая проверяет несовпадение таймстэмпа последнего достроенного блока, и если он отличается от хранимого, пробегается по мапе, отправляет выйгрыши и обнуляет ее. Эту функцию владелец обязуется вызывать раз в неделю.
Тут есть другая проблема, что если "ставок" будет много, то выполнение может потребовать прилично газа, так как придется бегать по "длинной мапе". Можно заставить, как это делается повсеместно, пользователя делать транзакцию на запрос "выйгрыша". Тогда владельцу контракта это ничего не будет стоить. Просто проверяется - есть ли у запросившего адреса выйгрыш. Если да - отправить его и обнулить.


Title: Re: Смарт-контракт на эфире, вопрос
Post by: Saxa.Xaker on July 29, 2017, 06:34:16 PM
Если смысл в мгновенной лотерее, то можно сделать лотерею не мгновенной и прекращать прием ставок за пару блоков или даже за один блок до розыгрыша. Время генерации блока 17 сек. Т.е. розыгрыш каждые 17 или 34 секунды. Предугадать или рассчитать первый(любой) символ хэша невозможно(но это не точно:). Можно вручную запускать контракт, который подождет выпуск нового блока, посмотрит там первый символ и наградит/не наградит