Предложение о продлении избегания Merge Протокол оплаты
Мотивацией предлагаемого расширения является поощрение Слияние Избежание в использовании Bitcoin, при наличии промежуточных шагов, между сообщением PaymentRequest от сервера торговца и платежное сообщением из бумажника приложения клиента, в котором бумажник приложение клиента уведомляет сервер торговца о том, сколько UTXOs они будут тратить, чтобы удовлетворить запрос об оплате, и сервер купеческого впоследствии обеспечивает соответствующее количество приема Bitcoin адресов (выходов в протоколе платежей) для бумажника приложения клиента, чтобы отправить платеж.
Путем сопоставления количества приема Bitcoin адреса с числом UTXOs провел, объединение выходов из бумажника приложение клиента избежать.
Предлагаемые дополнения к протоколу оплаты являются:
Новое поле «необязательно uint64 TOTAL_AMOUNT» в сообщении PaymentDetails.
Это будет поле 8 в сообщении PaymentDetails:
PaymentDetails сообщение {
Необязательная строка сети = 1 [по умолчанию = "главный"]; // "главный" или "контрольная работа"
Выходные повторные выходы = 2; // Если платеж должен быть отправлен
Требуемое время uint64 = 3; // Отметка; если платежное требование создано
дополнительный UInt64 истекает = 4; // Отметка; когда этот запрос должен быть признан недействительным
Необязательная строка памятка = 5; // удобочитаемого описание запроса для клиента
Необязательная строка payment_url = 6; // URL, чтобы отправить OutputDetails и получить AddressDetails
дополнительный байт merchant_data = 7; // Произвольные данные для включения в OutputDetails и сообщениях оплаты
опционально UInt64 TOTAL_AMOUNT = 8 // Общая сумма запрашивается в целочисленной число-satoshis
}
Новое сообщение OutputDetails, посылаемый бумажник приложение клиента:
OutputDetails сообщение {
требуется uint32 output_number = 1 // Количество UTXOs плательщик будет использовать для оплаты PaymentDetails.total_amount
дополнительные байты merchant_data = 2 // Из PaymentDetails.merchant_data
}
новый PaymentRequestFinal сообщение, которое посылается сервером торговца:
сообщение PaymentRequestFinal {
опционально uint32 payment_details_version = 1 [по умолчанию = 1];
Необязательная строка pki_type = 2 [по умолчанию = "никто"]; // нет / x509 + sha256 / x509 + sha1
дополнительный байт pki_data = 3; // зависит от pki_type
требуемые байты serialized_address_details = 4; // Подробности адреса
необязательный байт подписи = 5; // ИПК-зависимый подпись
}
новый AddressDetails сообщение, которое заворачивают в сообщении PaymentRequestFinal, который отправляется на сервер торговца:
AddressDetails сообщение {
повторные выходы Выходных = 1 // Где payemnts должно быть отправлено, количество выходов должны соответствовать OutputDetails.output_number
необязательных байтов данных = купцы 2 // Из PaymentDetails.merchant_data
}
Поток платежного протокола с расширением Merge избегания:
1. Когда сообщение PaymentDetails отправляется, новое поле PaymentDetails.total_amount уведомляет кошелек клиента приложение общую сумму, подлежащую выплате.
2. Если бумажник приложение клиента поддерживает расширение Merge избегания, он посылает OutputDetails сообщения уведомляет сервер торговца, сколько UTXOs они будут тратить, чтобы удовлетворить общую сумму запрашиваемой подлежащую выплате. Если бумажник приложение клиента не поддерживает расширение, они идут в соответствии с первоначальным протоколом, и отправить сообщение платежа.
3. Если бумажник приложение клиента посылает OutputDetails сообщения, сервер торговца отвечает с PaymentRequest_Final сообщения, которое содержит сообщение, уведомляющее AddressDetails бумажника приложение клиента которого Bitcoin адреса, чтобы сделать платеж.
4. бумажник приложение заказчика тратит каждый UTXO к другому принимающему адресу, который позволяет объединению выходов в общих адресах, которых следует избегать. От этого шага вперед, протокол работает как в оригинальной версии, так как бумажник приложение клиента посылает сообщение платежа и, возможно, публикует платежную операцию (ы) к сети Bitcoin P2P