From 047ec4abaa54d4974ab4ad1da8f185084591a103 Mon Sep 17 00:00:00 2001 From: Jason Davies Date: Wed, 18 Sep 2019 12:36:02 +0100 Subject: [PATCH] Add Ergo (ERG) without Bouncy Castle dependency. See #3195. --- .../src/main/java/bisq/asset/coins/Ergo.java | 53 +++++++++++++++++++ .../META-INF/services/bisq.asset.Asset | 1 + .../test/java/bisq/asset/coins/ErgoTest.java | 47 ++++++++++++++++ 3 files changed, 101 insertions(+) create mode 100644 assets/src/main/java/bisq/asset/coins/Ergo.java create mode 100644 assets/src/test/java/bisq/asset/coins/ErgoTest.java diff --git a/assets/src/main/java/bisq/asset/coins/Ergo.java b/assets/src/main/java/bisq/asset/coins/Ergo.java new file mode 100644 index 00000000000..fd9ae801cda --- /dev/null +++ b/assets/src/main/java/bisq/asset/coins/Ergo.java @@ -0,0 +1,53 @@ +/* + * This file is part of Bisq. + * + * Bisq 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. + * + * Bisq 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 Bisq. If not, see . + */ + +package bisq.asset.coins; + +import bisq.asset.AddressValidationResult; +import bisq.asset.AddressValidator; +import bisq.asset.Coin; + +import java.util.Arrays; + +import org.bitcoinj.core.Base58; +import org.bitcoinj.core.AddressFormatException; + +public class Ergo extends Coin { + + public Ergo() { + super("Ergo", "ERG", new ErgoAddressValidator()); + } + + public static class ErgoAddressValidator implements AddressValidator { + + @Override + public AddressValidationResult validate(String address) { + try { + byte[] decoded = Base58.decode(address); + if (decoded.length < 4) { + return AddressValidationResult.invalidAddress("Input too short: " + decoded.length); + } + if (decoded[0] != 1 && decoded[0] != 2 && decoded[0] != 3) { + return AddressValidationResult.invalidAddress("Invalid prefix"); + } + } catch (AddressFormatException e) { + return AddressValidationResult.invalidAddress(e); + } + return AddressValidationResult.validAddress(); + } + } +} diff --git a/assets/src/main/resources/META-INF/services/bisq.asset.Asset b/assets/src/main/resources/META-INF/services/bisq.asset.Asset index 33c63a2a430..69e7b11d763 100644 --- a/assets/src/main/resources/META-INF/services/bisq.asset.Asset +++ b/assets/src/main/resources/META-INF/services/bisq.asset.Asset @@ -40,6 +40,7 @@ bisq.asset.coins.Donu bisq.asset.coins.Dragonglass bisq.asset.coins.DSTRA bisq.asset.coins.Emercoin +bisq.asset.coins.Ergo bisq.asset.coins.Ether bisq.asset.coins.EtherClassic bisq.asset.coins.FourtyTwo diff --git a/assets/src/test/java/bisq/asset/coins/ErgoTest.java b/assets/src/test/java/bisq/asset/coins/ErgoTest.java new file mode 100644 index 00000000000..213769cd81a --- /dev/null +++ b/assets/src/test/java/bisq/asset/coins/ErgoTest.java @@ -0,0 +1,47 @@ +/* + * This file is part of Bisq. + * + * Bisq 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. + * + * Bisq 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 Bisq. If not, see . + */ + +package bisq.asset.coins; + +import bisq.asset.AbstractAssetTest; + +import org.junit.Test; + +public class ErgoTest extends AbstractAssetTest { + + public ErgoTest() { + super(new Ergo()); + } + + @Test + public void testValidAddresses() { + assertValidAddress("9fRAWhdxEsTcdb8PhGNrZfwqa65zfkuYHAMmkQLcic1gdLSV5vA"); + assertValidAddress("25qGdVWg2yyYho8uC1pLtc7KxFn4nEEAwD"); + assertValidAddress("23NL9a8ngN28ovtLiKLgHexcdTKBbUMLhH"); + assertValidAddress("7bwdkU5V8"); + assertValidAddress("BxKBaHkvrTvLZrDcZjcsxsF7aSsrN73ijeFZXtbj4CXZHHcvBtqSxQ"); + } + + @Test + public void testInvalidAddresses() { + assertInvalidAddress("9fRAWhdxEsTcdb8PhGNrZfwqa65zfkuYHAMmkQLcic1gdLSV5vAaa"); + assertInvalidAddress("25qGdVWg2yyYho8uC1pLtc7KxFn4nEEAwDaa"); + assertInvalidAddress("23NL9a8ngN28ovtLiKLgHexcdTKBbUMLhHaa"); + assertInvalidAddress("7bwdkU5V8aa"); + assertInvalidAddress("BxKBaHkvrTvLZrDcZjcsxsF7aSsrN73ijeFZXtbj4CXZHHcvBtqSxQ#"); + } +}