Coverage Summary for Class: BridgeDevNetConstants (co.rsk.config)
Class |
Class, %
|
Method, %
|
Line, %
|
BridgeDevNetConstants |
0%
(0/1)
|
0%
(0/2)
|
0%
(0/48)
|
1 /*
2 * This file is part of RskJ
3 * Copyright (C) 2017 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
19 package co.rsk.config;
20
21 import co.rsk.bitcoinj.core.BtcECKey;
22 import co.rsk.bitcoinj.core.Coin;
23 import co.rsk.bitcoinj.core.NetworkParameters;
24 import co.rsk.peg.AddressBasedAuthorizer;
25 import co.rsk.peg.Federation;
26 import co.rsk.peg.FederationMember;
27 import org.bouncycastle.util.encoders.Hex;
28 import org.ethereum.crypto.ECKey;
29
30 import java.time.Instant;
31 import java.util.Arrays;
32 import java.util.List;
33 import java.util.stream.Collectors;
34
35 public class BridgeDevNetConstants extends BridgeConstants {
36 // IMPORTANT: BTC, RSK and MST keys are the same.
37 // Change upon implementation of the <INSERT FORK NAME HERE> fork.
38 public static final List<BtcECKey> DEVNET_FEDERATION_PUBLIC_KEYS = Arrays.asList(
39 BtcECKey.fromPublicOnly(Hex.decode("03d68975ab0f6ab782febc37aaa486ae19cc5e72c6900e34e21317285c88915ed6")),
40 BtcECKey.fromPublicOnly(Hex.decode("02914c05df0b11862ac6931c226ad40ebc4f5624ee6dca34278d3bbfa73b914cbd")),
41 BtcECKey.fromPublicOnly(Hex.decode("0309d9df35855aa45235a04e30d228889eb03e462874588e631359d5f9cdea6519"))
42 );
43
44 public BridgeDevNetConstants(List<BtcECKey> federationPublicKeys) {
45 btcParamsString = NetworkParameters.ID_TESTNET;
46
47 List<FederationMember> federationMembers = FederationMember.getFederationMembersFromKeys(federationPublicKeys);
48
49 // Currently set to:
50 // Monday, November 13, 2017 9:00:00 PM GMT-03:00
51 Instant genesisFederationAddressCreatedAt = Instant.ofEpochMilli(1510617600l);
52
53 // Expected federation address is:
54 // 2NCEo1RdmGDj6MqiipD6DUSerSxKv79FNWX
55 genesisFederation = new Federation(
56 federationMembers,
57 genesisFederationAddressCreatedAt,
58 1L,
59 getBtcParams()
60 );
61
62 btc2RskMinimumAcceptableConfirmations = 1;
63 btc2RskMinimumAcceptableConfirmationsOnRsk = 10;
64 rsk2BtcMinimumAcceptableConfirmations = 10;
65
66 updateBridgeExecutionPeriod = 30000; // 30secs
67
68 maxBtcHeadersPerRskBlock = 500;
69
70 legacyMinimumPeginTxValueInSatoshis = Coin.valueOf(1_000_000);
71 legacyMinimumPegoutTxValueInSatoshis = Coin.valueOf(500_000);
72 minimumPeginTxValueInSatoshis = Coin.valueOf(500_000);
73 minimumPegoutTxValueInSatoshis = Coin.valueOf(250_000);
74
75
76 // Keys generated with GenNodeKey using generators 'auth-a' through 'auth-e'
77 List<ECKey> federationChangeAuthorizedKeys = Arrays.stream(new String[]{
78 "04dde17c5fab31ffc53c91c2390136c325bb8690dc135b0840075dd7b86910d8ab9e88baad0c32f3eea8833446a6bc5ff1cd2efa99ecb17801bcb65fc16fc7d991",
79 "04af886c67231476807e2a8eee9193878b9d94e30aa2ee469a9611d20e1e1c1b438e5044148f65e6e61bf03e9d72e597cb9cdea96d6fc044001b22099f9ec403e2",
80 "045d4dedf9c69ab3ea139d0f0da0ad00160b7663d01ce7a6155cd44a3567d360112b0480ab6f31cac7345b5f64862205ea7ccf555fcf218f87fa0d801008fecb61",
81 "04709f002ac4642b6a87ea0a9dc76eeaa93f71b3185985817ec1827eae34b46b5d869320efb5c5cbe2a5c13f96463fe0210710b53352a4314188daffe07bd54154",
82 // "04aff62315e9c18004392a5d9e39496ff5794b2d9f43ab4e8ade64740d7fdfe896969be859b43f26ef5aa4b5a0d11808277b4abfa1a07cc39f2839b89cc2bc6b4c"
83 "0447b4aba974c61c6c4045893267346730ec965b308e7ca04a899cf06a901face3106e1eef1bdad04928cd8263522eda4872d20d3fe1ef5e551785c4a482656a6e"
84 }).map(hex -> ECKey.fromPublicOnly(Hex.decode(hex))).collect(Collectors.toList());
85
86 federationChangeAuthorizer = new AddressBasedAuthorizer(
87 federationChangeAuthorizedKeys,
88 AddressBasedAuthorizer.MinimumRequiredCalculation.MAJORITY
89 );
90
91 // Key generated with GenNodeKey using generator 'auth-lock-whitelist'
92 List<ECKey> lockWhitelistAuthorizedKeys = Arrays.stream(new String[]{
93 // "04641fb250d7ca7a1cb4f530588e978013038ec4294d084d248869dd54d98873e45c61d00ceeaeeb9e35eab19fa5fbd8f07cb8a5f0ddba26b4d4b18349c09199ad"
94 "0447b4aba974c61c6c4045893267346730ec965b308e7ca04a899cf06a901face3106e1eef1bdad04928cd8263522eda4872d20d3fe1ef5e551785c4a482656a6e"
95 }).map(hex -> ECKey.fromPublicOnly(Hex.decode(hex))).collect(Collectors.toList());
96
97 lockWhitelistChangeAuthorizer = new AddressBasedAuthorizer(
98 lockWhitelistAuthorizedKeys,
99 AddressBasedAuthorizer.MinimumRequiredCalculation.ONE
100 );
101
102 federationActivationAge = 10L;
103
104 fundsMigrationAgeSinceActivationBegin = 15L;
105 fundsMigrationAgeSinceActivationEnd = 100L;
106
107 // Key generated with GenNodeKey using generator 'auth-fee-per-kb'
108 List<ECKey> feePerKbAuthorizedKeys = Arrays.stream(new String[]{
109 "0430c7d0146029db553d60cf11e8d39df1c63979ee2e4cd1e4d4289a5d88cfcbf3a09b06b5cbc88b5bfeb4b87a94cefab81c8d44655e7e813fc3e18f51cfe7e8a0"
110 }).map(hex -> ECKey.fromPublicOnly(Hex.decode(hex))).collect(Collectors.toList());
111
112 feePerKbChangeAuthorizer = new AddressBasedAuthorizer(
113 feePerKbAuthorizedKeys,
114 AddressBasedAuthorizer.MinimumRequiredCalculation.MAJORITY
115 );
116
117 genesisFeePerKb = Coin.MILLICOIN;
118
119 maxFeePerKb = Coin.valueOf(5_000_000L);
120
121 // Key generated with GenNodeKey using generator 'auth-increase_locking_cap'
122 List<ECKey> increaseLockingCapAuthorizedKeys = Arrays.stream(new String[]{
123 "04450bbaab83ec48b3cb8fbb077c950ee079733041c039a8c4f1539e5181ca1a27589eeaf0fbf430e49d2909f14c767bf6909ad6845831f683416ee12b832e36ed"
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 initialLockingCap = Coin.COIN.multiply(1_000L); // 1_000 BTC
132
133 lockingCapIncrementsMultiplier = 2;
134
135 btcHeightWhenBlockIndexActivates = 700_000; //TODO define this value when Iris activation height in RSK is determined
136
137 maxDepthToSearchBlocksBelowIndexActivation = 1_000; //TODO define this value with Sergio
138
139 erpFedActivationDelay = 1000;
140
141 // Keys generated with GenNodeKey using generators 'erp-fed-01' through 'erp-fed-05'
142 erpFedPubKeysList = Arrays.stream(new String[]{
143 "03b9fc46657cf72a1afa007ecf431de1cd27ff5cc8829fa625b66ca47b967e6b24",
144 "029cecea902067992d52c38b28bf0bb2345bda9b21eca76b16a17c477a64e43301",
145 "03284178e5fbcc63c54c3b38e3ef88adf2da6c526313650041b0ef955763634ebd",
146 "03776b1fd8f86da3c1db3d69699e8250a15877d286734ea9a6da8e9d8ad25d16c1",
147 "03ab0e2cd7ed158687fc13b88019990860cdb72b1f5777b58513312550ea1584bc"
148 }).map(hex -> BtcECKey.fromPublicOnly(Hex.decode(hex))).collect(Collectors.toList()
149 );
150
151 // Multisig address created in bitcoind with the following private keys:
152 // 47129ffed2c0273c75d21bb8ba020073bb9a1638df0e04853407461fdd9e8b83
153 // 9f72d27ba603cfab5a0201974a6783ca2476ec3d6b4e2625282c682e0e5f1c35
154 // e1b17fcd0ef1942465eee61b20561b16750191143d365e71de08b33dd84a9788
155 oldFederationAddress = "2N7ZgQyhFKm17RbaLqygYbS7KLrQfapyZzu";
156
157 minSecondsBetweenCallsReceiveHeader = 300; // 5 minutes in Seconds
158
159 maxDepthBlockchainAccepted = 25;
160
161 minimumPegoutValuePercentageToReceiveAfterFee = 20;
162 }
163 }