Add Tether token support via ERC20 and Omni

This commit is contained in:
Jelle Besseling 2020-08-25 20:16:52 +02:00
parent f45a26ca54
commit 61d730abf9
No known key found for this signature in database
GPG Key ID: 9712452E8BE3372E
8 changed files with 63 additions and 4 deletions

View File

@ -0,0 +1,12 @@
package bisq.asset;
public class LiquidBitcoinAddressValidator extends RegexAddressValidator {
static private final String REGEX = "^([a-km-zA-HJ-NP-Z1-9]{26,35}|[a-km-zA-HJ-NP-Z1-9]{80}|[a-z]{2,5}1[ac-hj-np-z02-9]{8,87}|[A-Z]{2,5}1[AC-HJ-NP-Z02-9]{8,87})$";
public LiquidBitcoinAddressValidator() {
super(REGEX);
}
public LiquidBitcoinAddressValidator(String regex, String errorMessageI18nKey) {
super(REGEX, "validation.altcoin.liquidBitcoin.invalidAddress");
}
}

View File

@ -19,12 +19,13 @@ package bisq.asset.coins;
import bisq.asset.AltCoinAccountDisclaimer; import bisq.asset.AltCoinAccountDisclaimer;
import bisq.asset.Coin; import bisq.asset.Coin;
import bisq.asset.LiquidBitcoinAddressValidator;
import bisq.asset.RegexAddressValidator; import bisq.asset.RegexAddressValidator;
@AltCoinAccountDisclaimer("account.altcoin.popup.liquidbitcoin.msg") @AltCoinAccountDisclaimer("account.altcoin.popup.liquidbitcoin.msg")
public class LiquidBitcoin extends Coin { public class LiquidBitcoin extends Coin {
public LiquidBitcoin() { public LiquidBitcoin() {
super("Liquid Bitcoin", "L-BTC", new RegexAddressValidator("^([a-km-zA-HJ-NP-Z1-9]{26,35}|[a-km-zA-HJ-NP-Z1-9]{80}|[a-z]{2,5}1[ac-hj-np-z02-9]{8,87}|[A-Z]{2,5}1[AC-HJ-NP-Z02-9]{8,87})$", "validation.altcoin.liquidBitcoin.invalidAddress")); super("Liquid Bitcoin", "L-BTC", new LiquidBitcoinAddressValidator());
} }
} }

View File

@ -0,0 +1,12 @@
package bisq.asset.coins;
import bisq.asset.Coin;
import bisq.asset.LiquidBitcoinAddressValidator;
public class TetherUSDLiquid extends Coin {
public TetherUSDLiquid() {
// If you add a new USDT variant or want to change this ticker symbol you should also look here:
// core/src/main/java/bisq/core/provider/price/PriceProvider.java:getAll()
super("Tether USD (Liquid Bitcoin)", "L-USDT", new LiquidBitcoinAddressValidator());
}
}

View File

@ -0,0 +1,12 @@
package bisq.asset.coins;
import bisq.asset.Base58BitcoinAddressValidator;
import bisq.asset.Coin;
public class TetherUSDOmni extends Coin {
public TetherUSDOmni() {
// If you add a new USDT variant or want to change this ticker symbol you should also look here:
// core/src/main/java/bisq/core/provider/price/PriceProvider.java:getAll()
super("Tether USD (Omni)", "USDT-O", new Base58BitcoinAddressValidator());
}
}

View File

@ -0,0 +1,11 @@
package bisq.asset.tokens;
import bisq.asset.Erc20Token;
public class TetherUSDERC20 extends Erc20Token {
public TetherUSDERC20() {
// If you add a new USDT variant or want to change this ticker symbol you should also look here:
// core/src/main/java/bisq/core/provider/price/PriceProvider.java:getAll()
super("Tether USD (ERC20)", "USDT-E");
}
}

View File

@ -104,6 +104,8 @@ bisq.asset.coins.Spectrecoin
bisq.asset.coins.Starwels bisq.asset.coins.Starwels
bisq.asset.coins.SUB1X bisq.asset.coins.SUB1X
bisq.asset.coins.TEO bisq.asset.coins.TEO
bisq.asset.coins.TetherUSDLiquid
bisq.asset.coins.TetherUSDOmni
bisq.asset.coins.TurtleCoin bisq.asset.coins.TurtleCoin
bisq.asset.coins.UnitedCommunityCoin bisq.asset.coins.UnitedCommunityCoin
bisq.asset.coins.Unobtanium bisq.asset.coins.Unobtanium
@ -123,6 +125,7 @@ bisq.asset.coins.ZeroClassic
bisq.asset.tokens.AugmintEuro bisq.asset.tokens.AugmintEuro
bisq.asset.tokens.DaiStablecoin bisq.asset.tokens.DaiStablecoin
bisq.asset.tokens.EtherStone bisq.asset.tokens.EtherStone
bisq.asset.tokens.TetherUSDERC20
bisq.asset.tokens.TrueUSD bisq.asset.tokens.TrueUSD
bisq.asset.tokens.USDCoin bisq.asset.tokens.USDCoin
bisq.asset.tokens.VectorspaceAI bisq.asset.tokens.VectorspaceAI

View File

@ -70,7 +70,12 @@ public class PriceProvider extends HttpClientProvider {
final double price = (Double) treeMap.get("price"); final double price = (Double) treeMap.get("price");
// json uses double for our timestampSec long value... // json uses double for our timestampSec long value...
final long timestampSec = MathUtils.doubleToLong((Double) treeMap.get("timestampSec")); final long timestampSec = MathUtils.doubleToLong((Double) treeMap.get("timestampSec"));
marketPriceMap.put(currencyCode, new MarketPrice(currencyCode, price, timestampSec, true)); if (currencyCode.equals("USDT")) {
addPrice(marketPriceMap, "USDT-O", price, timestampSec);
addPrice(marketPriceMap, "USDT-E", price, timestampSec);
addPrice(marketPriceMap, "L-USDT", price, timestampSec);
}
addPrice(marketPriceMap, currencyCode, price, timestampSec);
} catch (Throwable t) { } catch (Throwable t) {
log.error(t.toString()); log.error(t.toString());
t.printStackTrace(); t.printStackTrace();
@ -80,6 +85,10 @@ public class PriceProvider extends HttpClientProvider {
return new Tuple2<>(tsMap, marketPriceMap); return new Tuple2<>(tsMap, marketPriceMap);
} }
private void addPrice(Map<String, MarketPrice> marketPriceMap, String currencyCode, double price, long timestampSec) {
marketPriceMap.put(currencyCode, new MarketPrice(currencyCode, price, timestampSec, true));
}
public String getBaseUrl() { public String getBaseUrl() {
return httpClient.getBaseUrl(); return httpClient.getBaseUrl();
} }

View File

@ -534,11 +534,10 @@ public class MainView extends InitializableView<StackPane, MainViewModel>
String selectedCurrencyCode = model.getPriceFeedService().getCurrencyCode(); String selectedCurrencyCode = model.getPriceFeedService().getCurrencyCode();
MarketPrice selectedMarketPrice = model.getPriceFeedService().getMarketPrice(selectedCurrencyCode); MarketPrice selectedMarketPrice = model.getPriceFeedService().getMarketPrice(selectedCurrencyCode);
return Res.get("mainView.marketPrice.tooltip", return Res.get("mainView.marketPrice.tooltip",
"Bisq Price Index for " + selectedCurrencyCode, "Bisq Price Index for " + selectedCurrencyCode,
"", "",
DisplayUtils.formatTime(new Date(selectedMarketPrice.getTimestampSec())), selectedMarketPrice != null ? DisplayUtils.formatTime(new Date(selectedMarketPrice.getTimestampSec())) : Res.get("shared.na"),
model.getPriceFeedService().getProviderNodeAddress()); model.getPriceFeedService().getProviderNodeAddress());
} }