Кроме того, что-то вроде этого также может быть полезным для других целей, и я не нашел много проектов, касающихся этого (один будет toolongdidntread.com) ...
После этого, мы можем предположить, что это, как его бумажник и проверить баланс, денежные потоки и т.д. (которые в настоящее время немного сверх того, что я сделал до сих пор).
Первая проблема, которую я столкнулся, однако,:
Это мой код до сих пор на самом деле правильно? Я не хочу обвинять или делать выводы, когда выясняется, что я включил адрес MtGox по глупости ...
В любом случае, вот код для отслеживания любого адреса (поставляется в "trackaddr" список) для нескольких входов. Он будет перебирать весь blockchain несколько раз, пока не более новые входные данные не найдены. Из-за недавнего blockchain спама, я ограничил его в настоящее время, чтобы заблокировать 160000 (достаточно для адреса у меня есть до сих пор), и там, наверное, лучше, чем способ работы ~ 10 раз на протяжении всей цепи. У меня есть быстрый процессор, однако, так что это не очень беспокоит меня атм, тем больше беспокоит то, если она действительно делает то, что он должен делать, и не имеет никаких шансов на собирание и в том числе некоторые случайные другие адреса.
Код (пожертвования Оружейных в адрес, чтобы заблокировать 170000):
Код:
от armoryengine импорта *
BDM_LoadBlockchainFile ()
topBlock = TheBDM.getTopBlockHeight ()
trackaddr = [ '1QBDLYTDFHHZAABYSKGKPWKLSXZWCCJQBX']
taintedblocks = []
addratstart = Len (trackaddr)
addratend = 0
Итерации = 0
transactioncount = 0
в то время как addratstart = addratend:
transactioncount = 0
Итерации + 1 =
addratstart = Len (trackaddr)
для ч в xrange (0, 170000): # topBlock + 1):
если ч% 10000 == 0:
печать '\ tScanned% D блоков' % ч
печать «Найдено% г адреса до сих пор.» % Len (trackaddr)
заголовок = TheBDM.getHeaderByHeight (ч)
txList = header.getTxRefPtrList ()
для ТХ в txList:
foundaddr = False
для нин в диапазоне (tx.getNumTxIn ()):
txin = tx.getTxInRef (нин)
пытаться:
senderAddr20 = TheBDM.getSenderAddr20 (txin)
адрес = hash160_to_addrStr (senderAddr20)
#print адрес
если адрес в trackaddr:
foundaddr = True
Распечатать "НАЙДЕНО СДЕЛКИ! В блоке " + Ул (з)
Кроме:
проходить
если foundaddr это правда:
для нин в диапазоне (tx.getNumTxIn ()):
txin = tx.getTxInRef (нин)
пытаться:
senderAddr20 = TheBDM.getSenderAddr20 (txin)
адрес = hash160_to_addrStr (senderAddr20)
trackaddr.append (адрес)
Кроме:
проходить
trackaddr = список (набор (trackaddr))
transactioncount + 1 =
taintedblocks.append (ч)
taintedblocks = список (набор (taintedblocks))
addratend = Len (trackaddr)
печать trackaddr
печать taintedblocks
Распечатать "Пошел через раз blockchain% й!" % итераций
Распечатать "Найдено% D сделки" % transactioncount
Распечатать "Найдено% D блоков, где были включены эти операции" % Len (taintedblocks)
Распечатать "Найдено% D адрес" % addratend
BDM_LoadBlockchainFile ()
topBlock = TheBDM.getTopBlockHeight ()
trackaddr = [ '1QBDLYTDFHHZAABYSKGKPWKLSXZWCCJQBX']
taintedblocks = []
addratstart = Len (trackaddr)
addratend = 0
Итерации = 0
transactioncount = 0
в то время как addratstart = addratend:
transactioncount = 0
Итерации + 1 =
addratstart = Len (trackaddr)
для ч в xrange (0, 170000): # topBlock + 1):
если ч% 10000 == 0:
печать '\ tScanned% D блоков' % ч
печать «Найдено% г адреса до сих пор.» % Len (trackaddr)
заголовок = TheBDM.getHeaderByHeight (ч)
txList = header.getTxRefPtrList ()
для ТХ в txList:
foundaddr = False
для нин в диапазоне (tx.getNumTxIn ()):
txin = tx.getTxInRef (нин)
пытаться:
senderAddr20 = TheBDM.getSenderAddr20 (txin)
адрес = hash160_to_addrStr (senderAddr20)
#print адрес
если адрес в trackaddr:
foundaddr = True
Распечатать "НАЙДЕНО СДЕЛКИ! В блоке " + Ул (з)
Кроме:
проходить
если foundaddr это правда:
для нин в диапазоне (tx.getNumTxIn ()):
txin = tx.getTxInRef (нин)
пытаться:
senderAddr20 = TheBDM.getSenderAddr20 (txin)
адрес = hash160_to_addrStr (senderAddr20)
trackaddr.append (адрес)
Кроме:
проходить
trackaddr = список (набор (trackaddr))
transactioncount + 1 =
taintedblocks.append (ч)
taintedblocks = список (набор (taintedblocks))
addratend = Len (trackaddr)
печать trackaddr
печать taintedblocks
Распечатать "Пошел через раз blockchain% й!" % итераций
Распечатать "Найдено% D сделки" % transactioncount
Распечатать "Найдено% D блоков, где были включены эти операции" % Len (taintedblocks)
Распечатать "Найдено% D адрес" % addratend
О, и я не буду размещать какие-либо результаты (это легко с оружейным включить все найденные адреса в "бумажник" например, и читать расходуемый баланс, что в каждом блоке) публично или премьеры, пока я не проверял этот код, чтобы быть правильно! Также пират кажется довольно параноидально размещения Bitcoin адреса, принадлежащие к нему, так что удачи в поиске некоторых (если вы не клиент на BTCS&T, то вы, конечно, можете использовать ваш адрес депозита).
Редактировать:
Я использовал оружейную 0.76 rc1 - текущая версия 0,81 бросает:
Код:
Traceback (самый последний вызов последнего):
файл "! findwallet.py", Строка 29, в <модуль>
для нин в диапазоне (tx.getNumTxIn ()):
файл "XXXXXXXXX \ Armory_0_81 \ CppBlockUtils.py"
, линия 813, в <лямбда>
__getattr__ = лямбда самость, имя: _swig_getattr (я, TxRef, имя)
файл "XXXXXXXXX \ Armory_0_81 \ CppBlockUtils.py"
, линии 51, в _swig_getattr
поднять AttributeError (имя)
AttributeError: getNumTxIn
файл "! findwallet.py", Строка 29, в <модуль>
для нин в диапазоне (tx.getNumTxIn ()):
файл "XXXXXXXXX \ Armory_0_81 \ CppBlockUtils.py"
, линия 813, в <лямбда>
__getattr__ = лямбда самость, имя: _swig_getattr (я, TxRef, имя)
файл "XXXXXXXXX \ Armory_0_81 \ CppBlockUtils.py"
, линии 51, в _swig_getattr
поднять AttributeError (имя)
AttributeError: getNumTxIn