Если бы я хотел построить торговый автомат, в котором можно было бы купить колу, заплатив биткойнами, был бы следующий сценарий типичным способом сделать это?
Это звучит хорошо, в общих чертах. Есть несколько вещей, на которые я бы обратил внимание:
Возврат может быть сложным. Люди, использующие веб-кошельки, могут не иметь собственных адресов; оператор кошелька имеет большой пул адресов и отслеживает балансы клиентов внутри компании. Когда клиент хочет произвести платеж, оператор платит с одного из адресов пула и списывает средства со счета клиента. Таким образом, если вы попытаетесь отправить возврат средств такому клиенту, он вернется на адрес оператора, но у них может не быть возможности / мотивации для повторного кредитования клиента. Они могут даже выбросить закрытый ключ после того, как монеты будут потрачены (и сдача будет отправлена на новый адрес пула), и в этом случае возвращенные монеты будут потеряны навсегда. В любом случае, клиент в тупике. Дополнительную информацию можно найти в разделе Существует ли стандартная процедура возврата биткойн-транзакций? и БИП 70— это предлагаемое решение (где клиент явно указывает отдельный адрес для возврата), но, поскольку это включает в себя некоторые внеполосные сообщения по HTTPS, на стороне сервера требуется дополнительная инфраструктура.
Возможно, вы захотите отказаться от доставки продукта через 2 минуты, но вы можете не захотеть отказываться от оплаты. Например, если у вашего компьютера или мобильного устройства клиента есть проблемы с подключением к Интернету, платеж может быть создан, но не передан (или не получен вами) намного позже. Клиента, вероятно, уже нет рядом, чтобы получить свою банку Tab, но вы, возможно, захотите вернуть его деньги в любом случае. Так что вы должны держать закрытый ключ рядом. (На самом деле, нет никакой веской причины их выбрасывать: если вы отправляете деньги обратно в штаб-квартиру, они обычно не содержат монет, так что это не проблема, если они украдены, но если кто-то по какой-то причине отправит им лишние монеты, вы хотелось бы их иметь)
Точно так же, если вы отправляете возмещение, вы можете убедиться, что тратите ту же транзакцию, которая пришла. Это защитит вас в случае, если клиент попытается совершить двойную трату.
Сумма платежа может быть встроена в QR-код. Это избавляет клиента от необходимости печатать.
Быстрая отправка входящих платежей в штаб-квартиру на хранение — хорошая идея, но это будет стоить вам комиссии за каждую транзакцию. Вы можете группировать их и отправлять пару раз в день или всякий раз, когда они достигают некоторой пороговой суммы. В качестве альтернативы у вас может быть система, в которой вы генерируете кучу адресов в штаб-квартире, храните там закрытые ключи (возможно, даже в автономном режиме) и просто даете машине адреса. ( BIP 32 обеспечивает более изящный способ добиться этого.) Машина по-прежнему может обнаруживать входящие платежи, но если требуется возмещение, она должна будет отправить запрос обратно в штаб-квартиру.
Это звучит разумно. Я бы добавил, что, поскольку вы, скорее всего, захотите принимать неподтвержденные транзакции, было бы неплохо проверить список доверенных узлов (например, крупных пулов майнинга), получили ли они транзакцию. Это не полностью устраняет риск двойной траты, но снижает его.
В качестве меры предосторожности я думаю, что вы никогда не должны удалять временные адреса. Может быть, хранить их в базе данных, потому что никогда не знаешь, когда кто-то может снова случайно отправить биткойны на тот же адрес.
Пасха
cdecker
Марч