+
+
diff --git a/client/app/config.go b/client/app/config.go
index d0ed8f4410..6f04e0b095 100644
--- a/client/app/config.go
+++ b/client/app/config.go
@@ -99,7 +99,6 @@ type CoreConfig struct {
NoAutoWalletLock bool `long:"no-wallet-lock" description:"Disable locking of wallets on shutdown or logout. Use this if you want your external wallets to stay unlocked after closing the DEX app."`
NoAutoDBBackup bool `long:"no-db-backup" description:"Disable creation of a database backup on shutdown."`
UnlockCoinsOnLogin bool `long:"release-wallet-coins" description:"On login or wallet creation, instruct the wallet to release any coins that it may have locked."`
- SimnetFiatRates bool `long:"simnet-fiat-rates" description:"Fetch fiat rates when running in simnet mode."`
ExtensionModeFile string `long:"extension-mode-file" description:"path to a file that specifies options for running core as an extension."`
}
@@ -203,7 +202,6 @@ func (cfg *Config) Core(log dex.Logger) *core.Config {
UnlockCoinsOnLogin: cfg.UnlockCoinsOnLogin,
NoAutoWalletLock: cfg.NoAutoWalletLock,
NoAutoDBBackup: cfg.NoAutoDBBackup,
- SimnetFiatRates: cfg.SimnetFiatRates,
ExtensionModeFile: cfg.ExtensionModeFile,
}
}
diff --git a/client/core/bond.go b/client/core/bond.go
index 1640ca61e9..a2f719d73b 100644
--- a/client/core/bond.go
+++ b/client/core/bond.go
@@ -458,6 +458,10 @@ func (c *Core) bondStateOfDEX(dc *dexConnection, bondCfg *dexBondCfg) *dexAcctBo
return state
}
+func (c *Core) exchangeAuth(dc *dexConnection) *ExchangeAuth {
+ return &c.bondStateOfDEX(dc, c.dexBondConfig(dc, time.Now().Unix())).ExchangeAuth
+}
+
type bondID struct {
assetID uint32
coinID []byte
@@ -908,7 +912,7 @@ func (c *Core) monitorBondConfs(dc *dexConnection, bond *asset.Bond, reqConfs ui
if confs < reqConfs {
details := fmt.Sprintf("Bond confirmations %v/%v", confs, reqConfs)
c.notify(newBondPostNoteWithConfirmations(TopicRegUpdate, string(TopicRegUpdate),
- details, db.Data, assetID, coinIDStr, int32(confs), host))
+ details, db.Data, assetID, coinIDStr, int32(confs), host, c.exchangeAuth(dc)))
}
return confs >= reqConfs, nil
@@ -1015,8 +1019,14 @@ func (c *Core) UpdateBondOptions(form *BondOptionsForm) error {
}
}()
+ var success bool
dc.acct.authMtx.Lock()
- defer dc.acct.authMtx.Unlock()
+ defer func() {
+ dc.acct.authMtx.Unlock()
+ if success {
+ c.notify(newBondAuthUpdate(dc.acct.host, c.exchangeAuth(dc)))
+ }
+ }()
if !dc.acct.isAuthed {
return errors.New("login or register first")
@@ -1025,7 +1035,6 @@ func (c *Core) UpdateBondOptions(form *BondOptionsForm) error {
// Revert to initial values if we encounter any error below.
bondAssetID0 = dc.acct.bondAsset
targetTier0, maxBondedAmt0, penaltyComps0 = dc.acct.targetTier, dc.acct.maxBondedAmt, dc.acct.penaltyComps
- var success bool
defer func() { // still under authMtx lock on defer stack
if !success {
dc.acct.bondAsset = bondAssetID0
@@ -1169,6 +1178,7 @@ func (c *Core) UpdateBondOptions(form *BondOptionsForm) error {
success = true
} // else we might have already done ReserveBondFunds...
return err
+
}
// BondsFeeBuffer suggests how much extra may be required for the transaction
@@ -1530,7 +1540,7 @@ func (c *Core) makeAndPostBond(dc *dexConnection, acctExists bool, wallet *xcWal
details := fmt.Sprintf("Waiting for %d confirmations to post bond %v (%s) to %s",
reqConfs, bondCoinStr, unbip(bond.AssetID), dc.acct.host) // TODO: subject, detail := c.formatDetails(...)
c.notify(newBondPostNoteWithConfirmations(TopicBondConfirming, string(TopicBondConfirming),
- details, db.Success, bond.AssetID, bondCoinStr, 0, dc.acct.host))
+ details, db.Success, bond.AssetID, bondCoinStr, 0, dc.acct.host, c.exchangeAuth(dc)))
// Set up the coin waiter, which watches confirmations so the user knows
// when to expect their account to be marked paid by the server.
c.monitorBondConfs(dc, bond, reqConfs)
@@ -1591,7 +1601,8 @@ func (c *Core) bondConfirmed(dc *dexConnection, assetID uint32, coinID []byte, p
}
c.log.Infof("Bond %s (%s) confirmed.", bondIDStr, unbip(assetID))
details := fmt.Sprintf("New tier = %d (target = %d).", effectiveTier, targetTier) // TODO: format to subject,details
- c.notify(newBondPostNoteWithTier(TopicBondConfirmed, string(TopicBondConfirmed), details, db.Success, dc.acct.host, bondedTier))
+
+ c.notify(newBondPostNoteWithTier(TopicBondConfirmed, string(TopicBondConfirmed), details, db.Success, dc.acct.host, bondedTier, c.exchangeAuth(dc)))
} else if !foundConfirmed {
c.log.Errorf("bondConfirmed: Bond %s (%s) not found", bondIDStr, unbip(assetID))
// just try to authenticate...
@@ -1617,7 +1628,7 @@ func (c *Core) bondConfirmed(dc *dexConnection, assetID uint32, coinID []byte, p
details := fmt.Sprintf("New tier = %d", effectiveTier) // TODO: format to subject,details
c.notify(newBondPostNoteWithTier(TopicAccountRegistered, string(TopicAccountRegistered),
- details, db.Success, dc.acct.host, bondedTier)) // possibly redundant with SubjectBondConfirmed
+ details, db.Success, dc.acct.host, bondedTier, c.exchangeAuth(dc))) // possibly redundant with SubjectBondConfirmed
return nil
}
@@ -1669,7 +1680,7 @@ func (c *Core) bondExpired(dc *dexConnection, assetID uint32, coinID []byte, not
if int64(targetTier) > effectiveTier {
details := fmt.Sprintf("New tier = %d (target = %d).", effectiveTier, targetTier)
c.notify(newBondPostNoteWithTier(TopicBondExpired, string(TopicBondExpired),
- details, db.WarningLevel, dc.acct.host, bondedTier))
+ details, db.WarningLevel, dc.acct.host, bondedTier, c.exchangeAuth(dc)))
}
return nil
diff --git a/client/core/core.go b/client/core/core.go
index 67b1433c9a..79de0bea7f 100644
--- a/client/core/core.go
+++ b/client/core/core.go
@@ -339,6 +339,7 @@ func coreMarketFromMsgMarket(dc *dexConnection, msgMkt *msgjson.Market) *Market
QuoteID: quote.ID,
QuoteSymbol: quote.Symbol,
LotSize: msgMkt.LotSize,
+ ParcelSize: msgMkt.ParcelSize,
RateStep: msgMkt.RateStep,
EpochLen: msgMkt.EpochLen,
StartEpoch: msgMkt.StartEpoch,
@@ -519,7 +520,8 @@ func (c *Core) exchangeInfo(dc *dexConnection) *Exchange {
CandleDurs: cfg.BinSizes,
ViewOnly: dc.acct.isViewOnly(),
Auth: acctBondState.ExchangeAuth,
- // TODO: Bonds
+ MaxScore: cfg.MaxScore,
+ PenaltyThreshold: cfg.PenaltyThreshold,
// Legacy reg fee (V0PURGE)
RegFees: feeAssets,
@@ -1378,9 +1380,6 @@ type Config struct {
TorIsolation bool
// Language. A BCP 47 language tag. Default is en-US.
Language string
- // SimnetFiatRates specifies whether to fetch fiat rates when running on
- // simnet.
- SimnetFiatRates bool
// NoAutoWalletLock instructs Core to skip locking the wallet on shutdown or
// logout. This can be helpful if the user wants the wallet to remain
@@ -1612,25 +1611,21 @@ func (c *Core) Run(ctx context.Context) {
c.latencyQ.Run(ctx)
}()
- // Skip rate fetch setup if on simnet. Rate fetching maybe enabled if
- // desired.
- if c.cfg.Net != dex.Simnet || c.cfg.SimnetFiatRates {
- // Retrieve disabled fiat rate sources from database.
- disabledSources, err := c.db.DisabledRateSources()
- if err != nil {
- c.log.Errorf("Unable to retrieve disabled fiat rate source: %v", err)
- }
+ // Retrieve disabled fiat rate sources from database.
+ disabledSources, err := c.db.DisabledRateSources()
+ if err != nil {
+ c.log.Errorf("Unable to retrieve disabled fiat rate source: %v", err)
+ }
- // Construct enabled fiat rate sources.
- fetchers:
- for token, rateFetcher := range fiatRateFetchers {
- for _, v := range disabledSources {
- if token == v {
- continue fetchers
- }
+ // Construct enabled fiat rate sources.
+fetchers:
+ for token, rateFetcher := range fiatRateFetchers {
+ for _, v := range disabledSources {
+ if token == v {
+ continue fetchers
}
- c.fiatRateSources[token] = newCommonRateSource(rateFetcher)
}
+ c.fiatRateSources[token] = newCommonRateSource(rateFetcher)
}
c.fetchFiatExchangeRates(ctx)
diff --git a/client/core/core_test.go b/client/core/core_test.go
index 1c48872911..6b7c006218 100644
--- a/client/core/core_test.go
+++ b/client/core/core_test.go
@@ -250,6 +250,7 @@ func testDexConnection(ctx context.Context, crypter *tCrypter) (*dexConnection,
Base: tUTXOAssetA.ID,
Quote: tUTXOAssetB.ID,
LotSize: dcrBtcLotSize,
+ ParcelSize: 100,
RateStep: dcrBtcRateStep,
EpochLen: 60000,
MarketBuyBuffer: 1.1,
@@ -10775,7 +10776,7 @@ func TestRotateBonds(t *testing.T) {
// if the locktime is not too soon.
acct.bonds = append(acct.bonds, acct.pendingBonds[0])
acct.pendingBonds = nil
- acct.bonds[0].LockTime = mergeableLocktimeThresh + 1
+ acct.bonds[0].LockTime = mergeableLocktimeThresh + 5
rig.queuePrevalidateBond()
run(1, 0, 2*bondAsset.Amt+bondFeeBuffer)
mergingBond := acct.pendingBonds[0]
diff --git a/client/core/exchangeratefetcher.go b/client/core/exchangeratefetcher.go
index 704629250d..13b2e4f9c7 100644
--- a/client/core/exchangeratefetcher.go
+++ b/client/core/exchangeratefetcher.go
@@ -35,7 +35,7 @@ const (
var (
dcrDataURL = "https://explorer.dcrdata.org/api/exchangerate"
// coinpaprika has two options. /tickers is for the top 2500 assets all in
- // one request. /ticker/[slug] is for a single ticker. From testing
+ // one request. /tickers/[slug] is for a single ticker. From testing
// Single ticker request took 274.626125ms
// Size of single ticker response: 0.733 kB
// All tickers request took 47.651851ms
@@ -48,7 +48,7 @@ var (
// So any more than 25000 / 3600 = 6.9 assets, and we can expect to run into
// rate limits. But the bandwidth of the full tickers request is kinda
// ridiculous too. Solution needed.
- coinpaprikaURL = "https://api.coinpaprika.com/v1/tickers/%s"
+ coinpaprikaURL = "https://api.coinpaprika.com/v1/tickers"
// The best info I can find on Messari says
// Without an API key requests are rate limited to 20 requests per minute
// and 1000 requests per day.
@@ -142,26 +142,12 @@ func newCommonRateSource(fetcher rateFetcher) *commonRateSource {
// for sample request and response information.
func fetchCoinpaprikaRates(ctx context.Context, log dex.Logger, assets map[uint32]*SupportedAsset) map[uint32]float64 {
fiatRates := make(map[uint32]float64)
- fetchRate := func(sa *SupportedAsset) {
- assetID := sa.ID
- if sa.Wallet == nil {
- // we don't want to fetch rates for assets with no wallet.
- return
- }
-
- res := new(struct {
- Quotes struct {
- Currency struct {
- Price float64 `json:"price"`
- } `json:"USD"`
- } `json:"quotes"`
- })
-
+ slugAssets := make(map[string]uint32)
+ for _, sa := range assets {
symbol := dex.TokenSymbol(sa.Symbol)
if symbol == "dextt" {
- return
+ continue
}
-
name := sa.Name
// TODO: Store these within the *SupportedAsset.
switch symbol {
@@ -171,21 +157,37 @@ func fetchCoinpaprikaRates(ctx context.Context, log dex.Logger, assets map[uint3
symbol = "matic"
name = "polygon"
}
+ slug := coinpapSlug(symbol, name)
+ slugAssets[slug] = sa.ID
+ }
- reqStr := fmt.Sprintf(coinpaprikaURL, coinpapSlug(symbol, name))
-
- ctx, cancel := context.WithTimeout(ctx, fiatRequestTimeout)
- defer cancel()
+ ctx, cancel := context.WithTimeout(ctx, fiatRequestTimeout)
+ defer cancel()
- if err := getRates(ctx, reqStr, res); err != nil {
- log.Errorf("Error getting fiat exchange rates from coinpaprika: %v", err)
- return
- }
+ var res []*struct {
+ ID string `json:"id"`
+ Quotes struct {
+ USD struct {
+ Price float64 `json:"price"`
+ } `json:"USD"`
+ } `json:"quotes"`
+ }
- fiatRates[assetID] = res.Quotes.Currency.Price
+ if err := getRates(ctx, coinpaprikaURL, &res); err != nil {
+ log.Errorf("Error getting fiat exchange rates from coinpaprika: %v", err)
+ return fiatRates
}
- for _, sa := range assets {
- fetchRate(sa)
+ for _, coinInfo := range res {
+ assetID, found := slugAssets[coinInfo.ID]
+ if !found {
+ continue
+ }
+ price := coinInfo.Quotes.USD.Price
+ if price == 0 {
+ log.Errorf("zero-price returned from coinpaprika for slug %s", coinInfo.ID)
+ continue
+ }
+ fiatRates[assetID] = price
}
return fiatRates
}
@@ -288,6 +290,6 @@ func getRates(ctx context.Context, url string, thing any) error {
return fmt.Errorf("error %d fetching %q", resp.StatusCode, url)
}
- reader := io.LimitReader(resp.Body, 1<<20)
+ reader := io.LimitReader(resp.Body, 1<<22)
return json.NewDecoder(reader).Decode(thing)
}
diff --git a/client/core/notification.go b/client/core/notification.go
index cb5bbf3721..83b6b9111a 100644
--- a/client/core/notification.go
+++ b/client/core/notification.go
@@ -265,14 +265,19 @@ func newBondRefundNote(topic Topic, subject, details string, severity db.Severit
}
}
+const (
+ TopicBondAuthUpdate Topic = "BondAuthUpdate"
+)
+
// BondPostNote is a notification regarding bond posting.
type BondPostNote struct {
db.Notification
- Asset *uint32 `json:"asset,omitempty"`
- Confirmations *int32 `json:"confirmations,omitempty"`
- BondedTier *int64 `json:"bondedTier,omitempty"`
- CoinID *string `json:"coinID,omitempty"`
- Dex string `json:"dex,omitempty"`
+ Asset *uint32 `json:"asset,omitempty"`
+ Confirmations *int32 `json:"confirmations,omitempty"`
+ BondedTier *int64 `json:"bondedTier,omitempty"`
+ CoinID *string `json:"coinID,omitempty"`
+ Dex string `json:"dex,omitempty"`
+ Auth *ExchangeAuth `json:"auth,omitempty"`
}
func newBondPostNote(topic Topic, subject, details string, severity db.Severity, dexAddr string) *BondPostNote {
@@ -283,20 +288,39 @@ func newBondPostNote(topic Topic, subject, details string, severity db.Severity,
}
}
-func newBondPostNoteWithConfirmations(topic Topic, subject, details string, severity db.Severity, asset uint32, coinID string, currConfs int32, dexAddr string) *BondPostNote {
- bondPmtNt := newBondPostNote(topic, subject, details, severity, dexAddr)
+func newBondPostNoteWithConfirmations(
+ topic Topic,
+ subject string,
+ details string,
+ severity db.Severity,
+ asset uint32,
+ coinID string,
+ currConfs int32,
+ host string,
+ auth *ExchangeAuth,
+) *BondPostNote {
+
+ bondPmtNt := newBondPostNote(topic, subject, details, severity, host)
bondPmtNt.Asset = &asset
bondPmtNt.CoinID = &coinID
bondPmtNt.Confirmations = &currConfs
+ bondPmtNt.Auth = auth
return bondPmtNt
}
-func newBondPostNoteWithTier(topic Topic, subject, details string, severity db.Severity, dexAddr string, bondedTier int64) *BondPostNote {
+func newBondPostNoteWithTier(topic Topic, subject, details string, severity db.Severity, dexAddr string, bondedTier int64, auth *ExchangeAuth) *BondPostNote {
bondPmtNt := newBondPostNote(topic, subject, details, severity, dexAddr)
bondPmtNt.BondedTier = &bondedTier
+ bondPmtNt.Auth = auth
return bondPmtNt
}
+func newBondAuthUpdate(host string, auth *ExchangeAuth) *BondPostNote {
+ n := newBondPostNote(TopicBondAuthUpdate, "", "", db.Data, host)
+ n.Auth = auth
+ return n
+}
+
// SendNote is a notification regarding a requested send or withdraw.
type SendNote struct {
db.Notification
@@ -673,8 +697,8 @@ func newWalletNote(n asset.WalletNotification) *WalletNote {
type ReputationNote struct {
db.Notification
- Host string
- Reputation account.Reputation
+ Host string `json:"host"`
+ Reputation account.Reputation `json:"rep"`
}
const TopicReputationUpdate = "ReputationUpdate"
diff --git a/client/core/types.go b/client/core/types.go
index 7b6155fc18..34eb71d927 100644
--- a/client/core/types.go
+++ b/client/core/types.go
@@ -525,6 +525,7 @@ type Market struct {
QuoteID uint32 `json:"quoteid"`
QuoteSymbol string `json:"quotesymbol"`
LotSize uint64 `json:"lotsize"`
+ ParcelSize uint32 `json:"parcelsize"`
RateStep uint64 `json:"ratestep"`
EpochLen uint64 `json:"epochlen"`
StartEpoch uint64 `json:"startepoch"`
@@ -693,7 +694,8 @@ type Exchange struct {
CandleDurs []string `json:"candleDurs"`
ViewOnly bool `json:"viewOnly"`
Auth ExchangeAuth `json:"auth"`
- // TODO: Bonds slice(s) - and a LockedInBonds(assetID) method
+ PenaltyThreshold uint32 `json:"penaltyThreshold"`
+ MaxScore uint32 `json:"maxScore"`
// OLD fields for the legacy registration fee (V0PURGE):
RegFees map[string]*FeeAsset `json:"regFees"`
diff --git a/client/webserver/locales/ar.go b/client/webserver/locales/ar.go
index b7517ce9e8..1e7a182da4 100644
--- a/client/webserver/locales/ar.go
+++ b/client/webserver/locales/ar.go
@@ -178,7 +178,6 @@ var Ar = map[string]string{
"All markets at": "جميع الأسواق في",
"pick a different asset": "اختر أصلًا مختلفًا",
"Create": "انشاء",
- "Register_loudly": "التسجيل!",
"1 Sync the Blockchain": "1: مزامنة سلسلة الكتل",
"Progress": "قيد التنفيذ",
"remaining": "الوقت المتبقي",
diff --git a/client/webserver/locales/de-de.go b/client/webserver/locales/de-de.go
index a4e669b8a9..2807134eca 100644
--- a/client/webserver/locales/de-de.go
+++ b/client/webserver/locales/de-de.go
@@ -169,11 +169,9 @@ var DeDE = map[string]string{
"Export Trades": "Exportiere Trades",
"change the wallet type": "den Wallet-Typ ändern",
"confirmations": "Bestätigungen",
- "how_reg": "Wie soll die Anmeldegebühr bezahlt werden?",
"All markets at": "Alle Märkte bei",
"pick a different asset": "ein anderes Asset wählen",
"Create": "Erstellen",
- "Register_loudly": "Registrieren!",
"1 Sync the Blockchain": "1: Blockchain synchronisieren",
"Progress": "Fortschritt",
"remaining": "verbleibend",
diff --git a/client/webserver/locales/en-us.go b/client/webserver/locales/en-us.go
index fa84be8469..c1bd8b2f5f 100644
--- a/client/webserver/locales/en-us.go
+++ b/client/webserver/locales/en-us.go
@@ -30,11 +30,14 @@ var EnUS = map[string]string{
"app_pw_reg": "Enter your app password to confirm DEX registration and bond creation.",
"reg_confirm_submit": `When you submit this form, funds will be spent from your wallet to post a fidelity bond, which is redeemable by you in the future.`,
"bond_strength": "Bond Strength",
- "update_bond_options": "Update Bond Options",
- "bond_options": "Bond Options",
- "bond_options_update_success": "Bond Options have been updated successfully",
"target_tier": "Target Tier",
"target_tier_tooltip": "This is the target account tier you wish to maintain. Set to zero if you wish to disable tier maintenance (do not post new bonds).",
+ "Actual Tier": "Actual Tier",
+ "Penalties": "Penalties",
+ "Change Tier": "Change Tier",
+ "Limit Bonus": "Limit Bonus",
+ "Score": "Score",
+ "Confirm Bond Options": "Confirm Bond Options",
"provided_markets": "This DEX provides the following markets:",
"accepted_fee_assets": "This DEX recognizes the bond assets:",
"base_header": "Base",
@@ -195,11 +198,9 @@ var EnUS = map[string]string{
"Export Trades": "Export Trades",
"change the wallet type": "change the wallet type",
"confirmations": "confirmations",
- "how_reg": "How will you create your bond?",
"All markets at": "All markets at",
"pick a different asset": "pick a different asset",
"Create": "Create",
- "Register_loudly": "Register!",
"1 Sync the Blockchain": "1: Sync the Blockchain",
"Progress": "Progress",
"remaining": "remaining",
@@ -276,6 +277,17 @@ var EnUS = map[string]string{
"Settings": "Settings",
"asset_name Markets": " Markets",
"Host": "Host",
+ "Trading Tier": "Trading Tier",
+ "Bond Lock": "Bond Lock",
+ "USD": "USD",
+ "Fee Reserves": "Fee Reserves",
+ "Trading Limits": "Trading Limits",
+ "Select your bond asset": "Select your bond asset",
+ "choose a different asset": "choose a different asset",
+ "current_bonding_asset": `Using for bonding`,
+ "Choose your trading tier": "Choose your trading tier",
+ "trading_tier_message": "Increase your trading tier to enable trading of larger amounts. Trading limits also grow with reputation.",
+ "Other Trading Limits": "Other Trading Limits",
"No Recent Activity": "No Recent Activity",
"Recent asset_name Activity": "Recent Activity",
"other_actions": "Other Actions",
@@ -425,15 +437,7 @@ var EnUS = map[string]string{
"market_making_running": "Market making is running",
"cannot_manually_trade": "You cannot manually place orders while market making is running",
"back": "Back",
- "bond_details": "Bond Details",
- "current_tier": "Current Tier",
- "current_tier_tooltip": "Number of active bonds that have not yet reached the expiry threshold as reported by the DEX server. Increase your target tier to raise your account tier, boost your trading limits, and offset penalties, if any.",
- "current_target_tier_tooltip": "This is the target account tier you wish to maintain. If zero, bond maintenance will be disabled and new bonds will not be posted.",
- "current_target_tier": "Current Target Tier",
- "bond_cost": "Bond Cost",
- "bond_cost_tooltip": "Cost of a single bond without fees and bond maintenance fund reservation.",
- "bond_reservations": "Bond Reservation",
- "bond_reservations_tooltip": "Total funds that will be locked when you post a bond to cover fees and bond maintenance costs.",
+ "current_tier_tooltip": "Tier represented by active bonds. Increase your target tier to raise your target tier, boost your trading limits, and offset penalties, if any.",
"Reset App Password": "Reset App Password",
"reset_app_pw_msg": "Reset your app password using your app seed. If you provide the correct app seed, you can login again with the new password.",
"Forgot Password": "Forgot Password?",
diff --git a/client/webserver/locales/pl-pl.go b/client/webserver/locales/pl-pl.go
index cb20991119..781a32dc95 100644
--- a/client/webserver/locales/pl-pl.go
+++ b/client/webserver/locales/pl-pl.go
@@ -168,7 +168,6 @@ var PlPL = map[string]string{
"All markets at": "Wszystkie rynki na",
"pick a different asset": "wybierz inne aktywo",
"Create": "Utwórz",
- "Register_loudly": "Zarejestruj!",
"1 Sync the Blockchain": "1: Zsynchronizuj blockchain",
"Progress": "Postęp",
"remaining": "pozostało",
diff --git a/client/webserver/locales/pt-br.go b/client/webserver/locales/pt-br.go
index 7a7aba9715..beebf5e96c 100644
--- a/client/webserver/locales/pt-br.go
+++ b/client/webserver/locales/pt-br.go
@@ -169,7 +169,6 @@ var PtBr = map[string]string{
"All markets at": "Todos mercados",
"pick a different asset": "Escolher ativo diferente",
"Create": "Criar",
- "Register_loudly": "Registre!",
"1 Sync the Blockchain": "1: Sincronizar a Blockchain",
"Progress": "Progresso",
"remaining": "Faltando",
diff --git a/client/webserver/locales/zh-cn.go b/client/webserver/locales/zh-cn.go
index 71f8411a99..ac9894fee2 100644
--- a/client/webserver/locales/zh-cn.go
+++ b/client/webserver/locales/zh-cn.go
@@ -171,7 +171,6 @@ var ZhCN = map[string]string{
"All markets at": "所有市场",
"pick a different asset": "选择其它的资产",
"Create": "创建",
- "Register_loudly": "注册!",
"1 Sync the Blockchain": "1: 同步区块链",
"Progress": "进度",
"remaining": "剩余",
diff --git a/client/webserver/site/src/css/forms.scss b/client/webserver/site/src/css/forms.scss
index 1415309ddb..d83f468db8 100644
--- a/client/webserver/site/src/css/forms.scss
+++ b/client/webserver/site/src/css/forms.scss
@@ -1,18 +1,5 @@
#regAssetForm {
- #whatsabond {
- max-width: 425px;
- }
-
- div.reg-asset-allmkts {
- min-width: 210px;
- max-width: 320px;
- }
-
div.reg-asset {
- min-width: 425px;
- padding: 20px 10px;
- border-bottom: dashed 2px #7777;
-
.fader {
position: absolute;
bottom: 0;
@@ -44,11 +31,6 @@
}
}
- img.reg-asset-logo {
- width: 50px;
- height: 50px;
- }
-
img.reg-market-logo {
width: 14px;
height: 14px;
@@ -59,7 +41,7 @@
@extend .stylish-overflow;
display: block;
- max-height: 65px;
+ max-height: 120px;
line-height: 1.15;
overflow-y: hidden;
margin-right: 8px;
@@ -83,13 +65,6 @@
}
}
- div.reg-asset-details {
- box-sizing: content-box;
- line-height: 1.25;
- width: 100px;
- padding: 0 50px 0 25px;
- }
-
div.reg-assets-markets-wrap {
position: relative;
@@ -102,6 +77,25 @@
color: #c7c3cc;
}
+ .reg-asset-table {
+ thead > tr > th {
+ border-top: 1px solid;
+ }
+
+ th,
+ td {
+ border-color: $light_border_color;
+ border-width: 1px;
+ border-style: none solid solid;
+ padding: 5px;
+ text-align: left;
+ }
+ }
+
+ input[data-tmpl=regAssetTier] {
+ width: 3em;
+ }
+
.readygreen {
color: #009931;
}
@@ -125,11 +119,6 @@
}
}
- img.logo {
- width: 30px;
- height: 30px;
- }
-
input.app-pass {
// margin: 0 auto;
display: inline-block;
@@ -143,6 +132,10 @@
div.borderright {
border-right: 1px solid #777;
}
+
+ .mw50 {
+ max-width: 50%;
+ }
}
#newWalletForm {
@@ -267,11 +260,6 @@ button.form-button {
width: 25px;
}
- .borderleft {
- padding-left: 25px;
- border-left: solid 1px #777;
- }
-
.logo {
width: 40px;
height: 40px;
@@ -331,8 +319,7 @@ button.form-button {
#vSendForm,
#exportSeedAuth,
#cancelForm,
-#quickConfigForm,
-#bondDetailsForm {
+#quickConfigForm {
width: 375px;
}
@@ -414,6 +401,48 @@ a[data-tmpl=walletCfgGuide] {
}
}
+div[data-tmpl=scoreTray] {
+ background-color: $buycolor_dark;
+ height: 12px;
+ border-radius: 100px;
+ overflow: hidden;
+
+ div[data-tmpl=scoreWarn] {
+ background-color: $sellcolor_dark;
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ }
+}
+
+span[data-tmpl=scorePointer] {
+ transform: translateX(-50%);
+
+ div[data-tmpl=scoreData] {
+ top: 0;
+ bottom: 0;
+
+ &.positive {
+ right: 150%;
+ }
+
+ &.negative {
+ left: 150%;
+ }
+ }
+}
+
+.penalty-marker {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: 10%;
+ width: 2px;
+ z-index: 2;
+ background-color: black;
+}
+
div[data-handler=init] {
.quickconfig-asset-logo {
width: 25px;
diff --git a/client/webserver/site/src/css/forms_dark.scss b/client/webserver/site/src/css/forms_dark.scss
index 5de4fa84ac..78c3ebd3d9 100644
--- a/client/webserver/site/src/css/forms_dark.scss
+++ b/client/webserver/site/src/css/forms_dark.scss
@@ -33,6 +33,12 @@ body.dark {
}
}
}
+
+ .reg-asset-table {
+ th, td {
+ border-color: $dark_border_color;
+ }
+ }
}
::-webkit-calendar-picker-indicator {
diff --git a/client/webserver/site/src/css/main.scss b/client/webserver/site/src/css/main.scss
index a65bb696cf..eb1dfbfc0e 100644
--- a/client/webserver/site/src/css/main.scss
+++ b/client/webserver/site/src/css/main.scss
@@ -422,6 +422,10 @@ div.popup-notes {
border-radius: 3px;
}
+.brdr {
+ border: 1px solid $light_border_color;
+}
+
.brdrleft {
border-left: 1px solid $light_border_color;
}
@@ -439,7 +443,7 @@ div.popup-notes {
}
hr.dashed {
- border-top: 1px dashed #777;
+ border-top: dashed 2px #777;
}
.vscroll {
diff --git a/client/webserver/site/src/css/main_dark.scss b/client/webserver/site/src/css/main_dark.scss
index 9b82015d46..136dcebbb3 100644
--- a/client/webserver/site/src/css/main_dark.scss
+++ b/client/webserver/site/src/css/main_dark.scss
@@ -34,6 +34,10 @@ body.dark {
border-color: #333;
}
+ .brdr {
+ border: 1px solid $dark_border_color;
+ }
+
.brdrleft {
border-left: 1px solid $dark_border_color;
}
diff --git a/client/webserver/site/src/css/market_dark.scss b/client/webserver/site/src/css/market_dark.scss
index f5d3bc4f45..32b3a31263 100644
--- a/client/webserver/site/src/css/market_dark.scss
+++ b/client/webserver/site/src/css/market_dark.scss
@@ -91,8 +91,6 @@ body.dark {
}
#orderForm {
- color: #a1a1a1;
-
button {
color: #aaa;
}
diff --git a/client/webserver/site/src/css/settings.scss b/client/webserver/site/src/css/settings.scss
index 360977ddc1..8c27894c6f 100644
--- a/client/webserver/site/src/css/settings.scss
+++ b/client/webserver/site/src/css/settings.scss
@@ -1,11 +1,10 @@
div.settings {
- display: inline-block;
- width: 500px;
- text-align: left;
+ min-width: 375px;
& > div {
- position: relative;
- padding: 10px;
+ width: 100%;
+ text-align: left;
+ padding: 10px 0;
border-bottom: 1px solid #7777;
}
@@ -13,8 +12,8 @@ div.settings {
border-top: 1px solid #7777;
}
- & > div.form-check {
- padding-left: 35px;
+ div.form-check {
+ padding-left: 25px;
}
button {
diff --git a/client/webserver/site/src/html/dexsettings.tmpl b/client/webserver/site/src/html/dexsettings.tmpl
index f3cc526853..58e0002651 100644
--- a/client/webserver/site/src/html/dexsettings.tmpl
+++ b/client/webserver/site/src/html/dexsettings.tmpl
@@ -1,32 +1,59 @@
{{define "dexsettings"}}
{{template "top" .}}
{{$passwordIsCached := .UserInfo.PasswordIsCached}}
-