Skip to content

Commit

Permalink
Merge pull request flare-foundation#11 from jO-Osko/flare
Browse files Browse the repository at this point in the history
Flare
  • Loading branch information
alenabelium authored Sep 12, 2023
2 parents f1d9b6e + efd66db commit 575d678
Show file tree
Hide file tree
Showing 6 changed files with 108 additions and 57 deletions.
11 changes: 9 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ When the reveal epoch ends, all revealed prices are collected and used for the c

There are two types of data providers, ordinary ones and trusted data providers. Trusted data providers are decided by a governance process and do not need to become whitelisted, as they are whitelisted by default. During usual operations of FTSO system, trusted data providers have exactly the same role as ordinary data providers. Only in exceptional situations when FTSO system goes into a special fallback mode these data providers are relied on to provide prices from which average is calculated. Special fallback mode kicks in if too small number of data providers sends their prices (too small in terms of total vote power), or if price changes abruptly, or if it is triggered by governance. In special fallback mode no rewards are distributed to trusted data providers.

All other providers can try to get whitelisted. Whitelisting is a completely decentralized procedure and it is based purely on vote power. It is managed by `VoterWhitelister` contract. Any data provider with `address` can try to whitelist itself for a currency with `index` by calling `VoterWhitelister.requestWhitelistingVoter(address, index)`. If data provider's vote power (= WSGB balance + WSGB delegations) is high enough, it gets whitelisted. For each currency at most 100 whitelisted data providers can exist. A new data provider can get whitelisted only if there are still free empty slots or its vote power is greater than the voting power of some already whitelisted data provider. In this case, the whitelisted data provider with minimal vote power gets removed from the whitelist. This is fully managed by `VoterWhitelister.requestWhitelistingVoter(...)`. At any time, a data provider can try to obtain its whitelisting mask, by calling `PriceSubmitter.voterWhitelistBitmap(address)`. This is a bitmask, where positions of bits correspond to indices of currencies. An index for a supported currency can be obtained on `FtsoRegistry` contract, by calling `FtsoRegistry.getFtsoIndex(symbol)`. Supported symbols list can be obtained by calling `FtsoRegistry.getSupportedSymbols()`.
All other providers can try to get whitelisted. Whitelisting is a completely decentralized procedure and it is based purely on vote power. It is managed by `VoterWhitelister` contract. Any data provider with `address` can try to whitelist itself for a currency with `index` by calling `VoterWhitelister.requestWhitelistingVoter(address, index)`. If data provider's vote power (= WFLR balance + WFLR delegations) is high enough, it gets whitelisted. For each currency at most 100 whitelisted data providers can exist. A new data provider can get whitelisted only if there are still free empty slots or its vote power is greater than the voting power of some already whitelisted data provider. In this case, the whitelisted data provider with minimal vote power gets removed from the whitelist. This is fully managed by `VoterWhitelister.requestWhitelistingVoter(...)`. At any time, a data provider can try to obtain its whitelisting mask, by calling `PriceSubmitter.voterWhitelistBitmap(address)`. This is a bitmask, where positions of bits correspond to indices of currencies. An index for a supported currency can be obtained on `FtsoRegistry` contract, by calling `FtsoRegistry.getFtsoIndex(symbol)`. Supported symbols list can be obtained by calling `FtsoRegistry.getSupportedSymbols()`.

### Pricing transactions and priority

Expand Down Expand Up @@ -98,7 +98,7 @@ Data provider is configured by a JSON configuration file. In addition, certain p
- `whitelist` - Defines whether whitelist procedure should be executed at the beginning of the run. Usually should be set to true at least for the first run.
- `trusted` - Defines whether the address of the data provider is trusted. Trusted providers are
- `gasPrice` - Gas price for transactions sent (submits and reveals).

- `symbolPrefix` - Prefix for symbols of currencies. Use `test` for testnets and empty string for mainnet.
- `priceProviderList` - A list of price provider data. Each object has the following parameters:
- `symbol` - FAsset which price will be submitted/revealed (eg. FXRP, FLTC, etc.)
- `decimals` - Number of decimals (default: 5).
Expand Down Expand Up @@ -163,3 +163,10 @@ To claim rewards for certain reward epochs run from root: `./scripts/run-command
## SetFee

To set fee percents run from root: `./scripts/run-command.sh SetFee <fee>` where `<fee>` must be a number between 0 and 100 and represents fee percentage (e.g. 100 for 100% fee) - this parameter is mandatory.


# Testnets

The submission process for live net and testnets is the same. The only difference is the configuration file. For testnets (coston2 for flare), you should change the rpc endpoint, private key (for security reasons) and set prefix to `test` (see the full information on config above).

*WARNING:* The configuration file does not include the pricing information for native coin (FLR or C2FLR).
65 changes: 51 additions & 14 deletions configs/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,72 +7,109 @@
"whitelist": false,
"trusted": true,
"gasPrice": "225000000000",
"symbolPrefix": "",
"priceProviderList": [
{
"symbol": "ADA",
"decimals": 5,
"priceProviderClass": "WsLimitedPriceProvider",
"priceProviderParams": ["ADA/USD", 1.0, [["coinbasepro", "ADA/USD"], ["binanceus", "ADA/USD"], ["bitfinex", "ADA/USD"], ["bitmex", "ADA/USD"], ["kraken", "ADA/USD"], ["binance", "ADA/USDT"], ["bitrue", "ADA/USDT"], ["huobi", "ADA/USDT"], ["okex", "ADA/USDT"], ["gateio", "ADA/USDT"], ["digifinex", "ADA/USDT"], ["zb", "ADA/USDT"], ["crypto", "ADA/USDT"], ["mexc", "ADA/USDT"], ["zt", "ADA/USDT"]], "avg"]
"priceProviderParams": ["ADA/USD", 1.0, [["coinbasepro", "ADA/USD"], ["binanceus", "ADA/USD"], ["bitfinex", "ADA/USD"], ["bitmex", "ADA/USD"], ["bitstamp", "ADA/USD"], ["kraken", "ADA/USD"], ["binance", "ADA/USDT"], ["bitrue", "ADA/USDT"], ["huobi", "ADA/USDT"], ["okex", "ADA/USDT"], ["gateio", "ADA/USDT"], ["digifinex", "ADA/USDT"], ["mexc", "ADA/USDT"], ["bitforex", "ADA/USDT"], ["lbank", "ADA/USDT"], ["bybit", "ADA/USDT"]], "avg"]
},
{
"symbol": "ARB",
"decimals": 5,
"priceProviderClass": "WsLimitedPriceProvider",
"priceProviderParams": ["ARB/USD", 1.0, [["coinbasepro", "ARB/USD"], ["binanceus", "ARB/USD"], ["bitfinex", "ARB/USD"], ["bitmex", "ARB/USD"], ["kraken", "ARB/USD"], ["binance", "ARB/USDT"], ["bitrue", "ARB/USDT"], ["huobi", "ARB/USDT"], ["okex", "ARB/USDT"], ["gateio", "ARB/USDT"], ["mexc", "ARB/USDT"], ["bitforex", "ARB/USDT"], ["lbank", "ARB/USDT"], ["bybit", "ARB/USDT"]], "avg"]
},
{
"symbol": "ALGO",
"decimals": 5,
"priceProviderClass": "WsLimitedPriceProvider",
"priceProviderParams": ["ALGO/USD", 1.0, [["coinbasepro", "ALGO/USD"], ["bitfinex", "ALGO/USD"], ["binanceus", "ALGO/USD"], ["binance", "ALGO/USDT"], ["okex", "ALGO/USDT"], ["bitrue", "ALGO/USDT"], ["huobi", "ALGO/USDT"], ["crypto", "ALGO/USDT"], ["zt", "ALGO/USDT"], ["lbank", "ALGO/USDT"], ["bitforex", "ALGO/USDT"], ["bibox", "ALGO/USDT"]], "avg"]
"priceProviderParams": ["ALGO/USD", 1.0, [["coinbasepro", "ALGO/USD"], ["bitfinex", "ALGO/USD"], ["binanceus", "ALGO/USD"], ["kraken", "ALGO/USD"], ["bitstamp", "ALGO/USD"], ["binance", "ALGO/USDT"], ["okex", "ALGO/USDT"], ["bitrue", "ALGO/USDT"], ["huobi", "ALGO/USDT"], ["gateio", "ALGO/USDT"], ["mexc", "ALGO/USDT"], ["lbank", "ALGO/USDT"], ["bitforex", "ALGO/USDT"], ["bybit", "ALGO/USDT"]], "avg"]
},
{
"symbol": "BCH",
"symbol": "AVAX",
"decimals": 5,
"priceProviderClass": "WsLimitedPriceProvider",
"priceProviderParams": ["BCH/USD", 1.0, [["coinbasepro", "BCH/USD"], ["ftx", "BCH/USD"], ["bitmex", "BCH/USD"], ["kraken", "BCH/USD"], ["okex", "BCH/USDT"], ["binance", "BCH/USDT"], ["bitrue", "BCH/USDT"], ["mexc", "BCH/USDT"], ["crypto", "BCH/USDT"], ["bitforex", "BCH/USDT"], ["huobi", "BCH/USDT"], ["bibox", "BCH/USDT"], ["digifinex", "BCH/USDT"]], "avg"]
"priceProviderParams": ["AVAX/USD", 1.0, [["coinbasepro", "AVAX/USD"], ["bitfinex", "AVAX/USD"], ["binanceus", "AVAX/USD"], ["bitmex", "AVAX/USD"], ["bitstamp", "AVAX/USD"], ["kraken", "AVAX/USD"], ["binance", "AVAX/USDT"], ["okex", "AVAX/USDT"], ["bitrue", "AVAX/USDT"], ["huobi", "AVAX/USDT"], ["gateio", "AVAX/USDT"], ["mexc", "AVAX/USDT"], ["lbank", "AVAX/USDT"], ["bitforex", "AVAX/USDT"], ["bybit", "AVAX/USDT"]], "avg"]
},
{
"symbol": "BTC",
"symbol": "BNB",
"decimals": 5,
"priceProviderClass": "WsLimitedPriceProvider",
"priceProviderParams": ["BTC/USD", 1.0, [["coinbasepro", "BTC/USD"], ["ftx", "BTC/USD"], ["bitmex", "BTC/USD"], ["binanceus", "BTC/USD"], ["bitfinex", "BTC/USD"], ["bitstamp", "BTC/USD"], ["kraken", "BTC/USD"], ["binance", "BTC/USDT"], ["huobi", "BTC/USDT"], ["bitrue", "BTC/USDT"], ["digifinex", "BTC/USDT"], ["crypto", "BTC/USDT"], ["okex", "BTC/USDT"], ["zb", "BTC/USDT"], ["gateio", "BTC/USDT"], ["bitforex", "BTC/USDT"], ["bibox", "BTC/USDT"], ["bybit", "BTC/USDT"], ["zt", "BTC/USDT"], ["mexc", "BTC/USDT"], ["bitmart", "BTC/USDT"]], "avg"]
"priceProviderParams": ["BNB/USD", 1.0, [["bitmex", "BNB/USD"], ["binanceus", "BNB/USD"], ["bitmex", "BNB/USD"], ["binance", "BNB/USDT"], ["huobi", "BNB/USDT"], ["bitrue", "BNB/USDT"], ["okex", "BNB/USDT"], ["gateio", "BNB/USDT"], ["bibox", "BNB/USDT"], ["bybit", "BNB/USDT"], ["mexc", "BNB/USDT"], ["lbank", "BNB/USDT"]], "avg"]
},
{
"symbol": "DGB",
"symbol": "BTC",
"decimals": 5,
"priceProviderClass": "WsLimitedPriceProvider",
"priceProviderParams": ["DGB/USD", 1.0, [["bitfinex", "DGB/USD"], ["bittrex", "DGB/USD"], ["binance", "DGB/USDT"], ["digifinex", "DGB/USDT"], ["lbank", "DGB/USDT"], ["hitbtc", "DGB/USDT"], ["fmfw", "DGB/USDT"], ["zt", "DGB/USDT"], ["okex", "DGB/USDT"], ["coinex", "DGB/USDT"]], "avg"]
"priceProviderParams": ["BTC/USD", 1.0, [["coinbasepro", "BTC/USD"], ["bitmex", "BTC/USD"], ["binanceus", "BTC/USD"], ["bitfinex", "BTC/USD"], ["bitstamp", "BTC/USD"], ["kraken", "BTC/USD"], ["binance", "BTC/USDT"], ["huobi", "BTC/USDT"], ["bitrue", "BTC/USDT"], ["digifinex", "BTC/USDT"], ["okex", "BTC/USDT"], ["gateio", "BTC/USDT"], ["bitforex", "BTC/USDT"], ["bybit", "BTC/USDT"], ["mexc", "BTC/USDT"], ["lbank", "BTC/USDT"]], "avg"]
},
{
"symbol": "DOGE",
"decimals": 5,
"priceProviderClass": "WsLimitedPriceProvider",
"priceProviderParams": ["DOGE/USD", 1.0, [["coinbasepro", "DOGE/USD"], ["ftx", "DOGE/USD"], ["bitmex", "DOGE/USD"], ["bitfinex", "DOGE/USD"], ["binanceus", "DOGE/USD"], ["ftxus", "DOGE/USD"], ["kraken", "DOGE/USD"], ["huobi", "DOGE/USDT"], ["binance", "DOGE/USDT"], ["gateio", "DOGE/USDT"], ["mexc", "DOGE/USDT"], ["okex", "DOGE/USDT"], ["zb", "DOGE/USDT"], ["digifinex", "DOGE/USDT"], ["bitrue", "DOGE/USDT"], ["bibox", "DOGE/USDT"], ["crypto", "DOGE/USDT"], ["bitforex", "DOGE/USDT"], ["zt", "DOGE/USDT"]], "avg"]
"priceProviderParams": ["DOGE/USD", 1.0, [["coinbasepro", "DOGE/USD"], ["bitmex", "DOGE/USD"], ["bitfinex", "DOGE/USD"], ["binanceus", "DOGE/USD"], ["bitstamp", "DOGE/USDT"], ["kraken", "DOGE/USD"], ["huobi", "DOGE/USDT"], ["binance", "DOGE/USDT"], ["gateio", "DOGE/USDT"], ["mexc", "DOGE/USDT"], ["okex", "DOGE/USDT"], ["digifinex", "DOGE/USDT"], ["bitrue", "DOGE/USDT"], ["bitforex", "DOGE/USDT"], ["lbank", "DOGE/USDT"], ["bybit", "DOGE/USDT"]], "avg"]
},
{
"symbol": "ETH",
"decimals": 5,
"priceProviderClass": "WsLimitedPriceProvider",
"priceProviderParams": ["ETH/USD", 1.0, [["coinbasepro", "ETH/USD"], ["ftx", "ETH/USD"], ["bitfinex", "ETH/USD"], ["binanceus", "ETH/USD"], ["bitmex", "ETH/USD"], ["bitstamp", "ETH/USD"], ["kraken", "ETH/USD"], ["binance", "ETH/USDT"], ["huobi", "ETH/USDT"], ["okex", "ETH/USDT"], ["bitrue", "ETH/USDT"], ["crypto", "ETH/USDT"], ["gateio", "ETH/USDT"], ["digifinex", "ETH/USDT"], ["mexc", "ETH/USDT"], ["bibox", "ETH/USDT"], ["bitforex", "ETH/USDT"], ["zb", "ETH/USDT"], ["bitfinex", "ETH/USDT"], ["coinex", "ETH/USDT"], ["bybit", "ETH/USDT"], ["zt", "ETH/USDT"], ["ftx", "ETH/USDT"]], "avg"]
"priceProviderParams": ["ETH/USD", 1.0, [["coinbasepro", "ETH/USD"], ["bitfinex", "ETH/USD"], ["binanceus", "ETH/USD"], ["bitmex", "ETH/USD"], ["bitstamp", "ETH/USD"], ["kraken", "ETH/USD"], ["binance", "ETH/USDT"], ["huobi", "ETH/USDT"], ["okex", "ETH/USDT"], ["bitrue", "ETH/USDT"], ["gateio", "ETH/USDT"], ["digifinex", "ETH/USDT"], ["mexc", "ETH/USDT"], ["bitforex", "ETH/USDT"], ["bitfinex", "ETH/USDT"], ["coinex", "ETH/USDT"], ["bybit", "ETH/USDT"], ["lbank", "ETH/USDT"]], "avg"]
},
{
"symbol": "FIL",
"decimals": 5,
"priceProviderClass": "WsLimitedPriceProvider",
"priceProviderParams": ["FIL/USD", 1.0, [["coinbasepro", "FIL/USD"], ["bitfinex", "FIL/USD"], ["kraken", "FIL/USD"], ["binance", "FIL/USDT"], ["okex", "FIL/USDT"], ["bibox", "FIL/USDT"], ["lbank", "FIL/USDT"], ["crypto", "FIL/USDT"], ["huobi", "FIL/USDT"], ["digifinex", "FIL/USDT"], ["gateio", "FIL/USDT"]], "avg"]
"priceProviderParams": ["FIL/USD", 1.0, [["coinbasepro", "FIL/USD"], ["binanceus", "FIL/USD"], ["bitfinex", "FIL/USD"], ["kraken", "FIL/USD"], ["binance", "FIL/USDT"], ["bitrue", "FIL/USDT"], ["okex", "FIL/USDT"], ["lbank", "FIL/USDT"], ["huobi", "FIL/USDT"], ["digifinex", "FIL/USDT"], ["gateio", "FIL/USDT"], ["mexc", "FIL/USDT"], ["bitforex", "FIL/USDT"], ["bybit", "FIL/USDT"]], "avg"]
},
{
"symbol": "LTC",
"decimals": 5,
"priceProviderClass": "WsLimitedPriceProvider",
"priceProviderParams": ["LTC/USD", 1.0, [["coinbasepro", "LTC/USD"], ["ftx", "LTC/USD"], ["bitmex", "LTC/USD"], ["bitfinex", "LTC/USD"], ["crypto", "LTC/USDT"], ["binance", "LTC/USDT"], ["okex", "LTC/USDT"], ["mexc", "LTC/USDT"], ["bibox", "LTC/USDT"], ["huobi", "LTC/USDT"], ["zb", "LTC/USDT"], ["bitrue", "LTC/USDT"], ["zt", "LTC/USDT"]], "avg"]
"priceProviderParams": ["LTC/USD", 1.0, [["coinbasepro", "LTC/USD"], ["binanceus", "LTC/USD"], ["bitmex", "LTC/USD"], ["bitfinex", "LTC/USD"], ["bitstamp", "LTC/USD"], ["kraken", "LTC/USD"], ["binance", "LTC/USDT"], ["okex", "LTC/USDT"], ["mexc", "LTC/USDT"], ["huobi", "LTC/USDT"], ["digifinex", "LTC/USDT"], ["bitrue", "LTC/USDT"], ["gateio", "LTC/USDT"], ["bitforex", "LTC/USDT"], ["lbank", "LTC/USDT"]], "avg"]
},
{
"symbol": "MATIC",
"decimals": 5,
"priceProviderClass": "WsLimitedPriceProvider",
"priceProviderParams": ["MATIC/USD", 1.0, [["coinbasepro", "MATIC/USD"], ["binanceus", "MATIC/USD"], ["bitfinex", "MATIC/USD"], ["bitstamp", "MATIC/USD"], ["kraken", "MATIC/USD"], ["binance", "MATIC/USDT"], ["okex", "MATIC/USDT"], ["mexc", "MATIC/USDT"], ["huobi", "MATIC/USDT"], ["bitrue", "MATIC/USDT"], ["gateio", "MATIC/USDT"], ["lbank", "MATIC/USDT"], ["bybit", "MATIC/USDT"]], "avg"]
},
{
"symbol": "SOL",
"decimals": 5,
"priceProviderClass": "WsLimitedPriceProvider",
"priceProviderParams": ["SOL/USD", 1.0, [["coinbasepro", "SOL/USD"], ["binanceus", "SOL/USD"], ["bitmex", "SOL/USD"], ["bitfinex", "SOL/USD"], ["bitstamp", "SOL/USD"], ["kraken", "SOL/USD"], ["binance", "SOL/USDT"], ["okex", "SOL/USDT"], ["mexc", "SOL/USDT"], ["huobi", "SOL/USDT"], ["bitrue", "SOL/USDT"], ["gateio", "SOL/USDT"], ["bitforex", "SOL/USDT"], ["lbank", "SOL/USDT"], ["bybit", "SOL/USDT"]], "avg"]
},
{
"symbol": "USDC",
"decimals": 5,
"priceProviderClass": "WsLimitedPriceProvider",
"priceProviderParams": ["SOL/USD", 1.0, [["binanceus", "USDC/USD"], ["bitstamp", "USDC/USD"]], "avg"]
},
{
"symbol": "USDT",
"decimals": 5,
"priceProviderClass": "WsLimitedPriceProvider",
"priceProviderParams": ["SOL/USD", 1.0, [["coinbasepro", "USDT/USD"], ["binanceus", "USDT/USD"], ["bitstamp", "USDT/USD"]], "avg"]
},
{
"symbol": "XDC",
"decimals": 5,
"priceProviderClass": "WsLimitedPriceProvider",
"priceProviderParams": ["XDC/USD", 1.0, [ ["bitfinex", "XDC/USD"], ["digifinex", "XDC/USDT"], ["bitrue", "XDC/USDT"], ["huobi", "XDC/USDT"], ["gateio", "XDC/USDT"], ["lbank", "XDC/USDT"], ["bybit", "XDC/USDT"]], "avg"]
},
{
"symbol": "XLM",
"decimals": 5,
"priceProviderClass": "WsLimitedPriceProvider",
"priceProviderParams": ["XLM/USD", 1.0, [["coinbasepro", "XLM/USD"], ["bitfinex", "XLM/USD"], ["binanceus", "XLM/USD"], ["bitstamp", "XLM/USD"], ["kraken", "XLM/USD"], ["binance", "XLM/USDT"], ["bitforex", "XLM/USDT"], ["mexc", "XLM/USDT"], ["digifinex", "XLM/USDT"], ["bitrue", "XLM/USDT"], ["crypto", "XLM/USDT"], ["huobi", "XLM/USDT"], ["bibox", "XLM/USDT"], ["okex", "XLM/USDT"]], "avg"]
"priceProviderParams": ["XLM/USD", 1.0, [["coinbasepro", "XLM/USD"], ["bitfinex", "XLM/USD"], ["bitstamp", "XLM/USD"], ["kraken", "XLM/USD"], ["binance", "XLM/USDT"], ["bitforex", "XLM/USDT"], ["mexc", "XLM/USDT"], ["digifinex", "XLM/USDT"], ["bitrue", "XLM/USDT"], ["huobi", "XLM/USDT"], ["gateio", "XLM/USDT"], ["okex", "XLM/USDT"], ["lbank", "XLM/USDT"], ["bybit", "XLM/USDT"]], "avg"]
},
{
"symbol": "XRP",
"decimals": 5,
"priceProviderClass": "WsLimitedPriceProvider",
"priceProviderParams": ["XRP/USD", 1.0, [["ftx", "XRP/USD"], ["bitfinex", "XRP/USD"], ["bitmex", "XRP/USD"], ["bitstamp", "XRP/USD"], ["kraken", "XRP/USD"], ["binance", "XRP/USDT"], ["okex", "XRP/USDT"], ["bitrue", "XRP/USDT"], ["zb", "XRP/USDT"], ["huobi", "XRP/USDT"], ["mexc", "XRP/USDT"], ["digifinex", "XRP/USDT"], ["crypto", "XRP/USDT"], ["bitforex", "XRP/USDT"], ["bybit", "XRP/USDT"], ["bibox", "XRP/USDT"], ["gateio", "XRP/USDT"], ["lbank", "XRP/USDT"], ["zt", "XRP/USDT"]], "avg"]
"priceProviderParams": ["XRP/USD", 1.0, [["bitfinex", "XRP/USD"], ["bitmex", "XRP/USD"], ["bitstamp", "XRP/USD"], ["kraken", "XRP/USD"], ["binance", "XRP/USDT"], ["okex", "XRP/USDT"], ["bitrue", "XRP/USDT"], ["huobi", "XRP/USDT"], ["mexc", "XRP/USDT"], ["digifinex", "XRP/USDT"], ["bitforex", "XRP/USDT"], ["bybit", "XRP/USDT"], ["gateio", "XRP/USDT"], ["lbank", "XRP/USDT"]], "avg"]
}
]
}
1 change: 1 addition & 0 deletions lib/Configuration.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ export class DataProviderConfiguration {
public whitelist!: boolean;
public trusted!: boolean;
public priceSubmitterContractAddress!: string;
public symbolPrefix!: string;

validate() {
if(!this.accountPrivateKey) {
Expand Down
Loading

0 comments on commit 575d678

Please sign in to comment.