Я создал хэш-значение, используя createrawtransaction и signrawtransaction, и я предполагаю, что я мог бы отработать байтовый размер этого хэш-значения. Что я нахожу в заблуждение в том, что я не получаю значение хеш-функции, пока createrawtransaction не была выполнена, и я должен ввести в стоимость платы в createrawtransaction.
Createrawtransaction не возвращает хэш, он возвращает необработанные байты, которые могут быть подсчитаны. Количество байтов, позанимайтесь требуемую плату, а затем вычесть его из сигнала изменения (изменение значения выхода не влияет на размер сделки).
Вы также можете оценить размер ТХ, так что вы можете поместить требуемую плату TX в первой попытке. Тогда как foxpup сказал вычислить размер ТХ и при необходимости вернуться изменить размер платы путем изменения меньше. Думайте об этом как потенциально быть процессом два прохода. Это предполагает, что вы не пытаетесь тратить много ресурсов пыли *, и вы должны настроить УЮ таким образом, что у вас есть выход изменения с достаточной величиной, что она может быть уменьшена, чтобы покрыть потенциал (увеличение) плату. Если выходное изменение меньше, чем сумма увеличения платы, то он может получить более сложным.
Для "нормальный" (Pay2PubKeyHash) TXS:
signed_tx_size (в байтах) ~ = 10 + (numInputs * 148) + (numOutputs * 34)
Это предполагает, что все входы сжатая PubKeys. Несжатого Публичных 32 байта больше, так что размер входного будет 180 байт вместо. Bitcoin использует varint для #Inputs, #Outputs и длины таким образом это должно быть использовано только в качестве оценки сценария.
Так, например, если вы создавали TX, который имеет 4 входа (один из которых является несжатый), три выхода (включая выход изменения). Если все входы / выходы Pay2PubKeyHash тогда размер будет примерно (10 + 148 * 3 +32 + 3 * 34) = 588 байт. Округление до ближайшего KB размера ТХ 1KB. Если вы хотите плату 0,1 МВТСА в КБ это будет общий сбор в размере 0,1 МВТСА. Таким образом, установлено выходное изменение таким образом, что входы - выходы = 0,1 МБТЕ. Создание и распишитесь. Теперь дважды проверьте размер подписанного ТМ. Это <1KB (в данном случае нет никаких шансов на него собирается более 1000 байт, но для ТХ близких к пределу это может)? Если это так вы сделали. Если нет (скажем, размера ТХ байт тысячи тридцать восемь), то уменьшить изменение еще на 0,1 МВТС (в результате 0,2 МВТС платы на 2KB Ого = 0,1 МВТСА же за КБ).
* Слово о входах пыли. Вещи начинают получить сложно, если вы пытаетесь провести много крошечных выходов пыли. Это может привести к более сложному алгоритму создания ОГО или некорректно, что приводит к недостаточным платам, чтобы обеспечить своевременное включение в блоке. Если на вашем "второй проход" вам нужно поднять плату = понизить значение сигнала изменения и выход изменения "слишком маленький" чтобы покрыть рост, то вам нужно будет добавить еще входы. Это может привести к ТХ быть достаточно большим, что плата должна быть увеличена, а также (плата за килобайт), и вы могли бы в конечном итоге с недостаточной имеющейся продукции, требующей второго или третьего прохода. После того, как все имеющиеся входы находятся ниже порога пыли вы обнаружите, что становится невозможным до создания ТХ (т.е. добавление выходов увеличивает плату больше, чем стоимость его добавляет и, таким образом, вы будете проходить через несколько проходов до тех пор, пока не исчерпаем все выходы и в конечном итоге с гигантским ТМ, который все еще имеет недостаточную плату). Если вы хотите сохранить ваш алгоритм простой, я бы рекомендовал исключить пыльные выходы из выбора входа.