Coverage Summary for Class: BridgeMainNetConstants (co.rsk.config)
Class |
Class, %
|
Method, %
|
Line, %
|
BridgeMainNetConstants |
0%
(0/1)
|
0%
(0/3)
|
0%
(0/61)
|
1 package co.rsk.config;
2
3 import co.rsk.bitcoinj.core.BtcECKey;
4 import co.rsk.bitcoinj.core.Coin;
5 import co.rsk.bitcoinj.core.NetworkParameters;
6 import co.rsk.peg.AddressBasedAuthorizer;
7 import co.rsk.peg.Federation;
8 import co.rsk.peg.FederationMember;
9 import com.google.common.collect.Lists;
10 import java.util.ArrayList;
11 import org.bouncycastle.util.encoders.Hex;
12 import org.ethereum.crypto.ECKey;
13
14 import java.time.Instant;
15 import java.util.Arrays;
16 import java.util.List;
17 import java.util.stream.Collectors;
18
19 public class BridgeMainNetConstants extends BridgeConstants {
20 private static BridgeMainNetConstants instance = new BridgeMainNetConstants();
21
22 BridgeMainNetConstants() {
23 btcParamsString = NetworkParameters.ID_MAINNET;
24
25 BtcECKey federator0PublicKey = BtcECKey.fromPublicOnly(Hex.decode("03b53899c390573471ba30e5054f78376c5f797fda26dde7a760789f02908cbad2"));
26 BtcECKey federator1PublicKey = BtcECKey.fromPublicOnly(Hex.decode("027319afb15481dbeb3c426bcc37f9a30e7f51ceff586936d85548d9395bcc2344"));
27 BtcECKey federator2PublicKey = BtcECKey.fromPublicOnly(Hex.decode("0355a2e9bf100c00fc0a214afd1bf272647c7824eb9cb055480962f0c382596a70"));
28 BtcECKey federator3PublicKey = BtcECKey.fromPublicOnly(Hex.decode("02566d5ded7c7db1aa7ee4ef6f76989fb42527fcfdcddcd447d6793b7d869e46f7"));
29 BtcECKey federator4PublicKey = BtcECKey.fromPublicOnly(Hex.decode("0294c817150f78607566e961b3c71df53a22022a80acbb982f83c0c8baac040adc"));
30 BtcECKey federator5PublicKey = BtcECKey.fromPublicOnly(Hex.decode("0372cd46831f3b6afd4c044d160b7667e8ebf659d6cb51a825a3104df6ee0638c6"));
31 BtcECKey federator6PublicKey = BtcECKey.fromPublicOnly(Hex.decode("0340df69f28d69eef60845da7d81ff60a9060d4da35c767f017b0dd4e20448fb44"));
32 BtcECKey federator7PublicKey = BtcECKey.fromPublicOnly(Hex.decode("02ac1901b6fba2c1dbd47d894d2bd76c8ba1d296d65f6ab47f1c6b22afb53e73eb"));
33 BtcECKey federator8PublicKey = BtcECKey.fromPublicOnly(Hex.decode("031aabbeb9b27258f98c2bf21f36677ae7bae09eb2d8c958ef41a20a6e88626d26"));
34 BtcECKey federator9PublicKey = BtcECKey.fromPublicOnly(Hex.decode("0245ef34f5ee218005c9c21227133e8568a4f3f11aeab919c66ff7b816ae1ffeea"));
35 BtcECKey federator10PublicKey = BtcECKey.fromPublicOnly(Hex.decode("02550cc87fa9061162b1dd395a16662529c9d8094c0feca17905a3244713d65fe8"));
36 BtcECKey federator11PublicKey = BtcECKey.fromPublicOnly(Hex.decode("02481f02b7140acbf3fcdd9f72cf9a7d9484d8125e6df7c9451cfa55ba3b077265"));
37 BtcECKey federator12PublicKey = BtcECKey.fromPublicOnly(Hex.decode("03f909ae15558c70cc751aff9b1f495199c325b13a9e5b934fd6299cd30ec50be8"));
38 BtcECKey federator13PublicKey = BtcECKey.fromPublicOnly(Hex.decode("02c6018fcbd3e89f3cf9c7f48b3232ea3638eb8bf217e59ee290f5f0cfb2fb9259"));
39 BtcECKey federator14PublicKey = BtcECKey.fromPublicOnly(Hex.decode("03b65694ccccda83cbb1e56b31308acd08e993114c33f66a456b627c2c1c68bed6"));
40
41 List<BtcECKey> genesisFederationPublicKeys = Lists.newArrayList(
42 federator0PublicKey, federator1PublicKey, federator2PublicKey,
43 federator3PublicKey, federator4PublicKey, federator5PublicKey,
44 federator6PublicKey, federator7PublicKey, federator8PublicKey,
45 federator9PublicKey, federator10PublicKey, federator11PublicKey,
46 federator12PublicKey, federator13PublicKey, federator14PublicKey
47 );
48
49 // IMPORTANT: BTC, RSK and MST keys are the same.
50 // Change upon implementation of the <INSERT FORK NAME HERE> fork.
51 List<FederationMember> federationMembers = FederationMember.getFederationMembersFromKeys(genesisFederationPublicKeys);
52
53 // Currently set to:
54 // Wednesday, January 3, 2018 12:00:00 AM GMT-03:00
55 Instant genesisFederationAddressCreatedAt = Instant.ofEpochMilli(1514948400l);
56
57 genesisFederation = new Federation(
58 federationMembers,
59 genesisFederationAddressCreatedAt,
60 1L,
61 getBtcParams()
62 );
63
64 btc2RskMinimumAcceptableConfirmations = 100;
65 btc2RskMinimumAcceptableConfirmationsOnRsk = 1000;
66 rsk2BtcMinimumAcceptableConfirmations = 4000;
67
68 updateBridgeExecutionPeriod = 3 * 60 * 1000; // 3 minutes
69
70 maxBtcHeadersPerRskBlock = 500;
71
72 legacyMinimumPeginTxValueInSatoshis = Coin.valueOf(1_000_000);
73 legacyMinimumPegoutTxValueInSatoshis = Coin.valueOf(800_000);
74 minimumPeginTxValueInSatoshis = Coin.valueOf(500_000);
75 minimumPegoutTxValueInSatoshis = Coin.valueOf(400_000);
76
77
78 // Keys generated with GenNodeKey using generators 'auth-a' through 'auth-e'
79 List<ECKey> federationChangeAuthorizedKeys = Arrays.stream(new String[]{
80 "04e593d4cde25137b13f19462bc4c02e97ba2ed5a3860813497abf9b4eeb9259e37e0384d12cfd2d9a7a0ba606b31ee34317a9d7f4a8591c6bcf5dfd5563248b2f",
81 "045e7f2563e73d44d149c19cffca36e1898597dc759d76166b8104103c0d3f351a8a48e3a224544e9a649ad8ebcfdbd6c39744ddb85925f19c7e3fd48f07fc1c06",
82 "0441945e4e272936106f6200b36162f3510e8083535c15e175ac82deaf828da955b85fd72b7534f2a34cedfb45fa63b728cc696a2bd3c5d39ec799ec2618e9aa9f"
83 }).map(hex -> ECKey.fromPublicOnly(Hex.decode(hex))).collect(Collectors.toList());
84
85 federationChangeAuthorizer = new AddressBasedAuthorizer(
86 federationChangeAuthorizedKeys,
87 AddressBasedAuthorizer.MinimumRequiredCalculation.MAJORITY
88 );
89
90 // Key generated with GenNodeKey using generator 'auth-lock-whitelist'
91 List<ECKey> lockWhitelistAuthorizedKeys = Arrays.stream(new String[]{
92 "041a2449e9d63409c5a8ea3a21c4109b1a6634ee88fd57176d45ea46a59713d5e0b688313cf252128a3e49a0b2effb4b413e5a2525a6fa5894d059f815c9d9efa6"
93 }).map(hex -> ECKey.fromPublicOnly(Hex.decode(hex))).collect(Collectors.toList());
94
95 lockWhitelistChangeAuthorizer = new AddressBasedAuthorizer(
96 lockWhitelistAuthorizedKeys,
97 AddressBasedAuthorizer.MinimumRequiredCalculation.ONE
98 );
99
100 federationActivationAge = 18500L;
101
102 fundsMigrationAgeSinceActivationBegin = 0L;
103 fundsMigrationAgeSinceActivationEnd = 10585L;
104
105 List<ECKey> feePerKbAuthorizedKeys = Arrays.stream(new String[]{
106 "0448f51638348b034995b1fd934fe14c92afde783e69f120a46ee16eb6bdc2e4f6b5e37772094c68c0dea2b1be3d96ea9651a9eebda7304914c8047f4e3e251378",
107 "0484c66f75548baf93e322574adac4e4579b6a53f8d11fab640e14c90118e6983ef24b0de349a3e88f72e81e771ae1c897cef446fd7f4da71778c532aee3b6c41b",
108 "04bb6435dc1ea12da843ebe213893d136c1624acd681fff82551498ae00bf28e9323164b00daf925fa75177463b8254a2aae8a1713e4d851a84ea369c193e9ce51"
109 }).map(hex -> ECKey.fromPublicOnly(Hex.decode(hex))).collect(Collectors.toList());
110
111 feePerKbChangeAuthorizer = new AddressBasedAuthorizer(
112 feePerKbAuthorizedKeys,
113 AddressBasedAuthorizer.MinimumRequiredCalculation.MAJORITY
114 );
115
116 genesisFeePerKb = Coin.MILLICOIN.multiply(5);
117
118 maxFeePerKb = Coin.valueOf(5_000_000L);
119
120 List<ECKey> increaseLockingCapAuthorizedKeys = Arrays.stream(new String[]{
121 "0448f51638348b034995b1fd934fe14c92afde783e69f120a46ee16eb6bdc2e4f6b5e37772094c68c0dea2b1be3d96ea9651a9eebda7304914c8047f4e3e251378",
122 "0484c66f75548baf93e322574adac4e4579b6a53f8d11fab640e14c90118e6983ef24b0de349a3e88f72e81e771ae1c897cef446fd7f4da71778c532aee3b6c41b",
123 "04bb6435dc1ea12da843ebe213893d136c1624acd681fff82551498ae00bf28e9323164b00daf925fa75177463b8254a2aae8a1713e4d851a84ea369c193e9ce51"
124 }).map(hex -> ECKey.fromPublicOnly(Hex.decode(hex))).collect(Collectors.toList());
125
126 increaseLockingCapAuthorizer = new AddressBasedAuthorizer(
127 increaseLockingCapAuthorizedKeys,
128 AddressBasedAuthorizer.MinimumRequiredCalculation.ONE
129 );
130
131 lockingCapIncrementsMultiplier = 2;
132 initialLockingCap = Coin.COIN.multiply(300); // 300 BTC
133
134 btcHeightWhenBlockIndexActivates = 700_000; //TODO define this value when Iris activation height in RSK is determined
135 maxDepthToSearchBlocksBelowIndexActivation = 1_000; //TODO define this value with Sergio
136
137 // TODO: This value is not real
138 erpFedActivationDelay = 5063;
139
140 // TODO: WE NEED TO DEFINE THESE KEYS
141 erpFedPubKeysList = new ArrayList<>();
142
143 oldFederationAddress = "35JUi1FxabGdhygLhnNUEFG4AgvpNMgxK1";
144
145 minSecondsBetweenCallsReceiveHeader = 300; // 5 minutes in Seconds
146 maxDepthBlockchainAccepted = 25;
147
148 minimumPegoutValuePercentageToReceiveAfterFee = 20;
149 }
150
151 public static BridgeMainNetConstants getInstance() {
152 return instance;
153 }
154
155 }