diff --git a/src/main/java/fucoin/Main.java b/src/main/java/fucoin/Main.java index 2a6e947a169ad4b78333d4dd8519b55b49a02a9b..3d9aee4dc1624be257d4e686ba92627b5e4325d5 100644 --- a/src/main/java/fucoin/Main.java +++ b/src/main/java/fucoin/Main.java @@ -24,7 +24,7 @@ import java.util.*; public class Main { - + private static ActorSystem cSystem; static { diff --git a/src/main/java/fucoin/actions/transaction/ActionCommitDistributedCommittedTransfer.java b/src/main/java/fucoin/actions/transaction/ActionCommitDistributedCommittedTransfer.java index 6c4b4802bf2eec96adc231fa770ecab65c37cbd0..1d1a7b2cb376b5ba83ffa9f6708d049b8a350a02 100644 --- a/src/main/java/fucoin/actions/transaction/ActionCommitDistributedCommittedTransfer.java +++ b/src/main/java/fucoin/actions/transaction/ActionCommitDistributedCommittedTransfer.java @@ -42,11 +42,6 @@ public class ActionCommitDistributedCommittedTransfer extends ClientAction { wallet.addLogMsg("ActionCommitDistributedCommittedTransfer is granted? " + granted); if (granted) { - Integer sourceAmount = wallet.amounts.getOrDefault(source, 0); - Integer targetAmount = wallet.amounts.getOrDefault(target, 0); - wallet.amounts.put(source, sourceAmount - amount); - wallet.amounts.put(target, targetAmount + amount); - if (source.compareTo(self) == 0) { wallet.setAmount(wallet.getAmount() - amount); wallet.addTransactionLogMessageSuccess("Sent " + amount + " FUC to " + target.path().name()); @@ -58,6 +53,12 @@ public class ActionCommitDistributedCommittedTransfer extends ClientAction { } else { wallet.addLogMsg("abort transaction with id" + id); + // rollback + Integer sourceAmount = wallet.amounts.getOrDefault(source, 0); + Integer targetAmount = wallet.amounts.getOrDefault(target, 0); + wallet.amounts.put(source, sourceAmount + amount); + wallet.amounts.put(target, targetAmount - amount); + if (source.compareTo(self) == 0) { wallet.addTransactionLogMessageFail("Failed to send " + amount + " FUC to " + target.path().name() + " (Commit has not been granted)"); } diff --git a/src/main/java/fucoin/actions/transaction/ActionPrepareDistributedCommittedTransfer.java b/src/main/java/fucoin/actions/transaction/ActionPrepareDistributedCommittedTransfer.java index 7e7de88bf5a58168b49d67a333dedd266fe90cb7..bb961e89fc1db5c4ab45b81f20a1905d2d97a3f2 100644 --- a/src/main/java/fucoin/actions/transaction/ActionPrepareDistributedCommittedTransfer.java +++ b/src/main/java/fucoin/actions/transaction/ActionPrepareDistributedCommittedTransfer.java @@ -32,6 +32,13 @@ public class ActionPrepareDistributedCommittedTransfer extends Transaction { //sender have enough money && wallet.amounts.getOrDefault(source, 0) >= amount)); + // precautionly update own ledger to prevent double spending (respectively agreeing) + Integer sourceAmount = wallet.amounts.getOrDefault(source, 0); + Integer targetAmount = wallet.amounts.getOrDefault(target, 0); + wallet.amounts.put(source, sourceAmount - amount); + wallet.amounts.put(target, targetAmount + amount); + + sender.tell(new ActionPrepareDistributedCommittedTransferAnswer(source, target, amount, timestamp, granted, id), self); }