2015-09-29 3 views
0

Я пытаюсь получить доступ к транзакциям, содержащимся в блоках, которые я загрузил, но ни один из блоков не имеет транзакций; размер каждого возвращаемого списка транзакций равен нулю. Я концептуально недопонимаю что-то о блочной цепочке биткойнов или что-то не так с моим кодом?Доступ к биткойн BlockChain транзакций с Bitcoinj

static NetworkParameters params = MainNetParams.get(); 
static WalletAppKit kit = new WalletAppKit(params, new java.io.File("."), "chain"); 

/* store_TX() gets Transactions from blocks and stores them in a file */ 
static protected void store_TX() throws BlockStoreException, FileNotFoundException, UnsupportedEncodingException{ 

    File txf = new File("TX.txt"); 
    PrintWriter hwriter = new PrintWriter("TX.txt", "UTF-8"); 

    BlockChain chain = kit.chain(); 
    BlockStore block_store = chain.getBlockStore(); 

    StoredBlock stored_block = block_store.getChainHead(); 
    // if stored_block.prev() returns null then break otherwise get block transactions 
    while (stored_block!=null){ 

     Block block = stored_block.getHeader(); 
     List<Transaction> tx_list = block.getTransactions(); 
     if (tx_list != null && tx_list.size() > 0){ 
      hwriter.println(block.getHashAsString()); 
     } 

     stored_block = stored_block.getPrev(block_store); 
    } 
    hwriter.close(); 
} 

public static void main(String[] args){ 

    BriefLogFormatter.init(); 

    synchronized(kit.startAndWait()){ 
     try { 
      store_TX(); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (UnsupportedEncodingException e) { 
      e.printStackTrace(); 
     } catch (BlockStoreException e) { 
      e.printStackTrace(); 
     } 
    } 

} //end main 

ответ

0

Это зависит от того, как вы загрузили эти блоки. Если вы загрузили их, например, через BlocksDownloadedEventListener, вы получили только блокирующие устройства, которые не содержат транзакции. Если вы также хотите получить Сделки, вы можете использовать Peer.getBlock(blockHash), чтобы запросить загрузку полного блока из этого Peer, в котором также будут содержаться Сделки и информация, связанная с ними. (т. е. Blockreward)

Также вам понадобится использовать другой тип BlockStore для сохранения ваших блоков, поскольку SPVBlockstore (который является стандартом для WalletAppKit) сохраняет только Blockheaders (так что никаких транзакций).

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

Смежные вопросы