mirror of
https://github.com/haveno-dex/haveno.git
synced 2025-04-15 13:33:03 -04:00
Merge branch 'haveno-dex:master' into haveno-reto
This commit is contained in:
commit
7c9e7d6e1f
@ -112,8 +112,7 @@ public class XmrLocalNode {
|
||||
// determine if local node is configured
|
||||
boolean hasConfiguredLocalNode = false;
|
||||
for (XmrNode node : xmrNodes.selectPreferredNodes(new XmrNodesSetupPreferences(preferences))) {
|
||||
String prefix = node.getAddress().startsWith("http") ? "" : "http://";
|
||||
if (equalsUri(prefix + node.getAddress() + ":" + node.getPort())) {
|
||||
if (node.getAddress() != null && equalsUri("http://" + node.getAddress() + ":" + node.getPort())) {
|
||||
hasConfiguredLocalNode = true;
|
||||
break;
|
||||
}
|
||||
@ -139,7 +138,11 @@ public class XmrLocalNode {
|
||||
}
|
||||
|
||||
public boolean equalsUri(String uri) {
|
||||
return HavenoUtils.isLocalHost(uri) && MoneroUtils.parseUri(uri).getPort() == HavenoUtils.getDefaultMoneroPort();
|
||||
try {
|
||||
return HavenoUtils.isLocalHost(uri) && MoneroUtils.parseUri(uri).getPort() == HavenoUtils.getDefaultMoneroPort();
|
||||
} catch (Exception e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -75,8 +75,6 @@ public class XmrNodes {
|
||||
new XmrNode(MoneroNodesOption.PROVIDED, null, null, "127.0.0.1", 38081, 1, "@local"),
|
||||
new XmrNode(MoneroNodesOption.PROVIDED, null, null, "127.0.0.1", 39081, 1, "@local"),
|
||||
new XmrNode(MoneroNodesOption.PROVIDED, null, null, "45.63.8.26", 38081, 2, "@haveno"),
|
||||
new XmrNode(MoneroNodesOption.PROVIDED, null, null, "stagenet.community.rino.io", 38081, 3, "@RINOwallet"),
|
||||
new XmrNode(MoneroNodesOption.PUBLIC, null, null, "stagenet.melo.tools", 38081, 3, null),
|
||||
new XmrNode(MoneroNodesOption.PUBLIC, null, null, "node.sethforprivacy.com", 38089, 3, null),
|
||||
new XmrNode(MoneroNodesOption.PUBLIC, null, null, "node2.sethforprivacy.com", 38089, 3, null),
|
||||
new XmrNode(MoneroNodesOption.PUBLIC, null, "plowsof3t5hogddwabaeiyrno25efmzfxyro2vligremt7sxpsclfaid.onion", null, 38089, 3, null)
|
||||
@ -85,7 +83,6 @@ public class XmrNodes {
|
||||
return Arrays.asList(
|
||||
new XmrNode(MoneroNodesOption.PUBLIC, null, null, "127.0.0.1", 18081, 1, "@local"),
|
||||
new XmrNode(MoneroNodesOption.PUBLIC, null, null, "xmr-node.cakewallet.com", 18081, 2, "@cakewallet"),
|
||||
new XmrNode(MoneroNodesOption.PUBLIC, null, null, "node.community.rino.io", 18081, 2, "@RINOwallet"),
|
||||
new XmrNode(MoneroNodesOption.PUBLIC, null, null, "nodes.hashvault.pro", 18080, 2, "@HashVault"),
|
||||
new XmrNode(MoneroNodesOption.PUBLIC, null, null, "p2pmd.xmrvsbeast.com", 18080, 2, "@xmrvsbeast"),
|
||||
new XmrNode(MoneroNodesOption.PUBLIC, null, null, "node.monerodevs.org", 18089, 2, "@monerodevs.org"),
|
||||
|
@ -672,7 +672,8 @@ portfolio.pending.autoConf.state.ERROR=An error at a service request occurred. N
|
||||
# suppress inspection "UnusedProperty"
|
||||
portfolio.pending.autoConf.state.FAILED=A service returned with a failure. No auto-confirm possible.
|
||||
|
||||
portfolio.pending.step1.info=Deposit transaction has been published.\n{0} need to wait for 10 confirmations (about 20 minutes) before the payment can start.
|
||||
portfolio.pending.step1.info.you=Deposit transaction has been published.\nYou need to wait for 10 confirmations (about 20 minutes) before the payment can start.
|
||||
portfolio.pending.step1.info.buyer=Deposit transaction has been published.\nThe XMR buyer needs to wait for 10 confirmations (about 20 minutes) before the payment can start.
|
||||
portfolio.pending.step1.warn=The deposit transaction is not confirmed yet. This usually takes about 20 minutes, but could be more if the network is congested.
|
||||
portfolio.pending.step1.openForDispute=The deposit transaction is still not confirmed. \
|
||||
If you have been waiting for much longer than 20 minutes, contact Haveno support.
|
||||
|
@ -672,7 +672,8 @@ portfolio.pending.autoConf.state.ERROR=Došlo k chybě při požadavku na služb
|
||||
# suppress inspection "UnusedProperty"
|
||||
portfolio.pending.autoConf.state.FAILED=Služba se vrátila se selháním. Není možné automatické potvrzení.
|
||||
|
||||
portfolio.pending.step1.info=Vkladová transakce byla zveřejněna.\n{0} před zahájením platby musíte počkat na alespoň jedno potvrzení na blockchainu.
|
||||
portfolio.pending.step1.info.you=Transakce vkladu byla publikována.\nMusíte počkat na 10 potvrzení (přibližně 20 minut), než bude platba zahájena.
|
||||
portfolio.pending.step1.info.buyer=Transakce vkladu byla publikována.\nKupující XMR musí počkat na 10 potvrzení (asi 20 minut), než bude platba zahájena.
|
||||
portfolio.pending.step1.warn=Vkladová transakce není stále potvrzena. K tomu někdy dochází ve vzácných případech, kdy byl poplatek za financování jednoho obchodníka z externí peněženky příliš nízký.
|
||||
portfolio.pending.step1.openForDispute=Vkladová transakce není stále potvrzena. \
|
||||
Pokud jste čekali mnohem déle než 20 minut, můžete poádat o pomoc podporu Haveno.
|
||||
|
@ -615,7 +615,8 @@ portfolio.pending.autoConf.state.ERROR=An einer Service-Abfrage ist ein Fehler a
|
||||
# suppress inspection "UnusedProperty"
|
||||
portfolio.pending.autoConf.state.FAILED=Eine Service-Abfrage ist ausgefallen. Eine Automatische Bestätigung ist nicht mehr möglich.
|
||||
|
||||
portfolio.pending.step1.info=Die Kautionstransaktion wurde veröffentlicht.\n{0} muss auf wenigstens eine Blockchain-Bestätigung warten, bevor die Zahlung beginnt.
|
||||
portfolio.pending.step1.info.you=Die Einzahlungstransaktion wurde veröffentlicht.\nSie müssen 10 Bestätigungen abwarten (etwa 20 Minuten), bevor die Zahlung beginnen kann.
|
||||
portfolio.pending.step1.info.buyer=Die Einzahlungstransaktion wurde veröffentlicht.\nDer XMR-Käufer muss 10 Bestätigungen abwarten (ca. 20 Minuten), bevor die Zahlung gestartet werden kann.
|
||||
portfolio.pending.step1.warn=Die Kautionstransaktion ist noch nicht bestätigt. Dies geschieht manchmal in seltenen Fällen, wenn die Finanzierungsgebühr aus der externen Wallet eines Traders zu niedrig war.
|
||||
portfolio.pending.step1.openForDispute=Die Kautionstransaktion ist noch nicht bestätigt. Sie können länger warten oder den Vermittler um Hilfe bitten.
|
||||
|
||||
|
@ -615,7 +615,8 @@ portfolio.pending.autoConf.state.ERROR=Ocurrió un error en el servicio solicit
|
||||
# suppress inspection "UnusedProperty"
|
||||
portfolio.pending.autoConf.state.FAILED=Un servicio volvió con algún fallo. No es posible la autoconfirmación.
|
||||
|
||||
portfolio.pending.step1.info=La transacción de depósito ha sido publicada.\n{0} tiene que esperar al menos una confirmación en la cadena de bloques antes de comenzar el pago.
|
||||
portfolio.pending.step1.info.you=La transacción de depósito ha sido publicada.\nNecesitas esperar 10 confirmaciones (aproximadamente 20 minutos) antes de que el pago pueda comenzar.
|
||||
portfolio.pending.step1.info.buyer=La transacción de depósito ha sido publicada.\nEl comprador de XMR necesita esperar 10 confirmaciones (aproximadamente 20 minutos) antes de que el pago pueda comenzar.
|
||||
portfolio.pending.step1.warn=La transacción del depósito aún no se ha confirmado.\nEsto puede suceder en raras ocasiones cuando la tasa de depósito de un comerciante desde una cartera externa es demasiado baja.
|
||||
portfolio.pending.step1.openForDispute=La transacción de depósito aún no ha sido confirmada. Puede esperar más o contactar con el mediador para obtener asistencia.
|
||||
|
||||
|
@ -614,7 +614,8 @@ portfolio.pending.autoConf.state.ERROR=An error at a service request occurred. N
|
||||
# suppress inspection "UnusedProperty"
|
||||
portfolio.pending.autoConf.state.FAILED=A service returned with a failure. No auto-confirm possible.
|
||||
|
||||
portfolio.pending.step1.info=تراکنش سپرده منتشر شده است.\nباید برای حداقل یک تأییدیه بلاک چین قبل از آغاز پرداخت، {0} صبر کنید.
|
||||
portfolio.pending.step1.info.you=تراکنش واریز منتشر شده است.\nشما باید منتظر 10 تاییدیه (حدود 20 دقیقه) باشید تا پرداخت آغاز شود.
|
||||
portfolio.pending.step1.info.buyer=تراکنش واریز منتشر شده است.\nخریدار XMR باید منتظر ۱۰ تاییدیه (حدود ۲۰ دقیقه) باشد تا پرداخت آغاز شود.
|
||||
portfolio.pending.step1.warn=The deposit transaction is still not confirmed. This sometimes happens in rare cases when the funding fee of one trader from an external wallet was too low.
|
||||
portfolio.pending.step1.openForDispute=The deposit transaction is still not confirmed. You can wait longer or contact the mediator for assistance.
|
||||
|
||||
|
@ -615,7 +615,8 @@ portfolio.pending.autoConf.state.ERROR=Une erreur lors de la demande du service
|
||||
# suppress inspection "UnusedProperty"
|
||||
portfolio.pending.autoConf.state.FAILED=Un service a retourné un échec. L'auto-confirmation n'est pas possible.
|
||||
|
||||
portfolio.pending.step1.info=La transaction de dépôt à été publiée.\n{0} devez attendre au moins une confirmation de la blockchain avant d''initier le paiement.
|
||||
portfolio.pending.step1.info.you=La transaction de dépôt a été publiée.\nVous devez attendre 10 confirmations (environ 20 minutes) avant que le paiement ne puisse commencer.
|
||||
portfolio.pending.step1.info.buyer=La transaction de dépôt a été publiée.\nL'acheteur XMR doit attendre 10 confirmations (environ 20 minutes) avant que le paiement puisse commencer.
|
||||
portfolio.pending.step1.warn=La transaction de dépôt n'est toujours pas confirmée. Cela se produit parfois dans de rares occasions lorsque les frais de financement d'un trader en provenance d'un portefeuille externe sont trop bas.
|
||||
portfolio.pending.step1.openForDispute=La transaction de dépôt n'est toujours pas confirmée. Vous pouvez attendre plus longtemps ou contacter le médiateur pour obtenir de l'aide.
|
||||
|
||||
|
@ -614,7 +614,8 @@ portfolio.pending.autoConf.state.ERROR=An error at a service request occurred. N
|
||||
# suppress inspection "UnusedProperty"
|
||||
portfolio.pending.autoConf.state.FAILED=A service returned with a failure. No auto-confirm possible.
|
||||
|
||||
portfolio.pending.step1.info=La transazione di deposito è stata pubblicata.\n {0} deve attendere almeno una conferma dalla blockchain prima di avviare il pagamento.
|
||||
portfolio.pending.step1.info.you=La transazione di deposito è stata pubblicata.\nDevi aspettare 10 conferme (circa 20 minuti) prima che il pagamento possa iniziare.
|
||||
portfolio.pending.step1.info.buyer=La transazione di deposito è stata pubblicata.\nL'acquirente XMR deve aspettare 10 conferme (circa 20 minuti) prima che il pagamento possa iniziare.
|
||||
portfolio.pending.step1.warn=La transazione di deposito non è ancora confermata. Questo accade raramente e nel caso in cui la commissione di transazione di un trader proveniente da un portafoglio esterno è troppo bassa.
|
||||
portfolio.pending.step1.openForDispute=La transazione di deposito non è ancora confermata. Puoi attendere più a lungo o contattare il mediatore per ricevere assistenza.
|
||||
|
||||
|
@ -615,7 +615,8 @@ portfolio.pending.autoConf.state.ERROR=サービスリクエストにはエラ
|
||||
# suppress inspection "UnusedProperty"
|
||||
portfolio.pending.autoConf.state.FAILED=サービスは失敗を返しました。自動確認できません。
|
||||
|
||||
portfolio.pending.step1.info=デポジットトランザクションが発行されました。\n{0}は、支払いを開始する前に少なくとも1つのブロックチェーンの承認を待つ必要があります。
|
||||
portfolio.pending.step1.info.you=入金トランザクションが公開されました。\n支払いが開始されるまで、10回の確認(約20分)を待つ必要があります。
|
||||
portfolio.pending.step1.info.buyer=入金トランザクションが公開されました。\nXMRの購入者は、支払いを開始する前に10回の確認(約20分)を待つ必要があります。
|
||||
portfolio.pending.step1.warn=デポジットトランザクションがまだ承認されていません。外部ウォレットからの取引者の資金調達手数料が低すぎるときには、例外的なケースで起こるかもしれません。
|
||||
portfolio.pending.step1.openForDispute=デポジットトランザクションがまだ承認されていません。もう少し待つか、助けを求めて調停人に連絡できます。
|
||||
|
||||
|
@ -617,7 +617,8 @@ portfolio.pending.autoConf.state.ERROR=An error at a service request occurred. N
|
||||
# suppress inspection "UnusedProperty"
|
||||
portfolio.pending.autoConf.state.FAILED=A service returned with a failure. No auto-confirm possible.
|
||||
|
||||
portfolio.pending.step1.info=A transação de depósito foi publicada\n{0} precisa esperar ao menos uma confirmação da blockchain antes de iniciar o pagamento.
|
||||
portfolio.pending.step1.info.you=A transação de depósito foi publicada.\nVocê precisa aguardar 10 confirmações (cerca de 20 minutos) antes que o pagamento possa começar.
|
||||
portfolio.pending.step1.info.buyer=A transação de depósito foi publicada.\nO comprador de XMR precisa aguardar 10 confirmações (cerca de 20 minutos) antes que o pagamento possa ser iniciado.
|
||||
portfolio.pending.step1.warn=A transação do depósito ainda não foi confirmada.\nIsto pode ocorrer em casos raros em que a taxa de financiamento de um dos negociadores enviada a partir de uma carteira externa foi muito baixa.
|
||||
portfolio.pending.step1.openForDispute=A transação de depósito ainda não foi confirmada. Você pode aguardar um pouco mais ou entrar em contato com o mediador para pedir assistência.
|
||||
|
||||
|
@ -614,7 +614,8 @@ portfolio.pending.autoConf.state.ERROR=An error at a service request occurred. N
|
||||
# suppress inspection "UnusedProperty"
|
||||
portfolio.pending.autoConf.state.FAILED=A service returned with a failure. No auto-confirm possible.
|
||||
|
||||
portfolio.pending.step1.info=A transação de depósito foi publicada.\n{0} precisa aguardar pelo menos uma confirmação da blockchain antes de iniciar o pagamento.
|
||||
portfolio.pending.step1.info.you=A transação de depósito foi publicada.\nVocê precisa aguardar 10 confirmações (cerca de 20 minutos) antes que o pagamento possa começar.
|
||||
portfolio.pending.step1.info.buyer=A transação de depósito foi publicada.\nO comprador de XMR precisa aguardar 10 confirmações (cerca de 20 minutos) antes que o pagamento possa ser iniciado.
|
||||
portfolio.pending.step1.warn=A transação de depósito ainda não foi confirmada. Isso pode acontecer em casos raros, quando a taxa de financiamento de um negociador proveniente de uma carteira externa foi muito baixa.
|
||||
portfolio.pending.step1.openForDispute=A transação de depósito ainda não foi confirmada. Você pode esperar mais tempo ou entrar em contato com o mediador para obter assistência.
|
||||
|
||||
|
@ -614,7 +614,8 @@ portfolio.pending.autoConf.state.ERROR=An error at a service request occurred. N
|
||||
# suppress inspection "UnusedProperty"
|
||||
portfolio.pending.autoConf.state.FAILED=A service returned with a failure. No auto-confirm possible.
|
||||
|
||||
portfolio.pending.step1.info=Депозитная транзакция опубликована.\n{0} должен дождаться хотя бы одного подтверждения в блокчейне перед началом платежа.
|
||||
portfolio.pending.step1.info.you=Транзакция депозита была опубликована.\nВам нужно дождаться 10 подтверждений (около 20 минут), прежде чем платеж сможет начаться.
|
||||
portfolio.pending.step1.info.buyer=Транзакция депозита была опубликована.\nПокупатель XMR должен подождать 10 подтверждений (около 20 минут), прежде чем платеж может быть начат.
|
||||
portfolio.pending.step1.warn=The deposit transaction is still not confirmed. This sometimes happens in rare cases when the funding fee of one trader from an external wallet was too low.
|
||||
portfolio.pending.step1.openForDispute=The deposit transaction is still not confirmed. You can wait longer or contact the mediator for assistance.
|
||||
|
||||
|
@ -614,7 +614,8 @@ portfolio.pending.autoConf.state.ERROR=An error at a service request occurred. N
|
||||
# suppress inspection "UnusedProperty"
|
||||
portfolio.pending.autoConf.state.FAILED=A service returned with a failure. No auto-confirm possible.
|
||||
|
||||
portfolio.pending.step1.info=ธุรกรรมเงินฝากได้รับการเผยแพร่แล้ว\n{0} ต้องรอการยืนยันของบล็อกเชนอย่างน้อยหนึ่งครั้งก่อนที่จะเริ่มการชำระเงิน
|
||||
portfolio.pending.step1.info.you=ธุรกรรมการฝากเงินได้รับการเผยแพร่แล้ว\nคุณต้องรอ 10 คอนเฟิร์ม (ประมาณ 20 นาที) ก่อนที่การชำระเงินจะเริ่มต้น
|
||||
portfolio.pending.step1.info.buyer=การทำธุรกรรมฝากเงินได้รับการเผยแพร่แล้ว。\nผู้ซื้อ XMR จำเป็นต้องรอการยืนยัน 10 ครั้ง (ประมาณ 20 นาที) ก่อนที่การชำระเงินจะเริ่มต้นได้
|
||||
portfolio.pending.step1.warn=The deposit transaction is still not confirmed. This sometimes happens in rare cases when the funding fee of one trader from an external wallet was too low.
|
||||
portfolio.pending.step1.openForDispute=The deposit transaction is still not confirmed. You can wait longer or contact the mediator for assistance.
|
||||
|
||||
|
@ -669,7 +669,8 @@ portfolio.pending.autoConf.state.ERROR=Bir hizmet talebinde hata oluştu. Otomat
|
||||
# suppress inspection "UnusedProperty"
|
||||
portfolio.pending.autoConf.state.FAILED=Bir hizmet başarısızlıkla sonuçlandı. Otomatik onay mümkün değil.
|
||||
|
||||
portfolio.pending.step1.info=Yatırım işlemi yayımlandı.\n{0} ödemeye başlamadan önce 10 onay (yaklaşık 20 dakika) beklemeniz gerekiyor.
|
||||
portfolio.pending.step1.info.you=Depozito işlemi yayımlandı.\nÖdemenin başlayabilmesi için 10 onay beklemeniz gerekiyor (yaklaşık 20 dakika).
|
||||
portfolio.pending.step1.info.buyer=Depozito işlemi yayınlandı.\nXMR alıcısının ödeme işlemine başlanmadan önce 10 onay beklemesi gerekiyor (yaklaşık 20 dakika).
|
||||
portfolio.pending.step1.warn=Yatırım işlemi henüz onaylanmadı. Bu genellikle yaklaşık 20 dakika sürer, ancak ağ yoğunsa daha uzun sürebilir.
|
||||
portfolio.pending.step1.openForDispute=Yatırım işlemi hala onaylanmadı. \
|
||||
20 dakikadan çok daha uzun süre beklediyseniz, Haveno desteği ile iletişime geçin.
|
||||
|
@ -614,7 +614,8 @@ portfolio.pending.autoConf.state.ERROR=An error at a service request occurred. N
|
||||
# suppress inspection "UnusedProperty"
|
||||
portfolio.pending.autoConf.state.FAILED=A service returned with a failure. No auto-confirm possible.
|
||||
|
||||
portfolio.pending.step1.info=Giao dịch đặt cọc đã được công bố.\n{0} Bạn cần đợi ít nhất một xác nhận blockchain trước khi bắt đầu thanh toán.
|
||||
portfolio.pending.step1.info.you=Giao dịch nạp tiền đã được công bố.\nBạn cần đợi 10 xác nhận (khoảng 20 phút) trước khi thanh toán có thể bắt đầu.
|
||||
portfolio.pending.step1.info.buyer=Giao dịch gửi tiền đã được công bố.\nNgười mua XMR cần chờ 10 xác nhận (khoảng 20 phút) trước khi thanh toán có thể bắt đầu.
|
||||
portfolio.pending.step1.warn=The deposit transaction is still not confirmed. This sometimes happens in rare cases when the funding fee of one trader from an external wallet was too low.
|
||||
portfolio.pending.step1.openForDispute=The deposit transaction is still not confirmed. You can wait longer or contact the mediator for assistance.
|
||||
|
||||
|
@ -615,7 +615,8 @@ portfolio.pending.autoConf.state.ERROR=您请求的服务发生了错误。没
|
||||
# suppress inspection "UnusedProperty"
|
||||
portfolio.pending.autoConf.state.FAILED=服务返回失败。没有自动确认。
|
||||
|
||||
portfolio.pending.step1.info=存款交易已经发布。\n开始付款之前,{0} 需要等待至少一个区块链确认。
|
||||
portfolio.pending.step1.info.you=存款交易已发布。\n您需要等待 10 次确认(约 20 分钟)后付款才能开始。
|
||||
portfolio.pending.step1.info.buyer=存款交易已发布。\nXMR 买家需要等待 10 次确认(大约 20 分钟),然后才能开始付款。
|
||||
portfolio.pending.step1.warn=保证金交易仍未得到确认。这种情况可能会发生在外部钱包转账时使用的交易手续费用较低造成的。
|
||||
portfolio.pending.step1.openForDispute=保证金交易仍未得到确认。请联系调解员协助。
|
||||
|
||||
|
@ -615,7 +615,8 @@ portfolio.pending.autoConf.state.ERROR=您請求的服務發生了錯誤。沒
|
||||
# suppress inspection "UnusedProperty"
|
||||
portfolio.pending.autoConf.state.FAILED=服務返回失敗。沒有自動確認。
|
||||
|
||||
portfolio.pending.step1.info=存款交易已經發布。\n開始付款之前,{0} 需要等待至少一個區塊鏈確認。
|
||||
portfolio.pending.step1.info.you=存款交易已發布。\n您需要等待 10 次確認(約 20 分鐘)後,付款才能開始。
|
||||
portfolio.pending.step1.info.buyer=存款交易已發佈。\nXMR 購買者需要等待 10 次確認(大約 20 分鐘)才能開始付款。
|
||||
portfolio.pending.step1.warn=保證金交易仍未得到確認。這種情況可能會發生在外部錢包轉賬時使用的交易手續費用較低造成的。
|
||||
portfolio.pending.step1.openForDispute=保證金交易仍未得到確認。請聯繫調解員協助。
|
||||
|
||||
|
@ -51,7 +51,7 @@ public class BuyerStep1View extends TradeStepView {
|
||||
|
||||
@Override
|
||||
protected String getInfoText() {
|
||||
return Res.get("portfolio.pending.step1.info", Res.get("shared.You"));
|
||||
return Res.get("portfolio.pending.step1.info.you");
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -48,7 +48,7 @@ public class SellerStep1View extends TradeStepView {
|
||||
|
||||
@Override
|
||||
protected String getInfoText() {
|
||||
return Res.get("portfolio.pending.step1.info", Res.get("shared.TheXMRBuyer"));
|
||||
return Res.get("portfolio.pending.step1.info.buyer");
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -28,7 +28,7 @@ Follow [instructions](https://github.com/haveno-dex/haveno-ts#run-tests) to run
|
||||
2. Define the new service or message in Haveno's [protobuf definition](../proto/src/main/proto/grpc.proto).
|
||||
3. Clean and build Haveno after modifying the protobuf definition: `make clean && make`
|
||||
4. Implement the new service in Haveno's backend, following existing patterns.<br>
|
||||
For example, the gRPC function to get offers is implemented by [`GrpcServer`](https://github.com/haveno-dex/haveno/blob/master/daemon/src/main/java/haveno/daemon/grpc/GrpcServer.java) > [`GrpcOffersService.getOffers(...)`](https://github.com/haveno-dex/haveno/blob/b761dbfd378faf49d95090c126318b419af7926b/daemon/src/main/java/haveno/daemon/grpc/GrpcOffersService.java#L104) > [`CoreApi.getOffers(...)`](https://github.com/haveno-dex/haveno/blob/b761dbfd378faf49d95090c126318b419af7926b/core/src/main/java/haveno/core/api/CoreApi.java#L128) > [`CoreOffersService.getOffers(...)`](https://github.com/haveno-dex/haveno/blob/b761dbfd378faf49d95090c126318b419af7926b/core/src/main/java/haveno/core/api/CoreOffersService.java#L126) > [`OfferBookService.getOffers()`](https://github.com/haveno-dex/haveno/blob/b761dbfd378faf49d95090c126318b419af7926b/core/src/main/java/haveno/core/offer/OfferBookService.java#L193).
|
||||
For example, the gRPC function to get offers is implemented by [`GrpcServer`](https://github.com/haveno-dex/haveno/blob/master/daemon/src/main/java/haveno/daemon/grpc/GrpcServer.java) > [`GrpcOffersService.getOffers(...)`](https://github.com/haveno-dex/haveno/blob/060d9fa4f138ca07f596386972265782e5ec7b7a/daemon/src/main/java/haveno/daemon/grpc/GrpcOffersService.java#L102) > [`CoreApi.getOffers(...)`](https://github.com/haveno-dex/haveno/blob/060d9fa4f138ca07f596386972265782e5ec7b7a/core/src/main/java/haveno/core/api/CoreApi.java#L403) > [`CoreOffersService.getOffers(...)`](https://github.com/haveno-dex/haveno/blob/060d9fa4f138ca07f596386972265782e5ec7b7a/core/src/main/java/haveno/core/api/CoreOffersService.java#L131) > [`OfferBookService.getOffers()`](https://github.com/haveno-dex/haveno/blob/060d9fa4f138ca07f596386972265782e5ec7b7a/core/src/main/java/haveno/core/offer/OfferBookService.java#L248).
|
||||
5. Build Haveno: `make`
|
||||
6. Update the gRPC client in haveno-ts: `npm install`
|
||||
7. Add the corresponding typescript method(s) to [HavenoClient.ts](https://github.com/haveno-dex/haveno-ts/blob/master/src/HavenoClient.ts) with clear and concise documentation.
|
||||
|
460
docs/external-tor-usage.md
Normal file
460
docs/external-tor-usage.md
Normal file
@ -0,0 +1,460 @@
|
||||
# **Using External `tor` with Haveno**
|
||||
## [How to Install little-t-`tor` for Your Platform](https://support.torproject.org/little-t-tor/#little-t-tor_install-little-t-tor)
|
||||
|
||||
The following `tor` installation instructions are presented here for convenience.
|
||||
|
||||
* **For the most complete, up-to-date & authoritative steps, readers are encouraged to refer to the [Tor Project's Official Homepage](https://www.torproject.org) linked in the header**
|
||||
|
||||
* **Notes:**
|
||||
|
||||
For optimum compatibility with Haveno the running `tor` version should match that of the internal Haveno `tor` version
|
||||
|
||||
For best results, use a version of `tor` which supports the [Onion Service Proof of Work](https://onionservices.torproject.org/technology/security/pow) (`PoW`) mechanism
|
||||
* (IE: `GNU` build of `tor`)
|
||||
|
||||
---
|
||||
|
||||
* **Note Regarding Admin Access:**
|
||||
|
||||
To install `tor` you need root privileges. Below all commands that need to be run as `root` user like `apt` and `dpkg` are prepended with `#`, while commands to be run as user with `$` resembling the standard prompt in a terminal.
|
||||
|
||||
### macOS
|
||||
#### Install a Package Manager
|
||||
Two of the most popular package managers for `macOS` are:
|
||||
|
||||
[`Homebrew`](https://brew.sh)
|
||||
|
||||
and
|
||||
|
||||
[`Macports`](https://www.macports.org)
|
||||
|
||||
(You can use the package manager of your choice)
|
||||
|
||||
+ Install [`Homebrew`](https://brew.sh)
|
||||
|
||||
Follow the instructions on [brew.sh](https://brew.sh)
|
||||
|
||||
+ Install [`Macports`](https://www.macports.org)
|
||||
|
||||
Follow the instructions on [macports.org](https://www.macports.org)
|
||||
|
||||
#### Package Installation
|
||||
##### [`Homebrew`](https://brew.sh)
|
||||
```shell
|
||||
# brew update && brew install tor
|
||||
```
|
||||
|
||||
##### [`Macports`](https://www.macports.org)
|
||||
```shell
|
||||
# port sync && port install tor
|
||||
```
|
||||
|
||||
### Debian / Ubuntu
|
||||
* *Do **not** use the packages in Ubuntu's universe. In the past they have not reliably been updated. That means you could be missing stability and security fixes.*
|
||||
|
||||
* Configure the [Official Tor Package Repository](https://deb.torproject.org/torproject.org)
|
||||
|
||||
Enable the [Official Tor Package Repository](https://deb.torproject.org/torproject.org) following these [instructions](https://support.torproject.org/apt/tor-deb-repo/)
|
||||
|
||||
#### Package Installation
|
||||
```shell
|
||||
# apt update && apt install tor
|
||||
```
|
||||
|
||||
### Fedora
|
||||
* Configure the [Official Tor Package Repository](https://rpm.torproject.org/fedora)
|
||||
|
||||
Enable the [Official Tor Package Repository](https://rpm.torproject.org/fedora) by following these [instructions](https://support.torproject.org/rpm/tor-rpm-install)
|
||||
|
||||
#### Package Installation
|
||||
```
|
||||
# dnf update && dnf install tor
|
||||
```
|
||||
|
||||
### Arch Linux
|
||||
#### Package Installation
|
||||
```shell
|
||||
# pacman -Fy && pacman -Syu tor
|
||||
```
|
||||
|
||||
### Installing `tor` from source
|
||||
#### Download Latest Release & Dependencies
|
||||
The latest release of `tor` can be found on the [download](https://www.torproject.org/download/tor) page
|
||||
|
||||
* When building from source:
|
||||
|
||||
*First* install `libevent`,`openssl` & `zlib`
|
||||
|
||||
*(Including the -devel packages when applicable)*
|
||||
|
||||
#### Install `tor`
|
||||
```shell
|
||||
$ tar -xzf tor-<version>.tar.gz; cd tor-<version>
|
||||
```
|
||||
|
||||
* Replace \<version\> with the latest version of `tor`
|
||||
|
||||
> For example, `tor-0.4.8.14`
|
||||
|
||||
```shell
|
||||
$ ./configure && make
|
||||
```
|
||||
|
||||
* Now you can run `tor` (0.4.3.x and Later) locally like this:
|
||||
|
||||
```shell
|
||||
$ ./src/app/tor
|
||||
```
|
||||
|
||||
Or, you can run `make install` (as `root` if necessary) to install it globally into `/usr/local/`
|
||||
|
||||
* Now you can run `tor` directly without absolute path like this:
|
||||
|
||||
```shell
|
||||
$ tor
|
||||
```
|
||||
|
||||
### Windows
|
||||
#### Download
|
||||
* Download the `Windows Expert Bundle` from the [Official Tor Project's Download page](https://www.torproject.org/download/tor)
|
||||
|
||||
#### Extract
|
||||
* Extract Archive to Disk
|
||||
|
||||
#### Open Terminal
|
||||
* Open PowerShell with Admin Privileges
|
||||
|
||||
#### Change to Location of Extracted Archive
|
||||
* Navigate to `Tor` Directory
|
||||
|
||||
#### Package Installation
|
||||
* v10
|
||||
```powershell
|
||||
PS C:\Tor\> tor.exe –-service install
|
||||
```
|
||||
|
||||
* v11
|
||||
```powershell
|
||||
PS C:\Tor\> tor.exe –-service install
|
||||
```
|
||||
|
||||
#### Create Service
|
||||
```powershell
|
||||
PS C:\Tor\> sc create tor start=auto binPath="<PATH TO>\Tor\tor.exe -nt-service"
|
||||
```
|
||||
|
||||
#### Start Service
|
||||
```powershell
|
||||
PS C:\Tor\> sc start tor
|
||||
```
|
||||
|
||||
## Configuring `tor` via `torrc`
|
||||
#### [I'm supposed to "edit my torrc". What does that mean?](https://support.torproject.org/tbb/tbb-editing-torrc/)
|
||||
* Per the [Official Tor Project's support page](https://support.torproject.org/tbb/tbb-editing-torrc/):
|
||||
* **WARNING:** Do **NOT** follow random advice instructing you to edit your torrc! Doing so can allow an attacker to compromise your security and anonymity through malicious configuration of your torrc.
|
||||
|
||||
**Note:**
|
||||
|
||||
The `torrc` location will ***not*** match those stated in the documentation linked above and will vary across each platform.
|
||||
|
||||
#### [Sample `torrc`](https://gitlab.torproject.org/tpo/core/tor/-/blob/HEAD/src/config/torrc.sample.in)
|
||||
Users are ***strongly*** encouraged to review both the [Official Tor Project's support page](https://support.torproject.org/tbb/tbb-editing-torrc/) as well as the [sample `torrc`](https://gitlab.torproject.org/tpo/core/tor/-/blob/HEAD/src/config/torrc.sample.in) before proceeding.
|
||||
|
||||
#### Enable `torControlPort` in `torrc`
|
||||
In order for Haveno to use the `--torControlPort` option, it must be enabled and accessible. The most common way to do so is to edit the `torrc` fiel with a text editor to ensure that an entry for `ControlPort` followed by port number to listen on is present in the `torrc` file.
|
||||
|
||||
#### [Authentication](https://spec.torproject.org/control-spec/implementation-notes.html#authentication)
|
||||
Per the [Tor Control Protocol - Implementation Notes](https://spec.torproject.org/control-spec/implementation-notes.html):
|
||||
|
||||
* ***"If the control port is open and no authentication operation is enabled, `tor` trusts any local user that connects to the control port. This is generally a poor idea."***
|
||||
|
||||
##### `CookieAuthentication`
|
||||
If the `CookieAuthentication` option is true, `tor` writes a *"magic cookie"* file named `control_auth_cookie` into its data directory (or to another file specified in the `CookieAuthFile` option).
|
||||
|
||||
##### Example:
|
||||
```shell
|
||||
ControlPort 9051
|
||||
CookieAuthentication 1
|
||||
```
|
||||
|
||||
##### `HashedControlPassword`
|
||||
If the `HashedControlPassword` option is set, it must contain the salted hash of a secret password. The salted hash is computed according to the S2K algorithm in `RFC 2440` of `OpenPGP`, and prefixed with the s2k specifier. This is then encoded in hexadecimal, prefixed by the indicator sequence "16:".
|
||||
|
||||
* `HashedControlPassword` can be generated like so:
|
||||
```shell
|
||||
$ tor --hash-password <password>
|
||||
```
|
||||
|
||||
###### Example:
|
||||
```shell
|
||||
ControlPort 9051
|
||||
HashedControlPassword 16:C01147DC5F4DA2346056668DD23522558D0E0C8B5CC88FE72EEBC51967
|
||||
```
|
||||
|
||||
##### Restart `tor`
|
||||
`tor` must be restarted for changes to `torrc` to be applied.
|
||||
|
||||
### \* ***Optional*** \*
|
||||
#### [Set Up Your Onion Service](https://community.torproject.org/onion-services/setup)
|
||||
|
||||
While not a *strict* requirement for use with Haveno, some users may wish to configure an [Onion Service](https://community.torproject.org/onion-services)
|
||||
|
||||
* ***Only Required When Using The Haveno `--hiddenServiceAddress` Option***
|
||||
|
||||
Please see the [Official Tor Project's Documentation](https://community.torproject.org/onion-services/setup) for more information about configuration and usage of these services
|
||||
|
||||
---
|
||||
|
||||
## Haveno's `tor` Aware Options
|
||||
|
||||
Haveno is a natively `tor` aware application and offers **many** flexible configuration options for use by privacy conscious users.
|
||||
|
||||
While some are mutually exclusive, many are cross-applicable.
|
||||
|
||||
Users are encouraged to experiment with options before use to determine which options best fit their personal threat profile.
|
||||
|
||||
### Options
|
||||
#### `--hiddenServiceAddress`
|
||||
* Function:
|
||||
|
||||
This option configures a *static* Hidden Service Address to listen on
|
||||
|
||||
* Expected Input Format:
|
||||
|
||||
`<String>`
|
||||
|
||||
(`ed25519`)
|
||||
|
||||
* Acceptable Values
|
||||
|
||||
`<v3 Onion Address Value>`
|
||||
|
||||
* Default value:
|
||||
|
||||
`null`
|
||||
|
||||
#### `--socks5ProxyXmrAddress`
|
||||
* Function:
|
||||
|
||||
A proxy address to be used for `monero` network
|
||||
|
||||
* Expected Input Format:
|
||||
|
||||
`<String>`
|
||||
|
||||
* Acceptable Values
|
||||
|
||||
`<Host:Port Value>`
|
||||
|
||||
* Default value:
|
||||
|
||||
`null`
|
||||
|
||||
#### `--torrcFile`
|
||||
* Function:
|
||||
|
||||
An existing `torrc`-file to be sourced for `tor`
|
||||
|
||||
**Note:**
|
||||
|
||||
`torrc`-entries which are critical to Haveno's flawless operation (`torrc` options line, `torrc` option, ...) **can not** be overwritten
|
||||
|
||||
* Expected Input Format:
|
||||
|
||||
`<String>`
|
||||
|
||||
* Acceptable Values
|
||||
|
||||
`<Local File Location Value>`
|
||||
|
||||
* Default value:
|
||||
|
||||
`null`
|
||||
|
||||
#### `--torrcOptions`
|
||||
* Function:
|
||||
|
||||
A list of `torrc`-entries to amend to Haveno's `torrc`
|
||||
|
||||
**Note:**
|
||||
|
||||
*`torrc`-entries which are critical to Haveno's flawless operation (`torrc` options line, `torrc` option, ...) can **not** be overwritten*
|
||||
|
||||
* Expected Input Format:
|
||||
|
||||
`<String>`
|
||||
|
||||
* Acceptable Values
|
||||
|
||||
`<^([^\s,]+\s[^,]+,?\s*)+$>`
|
||||
|
||||
* Default value:
|
||||
|
||||
`null`
|
||||
|
||||
#### `--torControlHost`
|
||||
+ Function
|
||||
|
||||
The control `hostname` or `IP` of an already running `tor` service to be used by Haveno
|
||||
|
||||
* Expected Input Format
|
||||
|
||||
`<String>`
|
||||
|
||||
(`hostname`, `IPv4` or `IPv6`)
|
||||
|
||||
* Acceptable Values
|
||||
|
||||
`<TorControl Host Value>`
|
||||
|
||||
* Default Value
|
||||
|
||||
`null`
|
||||
|
||||
#### `--torControlPort`
|
||||
+ Function
|
||||
|
||||
The control port of an already running `tor` service to be used by Haveno
|
||||
|
||||
* Expected Input Format
|
||||
|
||||
`<Numeric String>`
|
||||
|
||||
* Acceptable Values
|
||||
|
||||
`<TorControlPort Value>`
|
||||
|
||||
* Default Value
|
||||
|
||||
`-1`
|
||||
|
||||
#### `--torControlPassword`
|
||||
+ Function
|
||||
|
||||
The password for controlling the already running `tor` service
|
||||
|
||||
* Expected Input Format
|
||||
|
||||
`<Alpha-Numeric-Special String>`
|
||||
|
||||
* Acceptable Values
|
||||
|
||||
`<Passphrase Value>`
|
||||
|
||||
* Default Value
|
||||
|
||||
`null`
|
||||
|
||||
#### `--torControlCookieFile`
|
||||
+ Function
|
||||
|
||||
The cookie file for authenticating against the already running `tor` service
|
||||
* Used in conjunction with `--torControlUseSafeCookieAuth` option
|
||||
|
||||
* Expected Input Format
|
||||
|
||||
`<Alpha-Numeric-Special String>`
|
||||
|
||||
* Acceptable Values
|
||||
|
||||
`<Local File Location>`
|
||||
|
||||
* Default Value
|
||||
|
||||
`null`
|
||||
|
||||
#### `--torControlUseSafeCookieAuth`
|
||||
+ Function
|
||||
|
||||
Use the `SafeCookie` method when authenticating to the already running `tor` service
|
||||
|
||||
* Expected Input Format
|
||||
|
||||
`null`
|
||||
|
||||
* Acceptable Values
|
||||
|
||||
`none`
|
||||
|
||||
* Default Value
|
||||
|
||||
`off`
|
||||
|
||||
#### `--torStreamIsolation`
|
||||
+ Function
|
||||
|
||||
Use stream isolation for Tor
|
||||
* This option is currently considered ***experimental***
|
||||
|
||||
* Expected Input Format
|
||||
|
||||
`<Alpha String>`
|
||||
|
||||
* Acceptable Values
|
||||
|
||||
`<on|off>`
|
||||
|
||||
* Default Value
|
||||
|
||||
`off`
|
||||
|
||||
#### `--useTorForXmr`
|
||||
+ Function
|
||||
|
||||
Configure `tor` for `monero` connections with ***either***:
|
||||
|
||||
* after_sync
|
||||
|
||||
**or**
|
||||
|
||||
* off
|
||||
|
||||
**or**
|
||||
|
||||
* on
|
||||
|
||||
* Expected Input Format
|
||||
|
||||
`<Alpha String>`
|
||||
|
||||
* Acceptable Values
|
||||
|
||||
`<AFTER_SYNC|OFF|ON>`
|
||||
|
||||
* Default Value
|
||||
|
||||
`AFTER_SYNC`
|
||||
|
||||
#### `--socks5DiscoverMode`
|
||||
+ Function
|
||||
|
||||
Specify discovery mode for `monero` nodes
|
||||
|
||||
* Expected Input Format
|
||||
|
||||
`<mode[,...]>`
|
||||
|
||||
* Acceptable Values
|
||||
|
||||
`ADDR, DNS, ONION, ALL`
|
||||
|
||||
One or more comma separated.
|
||||
|
||||
*(Will be **OR**'d together)*
|
||||
|
||||
* Default Value
|
||||
|
||||
`ALL`
|
||||
|
||||
---
|
||||
|
||||
## Starting Haveno Using Externally Available `tor`
|
||||
### Dynamic Onion Assignment via `--torControlPort`
|
||||
```shell
|
||||
$ /opt/haveno/bin/Haveno --torControlPort='9051' --torControlCookieFile='/var/run/tor/control.authcookie' --torControlUseSafeCookieAuth --useTorForXmr='on' --socks5ProxyXmrAddress='127.0.0.1:9050'
|
||||
```
|
||||
|
||||
### Static Onion Assignment via `--hiddenServiceAddress`
|
||||
```shell
|
||||
$ /opt/haveno/bin/Haveno --socks5ProxyXmrAddress='127.0.0.1:9050' --useTorForXmr='on' --hiddenServiceAddress='2gzyxa5ihm7nsggfxnu52rck2vv4rvmdlkiu3zzui5du4xyclen53wid.onion'
|
||||
```
|
@ -77,7 +77,7 @@ Steps:
|
||||
|
||||
1. Run `make user1-desktop-stagenet` to start the application.
|
||||
2. Click on the "Funds" tab in the top menu and copy the generated XMR address.
|
||||
3. Go to the [stagenet faucet](https://community.rino.io/faucet/stagenet/) and paste the address above in the "Get XMR" field. Submit and see the stagenet coins being sent to your Haveno instance.
|
||||
3. Go to the [stagenet faucet](https://stagenet-faucet.xmr-tw.org) and paste the address above in the "Get XMR" field. Submit and see the stagenet coins being sent to your Haveno instance.
|
||||
4. While you wait the 10 confirmations (20 minutes) needed for your funds to be spendable, create a fiat account by clicking on "Account" in the top menu, select the "National currency accounts" tab, then add a new account. For simplicity, we suggest to test using a Revolut account with a random ID.
|
||||
5. Now pick up an existing offer or open a new one. Fund your trade and wait 10 blocks for your deposit to be unlocked.
|
||||
6. Now if you are taking a trade you'll be asked to confirm you have sent the payment outside Haveno. Confirm in the app and wait for the confirmation of received payment from the other trader.
|
||||
|
Loading…
x
Reference in New Issue
Block a user