Несмотря на это, я думаю, что это выдвигает на первый план некоторые недостатки в протоколе оплаты, как он стоит. Он разработан с акцентом на купец и как таковой слишком ограничен в использовании для различных сценариев использования. По сути, он представляет собой механизм для создания конкретного типа сделки между двумя сторонами без пользователей приходится возиться с сырыми сделок. Если вы думаете, что немного больше, вы можете покрыть случай произвольного здания сделки и подписание между несколькими (а не только 2) партиями, которые вбирают Потребительную случаи уже обслужено.
В настоящее время идея заключается в том, что продавец определяет, какие выходы пользователь должен заплатить, чтобы и ожидает, что сделка будет возвращен полный и подписан.
Идея, которую я только что придумал, что общая сделка (не только выдает) проходит вокруг будучи построить в течение ряда бирж без клиентского программного обеспечения, нуждающегося ничего знать о том, как обмен должен произойти. Подписи не обязательно требуется, поэтому любые операции могут быть построены между несколькими клиентами и одним сервером, позволяя пользователям просматривать окончательную сделку до выдачи разрешения на это.
Дело в том, что получает прошли вокруг сделки и некоторые подробности о том, как клиент должен дополнительно построить сделку - то, что он должен добавить к сделке или если он должен его подписать. Оберните это, как и прежде с другими полезными деталями, как URL-адрес, ПКИ-знак и т.д.
BuildDetails сообщение {
// максимальное число входов для добавления. Таким образом, нулевой предотвращает добавление входов, один позволяет
// приведение в исполнение SIGHASH_SINGLE, другие ценности, чтобы предотвратить огромную txns пыли и т.д.
опционально maxInputs uint_64;
// Общая стоимость входов, которые необходимо предоставить
опционально uint_64 inputsValue;
// максимальное число выходов, чтобы добавить (таким образом, нулевой предотвращает добавление выходов и т.д.)
опционально maxOutputs uint_64;
// общее значение выходов, которые необходимо предоставить
опционально uint_64 outputsValue;
// нужно ли подписывать входы
требуется булево знак;
// как подписать их
опционально uint_8 sigHash;
}
сообщение TxBuilder {
дополнительные байты сделки;
Необходимые BuildDetails buildDetails;
}
Теперь в стандартном потребительной случае, первоначально торговец создает выходы, которые он хочет и заворачивает их в объекте PaymentDetails и подписывает его, создавая PaymentRequest.
Он посылает его в браузер пользователя не клиент интерпретирует это означает: «Я хотел бы добавить некоторые входы для оплаты этих выходов, (и, возможно, добавить выход для моего изменения), подписать его, а затем отправить его обратно в URL данного». Эта интерпретация все неявная и встроенные и, таким образом, ограничивают.
При подходе TxBuilder интерпретация явно.
Торговец принимает выходные сигналы, которые он хочет, как и раньше, и создает транзакцию. Он хочет, чтобы пользователь внести вклад Кто это значение соответствует его выходам, поэтому он определяет «inputsValue», и он хочет, чтобы сделка будет подписана, поэтому он определяет это тоже. Он не заботится о дополнительных выходах (возможно, он заботится о том, не создавая огромную сделку, поэтому пределы выходов 1 - что угодно).
клиент пользователя может прочитать детали сборки и определить, что он хочет, чтобы обеспечить ввод определенного значения, может добавлять выходов, как ему заблагорассудится, и должен подписать результат.
Мое решение прецедентом Серджио также можно прямо сейчас:
Торговец создает Tx с выходом для его оплаты (возможно, не с его выходом изменения пока). Он определяет значение, что входы должны составить и указывает, что транзакция не должны быть подписаны.
клиент пользователя может легко определить, что требуется и сообщить пользователю о деталях, если это будет необходимо (как не требуется подпись, существует мало вреда или иначе). Пользователь соглашается с тем, и клиент заполняет входы, добавляет выход изменения для себя и посылает транзакцию обратно.
Торговец может добавить свой гонорар входа оплаты и изменить вывод. Он определяет 0 входы и выходы должны быть добавлены, и указывает подписать сделку с SIGHASH_ALL.
Затем клиент пользователей может отображать детали окончательной сделки и спросить, если пользователь соглашается подписать. Если да, то она возвращает почти завершенную транзакцию к торговцу, который подписывает его сам (или, конечно, он подписывает его в предыдущем шаге, и дает свою способность отказаться от сделки).
Торговец может, наконец, выдать подтверждение, как и раньше, так что пользователь знает, что обмен является полным и его статусом.
EDIT: @Sergio, извините за угон