Vladimir Maćoš
Vladimir Maćoš

Reputation: 31

How to send transactions from existing wallet with bitcoinj library?

We are trying to use bitcoinj 0.15.10 library to manage Bitcoin wallet. The problem we encountered is how do we connect existing wallet with our code so that we can make transactions. We have tried everything we could find in documentation and in examples from github but nothing works. Here we have some code example which we found but it brings us error that there is no money in a wallet.

        NetworkParameters params = TestNet3Params.get();
        
        String seedCode = "xxx";
        long creationtime = 1409478661L;
        DeterministicSeed seed = new DeterministicSeed(seedCode, null, "", creationtime);
        
        Wallet wallet = Wallet.fromSeed(params, seed, Script.ScriptType.P2PKH);
        
        BlockStore blockStore = new MemoryBlockStore(params);
        BlockChain chain = new BlockChain(params, wallet, blockStore);
        
        final PeerGroup peerGroup = new PeerGroup(params, chain);
        peerGroup.startAsync();
        
        System.out.println(wallet.toString());
        
        Address target1 = LegacyAddress.fromBase58(params, "mkHS9ne12qx9pS9VojpwU5xtRd4T7X7ZUt");
        //          Address target2 = LegacyAddress.fromBase58(params, "mkHS9ne12qx9pS9VojpwU5xtRd4T7X7ZUt");
        Transaction tx = new Transaction(params);
        
        tx.addOutput(Coin.parseCoin("0.0002"), target1);
        //          tx.addOutput(Coin.parseCoin("0.0001"), target2);
        SendRequest request = SendRequest.forTx(tx);
        wallet.completeTx(request);
        wallet.commitTx(request.tx);
        peerGroup.broadcastTransaction(request.tx);
          
        peerGroup.stop();

Printing wallet shows that wallet have no transactions and no BTCs. We loaded wallet with a valid seed from block.io site and got some BTC's on it. Here is the error we are getting:

2021-08-26 15:31:42.358  INFO 16788 --- [nio-8080-exec-2] org.bitcoinj.wallet.Wallet               : Completing send tx with 1 outputs totalling 0.0002 BTC and a fee of 0.001 BTC/kB
org.bitcoinj.core.InsufficientMoneyException: Insufficient money,  missing 0.0002 BTC
    at org.bitcoinj.wallet.Wallet.calculateFee(Wallet.java:5070)
    at org.bitcoinj.wallet.Wallet.completeTx(Wallet.java:4165)
    at dgms.controller.WalletControler.testTransaction(WalletControler.java:150)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197)
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1064)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:655)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:228)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)
    at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)
    at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1723)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.base/java.lang.Thread.run(Thread.java:834)

Can someone help us connect our java code with already existing BTC (testnet) wallet using bitcoinj library?

Upvotes: 3

Views: 455

Answers (0)

Related Questions