Author

Topic: Алгоритм расчета баланса BTC адреса (Read 226 times)

kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
А блокчейн полностью скачан или в пруне?
Code:
"pruned": false,
отвечает на
Code:
bitcoin-cli getblockchaininfo


Значит importaddress с параметром false не сканирует utxo. Нужно с параметром true вызывать  Sad
newbie
Activity: 6
Merit: 2
А блокчейн полностью скачан или в пруне?
Code:
"pruned": false,
отвечает на
Code:
bitcoin-cli getblockchaininfo
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
А блокчейн полностью скачан или в пруне?
newbie
Activity: 6
Merit: 2
importaddress можно вызвать с параметром false, тогда рескан блокчейна не происходит. Я так понимаю, что в этом случае тоже только utxo сканируется?
Баланс по адресу потом можно посчитать командой
listunspent


Чет у меня не прокатывает...
После импорта без индексации делаю вот так:
Code:
bitcoin-cli -rpcuser=rpcuser -rpcpassword=rpcpassword listunspent 1 9999999 "[\"1KUr81aewyTFUfnq4ZrpePZqXixd59ToNn\"]" true
и получаю пустой массив.
В чем может быть ошибка?

Так, по дрогу адресу получается выполнить listunspent, буду разбираться в чем разница...
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
Вообще listreceivedbyaddress должен показывать сколько получено на адрес, а не остаток на адресе. Остаток надо считать суммированием непотраченных выходов которые получаются командой listunspent
newbie
Activity: 6
Merit: 2
Когда вы импортируете в wallet.dat адрес или приватный ключ, то в бэкапе этот адрес сам по себе ведь не появится, нужно сделать актуальныю копию уже со свежеимпортированным адресом.
Сделал, но зачем в бэкапе нужен адрес без Приватного ключа - не очень понятно.

importaddress можно вызвать с параметром false, тогда рескан блокчейна не происходит. Я так понимаю, что в этом случае тоже только utxo сканируется?
Баланс по адресу потом можно посчитать командой
listunspent
После имопрта importaddress с параметром false, попробовал listreceivedbyaddress - отображает баланс не правильный.

А вот еще возник у меня вопрос, не совсем по теме. Не знаю, может поправить название темы, не открывать же новую для этого вопроса?
Мониторинг МемПула. Предположим есть адрес "35hK24tcLEWcgNA4JxpvbkNkoAcDGqQPsP", и я хочу узнать когда он станет фигурировать в качестве входа или выхода транзакции из МемПула.
Как лучше реализовать такой мониторинг?
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
importaddress можно вызвать с параметром false, тогда рескан блокчейна не происходит. Я так понимаю, что в этом случае тоже только utxo сканируется?
Баланс по адресу потом можно посчитать командой
listunspent

legendary
Activity: 2314
Merit: 2300
Code:
importaddress
не прокатило, закончилось на:
Code:
error: Could not connect to the server 127.0.0.1:8332 (error code 0 - "timeout reached")

Возможно, команда в конце концов выполнилась и адрес таки импортировался, просто соединение разорвалось по тайм-ауту раньше окончания выполнения команды. При выполнении importaddress сканируется весь блокчейн для восстановления всей истории транзакций по этому адресу и получения итогового баланса, поэтому так долго всё это происходит.

Команда scantxoutset выполняется быстрее, поскольку сканируется не база блокчейна, а база UTXO - непотраченных выходов транзакций, которая намного меньше. Но зато scantxoutset не позволяет получить историю транзакций.

И соответственно,
Code:
getbalance
Должен показать баланс кошелька, который состоит из суммы балансов всех адресов?
То есть не только того адреса который был импортирован, но и тех которые были сгенерированы кошельком ранее?

Верно. Покажет суммарный баланс по всем адресам, хранящимся в wallet.dat.

Также в описании процедуры importaddress сказано что:
Quote
Requires a new wallet backup.
Нужен бэкап? Как это понимать?

Когда вы импортируете в wallet.dat адрес или приватный ключ, то в бэкапе этот адрес сам по себе ведь не появится, нужно сделать актуальныю копию уже со свежеимпортированным адресом.
newbie
Activity: 6
Merit: 2
Подскажите пожалуйста, какой должен быть алгоритм вычисления баланса заданного адреса?

Code:
bitcoin-cli scantxoutset "start" "[\"addr(171KH93nrksmH5r89eGiyGM5R7RJh2g3nE)\"]"

Спасибо! Работает!

Я обычно делаю так
Code:
importaddress
getbalance
Поробовал
Code:
importaddress
не прокатило, закончилось на:
Code:
error: Could not connect to the server 127.0.0.1:8332 (error code 0 - "timeout reached")
И соответственно,
Code:
getbalance
Должен показать баланс кошелька, который состоит из суммы балансов всех адресов?
То есть не только того адреса который был импортирован, но и тех которые были сгенерированы кошельком ранее?

Также в описании процедуры importaddress сказано что:
Quote
Requires a new wallet backup.

Note: This call can take over an hour to complete if rescan is true, during that time, other rpc calls may report that the imported address exists but related transactions are still missing, leading to temporarily incorrect/bogus balances and unspent outputs until rescan completes.
Нужен бэкап? Как это понимать?
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
Я обычно делаю так
Code:
importaddress
getbalance
legendary
Activity: 2314
Merit: 2300
Подскажите пожалуйста, какой должен быть алгоритм вычисления баланса заданного адреса?

Code:
bitcoin-cli scantxoutset "start" "[\"addr(171KH93nrksmH5r89eGiyGM5R7RJh2g3nE)\"]"
newbie
Activity: 6
Merit: 2
Здравствуйте!
Хочу написать приложение которое рассчитывало бы баланс любого(не только того от которого есть приватный ключ) BTC адреса без использования сторонних сервисов.
Есть полная нода и доступ к RPC из Python.
Подскажите пожалуйста, какой должен быть алгоритм вычисления баланса заданного адреса?
Есть ли варианты или существует только единственный способ?

Jump to: