Bitcoin Forum
May 03, 2024, 07:06:12 PM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: [1]
  Print  
Author Topic: Алгоритм расчета баланса BTC адреса  (Read 225 times)
msnya (OP)
Newbie
*
Offline Offline

Activity: 6
Merit: 2


View Profile
March 10, 2020, 08:40:11 PM
Merited by klarki (1)
 #1

Здравствуйте!
Хочу написать приложение которое рассчитывало бы баланс любого(не только того от которого есть приватный ключ) BTC адреса без использования сторонних сервисов.
Есть полная нода и доступ к RPC из Python.
Подскажите пожалуйста, какой должен быть алгоритм вычисления баланса заданного адреса?
Есть ли варианты или существует только единственный способ?

1714763172
Hero Member
*
Offline Offline

Posts: 1714763172

View Profile Personal Message (Offline)

Ignore
1714763172
Reply with quote  #2

1714763172
Report to moderator
1714763172
Hero Member
*
Offline Offline

Posts: 1714763172

View Profile Personal Message (Offline)

Ignore
1714763172
Reply with quote  #2

1714763172
Report to moderator
BitcoinCleanup.com: Learn why Bitcoin isn't bad for the environment
Advertised sites are not endorsed by the Bitcoin Forum. They may be unsafe, untrustworthy, or illegal in your jurisdiction.
A-Bolt
Legendary
*
Offline Offline

Activity: 2314
Merit: 2302


View Profile
March 10, 2020, 09:40:34 PM
Merited by xandry (2), kzv (1), Symmetrick (1)
 #2

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

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

Activity: 1722
Merit: 1285

OpenTrade - Open Source Cryptocurrency Exchange


View Profile WWW
March 11, 2020, 09:38:14 AM
Merited by xandry (4)
 #3

Я обычно делаю так
Code:
importaddress
getbalance

OpenTrade - Open Source Cryptocurrency Exchange
msnya (OP)
Newbie
*
Offline Offline

Activity: 6
Merit: 2


View Profile
March 11, 2020, 07:16:35 PM
 #4

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

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.
Нужен бэкап? Как это понимать?
A-Bolt
Legendary
*
Offline Offline

Activity: 2314
Merit: 2302


View Profile
March 11, 2020, 09:03:22 PM
Merited by xandry (2), johhnyUA (1), FP91G (1)
 #5

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 адрес или приватный ключ, то в бэкапе этот адрес сам по себе ведь не появится, нужно сделать актуальныю копию уже со свежеимпортированным адресом.
kzv
Legendary
*
Offline Offline

Activity: 1722
Merit: 1285

OpenTrade - Open Source Cryptocurrency Exchange


View Profile WWW
March 12, 2020, 05:57:20 AM
 #6

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


OpenTrade - Open Source Cryptocurrency Exchange
msnya (OP)
Newbie
*
Offline Offline

Activity: 6
Merit: 2


View Profile
March 12, 2020, 04:03:18 PM
 #7

Quote
Quote from: msnya on March 11, 2020, 07:16:35 PM
Code:
importaddress
не прокатило, закончилось на:
Code:
error: Could not connect to the server 127.0.0.1:8332 (error code 0 - "timeout reached")

Возможно, команда в конце концов выполнилась и адрес таки импортировался, просто соединение разорвалось по тайм-ауту раньше окончания выполнения команды. При выполнении importaddress сканируется весь блокчейн для восстановления всей истории транзакций по этому адресу и получения итогового баланса, поэтому так долго всё это происходит.
Действительно выполнилась! Баланс импортированного таким образом адреса получилось проверить:
Code:
bitcoin-cli listreceivedbyaddress 0 true true "addres"

Когда вы импортируете в wallet.dat адрес или приватный ключ, то в бэкапе этот адрес сам по себе ведь не появится, нужно сделать актуальныю копию уже со свежеимпортированным адресом.
Сделал, но зачем в бэкапе нужен адрес без Приватного ключа - не очень понятно.

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

А вот еще возник у меня вопрос, не совсем по теме. Не знаю, может поправить название темы, не открывать же новую для этого вопроса?
Мониторинг МемПула. Предположим есть адрес "35hK24tcLEWcgNA4JxpvbkNkoAcDGqQPsP", и я хочу узнать когда он станет фигурировать в качестве входа или выхода транзакции из МемПула.
Как лучше реализовать такой мониторинг?
kzv
Legendary
*
Offline Offline

Activity: 1722
Merit: 1285

OpenTrade - Open Source Cryptocurrency Exchange


View Profile WWW
March 12, 2020, 04:48:34 PM
Merited by xandry (4)
 #8

Вообще listreceivedbyaddress должен показывать сколько получено на адрес, а не остаток на адресе. Остаток надо считать суммированием непотраченных выходов которые получаются командой listunspent

OpenTrade - Open Source Cryptocurrency Exchange
msnya (OP)
Newbie
*
Offline Offline

Activity: 6
Merit: 2


View Profile
March 12, 2020, 06:01:44 PM
 #9

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


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

Так, по дрогу адресу получается выполнить listunspent, буду разбираться в чем разница...
kzv
Legendary
*
Offline Offline

Activity: 1722
Merit: 1285

OpenTrade - Open Source Cryptocurrency Exchange


View Profile WWW
March 12, 2020, 06:41:47 PM
 #10

А блокчейн полностью скачан или в пруне?

OpenTrade - Open Source Cryptocurrency Exchange
msnya (OP)
Newbie
*
Offline Offline

Activity: 6
Merit: 2


View Profile
March 12, 2020, 07:02:29 PM
 #11

А блокчейн полностью скачан или в пруне?
Code:
"pruned": false,
отвечает на
Code:
bitcoin-cli getblockchaininfo
kzv
Legendary
*
Offline Offline

Activity: 1722
Merit: 1285

OpenTrade - Open Source Cryptocurrency Exchange


View Profile WWW
March 12, 2020, 07:12:46 PM
Merited by xandry (4)
 #12

А блокчейн полностью скачан или в пруне?
Code:
"pruned": false,
отвечает на
Code:
bitcoin-cli getblockchaininfo


Значит importaddress с параметром false не сканирует utxo. Нужно с параметром true вызывать  Sad

OpenTrade - Open Source Cryptocurrency Exchange
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!