4
1
I've started creating my own wallet in bitcoinj and I have serious problem. I want to create raw transaction without wallet object. So I wrote this piece of code:
//String to a private key
DumpedPrivateKey dumpedPrivateKey = DumpedPrivateKey.fromBase58(params,
privKey);
ECKey key = dumpedPrivateKey.getKey();
//String to an address
Address address2 = Address.fromBase58(params, address);
Transaction tx = new Transaction(params);
//value is a sum of all inputs, fee is 4013
tx.addOutput(Coin.valueOf(amount-4013), address2);
//utxos is an array of inputs from my wallet
for(UTXO utxo : utxos)
{
TransactionOutPoint outPoint = new TransactionOutPoint(params, utxo.getIndex(), utxo.getHash());
tx.addSignedInput(outPoint, utxo.getScript(), key);
}
tx.getConfidence().setSource(TransactionConfidence.Source.SELF);
tx.setPurpose(Transaction.Purpose.USER_PAYMENT);
System.out.println(tx.getHashAsString());
b_peerGroup.GetPeerGroup().broadcastTransaction(tx);
But this ends with:
mandatory-script-verify-flag-failed (Script evaluated without error but finished with a false/empty top stack e
What is wrong with my code?
EDIT: I found a solution. I've changed only this line: tx.addSignedInput(outPoint, utxo.getScript(), key, Transaction.SigHash.ALL, true);
http://bitcoin.stackexchange.com/questions/47928/how-can-i-create-a-raw-transaction-in-hex-format-with-bitcoinj This might help? – hartmut – 2016-09-07T09:14:03.290
Unfortunately I've already used this code :( – Dragomirus – 2016-09-07T10:06:01.463
I believe this means that you provided the right public key, but the signature does not match the transaction. Is the transaction being modified between when it is signed and when it is broadcast? – Nick ODell – 2016-09-07T16:21:00.930
Already found the solution :) All is under edit – Dragomirus – 2016-09-08T08:26:40.230
Could you please describe your solution in an answer post rather instead of putting it in the question? Thanks. – Murch – 2016-09-21T14:05:36.997