TonyStark1 (OP)
|
|
July 23, 2017, 08:42:11 AM |
|
Возможно ли сделать контракт вида , юзер шлет эфир на адрес , контракт сверяет хеш текущего блока если первый знак хеша буква шлет обратно эфир х2 (баланс изначально есть для этого на адресе) , если цифра то ни чего не шлет. То есть получается схема работает без использования токенов используя только эфир
|
|
|
|
romeo-karrera
Newbie
Offline
Activity: 54
Merit: 0
|
|
July 23, 2017, 11:37:20 AM |
|
Возможно ли сделать контракт вида , юзер шлет эфир на адрес , контракт сверяет хеш текущего блока если первый знак хеша буква шлет обратно эфир х2 (баланс изначально есть для этого на адресе) , если цифра то ни чего не шлет. То есть получается схема работает без использования токенов используя только эфир
конечно возможно
|
|
|
|
TonyStark1 (OP)
|
|
July 23, 2017, 01:25:29 PM |
|
а какая примерная комиссия будет за его обработку?
п.с. если кто то может за оплату написать его для меня , пишите в лч
|
|
|
|
rembit77
|
|
July 24, 2017, 12:37:48 AM |
|
а какая примерная комиссия будет за его обработку?
п.с. если кто то может за оплату написать его для меня , пишите в лч
как обычно стандартный газ как и за любую другую вещь на сети эфира.. вроде так.
|
|
|
|
ferumflex
|
|
July 24, 2017, 06:38:46 AM |
|
не нашел такую возможность в смарт контрактах вот документация на сайте https://solidity.readthedocs.io/en/develop/units-and-global-variables.htmlblock.blockhash(uint blockNumber) returns (bytes32): hash of the given block - only works for 256 most recent blocks excluding current хеш блока работает только для последних 256 блоков, исключая текущий. То есть проблема в том чтобы получить хеш текущего блока и мне кажется это логично. Возможно ли сделать контракт вида , юзер шлет эфир на адрес , контракт сверяет хеш текущего блока если первый знак хеша буква шлет обратно эфир х2 (баланс изначально есть для этого на адресе) , если цифра то ни чего не шлет. То есть получается схема работает без использования токенов используя только эфир
конечно возможно Вы нашли другой способ? )
|
|
|
|
romeo-karrera
Newbie
Offline
Activity: 54
Merit: 0
|
|
July 24, 2017, 06:53:13 AM |
|
Вы нашли другой способ? )
хм поправили доку? раньше там было написано так block.blockhash (function(uint) returns (bytes32)): hash of the given block - only works for 256 most recent blocks
|
|
|
|
nagor2
Jr. Member
Offline
Activity: 98
Merit: 3
|
|
July 26, 2017, 01:45:42 PM |
|
Ну по мне так это логично. Как можно посчитать хэш блока, если он еще не достроился? При добавлении в него новых транзакций, его хэш, понятно, должен поменяться. Вы же заранее не можете знать, какие транзакции и кто будет выполнять. Можно слегка подправить задачу. Человек отправляет деньги на контракт. Контракт их держит. Далее считается следующий блок и по результатам подсчета отправляются "выйгрыши" ))) Как-то так) Далее процедура повторяется) Написать такое видится не сложным.
|
|
|
|
ferumflex
|
|
July 26, 2017, 07:10:29 PM |
|
К сожалению так тоже не работает. Контракт пассивен он сам себя вызвать не может по таймеры вызвать тоже не может; Его можно вызвать когда кто то запускается функцию контракта.
Тут нужно использовать случайное число, вот другой вопрос где его взять?
Я так прикинул что можно взять sha256 от таких параметров как block.coinbase + block.timestamp
|
|
|
|
nagor2
Jr. Member
Offline
Activity: 98
Merit: 3
|
|
July 28, 2017, 12:44:07 PM |
|
К сожалению так тоже не работает. Контракт пассивен он сам себя вызвать не может по таймеры вызвать тоже не может; Его можно вызвать когда кто то запускается функцию контракта.
Тут нужно использовать случайное число, вот другой вопрос где его взять?
Я так прикинул что можно взять sha256 от таких параметров как block.coinbase + block.timestamp
Годная мысль. Что касается невозможности, то можно сделать так: пока строится текущий блок, собираются заявки в какую-нибудь мапу, по которой можно пробежаться. Прежде чем добавлять в эту мапу, сверяется block.timestamp с последним достроенным блоком. Это делается каждый раз при вызове функции "сделать ставку". Если timestamp, хранимый на данный момент в контракте и timestamp последнего блока не совпадают, значит достроился новый блок и надо "отправить выйгрыши" и начать новую мапу. Пробегаемся по старой, отправляем выйгрыши, и обнуляем ее. Профит. Если функция "сделать ставку" вызывается достаточно часто, то и выйгрыши будут приходить регулярно.
|
|
|
|
nagor2
Jr. Member
Offline
Activity: 98
Merit: 3
|
|
July 28, 2017, 12:50:38 PM |
|
Опять же, можно сделать функцию, которую может вызвать любой юзверь - "разослать выйгрыши". Которая проверяет несовпадение таймстэмпа последнего достроенного блока, и если он отличается от хранимого, пробегается по мапе, отправляет выйгрыши и обнуляет ее. Эту функцию владелец обязуется вызывать раз в неделю. Тут есть другая проблема, что если "ставок" будет много, то выполнение может потребовать прилично газа, так как придется бегать по "длинной мапе". Можно заставить, как это делается повсеместно, пользователя делать транзакцию на запрос "выйгрыша". Тогда владельцу контракта это ничего не будет стоить. Просто проверяется - есть ли у запросившего адреса выйгрыш. Если да - отправить его и обнулить.
|
|
|
|
Saxa.Xaker
Newbie
Offline
Activity: 35
Merit: 0
|
|
July 29, 2017, 06:34:16 PM |
|
Если смысл в мгновенной лотерее, то можно сделать лотерею не мгновенной и прекращать прием ставок за пару блоков или даже за один блок до розыгрыша. Время генерации блока 17 сек. Т.е. розыгрыш каждые 17 или 34 секунды. Предугадать или рассчитать первый(любой) символ хэша невозможно(но это не точно . Можно вручную запускать контракт, который подождет выпуск нового блока, посмотрит там первый символ и наградит/не наградит
|
|
|
|
|