Чтобы «отплатить кому-то», я должен попросить у них обратный адрес?

Я хочу написать код, который принимает транзакцию, а затем «возвращает» некоторую сумму источнику транзакции.

Предположим, что пользователи будут использовать стандартный клиент. Будут ли транзакции иметь один вход или я должен обрабатывать ситуацию, когда транзакция имеет несколько входов?

Могу ли я просто выбрать один из этих входов и расплатиться с ним? Я хочу избежать необходимости просить пользователей вводить биткойн-адрес для выплаты — гораздо удобнее просто возвращать деньги на тот же адрес, который они использовали.

Ответы (2)

Предположение, что пользователь использует стандартный клиент или фактически любой клиент, является очень сильным предположением. Если пользователь использует услугу электронного кошелька, такую ​​как Instawallet, по всей вероятности, пользователь не вернет средства, они будут удерживаться оператором и, возможно, будут зачислены одному из его других клиентов.

Даже если входные адреса каким-то образом контролируются пользователем, возврат на один из них может вызвать путаницу в отношении источника платежа — это будет выглядеть так, как будто платеж был за то, с чем изначально был связан адрес. Если есть адрес изменения, контролируемый пользователем, он однозначно связан с платежом вам, поэтому существует информация для его идентификации, хотя клиент может не отображать ее должным образом.

Хм. Итак, я должен попросить пользователя указать обратный адрес? Это отстой :(
Ну, это зависит. Вы можете сделать необязательное поле обратного адреса и уточнить, что если пользователь не использует клиент по умолчанию (или точно не знает, что он делает), он должен его заполнить. Для поставщиков электронных кошельков было бы неплохо связать адреса для сдачи с исходным клиентом, и в идеальном будущем, когда разумно ожидать, что электронные кошельки будут делать это, безопасно отправлять на адрес для сдачи. Кроме того, электронные кошельки могут предлагать возможность отправки платежа, сначала направляя его через адрес, связанный с клиентом.

Поскольку любой пользователь может легко получать биткойны с несколькими адресами, транзакции, которые они отправляют, могут иметь несколько входов. Есть несколько случаев, которые вы должны рассмотреть:

  • Один вход, один выход - простой случай, отправьте монеты обратно на вход (если какой-то шутник не добудет монеты на ваш адрес, тогда вы можете оставить их себе, а не отправлять на какой-то недействительный адрес)
  • Любое количество входов, два выхода - второй выход, вероятно, куда пользователь отправил свои оставшиеся монеты, вы также можете отправить их туда (хотя сначала вы должны объяснить это пользователям)
  • Несколько входов, один выход - вам, вероятно, следует предоставить пользователям две функции - либо отправка монет на первый вход, либо отправка одинакового количества монет, полученных с каждого входа, на каждый из них.
  • Несколько входов, несколько выходов - вероятно, должно работать как в предыдущем случае

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

Большинство пользователей ничего не знают о типе транзакции, которую они генерируют. Я не хочу усложнять им жизнь. Всегда ли выходы будут 1 или 2? Когда я получу транзакцию с более чем двумя выходами от законного пользователя?
@ ripper234 Вы можете сделать более сложные параметры менее доступными, например, поместив их в «расширенные параметры». Насколько я понимаю, выходы обычно будут 1 или 2 для стандартного клиента, но кто-то может использовать нестандартный клиент, который позволяет отправлять монеты сразу на несколько адресов. На данный момент я думаю, что они появляются только на биржах и майнинговых пулах, которые, вероятно, не будут использоваться для отправки вам монет.
Итак, я предположу, что у tx есть 1-2 выхода, и произвольно выберу один из входов в качестве моего адреса окупаемости.