diff --git a/common/src/main/java/bisq/common/Proto.java b/common/src/main/java/bisq/common/Proto.java index a71930f16dd..1d5bf8dc590 100644 --- a/common/src/main/java/bisq/common/Proto.java +++ b/common/src/main/java/bisq/common/Proto.java @@ -24,4 +24,12 @@ */ public interface Proto { Message toProtoMessage(); + + default byte[] serialize() { + return toProtoMessage().toByteArray(); + } + + default byte[] serializeForHash() { + return serialize(); + } } diff --git a/core/src/main/java/bisq/core/dao/burningman/accounting/node/AccountingNode.java b/core/src/main/java/bisq/core/dao/burningman/accounting/node/AccountingNode.java index c7fb1300a36..782eda9f38a 100644 --- a/core/src/main/java/bisq/core/dao/burningman/accounting/node/AccountingNode.java +++ b/core/src/main/java/bisq/core/dao/burningman/accounting/node/AccountingNode.java @@ -60,7 +60,7 @@ public abstract class AccountingNode implements DaoSetupService, DaoStateListene /////////////////////////////////////////////////////////////////////////////////////////// public static Sha256Hash getSha256Hash(AccountingBlock block) { - return Sha256Hash.of(block.toProtoMessage().toByteArray()); + return Sha256Hash.of(block.serializeForHash()); } @Nullable @@ -68,7 +68,7 @@ public static Sha256Hash getSha256Hash(Collection blocks) { long ts = System.currentTimeMillis(); try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) { for (AccountingBlock accountingBlock : blocks) { - outputStream.write(accountingBlock.toProtoMessage().toByteArray()); + outputStream.write(accountingBlock.serializeForHash()); } Sha256Hash hash = Sha256Hash.of(outputStream.toByteArray()); // 2833 blocks takes about 23 ms diff --git a/core/src/main/java/bisq/core/dao/governance/blindvote/BlindVoteConsensus.java b/core/src/main/java/bisq/core/dao/governance/blindvote/BlindVoteConsensus.java index 1841ff2cb5e..9b9e445242a 100644 --- a/core/src/main/java/bisq/core/dao/governance/blindvote/BlindVoteConsensus.java +++ b/core/src/main/java/bisq/core/dao/governance/blindvote/BlindVoteConsensus.java @@ -84,14 +84,14 @@ public static SecretKey createSecretKey() { } public static byte[] getEncryptedVotes(VoteWithProposalTxIdList voteWithProposalTxIdList, SecretKey secretKey) throws CryptoException { - byte[] bytes = voteWithProposalTxIdList.toProtoMessage().toByteArray(); + byte[] bytes = voteWithProposalTxIdList.serialize(); byte[] encrypted = Encryption.encrypt(bytes, secretKey); log.info("EncryptedVotes: " + Utilities.bytesAsHexString(encrypted)); return encrypted; } public static byte[] getEncryptedMeritList(MeritList meritList, SecretKey secretKey) throws CryptoException { - byte[] bytes = meritList.toProtoMessage().toByteArray(); + byte[] bytes = meritList.serialize(); return Encryption.encrypt(bytes, secretKey); } diff --git a/core/src/main/java/bisq/core/dao/governance/blindvote/storage/BlindVotePayload.java b/core/src/main/java/bisq/core/dao/governance/blindvote/storage/BlindVotePayload.java index 1a077562211..a7ac27b0264 100644 --- a/core/src/main/java/bisq/core/dao/governance/blindvote/storage/BlindVotePayload.java +++ b/core/src/main/java/bisq/core/dao/governance/blindvote/storage/BlindVotePayload.java @@ -48,7 +48,7 @@ public final class BlindVotePayload implements PersistableNetworkPayload, Consen protected final byte[] hash; // 20 byte public BlindVotePayload(BlindVote blindVote) { - this(blindVote, Hash.getRipemd160hash(blindVote.toProtoMessage().toByteArray())); + this(blindVote, Hash.getRipemd160hash(blindVote.serializeForHash())); } /////////////////////////////////////////////////////////////////////////////////////////// diff --git a/core/src/main/java/bisq/core/dao/governance/proposal/ProposalConsensus.java b/core/src/main/java/bisq/core/dao/governance/proposal/ProposalConsensus.java index 067086faf8f..c0c10e096ee 100644 --- a/core/src/main/java/bisq/core/dao/governance/proposal/ProposalConsensus.java +++ b/core/src/main/java/bisq/core/dao/governance/proposal/ProposalConsensus.java @@ -40,7 +40,7 @@ public static Coin getFee(DaoStateService daoStateService, int chainHeight) { } public static byte[] getHashOfPayload(Proposal payload) { - final byte[] bytes = payload.toProtoMessage().toByteArray(); + final byte[] bytes = payload.serializeForHash(); return Hash.getSha256Ripemd160hash(bytes); } diff --git a/core/src/main/java/bisq/core/dao/governance/proposal/storage/appendonly/ProposalPayload.java b/core/src/main/java/bisq/core/dao/governance/proposal/storage/appendonly/ProposalPayload.java index 33386f82a9e..528b535ca1f 100644 --- a/core/src/main/java/bisq/core/dao/governance/proposal/storage/appendonly/ProposalPayload.java +++ b/core/src/main/java/bisq/core/dao/governance/proposal/storage/appendonly/ProposalPayload.java @@ -44,7 +44,7 @@ public class ProposalPayload implements PersistableNetworkPayload, ConsensusCrit protected final byte[] hash; // 20 byte public ProposalPayload(Proposal proposal) { - this(proposal, Hash.getRipemd160hash(proposal.toProtoMessage().toByteArray())); + this(proposal, Hash.getRipemd160hash(proposal.serializeForHash())); } diff --git a/core/src/main/java/bisq/core/dao/governance/votereveal/VoteRevealConsensus.java b/core/src/main/java/bisq/core/dao/governance/votereveal/VoteRevealConsensus.java index 19993205fe2..799196a881b 100644 --- a/core/src/main/java/bisq/core/dao/governance/votereveal/VoteRevealConsensus.java +++ b/core/src/main/java/bisq/core/dao/governance/votereveal/VoteRevealConsensus.java @@ -41,7 +41,7 @@ public class VoteRevealConsensus { public static byte[] getHashOfBlindVoteList(List blindVotes) { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); blindVotes.forEach(blindVote -> { - byte[] data = blindVote.toProtoMessage().toByteArray(); + byte[] data = blindVote.serializeForHash(); try { outputStream.write(data); } catch (IOException e) { diff --git a/core/src/main/java/bisq/core/dao/monitoring/BlindVoteStateMonitoringService.java b/core/src/main/java/bisq/core/dao/monitoring/BlindVoteStateMonitoringService.java index e6915a0c92c..ea7fc306853 100644 --- a/core/src/main/java/bisq/core/dao/monitoring/BlindVoteStateMonitoringService.java +++ b/core/src/main/java/bisq/core/dao/monitoring/BlindVoteStateMonitoringService.java @@ -268,7 +268,7 @@ private boolean maybeUpdateHashChain(int blockHeight) { .collect(Collectors.toList()); // We use MyBlindVoteList to get the serialized bytes from the blindVotes list - byte[] serializedBlindVotes = new MyBlindVoteList(blindVotes).toProtoMessage().toByteArray(); + byte[] serializedBlindVotes = new MyBlindVoteList(blindVotes).serializeForHash(); byte[] prevHash; if (blindVoteStateBlockChain.isEmpty()) { diff --git a/core/src/main/java/bisq/core/dao/monitoring/ProposalStateMonitoringService.java b/core/src/main/java/bisq/core/dao/monitoring/ProposalStateMonitoringService.java index a87c1b15185..a7ac1d56b74 100644 --- a/core/src/main/java/bisq/core/dao/monitoring/ProposalStateMonitoringService.java +++ b/core/src/main/java/bisq/core/dao/monitoring/ProposalStateMonitoringService.java @@ -270,7 +270,7 @@ private boolean maybeUpdateHashChain(int blockHeight) { .collect(Collectors.toList()); // We use MyProposalList to get the serialized bytes from the proposals list - byte[] serializedProposals = new MyProposalList(proposals).toProtoMessage().toByteArray(); + byte[] serializedProposals = new MyProposalList(proposals).serializeForHash(); byte[] prevHash; if (proposalStateBlockChain.isEmpty()) { diff --git a/core/src/main/java/bisq/core/dao/state/model/governance/Role.java b/core/src/main/java/bisq/core/dao/state/model/governance/Role.java index 4850b315415..5844cdbf3da 100644 --- a/core/src/main/java/bisq/core/dao/state/model/governance/Role.java +++ b/core/src/main/java/bisq/core/dao/state/model/governance/Role.java @@ -78,7 +78,7 @@ private Role(String uid, this.link = link; this.bondedRoleType = bondedRoleType; - hash = Hash.getSha256Ripemd160hash(toProtoMessage().toByteArray()); + hash = Hash.getSha256Ripemd160hash(serializeForHash()); } @Override diff --git a/core/src/main/java/bisq/core/filter/FilterManager.java b/core/src/main/java/bisq/core/filter/FilterManager.java index 8d531fe530e..ad0c29f3264 100644 --- a/core/src/main/java/bisq/core/filter/FilterManager.java +++ b/core/src/main/java/bisq/core/filter/FilterManager.java @@ -701,7 +701,7 @@ private ECKey toECKey(String privKeyString) { } private Sha256Hash getSha256Hash(Filter filter) { - byte[] filterData = filter.toProtoMessage().toByteArray(); + byte[] filterData = filter.serializeForHash(); return Sha256Hash.of(filterData); } diff --git a/core/src/main/java/bisq/core/offer/OfferPayloadBase.java b/core/src/main/java/bisq/core/offer/OfferPayloadBase.java index 4ce2c8304fc..37ba6b80d2b 100644 --- a/core/src/main/java/bisq/core/offer/OfferPayloadBase.java +++ b/core/src/main/java/bisq/core/offer/OfferPayloadBase.java @@ -99,7 +99,7 @@ public OfferPayloadBase(String id, public byte[] getHash() { if (this.hash == null) { - this.hash = Hash.getSha256Hash(this.toProtoMessage().toByteArray()); + this.hash = Hash.getSha256Hash(serializeForHash()); } return this.hash; } diff --git a/core/src/main/java/bisq/core/offer/bisq_v1/OfferPayload.java b/core/src/main/java/bisq/core/offer/bisq_v1/OfferPayload.java index 228c4e43de5..2d26fc4b5ce 100644 --- a/core/src/main/java/bisq/core/offer/bisq_v1/OfferPayload.java +++ b/core/src/main/java/bisq/core/offer/bisq_v1/OfferPayload.java @@ -218,7 +218,7 @@ public byte[] getHash() { if (this.hash == null && this.offerFeePaymentTxId != null) { // A proto message can be created only after the offerFeePaymentTxId is // set to a non-null value; now is the time to cache the payload hash. - this.hash = Hash.getSha256Hash(this.toProtoMessage().toByteArray()); + this.hash = Hash.getSha256Hash(serializeForHash()); } return this.hash; } diff --git a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/model/ProcessModel.java b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/model/ProcessModel.java index 3436c095954..1f44898894c 100644 --- a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/model/ProcessModel.java +++ b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/model/ProcessModel.java @@ -87,7 +87,7 @@ public class ProcessModel implements ProtocolModel { public static byte[] hashOfPaymentAccountPayload(PaymentAccountPayload paymentAccountPayload) { - return Hash.getRipemd160hash(checkNotNull(paymentAccountPayload).toProtoMessage().toByteArray()); + return Hash.getRipemd160hash(checkNotNull(paymentAccountPayload).serializeForHash()); } // Transient/Immutable (net set in constructor so they are not final, but at init) diff --git a/core/src/test/java/bisq/core/filter/TestFilter.java b/core/src/test/java/bisq/core/filter/TestFilter.java index f9343c04647..ef232fa8827 100644 --- a/core/src/test/java/bisq/core/filter/TestFilter.java +++ b/core/src/test/java/bisq/core/filter/TestFilter.java @@ -109,7 +109,7 @@ public static Filter createFilter(PublicKey ownerPublicKey, String signerPubKeyA } public static Filter signFilter(Filter unsignedFilter, ECKey signerKey) { - byte[] filterData = unsignedFilter.toProtoMessage().toByteArray(); + byte[] filterData = unsignedFilter.serializeForHash(); Sha256Hash hash = Sha256Hash.of(filterData); ECKey.ECDSASignature ecdsaSignature = signerKey.sign(hash); diff --git a/p2p/src/main/java/bisq/network/p2p/storage/P2PDataStorage.java b/p2p/src/main/java/bisq/network/p2p/storage/P2PDataStorage.java index 3cd100b69da..c80f6c2720c 100644 --- a/p2p/src/main/java/bisq/network/p2p/storage/P2PDataStorage.java +++ b/p2p/src/main/java/bisq/network/p2p/storage/P2PDataStorage.java @@ -1240,7 +1240,7 @@ private String printPersistableNetworkPayloadMap(Map