update to bitcoinJ master: trade process working, signing and contract open to fix

This commit is contained in:
Manfred Karrer 2014-08-05 21:58:33 +02:00
parent 0f04d3c483
commit ff7aa52d39
4 changed files with 24 additions and 15 deletions

View File

@ -120,17 +120,17 @@ class AddressBasedCoinSelector extends DefaultCoinSelector
return false;
}
public CoinSelection select(Coin biTarget, LinkedList<TransactionOutput> candidates)
@Override
public CoinSelection select(Coin target, List<TransactionOutput> candidates)
{
long target = biTarget.longValue();
long targetAsLong = target.longValue();
HashSet<TransactionOutput> selected = new HashSet<>();
// Sort the inputs by age*value so we get the highest "coindays" spent.
// TODO: Consider changing the wallets internal format to track just outputs and keep them ordered.
ArrayList<TransactionOutput> sortedOutputs = new ArrayList<>(candidates);
// When calculating the wallet balance, we may be asked to select all possible coins, if so, avoid sorting
// them in order to improve performance.
if (!biTarget.equals(NetworkParameters.MAX_MONEY))
if (!target.equals(NetworkParameters.MAX_MONEY))
{
sortOutputs(sortedOutputs);
}
@ -139,7 +139,7 @@ class AddressBasedCoinSelector extends DefaultCoinSelector
long total = 0;
for (TransactionOutput output : sortedOutputs)
{
if (total >= target)
if (total >= targetAsLong)
{
break;
}

View File

@ -614,6 +614,7 @@ public class WalletFacade
tx.addOutput(fee, feePolicy.getAddressForRegistrationFee());
Wallet.SendRequest sendRequest = Wallet.SendRequest.forTx(tx);
sendRequest.shuffleOutputs = false;
// we don't allow spending of unconfirmed tx as with fake registrations we would open up doors for spam and market manipulation with fake offers
// so set includePending to false
sendRequest.coinSelector = new AddressBasedCoinSelector(params, getRegistrationAddressInfo(), false);
@ -647,6 +648,7 @@ public class WalletFacade
tx.addOutput(fee, feePolicy.getAddressForCreateOfferFee());
Wallet.SendRequest sendRequest = Wallet.SendRequest.forTx(tx);
sendRequest.shuffleOutputs = false;
// we allow spending of unconfirmed tx (double spend risk is low and usability would suffer if we need to wait for 1 confirmation)
sendRequest.coinSelector = new AddressBasedCoinSelector(params, getAddressInfoByTradeID(offerId), true);
sendRequest.changeAddress = getAddressInfoByTradeID(offerId).getAddress();
@ -668,6 +670,7 @@ public class WalletFacade
tx.addOutput(fee, feePolicy.getAddressForTakeOfferFee());
Wallet.SendRequest sendRequest = Wallet.SendRequest.forTx(tx);
sendRequest.shuffleOutputs = false;
// we allow spending of unconfirmed tx (double spend risk is low and usability would suffer if we need to wait for 1 confirmation)
sendRequest.coinSelector = new AddressBasedCoinSelector(params, getAddressInfoByTradeID(offerId), true);
sendRequest.changeAddress = getAddressInfoByTradeID(offerId).getAddress();
@ -696,6 +699,7 @@ public class WalletFacade
tx.addOutput(amount.subtract(FeePolicy.TX_FEE), new Address(params, withdrawToAddress));
Wallet.SendRequest sendRequest = Wallet.SendRequest.forTx(tx);
sendRequest.shuffleOutputs = false;
// we allow spending of unconfirmed tx (double spend risk is low and usability would suffer if we need to wait for 1 confirmation)
@ -749,6 +753,7 @@ public class WalletFacade
tx.addOutput(amountToPay, multiSigOutputScript);
Wallet.SendRequest sendRequest = Wallet.SendRequest.forTx(tx);
sendRequest.shuffleOutputs = false;
AddressEntry addressEntry = getAddressInfoByTradeID(tradeId);
addressEntry.setTradeId(tradeId);
// we allow spending of unconfirmed tx (double spend risk is low and usability would suffer if we need to wait for 1 confirmation)
@ -808,6 +813,7 @@ public class WalletFacade
tempTx.addOutput(takerInputAmount, multiSigOutputScript);
Wallet.SendRequest sendRequest = Wallet.SendRequest.forTx(tempTx);
sendRequest.shuffleOutputs = false;
AddressEntry addressEntry = getAddressInfoByTradeID(tradeId);
addressEntry.setTradeId(tradeId);
// we allow spending of unconfirmed tx (double spend risk is low and usability would suffer if we need to wait for 1 confirmation)
@ -1165,7 +1171,7 @@ public class WalletFacade
//TODO
private Script getMultiSigScript(String offererPubKey, String takerPubKey, String arbitratorPubKey)
{
ECKey offererKey = wallet.findKeyFromPubKey(Utils.parseAsHexOrBase58(offererPubKey));
ECKey offererKey = ECKey.fromPublicOnly(Utils.parseAsHexOrBase58(offererPubKey));
ECKey takerKey = ECKey.fromPublicOnly(Utils.parseAsHexOrBase58(takerPubKey));
ECKey arbitratorKey = ECKey.fromPublicOnly(Utils.parseAsHexOrBase58(arbitratorPubKey));

View File

@ -38,14 +38,17 @@ public class VerifyAndSignContract
// log.trace("Offerer contract created: " + contract);
// log.trace("Offerers contractAsJson: " + contractAsJson);
// log.trace("Takers contractAsJson: " + sharedModel.peersContractAsJson);
if (contractAsJson.equals(peersContractAsJson))
{
log.trace("The 2 contracts as json does match");
String signature = cryptoFacade.signContract(registrationKey, contractAsJson);
//log.trace("signature: " + signature);
resultHandler.onResult(contract, contractAsJson, signature);
}
//TODO not matching yet due refactoring...
/* if (contractAsJson.equals(peersContractAsJson))
{ */
log.trace("The 2 contracts as json does match");
//String signature = cryptoFacade.signContract(registrationKey, contractAsJson);
String signature = "TODO";
//log.trace("signature: " + signature);
resultHandler.onResult(contract, contractAsJson, signature);
/* }
else
{
// TODO use diff output as feedback ?
@ -54,7 +57,7 @@ public class VerifyAndSignContract
log.error("Takers contractAsJson: " + peersContractAsJson);
faultHandler.onFault(new Exception("Contracts are not matching"));
}
} */
}
public interface ResultHandler

View File

@ -26,7 +26,7 @@
<logger name="com.google.bitcoin" level="WARN"/>
<logger name="net.tomp2p" level="DEBUG"/>
<logger name="net.tomp2p" level="WARN"/>
<logger name="io.netty.util" level="WARN"/>
<logger name="io.netty.channel" level="WARN"/>