Java 使用Bitcoinj访问比特币区块链交易

Java 使用Bitcoinj访问比特币区块链交易,java,bitcoin,bitcoinj,Java,Bitcoin,Bitcoinj,我试图访问我下载的块中包含的事务,但没有一个块有任何事务;返回的每个事务列表的大小为零。我是否在概念上误解了比特币区块链,或者我的代码有问题 static NetworkParameters params = MainNetParams.get(); static WalletAppKit kit = new WalletAppKit(params, new java.io.File("."), "chain"); /* store_TX() gets Transactions from bl

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

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
static NetworkParameters params=MainNetParams.get();
静态WalletAppKit=newwalletappkit(params,newjava.io.File(“.”,“chain”);
/*store_TX()从块中获取事务并将其存储在文件中*/
静态保护的void store_TX()引发BlockStoreException、FileNotFoundException、UnsupportedEncodingException{
文件txf=新文件(“TX.txt”);
PrintWriter hwriter=新的PrintWriter(“TX.txt”、“UTF-8”);
区块链=kit.chain();
BlockStore block_store=chain.getBlockStore();
StoredBlock stored_block=block_store.getChainHead();
//如果存储的_block.prev()返回null,则中断,否则获取块事务
while(存储的块!=null){
Block Block=存储的_Block.getHeader();
List tx_List=block.getTransactions();
if(tx_list!=null&&tx_list.size()>0){
println(block.gethassaString());
}
存储的块=存储的块.getPrev(块存储);
}
hwriter.close();
}
公共静态void main(字符串[]args){
BriefLogFormatter.init();
已同步(kit.startAndWait()){
试一试{
存储_TX();
}catch(filenotfounde异常){
e、 printStackTrace();
}捕获(不支持的编码异常e){
e、 printStackTrace();
}捕获(BlockStoree例外){
e、 printStackTrace();
}
}
}//末端总管

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


请参见

这取决于您下载这些块的方式。例如,如果您通过下载,则您只收到不包含交易的BlockHeader。如果您也想获得事务,您可以使用请求从该对等方下载完整块,该块还将包含事务和与之相关的信息。(即区块奖励)

此外,您还需要使用另一种类型的区块存储来持久化您的区块,因为(这是WalletAppKit的标准)只保存区块头(因此没有事务)

你可以找到所有类型的区块商店,因此你可以选择最适合你的,但一定要阅读关于他们正在保存什么的描述,以免再次遇到这个问题