Pages:
Author

Topic: Как сделать криптозавещание ? - page 2. (Read 17348 times)

legendary
Activity: 1806
Merit: 1940
Crypto Swap Exchange
Например.
секретное слово1 = blablabla
хэш(blablabla)  = 7f9038204185da148f636a56713991e379473089
секретное слово2 = ololo
хэш(ololo) = 4a287de13f0649b7645ea163d1949af3baf0e1be
Почему-то у меня другие хеши получились. Я делал хеш(blablabla) = ripemd160(sha256(626c61626c61626c61)), это неправильно?


Опкод OP_RIPEMD160 делает просто "The input is hashed using RIPEMD-160."
Опкод OP_HASH160 делает "The input is hashed twice: first with SHA-256 and then with RIPEMD-160."
https://en.bitcoin.it/wiki/Script
Аа, только сейчас заметил, что там у вас OP_RIPEMD160. Теперь все сходится, спасибо! А есть какие-то причины использовать OP_RIPEMD160 вместо OP_HASH160?

И такой вопрос возник, а насколько это вообще надежно, это же нестандартная транзакция? Не может ли случиться так, что ноды перестанут такие транзакции обрабатывать?

P2SH это стандартные транзакции.
Все P2SH? А проверьте свой скрипт в коре командой decodescript, разве вы не получаете в ответ "type": "nonstandard"? Или это о другом?
И тогда, видимо, я неправильно понимаю фразу: "The transaction’s signature script must only push data to the script evaluation stack. It cannot push new opcodes, with the exception of opcodes which solely push data to the stack", так?
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
Например.
секретное слово1 = blablabla
хэш(blablabla)  = 7f9038204185da148f636a56713991e379473089
секретное слово2 = ololo
хэш(ololo) = 4a287de13f0649b7645ea163d1949af3baf0e1be
Почему-то у меня другие хеши получились. Я делал хеш(blablabla) = ripemd160(sha256(626c61626c61626c61)), это неправильно?


Опкод OP_RIPEMD160 делает просто "The input is hashed using RIPEMD-160."
Опкод OP_HASH160 делает "The input is hashed twice: first with SHA-256 and then with RIPEMD-160."
https://en.bitcoin.it/wiki/Script

Хэши кстати тоже хитрая штука. Всякие онлайн-сервисы дают хэши которые биткоин не понимает.
Вот тут я вопрос задавал https://bitcointalksearch.org/topic/bitcoin-script-need-help-5048638
Тут решение https://bitcointalksearch.org/topic/m.46822169


И такой вопрос возник, а насколько это вообще надежно, это же нестандартная транзакция? Не может ли случиться так, что ноды перестанут такие транзакции обрабатывать?

P2SH это стандартные транзакции.
Алгоритм примерно следующий:
1. Пишем скрипт
2. Считаем хэш скрипта redeemScriptHash = hash160(скрипт)
3. Посылаем стандартную P2SH транзакцию scriptPubKey = OP_HASH160 OP_EQUAL

Чтобы потратить битки из транзакции посылаем стандартную транзакцию у которой scriptSig = скрипт
legendary
Activity: 2408
Merit: 1834
Crypto for the Crypto Throne!
И такой вопрос возник, а насколько это вообще надежно, это же нестандартная транзакция? Не может ли случиться так, что ноды перестанут такие транзакции обрабатывать?

Ну нестандартная это не не валидная (invalid), правда? Значит отвергать ее могут только обычные ноды, большинство майнеров ее с радостью смайнит и еще за хорошую комиссию (так как большинство нестандартных за исключением пересылки пыли имеют очень даже неплохие комиссии) спасибо скажет. А протолкнуть майнерам можно хоть на прямую, в том же акселераторе ViaBTC например.
legendary
Activity: 1806
Merit: 1940
Crypto Swap Exchange
Например.
секретное слово1 = blablabla
хэш(blablabla)  = 7f9038204185da148f636a56713991e379473089
секретное слово2 = ololo
хэш(ololo) = 4a287de13f0649b7645ea163d1949af3baf0e1be
Почему-то у меня другие хеши получились. Я делал хеш(blablabla) = ripemd160(sha256(626c61626c61626c61)), это неправильно?

Quote
Время, когда можно будет забрать биткоины с помощью первого слова (blablabla) = 1.01.2019 = 1546331341 (время в формате юникс)

Тогда контракт выглядит так
OP_IF 1546331341 OP_CHECKLOCKTIMEVERIFY OP_DROP OP_RIPEMD160 7f9038204185da148f636a56713991e379473089 OP_EQUALVERIFY OP_ELSE OP_RIPEMD160 4a287de13f0649b7645ea163d1949af3baf0e1be OP_EQUALVERIFY OP_ENDIF

В шестнадцатиричном виде:
63051546331341b175a6147f9038204185da148f636a56713991e3794730898867a6144a287de13f0649b7645ea16 3d1949af3baf0e1be8868
Вы забыли в шестнадцатеричный вид время перевести.

И такой вопрос возник, а насколько это вообще надежно, это же нестандартная транзакция? Не может ли случиться так, что ноды перестанут такие транзакции обрабатывать?
full member
Activity: 1589
Merit: 214
Подскажите, как сделать подобие завещания в биткоине. Хочется, чтобы до определенного момента монеты можно было потратить одним ключом, а после другим или несколькими.
Ты там ещё не гробанулся? Если да, то я - некропостер. Если нет, то...

Вот здесь: https://www.bitaddress.org/
Если поялозишь мышкой, то на вкладке Split Wallet,
можно сгенерировать некие шары, в N-ном количестве, задав число шар K, для объёдинения их - в приватный ключ.
Тогда, для получения приватного ключа - достаточно объединить K шар из N, и не важно в каком порядке.

Так вот, анон, ты можешь до определённого момента, держать монеты на своём адресе, владея при этом соим privkey,
но ты можешь создать RAW-транзакцию, подписать её своим приватным ключём (privkey),
и не отправить её в сеть к майнерам для подтверждения.
Это будет твоя - оффлайн RAW-транзакция.
Так как timestamp внутри транзакции нет, она может быть подтверждена и включена в блок в любое время, попозже,
причём тогда, когда она будет отправлена в сеть, к майнерам, на майнинговые пулы,
если будет корректно указанный неизрасходованный выход, и если монеты будут лежать там нерастраченными.

Пока эта транзакция в сеть не отправлена, ты можешь в любой момент создать другую транзакцию,
указав в ней всё те же неизрасходованные выходы, и отправить к майнерам, в сеть - уже её,
после подписи её - своим приватным ключём (privkey).

Но, если ты этого не сделал по какой-либо причине (умер, например),
то в какой-то определённый момент, ты можешь внезапно
заброадкастить свою первую ту RAW-транзакцию, каким-нибудь скриптом,
и биткоины - они могут уйти на этот вот адрес,
приватный ключ от которого - создавался из сгенерированных K шар из N.

Дальше... Если ты сгенерировал 2 шары из двух, допустим, то очевидно, то что ты можешь
передать одну из шар - получателю, а другую - просто прописать в примечании к транзакции.
Для этого, можешь использовать OP_PUSHDATA,
и закодировать одну из шар в hexadecimal value,
также, как некоторые - оставляют скрытые послания в блокчейне.
Чтобы вшить текст в RAW-транзакцию, глянь вот этот пост.

Тогда, по идее, получатель, владея одной из шар, и зная твой адрес, может увидеть в блокчейне -
исходящую транзакцию с твоего адреса, достать шару из примечания её,
объединить эту шару со своей, и получить privkey от адреса, куда ушли битки с твоего адреса.

Разумеется, делать всё это, рекомендуется - после успешных тестов. А bitaddress.org - он в zip-e с сети выкачивается.
Однако к моменту декодирования уже, онлайн его может не быть,
разве что в виде исходников где-то, на чьих-то поломанных - жестких дисках и флешках.
Так что потомки могут не найти его вовсе.
А в примечание к RAW-транзакции - целый скрипт пихать... Ну хз, хз...
cablegate-201012041811.7z без проблем, вон, запхнули... Просто порезали hex и частями в блокчейн прям засунули.

Имей же в виду это!
legendary
Activity: 1792
Merit: 1028
dzyk.ru
пароль от кошелька отдаете сразу, флешку в банковскую ачейку и все ))) после смерти все по завещанию или по закону родне через 6 мес)))
никакой эфир не нужен, не мудрите))) проблема эфира = проблема оракула.... эфир ничего не изменил
sr. member
Activity: 1316
Merit: 420
KTO EC/\U HUKTO?
Тогда нужно, чтобы завещание срабатывало при введении номера свидетельства о смерти, который бъётся с блокчейн-реестром, который уже внедряется.

Внедряется только в твоих фантазиях. Ссылку на гитхаб в студию. Такими темпами этот раздел придётся переименовать в Фантазёры.
newbie
Activity: 60
Merit: 0
Тогда нужно, чтобы завещание срабатывало при введении номера свидетельства о смерти, который бъётся с блокчейн-реестром, который уже внедряется.
jr. member
Activity: 46
Merit: 3
А не лучше ли все данные кошелька указать в бумажном завещании, которое будет храниться в сейфе, например?  Если нет сейфа, то просто частями в разных местах, о которых будут знать только наследники.
Это уже предлагалось. Наследники могут сговориться и объединить части завещания которые у них есть и потратить крипту.
member
Activity: 602
Merit: 10
God is with us
Ну когда то давно было похожее через емейл: если человек пропустил контрольные сроки и не ответил на письмо - то считался мертвым и его файлы куда то переправлялись. Может и тут что-то подобное - не запустил кошелек, заболел, через сколько то дней не запустил - в реанимации, ну и последний срок пропустил - значит конец настал.

На таких условиях? Не дай бог тебя пошлют в командировку в какую -нибудь Тьму-Таракань, где не только интернета, но и обычной связи то нет, кроме голубиной почты.  Или не приведи господи в тюрьму загреметь. Все плакали твои биткоины. Ты для них умер.
newbie
Activity: 60
Merit: 0
А не лучше ли все данные кошелька указать в бумажном завещании, которое будет храниться в сейфе, например?  Если нет сейфа, то просто частями в разных местах, о которых будут знать только наследники.
member
Activity: 196
Merit: 52
...OP_IF 1546331341 OP_CHECKLOCKTIMEVERIFY ...
Понятно, мы заряжаем контракт на определенный срок.
Но как применить это к основному вопросу темы? Т.е. получатель завещания вскроет
его в строго назначенную дату. Но кто данную дату определит?
Ведь никто не ждет этого события раньше времени. А если человек с хорошим
здоровьем зарядил контракт лет на 10, то в случае форс мажора получателям придется
ждать.... Хотя подобные контракты по моему не рекомендуется создавать на  слишком
длительный срок?
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange

Хочу попробовать сделать такое в тестнете. Подскажите пожалуйста, как вы получаете из OP_IF 1546331341 OP_CHECKLOCKTIMEVERIFY ... шестнадцатеричный вид ? Как сделать, отправить и потратить такую транзакцию в bitcoin-core ? или для этого нужны какие-то другие инструменты ?

Я использую библиотеку bitcoinjs-lib
sr. member
Activity: 316
Merit: 251
Подскажите, как сделать подобие завещания в биткоине. Хочется, чтобы до определенного момента монеты можно было потратить одним ключом, а после другим или несколькими.

OP_IF время OP_CHECKLOCKTIMEVERIFY OP_DROP OP_RIPEMD160 OP_EQUALVERIFY OP_ELSE OP_RIPEMD160 OP_EQUALVERIFY OP_ENDIF

Тему можно закрывать  Smiley
А можно объяснить в общих чертах для неподкованных, что это за код, как и где применяется в BTC ?

Ой, ошибочка.
Вот правильно

OP_IF время OP_CHECKLOCKTIMEVERIFY OP_DROP OP_RIPEMD160 хэш_какого-то_секрета1 OP_EQUALVERIFY OP_ELSE OP_RIPEMD160 хэш_какого-то_секрета2 OP_EQUALVERIFY OP_ENDIF

Это смарт контракт биткоина...

Да, в биткоине можно делать смарт-контракты ))
Более того, абсолютно все до единой транзакции в биткоине - это смартконтракты!

Вот если написать такой контракт
потом сформировать адрес этого контракта
потом отправить на сформированный адрес биткоины...
то потом эти биткоины можно будет забрать одним из двух способов:
1. Сформировав новый контракт в котором будет написано правильное время и правильное секретное слово1
2. Сформировав новый контракт в котором будет написано правильное секретное слово2

Например.
секретное слово1 = blablabla
хэш(blablabla)  = 7f9038204185da148f636a56713991e379473089
секретное слово2 = ololo
хэш(ololo) = 4a287de13f0649b7645ea163d1949af3baf0e1be
Время, когда можно будет забрать биткоины с помощью первого слова (blablabla) = 1.01.2019 = 1546331341 (время в формате юникс)

Тогда контракт выглядит так
OP_IF 1546331341 OP_CHECKLOCKTIMEVERIFY OP_DROP OP_RIPEMD160 7f9038204185da148f636a56713991e379473089 OP_EQUALVERIFY OP_ELSE OP_RIPEMD160 4a287de13f0649b7645ea163d1949af3baf0e1be OP_EQUALVERIFY OP_ENDIF

В шестнадцатиричном виде:
63051546331341b175a6147f9038204185da148f636a56713991e3794730898867a6144a287de13 f0649b7645ea163d1949af3baf0e1be8868

Адрес контракта:
33XxDxPsvyMmMPA4VALTQ5aPso5c3czwA5
Хочу попробовать сделать такое в тестнете. Подскажите пожалуйста, как вы получаете из OP_IF 1546331341 OP_CHECKLOCKTIMEVERIFY ... шестнадцатеричный вид ? Как сделать, отправить и потратить такую транзакцию в bitcoin-core ? или для этого нужны какие-то другие инструменты ?
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
jr. member
Activity: 46
Merit: 3
Подскажите, как сделать подобие завещания в биткоине. Хочется, чтобы до определенного момента монеты можно было потратить одним ключом, а после другим или несколькими.

OP_IF время OP_CHECKLOCKTIMEVERIFY OP_DROP OP_RIPEMD160 OP_EQUALVERIFY OP_ELSE OP_RIPEMD160 OP_EQUALVERIFY OP_ENDIF

Тему можно закрывать  Smiley
А можно объяснить в общих чертах для неподкованных, что это за код, как и где применяется в BTC ?

Ой, ошибочка.
Вот правильно

OP_IF время OP_CHECKLOCKTIMEVERIFY OP_DROP OP_RIPEMD160 хэш_какого-то_секрета1 OP_EQUALVERIFY OP_ELSE OP_RIPEMD160 хэш_какого-то_секрета2 OP_EQUALVERIFY OP_ENDIF

Это смарт контракт биткоина...

Да, в биткоине можно делать смарт-контракты ))
Более того, абсолютно все до единой транзакции в биткоине - это смартконтракты!

Вот если написать такой контракт
потом сформировать адрес этого контракта
потом отправить на сформированный адрес биткоины...
то потом эти биткоины можно будет забрать одним из двух способов:
1. Сформировав новый контракт в котором будет написано правильное время и правильное секретное слово1
2. Сформировав новый контракт в котором будет написано правильное секретное слово2

Например.
секретное слово1 = blablabla
хэш(blablabla)  = 7f9038204185da148f636a56713991e379473089
секретное слово2 = ololo
хэш(ololo) = 4a287de13f0649b7645ea163d1949af3baf0e1be
Время, когда можно будет забрать биткоины с помощью первого слова (blablabla) = 1.01.2019 = 1546331341 (время в формате юникс)

Тогда контракт выглядит так
OP_IF 1546331341 OP_CHECKLOCKTIMEVERIFY OP_DROP OP_RIPEMD160 7f9038204185da148f636a56713991e379473089 OP_EQUALVERIFY OP_ELSE OP_RIPEMD160 4a287de13f0649b7645ea163d1949af3baf0e1be OP_EQUALVERIFY OP_ENDIF

В шестнадцатиричном виде:
63051546331341b175a6147f9038204185da148f636a56713991e3794730898867a6144a287de13 f0649b7645ea163d1949af3baf0e1be8868

Адрес контракта:
33XxDxPsvyMmMPA4VALTQ5aPso5c3czwA5



Cпасибо за развернутый ответ. Эта инфа наверняка для многих будет новостью. Я в принципе не удивлен, потому что часто слышал что на BTC можно многое, а не только покупать продавать. Но теперь это нужно изучать, что б лучше понять. тему бы на форуме...
Не знал что на BTC можно смарт контракты делать, а где можно посмотреть исходники по этому делу?
hero member
Activity: 784
Merit: 814
Подскажите, как сделать подобие завещания в биткоине. Хочется, чтобы до определенного момента монеты можно было потратить одним ключом, а после другим или несколькими.

OP_IF время OP_CHECKLOCKTIMEVERIFY OP_DROP OP_RIPEMD160 OP_EQUALVERIFY OP_ELSE OP_RIPEMD160 OP_EQUALVERIFY OP_ENDIF

Тему можно закрывать  Smiley
А можно объяснить в общих чертах для неподкованных, что это за код, как и где применяется в BTC ?

Ой, ошибочка.
Вот правильно

OP_IF время OP_CHECKLOCKTIMEVERIFY OP_DROP OP_RIPEMD160 хэш_какого-то_секрета1 OP_EQUALVERIFY OP_ELSE OP_RIPEMD160 хэш_какого-то_секрета2 OP_EQUALVERIFY OP_ENDIF

Это смарт контракт биткоина...

Да, в биткоине можно делать смарт-контракты ))
Более того, абсолютно все до единой транзакции в биткоине - это смартконтракты!

Вот если написать такой контракт
потом сформировать адрес этого контракта
потом отправить на сформированный адрес биткоины...
то потом эти биткоины можно будет забрать одним из двух способов:
1. Сформировав новый контракт в котором будет написано правильное время и правильное секретное слово1
2. Сформировав новый контракт в котором будет написано правильное секретное слово2

Например.
секретное слово1 = blablabla
хэш(blablabla)  = 7f9038204185da148f636a56713991e379473089
секретное слово2 = ololo
хэш(ololo) = 4a287de13f0649b7645ea163d1949af3baf0e1be
Время, когда можно будет забрать биткоины с помощью первого слова (blablabla) = 1.01.2019 = 1546331341 (время в формате юникс)

Тогда контракт выглядит так
OP_IF 1546331341 OP_CHECKLOCKTIMEVERIFY OP_DROP OP_RIPEMD160 7f9038204185da148f636a56713991e379473089 OP_EQUALVERIFY OP_ELSE OP_RIPEMD160 4a287de13f0649b7645ea163d1949af3baf0e1be OP_EQUALVERIFY OP_ENDIF

В шестнадцатиричном виде:
63051546331341b175a6147f9038204185da148f636a56713991e3794730898867a6144a287de13 f0649b7645ea163d1949af3baf0e1be8868

Адрес контракта:
33XxDxPsvyMmMPA4VALTQ5aPso5c3czwA5



Cпасибо за развернутый ответ. Эта инфа наверняка для многих будет новостью. Я в принципе не удивлен, потому что часто слышал что на BTC можно многое, а не только покупать продавать. Но теперь это нужно изучать, что б лучше понять. тему бы на форуме...
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
Подскажите, как сделать подобие завещания в биткоине. Хочется, чтобы до определенного момента монеты можно было потратить одним ключом, а после другим или несколькими.

OP_IF время OP_CHECKLOCKTIMEVERIFY OP_DROP OP_RIPEMD160 OP_EQUALVERIFY OP_ELSE OP_RIPEMD160 OP_EQUALVERIFY OP_ENDIF

Тему можно закрывать  Smiley
А можно объяснить в общих чертах для неподкованных, что это за код, как и где применяется в BTC ?

Ой, ошибочка.
Вот правильно

OP_IF время OP_CHECKLOCKTIMEVERIFY OP_DROP OP_RIPEMD160 хэш_какого-то_секрета1 OP_EQUALVERIFY OP_ELSE OP_RIPEMD160 хэш_какого-то_секрета2 OP_EQUALVERIFY OP_ENDIF

Это смарт контракт биткоина...

Да, в биткоине можно делать смарт-контракты ))
Более того, абсолютно все до единой транзакции в биткоине - это смартконтракты!

Вот если написать такой контракт
потом сформировать адрес этого контракта
потом отправить на сформированный адрес биткоины...
то потом эти биткоины можно будет забрать одним из двух способов:
1. Сформировав новый контракт в котором будет написано правильное время и правильное секретное слово1
2. Сформировав новый контракт в котором будет написано правильное секретное слово2

Например.
секретное слово1 = blablabla
хэш(blablabla)  = 7f9038204185da148f636a56713991e379473089
секретное слово2 = ololo
хэш(ololo) = 4a287de13f0649b7645ea163d1949af3baf0e1be
Время, когда можно будет забрать биткоины с помощью первого слова (blablabla) = 1.01.2019 = 1546331341 (время в формате юникс)

Тогда контракт выглядит так
OP_IF 1546331341 OP_CHECKLOCKTIMEVERIFY OP_DROP OP_RIPEMD160 7f9038204185da148f636a56713991e379473089 OP_EQUALVERIFY OP_ELSE OP_RIPEMD160 4a287de13f0649b7645ea163d1949af3baf0e1be OP_EQUALVERIFY OP_ENDIF

В шестнадцатиричном виде:
63051546331341b175a6147f9038204185da148f636a56713991e3794730898867a6144a287de13 f0649b7645ea163d1949af3baf0e1be8868

Адрес контракта:
33XxDxPsvyMmMPA4VALTQ5aPso5c3czwA5


hero member
Activity: 784
Merit: 814
Подскажите, как сделать подобие завещания в биткоине. Хочется, чтобы до определенного момента монеты можно было потратить одним ключом, а после другим или несколькими.

OP_IF время OP_CHECKLOCKTIMEVERIFY OP_DROP OP_RIPEMD160 OP_EQUALVERIFY OP_ELSE OP_RIPEMD160 OP_EQUALVERIFY OP_ENDIF

Тему можно закрывать  Smiley
А можно объяснить в общих чертах для неподкованных, что это за код, как и где применяется в BTC ?
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
Подскажите, как сделать подобие завещания в биткоине. Хочется, чтобы до определенного момента монеты можно было потратить одним ключом, а после другим или несколькими.

OP_IF время OP_CHECKLOCKTIMEVERIFY OP_DROP OP_RIPEMD160 OP_EQUALVERIFY OP_ELSE OP_RIPEMD160 OP_EQUALVERIFY OP_ENDIF

Тему можно закрывать  Smiley
Pages:
Jump to: