Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Save the entire svp fund tx instead of only its hash #2731

Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
85 commits
Select commit Hold shift + click to select a range
90585fb
Add rskip419 config to lovell
julia-zack Jul 18, 2024
557052b
Add validation period duration to federation constants
julia-zack Jul 18, 2024
9bc5a84
Add proposedFederation and validationFundTxHashUnsigned
julia-zack Jul 18, 2024
8c08105
Add keys to storage index
julia-zack Jul 18, 2024
ab43f46
Add set and save methods for the proposed federation
julia-zack Jul 18, 2024
b4f0e23
Save proposed federation with its own format version
julia-zack Jul 22, 2024
b0a39f5
Add tests for saveProposedFederation method
julia-zack Jul 31, 2024
54a80cd
Add format version assertion to tests
julia-zack Jul 31, 2024
c5b4e57
Add getProposedFederation method
julia-zack Jul 31, 2024
4a80030
Adds setFundTransactionUnsignedHash and saveFundTransactionUnsignedHa…
jeremy-then Jul 29, 2024
f67cbb4
Add set and save methods for the proposed federation
julia-zack Jul 18, 2024
105391e
Save null version when proposed federation is null
julia-zack Jul 23, 2024
e73cc3b
Add getProposedFederation method
julia-zack Jul 31, 2024
fe43703
Throw exception when there is no storage version for non-null propose…
julia-zack Aug 1, 2024
ebd7d84
Adds setFundTransactionUnsignedHash and saveFundTransactionUnsignedHa…
jeremy-then Jul 29, 2024
22105e7
Adds getSvpFundTransactionUnsignedHash and tests
jeremy-then Aug 5, 2024
053f9e7
Split commit federation. Disable failing test
julia-zack Jul 31, 2024
feb9b56
Add tests to existing nested class
julia-zack Aug 8, 2024
5b9d939
Comment broken test that be addressed later
julia-zack Aug 8, 2024
683a9b4
Move svp fund tx hash unsigned entry from federation storage index ke…
julia-zack Aug 13, 2024
cd1f323
Remove svp fund tx logic from federation storage provider, and add it…
julia-zack Aug 13, 2024
35a3618
Define spendable value directly in BridgeConstants
julia-zack Aug 15, 2024
f7935fd
Add getProposedFederation method in FederationSupport
julia-zack Aug 15, 2024
7e92781
Create flyover redeem script builder
julia-zack Aug 17, 2024
c9d139a
Delete FlyoverRedeemScriptCreationException and move flyover reason t…
julia-zack Aug 19, 2024
43eb320
Add proposed federation dummy flyover prefix to bridge constants
julia-zack Aug 19, 2024
f6510c2
Create new settleReleaseRequest method to perform common actions when…
julia-zack Aug 19, 2024
5ab3636
Add svp fund tx hash signed storage index key
julia-zack Aug 19, 2024
bef3d18
Add set and save methods
julia-zack Aug 19, 2024
cf3b35c
Add getSvpFundTxHashSigned method
julia-zack Aug 19, 2024
ae1b2c1
Move vote federation change nested test class to its own file
julia-zack Aug 19, 2024
001ffbd
Add tests
julia-zack Aug 15, 2024
451df7d
Add flyover output to fund tx. Refactor
julia-zack Aug 16, 2024
17b13bf
Add reused method to PegUtils
julia-zack Aug 16, 2024
563f7fd
Take nested SvpTests out of nested locking cap tests
julia-zack Aug 16, 2024
b41a417
Use flyover rs builder. Remove method from PegUtils
julia-zack Aug 19, 2024
e2c42f9
Create output to federation with flyover prefix with address instead …
julia-zack Aug 21, 2024
6a9f202
Add test for insufficient money exception test.
julia-zack Aug 21, 2024
42f9706
Add @Override annotation
marcos-iov Aug 28, 2024
f9724cf
Remove unthrown exceptions from the method signatures
marcos-iov Aug 28, 2024
ce98006
Adjust unit tests after rebase
marcos-iov Sep 12, 2024
236787a
feat(peg): add svp spend tx hash unsigned storage entry
apancorb Aug 28, 2024
85d90ec
feat(peg): add set and save storage methods for svp spend unsigned tx…
apancorb Aug 29, 2024
64a19e9
feat(peg): add getter for svp spend tx hash
apancorb Aug 30, 2024
314c924
feat(peg): add serialize and deserialize map logic with tests
apancorb Sep 2, 2024
5ebc028
feat(peg): add svp spend tx waiting for signatures data structure
apancorb Sep 2, 2024
d999a66
refactor(peg): change serialization naming for rsk txs waiting for si…
apancorb Sep 3, 2024
2e9595a
feat(peg): resolve comments
apancorb Sep 5, 2024
a7f6328
Create method to remove signatures from script sig
julia-zack Sep 5, 2024
e26fb02
Move method to BitcoinTestUtils
julia-zack Sep 6, 2024
a824a9d
Refactor method to reuse existing ones. Add exceptions to txs without…
julia-zack Sep 9, 2024
0698c77
Add logs when throwing errors. Use getScriptSigWithSignature instead …
julia-zack Sep 10, 2024
d1538f3
Add test case to remove signatures from a tx with mixed inputs. Impro…
julia-zack Sep 11, 2024
6f393d9
Add methods to create a real valid chain with stored blocks to avoid …
julia-zack Sep 10, 2024
e6e82df
Modify method to receive a pmt since it is needed in registerBtcTrans…
julia-zack Sep 10, 2024
9e90491
Add method to check if svp is ongoing
julia-zack Sep 5, 2024
9e5a0b8
Merge pull request #2713 from rsksmart/add_method_to_check_svp_period
marcos-iov Sep 12, 2024
b8a050c
Fix federation builder instance in BitcoinUtilsTest
julia-zack Sep 12, 2024
7713ab4
Merge pull request #2725 from rsksmart/quick_fix_for_fed_builders
marcos-iov Sep 12, 2024
cac21fc
feat(peg): add svp spend tx waiting for signatures storage key
apancorb Sep 11, 2024
65ff1dc
refactor(peg): remove unused import
apancorb Sep 11, 2024
6d5d355
feat(peg): add logic to save svp spend tx waiting for signatures with…
apancorb Sep 11, 2024
afbabf2
feat(peg): allow null default entry for resetting svp spend tx waitin…
apancorb Sep 12, 2024
2b5f141
feat(peg): if empty svp spend tx waiting for signatures attempted to …
apancorb Sep 13, 2024
362b728
fix(peg): fix error message in svp spend tx waiting for signatures ex…
apancorb Sep 13, 2024
feca7a3
refactor(peg): test var name
apancorb Sep 13, 2024
4dc5705
feat(peg): add null key and value for svp spend tx waiting for signat…
apancorb Sep 13, 2024
31179ab
feat(peg): add setter for svp spend tx waiting for signatures field i…
apancorb Sep 16, 2024
cab7b05
Rename variable
marcos-iov Sep 16, 2024
9dd54a0
Move svpSpendTxWaitingForSignatures validation to set method
marcos-iov Sep 16, 2024
176673d
Merge pull request #2718 from rsksmart/feat/save_svp_tx
marcos-iov Sep 16, 2024
ed3de69
Create new methods to handle btc tx deserialization without inputs to…
julia-zack Sep 17, 2024
f03073e
Remove boolean from deserialization in provider
julia-zack Sep 17, 2024
29227eb
Rename fundTx to prevTx to avoid svp confusion. Fix indentation. Add …
julia-zack Sep 18, 2024
cd7a4a0
Declare network params from bridge constants to fix sonar complains
julia-zack Sep 18, 2024
a15016f
Fix indentation
julia-zack Sep 18, 2024
fac8356
Fix indentation
julia-zack Sep 18, 2024
c22b072
Improve variables naming
julia-zack Sep 18, 2024
e468239
Improve variables naming
julia-zack Sep 18, 2024
5a1e6c4
Keep bitcoin impl for deserializeBtcTransaction method, but create me…
julia-zack Sep 18, 2024
96116a8
When signed, save the svp fund tx instead of its hash
julia-zack Sep 16, 2024
becc121
Correct typo and comments
julia-zack Sep 17, 2024
7a0a1d1
Create new methods to handle btc tx deserialization without inputs to…
julia-zack Sep 17, 2024
8beace0
Fix typo
julia-zack Sep 17, 2024
45b96c4
Use new deserialization method for btc tx with inputs
julia-zack Sep 18, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
193 changes: 128 additions & 65 deletions rskj-core/src/main/java/co/rsk/peg/BridgeSerializationUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@

package co.rsk.peg;

import static co.rsk.peg.federation.FederationFormatVersion.*;

import co.rsk.bitcoinj.core.*;
import co.rsk.bitcoinj.script.Script;
import co.rsk.core.RskAddress;
Expand All @@ -37,7 +39,6 @@
import org.ethereum.util.RLP;
import org.ethereum.util.RLPElement;
import org.ethereum.util.RLPList;

import javax.annotation.Nullable;
import java.io.*;
import java.math.BigInteger;
Expand All @@ -46,12 +47,11 @@
import java.util.*;
import java.util.stream.Collectors;

import static co.rsk.peg.federation.FederationFormatVersion.*;

/**
* Created by mario on 20/04/17.
*/
public class BridgeSerializationUtils {

private static final int FEDERATION_RLP_LIST_SIZE = 3;
private static final int FEDERATION_CREATION_TIME_INDEX = 0;
private static final int FEDERATION_CREATION_BLOCK_NUMBER_INDEX = 1;
Expand All @@ -61,45 +61,138 @@ private BridgeSerializationUtils() {
throw new IllegalAccessError("Utility class, do not instantiate it");
}

public static byte[] serializeMap(SortedMap<Keccak256, BtcTransaction> map) {
int ntxs = map.size();
private static byte[] serializeRskTxHash(Keccak256 rskTxHash) {
return RLP.encodeElement(rskTxHash.getBytes());
}

private static Keccak256 deserializeRskTxHashFromHashData(byte[] hashBytes) {
return new Keccak256(hashBytes);
}

public static byte[] serializeBtcTransaction(BtcTransaction btcTransaction) {
return RLP.encodeElement(btcTransaction.bitcoinSerialize());
}

public static BtcTransaction deserializeBtcTransactionWithInputs(byte[] serializedTx, NetworkParameters networkParameters) {
return deserializeBtcTransaction(serializedTx, networkParameters, true);
}

public static BtcTransaction deserializeBtcTransactionWithoutInputs(byte[] serializedTx, NetworkParameters networkParameters) {
return deserializeBtcTransaction(serializedTx, networkParameters, false);
}

private static BtcTransaction deserializeBtcTransaction(
byte[] serializedTx,
NetworkParameters networkParameters,
boolean txHasInputs) {

if (serializedTx == null || serializedTx.length == 0) {
return null;
}

RLPElement rawTxElement = RLP.decode2(serializedTx).get(0);
byte[] rawTx = rawTxElement.getRLPData();

return deserializeBtcTransactionFromRawTx(rawTx, networkParameters, txHasInputs);
}

private static BtcTransaction deserializeBtcTransactionWithInputsFromRawTx(byte[] rawTx, NetworkParameters networkParameters) {
return deserializeBtcTransactionFromRawTx(rawTx, networkParameters, true);
}

private static BtcTransaction deserializeBtcTransactionFromRawTx(
byte[] rawTx,
NetworkParameters networkParameters,
boolean txHasInputs) {

if (!txHasInputs) {
BtcTransaction tx = new BtcTransaction(networkParameters);
tx.parseNoInputs(rawTx);
return tx;
}

return new BtcTransaction(networkParameters, rawTx);
}

public static byte[] serializeRskTxWaitingForSignatures(
Map.Entry<Keccak256, BtcTransaction> rskTxWaitingForSignaturesEntry) {
byte[][] serializedRskTxWaitingForSignaturesEntry =
serializeRskTxWaitingForSignaturesEntry(rskTxWaitingForSignaturesEntry);
return RLP.encodeList(serializedRskTxWaitingForSignaturesEntry);
}

public static byte[] serializeRskTxsWaitingForSignatures(
SortedMap<Keccak256, BtcTransaction> rskTxWaitingForSignaturesMap) {

int numberOfRskTxsWaitingForSignatures = rskTxWaitingForSignaturesMap.size();
byte[][] serializedRskTxWaitingForSignaturesMap = new byte[numberOfRskTxsWaitingForSignatures * 2][];

byte[][] bytes = new byte[ntxs * 2][];
int n = 0;
for (Map.Entry<Keccak256, BtcTransaction> rskTxWaitingForSignaturesEntry : rskTxWaitingForSignaturesMap.entrySet()) {
byte[][] serializedRskTxWaitingForSignaturesEntry = serializeRskTxWaitingForSignaturesEntry(rskTxWaitingForSignaturesEntry);
serializedRskTxWaitingForSignaturesMap[n++] = serializedRskTxWaitingForSignaturesEntry[0];
serializedRskTxWaitingForSignaturesMap[n++] = serializedRskTxWaitingForSignaturesEntry[1];
}

return RLP.encodeList(serializedRskTxWaitingForSignaturesMap);
}

private static byte[][] serializeRskTxWaitingForSignaturesEntry(
Map.Entry<Keccak256, BtcTransaction> rskTxWaitingForSignaturesEntry) {

byte[] serializedRskTxWaitingForSignaturesEntryKey =
serializeRskTxHash(rskTxWaitingForSignaturesEntry.getKey());
byte[] serializedRskTxWaitingForSignaturesEntryValue =
serializeBtcTransaction(rskTxWaitingForSignaturesEntry.getValue());

for (Map.Entry<Keccak256, BtcTransaction> entry : map.entrySet()) {
bytes[n++] = RLP.encodeElement(entry.getKey().getBytes());
bytes[n++] = RLP.encodeElement(entry.getValue().bitcoinSerialize());
return new byte[][] { serializedRskTxWaitingForSignaturesEntryKey, serializedRskTxWaitingForSignaturesEntryValue };
}

public static Map.Entry<Keccak256, BtcTransaction> deserializeRskTxWaitingForSignatures(
byte[] data, NetworkParameters networkParameters) {

if (data == null || data.length == 0) {
return new AbstractMap.SimpleEntry<>(null, null);
}

return RLP.encodeList(bytes);
RLPList rlpList = (RLPList) RLP.decode2(data).get(0);
return deserializeRskTxWaitingForSignaturesEntry(rlpList, 0, networkParameters);
}

public static SortedMap<Keccak256, BtcTransaction> deserializeMap(byte[] data, NetworkParameters networkParameters, boolean noInputsTxs) {
SortedMap<Keccak256, BtcTransaction> map = new TreeMap<>();
public static SortedMap<Keccak256, BtcTransaction> deserializeRskTxsWaitingForSignatures(
byte[] data, NetworkParameters networkParameters) {

SortedMap<Keccak256, BtcTransaction> rskTxsWaitingForSignaturesMap = new TreeMap<>();

if (data == null || data.length == 0) {
return map;
return rskTxsWaitingForSignaturesMap;
}

RLPList rlpList = (RLPList)RLP.decode2(data).get(0);
RLPList rlpList = (RLPList) RLP.decode2(data).get(0);
int numberOfRskTxsWaitingForSignatures = rlpList.size() / 2;

int ntxs = rlpList.size() / 2;

for (int k = 0; k < ntxs; k++) {
Keccak256 hash = new Keccak256(rlpList.get(k * 2).getRLPData());
byte[] payload = rlpList.get(k * 2 + 1).getRLPData();
BtcTransaction tx;
if (!noInputsTxs) {
tx = new BtcTransaction(networkParameters, payload);
} else {
tx = new BtcTransaction(networkParameters);
tx.parseNoInputs(payload);
}
map.put(hash, tx);
for (int k = 0; k < numberOfRskTxsWaitingForSignatures; k++) {
Map.Entry<Keccak256, BtcTransaction> rskTxWaitingForSignaturesEntry =
deserializeRskTxWaitingForSignaturesEntry(rlpList, k, networkParameters);

rskTxsWaitingForSignaturesMap.put(rskTxWaitingForSignaturesEntry.getKey(), rskTxWaitingForSignaturesEntry.getValue());
}

return map;
return rskTxsWaitingForSignaturesMap;
}

private static Map.Entry<Keccak256, BtcTransaction> deserializeRskTxWaitingForSignaturesEntry(
RLPList rlpList, int index, NetworkParameters networkParameters) {

RLPElement rskTxHashRLPElement = rlpList.get(index * 2);
byte[] rskTxHashData = rskTxHashRLPElement.getRLPData();
Keccak256 rskTxHash = deserializeRskTxHashFromHashData(rskTxHashData);

RLPElement btcTxRLPElement = rlpList.get(index * 2 + 1);
byte[] btcRawTx = btcTxRLPElement.getRLPData();
BtcTransaction btcTx = deserializeBtcTransactionWithInputsFromRawTx(btcRawTx, networkParameters);

return new AbstractMap.SimpleEntry<>(rskTxHash, btcTx);
}

public static byte[] serializeUTXOList(List<UTXO> list) {
Expand Down Expand Up @@ -145,37 +238,6 @@ public static List<UTXO> deserializeUTXOList(byte[] data) {
return list;
}

public static byte[] serializeSet(SortedSet<Sha256Hash> set) {
int nhashes = set.size();

byte[][] bytes = new byte[nhashes][];
int n = 0;

for (Sha256Hash hash : set) {
bytes[n++] = RLP.encodeElement(hash.getBytes());
}

return RLP.encodeList(bytes);
}

public static SortedSet<Sha256Hash> deserializeSet(byte[] data) {
SortedSet<Sha256Hash> set = new TreeSet<>();

if (data == null || data.length == 0) {
return set;
}

RLPList rlpList = (RLPList)RLP.decode2(data).get(0);

int nhashes = rlpList.size();

for (int k = 0; k < nhashes; k++) {
set.add(Sha256Hash.wrap(rlpList.get(k).getRLPData()));
}

return set;
}

Comment on lines -148 to -178
Copy link
Contributor Author

@julia-zack julia-zack Sep 17, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this has been removed since it is not being used anywhere

public static byte[] serializeMapOfHashesToLong(Map<Sha256Hash, Long> map) {
byte[][] bytes = new byte[map.size() * 2][];
int n = 0;
Expand Down Expand Up @@ -604,7 +666,8 @@ private static List<ReleaseRequestQueue.Entry> deserializeReleaseRequestQueueWit
byte[] addressBytes = rlpList.get(k * 3).getRLPData();
Address address = new Address(networkParameters, addressBytes);
long amount = BigIntegers.fromUnsignedByteArray(rlpList.get(k * 3 + 1).getRLPData()).longValue();
Keccak256 txHash = new Keccak256(rlpList.get(k * 3 + 2).getRLPData());

Keccak256 txHash = deserializeRskTxHashFromHashData(rlpList.get(k * 3 + 2).getRLPData());

entries.add(new ReleaseRequestQueue.Entry(address, Coin.valueOf(amount), txHash));
}
Expand All @@ -628,7 +691,7 @@ public static byte[] serializePegoutsWaitingForConfirmations(PegoutsWaitingForCo
int n = 0;

for (PegoutsWaitingForConfirmations.Entry entry : entries) {
bytes[n++] = RLP.encodeElement(entry.getBtcTransaction().bitcoinSerialize());
bytes[n++] = serializeBtcTransaction(entry.getBtcTransaction());
bytes[n++] = RLP.encodeBigInteger(BigInteger.valueOf(entry.getPegoutCreationRskBlockNumber()));
}

Expand All @@ -643,9 +706,9 @@ public static byte[] serializePegoutsWaitingForConfirmationsWithTxHash(PegoutsWa
int n = 0;

for (PegoutsWaitingForConfirmations.Entry entry : entries) {
bytes[n++] = RLP.encodeElement(entry.getBtcTransaction().bitcoinSerialize());
bytes[n++] = serializeBtcTransaction(entry.getBtcTransaction());
bytes[n++] = RLP.encodeBigInteger(BigInteger.valueOf(entry.getPegoutCreationRskBlockNumber()));
bytes[n++] = RLP.encodeElement(entry.getPegoutCreationRskTxHash().getBytes());
bytes[n++] = serializeRskTxHash(entry.getPegoutCreationRskTxHash());
}

return RLP.encodeList(bytes);
Expand Down Expand Up @@ -697,7 +760,7 @@ private static PegoutsWaitingForConfirmations deserializePegoutWaitingForConfirm
BtcTransaction tx = new BtcTransaction(networkParameters, txPayload);

long height = BigIntegers.fromUnsignedByteArray(rlpList.get(k * 3 + 1).getRLPData()).longValue();
Keccak256 rskTxHash = new Keccak256(rlpList.get(k * 3 + 2).getRLPData());
Keccak256 rskTxHash = deserializeRskTxHashFromHashData(rlpList.get(k * 3 + 2).getRLPData());

entries.add(new PegoutsWaitingForConfirmations.Entry(tx, height, rskTxHash));
}
Expand Down Expand Up @@ -786,7 +849,7 @@ public static FlyoverFederationInformation deserializeFlyoverFederationInformati
if (rlpList.size() != 2) {
throw new RuntimeException(String.format("Invalid serialized Fast Bridge Federation: expected 2 value but got %d", rlpList.size()));
}
Keccak256 derivationHash = new Keccak256(rlpList.get(0).getRLPData());
Keccak256 derivationHash = deserializeRskTxHashFromHashData(rlpList.get(0).getRLPData());
byte[] federationP2SH = rlpList.get(1).getRLPData();

return new FlyoverFederationInformation(derivationHash, federationP2SH, flyoverScriptHash);
Expand Down
4 changes: 2 additions & 2 deletions rskj-core/src/main/java/co/rsk/peg/BridgeState.java
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ public Map<String, Object> stateToMap() {
public byte[] getEncoded() throws IOException {
byte[] rlpBtcBlockchainBestChainHeight = RLP.encodeBigInteger(BigInteger.valueOf(this.btcBlockchainBestChainHeight));
byte[] rlpActiveFederationBtcUTXOs = RLP.encodeElement(BridgeSerializationUtils.serializeUTXOList(activeFederationBtcUTXOs));
byte[] rlpRskTxsWaitingForSignatures = RLP.encodeElement(BridgeSerializationUtils.serializeMap(rskTxsWaitingForSignatures));
byte[] rlpRskTxsWaitingForSignatures = RLP.encodeElement(BridgeSerializationUtils.serializeRskTxsWaitingForSignatures(rskTxsWaitingForSignatures));
byte[] serializedReleaseRequestQueue = shouldUsePapyrusEncoding(this.activations) ?
BridgeSerializationUtils.serializeReleaseRequestQueueWithTxHash(releaseRequestQueue):
BridgeSerializationUtils.serializeReleaseRequestQueue(releaseRequestQueue);
Expand All @@ -133,7 +133,7 @@ public static BridgeState create(BridgeConstants bridgeConstants, byte[] data, @
byte[] btcUTXOsBytes = rlpList.get(1).getRLPData();
List<UTXO> btcUTXOs = BridgeSerializationUtils.deserializeUTXOList(btcUTXOsBytes);
byte[] rskTxsWaitingForSignaturesBytes = rlpList.get(2).getRLPData();
SortedMap<Keccak256, BtcTransaction> rskTxsWaitingForSignatures = BridgeSerializationUtils.deserializeMap(rskTxsWaitingForSignaturesBytes, bridgeConstants.getBtcParams(), false);
SortedMap<Keccak256, BtcTransaction> rskTxsWaitingForSignatures = BridgeSerializationUtils.deserializeRskTxsWaitingForSignatures(rskTxsWaitingForSignaturesBytes, bridgeConstants.getBtcParams());
byte[] releaseRequestQueueBytes = rlpList.get(3).getRLPData();
ReleaseRequestQueue releaseRequestQueue = new ReleaseRequestQueue(BridgeSerializationUtils.deserializeReleaseRequestQueue(releaseRequestQueueBytes, bridgeConstants.getBtcParams(), shouldUsePapyrusEncoding(activations)));
byte[] pegoutsWaitingForConfirmationsBytes = rlpList.get(4).getRLPData();
Expand Down
5 changes: 5 additions & 0 deletions rskj-core/src/main/java/co/rsk/peg/BridgeStorageIndexKey.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,11 @@ public enum BridgeStorageIndexKey {
FAST_BRIDGE_FEDERATION_INFORMATION("fastBridgeFederationInformation"),

PEGOUT_TX_SIG_HASH("pegoutTxSigHash"),

SVP_FUND_TX_HASH_UNSIGNED("svpFundTxHashUnsigned"),
SVP_FUND_TX_SIGNED("svpFundTxSigned"),
julia-zack marked this conversation as resolved.
Show resolved Hide resolved
SVP_SPEND_TX_HASH_UNSIGNED("svpSpendTxHashUnsigned"),
SVP_SPEND_TX_WAITING_FOR_SIGNATURES("svpSpendTxWaitingForSignatures"),
;

private final String key;
Expand Down
Loading
Loading