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的标准)只保存区块头(因此没有事务) 你可以找到所有类型的区块商店,因此你可以选择最适合你的,但一定要阅读关于他们正在保存什么的描述,以免再次遇到这个问题