mirror of
https://github.com/haveno-dex/haveno.git
synced 2025-05-20 23:40:48 -04:00
update to monero-project v0.18.0.0, monero-java v0.7.2
This commit is contained in:
parent
4b46871cc3
commit
3753a42023
11 changed files with 93 additions and 71 deletions
|
@ -109,6 +109,7 @@ public abstract class Trade implements Tradable, Model {
|
|||
PREPARATION(Phase.INIT),
|
||||
MULTISIG_PREPARED(Phase.INIT),
|
||||
MULTISIG_MADE(Phase.INIT),
|
||||
MULTISIG_EXCHANGED(Phase.INIT),
|
||||
MULTISIG_COMPLETED(Phase.INIT),
|
||||
CONTRACT_SIGNATURE_REQUESTED(Phase.INIT),
|
||||
CONTRACT_SIGNED(Phase.INIT),
|
||||
|
|
|
@ -42,6 +42,8 @@ public final class InitMultisigRequest extends TradeMessage implements DirectMes
|
|||
private final String preparedMultisigHex;
|
||||
@Nullable
|
||||
private final String madeMultisigHex;
|
||||
@Nullable
|
||||
private final String exchangedMultisigHex;
|
||||
|
||||
public InitMultisigRequest(String tradeId,
|
||||
NodeAddress senderNodeAddress,
|
||||
|
@ -50,13 +52,15 @@ public final class InitMultisigRequest extends TradeMessage implements DirectMes
|
|||
String messageVersion,
|
||||
long currentDate,
|
||||
String preparedMultisigHex,
|
||||
String madeMultisigHex) {
|
||||
String madeMultisigHex,
|
||||
String exchangedMultisigHex) {
|
||||
super(messageVersion, tradeId, uid);
|
||||
this.senderNodeAddress = senderNodeAddress;
|
||||
this.pubKeyRing = pubKeyRing;
|
||||
this.currentDate = currentDate;
|
||||
this.preparedMultisigHex = preparedMultisigHex;
|
||||
this.madeMultisigHex = madeMultisigHex;
|
||||
this.exchangedMultisigHex = exchangedMultisigHex;
|
||||
}
|
||||
|
||||
|
||||
|
@ -74,6 +78,7 @@ public final class InitMultisigRequest extends TradeMessage implements DirectMes
|
|||
|
||||
Optional.ofNullable(preparedMultisigHex).ifPresent(e -> builder.setPreparedMultisigHex(preparedMultisigHex));
|
||||
Optional.ofNullable(madeMultisigHex).ifPresent(e -> builder.setMadeMultisigHex(madeMultisigHex));
|
||||
Optional.ofNullable(exchangedMultisigHex).ifPresent(e -> builder.setExchangedMultisigHex(exchangedMultisigHex));
|
||||
|
||||
builder.setCurrentDate(currentDate);
|
||||
|
||||
|
@ -90,7 +95,8 @@ public final class InitMultisigRequest extends TradeMessage implements DirectMes
|
|||
messageVersion,
|
||||
proto.getCurrentDate(),
|
||||
ProtoUtil.stringOrNullFromProto(proto.getPreparedMultisigHex()),
|
||||
ProtoUtil.stringOrNullFromProto(proto.getMadeMultisigHex()));
|
||||
ProtoUtil.stringOrNullFromProto(proto.getMadeMultisigHex()),
|
||||
ProtoUtil.stringOrNullFromProto(proto.getExchangedMultisigHex()));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -101,6 +107,7 @@ public final class InitMultisigRequest extends TradeMessage implements DirectMes
|
|||
",\n currentDate=" + currentDate +
|
||||
",\n preparedMultisigHex='" + preparedMultisigHex +
|
||||
",\n madeMultisigHex='" + madeMultisigHex +
|
||||
",\n exchangedMultisigHex='" + exchangedMultisigHex +
|
||||
"\n} " + super.toString();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -173,14 +173,6 @@ public class ProcessModel implements Model, PersistablePayload {
|
|||
@Nullable
|
||||
@Getter
|
||||
@Setter
|
||||
private String preparedMultisigHex; // TODO (woodser): ProcessModel shares many fields with TradingPeer; switch to trade getMaker(), getTaker(), getArbitrator(), getSelf(), with common TradingPeer object?
|
||||
@Nullable
|
||||
@Getter
|
||||
@Setter
|
||||
private String madeMultisigHex;
|
||||
@Nullable
|
||||
@Getter
|
||||
@Setter
|
||||
private String multisigAddress;
|
||||
@Nullable
|
||||
|
||||
|
@ -240,8 +232,6 @@ public class ProcessModel implements Model, PersistablePayload {
|
|||
Optional.ofNullable(tempTradingPeerNodeAddress).ifPresent(e -> builder.setTempTradingPeerNodeAddress(tempTradingPeerNodeAddress.toProtoMessage()));
|
||||
Optional.ofNullable(makerSignature).ifPresent(e -> builder.setMakerSignature(makerSignature));
|
||||
Optional.ofNullable(backupArbitrator).ifPresent(e -> builder.setBackupArbitrator(backupArbitrator.toProtoMessage()));
|
||||
Optional.ofNullable(preparedMultisigHex).ifPresent(e -> builder.setPreparedMultisigHex(preparedMultisigHex));
|
||||
Optional.ofNullable(madeMultisigHex).ifPresent(e -> builder.setMadeMultisigHex(madeMultisigHex));
|
||||
Optional.ofNullable(multisigAddress).ifPresent(e -> builder.setMultisigAddress(multisigAddress));
|
||||
return builder.build();
|
||||
}
|
||||
|
@ -271,8 +261,6 @@ public class ProcessModel implements Model, PersistablePayload {
|
|||
processModel.setMediatedPayoutTxSignature(ProtoUtil.byteArrayOrNullFromProto(proto.getMediatedPayoutTxSignature()));
|
||||
processModel.setMakerSignature(proto.getMakerSignature());
|
||||
processModel.setBackupArbitrator(proto.hasBackupArbitrator() ? NodeAddress.fromProto(proto.getBackupArbitrator()) : null);
|
||||
processModel.setPreparedMultisigHex(ProtoUtil.stringOrNullFromProto(proto.getPreparedMultisigHex()));
|
||||
processModel.setMadeMultisigHex(ProtoUtil.stringOrNullFromProto(proto.getMadeMultisigHex()));
|
||||
processModel.setMultisigAddress(ProtoUtil.stringOrNullFromProto(proto.getMultisigAddress()));
|
||||
|
||||
String paymentStartedMessageStateString = ProtoUtil.stringOrNullFromProto(proto.getPaymentStartedMessageState());
|
||||
|
|
|
@ -108,6 +108,8 @@ public final class TradingPeer implements PersistablePayload {
|
|||
@Nullable
|
||||
private String madeMultisigHex;
|
||||
@Nullable
|
||||
private String exchangedMultisigHex;
|
||||
@Nullable
|
||||
private String depositTxHash;
|
||||
@Nullable
|
||||
private String depositTxHex;
|
||||
|
@ -150,6 +152,7 @@ public final class TradingPeer implements PersistablePayload {
|
|||
Optional.ofNullable(reserveTxKey).ifPresent(e -> builder.setReserveTxKey(reserveTxKey));
|
||||
Optional.ofNullable(preparedMultisigHex).ifPresent(e -> builder.setPreparedMultisigHex(preparedMultisigHex));
|
||||
Optional.ofNullable(madeMultisigHex).ifPresent(e -> builder.setMadeMultisigHex(madeMultisigHex));
|
||||
Optional.ofNullable(exchangedMultisigHex).ifPresent(e -> builder.setExchangedMultisigHex(exchangedMultisigHex));
|
||||
Optional.ofNullable(payoutTxHex).ifPresent(e -> builder.setPayoutTxHex(payoutTxHex));
|
||||
Optional.ofNullable(depositTxHash).ifPresent(e -> builder.setDepositTxHash(depositTxHash));
|
||||
Optional.ofNullable(depositTxHex).ifPresent(e -> builder.setDepositTxHex(depositTxHex));
|
||||
|
@ -194,6 +197,7 @@ public final class TradingPeer implements PersistablePayload {
|
|||
tradingPeer.setReserveTxKeyImages(proto.getReserveTxKeyImagesList());
|
||||
tradingPeer.setPreparedMultisigHex(ProtoUtil.stringOrNullFromProto(proto.getPreparedMultisigHex()));
|
||||
tradingPeer.setMadeMultisigHex(ProtoUtil.stringOrNullFromProto(proto.getMadeMultisigHex()));
|
||||
tradingPeer.setExchangedMultisigHex(ProtoUtil.stringOrNullFromProto(proto.getExchangedMultisigHex()));
|
||||
tradingPeer.setDepositTxHash(ProtoUtil.stringOrNullFromProto(proto.getDepositTxHash()));
|
||||
tradingPeer.setDepositTxHex(ProtoUtil.stringOrNullFromProto(proto.getDepositTxHex()));
|
||||
tradingPeer.setDepositTxKey(ProtoUtil.stringOrNullFromProto(proto.getDepositTxKey()));
|
||||
|
|
|
@ -148,7 +148,7 @@ public class ArbitratorSendsInitTradeAndMultisigRequests extends TradeTask {
|
|||
|
||||
// prepare multisig
|
||||
String preparedHex = multisigWallet.prepareMultisig();
|
||||
processModel.setPreparedMultisigHex(preparedHex);
|
||||
trade.getSelf().setPreparedMultisigHex(preparedHex);
|
||||
|
||||
// create message to initialize multisig
|
||||
InitMultisigRequest initMultisigRequest = new InitMultisigRequest(
|
||||
|
@ -159,6 +159,7 @@ public class ArbitratorSendsInitTradeAndMultisigRequests extends TradeTask {
|
|||
Version.getP2PMessageVersion(),
|
||||
new Date().getTime(),
|
||||
preparedHex,
|
||||
null,
|
||||
null);
|
||||
|
||||
// send request to maker
|
||||
|
|
|
@ -83,13 +83,15 @@ public class ProcessInitMultisigRequest extends TradeTask {
|
|||
else if (request.getPreparedMultisigHex() != null && !multisigParticipant.getPreparedMultisigHex().equals(request.getPreparedMultisigHex())) throw new RuntimeException("Message's prepared multisig differs from previous messages, previous: " + multisigParticipant.getPreparedMultisigHex() + ", message: " + request.getPreparedMultisigHex());
|
||||
if (multisigParticipant.getMadeMultisigHex() == null) multisigParticipant.setMadeMultisigHex(request.getMadeMultisigHex());
|
||||
else if (request.getMadeMultisigHex() != null && !multisigParticipant.getMadeMultisigHex().equals(request.getMadeMultisigHex())) throw new RuntimeException("Message's made multisig differs from previous messages: " + request.getMadeMultisigHex() + " versus " + multisigParticipant.getMadeMultisigHex());
|
||||
if (multisigParticipant.getExchangedMultisigHex() == null) multisigParticipant.setExchangedMultisigHex(request.getExchangedMultisigHex());
|
||||
else if (request.getExchangedMultisigHex() != null && !multisigParticipant.getExchangedMultisigHex().equals(request.getExchangedMultisigHex())) throw new RuntimeException("Message's exchanged multisig differs from previous messages: " + request.getExchangedMultisigHex() + " versus " + multisigParticipant.getExchangedMultisigHex());
|
||||
|
||||
// prepare multisig if applicable
|
||||
boolean updateParticipants = false;
|
||||
if (processModel.getPreparedMultisigHex() == null) {
|
||||
if (trade.getSelf().getPreparedMultisigHex() == null) {
|
||||
log.info("Preparing multisig wallet for trade {}", trade.getId());
|
||||
multisigWallet = xmrWalletService.createMultisigWallet(trade.getId());
|
||||
processModel.setPreparedMultisigHex(multisigWallet.prepareMultisig());
|
||||
trade.getSelf().setPreparedMultisigHex(multisigWallet.prepareMultisig());
|
||||
trade.setStateIfValidTransitionTo(Trade.State.MULTISIG_PREPARED);
|
||||
updateParticipants = true;
|
||||
} else if (processModel.getMultisigAddress() == null) {
|
||||
|
@ -98,23 +100,32 @@ public class ProcessInitMultisigRequest extends TradeTask {
|
|||
|
||||
// make multisig if applicable
|
||||
TradingPeer[] peers = getMultisigPeers();
|
||||
if (processModel.getMadeMultisigHex() == null && peers[0].getPreparedMultisigHex() != null && peers[1].getPreparedMultisigHex() != null) {
|
||||
if (trade.getSelf().getMadeMultisigHex() == null && peers[0].getPreparedMultisigHex() != null && peers[1].getPreparedMultisigHex() != null) {
|
||||
log.info("Making multisig wallet for trade {}", trade.getId());
|
||||
MoneroMultisigInitResult result = multisigWallet.makeMultisig(Arrays.asList(peers[0].getPreparedMultisigHex(), peers[1].getPreparedMultisigHex()), 2, xmrWalletService.getWalletPassword()); // TODO (woodser): xmrWalletService.makeMultisig(tradeId, multisigHexes, threshold)?
|
||||
processModel.setMadeMultisigHex(result.getMultisigHex());
|
||||
String multisigHex = multisigWallet.makeMultisig(Arrays.asList(peers[0].getPreparedMultisigHex(), peers[1].getPreparedMultisigHex()), 2, xmrWalletService.getWalletPassword()); // TODO (woodser): xmrWalletService.makeMultisig(tradeId, multisigHexes, threshold)?
|
||||
trade.getSelf().setMadeMultisigHex(multisigHex);
|
||||
trade.setStateIfValidTransitionTo(Trade.State.MULTISIG_MADE);
|
||||
updateParticipants = true;
|
||||
}
|
||||
|
||||
// exchange multisig keys if applicable
|
||||
if (processModel.getMultisigAddress() == null && peers[0].getMadeMultisigHex() != null && peers[1].getMadeMultisigHex() != null) {
|
||||
log.info("Exchanging multisig wallet keys for trade {}", trade.getId());
|
||||
multisigWallet.exchangeMultisigKeys(Arrays.asList(peers[0].getMadeMultisigHex(), peers[1].getMadeMultisigHex()), xmrWalletService.getWalletPassword());
|
||||
processModel.setMultisigAddress(multisigWallet.getPrimaryAddress());
|
||||
trade.setStateIfValidTransitionTo(Trade.State.MULTISIG_COMPLETED);
|
||||
processModel.getProvider().getXmrWalletService().closeMultisigWallet(trade.getId()); // save and close multisig wallet once it's created
|
||||
// import made multisig keys if applicable
|
||||
if (trade.getSelf().getExchangedMultisigHex() == null && peers[0].getMadeMultisigHex() != null && peers[1].getMadeMultisigHex() != null) {
|
||||
log.info("Importing made multisig hex for trade {}", trade.getId());
|
||||
MoneroMultisigInitResult result = multisigWallet.exchangeMultisigKeys(Arrays.asList(peers[0].getMadeMultisigHex(), peers[1].getMadeMultisigHex()), xmrWalletService.getWalletPassword());
|
||||
trade.getSelf().setExchangedMultisigHex(result.getMultisigHex());
|
||||
trade.setStateIfValidTransitionTo(Trade.State.MULTISIG_EXCHANGED);
|
||||
updateParticipants = true;
|
||||
}
|
||||
|
||||
// import exchanged multisig keys if applicable
|
||||
if (processModel.getMultisigAddress() == null && peers[0].getExchangedMultisigHex() != null && peers[1].getExchangedMultisigHex() != null) {
|
||||
log.info("Importing exchanged multisig hex for trade {}", trade.getId());
|
||||
MoneroMultisigInitResult result = multisigWallet.exchangeMultisigKeys(Arrays.asList(peers[0].getExchangedMultisigHex(), peers[1].getExchangedMultisigHex()), xmrWalletService.getWalletPassword());
|
||||
processModel.setMultisigAddress(result.getAddress());
|
||||
trade.setStateIfValidTransitionTo(Trade.State.MULTISIG_COMPLETED);
|
||||
processModel.getProvider().getXmrWalletService().closeMultisigWallet(trade.getId()); // save and close multisig wallet once it's created
|
||||
}
|
||||
|
||||
// update multisig participants if new state to communicate
|
||||
if (updateParticipants) {
|
||||
|
||||
|
@ -209,8 +220,9 @@ public class ProcessInitMultisigRequest extends TradeTask {
|
|||
UUID.randomUUID().toString(),
|
||||
Version.getP2PMessageVersion(),
|
||||
new Date().getTime(),
|
||||
processModel.getPreparedMultisigHex(),
|
||||
processModel.getMadeMultisigHex());
|
||||
trade.getSelf().getPreparedMultisigHex(),
|
||||
trade.getSelf().getMadeMultisigHex(),
|
||||
trade.getSelf().getExchangedMultisigHex());
|
||||
|
||||
log.info("Send {} with offerId {} and uid {} to peer {}", request.getClass().getSimpleName(), request.getTradeId(), request.getUid(), recipient);
|
||||
processModel.getP2PService().sendEncryptedDirectMessage(recipient, pubKeyRing, request, listener);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue