-1

我正在尝试访问我下载的块中包含的交易,但没有一个块有任何交易;返回的每个事务列表的大小为零。我是在概念上误解了比特币区块链,还是我的代码有问题?

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
4

2 回答 2

-1

这取决于您如何下载这些块。例如,如果您通过BlocksDownloadedEventListener下载它们,那么您只会收到不包含事务的 Blockheader。如果您也想获取交易,您可以使用Peer.getBlock(blockHash)请求从该 Peer 下载完整的块,其中还将包含交易和与其相关的信息。(即区块奖励)

此外,您还需要使用另一种类型的 BlockStore 来保存您的 Block,因为SPVBlockstore(这是 WalletAppKit 的标准)仅保存 Blockheaders(因此没有交易)。

您可以在此处找到所有类型的 Blockstore ,因此您可以选择最适合您的,但请务必阅读有关它们所保存内容的说明,以免再次遇到该问题。

于 2016-06-26T11:52:39.123 回答
-1

您需要使用 FullPrunedBlockChain,区块链仅支持 SPV。

https://bitcoinj.github.io/full-verification

于 2015-10-18T14:25:02.487 回答