/** * * @param callbacks */ @Override public void execute(CoinActionCallback<CurrencyCoin>... callbacks) { this._callbacks = callbacks; NetworkParameters netParams = Constants.NETWORK_PARAMETERS; initWallet(netParams); _walletKit.setDownloadListener(this) .setBlockingStartup(false) .setCheckpoints(CheckpointManager.openStream(netParams)) .setUserAgent(ServiceConsts.SERVICE_APP_NAME, "0.1"); _walletKit.startAsync(); }
/** * Synchronize a list of {@code Wallet} against the BlockChain. * * @param params the NetworkParameters to use * @param wallets the list of Wallet * @param chainFile the chain file to use * @param listener the listener to inform for status changes */ public static void syncBlockChain(UniquidNodeConfiguration configuration, final List<Wallet> wallets, final File chainFile, final DownloadProgressTracker listener, final NativePeerEventListener peerListener) { try { NetworkParameters params = configuration.getNetworkParameters(); BlockStore chainStore = new SPVBlockStore(params, chainFile); for (Wallet wallet : wallets) { if ((wallet.getLastBlockSeenHeight() < 1) && (openStream(params) != null)) { try { CheckpointManager.checkpoint(params, openStream(params), chainStore, configuration.getCreationTime()); StoredBlock head = chainStore.getChainHead(); LOGGER.info("Skipped to checkpoint " + head.getHeight() + " at " + Utils.dateTimeFormat(head.getHeader().getTimeSeconds() * 1000)); } catch (Throwable t) { LOGGER.warn("Problem using checkpoints", t); } break; } } BlockChain chain = new BlockChain(params, wallets, chainStore); final PeerGroup peerGroup = new PeerGroup(params, chain); peerGroup.setUserAgent("UNIQUID", "0.1"); peerGroup.setMaxPeersToDiscoverCount(3); peerGroup.setMaxConnections(2); if (params.getDnsSeeds() != null && params.getDnsSeeds().length > 0) { peerGroup.addPeerDiscovery(new DnsDiscovery(params)); } else if (params.getAddrSeeds() != null && params.getAddrSeeds().length > 0) { peerGroup.addPeerDiscovery(new SeedPeers(params.getAddrSeeds(), params)); } else { throw new Exception("Problem with Peers discovery!"); } LOGGER.info("BLOCKCHAIN Preparing to download blockchain..."); peerGroup.addConnectedEventListener(peerListener); peerGroup.addDisconnectedEventListener(peerListener); peerGroup.addDiscoveredEventListener(peerListener); peerGroup.start(); peerGroup.startBlockChainDownload(listener); listener.await(); peerGroup.stop(); chainStore.close(); LOGGER.info("BLOCKCHAIN downloaded."); } catch (Exception ex) { LOGGER.error("Exception catched ", ex); } }
@Test public void btcWalletTestWithCheckpoint() throws Exception { final byte[] seed = Bitcoin.getEntropyFromPassphrase("sweet field bless symptom play cherry fault curious mechanic cross gift thunder"); EWDerivation ewDerivation = new EWDerivation(seed); final MainNetParams params = MainNetParams.get(); final String blockpath = "./spvblockstore" + System.currentTimeMillis(); //final File blockChainFile = new File(getDir("blockstore_" + receivingId, Context.MODE_PRIVATE), "blockchain.spvchain"); //final String pathname = "./spvblockstore" + System.currentTimeMillis(); //final String pathname = "./spvblockstore1448448596283"; File blockFile = new File(blockpath); BlockStore blockStore = new SPVBlockStore(params, blockFile); StoredBlock chainHead = blockStore.getChainHead(); if(chainHead.getHeight()==0) { //first run CheckpointManager.checkpoint(PARAMS, BitcoinNetwork.getInstance().getCheckPointsStream() , blockStore, EPOCH); } //final StoredBlock checkpointBefore = manager.getCheckpointBefore(startFrom); //blockStore.setChainHead(checkpointBefore); Wallet wallet = new Wallet(PARAMS); BlockChain chain = new BlockChain(params, wallet, blockStore); //BlockChain chain = new BlockChain(params, blockStore); PeerGroup peerGroup = new PeerGroup(params, chain); //peerGroup.addAddress(InetAddress.getByName("10.106.137.73")); peerGroup.setMaxConnections(1); peerGroup.setDownloadTxDependencies(false); //peerGroup.addPeerDiscovery(new DnsDiscovery(params)); //EWFilterProvider provider = new EWFilterProvider( ); //System.out.println("provider " + provider); //peerGroup.addPeerFilterProvider(provider); DownloadProgressTracker downloadProgressTracker = new DownloadProgressTracker(); EWChainListener listener = new EWChainListener(); chain.addListener(listener); //peerGroup.setMaxConnections(10); peerGroup.setFastCatchupTimeSecs(EPOCH); //24 Giugno 2015 12:00 peerGroup.startBlockChainDownload(downloadProgressTracker); long startDownload = System.currentTimeMillis(); peerGroup.downloadBlockChain(); final long endDownload = System.currentTimeMillis() - startDownload; System.out.println("Download run for " + endDownload); System.out.println("---------FINISH----------"); System.out.println("peerGroup.getConnectedPeers()=" + peerGroup.getConnectedPeers()); System.out.println("blockpath " + blockpath); System.out.println("chain.getBestChainHeight()=" + chain.getBestChainHeight() ); System.out.println("chainHeadHeightAtBeginning=" + chainHead.getHeight() ); System.out.println("TX# " + listener.counter); //System.out.println("checkpointBefore.getHeight()=" + checkpointBefore.getHeight() ); //System.out.println("Derivation took " + l); blockStore.close(); //wallet.addFollowingAccountKeys(a,2); }