Bitcoin Forum
June 20, 2024, 02:19:16 PM *
News: Voting for pizza day contest
 
   Home   Help Search Login Register More  
Pages: [1]
  Print  
Author Topic: Смарт-контракт на эфире, вопрос  (Read 978 times)
TonyStark1 (OP)
Full Member
***
Offline Offline

Activity: 123
Merit: 100


View Profile WWW
July 23, 2017, 08:42:11 AM
 #1

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

Activity: 54
Merit: 0


View Profile WWW
July 23, 2017, 11:37:20 AM
 #2

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

конечно возможно 
TonyStark1 (OP)
Full Member
***
Offline Offline

Activity: 123
Merit: 100


View Profile WWW
July 23, 2017, 01:25:29 PM
 #3

а какая примерная комиссия будет за его обработку?

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

Activity: 896
Merit: 255


View Profile
July 24, 2017, 12:37:48 AM
 #4

а какая примерная комиссия будет за его обработку?

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

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

Activity: 256
Merit: 102


View Profile WWW
July 24, 2017, 06:38:46 AM
 #5

не нашел такую возможность в смарт контрактах вот документация на сайте 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 (баланс изначально есть для этого на адресе) , если цифра то ни чего не шлет.
То есть получается схема работает без использования токенов используя только эфир

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

Activity: 54
Merit: 0


View Profile WWW
July 24, 2017, 06:53:13 AM
 #6

Quote
Вы нашли другой способ? )

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

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

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

Activity: 98
Merit: 3


View Profile
July 26, 2017, 01:45:42 PM
 #7

Ну по мне так это логично. Как можно посчитать хэш блока, если он еще не достроился? При добавлении в него новых транзакций, его хэш, понятно, должен поменяться. Вы же заранее не можете знать, какие транзакции и кто будет выполнять. Можно слегка подправить задачу. Человек отправляет деньги на контракт. Контракт их держит. Далее считается следующий блок и по результатам подсчета отправляются "выйгрыши" )))
Как-то так) Далее процедура повторяется) Написать такое видится не сложным.
ferumflex
Full Member
***
Offline Offline

Activity: 256
Merit: 102


View Profile WWW
July 26, 2017, 07:10:29 PM
 #8

К сожалению так тоже не работает. Контракт пассивен он сам себя вызвать не может по таймеры вызвать тоже не может; Его можно вызвать когда кто то запускается функцию контракта.

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

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

Activity: 98
Merit: 3


View Profile
July 28, 2017, 12:44:07 PM
 #9

К сожалению так тоже не работает. Контракт пассивен он сам себя вызвать не может по таймеры вызвать тоже не может; Его можно вызвать когда кто то запускается функцию контракта.

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

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

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

Activity: 98
Merit: 3


View Profile
July 28, 2017, 12:50:38 PM
 #10

Опять же, можно сделать функцию, которую может вызвать любой юзверь - "разослать выйгрыши".
Которая проверяет несовпадение таймстэмпа последнего достроенного блока, и если он отличается от хранимого, пробегается по мапе, отправляет выйгрыши и обнуляет ее. Эту функцию владелец обязуется вызывать раз в неделю.
Тут есть другая проблема, что если "ставок" будет много, то выполнение может потребовать прилично газа, так как придется бегать по "длинной мапе". Можно заставить, как это делается повсеместно, пользователя делать транзакцию на запрос "выйгрыша". Тогда владельцу контракта это ничего не будет стоить. Просто проверяется - есть ли у запросившего адреса выйгрыш. Если да - отправить его и обнулить.
Saxa.Xaker
Newbie
*
Offline Offline

Activity: 35
Merit: 0


View Profile WWW
July 29, 2017, 06:34:16 PM
 #11

Если смысл в мгновенной лотерее, то можно сделать лотерею не мгновенной и прекращать прием ставок за пару блоков или даже за один блок до розыгрыша. Время генерации блока 17 сек. Т.е. розыгрыш каждые 17 или 34 секунды. Предугадать или рассчитать первый(любой) символ хэша невозможно(но это не точноSmiley. Можно вручную запускать контракт, который подождет выпуск нового блока, посмотрит там первый символ и наградит/не наградит
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!