Coverage Summary for Class: GenesisMerkleProofValidator (co.rsk.validators)
Class |
Class, %
|
Method, %
|
Line, %
|
GenesisMerkleProofValidator |
0%
(0/1)
|
0%
(0/2)
|
0%
(0/10)
|
1 /*
2 * This file is part of RskJ
3 * Copyright (C) 2018 RSK Labs Ltd.
4 *
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU Lesser General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18 package co.rsk.validators;
19
20 import co.rsk.bitcoinj.core.NetworkParameters;
21 import co.rsk.bitcoinj.core.PartialMerkleTree;
22 import co.rsk.bitcoinj.core.Sha256Hash;
23 import co.rsk.peg.utils.PartialMerkleTreeFormatUtils;
24
25 import java.util.ArrayList;
26 import java.util.List;
27
28 /**
29 * Validates Merkle proofs with the format used since Genesis until RSKIP 92 activation
30 */
31 public class GenesisMerkleProofValidator implements MerkleProofValidator {
32
33 private final NetworkParameters bitcoinNetworkParameters;
34 private final byte[] pmtSerialized;
35
36 public GenesisMerkleProofValidator(NetworkParameters bitcoinNetworkParameters, byte[] pmtSerialized) {
37 if (!PartialMerkleTreeFormatUtils.hasExpectedSize(pmtSerialized)) {
38 throw new IllegalArgumentException("Partial merkle tree does not have the expected size");
39 }
40
41 this.bitcoinNetworkParameters = bitcoinNetworkParameters;
42 this.pmtSerialized = pmtSerialized;
43 }
44
45 @Override
46 public boolean isValid(Sha256Hash expectedRoot, Sha256Hash coinbaseHash) {
47 PartialMerkleTree merkleTree = new PartialMerkleTree(bitcoinNetworkParameters, pmtSerialized, 0);
48 List<Sha256Hash> txHashes = new ArrayList<>();
49 Sha256Hash root = merkleTree.getTxnHashAndMerkleRoot(txHashes);
50 return root.equals(expectedRoot) &&
51 txHashes.contains(coinbaseHash);
52 }
53 }