Существует ли метод JSON-RPC для получения всех транзакций для заданного адреса?

Я имею в виду что-то вроде метода listtransactions, но с параметром .

Ответы (2)

Это было бы хорошо, но нет, нет способа сделать это. Самый простой способ накопить эту информацию — позвонить listtransactionsили listunspentполучить список транзакций в личном кабинете.

Получив список, отфильтруйте необходимую информацию. Стоит упомянуть listunspentвызов RPC. Это может сократить количество возвращаемых данных, если вас интересуют только входящие транзакции, составляющие ваш текущий баланс.

Я знаю, что это, по сути, ответ пирамиды, однако я хотел прямо упомянуть, что это невозможно с текущим клиентом. Кроме того, если вы планируете фильтровать это самостоятельно, и вам нужны только tx, связанные с вашим текущим значением кошелька, listunspentэто сэкономит вам много данных для анализа.

Вы не можете сделать это с помощью команды bitcoind через RPC, но в Интернете есть инструменты, которые сделают это за вас. Например, у blockexplorer есть запрос специально для этой цели. Если вы хотите увидеть, как это делается, посмотрите строку 724 файла app_stats.inc :

// This RELIES on the fact that only address transactions will be sent/received
$result = SQL("SELECT encode(blocks.hash, 'hex') AS block, 
                      encode(transactions.hash, 'hex') AS tx, 
                      blocks.number AS blocknum, 
                      blocks.time AT TIME ZONE 'UTC' AS time, 
                      transactions.id AS tid, 
                      transactions.raw AS rawtx

               FROM inputs JOIN transactions ON (inputs.tx = transactions.hash) 
                           JOIN blocks ON (inputs.block = blocks.hash)

               WHERE inputs.type = 'Address' AND 
                     blocks.number>$1 AND inputs.hash160 IN ($addresses)

               UNION 

               SELECT encode(blocks.hash, 'hex') AS block, 
                      encode(transactions.hash, 'hex') AS tx, 
                      blocks.number AS blocknum, 
                      blocks.time AT TIME ZONE 'UTC' AS time, 
                      transactions.id AS tid, 
                      transactions.raw AS rawtx

               FROM outputs JOIN transactions ON (outputs.tx = transactions.hash) 
                            JOIN blocks ON (outputs.block = blocks.hash)

               WHERE outputs.type = 'Address' AND 
                     blocks.number>$1 AND 
                     outputs.hash160 IN ($addresses) 

               ORDER BY tid;", $blocklimit);