mirror of
https://github.com/bisq-network/bisq.git
synced 2025-02-22 06:41:41 +01:00
Merge branch 'master' into rc_v1.0.0
# Conflicts: # common/src/main/proto/pb.proto # core/src/main/java/bisq/core/dao/governance/blindvote/storage/BlindVotePayload.java
This commit is contained in:
commit
68436f5f85
73 changed files with 763 additions and 403 deletions
|
@ -271,7 +271,7 @@ configure(project(':desktop')) {
|
|||
apply plugin: 'witness'
|
||||
apply from: '../gradle/witness/gradle-witness.gradle'
|
||||
|
||||
version = '0.9.7-SNAPSHOT'
|
||||
version = '0.9.8-SNAPSHOT'
|
||||
|
||||
mainClassName = 'bisq.desktop.app.BisqAppMain'
|
||||
|
||||
|
|
|
@ -27,7 +27,7 @@ public class Version {
|
|||
// VERSION = 0.5.0 introduces proto buffer for the P2P network and local DB and is a not backward compatible update
|
||||
// Therefore all sub versions start again with 1
|
||||
// We use semantic versioning with major, minor and patch
|
||||
public static final String VERSION = "0.9.7";
|
||||
public static final String VERSION = "0.9.8";
|
||||
|
||||
public static int getMajorVersion(String version) {
|
||||
return getSubVersion(version, 0);
|
||||
|
|
|
@ -162,16 +162,21 @@ public class FileManager<T extends PersistableEnvelope> {
|
|||
}
|
||||
}
|
||||
|
||||
public synchronized void removeAndBackupFile(String fileName) throws IOException {
|
||||
File corruptedBackupDir = new File(Paths.get(dir.getAbsolutePath(), "backup_of_corrupted_data").toString());
|
||||
public static void removeAndBackupFile(File dbDir, File storageFile, String fileName, String backupFolderName)
|
||||
throws IOException {
|
||||
File corruptedBackupDir = new File(Paths.get(dbDir.getAbsolutePath(), backupFolderName).toString());
|
||||
if (!corruptedBackupDir.exists())
|
||||
if (!corruptedBackupDir.mkdir())
|
||||
log.warn("make dir failed");
|
||||
|
||||
File corruptedFile = new File(Paths.get(dir.getAbsolutePath(), "backup_of_corrupted_data", fileName).toString());
|
||||
File corruptedFile = new File(Paths.get(dbDir.getAbsolutePath(), backupFolderName, fileName).toString());
|
||||
FileUtil.renameFile(storageFile, corruptedFile);
|
||||
}
|
||||
|
||||
public synchronized void removeAndBackupFile(String fileName) throws IOException {
|
||||
removeAndBackupFile(dir, storageFile, fileName, "backup_of_corrupted_data");
|
||||
}
|
||||
|
||||
public synchronized void backupFile(String fileName, int numMaxBackupFiles) {
|
||||
FileUtil.rollingBackup(dir, fileName, numMaxBackupFiles);
|
||||
}
|
||||
|
|
|
@ -79,6 +79,13 @@ public class JsonFileManager {
|
|||
printWriter = new PrintWriter(tempFile);
|
||||
printWriter.println(json);
|
||||
|
||||
// This close call and comment is borrowed from FileManager. Not 100% sure it that is really needed but
|
||||
// seems that had fixed in the past and we got reported issues on Windows so that fix might be still
|
||||
// required.
|
||||
// Close resources before replacing file with temp file because otherwise it causes problems on windows
|
||||
// when rename temp file
|
||||
printWriter.close();
|
||||
|
||||
FileUtil.renameFile(tempFile, jsonFile);
|
||||
} catch (Throwable t) {
|
||||
log.error("storageFile " + jsonFile.toString());
|
||||
|
|
|
@ -528,6 +528,7 @@ message Filter {
|
|||
bool prevent_public_btc_network = 12;
|
||||
repeated string btc_nodes = 13;
|
||||
bool disable_dao = 14;
|
||||
string disable_dao_below_version = 15;
|
||||
}
|
||||
|
||||
// not used anymore from v0.6 on. But leave it for receiving TradeStatistics objects from older
|
||||
|
|
|
@ -68,6 +68,8 @@ public class BitcoinModule extends AppModule {
|
|||
RegTestHost.HOST = regTestHost;
|
||||
if (Arrays.asList("localhost", "127.0.0.1").contains(regTestHost)) {
|
||||
bind(RegTestHost.class).toInstance(RegTestHost.LOCALHOST);
|
||||
} else if ("none".equals(regTestHost)) {
|
||||
bind(RegTestHost.class).toInstance(RegTestHost.NONE);
|
||||
} else {
|
||||
bind(RegTestHost.class).toInstance(RegTestHost.REMOTE_HOST);
|
||||
}
|
||||
|
|
|
@ -41,7 +41,7 @@ public class TxBroadcastTimeoutException extends TxBroadcastException {
|
|||
*/
|
||||
public TxBroadcastTimeoutException(Transaction localTx, int delay, Wallet wallet) {
|
||||
super("The transaction was not broadcasted in " + delay +
|
||||
"seconds. txId=" + localTx.getHashAsString());
|
||||
" seconds. txId=" + localTx.getHashAsString());
|
||||
this.localTx = localTx;
|
||||
this.delay = delay;
|
||||
this.wallet = wallet;
|
||||
|
|
|
@ -72,7 +72,12 @@ public class TxBroadcaster {
|
|||
void onFailure(TxBroadcastException exception);
|
||||
}
|
||||
|
||||
private static final int DEFAULT_BROADCAST_TIMEOUT = 30;
|
||||
// Currently there is a bug in BitcoinJ causing the timeout at all BSQ transactions.
|
||||
// It is because BitcoinJ does not handle confidence object correctly in case as tx got altered after the
|
||||
// Wallet.complete() method is called which is the case for all BSQ txs. We will work on a fix for that but that
|
||||
// will take more time. In the meantime we reduce the timeout to 5 seconds to avoid that the trade protocol runs
|
||||
// into a timeout when using BSQ for trade fee.
|
||||
private static final int DEFAULT_BROADCAST_TIMEOUT = 5;
|
||||
private static Map<String, Timer> broadcastTimerMap = new HashMap<>();
|
||||
|
||||
public static void broadcastTx(Wallet wallet, PeerGroup peerGroup, Transaction localTx, Callback callback) {
|
||||
|
|
|
@ -21,10 +21,16 @@ import bisq.core.dao.exceptions.DaoDisabledException;
|
|||
import bisq.core.filter.Filter;
|
||||
import bisq.core.filter.FilterManager;
|
||||
|
||||
import bisq.common.app.Version;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
@Slf4j
|
||||
public class DaoKillSwitch implements DaoSetupService {
|
||||
private static DaoKillSwitch INSTANCE;
|
||||
private final FilterManager filterManager;
|
||||
|
@ -49,8 +55,19 @@ public class DaoKillSwitch implements DaoSetupService {
|
|||
applyFilter(filterManager.getFilter());
|
||||
}
|
||||
|
||||
private void applyFilter(Filter filter) {
|
||||
daoDisabled = filter != null && filter.isDisableDao();
|
||||
private void applyFilter(@Nullable Filter filter) {
|
||||
if (filter == null) {
|
||||
daoDisabled = false;
|
||||
return;
|
||||
}
|
||||
|
||||
boolean requireUpdateToNewVersion = false;
|
||||
String disableDaoBelowVersion = filter.getDisableDaoBelowVersion();
|
||||
if (disableDaoBelowVersion != null && !disableDaoBelowVersion.isEmpty()) {
|
||||
requireUpdateToNewVersion = Version.isNewVersion(disableDaoBelowVersion);
|
||||
}
|
||||
|
||||
daoDisabled = requireUpdateToNewVersion || filter.isDisableDao();
|
||||
}
|
||||
|
||||
public static void assertDaoIsNotDisabled() {
|
||||
|
|
|
@ -95,8 +95,8 @@ public class BlindVoteConsensus {
|
|||
return Encryption.encrypt(bytes, secretKey);
|
||||
}
|
||||
|
||||
public static byte[] getHashOfEncryptedProposalList(byte[] encryptedProposalList) {
|
||||
return Hash.getSha256Ripemd160hash(encryptedProposalList);
|
||||
public static byte[] getHashOfEncryptedVotes(byte[] encryptedVotes) {
|
||||
return Hash.getSha256Ripemd160hash(encryptedVotes);
|
||||
}
|
||||
|
||||
public static byte[] getOpReturnData(byte[] hash) throws IOException {
|
||||
|
|
|
@ -21,8 +21,10 @@ import bisq.core.dao.DaoOptionKeys;
|
|||
import bisq.core.dao.DaoSetupService;
|
||||
import bisq.core.dao.governance.blindvote.storage.BlindVotePayload;
|
||||
import bisq.core.dao.governance.blindvote.storage.BlindVoteStorageService;
|
||||
import bisq.core.dao.governance.period.PeriodService;
|
||||
import bisq.core.dao.state.DaoStateListener;
|
||||
import bisq.core.dao.state.DaoStateService;
|
||||
import bisq.core.dao.state.model.governance.DaoPhase;
|
||||
|
||||
import bisq.network.p2p.P2PService;
|
||||
import bisq.network.p2p.storage.payload.PersistableNetworkPayload;
|
||||
|
@ -48,6 +50,8 @@ import lombok.extern.slf4j.Slf4j;
|
|||
public class BlindVoteListService implements AppendOnlyDataStoreListener, DaoStateListener, DaoSetupService {
|
||||
private final DaoStateService daoStateService;
|
||||
private final P2PService p2PService;
|
||||
private final PeriodService periodService;
|
||||
private final BlindVoteStorageService blindVoteStorageService;
|
||||
private final BlindVoteValidator blindVoteValidator;
|
||||
@Getter
|
||||
private final ObservableList<BlindVotePayload> blindVotePayloads = FXCollections.observableArrayList();
|
||||
|
@ -60,12 +64,15 @@ public class BlindVoteListService implements AppendOnlyDataStoreListener, DaoSta
|
|||
@Inject
|
||||
public BlindVoteListService(DaoStateService daoStateService,
|
||||
P2PService p2PService,
|
||||
PeriodService periodService,
|
||||
BlindVoteStorageService blindVoteStorageService,
|
||||
AppendOnlyDataStoreService appendOnlyDataStoreService,
|
||||
BlindVoteValidator blindVoteValidator,
|
||||
@Named(DaoOptionKeys.DAO_ACTIVATED) boolean daoActivated) {
|
||||
this.daoStateService = daoStateService;
|
||||
this.p2PService = p2PService;
|
||||
this.periodService = periodService;
|
||||
this.blindVoteStorageService = blindVoteStorageService;
|
||||
this.blindVoteValidator = blindVoteValidator;
|
||||
|
||||
if (daoActivated)
|
||||
|
@ -80,7 +87,6 @@ public class BlindVoteListService implements AppendOnlyDataStoreListener, DaoSta
|
|||
@Override
|
||||
public void addListeners() {
|
||||
daoStateService.addDaoStateListener(this);
|
||||
p2PService.getP2PDataStorage().addAppendOnlyDataStoreListener(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -93,9 +99,18 @@ public class BlindVoteListService implements AppendOnlyDataStoreListener, DaoSta
|
|||
// DaoStateListener
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@Override
|
||||
public void onNewBlockHeight(int blockHeight) {
|
||||
// We only add blindVotes to blindVoteStorageService if we are not in the vote reveal phase.
|
||||
blindVoteStorageService.setNotInVoteRevealPhase(notInVoteRevealPhase(blockHeight));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onParseBlockChainComplete() {
|
||||
fillListFromAppendOnlyDataStore();
|
||||
|
||||
// We set the listener after parsing is complete to be sure we have a consistent state for the phase check.
|
||||
p2PService.getP2PDataStorage().addAppendOnlyDataStoreListener(this);
|
||||
}
|
||||
|
||||
|
||||
|
@ -133,7 +148,7 @@ public class BlindVoteListService implements AppendOnlyDataStoreListener, DaoSta
|
|||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
private void fillListFromAppendOnlyDataStore() {
|
||||
p2PService.getP2PDataStorage().getAppendOnlyDataStoreMap().values().forEach(e -> onAppendOnlyDataAdded(e, false));
|
||||
blindVoteStorageService.getMap().values().forEach(e -> onAppendOnlyDataAdded(e, false));
|
||||
}
|
||||
|
||||
private void onAppendOnlyDataAdded(PersistableNetworkPayload persistableNetworkPayload, boolean fromBroadcastMessage) {
|
||||
|
@ -142,18 +157,30 @@ public class BlindVoteListService implements AppendOnlyDataStoreListener, DaoSta
|
|||
if (!blindVotePayloads.contains(blindVotePayload)) {
|
||||
BlindVote blindVote = blindVotePayload.getBlindVote();
|
||||
String txId = blindVote.getTxId();
|
||||
// We don't validate as we might receive blindVotes from other cycles or phases at startup.
|
||||
// Beside that we might receive payloads we requested at the vote result phase in case we missed some
|
||||
// payloads. We prefer here resilience over protection against late publishing attacks.
|
||||
|
||||
if (blindVoteValidator.areDataFieldsValid(blindVote)) {
|
||||
if (fromBroadcastMessage) {
|
||||
log.info("We received a blindVotePayload. blindVoteTxId={}", txId);
|
||||
if (notInVoteRevealPhase(daoStateService.getChainHeight())) {
|
||||
// We received the payload outside the vote reveal phase and add the payload.
|
||||
// If we would accept it during the vote reveal phase we would be vulnerable to a late
|
||||
// publishing attack where the attacker tries to pollute the data view of the voters and
|
||||
// render the whole voting cycle invalid if the majority hash is not at least 80% of the
|
||||
// vote stake.
|
||||
blindVotePayloads.add(blindVotePayload);
|
||||
}
|
||||
} else {
|
||||
// In case we received the data from the seed node at startup we cannot apply the phase check as
|
||||
// even in the vote reveal phase we want to receive missed blind votes.
|
||||
blindVotePayloads.add(blindVotePayload);
|
||||
}
|
||||
blindVotePayloads.add(blindVotePayload);
|
||||
} else {
|
||||
log.warn("We received an invalid blindVotePayload. blindVoteTxId={}", txId);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private boolean notInVoteRevealPhase(int blockHeight) {
|
||||
return !periodService.isInPhase(blockHeight, DaoPhase.Phase.VOTE_REVEAL);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -136,7 +136,7 @@ public class MyBlindVoteListService implements PersistedDataHost, DaoStateListen
|
|||
this.myVoteListService = myVoteListService;
|
||||
this.myProposalListService = myProposalListService;
|
||||
|
||||
numConnectedPeersListener = (observable, oldValue, newValue) -> rePublishMyBlindVoteOnceWellConnected();
|
||||
numConnectedPeersListener = (observable, oldValue, newValue) -> maybeRePublishMyBlindVote();
|
||||
}
|
||||
|
||||
|
||||
|
@ -177,7 +177,7 @@ public class MyBlindVoteListService implements PersistedDataHost, DaoStateListen
|
|||
|
||||
@Override
|
||||
public void onParseBlockChainComplete() {
|
||||
rePublishMyBlindVoteOnceWellConnected();
|
||||
maybeRePublishMyBlindVote();
|
||||
}
|
||||
|
||||
|
||||
|
@ -263,7 +263,7 @@ public class MyBlindVoteListService implements PersistedDataHost, DaoStateListen
|
|||
private byte[] getOpReturnData(byte[] encryptedVotes) throws IOException {
|
||||
// We cannot use hash of whole blindVote data because we create the merit signature with the blindVoteTxId
|
||||
// So we use the encryptedVotes for the hash only.
|
||||
final byte[] hash = BlindVoteConsensus.getHashOfEncryptedProposalList(encryptedVotes);
|
||||
final byte[] hash = BlindVoteConsensus.getHashOfEncryptedVotes(encryptedVotes);
|
||||
log.info("Sha256Ripemd160 hash of encryptedVotes: " + Utilities.bytesAsHexString(hash));
|
||||
return BlindVoteConsensus.getOpReturnData(hash);
|
||||
}
|
||||
|
@ -353,23 +353,31 @@ public class MyBlindVoteListService implements PersistedDataHost, DaoStateListen
|
|||
return bsqWalletService.signTx(txWithBtcFee);
|
||||
}
|
||||
|
||||
private void rePublishMyBlindVoteOnceWellConnected() {
|
||||
// We republish at each startup at any block during the cycle. We filter anyway for valid blind votes
|
||||
// of that cycle so it is 1 blind vote getting rebroadcast at each startup to my neighbors.
|
||||
// Republishing only will have effect if the payload creation date is < 5 hours as other nodes would not
|
||||
// accept payloads which are too old or are in future.
|
||||
// Only payloads received from seed nodes would ignore that date check.
|
||||
int minPeers = BisqEnvironment.getBaseCurrencyNetwork().isMainnet() ? 4 : 1;
|
||||
if ((p2PService.getNumConnectedPeers().get() >= minPeers && p2PService.isBootstrapped()) ||
|
||||
BisqEnvironment.getBaseCurrencyNetwork().isRegtest()) {
|
||||
myBlindVoteList.stream()
|
||||
.filter(blindVote -> periodService.isTxInPhaseAndCycle(blindVote.getTxId(),
|
||||
DaoPhase.Phase.BLIND_VOTE,
|
||||
periodService.getChainHeight()))
|
||||
.forEach(blindVote -> addToP2PNetwork(blindVote, null));
|
||||
private void maybeRePublishMyBlindVote() {
|
||||
// We do not republish during vote reveal phase as peer would reject blindVote data to protect against
|
||||
// late publishing attacks.
|
||||
// This attack is only relevant during the vote reveal phase as there it could cause damage by disturbing the
|
||||
// data view of the blind votes of the voter for creating the majority hash.
|
||||
// To republish after the vote reveal phase still makes sense to reduce risk that some nodes have not received
|
||||
// it and would need to request the data then in the vote result phase.
|
||||
if (!periodService.isInPhase(daoStateService.getChainHeight(), DaoPhase.Phase.VOTE_REVEAL)) {
|
||||
// We republish at each startup at any block during the cycle. We filter anyway for valid blind votes
|
||||
// of that cycle so it is 1 blind vote getting rebroadcast at each startup to my neighbors.
|
||||
// Republishing only will have effect if the payload creation date is < 5 hours as other nodes would not
|
||||
// accept payloads which are too old or are in future.
|
||||
// Only payloads received from seed nodes would ignore that date check.
|
||||
int minPeers = BisqEnvironment.getBaseCurrencyNetwork().isMainnet() ? 4 : 1;
|
||||
if ((p2PService.getNumConnectedPeers().get() >= minPeers && p2PService.isBootstrapped()) ||
|
||||
BisqEnvironment.getBaseCurrencyNetwork().isRegtest()) {
|
||||
myBlindVoteList.stream()
|
||||
.filter(blindVote -> periodService.isTxInPhaseAndCycle(blindVote.getTxId(),
|
||||
DaoPhase.Phase.BLIND_VOTE,
|
||||
periodService.getChainHeight()))
|
||||
.forEach(blindVote -> addToP2PNetwork(blindVote, null));
|
||||
|
||||
// We delay removal of listener as we call that inside listener itself.
|
||||
UserThread.execute(() -> p2PService.getNumConnectedPeers().removeListener(numConnectedPeersListener));
|
||||
// We delay removal of listener as we call that inside listener itself.
|
||||
UserThread.execute(() -> p2PService.getNumConnectedPeers().removeListener(numConnectedPeersListener));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -52,7 +52,6 @@ import javax.annotation.concurrent.Immutable;
|
|||
@EqualsAndHashCode
|
||||
public final class BlindVotePayload implements PersistableNetworkPayload, PersistableEnvelope,
|
||||
CapabilityRequiringPayload, ConsensusCritical {
|
||||
private static final long TOLERANCE = TimeUnit.HOURS.toMillis(5); // +/- 5 hours
|
||||
|
||||
private final BlindVote blindVote;
|
||||
protected final byte[] hash; // 20 byte
|
||||
|
|
|
@ -31,12 +31,18 @@ import java.io.File;
|
|||
|
||||
import java.util.Map;
|
||||
|
||||
import lombok.Setter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
@Slf4j
|
||||
public class BlindVoteStorageService extends MapStoreService<BlindVoteStore, PersistableNetworkPayload> {
|
||||
private static final String FILE_NAME = "BlindVoteStore";
|
||||
|
||||
// At startup it is true, so the data we receive from the seed node are not checked against the phase as we have
|
||||
// not started up the DAO domain at that moment.
|
||||
@Setter
|
||||
private boolean notInVoteRevealPhase = true;
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Constructor
|
||||
|
@ -64,7 +70,7 @@ public class BlindVoteStorageService extends MapStoreService<BlindVoteStore, Per
|
|||
|
||||
@Override
|
||||
public boolean canHandle(PersistableNetworkPayload payload) {
|
||||
return payload instanceof BlindVotePayload;
|
||||
return payload instanceof BlindVotePayload && notInVoteRevealPhase;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -387,7 +387,7 @@ public class VoteResultService implements DaoStateListener, DaoSetupService {
|
|||
if (!entry.getValue().isPresent()) {
|
||||
log.warn("We found a local vote but don't have that vote in the data from the " +
|
||||
"blind vote. ballot={}", ballot);
|
||||
} else if (ballot.getVote() != entry.getValue().get()) {
|
||||
} else if (!ballot.getVote().equals(entry.getValue().get())) {
|
||||
log.warn("We found a local vote but the vote from the " +
|
||||
"blind vote does not match. ballot={}, vote from blindVote data={}",
|
||||
ballot, entry.getValue().get());
|
||||
|
|
|
@ -28,7 +28,6 @@ import bisq.core.dao.DaoSetupService;
|
|||
import bisq.core.dao.governance.blindvote.BlindVote;
|
||||
import bisq.core.dao.governance.blindvote.BlindVoteConsensus;
|
||||
import bisq.core.dao.governance.blindvote.BlindVoteListService;
|
||||
import bisq.core.dao.governance.blindvote.storage.BlindVotePayload;
|
||||
import bisq.core.dao.governance.myvote.MyVote;
|
||||
import bisq.core.dao.governance.myvote.MyVoteListService;
|
||||
import bisq.core.dao.governance.period.PeriodService;
|
||||
|
@ -41,7 +40,6 @@ import bisq.core.dao.state.model.governance.DaoPhase;
|
|||
|
||||
import bisq.network.p2p.P2PService;
|
||||
|
||||
import bisq.common.UserThread;
|
||||
import bisq.common.util.Utilities;
|
||||
|
||||
import org.bitcoinj.core.InsufficientMoneyException;
|
||||
|
@ -247,12 +245,6 @@ public class VoteRevealService implements DaoStateListener, DaoSetupService {
|
|||
// We don't want to wait for a successful broadcast to avoid issues if the broadcast succeeds delayed or at
|
||||
// next startup but the tx was actually broadcasted.
|
||||
myVoteListService.applyRevealTxId(myVote, voteRevealTx.getHashAsString());
|
||||
|
||||
if (isInVoteRevealPhase) {
|
||||
// Just for additional resilience we republish our blind votes
|
||||
List<BlindVote> sortedBlindVoteListOfCycle = BlindVoteConsensus.getSortedBlindVoteListOfCycle(blindVoteListService);
|
||||
rePublishBlindVotePayloadList(sortedBlindVoteListOfCycle);
|
||||
}
|
||||
} catch (IOException | WalletException | TransactionVerificationException
|
||||
| InsufficientMoneyException e) {
|
||||
voteRevealExceptions.add(new VoteRevealException("Exception at calling revealVote.",
|
||||
|
@ -285,20 +277,4 @@ public class VoteRevealService implements DaoStateListener, DaoSetupService {
|
|||
Transaction txWithBtcFee = btcWalletService.completePreparedVoteRevealTx(preparedTx, opReturnData);
|
||||
return bsqWalletService.signTx(txWithBtcFee);
|
||||
}
|
||||
|
||||
private void rePublishBlindVotePayloadList(List<BlindVote> blindVoteList) {
|
||||
// If we have 20 blind votes from 20 voters we would have 400 messages sent to their 10 neighbor peers.
|
||||
// Most of the neighbors will already have the data so they will not continue broadcast.
|
||||
// To not flood the network too much we use a long random delay to spread the load over 5 minutes.
|
||||
// As this is only for extra resilience we don't care so much for the case that the user might shut down the
|
||||
// app before we are finished with our delayed broadcast.
|
||||
// We cannot set reBroadcast to false as otherwise it would not have any effect as we have the data already and
|
||||
// broadcast would only be triggered at new data.
|
||||
blindVoteList.stream()
|
||||
.map(BlindVotePayload::new)
|
||||
.forEach(blindVotePayload -> {
|
||||
UserThread.runAfterRandomDelay(() -> p2PService.addPersistableNetworkPayload(blindVotePayload, true),
|
||||
1, 300);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -36,6 +36,7 @@ import bisq.core.dao.state.model.governance.DaoPhase;
|
|||
|
||||
import bisq.network.p2p.NodeAddress;
|
||||
import bisq.network.p2p.network.Connection;
|
||||
import bisq.network.p2p.seed.SeedNodeRepository;
|
||||
|
||||
import bisq.common.UserThread;
|
||||
import bisq.common.crypto.Hash;
|
||||
|
@ -49,6 +50,7 @@ import java.util.LinkedList;
|
|||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.Random;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import java.util.stream.Collectors;
|
||||
|
@ -81,6 +83,7 @@ public class BlindVoteStateMonitoringService implements DaoSetupService, DaoStat
|
|||
private final GenesisTxInfo genesisTxInfo;
|
||||
private final PeriodService periodService;
|
||||
private final BlindVoteListService blindVoteListService;
|
||||
private final Set<String> seedNodeAddresses;
|
||||
|
||||
@Getter
|
||||
private final LinkedList<BlindVoteStateBlock> blindVoteStateBlockChain = new LinkedList<>();
|
||||
|
@ -88,7 +91,9 @@ public class BlindVoteStateMonitoringService implements DaoSetupService, DaoStat
|
|||
private final LinkedList<BlindVoteStateHash> blindVoteStateHashChain = new LinkedList<>();
|
||||
private final List<Listener> listeners = new CopyOnWriteArrayList<>();
|
||||
@Getter
|
||||
private boolean isInConflict;
|
||||
private boolean isInConflictWithNonSeedNode;
|
||||
@Getter
|
||||
private boolean isInConflictWithSeedNode;
|
||||
private boolean parseBlockChainComplete;
|
||||
|
||||
|
||||
|
@ -101,12 +106,16 @@ public class BlindVoteStateMonitoringService implements DaoSetupService, DaoStat
|
|||
BlindVoteStateNetworkService blindVoteStateNetworkService,
|
||||
GenesisTxInfo genesisTxInfo,
|
||||
PeriodService periodService,
|
||||
BlindVoteListService blindVoteListService) {
|
||||
BlindVoteListService blindVoteListService,
|
||||
SeedNodeRepository seedNodeRepository) {
|
||||
this.daoStateService = daoStateService;
|
||||
this.blindVoteStateNetworkService = blindVoteStateNetworkService;
|
||||
this.genesisTxInfo = genesisTxInfo;
|
||||
this.periodService = periodService;
|
||||
this.blindVoteListService = blindVoteListService;
|
||||
seedNodeAddresses = seedNodeRepository.getSeedNodeAddresses().stream()
|
||||
.map(NodeAddress::getFullAddress)
|
||||
.collect(Collectors.toSet());
|
||||
}
|
||||
|
||||
|
||||
|
@ -276,7 +285,8 @@ public class BlindVoteStateMonitoringService implements DaoSetupService, DaoStat
|
|||
|
||||
private boolean processPeersBlindVoteStateHash(BlindVoteStateHash blindVoteStateHash, Optional<NodeAddress> peersNodeAddress, boolean notifyListeners) {
|
||||
AtomicBoolean changed = new AtomicBoolean(false);
|
||||
AtomicBoolean isInConflict = new AtomicBoolean(this.isInConflict);
|
||||
AtomicBoolean inConflictWithNonSeedNode = new AtomicBoolean(this.isInConflictWithNonSeedNode);
|
||||
AtomicBoolean inConflictWithSeedNode = new AtomicBoolean(this.isInConflictWithSeedNode);
|
||||
StringBuilder sb = new StringBuilder();
|
||||
blindVoteStateBlockChain.stream()
|
||||
.filter(e -> e.getHeight() == blindVoteStateHash.getHeight()).findAny()
|
||||
|
@ -286,7 +296,12 @@ public class BlindVoteStateMonitoringService implements DaoSetupService, DaoStat
|
|||
daoStateBlock.putInPeersMap(peersNodeAddressAsString, blindVoteStateHash);
|
||||
if (!daoStateBlock.getMyStateHash().hasEqualHash(blindVoteStateHash)) {
|
||||
daoStateBlock.putInConflictMap(peersNodeAddressAsString, blindVoteStateHash);
|
||||
isInConflict.set(true);
|
||||
if (seedNodeAddresses.contains(peersNodeAddressAsString)) {
|
||||
inConflictWithSeedNode.set(true);
|
||||
} else {
|
||||
inConflictWithNonSeedNode.set(true);
|
||||
}
|
||||
|
||||
sb.append("We received a block hash from peer ")
|
||||
.append(peersNodeAddressAsString)
|
||||
.append(" which conflicts with our block hash.\n")
|
||||
|
@ -298,11 +313,15 @@ public class BlindVoteStateMonitoringService implements DaoSetupService, DaoStat
|
|||
changed.set(true);
|
||||
});
|
||||
|
||||
this.isInConflict = isInConflict.get();
|
||||
this.isInConflictWithNonSeedNode = inConflictWithNonSeedNode.get();
|
||||
this.isInConflictWithSeedNode = inConflictWithSeedNode.get();
|
||||
|
||||
String conflictMsg = sb.toString();
|
||||
if (this.isInConflict && !conflictMsg.isEmpty()) {
|
||||
log.warn(conflictMsg);
|
||||
if (!conflictMsg.isEmpty()) {
|
||||
if (this.isInConflictWithSeedNode)
|
||||
log.warn("Conflict with seed nodes: {}", conflictMsg);
|
||||
else if (this.isInConflictWithNonSeedNode)
|
||||
log.info("Conflict with non-seed nodes: {}", conflictMsg);
|
||||
}
|
||||
|
||||
if (notifyListeners && changed.get()) {
|
||||
|
|
|
@ -33,6 +33,7 @@ import bisq.core.dao.state.model.governance.IssuanceType;
|
|||
|
||||
import bisq.network.p2p.NodeAddress;
|
||||
import bisq.network.p2p.network.Connection;
|
||||
import bisq.network.p2p.seed.SeedNodeRepository;
|
||||
|
||||
import bisq.common.UserThread;
|
||||
import bisq.common.crypto.Hash;
|
||||
|
@ -48,6 +49,7 @@ import java.util.LinkedList;
|
|||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.Random;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import java.util.stream.Collectors;
|
||||
|
@ -83,6 +85,8 @@ public class DaoStateMonitoringService implements DaoSetupService, DaoStateListe
|
|||
private final DaoStateService daoStateService;
|
||||
private final DaoStateNetworkService daoStateNetworkService;
|
||||
private final GenesisTxInfo genesisTxInfo;
|
||||
private final Set<String> seedNodeAddresses;
|
||||
|
||||
|
||||
@Getter
|
||||
private final LinkedList<DaoStateBlock> daoStateBlockChain = new LinkedList<>();
|
||||
|
@ -91,7 +95,9 @@ public class DaoStateMonitoringService implements DaoSetupService, DaoStateListe
|
|||
private final List<Listener> listeners = new CopyOnWriteArrayList<>();
|
||||
private boolean parseBlockChainComplete;
|
||||
@Getter
|
||||
private boolean isInConflict;
|
||||
private boolean isInConflictWithNonSeedNode;
|
||||
@Getter
|
||||
private boolean isInConflictWithSeedNode;
|
||||
@Getter
|
||||
private ObservableList<UtxoMismatch> utxoMismatches = FXCollections.observableArrayList();
|
||||
|
||||
|
@ -103,10 +109,14 @@ public class DaoStateMonitoringService implements DaoSetupService, DaoStateListe
|
|||
@Inject
|
||||
public DaoStateMonitoringService(DaoStateService daoStateService,
|
||||
DaoStateNetworkService daoStateNetworkService,
|
||||
GenesisTxInfo genesisTxInfo) {
|
||||
GenesisTxInfo genesisTxInfo,
|
||||
SeedNodeRepository seedNodeRepository) {
|
||||
this.daoStateService = daoStateService;
|
||||
this.daoStateNetworkService = daoStateNetworkService;
|
||||
this.genesisTxInfo = genesisTxInfo;
|
||||
seedNodeAddresses = seedNodeRepository.getSeedNodeAddresses().stream()
|
||||
.map(NodeAddress::getFullAddress)
|
||||
.collect(Collectors.toSet());
|
||||
}
|
||||
|
||||
|
||||
|
@ -283,7 +293,8 @@ public class DaoStateMonitoringService implements DaoSetupService, DaoStateListe
|
|||
|
||||
private boolean processPeersDaoStateHash(DaoStateHash daoStateHash, Optional<NodeAddress> peersNodeAddress, boolean notifyListeners) {
|
||||
AtomicBoolean changed = new AtomicBoolean(false);
|
||||
AtomicBoolean isInConflict = new AtomicBoolean(this.isInConflict);
|
||||
AtomicBoolean inConflictWithNonSeedNode = new AtomicBoolean(this.isInConflictWithNonSeedNode);
|
||||
AtomicBoolean inConflictWithSeedNode = new AtomicBoolean(this.isInConflictWithSeedNode);
|
||||
StringBuilder sb = new StringBuilder();
|
||||
daoStateBlockChain.stream()
|
||||
.filter(e -> e.getHeight() == daoStateHash.getHeight()).findAny()
|
||||
|
@ -293,7 +304,11 @@ public class DaoStateMonitoringService implements DaoSetupService, DaoStateListe
|
|||
daoStateBlock.putInPeersMap(peersNodeAddressAsString, daoStateHash);
|
||||
if (!daoStateBlock.getMyStateHash().hasEqualHash(daoStateHash)) {
|
||||
daoStateBlock.putInConflictMap(peersNodeAddressAsString, daoStateHash);
|
||||
isInConflict.set(true);
|
||||
if (seedNodeAddresses.contains(peersNodeAddressAsString)) {
|
||||
inConflictWithSeedNode.set(true);
|
||||
} else {
|
||||
inConflictWithNonSeedNode.set(true);
|
||||
}
|
||||
sb.append("We received a block hash from peer ")
|
||||
.append(peersNodeAddressAsString)
|
||||
.append(" which conflicts with our block hash.\n")
|
||||
|
@ -305,13 +320,18 @@ public class DaoStateMonitoringService implements DaoSetupService, DaoStateListe
|
|||
changed.set(true);
|
||||
});
|
||||
|
||||
this.isInConflict = isInConflict.get();
|
||||
this.isInConflictWithNonSeedNode = inConflictWithNonSeedNode.get();
|
||||
this.isInConflictWithSeedNode = inConflictWithSeedNode.get();
|
||||
|
||||
String conflictMsg = sb.toString();
|
||||
if (this.isInConflict && !conflictMsg.isEmpty()) {
|
||||
log.warn(conflictMsg);
|
||||
if (!conflictMsg.isEmpty()) {
|
||||
if (this.isInConflictWithSeedNode)
|
||||
log.warn("Conflict with seed nodes: {}", conflictMsg);
|
||||
else if (this.isInConflictWithNonSeedNode)
|
||||
log.info("Conflict with non-seed nodes: {}", conflictMsg);
|
||||
}
|
||||
|
||||
|
||||
if (notifyListeners && changed.get()) {
|
||||
listeners.forEach(Listener::onChangeAfterBatchProcessing);
|
||||
}
|
||||
|
|
|
@ -36,6 +36,7 @@ import bisq.core.dao.state.model.governance.Proposal;
|
|||
|
||||
import bisq.network.p2p.NodeAddress;
|
||||
import bisq.network.p2p.network.Connection;
|
||||
import bisq.network.p2p.seed.SeedNodeRepository;
|
||||
|
||||
import bisq.common.UserThread;
|
||||
import bisq.common.crypto.Hash;
|
||||
|
@ -49,6 +50,7 @@ import java.util.LinkedList;
|
|||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.Random;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import java.util.stream.Collectors;
|
||||
|
@ -81,6 +83,8 @@ public class ProposalStateMonitoringService implements DaoSetupService, DaoState
|
|||
private final GenesisTxInfo genesisTxInfo;
|
||||
private final PeriodService periodService;
|
||||
private final ProposalService proposalService;
|
||||
private final Set<String> seedNodeAddresses;
|
||||
|
||||
|
||||
@Getter
|
||||
private final LinkedList<ProposalStateBlock> proposalStateBlockChain = new LinkedList<>();
|
||||
|
@ -88,7 +92,9 @@ public class ProposalStateMonitoringService implements DaoSetupService, DaoState
|
|||
private final LinkedList<ProposalStateHash> proposalStateHashChain = new LinkedList<>();
|
||||
private final List<Listener> listeners = new CopyOnWriteArrayList<>();
|
||||
@Getter
|
||||
private boolean isInConflict;
|
||||
private boolean isInConflictWithNonSeedNode;
|
||||
@Getter
|
||||
private boolean isInConflictWithSeedNode;
|
||||
private boolean parseBlockChainComplete;
|
||||
|
||||
|
||||
|
@ -101,12 +107,16 @@ public class ProposalStateMonitoringService implements DaoSetupService, DaoState
|
|||
ProposalStateNetworkService proposalStateNetworkService,
|
||||
GenesisTxInfo genesisTxInfo,
|
||||
PeriodService periodService,
|
||||
ProposalService proposalService) {
|
||||
ProposalService proposalService,
|
||||
SeedNodeRepository seedNodeRepository) {
|
||||
this.daoStateService = daoStateService;
|
||||
this.proposalStateNetworkService = proposalStateNetworkService;
|
||||
this.genesisTxInfo = genesisTxInfo;
|
||||
this.periodService = periodService;
|
||||
this.proposalService = proposalService;
|
||||
seedNodeAddresses = seedNodeRepository.getSeedNodeAddresses().stream()
|
||||
.map(NodeAddress::getFullAddress)
|
||||
.collect(Collectors.toSet());
|
||||
}
|
||||
|
||||
|
||||
|
@ -280,7 +290,8 @@ public class ProposalStateMonitoringService implements DaoSetupService, DaoState
|
|||
|
||||
private boolean processPeersProposalStateHash(ProposalStateHash proposalStateHash, Optional<NodeAddress> peersNodeAddress, boolean notifyListeners) {
|
||||
AtomicBoolean changed = new AtomicBoolean(false);
|
||||
AtomicBoolean isInConflict = new AtomicBoolean(this.isInConflict);
|
||||
AtomicBoolean inConflictWithNonSeedNode = new AtomicBoolean(this.isInConflictWithNonSeedNode);
|
||||
AtomicBoolean inConflictWithSeedNode = new AtomicBoolean(this.isInConflictWithSeedNode);
|
||||
StringBuilder sb = new StringBuilder();
|
||||
proposalStateBlockChain.stream()
|
||||
.filter(e -> e.getHeight() == proposalStateHash.getHeight()).findAny()
|
||||
|
@ -290,7 +301,11 @@ public class ProposalStateMonitoringService implements DaoSetupService, DaoState
|
|||
daoStateBlock.putInPeersMap(peersNodeAddressAsString, proposalStateHash);
|
||||
if (!daoStateBlock.getMyStateHash().hasEqualHash(proposalStateHash)) {
|
||||
daoStateBlock.putInConflictMap(peersNodeAddressAsString, proposalStateHash);
|
||||
isInConflict.set(true);
|
||||
if (seedNodeAddresses.contains(peersNodeAddressAsString)) {
|
||||
inConflictWithSeedNode.set(true);
|
||||
} else {
|
||||
inConflictWithNonSeedNode.set(true);
|
||||
}
|
||||
sb.append("We received a block hash from peer ")
|
||||
.append(peersNodeAddressAsString)
|
||||
.append(" which conflicts with our block hash.\n")
|
||||
|
@ -302,11 +317,15 @@ public class ProposalStateMonitoringService implements DaoSetupService, DaoState
|
|||
changed.set(true);
|
||||
});
|
||||
|
||||
this.isInConflict = isInConflict.get();
|
||||
this.isInConflictWithNonSeedNode = inConflictWithNonSeedNode.get();
|
||||
this.isInConflictWithSeedNode = inConflictWithSeedNode.get();
|
||||
|
||||
String conflictMsg = sb.toString();
|
||||
if (this.isInConflict && !conflictMsg.isEmpty()) {
|
||||
log.warn(conflictMsg);
|
||||
if (!conflictMsg.isEmpty()) {
|
||||
if (this.isInConflictWithSeedNode)
|
||||
log.warn("Conflict with seed nodes: {}", conflictMsg);
|
||||
else if (this.isInConflictWithNonSeedNode)
|
||||
log.info("Conflict with non-seed nodes: {}", conflictMsg);
|
||||
}
|
||||
|
||||
if (notifyListeners && changed.get()) {
|
||||
|
|
|
@ -28,8 +28,6 @@ import bisq.common.proto.persistable.PersistablePayload;
|
|||
|
||||
import io.bisq.generated.protobuffer.PB;
|
||||
|
||||
import java.math.BigInteger;
|
||||
|
||||
import java.util.Objects;
|
||||
import java.util.UUID;
|
||||
|
||||
|
@ -104,8 +102,7 @@ public final class Role implements PersistablePayload, NetworkPayload, BondedAss
|
|||
|
||||
@Override
|
||||
public byte[] getHash() {
|
||||
// We use only the immutable data as input for hash
|
||||
byte[] bytes = BigInteger.valueOf(hashCode()).toByteArray();
|
||||
byte[] bytes = toProtoMessage().toByteArray();
|
||||
return Hash.getSha256Ripemd160hash(bytes);
|
||||
}
|
||||
|
||||
|
|
|
@ -90,6 +90,10 @@ public final class Filter implements ProtectedStoragePayload, ExpirablePayload {
|
|||
// added in v0.9.4
|
||||
private final boolean disableDao;
|
||||
|
||||
// added in v0.9.8
|
||||
@Nullable
|
||||
private final String disableDaoBelowVersion;
|
||||
|
||||
public Filter(List<String> bannedOfferIds,
|
||||
List<String> bannedNodeAddress,
|
||||
List<PaymentAccountFilter> bannedPaymentAccounts,
|
||||
|
@ -100,7 +104,8 @@ public final class Filter implements ProtectedStoragePayload, ExpirablePayload {
|
|||
@Nullable List<String> priceRelayNodes,
|
||||
boolean preventPublicBtcNetwork,
|
||||
@Nullable List<String> btcNodes,
|
||||
boolean disableDao) {
|
||||
boolean disableDao,
|
||||
@Nullable String disableDaoBelowVersion) {
|
||||
this.bannedOfferIds = bannedOfferIds;
|
||||
this.bannedNodeAddress = bannedNodeAddress;
|
||||
this.bannedPaymentAccounts = bannedPaymentAccounts;
|
||||
|
@ -112,6 +117,7 @@ public final class Filter implements ProtectedStoragePayload, ExpirablePayload {
|
|||
this.preventPublicBtcNetwork = preventPublicBtcNetwork;
|
||||
this.btcNodes = btcNodes;
|
||||
this.disableDao = disableDao;
|
||||
this.disableDaoBelowVersion = disableDaoBelowVersion;
|
||||
}
|
||||
|
||||
|
||||
|
@ -131,6 +137,7 @@ public final class Filter implements ProtectedStoragePayload, ExpirablePayload {
|
|||
boolean preventPublicBtcNetwork,
|
||||
@Nullable List<String> btcNodes,
|
||||
boolean disableDao,
|
||||
@Nullable String disableDaoBelowVersion,
|
||||
String signatureAsBase64,
|
||||
byte[] ownerPubKeyBytes,
|
||||
@Nullable Map<String, String> extraDataMap) {
|
||||
|
@ -144,7 +151,8 @@ public final class Filter implements ProtectedStoragePayload, ExpirablePayload {
|
|||
priceRelayNodes,
|
||||
preventPublicBtcNetwork,
|
||||
btcNodes,
|
||||
disableDao);
|
||||
disableDao,
|
||||
disableDaoBelowVersion);
|
||||
this.signatureAsBase64 = signatureAsBase64;
|
||||
this.ownerPubKeyBytes = ownerPubKeyBytes;
|
||||
this.extraDataMap = ExtraDataMapValidator.getValidatedExtraDataMap(extraDataMap);
|
||||
|
@ -174,6 +182,7 @@ public final class Filter implements ProtectedStoragePayload, ExpirablePayload {
|
|||
Optional.ofNullable(seedNodes).ifPresent(builder::addAllSeedNodes);
|
||||
Optional.ofNullable(priceRelayNodes).ifPresent(builder::addAllPriceRelayNodes);
|
||||
Optional.ofNullable(btcNodes).ifPresent(builder::addAllBtcNodes);
|
||||
Optional.ofNullable(disableDaoBelowVersion).ifPresent(builder::setDisableDaoBelowVersion);
|
||||
Optional.ofNullable(extraDataMap).ifPresent(builder::putAllExtraData);
|
||||
|
||||
return PB.StoragePayload.newBuilder().setFilter(builder).build();
|
||||
|
@ -193,6 +202,7 @@ public final class Filter implements ProtectedStoragePayload, ExpirablePayload {
|
|||
proto.getPreventPublicBtcNetwork(),
|
||||
CollectionUtils.isEmpty(proto.getBtcNodesList()) ? null : new ArrayList<>(proto.getBtcNodesList()),
|
||||
proto.getDisableDao(),
|
||||
proto.getDisableDaoBelowVersion().isEmpty() ? null : proto.getDisableDaoBelowVersion(),
|
||||
proto.getSignatureAsBase64(),
|
||||
proto.getOwnerPubKeyBytes().toByteArray(),
|
||||
CollectionUtils.isEmpty(proto.getExtraDataMap()) ? null : proto.getExtraDataMap());
|
||||
|
@ -205,7 +215,7 @@ public final class Filter implements ProtectedStoragePayload, ExpirablePayload {
|
|||
|
||||
@Override
|
||||
public long getTTL() {
|
||||
return TimeUnit.DAYS.toMillis(90);
|
||||
return TimeUnit.DAYS.toMillis(180);
|
||||
}
|
||||
|
||||
public void setSigAndPubKey(String signatureAsBase64, PublicKey ownerPubKey) {
|
||||
|
|
|
@ -771,6 +771,7 @@ funds.tx.unknown=Unknown reason: {0}
|
|||
funds.tx.noFundsFromDispute=No refund from dispute
|
||||
funds.tx.receivedFunds=Received funds
|
||||
funds.tx.withdrawnFromWallet=Withdrawn from wallet
|
||||
funds.tx.withdrawnFromBSQWallet=BTC withdrawn from BSQ wallet
|
||||
funds.tx.noTxAvailable=No transactions available
|
||||
funds.tx.revert=Revert
|
||||
funds.tx.txSent=Transaction successfully sent to a new address in the local Bisq wallet.
|
||||
|
@ -900,7 +901,8 @@ settings.preferences.selectCurrencyNetwork=Select network
|
|||
setting.preferences.daoOptions=DAO options
|
||||
setting.preferences.dao.resync.label=Rebuild DAO state from genesis tx
|
||||
setting.preferences.dao.resync.button=Resync
|
||||
setting.preferences.dao.resync.popup=After an application restart the BSQ consensus state will be rebuilt from the genesis transaction.
|
||||
setting.preferences.dao.resync.popup=After an application restart the P2P network governance data will be reloaded from \
|
||||
the seed nodes and the BSQ consensus state will be rebuilt from the genesis transaction.
|
||||
setting.preferences.dao.isDaoFullNode=Run Bisq as DAO full node
|
||||
setting.preferences.dao.rpcUser=RPC username
|
||||
setting.preferences.dao.rpcPw=RPC password
|
||||
|
@ -1821,6 +1823,7 @@ dao.tx.type.enum.PROOF_OF_BURN=Proof of burn
|
|||
# suppress inspection "UnusedProperty"
|
||||
dao.tx.type.enum.IRREGULAR=Irregular
|
||||
|
||||
dao.tx.withdrawnFromWallet=BTC withdrawn from wallet
|
||||
dao.tx.issuanceFromCompReq=Compensation request/issuance
|
||||
dao.tx.issuanceFromCompReq.tooltip=Compensation request which led to an issuance of new BSQ.\n\
|
||||
Issuance date: {0}
|
||||
|
@ -1837,8 +1840,14 @@ dao.proposal.create.missingBsqFundsForBond=You don''t have sufficient BSQ funds
|
|||
Missing: {0}
|
||||
|
||||
dao.proposal.create.missingMinerFeeFunds=You don''t have sufficient BTC funds for creating the proposal transaction. \
|
||||
Any BSQ transaction require also a miner fee in BTC.\n\
|
||||
All BSQ transactions require a miner fee in BTC.\n\
|
||||
Missing: {0}
|
||||
|
||||
dao.proposal.create.missingIssuanceFunds=You don''t have sufficient BTC funds for creating the proposal transaction. \
|
||||
All BSQ transactions require a miner fee in BTC, and issuance transactions also require BTC for the requested BSQ \
|
||||
amount ({0} Satoshis/BSQ).\n\
|
||||
Missing: {1}
|
||||
|
||||
dao.feeTx.confirm=Confirm {0} transaction
|
||||
dao.feeTx.confirm.details={0} fee: {1}\n\
|
||||
Mining fee: {2} ({3} Satoshis/byte)\n\
|
||||
|
@ -1847,9 +1856,9 @@ dao.feeTx.confirm.details={0} fee: {1}\n\
|
|||
|
||||
dao.feeTx.issuanceProposal.confirm.details={0} fee: {1}\n\
|
||||
BTC needed for BSQ issuance: {2} ({3} Satoshis/BSQ)\n\
|
||||
On acceptance, the proposal fee will be deducted from the issued BSQ.\n\n\
|
||||
Mining fee: {4} ({5} Satoshis/byte)\n\
|
||||
Transaction size: {6} Kb\n\n\
|
||||
If your request is approved, you will receive the amount you requested net of the 2 BSQ proposal fee.\n\n\
|
||||
Are you sure you want to publish the {7} transaction?
|
||||
|
||||
dao.news.bisqDAO.title=THE BISQ DAO
|
||||
|
@ -1887,11 +1896,9 @@ dao.monitor.requestAlHashes=Request all hashes
|
|||
dao.monitor.resync=Resync DAO state
|
||||
dao.monitor.table.header.cycleBlockHeight=Cycle / block height
|
||||
dao.monitor.table.cycleBlockHeight=Cycle {0} / block {1}
|
||||
dao.monitor.table.seedPeers=Seed node: {0}
|
||||
|
||||
dao.monitor.daoState.headline=DAO state
|
||||
dao.monitor.daoState.daoStateInSync=Your local DAO state is in consensus with the network
|
||||
dao.monitor.daoState.daoStateNotInSync=Your local DAO state is not in consensus with the network. Please resync your \
|
||||
DAO state.
|
||||
dao.monitor.daoState.table.headline=Chain of DAO state hashes
|
||||
dao.monitor.daoState.table.blockHeight=Block height
|
||||
dao.monitor.daoState.table.hash=Hash of DAO state
|
||||
|
@ -1903,9 +1910,6 @@ dao.monitor.daoState.utxoConflicts.sumUtxo=Sum of all UTXO: {0} BSQ
|
|||
dao.monitor.daoState.utxoConflicts.sumBsq=Sum of all BSQ: {0} BSQ
|
||||
|
||||
dao.monitor.proposal.headline=Proposals state
|
||||
dao.monitor.proposal.daoStateInSync=Your local proposals state is in consensus with the network
|
||||
dao.monitor.proposal.daoStateNotInSync=Your local proposals state is not in consensus with the network. Please restart your \
|
||||
application.
|
||||
dao.monitor.proposal.table.headline=Chain of proposal state hashes
|
||||
dao.monitor.proposal.conflictTable.headline=Proposal state hashes from peers in conflict
|
||||
|
||||
|
@ -1913,11 +1917,13 @@ dao.monitor.proposal.table.hash=Hash of proposal state
|
|||
dao.monitor.proposal.table.prev=Previous hash
|
||||
dao.monitor.proposal.table.numProposals=No. proposals
|
||||
|
||||
dao.monitor.isInConflictWithSeedNode=Your local data is not in consensus with at least one seed node. \
|
||||
Please resync the DAO state.
|
||||
dao.monitor.isInConflictWithNonSeedNode=One of your peers is not in consensus with the network but your node \
|
||||
is in sync with the seed nodes.
|
||||
dao.monitor.daoStateInSync=Your local node is in consensus with the network
|
||||
|
||||
dao.monitor.blindVote.headline=Blind votes state
|
||||
dao.monitor.blindVote.daoStateInSync=Your local blind votes state is in consensus with the network
|
||||
dao.monitor.blindVote.daoStateNotInSync=Your local blind votes state is not in consensus with the network. Please restart your \
|
||||
application.
|
||||
dao.monitor.blindVote.table.headline=Chain of blind vote state hashes
|
||||
dao.monitor.blindVote.conflictTable.headline=Blind vote state hashes from peers in conflict
|
||||
dao.monitor.blindVote.table.hash=Hash of blind vote state
|
||||
|
@ -2058,6 +2064,7 @@ filterWindow.priceRelayNode=Filtered price relay nodes (comma sep. onion address
|
|||
filterWindow.btcNode=Filtered Bitcoin nodes (comma sep. addresses + port)
|
||||
filterWindow.preventPublicBtcNetwork=Prevent usage of public Bitcoin network
|
||||
filterWindow.disableDao=Disable DAO
|
||||
filterWindow.disableDaoBelowVersion=Min. version required for DAO
|
||||
filterWindow.add=Add filter
|
||||
filterWindow.remove=Remove filter
|
||||
|
||||
|
@ -2236,6 +2243,9 @@ popup.warning.nodeBanned=One of the {0} nodes got banned. Please restart your ap
|
|||
popup.warning.priceRelay=price relay
|
||||
popup.warning.seed=seed
|
||||
|
||||
popup.warning.burnBTC=This transaction is not possible, as the mining fees of {0} would exceed the amount to transfer of {1}. \
|
||||
Please wait until the mining fees are low again or until you''ve accumulated more BTC to transfer.
|
||||
|
||||
popup.info.securityDepositInfo=To ensure both traders follow the trade protocol, both traders need to pay a security \
|
||||
deposit.\n\nThis deposit is kept in your trade wallet until your trade has been successfully completed, and then it's \
|
||||
refunded to you.\n\nPlease note: if you're creating a new offer, Bisq needs to be running for another trader to take \
|
||||
|
|
|
@ -739,6 +739,7 @@ funds.tx.unknown=Unbekannter Grund: {0}
|
|||
funds.tx.noFundsFromDispute=Keine Rückzahlung vom Konflikt
|
||||
funds.tx.receivedFunds=Gelder erhalten
|
||||
funds.tx.withdrawnFromWallet=Von Wallet abgehoben
|
||||
funds.tx.withdrawnFromBSQWallet=BTC withdrawn from BSQ wallet
|
||||
funds.tx.noTxAvailable=Keine Transaktionen verfügbar
|
||||
funds.tx.revert=Umkehren
|
||||
funds.tx.txSent=Transaktion erfolgreich zu einer neuen Adresse in der lokalen Bisq-Wallet gesendet.
|
||||
|
@ -1603,6 +1604,7 @@ dao.tx.type.enum.PROOF_OF_BURN=Nachweis der Verbrennung
|
|||
# suppress inspection "UnusedProperty"
|
||||
dao.tx.type.enum.IRREGULAR=Irregulär
|
||||
|
||||
dao.tx.withdrawnFromWallet=BTC withdrawn from wallet
|
||||
dao.tx.issuanceFromCompReq=Entlohnungsanfrage/ausgabe
|
||||
dao.tx.issuanceFromCompReq.tooltip=Entlohnungsanfrage, die zur Ausgabe neuere BSQ führte.\nAusgabedatum: {0}
|
||||
dao.tx.issuanceFromReimbursement=Rückerstattungsantrag/Ausgabe
|
||||
|
@ -1611,10 +1613,15 @@ dao.proposal.create.missingBsqFunds=Sie haben nicht ausreichend BSQ um diesen Vo
|
|||
|
||||
dao.proposal.create.missingBsqFundsForBond=Du hast nicht ausreichend BSQ für diese Rolle. Du kannst den Vorschlag zwar veröffentlichen, benötigst jedoch den vollen BSQ Betrag für diese Rolle, falls dein Vorschlag akzeptiert wird.\nEs fehlen: {0}
|
||||
|
||||
dao.proposal.create.missingMinerFeeFunds=Du hast nicht ausreichend BTC, um die Vorschlags-Transaktion zu erstellen. Jede BSQ-Transaktion benötigt Mining-Gebühr in BTC.\nEs fehlen: {0}
|
||||
dao.proposal.create.missingMinerFeeFunds=You don''t have sufficient BTC funds for creating the proposal transaction. All BSQ transactions require a miner fee in BTC.\nMissing: {0}
|
||||
|
||||
dao.proposal.create.missingIssuanceFunds=You don''t have sufficient BTC funds for creating the proposal transaction. All BSQ transactions require a miner fee in BTC, and issuance transactions also require BTC for the requested BSQ amount ({0} Satoshis/BSQ).\nMissing: {1}
|
||||
|
||||
dao.feeTx.confirm=Bestätige {0} Transaktion
|
||||
dao.feeTx.confirm.details={0} Gebühr: {1}\nMining-Gebühr: {2} ({3} Satoshis/Byte)\nTransaktionsgröße: {4} Kb\n\nSind Sie sicher, dass Sie die {5} Transaktion senden wollen?
|
||||
|
||||
dao.feeTx.issuanceProposal.confirm.details={0} fee: {1}\nBTC needed for BSQ issuance: {2} ({3} Satoshis/BSQ)\nMining fee: {4} ({5} Satoshis/byte)\nTransaction size: {6} Kb\n\nIf your request is approved, you will receive the amount you requested net of the 2 BSQ proposal fee.\n\nAre you sure you want to publish the {7} transaction?
|
||||
|
||||
dao.news.bisqDAO.title=DER BISQ DAO
|
||||
dao.news.bisqDAO.description=Genauso wie der Bisq Handelsplatz dezentral und resistent gegen Zensur ist, ist auch die Führung der DAO - die Bisq DAO und der BSQ Token machen es möglich.
|
||||
dao.news.bisqDAO.readMoreLink=Erfahren Sie mehr über den Bisq DAO
|
||||
|
@ -1946,6 +1953,8 @@ popup.warning.nodeBanned=Einer der {0} Knoten wurde gebannt. Bitte starten Sie d
|
|||
popup.warning.priceRelay=Preisrelais
|
||||
popup.warning.seed=Seed
|
||||
|
||||
popup.warning.burnBTC=This transaction is not possible, as the mining fees of {0} would exceed the amount to transfer of {1}. Please wait until the mining fees are low again or until you''ve accumulated more BTC to transfer.
|
||||
|
||||
popup.info.securityDepositInfo=Um sicherzustellen, dass beide Händler dem Handelsprotokoll folgen, müssen diese eine Kaution zahlen.\n\nDie Kaution bleibt in Ihrer lokalen Wallet, bis das Angebot von einem anderen Händler angenommen wurde.\nSie wird Ihnen zurückerstattet, nachdem der Handel erfolgreich abgeschlossen wurde.\n\nBitte beachten Sie, dass Sie die Anwendung laufen lassen müssen, wenn Sie ein offenes Angebot haben.\nWenn ein anderer Händler Ihr Angebot annehmen möchte ist es notwendig, dass Ihre Anwendung online ist und reagieren kann.\nStellen Sie sicher, dass Sie den Ruhezustand deaktiviert haben, da dieser Ihren Client vom Netzwerk trennen würde (Der Ruhezustand des Monitors ist kein Problem).
|
||||
|
||||
popup.info.cashDepositInfo=Stellen Sie sicher, dass eine Bank-Filiale in Ihrer Nähe befindet, um die Bargeld Kaution zu zahlen.\nDie Bankkennung (BIC/SWIFT) der Bank des Verkäufers ist: {0}.
|
||||
|
|
|
@ -318,12 +318,12 @@ offerbook.filterByPaymentMethod=Φιλτράρισμα κατά μέθοδο π
|
|||
offerbook.nrOffers=Πλήθος προσφορών: {0}
|
||||
offerbook.volume={0} (ελάχιστο - μέγιστο)
|
||||
|
||||
offerbook.createOfferToBuy=Create new offer to buy {0}
|
||||
offerbook.createOfferToSell=Create new offer to sell {0}
|
||||
offerbook.createOfferToBuy.withFiat=Create new offer to buy {0} with {1}
|
||||
offerbook.createOfferToSell.forFiat=Create new offer to sell {0} for {1}
|
||||
offerbook.createOfferToBuy.withCrypto=Create new offer to sell {0} (buy {1})
|
||||
offerbook.createOfferToSell.forCrypto=Create new offer to buy {0} (sell {1})
|
||||
offerbook.createOfferToBuy=Δημιούργησε νέα προσφορά για αγορά {0}
|
||||
offerbook.createOfferToSell=Δημιούργησε νέα προσφορά για πώληση {0}
|
||||
offerbook.createOfferToBuy.withFiat=Δημιούργησε νέα προσφορά για αγορά {0} με {1}
|
||||
offerbook.createOfferToSell.forFiat=Δημιούργησε νέα προσφορά για πώληση {0} με {1}
|
||||
offerbook.createOfferToBuy.withCrypto=Δημιούργησε νέα προσφορά για πώληση {0} (αγορά {1})
|
||||
offerbook.createOfferToSell.forCrypto=Δημιούργησε νέα προσφορά για αγορά {0} (πώληση {1})
|
||||
|
||||
offerbook.takeOfferButton.tooltip=Αποδοχή προσφοράς έναντι {0}
|
||||
offerbook.yesCreateOffer=Ναι, δημιούργησε προσφορά
|
||||
|
@ -355,7 +355,7 @@ offerbook.info.sellAboveMarketPrice=Θα λάβεις {0} περισσότερα
|
|||
offerbook.info.buyBelowMarketPrice=Θα πληρώσεις {0} λιγότερα από την τρέχουσα τιμή (ενημερώνεται κάθε λεπτό).
|
||||
offerbook.info.buyAtFixedPrice=Θα αγοράσεις σε αυτή την καθορισμένη τιμή.
|
||||
offerbook.info.sellAtFixedPrice=Θα πουλήσεις σε αυτή την καθορισμένη τιμή.
|
||||
offerbook.info.noArbitrationInUserLanguage=Σε περίπτωση διαφωνίας, παρακαλούμε να σημειώσετε ότι η διαιτησία για αυτή την προσφορά θα διεκπεραιωθεί στο {0}. Η γλώσσα είναι αυτήν τη στιγμή ρυθμισμένη στο {1}.\n
|
||||
offerbook.info.noArbitrationInUserLanguage=Σε περίπτωση διαφωνίας, παρακαλούμε να σημειώσετε ότι η διαιτησία για αυτή την προσφορά θα διεκπεραιωθεί στα {0}. Η γλώσσα αυτή τη στιγμή είναι ρυθμισμένη σε {1}.\n
|
||||
offerbook.info.roundedFiatVolume=Το ποσό στρογγυλοποιήθηκε για να αυξηθεί το απόρρητο της συναλλαγής σου.
|
||||
|
||||
####################################################################
|
||||
|
@ -739,6 +739,7 @@ funds.tx.unknown=Άγνωστη αιτία: {0}
|
|||
funds.tx.noFundsFromDispute=Καμί επιστροφή ποσού από τη διένεξη
|
||||
funds.tx.receivedFunds=Ληφθέντα κεφάλαια
|
||||
funds.tx.withdrawnFromWallet=Ανειλημμένα από το πορτοφόλι
|
||||
funds.tx.withdrawnFromBSQWallet=BTC withdrawn from BSQ wallet
|
||||
funds.tx.noTxAvailable=Δεν υπάρχουν διαθέσιμες συναλλαγές
|
||||
funds.tx.revert=Revert
|
||||
funds.tx.txSent=Η συναλλαγή απεστάλη επιτυχώς σε νέα διεύθυνση στο τοπικό πορτοφόλι Bisq.
|
||||
|
@ -816,7 +817,7 @@ setting.preferences.txFeeTooLarge=Εισήγαγες υπέρογκη αξία (
|
|||
setting.preferences.ignorePeers=Αγνόησε συναλλασσόμενους με διεύθυνση onion (για πολλαπλές εισαγωγές βάλε κόμμα ανάμεσα)
|
||||
setting.preferences.refererId=Referral ID
|
||||
setting.preferences.refererId.prompt=Optional referral ID
|
||||
setting.preferences.currenciesInList=Νομίσματα στην λίστα τιμών αγοράς
|
||||
setting.preferences.currenciesInList=Νομίσματα στη λίστα τιμών αγοράς
|
||||
setting.preferences.prefCurrency=Προτιμώμενο νόμισμα
|
||||
setting.preferences.displayFiat=Προβολή εθνικών νομισμάτων
|
||||
setting.preferences.noFiat=Δεν επέλεξες εθνικό νόμισμα
|
||||
|
@ -832,7 +833,7 @@ setting.preferences.sortWithNumOffers=Ταξινόμησε τους καταλό
|
|||
setting.preferences.resetAllFlags=Επανάφερε όλες τις επισημάνσεις \"Να μην επανεμφανιστεί\"
|
||||
setting.preferences.reset=Επαναφορά
|
||||
settings.preferences.languageChange=Για αλλαγή γλώσσας σε όλα τα παράθυρα απαιτείται επανεκκίνηση.
|
||||
settings.preferences.arbitrationLanguageWarning=Σε περίπτωση διαφωνίας, σημειώστε ότι η διαιτησία διεκπεραιώνεται στο {0}.
|
||||
settings.preferences.arbitrationLanguageWarning=Σε περίπτωση διαφωνίας, σημειώστε ότι η διαιτησία διεκπεραιώνεται σε {0}.
|
||||
settings.preferences.selectCurrencyNetwork=Διάλεξε δίκτυο
|
||||
setting.preferences.daoOptions=Επιλογές DAO
|
||||
setting.preferences.dao.resync.label=Ανακατασκευή κατάστασης DAO από genesis tx
|
||||
|
@ -1007,32 +1008,32 @@ account.notifications.email.label=Pairing token
|
|||
account.notifications.email.prompt=Enter pairing token you received by email
|
||||
account.notifications.settings.title=Ρυθμίσεις
|
||||
account.notifications.useSound.label=Αναπαραγωγή ήχου ειδοποίησης στο τηλέφωνο
|
||||
account.notifications.trade.label=Receive trade messages
|
||||
account.notifications.market.label=Receive offer alerts
|
||||
account.notifications.price.label=Receive price alerts
|
||||
account.notifications.trade.label=Λήψη μηνυμάτων συναλλαγών
|
||||
account.notifications.market.label=Λήψη ειδοποιήσεων προσφορών
|
||||
account.notifications.price.label=Λήψη ειδοποιήσεων τιμών
|
||||
account.notifications.priceAlert.title=Τιμές ειδοποίησης
|
||||
account.notifications.priceAlert.high.label=Ειδοποίηση αν η τιμή BTC είναι μεγαλύτερη από
|
||||
account.notifications.priceAlert.low.label=Ειδοποίηση αν η τιμή BTC είναι μικρότερη από
|
||||
account.notifications.priceAlert.setButton=Καθόρισε τιμή ειδοποίησης
|
||||
account.notifications.priceAlert.removeButton=Απόσυρε τιμή ειδοποίησης
|
||||
account.notifications.trade.message.title=Trade state changed
|
||||
account.notifications.trade.message.title=Μεταβολή κατάστασης συναλλαγής
|
||||
account.notifications.trade.message.msg.conf=The deposit transaction for the trade with ID {0} is confirmed. Please open your Bisq application and start the payment.
|
||||
account.notifications.trade.message.msg.started=The BTC buyer has started the payment for the trade with ID {0}.
|
||||
account.notifications.trade.message.msg.started=Ο αγοραστής BTC ξεκίνησε την πληρωμή για τη συναλλαγή με ταυτότητα {0}
|
||||
account.notifications.trade.message.msg.completed=Η συναλλαγή με ταυτότητα {0} ολοκληρώθηκε.
|
||||
account.notifications.offer.message.title=Η προσφορά σου έγινε αποδεκτή
|
||||
account.notifications.offer.message.msg=Η προσφορά σου με ταυτότητα {0} έγινε αποδεκτή
|
||||
account.notifications.dispute.message.title=Νέο μήνυμα διένεξης
|
||||
account.notifications.dispute.message.msg=You received a dispute message for trade with ID {0}
|
||||
account.notifications.dispute.message.msg=Έλαβες ένα μήνυμα διένεξης για τη συναλλαγή με ταυτότητα {0}
|
||||
|
||||
account.notifications.marketAlert.title=Ειδοποιήσεις προσφορών
|
||||
account.notifications.marketAlert.selectPaymentAccount=Offers matching payment account
|
||||
account.notifications.marketAlert.offerType.label=Είδος προσφορών για τις οποίες ενδιαφέρομαι
|
||||
account.notifications.marketAlert.offerType.buy=Προσφορές αγοράς (θέλω να πουλήσω BTC)
|
||||
account.notifications.marketAlert.offerType.sell=Προσφορές πώλησης (θέλω να αγοράσω BTC)
|
||||
account.notifications.marketAlert.trigger=Offer price distance (%)
|
||||
account.notifications.marketAlert.trigger=Διαφορά (%) τιμής προσφοράς
|
||||
account.notifications.marketAlert.trigger.info=With a price distance set, you will only receive an alert when an offer that meets (or exceeds) your requirements is published. Example: you want to sell BTC, but you will only sell at a 2% premium to the current market price. Setting this field to 2% will ensure you only receive alerts for offers with prices that are 2% (or more) above the current market price.
|
||||
account.notifications.marketAlert.trigger.prompt=Percentage distance from market price (e.g. 2.50%, -0.50%, etc)
|
||||
account.notifications.marketAlert.addButton=Add offer alert
|
||||
account.notifications.marketAlert.trigger.prompt=Ποσοστιαία διαφορά από τιμή αγοράς (π.χ. 2.50%, -0.50%, κλπ)
|
||||
account.notifications.marketAlert.addButton=Πρόσθεσε ειδοποίηση προσφοράς
|
||||
account.notifications.marketAlert.manageAlertsButton=Διαχείριση ειδοποιήσεων προσφορών
|
||||
account.notifications.marketAlert.manageAlerts.title=Διαχείριση ειδοποιήσεων προσφορών
|
||||
account.notifications.marketAlert.manageAlerts.label=Ειδοποιήσεις προσφορών
|
||||
|
@ -1040,7 +1041,7 @@ account.notifications.marketAlert.manageAlerts.item=Offer alert for {0} offer wi
|
|||
account.notifications.marketAlert.manageAlerts.header.paymentAccount=Λογαριασμός πληρωμών
|
||||
account.notifications.marketAlert.manageAlerts.header.trigger=Τιμή ενεργοποίησης
|
||||
account.notifications.marketAlert.manageAlerts.header.offerType=Τύπος προσφοράς
|
||||
account.notifications.marketAlert.message.title=Offer alert
|
||||
account.notifications.marketAlert.message.title=Ειδοποίηση προσφοράς
|
||||
account.notifications.marketAlert.message.msg.below=μεγαλύτερη από
|
||||
account.notifications.marketAlert.message.msg.above=μικρότερη από
|
||||
account.notifications.marketAlert.message.msg=A new ''{0} {1}'' offer with price {2} ({3} {4} market price) and payment method ''{5}'' was published to the Bisq offerbook.\nOffer ID: {6}.
|
||||
|
@ -1059,52 +1060,52 @@ account.notifications.priceAlert.warning.lowerPriceTooHigh=Η χαμηλότερ
|
|||
|
||||
dao.tab.factsAndFigures=Facts & Figures
|
||||
dao.tab.bsqWallet=Πορτοφόλι BSQ
|
||||
dao.tab.proposals=Governance
|
||||
dao.tab.proposals=Διακυβέρνηση
|
||||
dao.tab.bonding=Bonding
|
||||
dao.tab.proofOfBurn=Asset listing fee/Proof of burn
|
||||
dao.tab.monitor=Network monitor
|
||||
dao.tab.news=News
|
||||
dao.tab.monitor=Παρακολούθηση δικτύου
|
||||
dao.tab.news=Νέα
|
||||
|
||||
dao.paidWithBsq=πληρώθηκε με BSQ
|
||||
dao.availableBsqBalance=Available for spending (verified + unconfirmed change outputs)
|
||||
dao.verifiedBsqBalance=Balance of all verified UTXOs
|
||||
dao.unconfirmedChangeBalance=Balance of all unconfirmed change outputs
|
||||
dao.unverifiedBsqBalance=Balance of all unverified transactions (awaiting block confirmation)
|
||||
dao.lockedForVoteBalance=Used for voting
|
||||
dao.lockedForVoteBalance=Χρησιμοποιημένα για ψηφοφορία
|
||||
dao.lockedInBonds=Locked in bonds
|
||||
dao.availableNonBsqBalance=Available non-BSQ balance (BTC)
|
||||
dao.availableNonBsqBalance=Διαθέσιμο μη BSQ υπόλοιπο (BTC)
|
||||
dao.totalBsqBalance=Συνολικό υπόλοιπο BSQ
|
||||
|
||||
dao.tx.published.success=Η συναλλαγή σου κοινοποιήθηκε επιτυχώς.
|
||||
dao.proposal.menuItem.make=Κατάθεσε πρόταση
|
||||
dao.proposal.menuItem.browse=Browse open proposals
|
||||
dao.proposal.menuItem.browse=Περιήγηση ανοιχτών προτάσεων
|
||||
dao.proposal.menuItem.vote=Ψήφιση προτάσεων
|
||||
dao.proposal.menuItem.result=Αποτελέσματα ψηφοφορίας
|
||||
dao.cycle.headline=Voting cycle
|
||||
dao.cycle.overview.headline=Voting cycle overview
|
||||
dao.cycle.currentPhase=Current phase
|
||||
dao.cycle.currentBlockHeight=Current block height
|
||||
dao.cycle.proposal=Proposal phase
|
||||
dao.cycle.proposal.next=Next proposal phase
|
||||
dao.cycle.blindVote=Blind vote phase
|
||||
dao.cycle.voteReveal=Vote reveal phase
|
||||
dao.cycle.headline=Κύκλος ψηφοφορίας
|
||||
dao.cycle.overview.headline=Επισκόπηση κύκλος ψηφοφορίας
|
||||
dao.cycle.currentPhase=Τρέχουσα φάση
|
||||
dao.cycle.currentBlockHeight=Τρέχων ύψος block
|
||||
dao.cycle.proposal=Φάση προτάσεων
|
||||
dao.cycle.proposal.next=Επόμενη φάση προτάσεων
|
||||
dao.cycle.blindVote=Φάση τυφλής ψήφου
|
||||
dao.cycle.voteReveal=Φάση αποκάλυψης ψήφων
|
||||
dao.cycle.voteResult=Αποτέλεσμα ψηφοφορίας
|
||||
dao.cycle.phaseDuration={0} blocks (≈{1}); Block {2} - {3} (≈{4} - ≈{5})
|
||||
dao.cycle.phaseDurationWithoutBlocks=Block {0} - {1} (≈{2} - ≈{3})
|
||||
|
||||
dao.voteReveal.txPublished.headLine=Vote reveal transaction published
|
||||
dao.voteReveal.txPublished=Your vote reveal transaction with transaction ID {0} was successfully published.\n\nThis happens automatically by the software if you have participated in the DAO voting.
|
||||
dao.voteReveal.txPublished.headLine=Κοινοποίηση συναλλαγής αποκάλυψης ψήφου
|
||||
dao.voteReveal.txPublished=Η συναλλαγή για την αποκάλυψη της ψήφου σου με ταυτότητα {0} κοινοποιήθηκε επιτυχώς.\n\nΑυτό συμβαίνει αυτομάτως μέσω του λογισμικού, εφόσον έχεις συμμετάσχει στην ψηφοφορία του DAO.
|
||||
|
||||
dao.results.cycles.header=Κύκλοι
|
||||
dao.results.cycles.table.header.cycle=Κύκλος
|
||||
dao.results.cycles.table.header.numProposals=Προτάσεις
|
||||
dao.results.cycles.table.header.numVotes=Ψήφοι
|
||||
dao.results.cycles.table.header.voteWeight=Vote weight
|
||||
dao.results.cycles.table.header.voteWeight=Βάρος ψήφου
|
||||
dao.results.cycles.table.header.issuance=Έκδοση
|
||||
|
||||
dao.results.results.table.item.cycle=Cycle {0} started: {1}
|
||||
dao.results.results.table.item.cycle=Εκκίνηση κύκλου {0}: {1}
|
||||
|
||||
dao.results.proposals.header=Proposals of selected cycle
|
||||
dao.results.proposals.header=Προτάσεις επιλεγμένου κύκλου
|
||||
dao.results.proposals.table.header.proposalOwnerName=Όνομα
|
||||
dao.results.proposals.table.header.details=Λεπτομέριες
|
||||
dao.results.proposals.table.header.myVote=Η ψήφος μου
|
||||
|
@ -1118,28 +1119,28 @@ dao.results.exceptions=Vote result exception(s)
|
|||
dao.param.UNDEFINED=Ακαθόριστο
|
||||
|
||||
# suppress inspection "UnusedProperty"
|
||||
dao.param.DEFAULT_MAKER_FEE_BSQ=BSQ maker fee
|
||||
dao.param.DEFAULT_MAKER_FEE_BSQ=Προμήθεια δημιουργού προσφοράς BSQ
|
||||
# suppress inspection "UnusedProperty"
|
||||
dao.param.DEFAULT_TAKER_FEE_BSQ=BSQ taker fee
|
||||
dao.param.DEFAULT_TAKER_FEE_BSQ=Προμήθεια αποδέκτη προσφοράς BSQ
|
||||
# suppress inspection "UnusedProperty"
|
||||
dao.param.MIN_MAKER_FEE_BSQ=Min. BSQ maker fee
|
||||
dao.param.MIN_MAKER_FEE_BSQ=Ελάχιστη προμήθεια δημιουργού προσφοράς BSQ
|
||||
# suppress inspection "UnusedProperty"
|
||||
dao.param.MIN_TAKER_FEE_BSQ=Min. BSQ taker fee
|
||||
dao.param.MIN_TAKER_FEE_BSQ=Ελάχιστη προμήθεια αποδέκτη προσφοράς BSQ
|
||||
# suppress inspection "UnusedProperty"
|
||||
dao.param.DEFAULT_MAKER_FEE_BTC=BTC maker fee
|
||||
dao.param.DEFAULT_MAKER_FEE_BTC=Προμήθεια δημιουργού προσφοράς BTC
|
||||
# suppress inspection "UnusedProperty"
|
||||
dao.param.DEFAULT_TAKER_FEE_BTC=BTC taker fee
|
||||
dao.param.DEFAULT_TAKER_FEE_BTC=Προμήθεια αποδέκτη προσφοράς BTC
|
||||
# suppress inspection "UnusedProperty"
|
||||
# suppress inspection "UnusedProperty"
|
||||
dao.param.MIN_MAKER_FEE_BTC=Min. BTC maker fee
|
||||
dao.param.MIN_MAKER_FEE_BTC=Ελάχιστη προμήθεια δημιουργού προσφοράς BTC
|
||||
# suppress inspection "UnusedProperty"
|
||||
dao.param.MIN_TAKER_FEE_BTC=Min. BTC taker fee
|
||||
dao.param.MIN_TAKER_FEE_BTC=Ελάχιστη προμήθεια αποδέκτη προσφοράς BTC
|
||||
# suppress inspection "UnusedProperty"
|
||||
|
||||
# suppress inspection "UnusedProperty"
|
||||
dao.param.PROPOSAL_FEE=Proposal fee in BSQ
|
||||
dao.param.PROPOSAL_FEE=Αμοιβή πρότασης σε BSQ
|
||||
# suppress inspection "UnusedProperty"
|
||||
dao.param.BLIND_VOTE_FEE=Voting fee in BSQ
|
||||
dao.param.BLIND_VOTE_FEE=Αμοιβή ψήφου σε BSQ
|
||||
|
||||
# suppress inspection "UnusedProperty"
|
||||
dao.param.COMPENSATION_REQUEST_MIN_AMOUNT=Compensation request min. BSQ amount
|
||||
|
@ -1194,14 +1195,14 @@ dao.param.LOCK_TIME_TRADE_PAYOUT=Lock time for alternative trade payout tx
|
|||
dao.param.ARBITRATOR_FEE=Arbitrator fee in BTC
|
||||
|
||||
# suppress inspection "UnusedProperty"
|
||||
dao.param.MAX_TRADE_LIMIT=Max. trade limit in BTC
|
||||
dao.param.MAX_TRADE_LIMIT=Μέγιστο όριο συναλλαγής σε BTC
|
||||
|
||||
# suppress inspection "UnusedProperty"
|
||||
dao.param.BONDED_ROLE_FACTOR=Bonded role unit factor in BSQ
|
||||
# suppress inspection "UnusedProperty"
|
||||
dao.param.ISSUANCE_LIMIT=Issuance limit per cycle in BSQ
|
||||
|
||||
dao.param.currentValue=Current value: {0}
|
||||
dao.param.currentValue=Τρέχουσα αξία: {0}
|
||||
dao.param.blocks={0} blocks
|
||||
|
||||
dao.results.cycle.duration.label=Διάρκεια {0}
|
||||
|
@ -1215,21 +1216,21 @@ dao.results.invalidVotes=We had invalid votes in that voting cycle. That can hap
|
|||
# suppress inspection "UnusedProperty"
|
||||
dao.phase.PHASE_UNDEFINED=Ακαθόριστο
|
||||
# suppress inspection "UnusedProperty"
|
||||
dao.phase.PHASE_PROPOSAL=Proposal phase
|
||||
dao.phase.PHASE_PROPOSAL=Φάση προτάσεων
|
||||
# suppress inspection "UnusedProperty"
|
||||
dao.phase.PHASE_BREAK1=Break 1
|
||||
# suppress inspection "UnusedProperty"
|
||||
dao.phase.PHASE_BLIND_VOTE=Blind vote phase
|
||||
dao.phase.PHASE_BLIND_VOTE=Φάση τυφλής ψήφου
|
||||
# suppress inspection "UnusedProperty"
|
||||
dao.phase.PHASE_BREAK2=Break 2
|
||||
# suppress inspection "UnusedProperty"
|
||||
dao.phase.PHASE_VOTE_REVEAL=Vote reveal phase
|
||||
dao.phase.PHASE_VOTE_REVEAL=Φάση αποκάλυψης ψήφων
|
||||
# suppress inspection "UnusedProperty"
|
||||
dao.phase.PHASE_BREAK3=Break 3
|
||||
# suppress inspection "UnusedProperty"
|
||||
dao.phase.PHASE_RESULT=Result phase
|
||||
|
||||
dao.results.votes.table.header.stakeAndMerit=Vote weight
|
||||
dao.results.votes.table.header.stakeAndMerit=Βάρος ψήφου
|
||||
dao.results.votes.table.header.stake=Διακύβευμα
|
||||
dao.results.votes.table.header.merit=Earned
|
||||
dao.results.votes.table.header.vote=Ψήφισε
|
||||
|
@ -1393,34 +1394,34 @@ dao.proofOfBurn.txs=Συναλλαγές
|
|||
dao.proofOfBurn.pubKey=Pubkey
|
||||
dao.proofOfBurn.signature.window.title=Sign a message with key from proof of burn transaction
|
||||
dao.proofOfBurn.verify.window.title=Verify a message with key from proof of burn transaction
|
||||
dao.proofOfBurn.copySig=Copy signature to clipboard
|
||||
dao.proofOfBurn.sign=Sign
|
||||
dao.proofOfBurn.message=Message
|
||||
dao.proofOfBurn.sig=Signature
|
||||
dao.proofOfBurn.verify=Verify
|
||||
dao.proofOfBurn.copySig=Αντιγραφή υπογραφής στο πρόχειρο
|
||||
dao.proofOfBurn.sign=Υπόγραψε
|
||||
dao.proofOfBurn.message=Μήνυμα
|
||||
dao.proofOfBurn.sig=Υπογραφή
|
||||
dao.proofOfBurn.verify=Επαλήθευση
|
||||
dao.proofOfBurn.verify.header=Verify message with key from proof of burn transaction
|
||||
dao.proofOfBurn.verificationResult.ok=Verification succeeded
|
||||
dao.proofOfBurn.verificationResult.failed=Verification failed
|
||||
dao.proofOfBurn.verificationResult.ok=Επιτυχία επαλήθευσης
|
||||
dao.proofOfBurn.verificationResult.failed=Αποτυχία επαλήθευσης
|
||||
|
||||
# suppress inspection "UnusedProperty"
|
||||
dao.phase.UNDEFINED=Ακαθόριστο
|
||||
# suppress inspection "UnusedProperty"
|
||||
dao.phase.PROPOSAL=Proposal phase
|
||||
dao.phase.PROPOSAL=Φάση προτάσεων
|
||||
# suppress inspection "UnusedProperty"
|
||||
dao.phase.BREAK1=Break before blind vote phase
|
||||
# suppress inspection "UnusedProperty"
|
||||
dao.phase.BLIND_VOTE=Blind vote phase
|
||||
dao.phase.BLIND_VOTE=Φάση τυφλής ψήφου
|
||||
# suppress inspection "UnusedProperty"
|
||||
dao.phase.BREAK2=Break before vote reveal phase
|
||||
# suppress inspection "UnusedProperty"
|
||||
dao.phase.VOTE_REVEAL=Vote reveal phase
|
||||
dao.phase.VOTE_REVEAL=Φάση αποκάλυψης ψήφων
|
||||
# suppress inspection "UnusedProperty"
|
||||
dao.phase.BREAK3=Break before result phase
|
||||
# suppress inspection "UnusedProperty"
|
||||
dao.phase.RESULT=Vote result phase
|
||||
|
||||
# suppress inspection "UnusedProperty"
|
||||
dao.phase.separatedPhaseBar.PROPOSAL=Proposal phase
|
||||
dao.phase.separatedPhaseBar.PROPOSAL=Φάση προτάσεων
|
||||
# suppress inspection "UnusedProperty"
|
||||
dao.phase.separatedPhaseBar.BLIND_VOTE=Blind vote
|
||||
# suppress inspection "UnusedProperty"
|
||||
|
@ -1454,9 +1455,9 @@ dao.proposal.type.short.REIMBURSEMENT_REQUEST=Αίτημα αποζημίωση
|
|||
# suppress inspection "UnusedProperty"
|
||||
dao.proposal.type.short.BONDED_ROLE=Bonded role
|
||||
# suppress inspection "UnusedProperty"
|
||||
dao.proposal.type.short.REMOVE_ASSET=Removing an altcoin
|
||||
dao.proposal.type.short.REMOVE_ASSET=Απόσυρση κρυπτονομίσματος
|
||||
# suppress inspection "UnusedProperty"
|
||||
dao.proposal.type.short.CHANGE_PARAM=Changing a parameter
|
||||
dao.proposal.type.short.CHANGE_PARAM=Αλλαγή παραμέτρου
|
||||
# suppress inspection "UnusedProperty"
|
||||
dao.proposal.type.short.GENERIC=Γενική πρόταση
|
||||
# suppress inspection "UnusedProperty"
|
||||
|
@ -1464,14 +1465,14 @@ dao.proposal.type.short.CONFISCATE_BOND=Confiscating a bond
|
|||
|
||||
dao.proposal.details=Λεπτομέρειες πρότασης
|
||||
dao.proposal.selectedProposal=Επιλεγμένη πρόταση
|
||||
dao.proposal.active.header=Proposals of current cycle
|
||||
dao.proposal.active.remove.confirm=Are you sure you want to remove that proposal?\nThe already paid proposal fee will be lost.
|
||||
dao.proposal.active.remove.doRemove=Yes, remove my proposal
|
||||
dao.proposal.active.header=Προτάσεις τρέχοντος κύκλου
|
||||
dao.proposal.active.remove.confirm=Σίγουρα θέλεις να αποσύρεις την πρόταση;\nΘα χάσεις την ήδη πληρωμένη αμοιβή πρότασης.
|
||||
dao.proposal.active.remove.doRemove=Ναι, απόσυρε την πρότασή μου
|
||||
dao.proposal.active.remove.failed=Δεν ήταν δυνατή η απόσυρση της πρότασης.
|
||||
dao.proposal.myVote.title=Ψηφοφορία
|
||||
dao.proposal.myVote.accept=Αποδοχή πρότασης
|
||||
dao.proposal.myVote.reject=Απόρριψη πρότασης
|
||||
dao.proposal.myVote.removeMyVote=Ignore proposal
|
||||
dao.proposal.myVote.removeMyVote=Αγνόηση πρότασης
|
||||
dao.proposal.myVote.merit=Vote weight from earned BSQ
|
||||
dao.proposal.myVote.stake=Vote weight from stake
|
||||
dao.proposal.myVote.revealTxId=Vote reveal transaction ID
|
||||
|
@ -1484,19 +1485,19 @@ dao.proposal.create.phase.inactive=Please wait until the next proposal phase
|
|||
dao.proposal.create.proposalType=Τύπος πρότασης
|
||||
dao.proposal.create.new=Κατάθεση νέας πρότασης
|
||||
dao.proposal.create.button=Κατάθεσε πρόταση
|
||||
dao.proposal.create.publish=Publish proposal
|
||||
dao.proposal.create.publishing=Proposal publishing is in progress ...
|
||||
dao.proposal.create.publish=Κοινοποίηση πρότασης
|
||||
dao.proposal.create.publishing=Κοινοποίηση πρότασης σε εξέλιξη...
|
||||
dao.proposal=πρόταση
|
||||
dao.proposal.display.type=Τύπος πρότασης
|
||||
dao.proposal.display.name=Name/nickname
|
||||
dao.proposal.display.name=Όνομα/ψευδώνυμο
|
||||
dao.proposal.display.link=Link to detail info
|
||||
dao.proposal.display.link.prompt=Link to GitHub issue
|
||||
dao.proposal.display.requestedBsq=Requested amount in BSQ
|
||||
dao.proposal.display.bsqAddress=BSQ address
|
||||
dao.proposal.display.txId=Proposal transaction ID
|
||||
dao.proposal.display.proposalFee=Proposal fee
|
||||
dao.proposal.display.link.prompt=Σύνδεσμος με θέμα στο GitHub
|
||||
dao.proposal.display.requestedBsq=Αιτούμενο ποσό σε BSQ
|
||||
dao.proposal.display.bsqAddress=Διεύθυνση BSQ
|
||||
dao.proposal.display.txId=Ταυτότητα πρότασης
|
||||
dao.proposal.display.proposalFee=Αμοιβή πρότασης
|
||||
dao.proposal.display.myVote=Η ψήφος μου
|
||||
dao.proposal.display.voteResult=Vote result summary
|
||||
dao.proposal.display.voteResult=Περίληψη αποτελεσμάτων ψηφοφορίας
|
||||
dao.proposal.display.bondedRoleComboBox.label=Bonded role type
|
||||
dao.proposal.display.requiredBondForRole.label=Required bond for role
|
||||
dao.proposal.display.tickerSymbol.label=Ticker Symbol
|
||||
|
@ -1506,21 +1507,21 @@ dao.proposal.table.header.proposalType=Τύπος πρότασης
|
|||
dao.proposal.table.header.link=Σύνδεσμος
|
||||
dao.proposal.table.header.myVote=Η ψήφος μου
|
||||
dao.proposal.table.header.remove=Απόσυρε
|
||||
dao.proposal.table.icon.tooltip.removeProposal=Remove my proposal
|
||||
dao.proposal.table.icon.tooltip.removeProposal=Απόσυρε την πρότασή μου
|
||||
dao.proposal.table.icon.tooltip.changeVote=Current vote: ''{0}''. Change vote to: ''{1}''
|
||||
|
||||
dao.proposal.display.myVote.accepted=Accepted
|
||||
dao.proposal.display.myVote.rejected=Rejected
|
||||
dao.proposal.display.myVote.ignored=Ignored
|
||||
dao.proposal.myVote.summary=Voted: {0}; Vote weight: {1} (earned: {2} + stake: {3});
|
||||
dao.proposal.myVote.invalid=Vote was invalid
|
||||
dao.proposal.myVote.invalid=Η ψήφος ήταν άκυρη
|
||||
|
||||
dao.proposal.voteResult.success=Accepted
|
||||
dao.proposal.voteResult.failed=Rejected
|
||||
dao.proposal.voteResult.summary=Result: {0}; Threshold: {1} (required > {2}); Quorum: {3} (required > {4})
|
||||
|
||||
dao.proposal.display.paramComboBox.label=Select parameter to change
|
||||
dao.proposal.display.paramValue=Parameter value
|
||||
dao.proposal.display.paramComboBox.label=Επίλεξε παράμετρο προς μετατροπή
|
||||
dao.proposal.display.paramValue=Τιμή παραμέτρου
|
||||
|
||||
dao.proposal.display.confiscateBondComboBox.label=Choose bond
|
||||
dao.proposal.display.assetComboBox.label=Asset to remove
|
||||
|
@ -1534,14 +1535,14 @@ dao.wallet.menuItem.send=Αποστολή
|
|||
dao.wallet.menuItem.receive=Λήψη
|
||||
dao.wallet.menuItem.transactions=Συναλλαγές
|
||||
|
||||
dao.wallet.dashboard.myBalance=My wallet balance
|
||||
dao.wallet.dashboard.myBalance=Υπόλοιπο πορτοφολιού μου
|
||||
|
||||
dao.wallet.receive.fundYourWallet=Your BSQ receive address
|
||||
dao.wallet.receive.bsqAddress=BSQ wallet address (Fresh unused address)
|
||||
dao.wallet.receive.bsqAddress=Διεύθυνση πορτοφολιού BSQ (νέα αχρησιμοποίητη διεύθυνση)
|
||||
|
||||
dao.wallet.receive.dao.headline=The Bisq DAO
|
||||
dao.wallet.receive.dao.headline=Αποκεντρωμένος Αυτόνομος Οργανισμός (DAO) Bisq
|
||||
dao.wallet.receive.daoInfo=Just as the Bisq exchange is decentralized and censorship-resistant, so is its governance model — and the Bisq DAO and BSQ token are the tools that make it possible.
|
||||
dao.wallet.receive.daoInfo.button=Learn more about the Bisq DAO
|
||||
dao.wallet.receive.daoInfo.button=Μάθε περισσότερα για τον Bisq DAO
|
||||
dao.wallet.receive.daoTestnetInfo=The mainnet Bisq DAO is not launched yet but you can learn about the Bisq DAO by running it on testnet.
|
||||
dao.wallet.receive.daoTestnetInfo.button=How to run the Bisq DAO on our testnet
|
||||
dao.wallet.receive.daoContributorInfo=If you have contributed to Bisq please use the BSQ address below and make a request for taking part of the BSQ genesis distribution.
|
||||
|
@ -1549,7 +1550,7 @@ dao.wallet.receive.daoContributorInfo.button=How to be part of the BSQ genesis d
|
|||
|
||||
dao.wallet.send.sendFunds=Αποστολή κεφαλαίων
|
||||
dao.wallet.send.sendBtcFunds=Send non-BSQ funds (BTC)
|
||||
dao.wallet.send.amount=Amount in BSQ
|
||||
dao.wallet.send.amount=Ποσό σε BSQ
|
||||
dao.wallet.send.btcAmount=Amount in BTC (non-BSQ funds)
|
||||
dao.wallet.send.setAmount=Όρισε ποσό ανάληψης (ελάχιστο ποσό {0})
|
||||
dao.wallet.send.setBtcAmount=Set amount in BTC to withdraw (min. amount is {0})
|
||||
|
@ -1557,10 +1558,10 @@ dao.wallet.send.receiverAddress=Receiver's BSQ address
|
|||
dao.wallet.send.receiverBtcAddress=Receiver's BTC address
|
||||
dao.wallet.send.setDestinationAddress=Συμπλήρωσε τη διεύθυνση προορισμού
|
||||
dao.wallet.send.send=Αποστολή κεφαλαίων BSQ
|
||||
dao.wallet.send.sendBtc=Send BTC funds
|
||||
dao.wallet.send.sendBtc=Αποστολή κεφαλαίων BTC
|
||||
dao.wallet.send.sendFunds.headline=Επιβεβαίωση αίτησης ανάληψης
|
||||
dao.wallet.send.sendFunds.details=Αποστολή: {0}\nΔιεύθυνση παραλαβής: {1}\nΑπαιτούμενη αμοιβή συναλλαγής: {2} ({3} satoshis/byte)\nΜέγεθος συναλλαγής: {4} Kb\n\nΟ παραλήπτης θα λάβει: {5}\n\nΕίσαι σίγουρος πως θέλεις να κάνεις ανάληψη αυτού του ποσού;
|
||||
dao.wallet.chainHeightSynced=Latest verified block: {0}
|
||||
dao.wallet.chainHeightSynced=Τελευταίο επιβεβαιωμένο block: {0}
|
||||
dao.wallet.chainHeightSyncing=Awaiting blocks... Verified {0} blocks out of {1}
|
||||
dao.wallet.tx.type=Τύπος
|
||||
|
||||
|
@ -1603,6 +1604,7 @@ dao.tx.type.enum.PROOF_OF_BURN=Proof of burn
|
|||
# suppress inspection "UnusedProperty"
|
||||
dao.tx.type.enum.IRREGULAR=Irregular
|
||||
|
||||
dao.tx.withdrawnFromWallet=BTC withdrawn from wallet
|
||||
dao.tx.issuanceFromCompReq=Αίτημα/έκδοση αποζημίωσης
|
||||
dao.tx.issuanceFromCompReq.tooltip=Αίτημα αποζημίωσης το οποίο οδήγησε σε έκδοση νέων BSQ.\nΗμερομηνία έκδοσης: {0}
|
||||
dao.tx.issuanceFromReimbursement=Reimbursement request/issuance
|
||||
|
@ -1611,10 +1613,15 @@ dao.proposal.create.missingBsqFunds=You don''t have sufficient BSQ funds for cre
|
|||
|
||||
dao.proposal.create.missingBsqFundsForBond=You don''t have sufficient BSQ funds for this role. You can still publish this proposal, but you''ll need the full BSQ amount required for this role if it gets accepted. \nMissing: {0}
|
||||
|
||||
dao.proposal.create.missingMinerFeeFunds=You don''t have sufficient BTC funds for creating the proposal transaction. Any BSQ transaction require also a miner fee in BTC.\nMissing: {0}
|
||||
dao.proposal.create.missingMinerFeeFunds=You don''t have sufficient BTC funds for creating the proposal transaction. All BSQ transactions require a miner fee in BTC.\nMissing: {0}
|
||||
|
||||
dao.proposal.create.missingIssuanceFunds=You don''t have sufficient BTC funds for creating the proposal transaction. All BSQ transactions require a miner fee in BTC, and issuance transactions also require BTC for the requested BSQ amount ({0} Satoshis/BSQ).\nMissing: {1}
|
||||
|
||||
dao.feeTx.confirm=Επιβεβαίωση συναλλαγής {0}
|
||||
dao.feeTx.confirm.details={0} fee: {1}\nMining fee: {2} ({3} Satoshis/byte)\nTransaction size: {4} Kb\n\nAre you sure you want to publish the {5} transaction?
|
||||
|
||||
dao.feeTx.issuanceProposal.confirm.details={0} fee: {1}\nBTC needed for BSQ issuance: {2} ({3} Satoshis/BSQ)\nMining fee: {4} ({5} Satoshis/byte)\nTransaction size: {6} Kb\n\nIf your request is approved, you will receive the amount you requested net of the 2 BSQ proposal fee.\n\nAre you sure you want to publish the {7} transaction?
|
||||
|
||||
dao.news.bisqDAO.title=THE BISQ DAO
|
||||
dao.news.bisqDAO.description=Just as the Bisq exchange is decentralized and censorship-resistant, so is its governance model - and the Bisq DAO and BSQ token are the tools that make it possible.
|
||||
dao.news.bisqDAO.readMoreLink=Learn More About the Bisq DAO
|
||||
|
@ -1641,7 +1648,7 @@ dao.monitor.proposals=Proposals state
|
|||
dao.monitor.blindVotes=Blind votes state
|
||||
|
||||
dao.monitor.table.peers=Peers
|
||||
dao.monitor.table.conflicts=Conflicts
|
||||
dao.monitor.table.conflicts=Διενέξεις
|
||||
dao.monitor.state=Κατάσταση
|
||||
dao.monitor.requestAlHashes=Request all hashes
|
||||
dao.monitor.resync=Resync DAO state
|
||||
|
@ -1946,6 +1953,8 @@ popup.warning.nodeBanned=Ένας από τους κόμβους {0} απαγο
|
|||
popup.warning.priceRelay=αναμετάδοση τιμής
|
||||
popup.warning.seed=Λέξεις seed
|
||||
|
||||
popup.warning.burnBTC=This transaction is not possible, as the mining fees of {0} would exceed the amount to transfer of {1}. Please wait until the mining fees are low again or until you''ve accumulated more BTC to transfer.
|
||||
|
||||
popup.info.securityDepositInfo=To ensure both traders follow the trade protocol, both traders need to pay a security deposit.\n\nThis deposit is kept in your trade wallet until your trade has been successfully completed, and then it's refunded to you.\n\nPlease note: if you're creating a new offer, Bisq needs to be running for another trader to take it. To keep your offers online, keep Bisq running and make sure this computer remains online too (i.e., make sure it doesn't switch to standby mode...monitor standby is fine).
|
||||
|
||||
popup.info.cashDepositInfo=Βεβαιώσου πως έχεις υποκατάστημα τράπεζας στην περιοχή σου όπου μπορείς να κάνεις την κατάθεση.\nBIC/SWIFT τράπεζας πωλητή: {0}.
|
||||
|
|
|
@ -318,12 +318,12 @@ offerbook.filterByPaymentMethod=Filtrar por método de pago
|
|||
offerbook.nrOffers=Número de ofertas: {0}
|
||||
offerbook.volume={0} (min - max)
|
||||
|
||||
offerbook.createOfferToBuy=Create new offer to buy {0}
|
||||
offerbook.createOfferToSell=Create new offer to sell {0}
|
||||
offerbook.createOfferToBuy.withFiat=Create new offer to buy {0} with {1}
|
||||
offerbook.createOfferToSell.forFiat=Create new offer to sell {0} for {1}
|
||||
offerbook.createOfferToBuy.withCrypto=Create new offer to sell {0} (buy {1})
|
||||
offerbook.createOfferToSell.forCrypto=Create new offer to buy {0} (sell {1})
|
||||
offerbook.createOfferToBuy=Crear nueva oferta para comprar {0}
|
||||
offerbook.createOfferToSell=Crear nueva oferta para vender {0}
|
||||
offerbook.createOfferToBuy.withFiat=Crear nueva oferta para comprar {0} con {1}
|
||||
offerbook.createOfferToSell.forFiat=Crear nueva oferta para vender {0} por {1}
|
||||
offerbook.createOfferToBuy.withCrypto=Crear nueva oferta para vender {0} (comprar {1})
|
||||
offerbook.createOfferToSell.forCrypto=Crear nueva oferta para comprar {0} (vender {1})
|
||||
|
||||
offerbook.takeOfferButton.tooltip=Tomar oferta {0}
|
||||
offerbook.yesCreateOffer=Sí, crear oferta
|
||||
|
@ -739,6 +739,7 @@ funds.tx.unknown=Razón desconocida: {0}
|
|||
funds.tx.noFundsFromDispute=Sin devolución de disputa
|
||||
funds.tx.receivedFunds=Fondos recibidos
|
||||
funds.tx.withdrawnFromWallet=Retirar desde el monedero
|
||||
funds.tx.withdrawnFromBSQWallet=BTC retirados desde el monedero BSQ
|
||||
funds.tx.noTxAvailable=Sin transacciones disponibles
|
||||
funds.tx.revert=Revertir
|
||||
funds.tx.txSent=La transacción se ha enviado exitosamente a una nueva dirección en la billetera Bisq local.
|
||||
|
@ -1057,7 +1058,7 @@ account.notifications.priceAlert.warning.lowerPriceTooHigh=El precio inferior de
|
|||
# DAO
|
||||
####################################################################
|
||||
|
||||
dao.tab.factsAndFigures=Facts & Figures
|
||||
dao.tab.factsAndFigures=Hechos y figuras
|
||||
dao.tab.bsqWallet=Monedero BSQ
|
||||
dao.tab.proposals=Gobernancia
|
||||
dao.tab.bonding=Obligaciones
|
||||
|
@ -1199,7 +1200,7 @@ dao.param.MAX_TRADE_LIMIT=Límite máximo de intercambio en BTC
|
|||
# suppress inspection "UnusedProperty"
|
||||
dao.param.BONDED_ROLE_FACTOR=Unidad de factor de rol bonificado en BSQ
|
||||
# suppress inspection "UnusedProperty"
|
||||
dao.param.ISSUANCE_LIMIT=Issuance limit per cycle in BSQ
|
||||
dao.param.ISSUANCE_LIMIT=Límite de emisión por ciclo en BSQ
|
||||
|
||||
dao.param.currentValue=Valor actual: {0}
|
||||
dao.param.blocks={0} bloques
|
||||
|
@ -1475,10 +1476,10 @@ dao.proposal.myVote.removeMyVote=Ignorar propuesta
|
|||
dao.proposal.myVote.merit=Peso del voto de BSQ adquiridos
|
||||
dao.proposal.myVote.stake=Peso de voto desde stake
|
||||
dao.proposal.myVote.revealTxId=ID de transacción de revelado de voto
|
||||
dao.proposal.myVote.stake.prompt=Max. available stake for voting: {0}
|
||||
dao.proposal.votes.header=Set stake for voting and publish your votes
|
||||
dao.proposal.myVote.button=Publish votes
|
||||
dao.proposal.myVote.setStake.description=After voting on all proposals you have to set your stake for voting by locking up BSQ. The more BSQ you lock up, the more weight your vote will have. \n\nBSQ locked up for voting will be unlocked again during the vote reveal phase.
|
||||
dao.proposal.myVote.stake.prompt=Cantidad máxima disponible para votaciones: {0}
|
||||
dao.proposal.votes.header=Establecer cantidad para votaciones y publicar sus votos
|
||||
dao.proposal.myVote.button=Publicar votos
|
||||
dao.proposal.myVote.setStake.description=Después de votar en todas las propuestas tiene que establecer su cantidad para votaciones bloqueando BSQ. Cuantos más BSQ bloquee, más peso tendrá su voto.\n\nLos BSQ bloqueados para votaciones serán desbloqueados de nuevo durante la fase de revelado de votación.
|
||||
dao.proposal.create.selectProposalType=Seleccionar tipo de propuesta
|
||||
dao.proposal.create.phase.inactive=Por favor espere a la próxima fase de propuesta
|
||||
dao.proposal.create.proposalType=Tipo de propuesta
|
||||
|
@ -1603,6 +1604,7 @@ dao.tx.type.enum.PROOF_OF_BURN=Prueba de quemado
|
|||
# suppress inspection "UnusedProperty"
|
||||
dao.tx.type.enum.IRREGULAR=Irregular
|
||||
|
||||
dao.tx.withdrawnFromWallet=BTC retirados desde el monedero
|
||||
dao.tx.issuanceFromCompReq=Solicitud/emisión de compensación
|
||||
dao.tx.issuanceFromCompReq.tooltip=Solicitud de compensación que lleva a emitir nuevos BSQ.\nFecha de emisión: {0}
|
||||
dao.tx.issuanceFromReimbursement=Solicitud de reembolso/emisión
|
||||
|
@ -1611,10 +1613,15 @@ dao.proposal.create.missingBsqFunds=No tiene suficientes fondos para crear la pr
|
|||
|
||||
dao.proposal.create.missingBsqFundsForBond=No tiene suficientes fondos BSQ para este rol. Aún puede publicar esta propuesta, pero necesitará la cantidad BSQ requerida para este rol si es aceptada.\nSe necesitan: {0}
|
||||
|
||||
dao.proposal.create.missingMinerFeeFunds=No tiene suficientes fondos BTC para crear la propuesta de transacción. Cualquier transacción BSQ requiere también una tasa de minado en BTC.\nSe necesitan: {0}
|
||||
dao.proposal.create.missingMinerFeeFunds=No tiene suficientes fondos BTC para crear la transacción propuesta. Todas las transacciones BSQ requieren una tasa de minado en BTC.\nNecesarios: {0}
|
||||
|
||||
dao.proposal.create.missingIssuanceFunds=No tiene suficientes fondos BTC para crear la transacción propuesta. Todas las transacciones BSQ requieren una tasa de minado en BTC, y la emisión de transacciones también requieren BTC para la cantidad de BSQ solicitada ({0} Satoshis/BSQ).\nNecesarios: {1}
|
||||
|
||||
dao.feeTx.confirm=Confirmar transacción {0}
|
||||
dao.feeTx.confirm.details={0} tasa: {1}\nTasa de minado: {2} ({3} Satoshis/byte)\nTamaño de la transacción: {4} Kb\n\nEstá seguro de que quire publicar la transacción {5}?
|
||||
|
||||
dao.feeTx.issuanceProposal.confirm.details={0} tasa: {1}\nBTC necesarios para emisión BSQ: {2} ({3} Satoshis/BSQ)\nTasa de minado: {4} ({5} Satoshis/byte)\nTamaño de transacción: {6} Kb\n\nSi la solicitud se aprueba, recibirá la cantidad neta que ha solicitado de las 2 tasa de propuesta que ha solicitado.\nEstá seguro de que quiere publicar la transacción {7}?
|
||||
|
||||
dao.news.bisqDAO.title=La DAO BISQ
|
||||
dao.news.bisqDAO.description=Tal como el exchange Bisq es descentralizado y resistente a la censura, lo es su modelo de governanza - y la DAO BISQ y el token BSQ son herramientas que lo hacen posible.
|
||||
dao.news.bisqDAO.readMoreLink=Aprender más acerca de la DAO Bisq.
|
||||
|
@ -1656,10 +1663,10 @@ dao.monitor.daoState.table.blockHeight=Altura de bloque
|
|||
dao.monitor.daoState.table.hash=Estado de hashes de DAO
|
||||
dao.monitor.daoState.table.prev=Hash previo
|
||||
dao.monitor.daoState.conflictTable.headline=Estado de hashes DAO desde pares en conflicto
|
||||
dao.monitor.daoState.utxoConflicts=UTXO conflicts
|
||||
dao.monitor.daoState.utxoConflicts.blockHeight=Block height: {0}
|
||||
dao.monitor.daoState.utxoConflicts.sumUtxo=Sum of all UTXO: {0} BSQ
|
||||
dao.monitor.daoState.utxoConflicts.sumBsq=Sum of all BSQ: {0} BSQ
|
||||
dao.monitor.daoState.utxoConflicts=conflictos UTXO
|
||||
dao.monitor.daoState.utxoConflicts.blockHeight=Altura de bloque: {0}
|
||||
dao.monitor.daoState.utxoConflicts.sumUtxo=Suma de todas las UTXO: {0} BSQ
|
||||
dao.monitor.daoState.utxoConflicts.sumBsq=Suma de todlas las BSQ: {0} BSQ
|
||||
|
||||
dao.monitor.proposal.headline=Estado de propuestas
|
||||
dao.monitor.proposal.daoStateInSync=El estado de sus propuestas local está en consenso con la red
|
||||
|
@ -1681,27 +1688,27 @@ dao.monitor.blindVote.table.hash=Estado de hash de voto a ciegas
|
|||
dao.monitor.blindVote.table.prev=Hash previo
|
||||
dao.monitor.blindVote.table.numBlindVotes=Número de votos a ciegas
|
||||
|
||||
dao.factsAndFigures.menuItem.supply=BSQ Supply
|
||||
dao.factsAndFigures.menuItem.transactions=BSQ Transactions
|
||||
dao.factsAndFigures.menuItem.supply=Oferta BSQ
|
||||
dao.factsAndFigures.menuItem.transactions=Transacciones BSQ
|
||||
|
||||
dao.factsAndFigures.dashboard.marketPrice=Datos de mercad
|
||||
dao.factsAndFigures.dashboard.price=Último precio intercambio BSQ/BTC (en Bisq)
|
||||
dao.factsAndFigures.dashboard.marketCap=Capitalización de mercado (basado en el precio de intercambio)
|
||||
dao.factsAndFigures.dashboard.availableAmount=BSQ totales disponibles
|
||||
|
||||
dao.factsAndFigures.supply.issued=BSQ issued
|
||||
dao.factsAndFigures.supply.issued=BSQ emitidos
|
||||
dao.factsAndFigures.supply.genesisIssueAmount=BSQ emitidos en la transacción génesis
|
||||
dao.factsAndFigures.supply.compRequestIssueAmount=BSQ emitidos para solicitudes de compensación
|
||||
dao.factsAndFigures.supply.reimbursementAmount=BSQ emitidos para solicitudes de reembolso
|
||||
|
||||
dao.factsAndFigures.supply.burnt=BSQ burnt
|
||||
dao.factsAndFigures.supply.burnt=BSQ quemados
|
||||
|
||||
dao.factsAndFigures.supply.locked=Estado global de BSQ bloqueados
|
||||
dao.factsAndFigures.supply.totalLockedUpAmount=Bloqueados en obligaciones
|
||||
dao.factsAndFigures.supply.totalUnlockingAmount=Desbloqueando BSQ de bonos
|
||||
dao.factsAndFigures.supply.totalUnlockedAmount=BSQ desbloqueados de bonos
|
||||
dao.factsAndFigures.supply.totalConfiscatedAmount=BSQ confiscados de bonos
|
||||
dao.factsAndFigures.supply.invalidTxs=Burned BSQ (invalid transactions)
|
||||
dao.factsAndFigures.supply.invalidTxs=BSQ quemados (transacciones inválidas)
|
||||
dao.factsAndFigures.supply.burntAmount=BSQ quemados (tasas)
|
||||
|
||||
dao.factsAndFigures.transactions.genesis=Transacción génesis
|
||||
|
@ -1713,8 +1720,8 @@ dao.factsAndFigures.transactions.utxo=Número de todos los outputs de transaccio
|
|||
dao.factsAndFigures.transactions.compensationIssuanceTx=Número de todas las transacciones emitidas de solicitudes de compensación
|
||||
dao.factsAndFigures.transactions.reimbursementIssuanceTx=Número de todas las transacciones emitidas de solicitud de reembolso
|
||||
dao.factsAndFigures.transactions.burntTx=Número de todas las transacciones de tasa de pago
|
||||
dao.factsAndFigures.transactions.invalidTx=No. of all invalid transactions
|
||||
dao.factsAndFigures.transactions.irregularTx=No. of all irregular transactions
|
||||
dao.factsAndFigures.transactions.invalidTx=Número de todas las transacciones inválidas
|
||||
dao.factsAndFigures.transactions.irregularTx=Número de todas las transacciones irregulares
|
||||
|
||||
####################################################################
|
||||
# Windows
|
||||
|
@ -1946,6 +1953,8 @@ popup.warning.nodeBanned=Uno de los nodos {0} ha sido baneado. Por favor reinici
|
|||
popup.warning.priceRelay=retransmisión de precios
|
||||
popup.warning.seed=Semilla
|
||||
|
||||
popup.warning.burnBTC=Esta transacción no es posible, ya que las tasas de minado de {0} excederían la cantidad a transferir de {1}. Por favor, espere a que las tasas de minado bajen o hasta que haya acumulado más BTC para transferir.
|
||||
|
||||
popup.info.securityDepositInfo=Para asegurarse de que ambos comerciantes siguen el protocolo de intercambio, necesitan pagar un depósito de seguridad.\n\nEl depósito se guarda en el monedor de intercambio hasta que el intercambio se complete, y entonces se devuelve.\n\nPor favor, tenga en cuenta que al crear una nueva oferta, Bisq necesita estar en ejecución para que otro comerciante la tome. Para mantener sus ofertas online, mantenga Bisq funcionando y asegúrese de que su computadora está online también (v.g. asegúrese de que no pasa a modo standby...el monitor en standby no es problema!)
|
||||
|
||||
popup.info.cashDepositInfo=Por favor asegúrese de que tiene una oficina bancaria donde pueda hacer el depósito de efectivo.\nEl banco con ID (BIC/SWIFT) de el banco del vendedor es: {0}
|
||||
|
@ -2117,11 +2126,11 @@ BTC_TESTNET=Red de prueba de Bitcoin
|
|||
# suppress inspection "UnusedProperty"
|
||||
BTC_REGTEST=Regtest Bitcoin
|
||||
# suppress inspection "UnusedProperty"
|
||||
BTC_DAO_TESTNET=Bitcoin DAO Testnet (deprecated)
|
||||
BTC_DAO_TESTNET=Testnet de Bitcoin DAO (depreciada)
|
||||
# suppress inspection "UnusedProperty"
|
||||
BTC_DAO_BETANET=Bitcoin DAO Betanet (Bitcoin Mainnet)
|
||||
# suppress inspection "UnusedProperty"
|
||||
BTC_DAO_REGTEST=Bitcoin DAO Regtest
|
||||
BTC_DAO_REGTEST=Regtest de Bitcoin DAO
|
||||
|
||||
time.year=Año
|
||||
time.month=Mes
|
||||
|
|
|
@ -739,6 +739,7 @@ funds.tx.unknown=دلیل ناشناخته: {0}
|
|||
funds.tx.noFundsFromDispute=عدم بازپرداخت از مناقشه
|
||||
funds.tx.receivedFunds=وجوه دریافت شده
|
||||
funds.tx.withdrawnFromWallet=برداشت شده از کیف پول
|
||||
funds.tx.withdrawnFromBSQWallet=BTC withdrawn from BSQ wallet
|
||||
funds.tx.noTxAvailable=هیچ تراکنشی موجود نیست
|
||||
funds.tx.revert=عودت
|
||||
funds.tx.txSent=تراکنش به طور موفقیت آمیز به یک آدرس جدید در کیف پول محلی Bisq ارسال شد.
|
||||
|
@ -1603,6 +1604,7 @@ dao.tx.type.enum.PROOF_OF_BURN=اثبات امحا
|
|||
# suppress inspection "UnusedProperty"
|
||||
dao.tx.type.enum.IRREGULAR=Irregular
|
||||
|
||||
dao.tx.withdrawnFromWallet=BTC withdrawn from wallet
|
||||
dao.tx.issuanceFromCompReq=درخواست/صدور خسارت
|
||||
dao.tx.issuanceFromCompReq.tooltip=درخواست خسارت که منجر به صدور BSQ جدید میشود.\nتاریخ صدور: {0}
|
||||
dao.tx.issuanceFromReimbursement=درخواست/صدور بازپرداخت
|
||||
|
@ -1611,10 +1613,15 @@ dao.proposal.create.missingBsqFunds=You don''t have sufficient BSQ funds for cre
|
|||
|
||||
dao.proposal.create.missingBsqFundsForBond=You don''t have sufficient BSQ funds for this role. You can still publish this proposal, but you''ll need the full BSQ amount required for this role if it gets accepted. \nMissing: {0}
|
||||
|
||||
dao.proposal.create.missingMinerFeeFunds=You don''t have sufficient BTC funds for creating the proposal transaction. Any BSQ transaction require also a miner fee in BTC.\nMissing: {0}
|
||||
dao.proposal.create.missingMinerFeeFunds=You don''t have sufficient BTC funds for creating the proposal transaction. All BSQ transactions require a miner fee in BTC.\nMissing: {0}
|
||||
|
||||
dao.proposal.create.missingIssuanceFunds=You don''t have sufficient BTC funds for creating the proposal transaction. All BSQ transactions require a miner fee in BTC, and issuance transactions also require BTC for the requested BSQ amount ({0} Satoshis/BSQ).\nMissing: {1}
|
||||
|
||||
dao.feeTx.confirm=تایید {0} تراکنش
|
||||
dao.feeTx.confirm.details=کارمزد {0}: {1}\nکارمزد استخراج: {2} ({3} ساتوشی بر بایت)\nاندازه تراکنش: {4} Kb\n\nآیا از انتشار تراکنش {5} اطمینان دارید؟
|
||||
|
||||
dao.feeTx.issuanceProposal.confirm.details={0} fee: {1}\nBTC needed for BSQ issuance: {2} ({3} Satoshis/BSQ)\nMining fee: {4} ({5} Satoshis/byte)\nTransaction size: {6} Kb\n\nIf your request is approved, you will receive the amount you requested net of the 2 BSQ proposal fee.\n\nAre you sure you want to publish the {7} transaction?
|
||||
|
||||
dao.news.bisqDAO.title=THE BISQ DAO
|
||||
dao.news.bisqDAO.description=Just as the Bisq exchange is decentralized and censorship-resistant, so is its governance model - and the Bisq DAO and BSQ token are the tools that make it possible.
|
||||
dao.news.bisqDAO.readMoreLink=Learn More About the Bisq DAO
|
||||
|
@ -1946,6 +1953,8 @@ popup.warning.nodeBanned=یکی از گره های {0} مسدود شده است.
|
|||
popup.warning.priceRelay=رله قیمت
|
||||
popup.warning.seed=دانه
|
||||
|
||||
popup.warning.burnBTC=This transaction is not possible, as the mining fees of {0} would exceed the amount to transfer of {1}. Please wait until the mining fees are low again or until you''ve accumulated more BTC to transfer.
|
||||
|
||||
popup.info.securityDepositInfo=برای اطمینان از اینکه هر دو معامله گر پروتکل معامله را رعایت میکنند، هر دو معامله گر باید مبلغی را تحت عنوان سپرده اطمینان پرداخت کنند.\n\nاین سپرده در کیفپول معامله شما نگهداری میشود و زمانی که معامله شما با موفقیت انجام شد به خود شما بازگردانده خواهد شد.\n\nلطفا توجه کنید: اگر میخواهید یک پیشنهاد جدید ایجاد کنید، Bisq باید برای در سمت معامله دیگر اجرا باشد تا بتوانند آن را بپذیرد. برای اینکه پیشنهادات شما برخط بمانند، بگذارید Bisq در حال اجرابماند و همچنین مطمئن شوید که این کامپیوتر به اینترنت متصل است. (به عنوان مثال مطمئن شوید که به حالت آماده باش نمیرود.. البته حالت آماده باش برای نمایشگر ایرادی ندارد).
|
||||
|
||||
popup.info.cashDepositInfo=لطفا مطمئن شوید که شما یک شعبه بانک در منطقه خود دارید تا بتوانید سپرده نقدی را بپردازید. شناسه بانکی (BIC/SWIFT) بانک فروشنده: {0}.
|
||||
|
|
|
@ -739,6 +739,7 @@ funds.tx.unknown=Raison inconnue: {0}
|
|||
funds.tx.noFundsFromDispute=Aucun remboursement pour dispute
|
||||
funds.tx.receivedFunds=Fonds reçus
|
||||
funds.tx.withdrawnFromWallet=Retiré depuis le portefeuille
|
||||
funds.tx.withdrawnFromBSQWallet=BTC withdrawn from BSQ wallet
|
||||
funds.tx.noTxAvailable=Aucune transaction disponible
|
||||
funds.tx.revert=Défaire
|
||||
funds.tx.txSent=Transaction envoyée avec succès à la nouvelle adresse dans le portefeuille local bisq.
|
||||
|
@ -1603,6 +1604,7 @@ dao.tx.type.enum.PROOF_OF_BURN=Proof of burn
|
|||
# suppress inspection "UnusedProperty"
|
||||
dao.tx.type.enum.IRREGULAR=Irregular
|
||||
|
||||
dao.tx.withdrawnFromWallet=BTC withdrawn from wallet
|
||||
dao.tx.issuanceFromCompReq=Compensation request/issuance
|
||||
dao.tx.issuanceFromCompReq.tooltip=Compensation request which led to an issuance of new BSQ.\nIssuance date: {0}
|
||||
dao.tx.issuanceFromReimbursement=Reimbursement request/issuance
|
||||
|
@ -1611,10 +1613,15 @@ dao.proposal.create.missingBsqFunds=You don''t have sufficient BSQ funds for cre
|
|||
|
||||
dao.proposal.create.missingBsqFundsForBond=You don''t have sufficient BSQ funds for this role. You can still publish this proposal, but you''ll need the full BSQ amount required for this role if it gets accepted. \nMissing: {0}
|
||||
|
||||
dao.proposal.create.missingMinerFeeFunds=You don''t have sufficient BTC funds for creating the proposal transaction. Any BSQ transaction require also a miner fee in BTC.\nMissing: {0}
|
||||
dao.proposal.create.missingMinerFeeFunds=You don''t have sufficient BTC funds for creating the proposal transaction. All BSQ transactions require a miner fee in BTC.\nMissing: {0}
|
||||
|
||||
dao.proposal.create.missingIssuanceFunds=You don''t have sufficient BTC funds for creating the proposal transaction. All BSQ transactions require a miner fee in BTC, and issuance transactions also require BTC for the requested BSQ amount ({0} Satoshis/BSQ).\nMissing: {1}
|
||||
|
||||
dao.feeTx.confirm=Confirm {0} transaction
|
||||
dao.feeTx.confirm.details={0} fee: {1}\nMining fee: {2} ({3} Satoshis/byte)\nTransaction size: {4} Kb\n\nAre you sure you want to publish the {5} transaction?
|
||||
|
||||
dao.feeTx.issuanceProposal.confirm.details={0} fee: {1}\nBTC needed for BSQ issuance: {2} ({3} Satoshis/BSQ)\nMining fee: {4} ({5} Satoshis/byte)\nTransaction size: {6} Kb\n\nIf your request is approved, you will receive the amount you requested net of the 2 BSQ proposal fee.\n\nAre you sure you want to publish the {7} transaction?
|
||||
|
||||
dao.news.bisqDAO.title=THE BISQ DAO
|
||||
dao.news.bisqDAO.description=Just as the Bisq exchange is decentralized and censorship-resistant, so is its governance model - and the Bisq DAO and BSQ token are the tools that make it possible.
|
||||
dao.news.bisqDAO.readMoreLink=Learn More About the Bisq DAO
|
||||
|
@ -1946,6 +1953,8 @@ popup.warning.nodeBanned=One of the {0} nodes got banned. Please restart your ap
|
|||
popup.warning.priceRelay=price relay
|
||||
popup.warning.seed=seed
|
||||
|
||||
popup.warning.burnBTC=This transaction is not possible, as the mining fees of {0} would exceed the amount to transfer of {1}. Please wait until the mining fees are low again or until you''ve accumulated more BTC to transfer.
|
||||
|
||||
popup.info.securityDepositInfo=To ensure both traders follow the trade protocol, both traders need to pay a security deposit.\n\nThis deposit is kept in your trade wallet until your trade has been successfully completed, and then it's refunded to you.\n\nPlease note: if you're creating a new offer, Bisq needs to be running for another trader to take it. To keep your offers online, keep Bisq running and make sure this computer remains online too (i.e., make sure it doesn't switch to standby mode...monitor standby is fine).
|
||||
|
||||
popup.info.cashDepositInfo=Please be sure that you have a bank branch in your area to be able to make the cash deposit.\nThe bank ID (BIC/SWIFT) of the seller''s bank is: {0}.
|
||||
|
|
|
@ -739,6 +739,7 @@ funds.tx.unknown=Ismeretlen ok: {0}
|
|||
funds.tx.noFundsFromDispute=Nincs visszatérítés a vitából
|
||||
funds.tx.receivedFunds=Pénz részesedések
|
||||
funds.tx.withdrawnFromWallet=Visszavonva a pénztárcából
|
||||
funds.tx.withdrawnFromBSQWallet=BTC withdrawn from BSQ wallet
|
||||
funds.tx.noTxAvailable=Nincs hozzáférhető tranzakció
|
||||
funds.tx.revert=Visszaszállás
|
||||
funds.tx.txSent=Tranzakció sikeresen elküldve egy új címre a helyi Bisq pénztárcában.
|
||||
|
@ -1603,6 +1604,7 @@ dao.tx.type.enum.PROOF_OF_BURN=Proof of burn
|
|||
# suppress inspection "UnusedProperty"
|
||||
dao.tx.type.enum.IRREGULAR=Irregular
|
||||
|
||||
dao.tx.withdrawnFromWallet=BTC withdrawn from wallet
|
||||
dao.tx.issuanceFromCompReq=Compensation request/issuance
|
||||
dao.tx.issuanceFromCompReq.tooltip=Compensation request which led to an issuance of new BSQ.\nIssuance date: {0}
|
||||
dao.tx.issuanceFromReimbursement=Reimbursement request/issuance
|
||||
|
@ -1611,10 +1613,15 @@ dao.proposal.create.missingBsqFunds=You don''t have sufficient BSQ funds for cre
|
|||
|
||||
dao.proposal.create.missingBsqFundsForBond=You don''t have sufficient BSQ funds for this role. You can still publish this proposal, but you''ll need the full BSQ amount required for this role if it gets accepted. \nMissing: {0}
|
||||
|
||||
dao.proposal.create.missingMinerFeeFunds=You don''t have sufficient BTC funds for creating the proposal transaction. Any BSQ transaction require also a miner fee in BTC.\nMissing: {0}
|
||||
dao.proposal.create.missingMinerFeeFunds=You don''t have sufficient BTC funds for creating the proposal transaction. All BSQ transactions require a miner fee in BTC.\nMissing: {0}
|
||||
|
||||
dao.proposal.create.missingIssuanceFunds=You don''t have sufficient BTC funds for creating the proposal transaction. All BSQ transactions require a miner fee in BTC, and issuance transactions also require BTC for the requested BSQ amount ({0} Satoshis/BSQ).\nMissing: {1}
|
||||
|
||||
dao.feeTx.confirm=Confirm {0} transaction
|
||||
dao.feeTx.confirm.details={0} fee: {1}\nMining fee: {2} ({3} Satoshis/byte)\nTransaction size: {4} Kb\n\nAre you sure you want to publish the {5} transaction?
|
||||
|
||||
dao.feeTx.issuanceProposal.confirm.details={0} fee: {1}\nBTC needed for BSQ issuance: {2} ({3} Satoshis/BSQ)\nMining fee: {4} ({5} Satoshis/byte)\nTransaction size: {6} Kb\n\nIf your request is approved, you will receive the amount you requested net of the 2 BSQ proposal fee.\n\nAre you sure you want to publish the {7} transaction?
|
||||
|
||||
dao.news.bisqDAO.title=THE BISQ DAO
|
||||
dao.news.bisqDAO.description=Just as the Bisq exchange is decentralized and censorship-resistant, so is its governance model - and the Bisq DAO and BSQ token are the tools that make it possible.
|
||||
dao.news.bisqDAO.readMoreLink=Learn More About the Bisq DAO
|
||||
|
@ -1946,6 +1953,8 @@ popup.warning.nodeBanned=A {0} csomópontok egyike tiltva lett. Kérjük indíts
|
|||
popup.warning.priceRelay=árjelentés
|
||||
popup.warning.seed=mag
|
||||
|
||||
popup.warning.burnBTC=This transaction is not possible, as the mining fees of {0} would exceed the amount to transfer of {1}. Please wait until the mining fees are low again or until you''ve accumulated more BTC to transfer.
|
||||
|
||||
popup.info.securityDepositInfo=To ensure both traders follow the trade protocol, both traders need to pay a security deposit.\n\nThis deposit is kept in your trade wallet until your trade has been successfully completed, and then it's refunded to you.\n\nPlease note: if you're creating a new offer, Bisq needs to be running for another trader to take it. To keep your offers online, keep Bisq running and make sure this computer remains online too (i.e., make sure it doesn't switch to standby mode...monitor standby is fine).
|
||||
|
||||
popup.info.cashDepositInfo=Please be sure that you have a bank branch in your area to be able to make the cash deposit.\nThe bank ID (BIC/SWIFT) of the seller''s bank is: {0}.
|
||||
|
|
|
@ -639,7 +639,7 @@ tradeFeedbackWindow.msg.part3=Obrigado por usar Bisq!
|
|||
|
||||
|
||||
daoTestingFeedbackWindow.title=Obrigado por testar a OAD do Bisq
|
||||
daoTestingFeedbackWindow.msg.part1=Tem 3 minutos para um breve questionário? Estamos oferecendo 20 BSQ para questionários completos.\nSeu feedback é crucial para garantir um bom lançamento na rede principal.
|
||||
daoTestingFeedbackWindow.msg.part1=Tem 3 minutos para um breve questionário? Estamos oferecendo 20 BSQ para questionários completos.\nSeu feedback é crucial para garantir um bom lançamento na mainnet.
|
||||
daoTestingFeedbackWindow.surveyLinkLabel=Preencher questionário
|
||||
daoTestingFeedbackWindow.msg.part2=Perguntas ou outros problemas? Discuta com os usuários e contribuidores do Bisq no fórum:
|
||||
daoTestingFeedbackWindow.forumLinkLabel=Visitar fórum
|
||||
|
@ -739,6 +739,7 @@ funds.tx.unknown=Razão desconhecida: {0}
|
|||
funds.tx.noFundsFromDispute=Nenhum reembolso de disputa
|
||||
funds.tx.receivedFunds=Fundos recebidos
|
||||
funds.tx.withdrawnFromWallet=Levantado da carteira
|
||||
funds.tx.withdrawnFromBSQWallet=BTC levantado da carteira BSQ
|
||||
funds.tx.noTxAvailable=Sem transações disponíveis
|
||||
funds.tx.revert=Reverter
|
||||
funds.tx.txSent=Transação enviada com sucesso para um novo endereço em sua carteira Bisq local.
|
||||
|
@ -836,11 +837,11 @@ settings.preferences.arbitrationLanguageWarning=Em caso de disputa, saiba que a
|
|||
settings.preferences.selectCurrencyNetwork=Selecionar rede
|
||||
setting.preferences.daoOptions=Opções da OAD
|
||||
setting.preferences.dao.resync.label=Reconstruir o estado da OAD à partir da tx genesis
|
||||
setting.preferences.dao.resync.button=Resincronizar
|
||||
setting.preferences.dao.resync.button=Re-sincronizar
|
||||
setting.preferences.dao.resync.popup=Após um reinício do programa, o estado de consenso do BSQ será reconstruído a partir da transação genesis.
|
||||
setting.preferences.dao.isDaoFullNode=Executar Bisq como nó completo OAD
|
||||
setting.preferences.dao.rpcUser=Nome de usuário de RPC
|
||||
setting.preferences.dao.rpcPw=Palavra-passe de RPC
|
||||
setting.preferences.dao.rpcPw=Senha de RPC
|
||||
setting.preferences.dao.fullNodeInfo=Para executar Bisq como nó completo da OAD, você precisa ter o Bitcoin Core sendo executado localmente e configurado com o RPC e outros requerimentos documentados em ''{0}''.
|
||||
setting.preferences.dao.fullNodeInfo.ok=Abrir página de documentos
|
||||
setting.preferences.dao.fullNodeInfo.cancel=Não, eu fico com o modo nó lite
|
||||
|
@ -880,10 +881,10 @@ settings.net.directPeer=Par (direto)
|
|||
settings.net.peer=Par
|
||||
settings.net.inbound=entrante
|
||||
settings.net.outbound=sainte
|
||||
settings.net.reSyncSPVChainLabel=Resincronizar corrente SPV
|
||||
settings.net.reSyncSPVChainButton=Remover ficheiro SPV e resincronizar
|
||||
settings.net.reSyncSPVSuccess=O ficheiro da corrente SPV será apagado na próxima inicialização. Você precisa reiniciar seu programa agora.\n\nApós a reinicialização, pode demorar um pouco para ressincronizar com a rede e você apenas verá todas as transações quando a ressincronização for concluída.\n\nPor favor, reinicie novamente após a conclusão da ressincronização, pois às vezes há inconsistências que resultam na exibição de saldos incorretos.
|
||||
settings.net.reSyncSPVAfterRestart=O ficheiro da corrente SPV foi apagado. Por favor, seja paciente. Pode demorar um pouco para ressincronizar com a rede.
|
||||
settings.net.reSyncSPVChainLabel=Re-sincronizar corrente SPV
|
||||
settings.net.reSyncSPVChainButton=Remover ficheiro SPV e re-sincronizar
|
||||
settings.net.reSyncSPVSuccess=O ficheiro da corrente SPV será apagado na próxima inicialização. Você precisa reiniciar seu programa agora.\n\nApós a reinicialização, pode demorar um pouco para re-sincronizar com a rede e você apenas verá todas as transações quando a re-sincronização for concluída.\n\nPor favor, reinicie novamente após a conclusão da re-sincronização, pois às vezes há inconsistências que resultam na exibição de saldos incorretos.
|
||||
settings.net.reSyncSPVAfterRestart=O ficheiro da corrente SPV foi apagado. Por favor, seja paciente. Pode demorar um pouco para re-sincronizar com a rede.
|
||||
settings.net.reSyncSPVAfterRestartCompleted=A resincronização concluiu. Por favor reiniciar o programa.
|
||||
settings.net.reSyncSPVFailed=Não foi possível remover o ficherio da corrente SPV\nErro: {0}
|
||||
setting.about.aboutBisq=Sobre Bisq
|
||||
|
@ -914,11 +915,11 @@ setting.about.subsystems.val=Versão da rede: {0}; Versão de mensagem P2P: {1};
|
|||
account.tab.arbitratorRegistration=Registo de árbitro
|
||||
account.tab.account=Conta
|
||||
account.info.headline=Bem vindo à sua conta Bisq
|
||||
account.info.msg=Aqui você pode adicionar contas de negociação para moedas nacionais e altcoins, selecionar árbitros e criar um backup da sua carteira e dos dados da sua conta.\n\nUma nova carteira Bitcoin foi criada na primeira vez que você iniciou o Bisq.\n\nNós recomendamos fortemente que você anote as palavras-semente da sua carteira Bitcoin (veja a aba no topo) e considere adicionar uma palavra-passe antes de financiar. Os depósitos e levantamentos de Bitcoin são geridos na secção \"Fundos\".\n\nNota de privacidade e segurança: como o Bisq é um mercado de câmbio descentralizado, todos os seus dados são mantidos no seu computador. Não há servidores, por isso não temos acesso à sua informação pessoal, os seus fundos ou até mesmo seu endereço IP. Dados como números de contas bancárias, endereços de altcoins e de Bitcoin, etc, são compartilhados apenas com o seu par de negociação para completar os negócios iniciados por você (no caso de uma disputa, o árbitro verá os mesmos dados que o seu par de negociação).
|
||||
account.info.msg=Aqui você pode adicionar contas de negociação para moedas nacionais e altcoins, selecionar árbitros e criar um backup da sua carteira e dos dados da sua conta.\n\nUma nova carteira Bitcoin foi criada na primeira vez que você iniciou o Bisq.\n\nNós recomendamos fortemente que você anote as palavras-semente da sua carteira Bitcoin (veja a aba no topo) e considere adicionar uma senha antes de financiar. Os depósitos e levantamentos de Bitcoin são geridos na secção \"Fundos\".\n\nNota de privacidade e segurança: como o Bisq é um mercado de câmbio descentralizado, todos os seus dados são mantidos no seu computador. Não há servidores, por isso não temos acesso à sua informação pessoal, os seus fundos ou até mesmo seu endereço IP. Dados como números de contas bancárias, endereços de altcoins e de Bitcoin, etc, são compartilhados apenas com o seu par de negociação para completar os negócios iniciados por você (no caso de uma disputa, o árbitro verá os mesmos dados que o seu par de negociação).
|
||||
|
||||
account.menu.paymentAccount=Contas de moedas nacionais
|
||||
account.menu.altCoinsAccountView=Contas de altcoins
|
||||
account.menu.password=Palavra-passe da carteira
|
||||
account.menu.password=Senha da carteira
|
||||
account.menu.seedWords=Semente da carteira
|
||||
account.menu.backup=Backup
|
||||
account.menu.notifications=Notificações
|
||||
|
@ -972,17 +973,17 @@ account.backup.openLogFile=Abrir ficheiro de log
|
|||
account.backup.success=Backup guardado com sucesso em:\n{0}
|
||||
account.backup.directoryNotAccessible=O diretório escolhido não é acessível. {0}
|
||||
|
||||
account.password.removePw.button=Remover palavra-passe
|
||||
account.password.removePw.headline=Remover proteção com palavra-passe da carteira
|
||||
account.password.setPw.button=Definir palavra-passe
|
||||
account.password.setPw.headline=Definir proteção de palavra-passe da carteira
|
||||
account.password.info=Com a proteção por palavra-passe, você precisará inserir a sua palavra-passe na inicialização do programa, ao levantar o bitcoin da sua carteira e ao restaurar a sua carteira a partir de palavras-semente.
|
||||
account.password.removePw.button=Remover senha
|
||||
account.password.removePw.headline=Remover proteção com senha da carteira
|
||||
account.password.setPw.button=Definir senha
|
||||
account.password.setPw.headline=Definir proteção de senha da carteira
|
||||
account.password.info=Com a proteção por senha, você precisará inserir a sua senha na inicialização do programa, ao levantar o bitcoin da sua carteira e ao restaurar a sua carteira a partir de palavras-semente.
|
||||
|
||||
account.seed.backup.title=Fazer backup das palavras semente da sua carteira
|
||||
account.seed.info=Por favor, anote as palavras-semente da carteira e a data! Você pode recuperar sua carteira a qualquer momento com palavras-semente e a data.\nAs mesmas palavras-semente são usadas para a carteira BTC e BSQ.\n\nVocê deve anotar as palavras-semente numa folha de papel. Não as guarde no seu computador.\n\nPor favor, note que as palavras-semente não são um substituto para um backup.\nVocê precisa criar um backup de todo o diretório do programa a partir do ecrã \"Conta/Backup\" para recuperar o estado e os dados do programa.\nA importação de palavras-semente é recomendada apenas para casos de emergência. O programa não será funcional sem um backup adequado dos arquivos da base de dados e das chaves!
|
||||
account.seed.warn.noPw.msg=Você não definiu uma palavra-passe da carteira que protegeria a exibição das palavras-semente.\n\nVocê quer exibir as palavras-semente?
|
||||
account.seed.warn.noPw.msg=Você não definiu uma senha da carteira que protegeria a exibição das palavras-semente.\n\nVocê quer exibir as palavras-semente?
|
||||
account.seed.warn.noPw.yes=Sim, e não me pergunte novamente
|
||||
account.seed.enterPw=Digite a palavra-passe para ver palavras-semente
|
||||
account.seed.enterPw=Digite a senha para ver palavras-semente
|
||||
account.seed.restore.info=Por favor, faça um backup antes de aplicar a restauração a partir de palavras-semente. Esteja ciente de que a restauração da carteira é apenas para casos de emergência e pode causar problemas com a base de dados interna da carteira.\nNão é uma maneira de aplicar um backup! Por favor, use um backup do diretório de dados do programa para restaurar um estado anterior do programa.\n\nDepois de restaurar o programa será desligado automaticamente. Depois de ter reiniciado o programa, ele será ressincronizado com a rede Bitcoin. Isso pode demorar um pouco e consumir muito do CPU, especialmente se a carteira for mais antiga e tiver muitas transações. Por favor, evite interromper esse processo, caso contrário, você pode precisar excluir o ficheiro da corrente do SPV novamente ou repetir o processo de restauração.
|
||||
account.seed.restore.ok=Ok, restaurar e desligar Bisq
|
||||
|
||||
|
@ -1077,7 +1078,7 @@ dao.totalBsqBalance=Saldo total de BSQ
|
|||
|
||||
dao.tx.published.success=Sua transação foi publicada com sucesso.
|
||||
dao.proposal.menuItem.make=Criar proposta
|
||||
dao.proposal.menuItem.browse=Navegar propostas abertas
|
||||
dao.proposal.menuItem.browse=Propostas abertas
|
||||
dao.proposal.menuItem.vote=Votar em propostas
|
||||
dao.proposal.menuItem.result=Resultado da votação
|
||||
dao.cycle.headline=Ciclo de votação
|
||||
|
@ -1488,8 +1489,8 @@ dao.proposal.create.publish=Publicar proposta
|
|||
dao.proposal.create.publishing=Publicação de proposta em progresso ...
|
||||
dao.proposal=proposta
|
||||
dao.proposal.display.type=Tipo de proposta
|
||||
dao.proposal.display.name=Nome/apelido
|
||||
dao.proposal.display.link=Link para detallhes
|
||||
dao.proposal.display.name=Nome/alcunha
|
||||
dao.proposal.display.link=Link para detalhes
|
||||
dao.proposal.display.link.prompt=Link para Github issue
|
||||
dao.proposal.display.requestedBsq=Quantia requerida em BSQ
|
||||
dao.proposal.display.bsqAddress=Endereço BSQ
|
||||
|
@ -1542,8 +1543,8 @@ dao.wallet.receive.bsqAddress=Endereço da carteira BSQ (endereço não utilizad
|
|||
dao.wallet.receive.dao.headline=A OAD do Bisq
|
||||
dao.wallet.receive.daoInfo=Assim como o mercado de câmbio do Bisq é descentralizado e resistente à censura, o seu modelo de governação também o é - e a OAD do Bisq e o token BSQ são as ferramentas que tornam isso possível.
|
||||
dao.wallet.receive.daoInfo.button=Aprender mais sobre a OAD do Bisq
|
||||
dao.wallet.receive.daoTestnetInfo=A rede principal da OAD do Bisq ainda não foi lançada, mas você pode aprender sobre a OAD do Bisq executando-a na rede de testes.
|
||||
dao.wallet.receive.daoTestnetInfo.button=Como executar a OAD do Bisq na nossa rede de testes
|
||||
dao.wallet.receive.daoTestnetInfo=A mainnet da OAD do Bisq ainda não foi lançada, mas você pode aprender sobre a OAD do Bisq executando-a na testnet.
|
||||
dao.wallet.receive.daoTestnetInfo.button=Como executar a OAD do Bisq na nossa testnet
|
||||
dao.wallet.receive.daoContributorInfo=Se você contribuiu para o Bisq, por favor, use o endereço BSQ abaixo e faça um pedido para participar da distribuição genesis de BSQ.
|
||||
dao.wallet.receive.daoContributorInfo.button=Como ser parte da distribuição genesis de BSQ
|
||||
|
||||
|
@ -1603,6 +1604,7 @@ dao.tx.type.enum.PROOF_OF_BURN=Prova de destruição
|
|||
# suppress inspection "UnusedProperty"
|
||||
dao.tx.type.enum.IRREGULAR=Irregular
|
||||
|
||||
dao.tx.withdrawnFromWallet=BTC levantado da carteira
|
||||
dao.tx.issuanceFromCompReq=Pedido de compensação/emissão
|
||||
dao.tx.issuanceFromCompReq.tooltip=Pedido de compensação que levou à emissão de novo BSQ.\nData de emissão: {0}
|
||||
dao.tx.issuanceFromReimbursement=Pedido de reembolso/emissão
|
||||
|
@ -1611,10 +1613,15 @@ dao.proposal.create.missingBsqFunds=Você não tem fundos suficientes para criar
|
|||
|
||||
dao.proposal.create.missingBsqFundsForBond=Você não tem fundos suficientes para este cargo. Você ainda pode publicar essa proposta, mas precisará do valor completo de BSQ necessário para esse cargo se ela for aceite.\nEm falta: {0}
|
||||
|
||||
dao.proposal.create.missingMinerFeeFunds=Você não tem fundos suficientes de BTC para criar a transação da proposta. Qualquer transação BSQ requer também uma taxa do mineiro em BTC.\nEm falta: {0}
|
||||
dao.proposal.create.missingMinerFeeFunds=Você não tem suficientes fundos de BTC para criar a transação da proposta. Todas as transações de BSQ exigem uma taxa do mineiro em BTC.\nEm falta: {0}
|
||||
|
||||
dao.proposal.create.missingIssuanceFunds=Você não tem suficientes fundos de BTC para criar a transação da proposta. Todas as transações de BSQ exigem uma taxa do mineiro em BTC, e as transações de emissão também exigem BTC pela quantia de BSQ solicitado ({0} satoshis/BSQ).\nEm falta: {1}
|
||||
|
||||
dao.feeTx.confirm=Confirmar transação {0}
|
||||
dao.feeTx.confirm.details={0} taxa: {1}\nTaxa de mineração: {2} ({3} satoshis/byte)\nTamanho da transação: {4} Kb\n\nTem certeza de que deseja publicar a transação {5}?
|
||||
|
||||
dao.feeTx.issuanceProposal.confirm.details={0} taxa: {1}\nBTC necessário para a emissão de BSQ: {2} ({3} satoshis/BSQ)\nTaxa de mineração: {4} ({5} satoshis/byte)\nTamanho da transação: {6} Kb\n\nSe o seu pedido for aprovado, você receberá a quantia solicitada menos a taxa de proposta de 2 BSQ.\n\nTem certeza de que deseja publicar a transação de {7}?"
|
||||
|
||||
dao.news.bisqDAO.title=A OAD DO BISQ
|
||||
dao.news.bisqDAO.description=Assim como o mercado de câmbio do Bisq é descentralizado e resistente à censura, o seu modelo de governação também o é - e a OAD do Bisq e o token da BSQ são as ferramentas que tornam isso possível.
|
||||
dao.news.bisqDAO.readMoreLink=Saber Mais Sobre a OAD do Bisq
|
||||
|
@ -1625,9 +1632,9 @@ dao.news.pastContribution.yourAddress=O seu endereço da carteira BSQ
|
|||
dao.news.pastContribution.requestNow=Solicitar agora
|
||||
|
||||
dao.news.DAOOnTestnet.title=EXECUTE A OAD DO BISQ NA NOSSA REDE DE TESTES
|
||||
dao.news.DAOOnTestnet.description=A rede principal da OAD do Bisq ainda não foi lançada, mas você pode aprender sobre a OAD do Bisq executando-a na nossa rede de testes.
|
||||
dao.news.DAOOnTestnet.firstSection.title=1. Mudar para Modo Rede de teses da OAD
|
||||
dao.news.DAOOnTestnet.firstSection.content=Mude para a Rede de testes da OAD no painel de Definições
|
||||
dao.news.DAOOnTestnet.description=A mainnet da OAD do Bisq ainda não foi lançada, mas você pode aprender sobre a OAD do Bisq executando-a na nossa testnet.
|
||||
dao.news.DAOOnTestnet.firstSection.title=1. Mudar para Modo Testnet da OAD
|
||||
dao.news.DAOOnTestnet.firstSection.content=Mude para a Testnet da OAD no painel de Definições
|
||||
dao.news.DAOOnTestnet.secondSection.title=2. Obtenha alguns BSQ
|
||||
dao.news.DAOOnTestnet.secondSection.content=Solicite BSQ no Slack ou Compre BSQ no Bisq
|
||||
dao.news.DAOOnTestnet.thirdSection.title=3. Participe num Ciclo de Votação
|
||||
|
@ -1644,7 +1651,7 @@ dao.monitor.table.peers=Pares
|
|||
dao.monitor.table.conflicts=Conflitos
|
||||
dao.monitor.state=Estado
|
||||
dao.monitor.requestAlHashes=Pedir todos os hashes
|
||||
dao.monitor.resync=Resincronizat estado da OAD
|
||||
dao.monitor.resync=Re-sincronizar estado da OAD
|
||||
dao.monitor.table.header.cycleBlockHeight=Ciclo / altura do bloco
|
||||
dao.monitor.table.cycleBlockHeight=Ciclo {0} / bloco {1}
|
||||
|
||||
|
@ -1753,7 +1760,7 @@ disputeSummaryWindow.evidence=Evidência
|
|||
disputeSummaryWindow.evidence.tamperProof=Evidência à prova de adulteração
|
||||
disputeSummaryWindow.evidence.id=Verificação de ID
|
||||
disputeSummaryWindow.evidence.video=Vídeo/Captura de ecrã
|
||||
disputeSummaryWindow.payout=Pagamento de quantia de negócio
|
||||
disputeSummaryWindow.payout=Pagamento da quantia de negócio
|
||||
disputeSummaryWindow.payout.getsTradeAmount={0} de BTC fica com o pagamento da quantia de negócio
|
||||
disputeSummaryWindow.payout.getsAll={0} BTC fica com tudo
|
||||
disputeSummaryWindow.payout.custom=Pagamento personalizado
|
||||
|
@ -1862,7 +1869,7 @@ tradeDetailsWindow.txFee=Taxa de mineração
|
|||
tradeDetailsWindow.tradingPeersOnion=Endereço onion dos parceiros de negociação
|
||||
tradeDetailsWindow.tradeState=Estado de negócio
|
||||
|
||||
walletPasswordWindow.headline=Digite palavra-passe para abrir:
|
||||
walletPasswordWindow.headline=Digite senha para abrir:
|
||||
|
||||
torNetworkSettingWindow.header=Definições de redes Tor
|
||||
torNetworkSettingWindow.noBridges=Não usar pontes
|
||||
|
@ -1919,7 +1926,7 @@ error.deleteAddressEntryListFailed=Não foi possível apagar o ficheiro AddressE
|
|||
|
||||
popup.warning.walletNotInitialized=A carteira ainda não foi inicializada
|
||||
popup.warning.wrongVersion=Você provavelmente tem a versão errada do Bisq para este computador.\nA arquitetura do seu computador é: {0}.\nO binário Bisq que você instalou é: {1}.\nPor favor, desligue e reinstale a versão correta ({2}).
|
||||
popup.warning.incompatibleDB=Detectamos ficheiros de base de dados incompatíveis!\n\nEsses arquivos de base de dados não são compatíveis com nossa base de código atual:\n{0}\n\nFizemos um backup do(s) ficheiro(s) corrompido(s) e aplicamos os valores padrão para uma nova versão da base de dados.\n\nO backup está localizado em:\n{1} /db/backup_of_corrupted_data.\n\nPor favor, verifique se você tem a última versão do Bisq instalada.\nVocê pode baixá-lo em:\nhttps://bisq.network/downloads\n\nPor favor, reinicie o programa.
|
||||
popup.warning.incompatibleDB=Detectamos ficheiros de base de dados incompatíveis!\n\nEsses ficheiros de base de dados não são compatíveis com nossa base de código atual:\n{0}\n\nFizemos um backup do(s) ficheiro(s) corrompido(s) e aplicamos os valores padrão para uma nova versão da base de dados.\n\nO backup está localizado em:\n{1} /db/backup_of_corrupted_data.\n\nPor favor, verifique se você tem a última versão do Bisq instalada.\nVocê pode baixá-lo em:\nhttps://bisq.network/downloads\n\nPor favor, reinicie o programa.
|
||||
popup.warning.startupFailed.twoInstances=Bisq já está em execução. Você não pode executar duas instâncias do Bisq.
|
||||
popup.warning.cryptoTestFailed=Parece que você usa um binário auto-compilado e não segue as instruções de compilação em https://github.com/bisq-network/exchange/blob/master/doc/build.md#7-enable-unlimited-strength-for-cryptographic-keys.\n\nSe não for esse o caso e você usar o binário oficial do Bisq, por favor, envie um relatório de erros para a página do Github.\nErro = {0}
|
||||
popup.warning.tradePeriod.halfReached=Sua negociação com o ID {0} atingiu a metade do valor máx. do período de negociação permitido e ainda não está concluído.\n\nO período de negócio termina em {1}\n\nPor favor, verifique o seu estado de negócio em \"Portefólio/Ofertas abertas\" para mais informações.
|
||||
|
@ -1946,6 +1953,8 @@ popup.warning.nodeBanned=Um dos nós de {0} foi banido. Por favor reinicie seu p
|
|||
popup.warning.priceRelay=transmissão de preço
|
||||
popup.warning.seed=semente
|
||||
|
||||
popup.warning.burnBTC=Esta transação não é possível, pois as taxas de mineração de {0} excederia o montante a transferir de {1}. Aguarde até que as taxas de mineração estejam novamente baixas ou até você ter acumulado mais BTC para transferir.
|
||||
|
||||
popup.info.securityDepositInfo=Para garantir que ambos os negociadores seguem o protocolo de negócio, ambos os negociadores precisam pagar um depósito de segurança.\n\nEsse depósito é mantido na sua carteira de negócio até que o seu negócio seja concluído com sucesso, e então lhe será reembolsado.\n\nPor favor note: se você está criando uma nova oferta, o Bisq precisa estar em execução para que um outro negociador a aceite. Para manter suas ofertas online, mantenha o Bisq em execução e certifique-se de que este computador permaneça online também (ou seja, certifique-se de que ele não alterne para o modo de espera... o modo de espera do monitor não causa problema).
|
||||
|
||||
popup.info.cashDepositInfo=Por favor, certifique-se de que você tem uma agência bancária na sua área para poder fazer o depósito em dinheiro.\nO ID do banco (BIC/SWIFT) do vendedor é: {0}.
|
||||
|
@ -1956,7 +1965,7 @@ popup.info.shutDownWithOpenOffers=Bisq está sendo fechado, mas há ofertas aber
|
|||
popup.privateNotification.headline=Notificação privada importante!
|
||||
|
||||
popup.securityRecommendation.headline=Recomendação de segurança importante
|
||||
popup.securityRecommendation.msg=Gostaríamos de lembrá-lo de considerar a possibilidade de usar a proteção por palavra-passe para sua carteira, caso você ainda não tenha ativado isso.\n\nTambém é altamente recomendável anotar as palavras-semente da carteira. Essas palavras-semente são como uma palavra-passe mestre para recuperar sua carteira Bitcoin.\nNa secção \"Semente da Carteira\", você encontrará mais informações.\n\nAlém disso, você deve fazer o backup da pasta completa de dados do programa na secção \"Backup\".
|
||||
popup.securityRecommendation.msg=Gostaríamos de lembrá-lo de considerar a possibilidade de usar a proteção por senha para sua carteira, caso você ainda não tenha ativado isso.\n\nTambém é altamente recomendável anotar as palavras-semente da carteira. Essas palavras-semente são como uma senha mestre para recuperar sua carteira Bitcoin.\nNa secção \"Semente da Carteira\", você encontrará mais informações.\n\nAlém disso, você deve fazer o backup da pasta completa de dados do programa na secção \"Backup\".
|
||||
|
||||
popup.bitcoinLocalhostNode.msg=O Bisq detectou um nó do Bitcoin Core em execução localmente (no localhost).\nPor favor, certifique-se de que este nó esteja totalmente sincronizado antes de iniciar o Bisq e que ele não esteja em execução no pruned mode.
|
||||
|
||||
|
@ -2111,17 +2120,17 @@ formatter.asTaker={0} {1} como aceitador
|
|||
# we use enum values here
|
||||
# dynamic values are not recognized by IntelliJ
|
||||
# suppress inspection "UnusedProperty"
|
||||
BTC_MAINNET=Rede principal de Bitcoin
|
||||
BTC_MAINNET=Mainnet de Bitcoin
|
||||
# suppress inspection "UnusedProperty"
|
||||
BTC_TESTNET=Rede de testes de Bitcoin
|
||||
BTC_TESTNET=Testnet de Bitcoin
|
||||
# suppress inspection "UnusedProperty"
|
||||
BTC_REGTEST=Regtest Bitcoin
|
||||
# suppress inspection "UnusedProperty"
|
||||
BTC_DAO_TESTNET=Bitcoin DAO Testnet (deprecated)
|
||||
BTC_DAO_TESTNET=Testnet da OAD do Bitcoin (discontinuada)
|
||||
# suppress inspection "UnusedProperty"
|
||||
BTC_DAO_BETANET=Rede beta da OAD do Bisq (Rede principal do Bitcoin)
|
||||
BTC_DAO_BETANET=Betanet da OAD do Bitcoin (Mainnet do Bitcoin)
|
||||
# suppress inspection "UnusedProperty"
|
||||
BTC_DAO_REGTEST=Bitcoin DAO Regtest
|
||||
BTC_DAO_REGTEST=Regtest da OAD do Bitcoin
|
||||
|
||||
time.year=Ano
|
||||
time.month=Mês
|
||||
|
@ -2139,17 +2148,17 @@ time.minutes=minutos
|
|||
time.seconds=segundos
|
||||
|
||||
|
||||
password.enterPassword=Inserir palavra-passe
|
||||
password.confirmPassword=Confirmar palavra-passe
|
||||
password.tooLong=A palavra-passe deve ter menos de 500 caracteres.
|
||||
password.deriveKey=Derivar chave a partir da palavra-passe
|
||||
password.walletDecrypted=A carteira foi descriptografada com sucesso e a proteção por palavra-passe removida.
|
||||
password.wrongPw=Você digitou a palavra-passe errada.\n\nPor favor, tente digitar sua palavra-passe novamente, verificando com atenção se há erros de ortografia.
|
||||
password.walletEncrypted=Carteira encriptada com sucesso e proteção por palavra-passe ativada.
|
||||
password.walletEncryptionFailed=A palavra-passe da carteira não pôde ser definida. Você pode ter importado palavras-semente que não correspondem à base de dados da carteira. Por favor, contacte os desenvolvedores no Fórum Bisq.
|
||||
password.passwordsDoNotMatch=As 2 palavras-passe inseridas não são iguais.
|
||||
password.forgotPassword=Esqueceu a palavra-passe?
|
||||
password.backupReminder=Observe que, ao definir uma palavra-passe da carteira, todos os backups criados automaticamente a partir da carteira não criptografada serão apagados.\n\nÉ altamente recomendado fazer um backup do diretório do programa e anotar suas palavras-semente antes de definir uma palavra-passe!
|
||||
password.enterPassword=Inserir senha
|
||||
password.confirmPassword=Confirmar senha
|
||||
password.tooLong=A senha deve ter menos de 500 caracteres.
|
||||
password.deriveKey=Derivar chave a partir da senha
|
||||
password.walletDecrypted=A carteira foi descriptografada com sucesso e a proteção por senha removida.
|
||||
password.wrongPw=Você digitou a senha errada.\n\nPor favor, tente digitar sua senha novamente, verificando com atenção se há erros de ortografia.
|
||||
password.walletEncrypted=Carteira encriptada com sucesso e proteção por senha ativada.
|
||||
password.walletEncryptionFailed=A senha da carteira não pôde ser definida. Você pode ter importado palavras-semente que não correspondem à base de dados da carteira. Por favor, contacte os desenvolvedores no Fórum Bisq.
|
||||
password.passwordsDoNotMatch=As 2 senhas inseridas não são iguais.
|
||||
password.forgotPassword=Esqueceu a senha?
|
||||
password.backupReminder=Observe que, ao definir uma senha da carteira, todos os backups criados automaticamente a partir da carteira não criptografada serão apagados.\n\nÉ altamente recomendado fazer um backup do diretório do programa e anotar suas palavras-semente antes de definir uma senha!
|
||||
password.backupWasDone=Eu já fiz um backup
|
||||
|
||||
seed.seedWords=Palavras-semente da carteira
|
||||
|
@ -2161,7 +2170,7 @@ seed.creationDate=Data de criação
|
|||
seed.warn.walletNotEmpty.msg=Sua carteira do Bitcoin não está vazia.\n\nVocê deve esvaziar esta carteira antes de tentar restaurar uma mais antiga, já que misturar as carteiras pode levar à backups invalidados.\n\nPor favor, finalize seus negócios, feche todas as suas ofertas abertas e vá para a secção Fundos para levantar a sua bitcoin.\nCaso você não consiga acessar a sua bitcoin, você pode usar a ferramenta de emergência para esvaziar a carteira.\nPara abrir essa ferramenta de emergência, pressione \"alt + e\" ou \"option + e\".
|
||||
seed.warn.walletNotEmpty.restore=Eu desejo restaurar de qualquer forma
|
||||
seed.warn.walletNotEmpty.emptyWallet=Eu esvaziarei as carteiras primeiro
|
||||
seed.warn.notEncryptedAnymore=Suas carteiras são encriptadas.\n\nApós a restauração, as carteiras não serão mais encriptadas e você deverá definir uma nova palavra-passe.\n\nVocê quer continuar?
|
||||
seed.warn.notEncryptedAnymore=Suas carteiras são encriptadas.\n\nApós a restauração, as carteiras não serão mais encriptadas e você deverá definir uma nova senha.\n\nVocê quer continuar?
|
||||
seed.restore.success=Carteiras restauradas com sucesso com as novas palavras-semente.\n\nVocê precisa desligar e reiniciar o programa.
|
||||
seed.restore.error=Um erro ocorreu ao restaurar as carteiras com palavras-semente.{0}
|
||||
|
||||
|
@ -2192,7 +2201,7 @@ payment.country=País
|
|||
payment.extras=Requerimentos adicionais
|
||||
payment.email.mobile=Email ou nº de telemóvel
|
||||
payment.altcoin.address=Endereço de altcoin
|
||||
payment.altcoin.tradeInstantCheckbox=Negociação instantânea (dentro de 1 hora) com esta Altcoin
|
||||
payment.altcoin.tradeInstantCheckbox=Negócio instantâneo (dentro de 1 hora) com esta Altcoin
|
||||
payment.altcoin.tradeInstant.popup=Para negociação instantânea, é necessário que os dois pares de negociação estejam online para concluir o negócio em menos de 1 hora..\n\nSe você tem ofertas abertas e você não está disponível, por favor desative essas ofertas no ecrã 'Portefólio'.
|
||||
payment.altcoin=Altcoin
|
||||
payment.select.altcoin=Selecionar ou procurar altcoin
|
||||
|
@ -2205,7 +2214,7 @@ payment.moneyBeam.accountId=Email ou nº de telemóvel
|
|||
payment.venmo.venmoUserName=Nome de utilizador do Venmo
|
||||
payment.popmoney.accountId=Email ou nº de telemóvel
|
||||
payment.revolut.email=Email
|
||||
payment.revolut.phoneNr=Nº de telemóvel guardado
|
||||
payment.revolut.phoneNr=Nº de telemóvel registado
|
||||
payment.promptPay.promptPayId=ID de cidadão/ID de impostos ou nº de telemóvel
|
||||
payment.supportedCurrencies=Moedas suportadas
|
||||
payment.limitations=Limitações
|
||||
|
@ -2412,8 +2421,8 @@ validation.btc.fraction=O input resulta em um valor de bitcoin com uma fração
|
|||
validation.btc.toLarge=O input maior que {0} não é permitido.
|
||||
validation.btc.toSmall=Input menor que {0} não é permitido.
|
||||
validation.securityDeposit.toSmall=Input menor que {0} não é permitido.
|
||||
validation.passwordTooShort=A palavra-passe inserida é muito curta. É necessário conter no mínimo 8 caracteres.
|
||||
validation.passwordTooLong=A palavra-passe inserida é muito longa. Não pode ser maior do que 50 caracteres.
|
||||
validation.passwordTooShort=A senha inserida é muito curta. É necessário conter no mínimo 8 caracteres.
|
||||
validation.passwordTooLong=A senha inserida é muito longa. Não pode ser maior do que 50 caracteres.
|
||||
validation.sortCodeNumber={0} deve consistir de {1} números.
|
||||
validation.sortCodeChars={0} deve consistir de {1} caracteres.
|
||||
validation.bankIdNumber={0} deve consistir de {1 números.
|
||||
|
|
|
@ -739,6 +739,7 @@ funds.tx.unknown=Motiv necunoscut: {0}
|
|||
funds.tx.noFundsFromDispute=Nicio rambursare din dispută
|
||||
funds.tx.receivedFunds=Fonduri încasate
|
||||
funds.tx.withdrawnFromWallet=Retras din portofel
|
||||
funds.tx.withdrawnFromBSQWallet=BTC withdrawn from BSQ wallet
|
||||
funds.tx.noTxAvailable=Nicio tranzacție disponibilă
|
||||
funds.tx.revert=Revenire
|
||||
funds.tx.txSent=Tranzacția a fost virată cu succes la o nouă adresă în portofelul Bisq local.
|
||||
|
@ -1603,6 +1604,7 @@ dao.tx.type.enum.PROOF_OF_BURN=Proof of burn
|
|||
# suppress inspection "UnusedProperty"
|
||||
dao.tx.type.enum.IRREGULAR=Irregular
|
||||
|
||||
dao.tx.withdrawnFromWallet=BTC withdrawn from wallet
|
||||
dao.tx.issuanceFromCompReq=Compensation request/issuance
|
||||
dao.tx.issuanceFromCompReq.tooltip=Compensation request which led to an issuance of new BSQ.\nIssuance date: {0}
|
||||
dao.tx.issuanceFromReimbursement=Reimbursement request/issuance
|
||||
|
@ -1611,10 +1613,15 @@ dao.proposal.create.missingBsqFunds=You don''t have sufficient BSQ funds for cre
|
|||
|
||||
dao.proposal.create.missingBsqFundsForBond=You don''t have sufficient BSQ funds for this role. You can still publish this proposal, but you''ll need the full BSQ amount required for this role if it gets accepted. \nMissing: {0}
|
||||
|
||||
dao.proposal.create.missingMinerFeeFunds=You don''t have sufficient BTC funds for creating the proposal transaction. Any BSQ transaction require also a miner fee in BTC.\nMissing: {0}
|
||||
dao.proposal.create.missingMinerFeeFunds=You don''t have sufficient BTC funds for creating the proposal transaction. All BSQ transactions require a miner fee in BTC.\nMissing: {0}
|
||||
|
||||
dao.proposal.create.missingIssuanceFunds=You don''t have sufficient BTC funds for creating the proposal transaction. All BSQ transactions require a miner fee in BTC, and issuance transactions also require BTC for the requested BSQ amount ({0} Satoshis/BSQ).\nMissing: {1}
|
||||
|
||||
dao.feeTx.confirm=Confirm {0} transaction
|
||||
dao.feeTx.confirm.details={0} fee: {1}\nMining fee: {2} ({3} Satoshis/byte)\nTransaction size: {4} Kb\n\nAre you sure you want to publish the {5} transaction?
|
||||
|
||||
dao.feeTx.issuanceProposal.confirm.details={0} fee: {1}\nBTC needed for BSQ issuance: {2} ({3} Satoshis/BSQ)\nMining fee: {4} ({5} Satoshis/byte)\nTransaction size: {6} Kb\n\nIf your request is approved, you will receive the amount you requested net of the 2 BSQ proposal fee.\n\nAre you sure you want to publish the {7} transaction?
|
||||
|
||||
dao.news.bisqDAO.title=THE BISQ DAO
|
||||
dao.news.bisqDAO.description=Just as the Bisq exchange is decentralized and censorship-resistant, so is its governance model - and the Bisq DAO and BSQ token are the tools that make it possible.
|
||||
dao.news.bisqDAO.readMoreLink=Learn More About the Bisq DAO
|
||||
|
@ -1946,6 +1953,8 @@ popup.warning.nodeBanned=Unul dintre nodurile {0} a fost interzise. Te rugăm s
|
|||
popup.warning.priceRelay=preț releu
|
||||
popup.warning.seed=nucleu
|
||||
|
||||
popup.warning.burnBTC=This transaction is not possible, as the mining fees of {0} would exceed the amount to transfer of {1}. Please wait until the mining fees are low again or until you''ve accumulated more BTC to transfer.
|
||||
|
||||
popup.info.securityDepositInfo=To ensure both traders follow the trade protocol, both traders need to pay a security deposit.\n\nThis deposit is kept in your trade wallet until your trade has been successfully completed, and then it's refunded to you.\n\nPlease note: if you're creating a new offer, Bisq needs to be running for another trader to take it. To keep your offers online, keep Bisq running and make sure this computer remains online too (i.e., make sure it doesn't switch to standby mode...monitor standby is fine).
|
||||
|
||||
popup.info.cashDepositInfo=Please be sure that you have a bank branch in your area to be able to make the cash deposit.\nThe bank ID (BIC/SWIFT) of the seller''s bank is: {0}.
|
||||
|
|
|
@ -739,6 +739,7 @@ funds.tx.unknown=Неизвестная причина: {0}
|
|||
funds.tx.noFundsFromDispute=Без возмещения от спора
|
||||
funds.tx.receivedFunds=Полученные средства
|
||||
funds.tx.withdrawnFromWallet=Выведено из кошелька
|
||||
funds.tx.withdrawnFromBSQWallet=BTC withdrawn from BSQ wallet
|
||||
funds.tx.noTxAvailable=Транзакции недоступны
|
||||
funds.tx.revert=Возвратить
|
||||
funds.tx.txSent=Транзакция успешно отправлена на новый адрес локального кошелька Bisq.
|
||||
|
@ -1603,6 +1604,7 @@ dao.tx.type.enum.PROOF_OF_BURN=Proof of burn
|
|||
# suppress inspection "UnusedProperty"
|
||||
dao.tx.type.enum.IRREGULAR=Irregular
|
||||
|
||||
dao.tx.withdrawnFromWallet=BTC withdrawn from wallet
|
||||
dao.tx.issuanceFromCompReq=Запрос/выдача компенсации
|
||||
dao.tx.issuanceFromCompReq.tooltip=Запрос компенсации, который привел к выпуску новых BSQ.\nДата выпуска: {0}
|
||||
dao.tx.issuanceFromReimbursement=Запрос/выдача возмещения
|
||||
|
@ -1611,10 +1613,15 @@ dao.proposal.create.missingBsqFunds=У Вас недостаточно сред
|
|||
|
||||
dao.proposal.create.missingBsqFundsForBond=У Вас недостаточно BSQ для этой роли. Вы все же можете опубликовать это предложение, но Вам понадобится полная сумма BSQ, необходимая для этой роли, если оно будет принято.\nНехватает: {0}
|
||||
|
||||
dao.proposal.create.missingMinerFeeFunds=У Вас недостаточно средств для создания транзакции предложения. Любая транз. BSQ требует оплаты комиссии майнера в ВТС.\nНехватает: {0}
|
||||
dao.proposal.create.missingMinerFeeFunds=You don''t have sufficient BTC funds for creating the proposal transaction. All BSQ transactions require a miner fee in BTC.\nMissing: {0}
|
||||
|
||||
dao.proposal.create.missingIssuanceFunds=You don''t have sufficient BTC funds for creating the proposal transaction. All BSQ transactions require a miner fee in BTC, and issuance transactions also require BTC for the requested BSQ amount ({0} Satoshis/BSQ).\nMissing: {1}
|
||||
|
||||
dao.feeTx.confirm=Подтвердить транзакцию {0}
|
||||
dao.feeTx.confirm.details={0} сбор: {1}\nкомиссия майнера: {2} ({3} сатоши/байт)\nРазмер транзакиции: {4} Кб\n\nДействительно хотите опубликовать транзакцию {5}?
|
||||
|
||||
dao.feeTx.issuanceProposal.confirm.details={0} fee: {1}\nBTC needed for BSQ issuance: {2} ({3} Satoshis/BSQ)\nMining fee: {4} ({5} Satoshis/byte)\nTransaction size: {6} Kb\n\nIf your request is approved, you will receive the amount you requested net of the 2 BSQ proposal fee.\n\nAre you sure you want to publish the {7} transaction?
|
||||
|
||||
dao.news.bisqDAO.title=BISQ DAO
|
||||
dao.news.bisqDAO.description=Подобно тому, как обменник Bisq децентрализован и защищён от цензуры, так и в его способе управления Bisq DAО и токен BSQ позволяют это осуществить.
|
||||
dao.news.bisqDAO.readMoreLink=Подробнее о Bisq DAO
|
||||
|
@ -1946,6 +1953,8 @@ popup.warning.nodeBanned=Один из узлов {0} был запрещен/з
|
|||
popup.warning.priceRelay=ретранслятор курса
|
||||
popup.warning.seed=кодовые слова
|
||||
|
||||
popup.warning.burnBTC=This transaction is not possible, as the mining fees of {0} would exceed the amount to transfer of {1}. Please wait until the mining fees are low again or until you''ve accumulated more BTC to transfer.
|
||||
|
||||
popup.info.securityDepositInfo=Чтобы гарантировать следование торговому протоколу трейдерами, обоим необходимо заплатить залоговый депозит.\n\nДепозит остаётся в Вашем торговом кошельке до успешного завершения сделки, и затем будет возвращен Вам.\n\nУчтите, что если Вы создаёте новое предложение, Bisq должен быть подключён к сети для принятия предложения другими трейдерами. Чтобы Ваши предложения были доступны в сети, компьютер и Bisq должны быть включены и подключены к сети. (т. е. убедитесь, что компьютер не впал в режим ожидания...монитор в режиме ожидания не проблема).
|
||||
|
||||
popup.info.cashDepositInfo=Просьба убедиться, что в Вашем районе существует отделение банка, где возможно внести депозит наличными.\nИдентификатор (BIC/SWIFT) банка продавца: {0}.
|
||||
|
|
|
@ -739,6 +739,7 @@ funds.tx.unknown=Nepoznat razlog: {0}
|
|||
funds.tx.noFundsFromDispute=Nema povraćaja od rasprave
|
||||
funds.tx.receivedFunds=Primljena sredstva
|
||||
funds.tx.withdrawnFromWallet=Podignuto iz novčanika
|
||||
funds.tx.withdrawnFromBSQWallet=BTC withdrawn from BSQ wallet
|
||||
funds.tx.noTxAvailable=Nema dostupnih transakcija
|
||||
funds.tx.revert=Vrati
|
||||
funds.tx.txSent=Transakcija uspešno poslata na novu adresu u lokalnom Bisq novčaniku
|
||||
|
@ -1603,6 +1604,7 @@ dao.tx.type.enum.PROOF_OF_BURN=Proof of burn
|
|||
# suppress inspection "UnusedProperty"
|
||||
dao.tx.type.enum.IRREGULAR=Irregular
|
||||
|
||||
dao.tx.withdrawnFromWallet=BTC withdrawn from wallet
|
||||
dao.tx.issuanceFromCompReq=Compensation request/issuance
|
||||
dao.tx.issuanceFromCompReq.tooltip=Compensation request which led to an issuance of new BSQ.\nIssuance date: {0}
|
||||
dao.tx.issuanceFromReimbursement=Reimbursement request/issuance
|
||||
|
@ -1611,10 +1613,15 @@ dao.proposal.create.missingBsqFunds=You don''t have sufficient BSQ funds for cre
|
|||
|
||||
dao.proposal.create.missingBsqFundsForBond=You don''t have sufficient BSQ funds for this role. You can still publish this proposal, but you''ll need the full BSQ amount required for this role if it gets accepted. \nMissing: {0}
|
||||
|
||||
dao.proposal.create.missingMinerFeeFunds=You don''t have sufficient BTC funds for creating the proposal transaction. Any BSQ transaction require also a miner fee in BTC.\nMissing: {0}
|
||||
dao.proposal.create.missingMinerFeeFunds=You don''t have sufficient BTC funds for creating the proposal transaction. All BSQ transactions require a miner fee in BTC.\nMissing: {0}
|
||||
|
||||
dao.proposal.create.missingIssuanceFunds=You don''t have sufficient BTC funds for creating the proposal transaction. All BSQ transactions require a miner fee in BTC, and issuance transactions also require BTC for the requested BSQ amount ({0} Satoshis/BSQ).\nMissing: {1}
|
||||
|
||||
dao.feeTx.confirm=Confirm {0} transaction
|
||||
dao.feeTx.confirm.details={0} fee: {1}\nMining fee: {2} ({3} Satoshis/byte)\nTransaction size: {4} Kb\n\nAre you sure you want to publish the {5} transaction?
|
||||
|
||||
dao.feeTx.issuanceProposal.confirm.details={0} fee: {1}\nBTC needed for BSQ issuance: {2} ({3} Satoshis/BSQ)\nMining fee: {4} ({5} Satoshis/byte)\nTransaction size: {6} Kb\n\nIf your request is approved, you will receive the amount you requested net of the 2 BSQ proposal fee.\n\nAre you sure you want to publish the {7} transaction?
|
||||
|
||||
dao.news.bisqDAO.title=THE BISQ DAO
|
||||
dao.news.bisqDAO.description=Just as the Bisq exchange is decentralized and censorship-resistant, so is its governance model - and the Bisq DAO and BSQ token are the tools that make it possible.
|
||||
dao.news.bisqDAO.readMoreLink=Learn More About the Bisq DAO
|
||||
|
@ -1946,6 +1953,8 @@ popup.warning.nodeBanned=One of the {0} nodes got banned. Please restart your ap
|
|||
popup.warning.priceRelay=price relay
|
||||
popup.warning.seed=seed
|
||||
|
||||
popup.warning.burnBTC=This transaction is not possible, as the mining fees of {0} would exceed the amount to transfer of {1}. Please wait until the mining fees are low again or until you''ve accumulated more BTC to transfer.
|
||||
|
||||
popup.info.securityDepositInfo=To ensure both traders follow the trade protocol, both traders need to pay a security deposit.\n\nThis deposit is kept in your trade wallet until your trade has been successfully completed, and then it's refunded to you.\n\nPlease note: if you're creating a new offer, Bisq needs to be running for another trader to take it. To keep your offers online, keep Bisq running and make sure this computer remains online too (i.e., make sure it doesn't switch to standby mode...monitor standby is fine).
|
||||
|
||||
popup.info.cashDepositInfo=Please be sure that you have a bank branch in your area to be able to make the cash deposit.\nThe bank ID (BIC/SWIFT) of the seller''s bank is: {0}.
|
||||
|
|
|
@ -739,6 +739,7 @@ funds.tx.unknown=เหตุผลที่ไม่ระบุ: {0}
|
|||
funds.tx.noFundsFromDispute=ไม่มีการคืนเงินจากการพิพาท
|
||||
funds.tx.receivedFunds=เงินที่ได้รับ
|
||||
funds.tx.withdrawnFromWallet=ถอนออกจาก wallet
|
||||
funds.tx.withdrawnFromBSQWallet=BTC withdrawn from BSQ wallet
|
||||
funds.tx.noTxAvailable=ไม่มีธุรกรรมใด ๆ
|
||||
funds.tx.revert=กลับสู่สภาพเดิม
|
||||
funds.tx.txSent=ธุรกรรมถูกส่งสำเร็จไปยังที่อยู่ใหม่ใน Bisq wallet ท้องถิ่นแล้ว
|
||||
|
@ -1603,6 +1604,7 @@ dao.tx.type.enum.PROOF_OF_BURN=การพิสูจน์หลักฐา
|
|||
# suppress inspection "UnusedProperty"
|
||||
dao.tx.type.enum.IRREGULAR=Irregular
|
||||
|
||||
dao.tx.withdrawnFromWallet=BTC withdrawn from wallet
|
||||
dao.tx.issuanceFromCompReq=คำขอหรือการออกค่าสินไหมทดแทน
|
||||
dao.tx.issuanceFromCompReq.tooltip=คำขอค่าสินไหมทดแทน ซึ่งนำไปสู่การออก BSQ ใหม่\nวันที่ออก: {0}
|
||||
dao.tx.issuanceFromReimbursement=การออกคำสั่ง/การยื่นคำร้องขอการชำระเงินคืน
|
||||
|
@ -1611,10 +1613,15 @@ dao.proposal.create.missingBsqFunds=You don''t have sufficient BSQ funds for cre
|
|||
|
||||
dao.proposal.create.missingBsqFundsForBond=You don''t have sufficient BSQ funds for this role. You can still publish this proposal, but you''ll need the full BSQ amount required for this role if it gets accepted. \nMissing: {0}
|
||||
|
||||
dao.proposal.create.missingMinerFeeFunds=You don''t have sufficient BTC funds for creating the proposal transaction. Any BSQ transaction require also a miner fee in BTC.\nMissing: {0}
|
||||
dao.proposal.create.missingMinerFeeFunds=You don''t have sufficient BTC funds for creating the proposal transaction. All BSQ transactions require a miner fee in BTC.\nMissing: {0}
|
||||
|
||||
dao.proposal.create.missingIssuanceFunds=You don''t have sufficient BTC funds for creating the proposal transaction. All BSQ transactions require a miner fee in BTC, and issuance transactions also require BTC for the requested BSQ amount ({0} Satoshis/BSQ).\nMissing: {1}
|
||||
|
||||
dao.feeTx.confirm=ยืนยันการทำรายการ {0}
|
||||
dao.feeTx.confirm.details={0} ค่าธรรมเนียม: {1}\nค่าธรรมเนียมการขุด: {2} ({3} Satoshis / byte)\nขนาดของธุรกรรม: {4} Kb\n\nคุณแน่ใจหรือไม่ว่าต้องการเผยแพร่ {5} ธุรกรรม?
|
||||
|
||||
dao.feeTx.issuanceProposal.confirm.details={0} fee: {1}\nBTC needed for BSQ issuance: {2} ({3} Satoshis/BSQ)\nMining fee: {4} ({5} Satoshis/byte)\nTransaction size: {6} Kb\n\nIf your request is approved, you will receive the amount you requested net of the 2 BSQ proposal fee.\n\nAre you sure you want to publish the {7} transaction?
|
||||
|
||||
dao.news.bisqDAO.title=THE BISQ DAO
|
||||
dao.news.bisqDAO.description=Just as the Bisq exchange is decentralized and censorship-resistant, so is its governance model - and the Bisq DAO and BSQ token are the tools that make it possible.
|
||||
dao.news.bisqDAO.readMoreLink=Learn More About the Bisq DAO
|
||||
|
@ -1946,6 +1953,8 @@ popup.warning.nodeBanned=หนึ่งใน {0} โหนดถูกแบ
|
|||
popup.warning.priceRelay=ราคาผลัดเปลี่ยน
|
||||
popup.warning.seed=รหัสลับเพื่อกู้ข้อมูล
|
||||
|
||||
popup.warning.burnBTC=This transaction is not possible, as the mining fees of {0} would exceed the amount to transfer of {1}. Please wait until the mining fees are low again or until you''ve accumulated more BTC to transfer.
|
||||
|
||||
popup.info.securityDepositInfo=เพื่อให้แน่ใจว่าเทรดเดอร์ทั้งคู่นั้นได้ปฏิบัติตามข้อสนธิสัญญาในการค้า เทรดเดอร์จำเป็นต้องทำการชำระค่าประกัน\n\nค่าประกันนี้คือถูกเก็บไว้ในกระเป๋าสตางค์การเทรดของคุณจนกว่าการเทรดของคุณจะดำเนินการสำเร็จ และคุณจะได้รับมันคืนหลังจากนั้น \n\nโปรดทราบ: หากคุณกำลังสร้างข้อเสนอขึ้นมาใหม่ Bisq จำเป็นที่ต้องดำเนินงานต่อเนื่องไปยังเทรดเดอร์รายอื่น และเพื่อที่สถานะข้อเสนอทางออนไลน์ของคุณจะยังคงอยู่ Bisq จะยังคงดำเนินงานต่อเนื่อง และโปรดมั่นใจว่าเครื่องคอมพิวเตอร์นี้กำลังออนไลน์อยู่ด้วยเช่นกัน (ยกตัวอย่างเช่น ตรวจเช็คว่าสวิทช์ไฟไม่ได้อยู่ในโหมดแสตนบายด์...หน้าจอแสตนบายด์คือปกติดี)
|
||||
|
||||
popup.info.cashDepositInfo=โปรดตรวจสอบว่าคุณมีสาขาธนาคารในพื้นที่ของคุณเพื่อสามารถฝากเงินได้\nรหัสธนาคาร (BIC / SWIFT) ของธนาคารผู้ขายคือ: {0}
|
||||
|
|
|
@ -739,6 +739,7 @@ funds.tx.unknown=Không rõ lý do: {0}
|
|||
funds.tx.noFundsFromDispute=KHÔNG HOÀN LẠI từ khiếu nại
|
||||
funds.tx.receivedFunds=Vốn đã nhận
|
||||
funds.tx.withdrawnFromWallet=rút từ ví
|
||||
funds.tx.withdrawnFromBSQWallet=BTC withdrawn from BSQ wallet
|
||||
funds.tx.noTxAvailable=Không có giao dịch nào
|
||||
funds.tx.revert=Khôi phục
|
||||
funds.tx.txSent=GIao dịch đã gửi thành công tới địa chỉ mới trong ví Bisq nội bộ.
|
||||
|
@ -1603,6 +1604,7 @@ dao.tx.type.enum.PROOF_OF_BURN=Bằng chứng đốt
|
|||
# suppress inspection "UnusedProperty"
|
||||
dao.tx.type.enum.IRREGULAR=Irregular
|
||||
|
||||
dao.tx.withdrawnFromWallet=BTC withdrawn from wallet
|
||||
dao.tx.issuanceFromCompReq=Yêu cầu bồi thường/ban hành
|
||||
dao.tx.issuanceFromCompReq.tooltip=Yêu cầu bồi thường dẫn đến ban hành BSQ mới.\nNgày ban hành: {0}
|
||||
dao.tx.issuanceFromReimbursement=Yêu cầu/ Phát hành bồi hoàn
|
||||
|
@ -1611,10 +1613,15 @@ dao.proposal.create.missingBsqFunds=You don''t have sufficient BSQ funds for cre
|
|||
|
||||
dao.proposal.create.missingBsqFundsForBond=You don''t have sufficient BSQ funds for this role. You can still publish this proposal, but you''ll need the full BSQ amount required for this role if it gets accepted. \nMissing: {0}
|
||||
|
||||
dao.proposal.create.missingMinerFeeFunds=You don''t have sufficient BTC funds for creating the proposal transaction. Any BSQ transaction require also a miner fee in BTC.\nMissing: {0}
|
||||
dao.proposal.create.missingMinerFeeFunds=You don''t have sufficient BTC funds for creating the proposal transaction. All BSQ transactions require a miner fee in BTC.\nMissing: {0}
|
||||
|
||||
dao.proposal.create.missingIssuanceFunds=You don''t have sufficient BTC funds for creating the proposal transaction. All BSQ transactions require a miner fee in BTC, and issuance transactions also require BTC for the requested BSQ amount ({0} Satoshis/BSQ).\nMissing: {1}
|
||||
|
||||
dao.feeTx.confirm=Xác nhận {0} giao dịch
|
||||
dao.feeTx.confirm.details={0} phí: {1}\nPhí đào: {2} ({3} Satoshis/byte)\nKích thước giao dịch: {4} Kb\n\nBạn có chắc là muốn công bố giao dịch {5}?
|
||||
|
||||
dao.feeTx.issuanceProposal.confirm.details={0} fee: {1}\nBTC needed for BSQ issuance: {2} ({3} Satoshis/BSQ)\nMining fee: {4} ({5} Satoshis/byte)\nTransaction size: {6} Kb\n\nIf your request is approved, you will receive the amount you requested net of the 2 BSQ proposal fee.\n\nAre you sure you want to publish the {7} transaction?
|
||||
|
||||
dao.news.bisqDAO.title=THE BISQ DAO
|
||||
dao.news.bisqDAO.description=Just as the Bisq exchange is decentralized and censorship-resistant, so is its governance model - and the Bisq DAO and BSQ token are the tools that make it possible.
|
||||
dao.news.bisqDAO.readMoreLink=Learn More About the Bisq DAO
|
||||
|
@ -1946,6 +1953,8 @@ popup.warning.nodeBanned=Một trong {0} Node đã bị chấm. Vui lòng khởi
|
|||
popup.warning.priceRelay=rơle giá
|
||||
popup.warning.seed=seed
|
||||
|
||||
popup.warning.burnBTC=This transaction is not possible, as the mining fees of {0} would exceed the amount to transfer of {1}. Please wait until the mining fees are low again or until you''ve accumulated more BTC to transfer.
|
||||
|
||||
popup.info.securityDepositInfo=Để đảm bảo cả hai người giao dịch đều tuân thủ giao thức giao dịch, cả hai cần phải trả một khoản tiền cọc. \n\nSố tiền cọc này được giữ ở ví giao dịch cho đến khi giao dịch của bạn được hoàn thành, sau đó nó sẽ được trả lại cho bạn. \nXin lưu ý: Nếu bạn tạo một chào giá mới, ứng dụng Bisq cần phải chạy để người giao dịch khác có thể nhận chào giá đó. Để giữ cho chào giá của bạn online, để Bisq chạy và đảm bảo là máy tính của bạn cũng online (nghĩa là đảm bảo là máy tính của bạn không chuyển qua chế độ standby, nếu màn hình chuyển qua chế độ standby thì không sao).
|
||||
|
||||
popup.info.cashDepositInfo=Chắc chắn rằng khu vực của bạn có chi nhánh ngân hàng có thể gửi tiền mặt.\nID (BIC/SWIFT) ngân hàng của bên bán là: {0}.
|
||||
|
|
|
@ -739,6 +739,7 @@ funds.tx.unknown=不知原因:{0}
|
|||
funds.tx.noFundsFromDispute=没有退款的纠纷
|
||||
funds.tx.receivedFunds=收到的资金:
|
||||
funds.tx.withdrawnFromWallet=从钱包提现
|
||||
funds.tx.withdrawnFromBSQWallet=BTC withdrawn from BSQ wallet
|
||||
funds.tx.noTxAvailable=没有可用交易
|
||||
funds.tx.revert=还原
|
||||
funds.tx.txSent=交易成功发送到本地Bisq钱包中的新地址。
|
||||
|
@ -1603,6 +1604,7 @@ dao.tx.type.enum.PROOF_OF_BURN=Proof of burn
|
|||
# suppress inspection "UnusedProperty"
|
||||
dao.tx.type.enum.IRREGULAR=Irregular
|
||||
|
||||
dao.tx.withdrawnFromWallet=BTC withdrawn from wallet
|
||||
dao.tx.issuanceFromCompReq=补偿请求/发行
|
||||
dao.tx.issuanceFromCompReq.tooltip=导致新BSQ发行的补偿请求\n发行日期: {0}
|
||||
dao.tx.issuanceFromReimbursement=Reimbursement request/issuance
|
||||
|
@ -1611,10 +1613,15 @@ dao.proposal.create.missingBsqFunds=You don''t have sufficient BSQ funds for cre
|
|||
|
||||
dao.proposal.create.missingBsqFundsForBond=You don''t have sufficient BSQ funds for this role. You can still publish this proposal, but you''ll need the full BSQ amount required for this role if it gets accepted. \nMissing: {0}
|
||||
|
||||
dao.proposal.create.missingMinerFeeFunds=You don''t have sufficient BTC funds for creating the proposal transaction. Any BSQ transaction require also a miner fee in BTC.\nMissing: {0}
|
||||
dao.proposal.create.missingMinerFeeFunds=You don''t have sufficient BTC funds for creating the proposal transaction. All BSQ transactions require a miner fee in BTC.\nMissing: {0}
|
||||
|
||||
dao.proposal.create.missingIssuanceFunds=You don''t have sufficient BTC funds for creating the proposal transaction. All BSQ transactions require a miner fee in BTC, and issuance transactions also require BTC for the requested BSQ amount ({0} Satoshis/BSQ).\nMissing: {1}
|
||||
|
||||
dao.feeTx.confirm=Confirm {0} transaction
|
||||
dao.feeTx.confirm.details={0} fee: {1}\nMining fee: {2} ({3} Satoshis/byte)\nTransaction size: {4} Kb\n\nAre you sure you want to publish the {5} transaction?
|
||||
|
||||
dao.feeTx.issuanceProposal.confirm.details={0} fee: {1}\nBTC needed for BSQ issuance: {2} ({3} Satoshis/BSQ)\nMining fee: {4} ({5} Satoshis/byte)\nTransaction size: {6} Kb\n\nIf your request is approved, you will receive the amount you requested net of the 2 BSQ proposal fee.\n\nAre you sure you want to publish the {7} transaction?
|
||||
|
||||
dao.news.bisqDAO.title=THE BISQ DAO
|
||||
dao.news.bisqDAO.description=Just as the Bisq exchange is decentralized and censorship-resistant, so is its governance model - and the Bisq DAO and BSQ token are the tools that make it possible.
|
||||
dao.news.bisqDAO.readMoreLink=Learn More About the Bisq DAO
|
||||
|
@ -1946,6 +1953,8 @@ popup.warning.nodeBanned=One of the {0} nodes got banned. Please restart your ap
|
|||
popup.warning.priceRelay=price relay
|
||||
popup.warning.seed=种子
|
||||
|
||||
popup.warning.burnBTC=This transaction is not possible, as the mining fees of {0} would exceed the amount to transfer of {1}. Please wait until the mining fees are low again or until you''ve accumulated more BTC to transfer.
|
||||
|
||||
popup.info.securityDepositInfo=To ensure both traders follow the trade protocol, both traders need to pay a security deposit.\n\nThis deposit is kept in your trade wallet until your trade has been successfully completed, and then it's refunded to you.\n\nPlease note: if you're creating a new offer, Bisq needs to be running for another trader to take it. To keep your offers online, keep Bisq running and make sure this computer remains online too (i.e., make sure it doesn't switch to standby mode...monitor standby is fine).
|
||||
|
||||
popup.info.cashDepositInfo=Please be sure that you have a bank branch in your area to be able to make the cash deposit.\nThe bank ID (BIC/SWIFT) of the seller''s bank is: {0}.
|
||||
|
|
|
@ -43,7 +43,7 @@ public class UserPayloadModelVOTest {
|
|||
vo.setDisplayedAlert(new Alert("message", true, "version", new byte[]{12, -64, 12}, "string", null));
|
||||
vo.setDevelopersFilter(new Filter(Lists.newArrayList(), Lists.newArrayList(), Lists.newArrayList(),
|
||||
Lists.newArrayList(), Lists.newArrayList(), Lists.newArrayList(), Lists.newArrayList(), Lists.newArrayList(),
|
||||
false, Lists.newArrayList(), false, "string", new byte[]{10, 0, 0}, null));
|
||||
false, Lists.newArrayList(), false, null, "string", new byte[]{10, 0, 0}, null));
|
||||
vo.setRegisteredArbitrator(ArbitratorTest.getArbitratorMock());
|
||||
vo.setRegisteredMediator(MediatorTest.getMediatorMock());
|
||||
vo.setAcceptedArbitrators(Lists.newArrayList(ArbitratorTest.getArbitratorMock()));
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
|
||||
# pull base image
|
||||
FROM openjdk:8-jdk
|
||||
ENV version 0.9.7-SNAPSHOT
|
||||
ENV version 0.9.8-SNAPSHOT
|
||||
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends openjfx && rm -rf /var/lib/apt/lists/* &&
|
||||
apt-get install -y vim fakeroot
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
# - Update version below
|
||||
# - Ensure JAVA_HOME below is pointing to OracleJDK 10 directory
|
||||
|
||||
version=0.9.7-SNAPSHOT
|
||||
version=0.9.8-SNAPSHOT
|
||||
if [ ! -f "$JAVA_HOME/bin/javapackager" ]; then
|
||||
if [ -d "/usr/lib/jvm/jdk-10.0.2" ]; then
|
||||
JAVA_HOME=/usr/lib/jvm/jdk-10.0.2
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
# Prior to running this script:
|
||||
# - Update version below
|
||||
|
||||
version=0.9.7-SNAPSHOT
|
||||
version=0.9.8-SNAPSHOT
|
||||
base_dir=$( cd "$(dirname "$0")" ; pwd -P )/../../..
|
||||
package_dir=$base_dir/desktop/package
|
||||
release_dir=$base_dir/desktop/release/$version
|
||||
|
|
|
@ -5,10 +5,10 @@
|
|||
<!-- See: https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html -->
|
||||
|
||||
<key>CFBundleVersion</key>
|
||||
<string>0.9.7</string>
|
||||
<string>0.9.8</string>
|
||||
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>0.9.7</string>
|
||||
<string>0.9.8</string>
|
||||
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>Bisq</string>
|
||||
|
|
|
@ -6,7 +6,7 @@ mkdir -p deploy
|
|||
|
||||
set -e
|
||||
|
||||
version="0.9.7-SNAPSHOT"
|
||||
version="0.9.8-SNAPSHOT"
|
||||
|
||||
cd ..
|
||||
./gradlew :desktop:build -x test shadowJar
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
cd ../../
|
||||
|
||||
version="0.9.7-SNAPSHOT"
|
||||
version="0.9.8-SNAPSHOT"
|
||||
|
||||
target_dir="releases/$version"
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
cd $(dirname $0)/../../../
|
||||
|
||||
version=0.9.7
|
||||
version=0.9.8
|
||||
|
||||
find . -type f \( -name "finalize.sh" \
|
||||
-o -name "create_app.sh" \
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
|
||||
cd $(dirname $0)/../../../
|
||||
|
||||
oldVersion=0.9.6
|
||||
newVersion=0.9.7
|
||||
oldVersion=0.9.7
|
||||
newVersion=0.9.8
|
||||
|
||||
find . -type f \( -name "finalize.sh" \
|
||||
-o -name "create_app.sh" \
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
|
||||
@echo off
|
||||
|
||||
set version=0.9.7-SNAPSHOT
|
||||
set version=0.9.8-SNAPSHOT
|
||||
if not exist "%JAVA_HOME%\bin\javapackager.exe" (
|
||||
if not exist "%ProgramFiles%\Java\jdk-10.0.2" (
|
||||
echo Javapackager not found. Update JAVA_HOME variable to point to OracleJDK.
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
@echo off
|
||||
|
||||
set version=0.9.7-SNAPSHOT
|
||||
set version=0.9.8-SNAPSHOT
|
||||
set release_dir=%~dp0..\..\..\releases\%version%
|
||||
set package_dir=%~dp0..
|
||||
|
||||
|
|
|
@ -119,7 +119,7 @@ public class BondingViewUtils {
|
|||
duration,
|
||||
formatter.formatCoinWithCode(miningFee),
|
||||
CoinUtil.getFeePerByte(miningFee, txSize),
|
||||
txSize
|
||||
txSize / 1000d
|
||||
))
|
||||
.actionButtonText(Res.get("shared.yes"))
|
||||
.onAction(() -> publishLockupTx(lockupAmount, lockupTime, lockupReason, hash, resultHandler))
|
||||
|
@ -180,7 +180,7 @@ public class BondingViewUtils {
|
|||
duration,
|
||||
formatter.formatCoinWithCode(miningFee),
|
||||
CoinUtil.getFeePerByte(miningFee, txSize),
|
||||
txSize
|
||||
txSize / 1000d
|
||||
))
|
||||
.actionButtonText(Res.get("shared.yes"))
|
||||
.onAction(() -> publishUnlockTx(lockupTxId, resultHandler))
|
||||
|
|
|
@ -310,8 +310,14 @@ public class MakeProposalView extends ActivatableView<GridPane, Void> implements
|
|||
new Popup<>().warning(Res.get("dao.proposal.create.missingBsqFunds",
|
||||
bsqFormatter.formatCoinWithCode(e.missing))).show();
|
||||
} else {
|
||||
new Popup<>().warning(Res.get("dao.proposal.create.missingMinerFeeFunds",
|
||||
btcFormatter.formatCoinWithCode(e.missing))).show();
|
||||
if (type.equals(ProposalType.COMPENSATION_REQUEST) || type.equals(ProposalType.REIMBURSEMENT_REQUEST)) {
|
||||
new Popup<>().warning(Res.get("dao.proposal.create.missingIssuanceFunds",
|
||||
100,
|
||||
btcFormatter.formatCoinWithCode(e.missing))).show();
|
||||
} else {
|
||||
new Popup<>().warning(Res.get("dao.proposal.create.missingMinerFeeFunds",
|
||||
btcFormatter.formatCoinWithCode(e.missing))).show();
|
||||
}
|
||||
}
|
||||
} catch (ProposalValidationException e) {
|
||||
String message;
|
||||
|
|
|
@ -20,8 +20,12 @@ package bisq.desktop.main.dao.monitor;
|
|||
import bisq.core.dao.monitoring.model.StateHash;
|
||||
import bisq.core.locale.Res;
|
||||
|
||||
import bisq.network.p2p.NodeAddress;
|
||||
|
||||
import bisq.common.util.Utilities;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.Getter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
@ -36,10 +40,15 @@ public abstract class StateInConflictListItem<T extends StateHash> {
|
|||
private final String prevHash;
|
||||
private final T stateHash;
|
||||
|
||||
protected StateInConflictListItem(String peerAddress, T stateHash, int cycleIndex) {
|
||||
protected StateInConflictListItem(String peerAddress, T stateHash, int cycleIndex,
|
||||
Set<NodeAddress> seedNodeAddresses) {
|
||||
this.stateHash = stateHash;
|
||||
this.peerAddress = peerAddress;
|
||||
height = Res.get("dao.monitor.table.cycleBlockHeight", cycleIndex + 1, String.valueOf(stateHash.getHeight()));
|
||||
this.peerAddress = seedNodeAddresses.stream().anyMatch(e -> e.getFullAddress().equals(peerAddress)) ?
|
||||
Res.get("dao.monitor.table.seedPeers", peerAddress) :
|
||||
peerAddress;
|
||||
height = Res.get("dao.monitor.table.cycleBlockHeight",
|
||||
cycleIndex + 1,
|
||||
String.valueOf(stateHash.getHeight()));
|
||||
hash = Utilities.bytesAsHexString(stateHash.getHash());
|
||||
prevHash = stateHash.getPrevHash().length > 0 ?
|
||||
Utilities.bytesAsHexString(stateHash.getPrevHash()) : "-";
|
||||
|
|
|
@ -23,6 +23,7 @@ import bisq.desktop.components.AutoTooltipButton;
|
|||
import bisq.desktop.components.AutoTooltipLabel;
|
||||
import bisq.desktop.components.AutoTooltipTableColumn;
|
||||
import bisq.desktop.components.TableGroupHeadline;
|
||||
import bisq.desktop.main.overlays.popups.Popup;
|
||||
import bisq.desktop.util.FormBuilder;
|
||||
import bisq.desktop.util.GUIUtil;
|
||||
import bisq.desktop.util.Layout;
|
||||
|
@ -36,7 +37,10 @@ import bisq.core.dao.state.DaoStateListener;
|
|||
import bisq.core.dao.state.DaoStateService;
|
||||
import bisq.core.locale.Res;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import bisq.network.p2p.NodeAddress;
|
||||
import bisq.network.p2p.seed.SeedNodeRepository;
|
||||
|
||||
import bisq.common.storage.FileManager;
|
||||
|
||||
import de.jensd.fx.fontawesome.AwesomeIcon;
|
||||
|
||||
|
@ -64,8 +68,12 @@ import javafx.collections.transformation.SortedList;
|
|||
|
||||
import javafx.util.Callback;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import java.util.Comparator;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@FxmlView
|
||||
|
@ -78,6 +86,8 @@ public abstract class StateMonitorView<StH extends StateHash,
|
|||
protected final DaoFacade daoFacade;
|
||||
protected final CycleService cycleService;
|
||||
protected final PeriodService periodService;
|
||||
protected final Set<NodeAddress> seedNodeAddresses;
|
||||
private final File storageDir;
|
||||
|
||||
protected TextField statusTextField;
|
||||
protected Button resyncButton;
|
||||
|
@ -91,22 +101,26 @@ public abstract class StateMonitorView<StH extends StateHash,
|
|||
|
||||
protected int gridRow = 0;
|
||||
private Subscription selectedItemSubscription;
|
||||
protected final BooleanProperty isInConflict = new SimpleBooleanProperty();
|
||||
protected final BooleanProperty isInConflictWithNonSeedNode = new SimpleBooleanProperty();
|
||||
protected final BooleanProperty isInConflictWithSeedNode = new SimpleBooleanProperty();
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Constructor, lifecycle
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@Inject
|
||||
public StateMonitorView(DaoStateService daoStateService,
|
||||
DaoFacade daoFacade,
|
||||
CycleService cycleService,
|
||||
PeriodService periodService) {
|
||||
protected StateMonitorView(DaoStateService daoStateService,
|
||||
DaoFacade daoFacade,
|
||||
CycleService cycleService,
|
||||
PeriodService periodService,
|
||||
SeedNodeRepository seedNodeRepository,
|
||||
File storageDir) {
|
||||
this.daoStateService = daoStateService;
|
||||
this.daoFacade = daoFacade;
|
||||
this.cycleService = cycleService;
|
||||
this.periodService = periodService;
|
||||
this.seedNodeAddresses = new HashSet<>(seedNodeRepository.getSeedNodeAddresses());
|
||||
this.storageDir = storageDir;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -124,8 +138,36 @@ public abstract class StateMonitorView<StH extends StateHash,
|
|||
|
||||
daoStateService.addDaoStateListener(this);
|
||||
|
||||
resyncButton.visibleProperty().bind(isInConflict);
|
||||
resyncButton.managedProperty().bind(isInConflict);
|
||||
resyncButton.visibleProperty().bind(isInConflictWithSeedNode);
|
||||
resyncButton.managedProperty().bind(isInConflictWithSeedNode);
|
||||
|
||||
resyncButton.setOnAction(ev -> {
|
||||
try {
|
||||
// We delete all consensus payload data and reset the daoState so it will rebuild from genesis.
|
||||
// Deleting the daoState would cause to read the file from the resources and we would not rebuild from
|
||||
// genesis if a snapshot exist!
|
||||
long currentTime = System.currentTimeMillis();
|
||||
String backupDirName = "out_of_sync_dao_data";
|
||||
String newFileName = "BlindVoteStore_" + currentTime;
|
||||
FileManager.removeAndBackupFile(storageDir, new File(storageDir, "BlindVoteStore"), newFileName, backupDirName);
|
||||
|
||||
newFileName = "ProposalStore_" + currentTime;
|
||||
FileManager.removeAndBackupFile(storageDir, new File(storageDir, "ProposalStore"), newFileName, backupDirName);
|
||||
|
||||
// We also need to remove ballot list as it contains the proposals as well. It will be recreated at resync
|
||||
newFileName = "BallotList_" + currentTime;
|
||||
FileManager.removeAndBackupFile(storageDir, new File(storageDir, "BallotList"), newFileName, backupDirName);
|
||||
|
||||
daoFacade.resyncDao(() -> new Popup<>().attention(Res.get("setting.preferences.dao.resync.popup"))
|
||||
.useShutDownButton()
|
||||
.hideCloseButton()
|
||||
.show());
|
||||
} catch (Throwable t) {
|
||||
t.printStackTrace();
|
||||
log.error(t.toString());
|
||||
new Popup<>().error(t.toString()).show();
|
||||
}
|
||||
});
|
||||
|
||||
if (daoStateService.isParseBlockChainComplete()) {
|
||||
onDataUpdate();
|
||||
|
@ -250,6 +292,17 @@ public abstract class StateMonitorView<StH extends StateHash,
|
|||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
protected void onDataUpdate() {
|
||||
if (isInConflictWithSeedNode.get()) {
|
||||
statusTextField.setText(Res.get("dao.monitor.isInConflictWithSeedNode"));
|
||||
statusTextField.getStyleClass().add("dao-inConflict");
|
||||
} else if (isInConflictWithNonSeedNode.get()) {
|
||||
statusTextField.setText(Res.get("dao.monitor.isInConflictWithNonSeedNode"));
|
||||
statusTextField.getStyleClass().remove("dao-inConflict");
|
||||
} else {
|
||||
statusTextField.setText(Res.get("dao.monitor.daoStateInSync"));
|
||||
statusTextField.getStyleClass().remove("dao-inConflict");
|
||||
}
|
||||
|
||||
GUIUtil.setFitToRowsForTableView(tableView, 25, 28, 2, 5);
|
||||
}
|
||||
|
||||
|
@ -455,7 +508,7 @@ public abstract class StateMonitorView<StH extends StateHash,
|
|||
|
||||
|
||||
column = new AutoTooltipTableColumn<>(getPeersTableHeader());
|
||||
column.setMinWidth(80);
|
||||
column.setMinWidth(150);
|
||||
column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue()));
|
||||
column.setCellFactory(
|
||||
new Callback<>() {
|
||||
|
@ -479,7 +532,7 @@ public abstract class StateMonitorView<StH extends StateHash,
|
|||
|
||||
|
||||
column = new AutoTooltipTableColumn<>(getHashTableHeader());
|
||||
column.setMinWidth(150);
|
||||
column.setMinWidth(120);
|
||||
column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue()));
|
||||
column.setCellFactory(
|
||||
new Callback<>() {
|
||||
|
@ -503,7 +556,7 @@ public abstract class StateMonitorView<StH extends StateHash,
|
|||
|
||||
|
||||
column = new AutoTooltipTableColumn<>(getPrevHashTableHeader());
|
||||
column.setMinWidth(150);
|
||||
column.setMinWidth(120);
|
||||
column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue()));
|
||||
column.setCellFactory(
|
||||
new Callback<>() {
|
||||
|
@ -527,7 +580,7 @@ public abstract class StateMonitorView<StH extends StateHash,
|
|||
|
||||
|
||||
column = new AutoTooltipTableColumn<>("");
|
||||
column.setMinWidth(100);
|
||||
column.setMinWidth(120);
|
||||
column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue()));
|
||||
column.setCellFactory(
|
||||
new Callback<>() {
|
||||
|
|
|
@ -21,6 +21,10 @@ import bisq.desktop.main.dao.monitor.StateInConflictListItem;
|
|||
|
||||
import bisq.core.dao.monitoring.model.BlindVoteStateHash;
|
||||
|
||||
import bisq.network.p2p.NodeAddress;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.Value;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
@ -31,8 +35,9 @@ import lombok.extern.slf4j.Slf4j;
|
|||
class BlindVoteStateInConflictListItem extends StateInConflictListItem<BlindVoteStateHash> {
|
||||
private final String numBlindVotes;
|
||||
|
||||
BlindVoteStateInConflictListItem(String peerAddress, BlindVoteStateHash stateHash, int cycleIndex) {
|
||||
super(peerAddress, stateHash, cycleIndex);
|
||||
BlindVoteStateInConflictListItem(String peerAddress, BlindVoteStateHash stateHash, int cycleIndex,
|
||||
Set<NodeAddress> seedNodeAddresses) {
|
||||
super(peerAddress, stateHash, cycleIndex, seedNodeAddresses);
|
||||
|
||||
numBlindVotes = String.valueOf(stateHash.getNumBlindVotes());
|
||||
}
|
||||
|
|
|
@ -20,7 +20,6 @@ package bisq.desktop.main.dao.monitor.blindvotes;
|
|||
import bisq.desktop.common.view.FxmlView;
|
||||
import bisq.desktop.components.AutoTooltipTableColumn;
|
||||
import bisq.desktop.main.dao.monitor.StateMonitorView;
|
||||
import bisq.desktop.main.overlays.popups.Popup;
|
||||
import bisq.desktop.util.FormBuilder;
|
||||
|
||||
import bisq.core.dao.DaoFacade;
|
||||
|
@ -32,7 +31,12 @@ import bisq.core.dao.monitoring.model.BlindVoteStateHash;
|
|||
import bisq.core.dao.state.DaoStateService;
|
||||
import bisq.core.locale.Res;
|
||||
|
||||
import bisq.network.p2p.seed.SeedNodeRepository;
|
||||
|
||||
import bisq.common.storage.Storage;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
|
||||
import javafx.scene.control.TableCell;
|
||||
import javafx.scene.control.TableColumn;
|
||||
|
@ -41,6 +45,8 @@ import javafx.beans.property.ReadOnlyObjectWrapper;
|
|||
|
||||
import javafx.util.Callback;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import java.util.Comparator;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
@ -50,6 +56,7 @@ public class BlindVoteStateMonitorView extends StateMonitorView<BlindVoteStateHa
|
|||
implements BlindVoteStateMonitoringService.Listener {
|
||||
private final BlindVoteStateMonitoringService blindVoteStateMonitoringService;
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Constructor, lifecycle
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -60,8 +67,10 @@ public class BlindVoteStateMonitorView extends StateMonitorView<BlindVoteStateHa
|
|||
DaoFacade daoFacade,
|
||||
BlindVoteStateMonitoringService blindVoteStateMonitoringService,
|
||||
CycleService cycleService,
|
||||
PeriodService periodService) {
|
||||
super(daoStateService, daoFacade, cycleService, periodService);
|
||||
PeriodService periodService,
|
||||
SeedNodeRepository seedNodeRepository,
|
||||
@Named(Storage.STORAGE_DIR) File storageDir) {
|
||||
super(daoStateService, daoFacade, cycleService, periodService, seedNodeRepository, storageDir);
|
||||
|
||||
this.blindVoteStateMonitoringService = blindVoteStateMonitoringService;
|
||||
}
|
||||
|
@ -80,14 +89,8 @@ public class BlindVoteStateMonitorView extends StateMonitorView<BlindVoteStateHa
|
|||
@Override
|
||||
protected void activate() {
|
||||
super.activate();
|
||||
blindVoteStateMonitoringService.addListener(this);
|
||||
|
||||
resyncButton.setOnAction(e -> daoFacade.resyncDao(() ->
|
||||
new Popup<>().attention(Res.get("setting.preferences.dao.resync.popup"))
|
||||
.useShutDownButton()
|
||||
.hideCloseButton()
|
||||
.show())
|
||||
);
|
||||
blindVoteStateMonitoringService.addListener(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -123,7 +126,7 @@ public class BlindVoteStateMonitorView extends StateMonitorView<BlindVoteStateHa
|
|||
protected BlindVoteStateInConflictListItem getStateInConflictListItem(Map.Entry<String, BlindVoteStateHash> mapEntry) {
|
||||
BlindVoteStateHash blindVoteStateHash = mapEntry.getValue();
|
||||
int cycleIndex = periodService.getCycle(blindVoteStateHash.getHeight()).map(cycleService::getCycleIndex).orElse(0);
|
||||
return new BlindVoteStateInConflictListItem(mapEntry.getKey(), mapEntry.getValue(), cycleIndex);
|
||||
return new BlindVoteStateInConflictListItem(mapEntry.getKey(), mapEntry.getValue(), cycleIndex, seedNodeAddresses);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -173,15 +176,8 @@ public class BlindVoteStateMonitorView extends StateMonitorView<BlindVoteStateHa
|
|||
|
||||
@Override
|
||||
protected void onDataUpdate() {
|
||||
isInConflict.set(blindVoteStateMonitoringService.isInConflict());
|
||||
|
||||
if (isInConflict.get()) {
|
||||
statusTextField.setText(Res.get("dao.monitor.blindVote.daoStateNotInSync"));
|
||||
statusTextField.getStyleClass().add("dao-inConflict");
|
||||
} else {
|
||||
statusTextField.setText(Res.get("dao.monitor.blindVote.daoStateInSync"));
|
||||
statusTextField.getStyleClass().remove("dao-inConflict");
|
||||
}
|
||||
isInConflictWithSeedNode.set(blindVoteStateMonitoringService.isInConflictWithSeedNode());
|
||||
isInConflictWithNonSeedNode.set(blindVoteStateMonitoringService.isInConflictWithNonSeedNode());
|
||||
|
||||
listItems.setAll(blindVoteStateMonitoringService.getBlindVoteStateBlockChain().stream()
|
||||
.map(this::getStateBlockListItem)
|
||||
|
@ -202,7 +198,7 @@ public class BlindVoteStateMonitorView extends StateMonitorView<BlindVoteStateHa
|
|||
TableColumn<BlindVoteStateBlockListItem, BlindVoteStateBlockListItem> column;
|
||||
|
||||
column = new AutoTooltipTableColumn<>(Res.get("dao.monitor.blindVote.table.numBlindVotes"));
|
||||
column.setMinWidth(110);
|
||||
column.setMinWidth(90);
|
||||
column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue()));
|
||||
column.setCellFactory(
|
||||
new Callback<>() {
|
||||
|
@ -232,7 +228,7 @@ public class BlindVoteStateMonitorView extends StateMonitorView<BlindVoteStateHa
|
|||
TableColumn<BlindVoteStateInConflictListItem, BlindVoteStateInConflictListItem> column;
|
||||
|
||||
column = new AutoTooltipTableColumn<>(Res.get("dao.monitor.blindVote.table.numBlindVotes"));
|
||||
column.setMinWidth(110);
|
||||
column.setMinWidth(90);
|
||||
column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue()));
|
||||
column.setCellFactory(
|
||||
new Callback<>() {
|
||||
|
|
|
@ -21,6 +21,10 @@ import bisq.desktop.main.dao.monitor.StateInConflictListItem;
|
|||
|
||||
import bisq.core.dao.monitoring.model.DaoStateHash;
|
||||
|
||||
import bisq.network.p2p.NodeAddress;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.Value;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
@ -29,7 +33,8 @@ import lombok.extern.slf4j.Slf4j;
|
|||
@Value
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
class DaoStateInConflictListItem extends StateInConflictListItem<DaoStateHash> {
|
||||
DaoStateInConflictListItem(String peerAddress, DaoStateHash stateHash, int cycleIndex) {
|
||||
super(peerAddress, stateHash, cycleIndex);
|
||||
DaoStateInConflictListItem(String peerAddress, DaoStateHash stateHash, int cycleIndex,
|
||||
Set<NodeAddress> seedNodeAddresses) {
|
||||
super(peerAddress, stateHash, cycleIndex, seedNodeAddresses);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -33,12 +33,18 @@ import bisq.core.dao.monitoring.model.UtxoMismatch;
|
|||
import bisq.core.dao.state.DaoStateService;
|
||||
import bisq.core.locale.Res;
|
||||
|
||||
import bisq.network.p2p.seed.SeedNodeRepository;
|
||||
|
||||
import bisq.common.storage.Storage;
|
||||
import bisq.common.util.Utilities;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
|
||||
import javafx.collections.ListChangeListener;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
|
@ -60,8 +66,10 @@ public class DaoStateMonitorView extends StateMonitorView<DaoStateHash, DaoState
|
|||
DaoFacade daoFacade,
|
||||
DaoStateMonitoringService daoStateMonitoringService,
|
||||
CycleService cycleService,
|
||||
PeriodService periodService) {
|
||||
super(daoStateService, daoFacade, cycleService, periodService);
|
||||
PeriodService periodService,
|
||||
SeedNodeRepository seedNodeRepository,
|
||||
@Named(Storage.STORAGE_DIR) File storageDir) {
|
||||
super(daoStateService, daoFacade, cycleService, periodService, seedNodeRepository, storageDir);
|
||||
|
||||
this.daoStateMonitoringService = daoStateMonitoringService;
|
||||
}
|
||||
|
@ -87,13 +95,6 @@ public class DaoStateMonitorView extends StateMonitorView<DaoStateHash, DaoState
|
|||
daoStateMonitoringService.getUtxoMismatches().addListener(utxoMismatchListChangeListener);
|
||||
|
||||
updateUtxoMismatches();
|
||||
|
||||
resyncButton.setOnAction(e -> daoFacade.resyncDao(() ->
|
||||
new Popup<>().attention(Res.get("setting.preferences.dao.resync.popup"))
|
||||
.useShutDownButton()
|
||||
.hideCloseButton()
|
||||
.show())
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -131,7 +132,7 @@ public class DaoStateMonitorView extends StateMonitorView<DaoStateHash, DaoState
|
|||
protected DaoStateInConflictListItem getStateInConflictListItem(Map.Entry<String, DaoStateHash> mapEntry) {
|
||||
DaoStateHash daoStateHash = mapEntry.getValue();
|
||||
int cycleIndex = periodService.getCycle(daoStateHash.getHeight()).map(cycleService::getCycleIndex).orElse(0);
|
||||
return new DaoStateInConflictListItem(mapEntry.getKey(), daoStateHash, cycleIndex);
|
||||
return new DaoStateInConflictListItem(mapEntry.getKey(), daoStateHash, cycleIndex, seedNodeAddresses);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -181,15 +182,8 @@ public class DaoStateMonitorView extends StateMonitorView<DaoStateHash, DaoState
|
|||
|
||||
@Override
|
||||
protected void onDataUpdate() {
|
||||
isInConflict.set(daoStateMonitoringService.isInConflict());
|
||||
|
||||
if (isInConflict.get()) {
|
||||
statusTextField.setText(Res.get("dao.monitor.daoState.daoStateNotInSync"));
|
||||
statusTextField.getStyleClass().add("dao-inConflict");
|
||||
} else {
|
||||
statusTextField.setText(Res.get("dao.monitor.daoState.daoStateInSync"));
|
||||
statusTextField.getStyleClass().remove("dao-inConflict");
|
||||
}
|
||||
isInConflictWithSeedNode.set(daoStateMonitoringService.isInConflictWithSeedNode());
|
||||
isInConflictWithNonSeedNode.set(daoStateMonitoringService.isInConflictWithNonSeedNode());
|
||||
|
||||
listItems.setAll(daoStateMonitoringService.getDaoStateBlockChain().stream()
|
||||
.map(this::getStateBlockListItem)
|
||||
|
|
|
@ -21,6 +21,10 @@ import bisq.desktop.main.dao.monitor.StateInConflictListItem;
|
|||
|
||||
import bisq.core.dao.monitoring.model.ProposalStateHash;
|
||||
|
||||
import bisq.network.p2p.NodeAddress;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.Value;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
@ -31,8 +35,9 @@ import lombok.extern.slf4j.Slf4j;
|
|||
class ProposalStateInConflictListItem extends StateInConflictListItem<ProposalStateHash> {
|
||||
private final String numProposals;
|
||||
|
||||
ProposalStateInConflictListItem(String peerAddress, ProposalStateHash stateHash, int cycleIndex) {
|
||||
super(peerAddress, stateHash, cycleIndex);
|
||||
ProposalStateInConflictListItem(String peerAddress, ProposalStateHash stateHash, int cycleIndex,
|
||||
Set<NodeAddress> seedNodeAddresses) {
|
||||
super(peerAddress, stateHash, cycleIndex, seedNodeAddresses);
|
||||
|
||||
numProposals = String.valueOf(stateHash.getNumProposals());
|
||||
}
|
||||
|
|
|
@ -20,7 +20,6 @@ package bisq.desktop.main.dao.monitor.proposals;
|
|||
import bisq.desktop.common.view.FxmlView;
|
||||
import bisq.desktop.components.AutoTooltipTableColumn;
|
||||
import bisq.desktop.main.dao.monitor.StateMonitorView;
|
||||
import bisq.desktop.main.overlays.popups.Popup;
|
||||
import bisq.desktop.util.FormBuilder;
|
||||
|
||||
import bisq.core.dao.DaoFacade;
|
||||
|
@ -32,7 +31,12 @@ import bisq.core.dao.monitoring.model.ProposalStateHash;
|
|||
import bisq.core.dao.state.DaoStateService;
|
||||
import bisq.core.locale.Res;
|
||||
|
||||
import bisq.network.p2p.seed.SeedNodeRepository;
|
||||
|
||||
import bisq.common.storage.Storage;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
|
||||
import javafx.scene.control.TableCell;
|
||||
import javafx.scene.control.TableColumn;
|
||||
|
@ -41,6 +45,8 @@ import javafx.beans.property.ReadOnlyObjectWrapper;
|
|||
|
||||
import javafx.util.Callback;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import java.util.Comparator;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
@ -60,8 +66,10 @@ public class ProposalStateMonitorView extends StateMonitorView<ProposalStateHash
|
|||
DaoFacade daoFacade,
|
||||
ProposalStateMonitoringService proposalStateMonitoringService,
|
||||
CycleService cycleService,
|
||||
PeriodService periodService) {
|
||||
super(daoStateService, daoFacade, cycleService, periodService);
|
||||
PeriodService periodService,
|
||||
SeedNodeRepository seedNodeRepository,
|
||||
@Named(Storage.STORAGE_DIR) File storageDir) {
|
||||
super(daoStateService, daoFacade, cycleService, periodService, seedNodeRepository, storageDir);
|
||||
|
||||
this.proposalStateMonitoringService = proposalStateMonitoringService;
|
||||
}
|
||||
|
@ -81,13 +89,6 @@ public class ProposalStateMonitorView extends StateMonitorView<ProposalStateHash
|
|||
protected void activate() {
|
||||
super.activate();
|
||||
proposalStateMonitoringService.addListener(this);
|
||||
|
||||
resyncButton.setOnAction(e -> daoFacade.resyncDao(() ->
|
||||
new Popup<>().attention(Res.get("setting.preferences.dao.resync.popup"))
|
||||
.useShutDownButton()
|
||||
.hideCloseButton()
|
||||
.show())
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -123,7 +124,7 @@ public class ProposalStateMonitorView extends StateMonitorView<ProposalStateHash
|
|||
protected ProposalStateInConflictListItem getStateInConflictListItem(Map.Entry<String, ProposalStateHash> mapEntry) {
|
||||
ProposalStateHash proposalStateHash = mapEntry.getValue();
|
||||
int cycleIndex = periodService.getCycle(proposalStateHash.getHeight()).map(cycleService::getCycleIndex).orElse(0);
|
||||
return new ProposalStateInConflictListItem(mapEntry.getKey(), mapEntry.getValue(), cycleIndex);
|
||||
return new ProposalStateInConflictListItem(mapEntry.getKey(), mapEntry.getValue(), cycleIndex, seedNodeAddresses);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -173,15 +174,8 @@ public class ProposalStateMonitorView extends StateMonitorView<ProposalStateHash
|
|||
|
||||
@Override
|
||||
protected void onDataUpdate() {
|
||||
isInConflict.set(proposalStateMonitoringService.isInConflict());
|
||||
|
||||
if (isInConflict.get()) {
|
||||
statusTextField.setText(Res.get("dao.monitor.proposal.daoStateNotInSync"));
|
||||
statusTextField.getStyleClass().add("dao-inConflict");
|
||||
} else {
|
||||
statusTextField.setText(Res.get("dao.monitor.proposal.daoStateInSync"));
|
||||
statusTextField.getStyleClass().remove("dao-inConflict");
|
||||
}
|
||||
isInConflictWithSeedNode.set(proposalStateMonitoringService.isInConflictWithSeedNode());
|
||||
isInConflictWithNonSeedNode.set(proposalStateMonitoringService.isInConflictWithNonSeedNode());
|
||||
|
||||
listItems.setAll(proposalStateMonitoringService.getProposalStateBlockChain().stream()
|
||||
.map(this::getStateBlockListItem)
|
||||
|
|
|
@ -296,18 +296,25 @@ public class BsqSendView extends ActivatableView<GridPane, Void> implements BsqB
|
|||
Transaction txWithBtcFee = btcWalletService.completePreparedSendBsqTx(preparedSendTx, true);
|
||||
Transaction signedTx = bsqWalletService.signTx(txWithBtcFee);
|
||||
Coin miningFee = signedTx.getFee();
|
||||
int txSize = signedTx.bitcoinSerialize().length;
|
||||
showPublishTxPopup(receiverAmount,
|
||||
txWithBtcFee,
|
||||
TxType.INVALID,
|
||||
miningFee,
|
||||
txSize, receiversBtcAddressInputTextField.getText(),
|
||||
btcFormatter,
|
||||
btcFormatter,
|
||||
() -> {
|
||||
receiversBtcAddressInputTextField.setText("");
|
||||
btcAmountInputTextField.setText("");
|
||||
});
|
||||
|
||||
if (miningFee.getValue() >= receiverAmount.getValue())
|
||||
GUIUtil.showWantToBurnBTCPopup(miningFee, receiverAmount, btcFormatter);
|
||||
else {
|
||||
int txSize = signedTx.bitcoinSerialize().length;
|
||||
showPublishTxPopup(receiverAmount,
|
||||
txWithBtcFee,
|
||||
TxType.INVALID,
|
||||
miningFee,
|
||||
txSize, receiversBtcAddressInputTextField.getText(),
|
||||
btcFormatter,
|
||||
btcFormatter,
|
||||
() -> {
|
||||
receiversBtcAddressInputTextField.setText("");
|
||||
btcAmountInputTextField.setText("");
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
} catch (Throwable t) {
|
||||
handleError(t);
|
||||
}
|
||||
|
|
|
@ -47,6 +47,7 @@ class BsqTxListItem extends TxConfidenceListItem {
|
|||
private final BsqFormatter bsqFormatter;
|
||||
private final Date date;
|
||||
private final boolean isBurnedBsqTx;
|
||||
private final boolean withdrawalToBTCWallet;
|
||||
|
||||
private final String address;
|
||||
private final String direction;
|
||||
|
@ -73,6 +74,11 @@ class BsqTxListItem extends TxConfidenceListItem {
|
|||
|
||||
Coin valueSentToMe = bsqWalletService.getValueSentToMeForTransaction(transaction);
|
||||
Coin valueSentFromMe = bsqWalletService.getValueSentFromMeForTransaction(transaction);
|
||||
Coin valueSentToMyBTCWallet = btcWalletService.getValueSentToMeForTransaction(transaction);
|
||||
Coin valueSentFromMyBTCWallet = btcWalletService.getValueSentFromMeForTransaction(transaction);
|
||||
|
||||
withdrawalToBTCWallet = valueSentToMyBTCWallet.getValue() > valueSentFromMyBTCWallet.getValue();
|
||||
|
||||
amount = valueSentToMe.subtract(valueSentFromMe);
|
||||
if (amount.isPositive()) {
|
||||
if (txId.equals(daoFacade.getGenesisTxId()))
|
||||
|
@ -124,5 +130,9 @@ class BsqTxListItem extends TxConfidenceListItem {
|
|||
.flatMap(tx -> daoFacade.getOptionalTxType(tx.getId()))
|
||||
.orElse(confirmations == 0 ? TxType.UNVERIFIED : TxType.UNDEFINED_TX_TYPE);
|
||||
}
|
||||
|
||||
public boolean isWithdrawalToBTCWallet() {
|
||||
return withdrawalToBTCWallet;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -463,6 +463,10 @@ public class BsqTxView extends ActivatableView<GridPane, Void> implements BsqBal
|
|||
setGraphic(field);
|
||||
}
|
||||
} else {
|
||||
|
||||
if (item.isWithdrawalToBTCWallet())
|
||||
labelString = Res.get("dao.tx.withdrawnFromWallet");
|
||||
|
||||
label = new AutoTooltipLabel(labelString);
|
||||
setGraphic(label);
|
||||
}
|
||||
|
@ -497,9 +501,17 @@ public class BsqTxView extends ActivatableView<GridPane, Void> implements BsqBal
|
|||
super.updateItem(item, empty);
|
||||
if (item != null && !empty) {
|
||||
TxType txType = item.getTxType();
|
||||
setText(item.getConfirmations() > 0 && isValidType(txType) ?
|
||||
bsqFormatter.formatCoin(item.getAmount()) :
|
||||
Res.get("shared.na"));
|
||||
|
||||
String bsqAmount = Res.get("shared.na");
|
||||
|
||||
if (item.getConfirmations() > 0) {
|
||||
if (isValidType(txType))
|
||||
bsqAmount = bsqFormatter.formatCoin(item.getAmount());
|
||||
else if (item.isWithdrawalToBTCWallet())
|
||||
bsqAmount = bsqFormatter.formatBSQSatoshis(0L);
|
||||
}
|
||||
|
||||
setText(bsqAmount);
|
||||
} else
|
||||
setText("");
|
||||
}
|
||||
|
|
|
@ -93,6 +93,7 @@ class TransactionsListItem {
|
|||
|
||||
// TODO check and refactor
|
||||
boolean txFeeForBsqPayment = false;
|
||||
boolean withdrawalFromBSQWallet = false;
|
||||
if (valueSentToMe.isZero()) {
|
||||
amountAsCoin = valueSentFromMe.multiply(-1);
|
||||
for (TransactionOutput output : transaction.getOutputs()) {
|
||||
|
@ -145,6 +146,14 @@ class TransactionsListItem {
|
|||
}
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
addressString = WalletService.getAddressStringFromOutput(output);
|
||||
outgoing = (valueSentToMe.getValue() < valueSentFromMe.getValue());
|
||||
if (!outgoing) {
|
||||
direction = Res.get("funds.tx.direction.receivedWith");
|
||||
received = true;
|
||||
withdrawalFromBSQWallet = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -216,6 +225,8 @@ class TransactionsListItem {
|
|||
} else {
|
||||
if (amountAsCoin.isZero())
|
||||
details = Res.get("funds.tx.noFundsFromDispute");
|
||||
else if (withdrawalFromBSQWallet)
|
||||
details = Res.get("funds.tx.withdrawnFromBSQWallet");
|
||||
else if (!txFeeForBsqPayment)
|
||||
details = received ? Res.get("funds.tx.receivedFunds") : Res.get("funds.tx.withdrawnFromWallet");
|
||||
else if (details.isEmpty())
|
||||
|
|
|
@ -141,6 +141,7 @@ public class FilterWindow extends Overlay<FilterWindow> {
|
|||
InputTextField btcNodesInputTextField = addInputTextField(gridPane, ++rowIndex, Res.get("filterWindow.btcNode"));
|
||||
CheckBox preventPublicBtcNetworkCheckBox = addLabelCheckBox(gridPane, ++rowIndex, Res.get("filterWindow.preventPublicBtcNetwork"));
|
||||
CheckBox disableDaoCheckBox = addLabelCheckBox(gridPane, ++rowIndex, Res.get("filterWindow.disableDao"));
|
||||
InputTextField disableDaoBelowVersionInputTextField = addInputTextField(gridPane, ++rowIndex, Res.get("filterWindow.disableDaoBelowVersion"));
|
||||
|
||||
final Filter filter = filterManager.getDevelopersFilter();
|
||||
if (filter != null) {
|
||||
|
@ -182,6 +183,7 @@ public class FilterWindow extends Overlay<FilterWindow> {
|
|||
preventPublicBtcNetworkCheckBox.setSelected(filter.isPreventPublicBtcNetwork());
|
||||
|
||||
disableDaoCheckBox.setSelected(filter.isDisableDao());
|
||||
disableDaoBelowVersionInputTextField.setText(filter.getDisableDaoBelowVersion());
|
||||
}
|
||||
Button sendButton = new AutoTooltipButton(Res.get("filterWindow.add"));
|
||||
sendButton.setOnAction(e -> {
|
||||
|
@ -267,7 +269,8 @@ public class FilterWindow extends Overlay<FilterWindow> {
|
|||
priceRelayNodes,
|
||||
preventPublicBtcNetworkCheckBox.isSelected(),
|
||||
btcNodes,
|
||||
disableDaoCheckBox.isSelected()),
|
||||
disableDaoCheckBox.isSelected(),
|
||||
disableDaoBelowVersionInputTextField.getText()),
|
||||
keyInputTextField.getText()))
|
||||
hide();
|
||||
else
|
||||
|
|
|
@ -340,7 +340,7 @@ public class FormBuilder {
|
|||
hyperlinkWithIcon.setOnAction(e -> GUIUtil.openWebPage(url));
|
||||
GridPane.setRowIndex(hyperlinkWithIcon, rowIndex);
|
||||
GridPane.setColumnIndex(hyperlinkWithIcon, 0);
|
||||
GridPane.setMargin(hyperlinkWithIcon, new Insets(top, 0, 0, -4));
|
||||
GridPane.setMargin(hyperlinkWithIcon, new Insets(top, 0, 0, 0));
|
||||
GridPane.setHalignment(hyperlinkWithIcon, HPos.LEFT);
|
||||
gridPane.getChildren().add(hyperlinkWithIcon);
|
||||
return hyperlinkWithIcon;
|
||||
|
|
|
@ -751,6 +751,11 @@ public class GUIUtil {
|
|||
log.warn("showNotReadyForTxBroadcastPopups called but no case matched. This should never happen if isReadyForTxBroadcast was called before.");
|
||||
}
|
||||
|
||||
public static void showWantToBurnBTCPopup(Coin miningFee, Coin amount, BSFormatter btcFormatter) {
|
||||
new Popup<>().warning(Res.get("popup.warning.burnBTC", btcFormatter.formatCoinWithCode(miningFee),
|
||||
btcFormatter.formatCoinWithCode(amount))).show();
|
||||
}
|
||||
|
||||
public static void requestFocus(Node node) {
|
||||
UserThread.execute(node::requestFocus);
|
||||
}
|
||||
|
|
BIN
p2p/src/main/resources/AccountAgeWitnessStore_BTC_DAO_REGTEST
Normal file
BIN
p2p/src/main/resources/AccountAgeWitnessStore_BTC_DAO_REGTEST
Normal file
Binary file not shown.
Binary file not shown.
BIN
p2p/src/main/resources/BlindVoteStore_BTC_DAO_REGTEST
Normal file
BIN
p2p/src/main/resources/BlindVoteStore_BTC_DAO_REGTEST
Normal file
Binary file not shown.
BIN
p2p/src/main/resources/DaoStateStore_BTC_DAO_REGTEST
Normal file
BIN
p2p/src/main/resources/DaoStateStore_BTC_DAO_REGTEST
Normal file
Binary file not shown.
BIN
p2p/src/main/resources/ProposalStore_BTC_DAO_REGTEST
Normal file
BIN
p2p/src/main/resources/ProposalStore_BTC_DAO_REGTEST
Normal file
Binary file not shown.
BIN
p2p/src/main/resources/TempProposalStore_BTC_DAO_REGTEST
Normal file
BIN
p2p/src/main/resources/TempProposalStore_BTC_DAO_REGTEST
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -1 +1 @@
|
|||
0.9.7-SNAPSHOT
|
||||
0.9.8-SNAPSHOT
|
||||
|
|
|
@ -34,7 +34,7 @@ import lombok.extern.slf4j.Slf4j;
|
|||
|
||||
@Slf4j
|
||||
public class SeedNodeMain extends ExecutableForAppWithP2p {
|
||||
private static final String VERSION = "0.9.7";
|
||||
private static final String VERSION = "0.9.8";
|
||||
private SeedNode seedNode;
|
||||
|
||||
public SeedNodeMain() {
|
||||
|
|
Loading…
Add table
Reference in a new issue