Отправка очень большой суммы с вызовом RPC sendtoaddress

Я работаю с Infinitecoin (еще один биткойн-форк).
Это моя первая попытка сделать сайт на основе криптовалюты.
Я использую PHP с вызовами JSON RPC. В этом конкретном случае я хочу использовать

$payment_tx = $ifc->sendtoaddress($account['address'], $to_send);

($ifc — это объект, возвращаемый соединением jsonRPcclient())

sendtoaddress()в описании указано:

Сумма $ является реальной и округляется до 8 знаков после запятой.
Поэтому я отформатировал «$to_send», как указано в описании, но все равно получаю:

* Трассировка стека: #0 /opt/lampp/htdocs/site/process_payment.php(30): jsonRPCClient->__call('sendtoaddress', Array) #1 /opt/lampp/htdocs/site/process_payment.php(30) : jsonRPCClient->sendtoaddress('iKCBBVAfacVuabG...', '10920.00000000') #2 {main} добавлено в /opt/lampp/htdocs/site/jsonRPCClient.php в строке 140*

Я действительно не понимаю, почему, потому что я намерен отправить ровно 10920 Infinitecoins на адрес, начинающийся с iKCBBVAfacVuabG ... и это правильно отформатировано, верно?
Я также хочу иметь возможность отправлять суммы IFC до нескольких миллионов. Как ?

Вот как я делаю форматирование:

$to_send = sprintf("%.8f", floatval($amount));  

$amount извлекается из базы данных.

Пожалуйста, может кто-нибудь просветить меня, что я делаю неправильно?

Я могу предложить немного IFC в качестве благодарности за вашу помощь, если кому-то нужно. :-)

Ответы (1)

вы пытаетесь отправить сумму в виде строки. Sprintf возвращает строку. Вам нужно отправить сумму как двойную (в PHP double == float).
Попробуйте так:

$payment_tx = $ifc->sendtoaddress($account['address'], (double)$to_send);

Если это не сработает, сначала используйте перемещение, потому что отправка может завершиться ошибкой во многих случаях, в то время как перемещение работает всегда.

Как только вы закончите с этим, пожалуйста, прочитайте мой вопрос о дальнейших проблемах с точностью: Могу ли я заставить json_encode в PHP выводить 8 цифр после точки для RPC?