PHP - Bitcoind устанавливает неправильную комиссию за транзакцию

Я использую биткойн API EasyBitcoin-PHP

А также у меня есть собственная комиссия за транзакцию, которую я хотел бы платить за каждый килобайт. Проблема в том, что когда я использовал биткойн v.0.10.2, все было в порядке, и я видел свою пользовательскую комиссию (0,0002) в каждой транзакции. Но когда я обновился до v. 0.13.0 - он просто не работает как надо. Вот простой код, который я сейчас тестирую

$bitcoin = new Bitcoin($user, $password, $host, $port);

$result = $bitcoin->settxfee(0.0002); //returns true
$newTxId = $bitcoin->sendtoaddress('144YsrgtDmRSPC8wUBXLxByCcQAEbV1EUB', 0.001); //returns c3a2fceed1c25624aee8e957c644813bf38808260aad607e623c68e182371ac9

Как видите, в этой транзакции комиссия составляет 0,000045 BTC, а не 0,0002 BTC.

Я знаю, что в предыдущей версии bitcoind была ошибка по округлению комиссий, но в новой версии эта ошибка должна быть исправлена.

Может тут другая беда?

Ответы (1)

Значение, которое вы указываете для пользовательской платы, указано в плате за килобайт. До недавнего времени «размер» для расчета комиссии в любом случае всегда округлялся до 1 килобайта, что заставляло некоторых людей полагать, что сумма, которую они устанавливают, является абсолютной суммой.

Ваша транзакция занимает 225 байт и оплачивает комиссию в размере 0,000045 BTC. Это ровно 0,0002 BTC на 1000 байт, так что все работает как положено.

Да, я знаю. Вот даже проблема github для этого. github.com/bitcoin/bitcoin/issues/7633 и, как я вижу, они решили вернуть функцию, и теперь поведение должно быть таким же, как в старых версиях. Я прав?
Они возвращены только в 0.11, потому что изменение было внесено без объявления. То, что я описываю в своем ответе, - это предполагаемое поведение, реализованное в 0.12 и 0.13.
а ну понятно. Так что в новых версиях сейчас работает вот это... Хм... нехорошо. «Потому что мне нужно оценить размер моей будущей транзакции сейчас, чтобы показать моим пользователям, какую комиссию я вычту из их выплаты… и прямо сейчас я не знаю, как ее оценить…
Используйте create/fundrawtransaction, чтобы создать транзакцию, проверить комиссию, показать ее и, если вы согласны, использовать signrawtransaction/senddrawtransaction для ее трансляции.
большое усложнение простого (до) процесса выплаты как для пользователей, так и для разработчиков :( но спасибо за помощь!
Я понимаю, что это усложняет ситуацию, но на самом деле это не так. Плата за байт имеет значение для сети.