Bitcoin Forum
October 17, 2017, 11:56:44 AM *
News: Latest stable version of Bitcoin Core: 0.15.0.1  [Torrent]. (New!)
 
   Home   Help Search Donate Login Register  
Pages: [1]
  Print  
Author Topic: Is there a way to see why a transaction isn't getting relayed?  (Read 1442 times)
gweedo
Legendary
*
Offline Offline

Activity: 1246


Java, PHP, HTML/CSS Programmer for Hire!


View Profile WWW
October 11, 2013, 04:51:18 PM
 #1

I am directly connected to my bitcoind on the testnet but none of my transactions are getting relayed. Even when I send to an address the bitcoind controls it doesn't show it being unconfirmed or any balance. How can I debug these transactions?

Want to earn 2500 SATOSHIS per hour? Come Chat and Chill in https://goseemybits.com/lobby
1508241404
Hero Member
*
Offline Offline

Posts: 1508241404

View Profile Personal Message (Offline)

Ignore
1508241404
Reply with quote  #2

1508241404
Report to moderator
1508241404
Hero Member
*
Offline Offline

Posts: 1508241404

View Profile Personal Message (Offline)

Ignore
1508241404
Reply with quote  #2

1508241404
Report to moderator
Advertised sites are not endorsed by the Bitcoin Forum. They may be unsafe, untrustworthy, or illegal in your jurisdiction. Advertise here.
1508241404
Hero Member
*
Offline Offline

Posts: 1508241404

View Profile Personal Message (Offline)

Ignore
1508241404
Reply with quote  #2

1508241404
Report to moderator
gweedo
Legendary
*
Offline Offline

Activity: 1246


Java, PHP, HTML/CSS Programmer for Hire!


View Profile WWW
October 11, 2013, 07:46:41 PM
 #2

I looked in my debug.log and posted it tech support board to get clear statement of why bitcoind will not relay bitcoinj transactions on the testnet. Maybe possible bug.

https://bitcointalk.org/index.php?topic=309499.new#new

Want to earn 2500 SATOSHIS per hour? Come Chat and Chill in https://goseemybits.com/lobby
Mike Hearn
Moderator
Legendary
*
Offline Offline

Activity: 1526


View Profile
October 12, 2013, 02:16:07 PM
 #3

Can you post your code please? I've not seen a case of invalid signatures before, but of course if you use the API wrong you could create such things accidentally.
gweedo
Legendary
*
Offline Offline

Activity: 1246


Java, PHP, HTML/CSS Programmer for Hire!


View Profile WWW
October 12, 2013, 05:52:56 PM
 #4

This is the code
Code:
Transaction tx = new Transaction(params);
tx.addOutput(Utils.toNanoCoins("3.0000000"), new Address(params,"mtJ4PZoRBVDvPw9WqgHURxPCxVMH9r7Et5"));
Wallet.SendRequest request = Wallet.SendRequest.forTx(tx);
request.aesKey=wallet.getKeyCrypter().deriveKey(Config.WALLET_PASSWORD);
if (wallet.completeTx(request)){
try {
wallet.commitTx(request.tx);
peerGroup.broadcastTransaction(request.tx).get();
} catch (VerificationException e) {
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

Want to earn 2500 SATOSHIS per hour? Come Chat and Chill in https://goseemybits.com/lobby
Mike Hearn
Moderator
Legendary
*
Offline Offline

Activity: 1526


View Profile
October 12, 2013, 06:03:50 PM
 #5

BTW you don't need commitTx - broadcastTransaction will call it for you once the transaction propagates (which in this case it isn't, but that's a separate issue).

The issue is that the signature is being substituted with a dummy signature because the private key isn't usable. We can see this here:

Quote
INFO:   completed:   88073e5a03ceae663c587c5dd2c0cf9254429356d6da50a1e85ac8ca22261665: Unknown confidence level.
     in   [30460221010000000000000000000000000000000000000000000000000000000000000000022101000000000000000000000000000000000000000000000000000000000000000001] [02ab19d8c48d52f52e549aab88f1f178984c2a5955b43f063b4db8187937b8ddc2]  / ff0dd34050e4b62be5a46d513debc8ac6489346428441f9a8d0e964be95a7d73:0

That big run of zeros means it's using Transaction.dummySignature(), which is meant to be replaced by something else later. So the question is, why does it think it doesn't have the private key. I guess the issue is how the wallet is being encrypted. Therefore the next step is - please paste the output of wallet.toString() and ideally, the rest of your program.
gweedo
Legendary
*
Offline Offline

Activity: 1246


Java, PHP, HTML/CSS Programmer for Hire!


View Profile WWW
October 12, 2013, 06:10:49 PM
 #6

Here is the output of wallet.toString()
Code:
Wallet containing 6.30 BTC in:
  1 unspent transactions
  0 spent transactions
  0 pending transactions
  0 dead transactions
Last seen best block: (112773) 00000000761cc5b4eb871e745ae1512143e1fea5f2b26d639a8baf07c8bb35e1
Encryption: Scrypt/AES

Keys:
  addr:n3LRVzswykPCUASzD9tgwFUNAyZqFrTXva pub:0285084a41af1d5e16bc704399892d47f552a6d677f4ac0ca095bbde6fa8ee0cfc encrypted
  addr:n41AVgo7xj1LtFeKqH3iKNfPbfJBGcm6s1 pub:02ab19d8c48d52f52e549aab88f1f178984c2a5955b43f063b4db8187937b8ddc2 timestamp:1381115208

>>> UNSPENT:
Sends 0.00 and receives 6.30, total value 6.30.
  ff0dd34050e4b62be5a46d513debc8ac6489346428441f9a8d0e964be95a7d73: Seen by 1 peer. Appeared in best chain at height 112773, depth 1, work done 4295032833.
     in   [3046022100e1d8132ca9fa32f6880d43dae9cb8be4dd1e9a05e41db001702a5c1892785f14022100ca1578a92da58becf550fd36589350be4f10808f1814d69d683ab1c33a2b1f3f01] [0313e5d56288e6775255cae5ddf0ef8a7f72244c3f6ec53189e061b077d5c983ed]  / 3bb2ccd413fc24f0eba81f8e516cbf0e0ff26d7071d0715c27eb580db550a7c7:0
     out  DUP HASH160 [f6a8994404b8f34ce00f018c04ed6991f09f25fc] EQUALVERIFY CHECKSIG  6.30 BTC
     out  DUP HASH160 [61a9491d44c98ac08bd0fb043a6ec927f3f6b064] EQUALVERIFY CHECKSIG  159.10 BTC

And here is the parts where I set u bitcoinj.

Code:
public class BitcoinJWallet{
    public static NetworkParameters params;
    public static Wallet wallet;
    public static PeerGroup peerGroup;
    private AbstractBlockChain chain;
    private File walletFile;
    private ECKey key;
    public  BitcoinJWallet(){
    params = TestNet3Params.get();
    setupWallet();
    wallet.addEventListener(new WalletConfirmations());
    setupBlockchain();
    setupPeerGroup();

    }
    public void setupWallet(){
    final File walletFile = new File("site.wallet");
    try {
        wallet = Wallet.loadFromFile(walletFile);
    } catch (UnreadableWalletException e) {
    wallet = new Wallet(params);
          wallet.addKey(new ECKey());
          try {
wallet.saveToFile(walletFile);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
         if(!wallet.isEncrypted()){
         wallet.encrypt(config.WALLET_PASSWORD);
         }
         wallet.autosaveToFile(walletFile, 500, TimeUnit.MILLISECONDS, null);
}
    key = wallet.getKeys().get(0);
 
    }
    public void setupBlockchain(){
    try{
    File file = new File("site.spvchain");
    boolean chainExistedAlready = file.exists();
    SPVBlockStore blockStore = new SPVBlockStore(params, file);
    if (!chainExistedAlready) {
        File checkpointsFile = new File("checkpoints");
        if (checkpointsFile.exists()) {
            FileInputStream stream = new FileInputStream(checkpointsFile);
            CheckpointManager.checkpoint(params, stream, blockStore, key.getCreationTimeSeconds());
        }
    }
    chain = new BlockChain(params, wallet, blockStore);
    }catch(Exception e){
    e.printStackTrace();
    }
    }
    public void setupPeerGroup(){
    peerGroup = new PeerGroup(params, chain);
    try {
peerGroup.addAddress(new PeerAddress(InetAddress.getByName("127.0.0.1"), 18333));
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
    peerGroup.addPeerDiscovery(new DnsDiscovery(params));
    peerGroup.addWallet(wallet);
    peerGroup.startAndWait();
    peerGroup.downloadBlockChain();
    }

Want to earn 2500 SATOSHIS per hour? Come Chat and Chill in https://goseemybits.com/lobby
Mike Hearn
Moderator
Legendary
*
Offline Offline

Activity: 1526


View Profile
October 12, 2013, 06:19:50 PM
 #7

You could look at WalletAppKit to simplify the setup code.

I can't see the issue off-hand and I'm heading out for the night in a few minutes. It's apparently a bug or at the very least, poor documentation on how to use the encryption feature. If you put a breakpoint on Transaction.signInputs() line 837:

Code:
            if (key.hasPrivKey() || key.isEncrypted()) {
                signatures[i] = calculateSignature(i, key, aesKey, connectedPubKeyScript, hashType, anyoneCanPay);
            } else {
                // Create a dummy signature to ensure the transaction is of the correct size when we try to ensure
                // the right fee-per-kb is attached. If the wallet doesn't have the privkey, the user is assumed to
                // be doing something special and that they will replace the dummy signature with a real one later.
                signatures[i] = TransactionSignature.dummy();
            }

then take a look at the key object and see why both hasPrivKey() and isEncrypted() are false. I'd expect hasPrivKey to be false and isEncrypted to be true.

If you can't see what's going wrong, send me all your code and I'll try and make time tomorrow or Monday night to debug it.
gweedo
Legendary
*
Offline Offline

Activity: 1246


Java, PHP, HTML/CSS Programmer for Hire!


View Profile WWW
October 12, 2013, 07:48:39 PM
 #8

It seems that the key is getting set to null in the Privkey variable and the encrypted variable, I am going to try with a new unencrypted wallet and see what I can do, and see if it was the encryption. Here is a debug screenshot.


Want to earn 2500 SATOSHIS per hour? Come Chat and Chill in https://goseemybits.com/lobby
gweedo
Legendary
*
Offline Offline

Activity: 1246


Java, PHP, HTML/CSS Programmer for Hire!


View Profile WWW
October 12, 2013, 08:10:33 PM
 #9

An unencrypted wallet sents the testnet coins fine. It is an encrypted wallet issue, hope this information helps.

Want to earn 2500 SATOSHIS per hour? Come Chat and Chill in https://goseemybits.com/lobby
Pages: [1]
  Print  
 
Jump to:  

Sponsored by , a Bitcoin-accepting VPN.
Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!