From e6965d0217b417f31a25b35f8fcd932ebf3c5070 Mon Sep 17 00:00:00 2001 From: Matt Corallo Date: Tue, 9 Jul 2013 13:32:41 +0200 Subject: [PATCH] Always accept time-locked txn we create, make refund tx source self --- core/src/main/java/com/google/bitcoin/core/Wallet.java | 2 +- .../protocols/channels/PaymentChannelClientState.java | 1 + .../bitcoin/protocols/channels/ChannelConnectionTest.java | 6 ++++-- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/core/src/main/java/com/google/bitcoin/core/Wallet.java b/core/src/main/java/com/google/bitcoin/core/Wallet.java index 66d1d7b1..c40c2839 100644 --- a/core/src/main/java/com/google/bitcoin/core/Wallet.java +++ b/core/src/main/java/com/google/bitcoin/core/Wallet.java @@ -909,7 +909,7 @@ public class Wallet implements Serializable, BlockChainListener { return false; } - if (tx.isTimeLocked() && !acceptTimeLockedTransactions) { + if (tx.isTimeLocked() && !acceptTimeLockedTransactions && tx.getConfidence().getSource() != TransactionConfidence.Source.SELF) { log.warn("Received transaction {} with a lock time of {}, but not configured to accept these, discarding", tx.getHashAsString(), tx.getLockTime()); return false; diff --git a/core/src/main/java/com/google/bitcoin/protocols/channels/PaymentChannelClientState.java b/core/src/main/java/com/google/bitcoin/protocols/channels/PaymentChannelClientState.java index eb11f5be..67c0122a 100644 --- a/core/src/main/java/com/google/bitcoin/protocols/channels/PaymentChannelClientState.java +++ b/core/src/main/java/com/google/bitcoin/protocols/channels/PaymentChannelClientState.java @@ -196,6 +196,7 @@ public class PaymentChannelClientState { refundTx.addOutput(totalValue, myKey.toAddress(params)); refundFees = multisigFee; } + refundTx.getConfidence().setSource(TransactionConfidence.Source.SELF); state = State.INITIATED; // Client should now call getIncompleteRefundTransaction() and send it to the server. } diff --git a/core/src/test/java/com/google/bitcoin/protocols/channels/ChannelConnectionTest.java b/core/src/test/java/com/google/bitcoin/protocols/channels/ChannelConnectionTest.java index 27f98a87..9d0ab282 100644 --- a/core/src/test/java/com/google/bitcoin/protocols/channels/ChannelConnectionTest.java +++ b/core/src/test/java/com/google/bitcoin/protocols/channels/ChannelConnectionTest.java @@ -406,9 +406,11 @@ public class ChannelConnectionTest extends TestWithWallet { StoredPaymentChannelClientStates newClientStates = new StoredPaymentChannelClientStates(mockBroadcaster, wallet); newClientStates.deserializeWalletExtension(wallet, clientStoredChannels.serializeWalletExtension()); // Expect two pairs of contract/refund ... - for (int i = 0; i < 4; i++) { + for (int i = 0; i < 2; i++) { broadcastTxPause.release(); - broadcasts.take(); + assertTrue(broadcasts.take().getOutput(0).getScriptPubKey().isSentToMultiSig()); + broadcastTxPause.release(); + assertEquals(TransactionConfidence.Source.SELF, broadcasts.take().getConfidence().getSource()); } assertTrue(broadcasts.isEmpty()); assertTrue(newClientStates.mapChannels.isEmpty());