support Bitcoin Cash

This commit is contained in:
woodser 2022-02-16 11:12:48 -05:00
parent e864210f4b
commit e91b96227f
6 changed files with 78 additions and 5 deletions

View File

@ -0,0 +1,30 @@
/*
* This file is part of Haveno.
*
* Haveno is free software: you can redistribute it and/or modify it
* under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or (at
* your option) any later version.
*
* Haveno is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
* License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with Haveno. If not, see <http://www.gnu.org/licenses/>.
*/
package bisq.asset.coins;
import bisq.asset.BitcoinAddressValidator;
import bisq.asset.Coin;
import org.bitcoinj.params.MainNetParams;
public class BitcoinCash extends Coin {
public BitcoinCash() {
super("Bitcoin Cash", "BCH", new BitcoinAddressValidator(MainNetParams.get()), Network.MAINNET); // TODO: BCH address validation
}
}

View File

@ -15,6 +15,7 @@ bisq.asset.coins.Bitcoin$Mainnet
bisq.asset.coins.Bitcoin$Regtest
bisq.asset.coins.BitcoinRhodium
bisq.asset.coins.Bitcoin$Testnet
bisq.asset.coins.BitcoinCash
bisq.asset.coins.BitDaric
bisq.asset.coins.Bitmark
bisq.asset.coins.Bitzec

View File

@ -0,0 +1,44 @@
/*
* This file is part of Haveno.
*
* Haveno is free software: you can redistribute it and/or modify it
* under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or (at
* your option) any later version.
*
* Haveno is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
* License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with Haveno. If not, see <http://www.gnu.org/licenses/>.
*/
package bisq.asset.coins;
import bisq.asset.AbstractAssetTest;
import org.junit.Test;
public class BitcoinCashTest extends AbstractAssetTest {
public BitcoinCashTest() {
super(new BitcoinCash());
}
@Test
public void testValidAddresses() {
assertValidAddress("17VZNX1SN5NtKa8UQFxwQbFeFc3iqRYhem");
assertValidAddress("3EktnHQD7RiAE6uzMj2ZifT9YgRrkSgzQX");
assertValidAddress("1111111111111111111114oLvT2");
assertValidAddress("1BitcoinEaterAddressDontSendf59kuE");
}
@Test
public void testInvalidAddresses() {
assertInvalidAddress("17VZNX1SN5NtKa8UQFxwQbFeFc3iqRYhemqq");
assertInvalidAddress("17VZNX1SN5NtKa8UQFxwQbFeFc3iqRYheO");
assertInvalidAddress("17VZNX1SN5NtKa8UQFxwQbFeFc3iqRYhek#");
}
}

View File

@ -135,17 +135,16 @@ public class CurrencyUtil {
public static List<CryptoCurrency> getMainCryptoCurrencies() {
final List<CryptoCurrency> result = new ArrayList<>();
result.add(new CryptoCurrency("BTC", "Bitcoin"));
result.add(new CryptoCurrency("LTC", "Litecoin"));
result.add(new CryptoCurrency("BCH", "Bitcoin Cash"));
result.add(new CryptoCurrency("ETH", "Ether"));
result.add(new CryptoCurrency("LTC", "Litecoin"));
result.add(new CryptoCurrency("ZEC", "Zcash"));
result.sort(TradeCurrency::compareTo);
return result;
}
public static List<CryptoCurrency> getRemovedCryptoCurrencies() {
final List<CryptoCurrency> currencies = new ArrayList<>();
currencies.add(new CryptoCurrency("BCH", "Bitcoin Cash"));
currencies.add(new CryptoCurrency("BCHC", "Bitcoin Clashic"));
currencies.add(new CryptoCurrency("ACH", "AchieveCoin"));
currencies.add(new CryptoCurrency("SC", "Siacoin"));

View File

@ -98,7 +98,6 @@ public class CurrencyUtilTest {
@Test
public void testGetNameAndCodeOfRemovedAsset() {
assertEquals("Bitcoin Cash (BCH)", CurrencyUtil.getNameAndCode("BCH"));
assertEquals("N/A (XYZ)", CurrencyUtil.getNameAndCode("XYZ"));
}

View File

@ -116,7 +116,7 @@ class GrpcPriceService extends PriceImplBase {
return getCustomRateMeteringInterceptor(coreApi.getConfig().appDataDir, this.getClass())
.or(() -> Optional.of(CallRateMeteringInterceptor.valueOf(
new HashMap<>() {{
put(getGetMarketPriceMethod().getFullMethodName(), new GrpcCallRateMeter(10, SECONDS));
put(getGetMarketPriceMethod().getFullMethodName(), new GrpcCallRateMeter(20, SECONDS));
}}
)));
}