Change the specific sign window to sign an imported account in the form
of accountAgeWitnessString,pubKeyString. The SignSpecificWitness never
worked due to missing pubKey data and this is a way to import the missing data.
Redesign the UI
Add import/export of payout settings
Add ability to import from mediation ticket
Mediator does not need private key
User can sign using own wallet or private key
Validation of input fields
Calculate the tx fee based on inputs
Display of the generated txid & hex so it can be checked
We separate in 4 groups and sort each by days.
1. signed accounts
2. not yet signed account, we use account age
3. not required signing, we use account age
4. no account age and no signing required (altcoins)
buyerSecurityDepositColumn, sellerSecurityDepositColumn) if app width get scaled up larger.
Fix sorting of columns.
Fix display of trade fee (BSQ/BTC)
Use num trades for avatar sorting
txId and tx.getId are the same.
We got some reports where users have no deposit tx displayed in the
trade after spv resync but cannot move the trade to failed trades.
It seems the invalid txId is still stored in the trade but the tx itself
got removed from the wallet after reysnc. We check not that both the tx
and the txId need to be present.
BtcWalletService was changed to allow the api to override tx fee
rates from the sendbsq and sendbtc methods. The api methods will
still be able to use the network fee service and custom tx fee rate
preference, and set / unset the custom tx fee rate preference, but
the change will permit the addition of an optional txFeeRate parameter
to the sendbsq and sendbtc methods (todo). A few other minor changes
(style and removal of never thrown ex spec) were also made to this class.
Two BtcWalletService methods were refactored.
- The redundant (was always true) boolean isSendTx argument was removed
from the completePreparedVoteRevealTx method signature.
- The redundant (was always true) boolean useCustomTxFee was removed
from the completePreparedBsqTx method signature.
- The completePreparedSendBsqTx method was overloaded with a 2nd parameter
(Coin txFeePerVbyte) to allow api to override fee service and custom
tx fee rate when sending BSQ or BTC.
- The completePreparedBsqTx method was overloaded with a 3rd parameter
(Coin txFeePerVbyte) to allow api to override fee service and custom
tx fee rate when sending BSQ or BTC.
The following line was deleted from the completePreparedBsqTx method
because txFeePerVbyte is now an argument:
Coin txFeePerVbyte = useCustomTxFee ? getTxFeeForWithdrawalPerVbyte() : feeService.getTxFeePerVbyte();
This useCustomTxFee value was always true, and redudant here because
getTxFeeForWithdrawalPerVbyte() returns feeService.getTxFeePerVbyte()
or the custom fee rate preference. i.e.,
Coin txFeePerVbyte = useCustomTxFee ? getTxFeeForWithdrawalPerVbyte() : feeService.getTxFeePerVbyte();
is equivalent to
Coin txFeePerVbyte = getTxFeeForWithdrawalPerVbyte();
LockupTxService, UnlockTxService, BsqSendView, and BsqTransferService
were adjusted to this BtcWalletService refactoring.
Outlier data filter used for the Market Offer Book chart, now accounts
for the switching display position of Buy, Sell data depending on
currency type (Crypto or Fiat).
The api is going to need this method, so it was moved from desktop to core.
- Moved the method from WithdrawalView to WalletService.
- Removed an unused initilizer in WithdrawalView.
We check if the txIds of the inputs matches our maker fee tx and taker fee tx and if the depositTxAddress we
use for the confidence lookup is use as an output address.
This prevents that past txs which have the our depositTxAddress as input or output (deposit or payout txs) could
be interpreted as our deposit tx. This happened because if a bug which caused re-use of the Multisig address
entries and if both traders use the same key for multiple trades the depositTxAddress would be the same.
We fix that bug as well but we also need to avoid that past already used addresses might be taken again
(the Multisig flag got reverted to available in the address entry).
- Add check to swapTradeEntryToAvailableEntry to not swap MULTI_SIG entries.
- Remove swap for MULTI_SIG entries at resetAddressEntriesForPendingTrade
- Add check to swapToAvailable to not swap MULTI_SIG entries.
- Remove swaps for MULTI_SIG entries
- Add setCoinLockedInMultiSigAddressEntry method
- Make coinLockedInMultiSig final and remove setter but use it in constructor.
- Rename getCoinLockedInMultiSig to getCoinLockedInMultiSigAsCoin
We use an immutable list when operating on AddressEntry so changes on the
object would not be reflected in the list.
The only mutable field (beside non critical cache fields) is the keyPair.
Might be good to refactor that as well at some point.
- Add setCoinLockedInMultiSigAddressEntrymethods
- Apply API changes:
-- resetCoinLockedInMultiSigAddressEntry
-- setCoinLockedInMultiSigAddressEntry
-- renamed methods
Widen payment account dropdown in create & edit offer screens
Sort payment account dropdown by name in create & edit offer screens
Sort account listview by name in manage fiat accounts screen
Sort account listview by name in manage altcoin accounts screen
Bug fix: do not adjust BTC amount in edit offer screen
There was a bug where editing an existing offer could have its payment
account changed to one with more restrictive limits and the offer
would still be allowed (although not take-able).
It should not be allowed to be saved in this case. This change takes
proper heed of the "allowAmountUpdate" flag which is false for offer
edits. e.g. edit an F2F buy for 0.25, change to Zelle unsigned, the
offer will prevent saving.
* Formatting changes to chart lines and axes.
* Removed middle chart as it displays no
new info.
* Function getMonthTickLabelFormatter rounds the
tick label display to the nearest month.
Only used for chart1.
* New variable chart1XBounds to keep track of
chart1 X-axis limits, as autoRanging set false.
and do not read or write persisted data.
We had recently a case where a user downgraded from 1.4.2 to 1.3.9 and
this caused failed trades and the wallet funds have been missing due to
some complexities of the wallet wegwit upgrade. The fund could be recovered
but it took quite some effort.
As downgrade is never tested and can lead to all kind of weird bugs we
should prevent that users accidentally can do it.
If there is valid reason to downgrade they can remove the version file.
We relied on the shutdwon routine to be called reliably but it seems that is not the case as some bug reports show.
So we call requestPersistence at every write access of the trade object
We saw that some seed nodes have 2 filters after filter update.
This should not be the case as the remove is broadcast before the
add but seems there is some issue in the P2P storage which does
not cover that correctly.
By adding a 5 sec delay between the remove and add we mitigate
that issue, though should be fixes in the P2P layer but that
will be a more complex and larger effort.
Showing 'x' days until limits lifted (signed, pending)
Showing clock icon (signed, pending)
Showing outlined check icon (aging accounts)
Showing account age (unsigned or aging)
Changed column name from 'Signed since' to 'Account info'
Fixed bug when switching between altcoins and fiat order books
the account info column was being added back to the table in
the wrong position.
* Both axes use autoRange, which results in better
rounded values for the tick mark labels numbers.
* Filter-out data outside the factor limits.
* New constant chartDataFactor for factor limits.
* Formatted tick label currency numbers:
- Fiat: display with grouping separators
- Cryptos: remove trailing zeros in fractional parts
* Add CSS class axisy for y-axis formatting.
Correct wording of transaction confirmation popup to use 'mining fee'
instead of 'transaction fee' to make it consistent with wording of
the BTC confirmation popup.
* Both axes use autoRange, which results in better
rounded values for the tick mark labels numbers.
* Filter-out data outside the factor limits.
* New constant chartDataFactor for factor limits.
* Formatted tick label currency numbers:
- Fiat: display with grouping separators
- Cryptos: remove trailing zeros in fractional parts
* Add CSS class axisy for y-axis formatting.
Adds a check that chain height is within 3 blocks of the reported
height from bitcoin peers -> if not the user cannot take an offer
or have an existing offer taken. It shows a message informing the
user that Bisq is not currently synced, advising them to do an
SPV resync if necessary.
Additionally under Settings/Network a field has been added
to show the chain height of Bisq vs the Peer group.
Added after discussion with chimp1984:
- Correct initialization of chainHeight property
- Rename "Latest BTC block height" display field for clarity
- Enforce chain sync rule for Take Offer scenario
- Enforce chain synch rule for Check offer availability scenario
- change method name to be clearer
The y-axis tick mark labels for crypto (non-fiat)
currencies have a large number of trailing zeroes.
This commit removes the last 3 zeroes from the display.
New method addTickMarkLabelCssClass to grab the
axis tick label and add a CSS class to it.
Signed-off-by: Deus Max <deusmax@gmx.com>
Acked-by: Deus Max <deusmax@gmx.com>
We have a bug in removing a proposal which is not trivial to fix
(p2p network layer). Until that bug is fixed
it is better to not show the remove button as it
confused users and a removed proposal will reappear with a
high probability at the vote phase.
In Settings/General Preferences the Bitcoin Explorer and Bisq Explorer may
now be user defined in addition to the hard coded block explorer choices.
This implementation takes advantage of the existing Protobuf implementation
that stores a BlockExplorer Name/UrlTx/UrlAddress for BTC and for BSQ.
A new popup dialog is implemented which allows editing of the explorer
details (name, txUrl, and addressUrl). Any of the system-defined
explorer details may be selected into the edit fields thus allowing
them to be used as templates, customized or an entirely new explorer to
be used.
If the user switches choice from a customized back to a pre-defined
explorer then the customized settings are gone; this is because the
Protobuf storage only allows saving one selection.
Fixes#4371Closes#4634
A service address can be filtered out using the admin key. This would
be useful if a federated server failed, it could be filtered out so
that the auto-confirmation operates with the remaining services. If
all federated service addresses were filtered out the user would have to
either confirm manually or use their own explorer service.
Provide specific formats for each trade chart interval period, for added
precision and flexibility in formatting the X-axis. Covers suggestion in
Bisq PR#4715 for more compact date formats.
Display the trading account group on edit offer screen which allows
the market and payment method to be chosen.
When applying the edits to the new offer payload, merge in appropriate
fields that describe the market & payment method:
- base and counter currency codes
- payment method and account
- country code, accepted country codes
- bankid and accepted bankIds
Fixes#4720
Clean up date axes style for easy reading. Made date labels shorter,
with clear visual correspondance to relevant axes tick mark.
Tick marks with labels are now larger than those without.
Signed-off-by: Deus Max <deusmax@gmx.com>
Scope of this refactoring is small; more can be done, but the short
term goal is to share trade util logic with core api.
- Removed unused method getCurrencyCode()
- Made minor style changes
- Removed duplicated code block
Shorten "synchronized" to "synced"
Move Bitcoin network peer count to right with Bisq network peer count
Moved "Synchronizing DAO" to center for clarity/balance.
Before we use a thread in readFromResources and readAllPersisted. To avoid that client code need to deal with
threading we moved that to the PersistenceManager and changed the API accordingly so it will not return the persisted object but calls a consumer once it is completed with reading.
These refactoring changes are for reducing existing and potential
duplication coming with the addition of new trading protocol support
in the gRPC API. Some minor styling and logic simplification changes
are also include.
- Convert OfferUtil to injected singleton, and move various offer related
utility methods into it.
- Delete both MakerFeeProvider classes, which were wrappers around the same
static old OfferUtil method.
- Inject OfferUtil into CreateOfferDataModel, CreateOfferViewModel,
TakeOfferDataModel, TakeOfferViewModel, MutableOfferDataModel,
MutableOfferViewModel, OfferDataModel, EditOfferDataModel,
EditOfferViewModel
- Refactor TakeOfferViewModel
Use OfferUtil, remove unused fields & methods.
Made minor logic simplification, style and formatting changes.
- MutableOfferDataModel
Made minor logic simplification, style and formatting changes.
- MutableOfferView uses new paymentAccount.isHalCashAccount().
- MutableOfferViewModel
Refactored to use new VolumeUtil, CoinUtil, OfferUtil.
Removed unused fields & accessors.
Made minor style change.
- Refactored OfferDataModel to use new OfferUtil
- Refactor CreateOfferService
Inject and use OfferUtil
Move some utility methods to OfferUtil
Remove unused fields
- Offer
Refactored to use new VolumeUtil for volume calculations.
Made stateProperty and errorMessageProperty fields private.
- PaymentAccount
Moved isHalCashAccount type check to this class.
Moved getTradeCurrency logic to this class.
- Contract, radeStatistics2, TradeStatistics3
Refactored to use new VolumeUtil for volume calculations.
- Trade
Refactored to use new VolumeUtil for volume calculations.
Made minor logic simplification, style and formatting changes.
- CoinUtil
Moved some coin utility methods into this class
- CoinUtilTest
Moved (coin related) tests from CoinCryptoUtilsTest and OfferUtilTest
into CoinUtilTest, and deleted OfferUtilTest, CoinCryptoUtilsTest.
- Adjust create and edit offer tests to model refactoring
Fixes#4623
URLs in Javafx label controls are not clickable, so separate them out to
one or more clickable Hyperlinks displayed at the footer of the popup.
The approach taken for this is to embed the tag `[HYPERLINK:]` in the
message around a link that you want to be handled this way. The links
can be anywhere within the popup message, in the same order that they
will be displayed. Using the tag has the advantage of being optional,
and does not require new code to be written for each individual popup.
Refactor to be more flexible; allowing inline hyperlinks
Codacy nits.
This would fail once we update trade protocol version when we release segwit. So this fixes that as it only checks if the version is not the old version (1) where refund agents have not been part of the system.
Also checks for legacy arbitrator that it only can be used for version 1 cases. Not tested and not assumed that this code will be executed as old arbitrators would use the old app in case they need to still work on a old case.
Add shutdown method to TradeStatisticsConverter and call it via TradeStatisticsManager. Now as we have a reference to TradeStatisticsConverter in we don't need the hack anymore in applyInjector.
Set log level for com.neemre.btcdcli4j.core.client.ClientConfigurator to error as there is an expected warn log because of the outdated version.
We let seller publish trade stats to avoid those issues with duplicated entries as trade date is different.
We could fix that to use the same trade date, but it seems to be not needed that both traders are publishing and the
risk if a trade stat does not get successfully published does not cause real problems.
There is guarantee anyway that the data is broadcast even if both do it.
In case we still want to do it from both sides we need to use the sellers trade date which is exchanged early in the trade
protocol but yet not further used beside for account age check.
Not sure how to add it to gradle so its set at normal compilation as well...
User get confused by the warning as it sounds somehow alerting.
`WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.google.inject.internal.cglib.core.$ReflectUtils$1 (file:/Users/dev/.gradle/caches/modules-2/files-2.1/com.google.inject/guice/4.2.2/6dacbe18e5eaa7f6c9c36db33b42e7985e94ce77/guice-4.2.2.jar) to method java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain)
WARNING: Please consider reporting this to the maintainers of com.google.inject.internal.cglib.core.$ReflectUtils$1
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release`
Rename:
LOW to NETWORK
MID to PRIVATE_LOW_PRIO
HIGH to PRIVATE
Change delay of MID/PRIVATE_LOW_PRIO from 30 min to 2 hours (we had different datastores before using it, now its only real low prio stores)
Add comment to each enum
Make initializePersistenceManager in StorageService abstract to enforce in concrete class to define priority.
Change priorities for future renaming to a different meaning. instead of priority we want to describe the category: private data, public data,.... will come in next commit
Since this is a legal agreement, the goal is to limit the liability of
the facilitators of the service, not to explain how we calculate the
price indicies - users can find that information on the "about" page.
Also updates URL for Dispute Resolution to the new wiki article.
Fixes#4571
Add info to tooltip and to offer window
Add center css to actions column. It looks weird that title is left aligned and button is centered.
only "last-column", "avatar-column" worked, making an new style e.g. center-column did not succeed... css is not my friend....
Shorten "Time since signing" to "Signed since" header to avoid truncation
We keep the TradeProtocol now in TradeManager in a hashmap.
As TradeProtocol constructors get called now earlier we need to add an onInitialized method which signals that the TradeProtocol is ready.
The processModel needs to get set the transient fields after construction.