Биткойн API не зависит от работающего биткойн-демона?

Я пытаюсь запустить веб-сайт, ориентированный на биткойны, и мне нужно иметь возможность выполнять следующие действия без запуска демона биткойнов на каком-либо сервере из-за ограничений, установленных моим хостом:

  1. Создайте новый биткойн-адрес (getnewaddress($account))
  2. Получите монеты на этот адрес; определить, сколько было получено (getreceivedbyaccount($account, $minconf=1))
  3. Отправить монеты на адрес (sendfrom($fromaccount, $tobitcoinaddress, $amount, $minconf=1, $comment="", $comment-to=""))

Все эти функции существуют в существующем php-клиенте json-rpc, но все они зависят от запущенного биткойн-демона на сервере.

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

Вкратце: мне нужна версия биткойнского php API, которая не требует запуска демона, с минимальными функциями, описанными выше.


person Cyclone    schedule 05.08.2011    source источник


Ответы (6)


Blockchain.info предоставляет API, совместимый с Bitcoind JSON rpc.

http://blockchain.info/api/json_rpc_api

person Community    schedule 23.08.2012
comment
но я бы предпочел не зависеть от другого сервиса для получения данных блока или отправки биткойнов. Я не буду -1, потому что я был немного расплывчатым, но я знаю и знаю об API blockchain.info, который просто не отвечает на мой вопрос. - person Cyclone; 23.08.2012

TL;DR;: не запустить какой-либо биткойн-клиент и не доверять третьей стороне будет невозможно.

Хотя третье лицо может сообщить вам баланс счета, вам придется доверить третьему лицу обработку закрытых ключей, необходимых для подписи транзакций, как только вы используете getnewaddress или sendfrom, что, вероятно, не то, что вы хочу сделать.

Насколько я вижу, возможным минимальным решением было бы использование третьей стороны, такой как http://blockchain.info. , чтобы следить за остатками (ознакомьтесь с расходными outputs, которые вы можете запросить при отправке транзакции), и использовать службу уведомлений, чтобы сообщать вам о входящих транзакциях (некоторые из них перечислены в качестве альтернатив здесь https://en.bitcoin.it/wiki/BitcoinNotify).

Теперь, чтобы иметь возможность получать транзакции, все, что вам нужно, это создать новый адрес, чтобы показывать его пользователям на вашем веб-сайте. Создать такой адрес в PHP не составит труда, просто взгляните на вики.

Теперь что касается отправки, это будет намного сложнее, так как включает в себя:

  • сбор выходных данных;
  • требовать их, предоставляя совпадающие подписи;
  • создание новых выходов на нужные адреса;
  • объединение всего в транзакции и сериализация в соответствии с спецификациями протокола P2P;
  • подключение к сети P2P и отправка транзакции пирам.

Итак, как вы можете видеть, это быстро усложняется, когда вы пытаетесь отправить транзакции. Если отправка транзакций не является абсолютно необходимой, я бы предложил просто предоставить серверу список адресов, на которые он может получать транзакции BitAddress позволяет создавать пары закрытый ключ/адрес только для этой цели.

person cdecker    schedule 05.01.2013

Если вы хотите сгенерировать только биткойн-адрес и закрытый ключ, попробуйте:

https://github.com/zamgo/PHPCoinAddress

И, возможно, мы сможем создать скрипт только для того, чтобы найти 20 одноранговых узлов биткойнов для трансляции нашей транзакции.

с сайта bitseed.xf2.org или жестко запрограммированного списка пиров в исходном коде chainparams.cpp: https://en.bitcoin.it/wiki/Satoshi_Client_Node_Discovery

person diyism    schedule 21.06.2013

В лучшем случае вам понадобится API от поставщика услуг, который позволяет создавать кошельки и выполнять запросы транзакций.

Поскольку вы ищете: создать, отправить, получить - это означает, что вам понадобится служба, которая уже размещает это:

Coinkite может быть хорошим вариантом, поскольку большинство операций с биткойнами можно выполнять с помощью API:

  • Отправляйте и запрашивайте биткойны по электронной почте, смс или биткойн-адресу

  • Сгенерировать открытые ключи (HD)

  • Проверяйте баланс и получайте уведомления

  • Безопасно храните биткойны в HSM или учетных записях с мультиподписью

  • Создание ваучеров и бумажных кошельков (с опубликованным закрытым ключом)

  • Создавайте платежные адреса P2SH, выводите через M-of-N multisig.

  • Импорт и удаление закрытых ключей

https://coinkite.com/faq/developers

person Lisa Cheng    schedule 17.12.2014

В настоящее время такой функции не существует. Я слышал разговоры о том, что биткойн портирован на родной PHP или Java-апплет, который может работать в браузере, но нет биткойна без демона где-то — хотя вы, вероятно, могли бы управлять этими основными функциями с помощью API продавца MtGox.

В качестве альтернативы, если у вас дома достаточно надежная установка, вы можете выделить установку для биткойнов и перенаправить соответствующий порт в настройках маршрутизатора. Единственная причина, по которой вы обычно не можете размещать сайты в своем домашнем Интернете, заключается в том, что интернет-провайдеры блокируют порт 80; они не блокируют 8337 (а если и блокируют, то это все равно настраивается). PHP API должен иметь возможность подключаться к биткойнам точно так же через сеть, как если бы они находились в одном и том же устройстве.

person David Perry    schedule 11.08.2011
comment
Я бы убил за порт PHP прямо сейчас. Я бы использовал API MtGox, если бы не тот факт, что они недавно были взломаны. - person Cyclone; 11.08.2011

Вы можете использовать библиотеку платежей GoUrl.io Bitcoin-PHP с открытым исходным кодом -

https://github.com/cryptoapi/Payment-Gateway

    <?
        require_once( "cryptobox.class.php" );

        $options = array( 
        "private_key" => "",        // private key from gourl.io
        "orderID"     => "your_product1_or_signuppage1_etc",
        "amountUSD"   => 2          // 2 USD
        );  

        // Initialise Payment Class
        $box1 = new Cryptobox ($options);

        // Display Payment Box or successful payment result   
        $paymentbox = $box1->display_cryptobox();

        // A. Process Received Payment
        if ($box1->is_paid()) 
        { 
            // Your code here to handle a successful cryptocoin payment
            // ...
        }  
        else $message .= "The payment has not been made yet";
    ?>
    <!DOCTYPE html>
    <html><head></head>
    <body>
    <?= $paymentbox ?>
    <?= $message ?>
    </body>
    </html>
person Peter    schedule 30.10.2014