BkkCoins,
Я думал о том, что вы сказали, что вы хотели библиотеку. Я понял, что я не есть хороший способ, чтобы найти отправителя данного входа: отправитель не всегда идентифицируется в TxIn, так что вы должны использовать BlockDataManager пойти найти TxOut. В любом случае, я раздавил ошибку и добавили некоторые методы, чтобы сделать это намного проще, безусловно, стоит обновление, если вы уже проверили его. (И если вы предпочитаете этот инструмент над genjix ... Я уверен, что его база данных SQL будет легко получить доступ в питоне, тоже).
Вот некоторые примеры кода Python, чтобы вы начали с моим кодом, если вы планируете использовать его (это разбросано по всему testswig.py, но я извлек важные детали).
от пути импорта SYS
path.append ( «..») # Я бегу это из каталога cppForSwig
от pybtcengine импорта *
от даты и времени импорта DateTime
от BlockUtils импорта *
# Создание BlockDataManager, сканирование цепи, организовать заголовки блоков
БДМ = BlockDataManager_FullRAM.GetInstance ()
bdm.readBlkFile_FromScratch ( '../ blk0001.dat') # точка это ваш blkfile !!!
bdm.organizeChain ();
# В этот момент все blockheaders и TXS загружаются в память.
# Можно получить доступ мгновенно хэша или по высоте
# Получить блок 100,014, потому что у него есть 6 разнообразно Tx
someBlk = bdm.getHeaderByHeight (100014)
# Вспомогательный метод для преобразования времени заголовка в довольно формат
Защиту unixTimeToFormatStr (UnixTime, formatStr = '% Y-% b-% d% I:% M% р'):
dtobj = datetime.fromtimestamp (UnixTime)
dtstr = dtobj.strftime (formatStr)
вернуться dtstr [: - 2] + dtstr. [-2:] ниже ()
# Другой помощник для преобразования значения сырого, 20-байтовых адресов в Base58
Защиту hash160ToAddr (hash160):
б = PyBtcAddress (). createFromPublicKeyHash160 (hash160)
вернуться b.getAddrStr ()
# Переход к печати отправителей, получателей
печать 'TxList для блока #', someBlk.getBlockHeight ()
topTxPtrList = someBlk.getTxRefPtrList ()
печать 'NumTx:', длина (topTxPtrList)
для txptr в topTxPtrList:
# Печатает тупоконечник, потому что мы хотели, чтобы иметь возможность поместить его в BlockExplorer проверить
печать '\ NTX:', binary_to_hex (txptr.getThisHash () ToString (), BIGENDIAN.) [: 16],
# Каждый Tx имеет указатель на заголовок блока он включен в
blkHead = txptr.getHeaderPtr ()
печать 'Blk:', blkHead.getBlockHeight (),
печать 'Отметка:', unixTimeToFormatStr (blkHead.getTimestamp ())
# Печать TxIns
для я в диапазоне (NIN):
txin = txptr.getTxInRef (я)
если txin.isCoinbase ():
печать '\ tSender:', '».center (34),
печать 'Значение: 50 [вероятно]';
еще:
печать '\ tSender:', hash160ToAddr (bdm.getSenderAddr20 (txin) .ToString ()),
печать 'Value:', coin2str (bdm.getSentValue (txin))
# Печать TxOuts
для я в диапазоне (Нут):
txout = txptr.getTxOutRef (я)
печать '\ tRecip:', hash160ToAddr (txout.getRecipientAddr () ToString ().),
печать 'Value:', coin2str (txout.getValue ())
Вы, наверное, можно построить свои полотна BTC довольно легко комбинируя звонки сверху. Если у вас есть проблемы, убедитесь, что вы передаете двоичные формы, а не гекс, и превращали ли вы к или от объекта BinaryData. Все методы требуют питона
двоичный питон строки. Все методы C ++ / SWIG требуют объекты BinaryData (создание с BinaryData (pyBinaryStr) и обратно через bindata.toString ()).
-Eto
Постскриптум - Я также очищен код и поместить большинство методов в .cpp файлах, так что вы можете сканировать файлы .h легче найти методы, которые вы ищете.