Я пытаюсь написать программу для получения биткойнов, а затем через некоторое время вернуть такое же количество биткойнов на тот же адрес.
Как бы вы это сделали? Есть ли у биткойна возможность отправлять и получать монеты через один и тот же адрес, или мне нужно будет запросить обратный адрес и каким-то образом связать адрес отправленной суммы с обратным адресом?
Вы должны попросить обратный адрес. Биткойн-транзакции не содержат адреса отправителя, они ссылаются только на результат другой (предыдущей) транзакции. Выходным сигналом может быть P2PKH (плата за хэш открытого ключа), но он также может быть P2SH (оплата за хеш скрипта), и в будущем могут быть реализованы некоторые другие.
Существует также большая вероятность получения транзакции, ссылающейся на множество предыдущих выходов, как это происходит, когда кто-то, платящий вам 1 BTC, ранее получил много меньших транзакций.
Это также было бы неинтуитивно для ваших пользователей, поскольку в биткойнах рекомендуется не заботиться о том, откуда берутся биткойны, а вместо этого генерировать новый адрес для каждой полученной транзакции.
Кроме того, вам не следует внедрять какую-либо криптографию самостоятельно, если вы еще не являетесь экспертом высшего уровня, слишком много всего может пойти не так. Я бы рекомендовал использовать правильный API.
Ради всего святого, не делай этого. Учитывать:
Алиса хочет отправить вам 1 биткойн. Она просит поставщика своего кошелька отправить вам 1 биткойн. Ее провайдер кошелька отправляет вам биткойны, которые он получил от Боба, когда он пополнил свой кошелек.
Вы смотрите на транзакцию и видите, что монеты пришли с депозитного адреса Боба. Таким образом, вы отправляете монеты обратно на этот адрес. Поставщик кошелька Алисы видит монеты, полученные на депозитный адрес Боба, и кредитует Боба.
Боб недоумевает, почему он получил биткойны от случайного незнакомца, но, поскольку он понятия не имеет, кто вы, и не может связаться с вами, он просто хранит их. Черт возьми, может быть, это адрес, который он обнародовал как банку для чаевых, и у него нет причин не думать, что это чаевые.
В конечном итоге Алиса может задаться вопросом, почему она не получила свои биткойны. Если она свяжется с вами, вы сообщите ей идентификатор транзакции. Она подумает: «Хм, это не мой адрес. Но он должен принадлежать провайдеру моего кошелька. Значит, у них должны быть биткойны. Когда я объясню им, что они мои, они должны зачислить их мне».
И теперь у нас большой беспорядок, когда все обвиняют всех остальных, и Алиса думает, что ее провайдер кошелька украл у нее, а вы думаете, что это не ваша вина. Но ты ошибаешься.
Пожалуйста не делай этого. В этом нет никакого смысла. (История выше реальна. Только имена были изменены, чтобы защитить невиновных... и виновных.)
there is no reason to expect it to do so
почему? ядро биткойна не предоставляет заявлений об ожидаемом поведении или семантике, они только предоставляют справочную базу кода. В исходном техническом документе говорится, coins made from digital signatures, which provides strong control of ownership
что контроль не передается от пользователя к пользователю ... в нем также говорится, что a new key pair should be used
он говорит, что должен , а не должен ... Без централизованного органа, определяющего, какая точка зрения является действительной и канонической, они должны оба быть действительным. Так почему моя точка зрения неверна?control of ownership
все в руках веб-провайдеров, и поэтому нет никаких гарантий, кто получит деньги, веб-провайдер может украсть все деньги для себя, поэтому не следует ожидать использования ЛЮБОГО платежного адреса на основе веб-провайдера. отправить деньги пользователю, которого вы ожидаете...That evidence is specifically what we don't have
, тогда что такое «404371705fa9bd789a2fcd52d2c580b65d35549d» в OP_DUP OP_HASH160 404371705fa9bd789a2fcd52d2c580b65d35549d OP_EQUALVERIFY OP_CHECKSIG
файле . Криптографически подписанные доказательства.
scriptPubKey
scriptSig
Your statement above about web providers is right
, но я приводил абсурдный аргумент ( the web-provider could steal all the money for themselves [...] should not be expected to send money to the user you expect it to...
), единственным выводом которого было бы то, что никто никогда не должен использовать веб-провайдера (за исключением отмывания денег / мазохистских пожертвований через веб-провайдера). Это противоречило бы самой предпосылке для кошельков на основе веб-провайдера.Как бы вы это сделали?
Я бы предоставил свой более-менее "публичный" адрес. Тогда люди могли бы отправлять сатоши на этот адрес. Как только транзакция с Satoshis будет подтверждена, я проанализирую транзакцию, потому что она содержит scriptsig и pubkey (из которых мы можем получить адрес отправки). Так что я бы сохранил это и, когда придет время, отправил бы обратно на этот адрес. Проблема здесь: это снижает конфиденциальность. Не рекомендуется повторно использовать адреса.
Есть ли у биткойна возможность отправлять и получать монеты через один и тот же адрес
да, вы можете настроить/запрограммировать свою транзакцию таким образом, чтобы адреса использовались повторно. Нужно иметь достаточные навыки, хотя :-)
или мне нужно будет запросить обратный адрес и каким-то образом связать адрес отправленной суммы с обратным адресом?
имхо, это лучший и желаемый способ, потому что он сохраняет конфиденциальность. Также вам не нужно привязывать сумму к адресу — это может стать небезопасным (два человека отправляют одинаковую сумму — как отличить?). Как и раньше, транзакцию можно просмотреть, извлечь sig и pubkey и связать исходный pub key (и его адрес) с новым адресом.
О транзакциях и их содержимом: https://bitcoin.org/en/developer-reference#raw-transaction-format , а также очень полезно: http://chimera.labs.oreilly.com/books/1234000001802/ch02.html# _bitcoin_transactions (и, возможно, миллион других :-)
Узиниум
Хьюберт Ясенецкий