From e9c25dbe65b54bfe72865aef9652139440c3c1dd Mon Sep 17 00:00:00 2001 From: jerryfletcher21 Date: Sat, 15 Jun 2024 17:25:17 +0200 Subject: [PATCH 01/18] fix some tests --- api/logics.py | 7 ++++--- tests/test_trade_pipeline.py | 4 ++-- tests/utils/pgp.py | 6 +++--- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/api/logics.py b/api/logics.py index 7049e21c..72122288 100644 --- a/api/logics.py +++ b/api/logics.py @@ -736,9 +736,10 @@ class Logics: valid = cls.create_onchain_payment( order, user, preliminary_amount=context["invoice_amount"] ) - order.log( - f"Suggested mining fee is {order.payout_tx.suggested_mining_fee_rate} Sats/vbyte, the swap fee rate is {order.payout_tx.swap_fee_rate}%" - ) + if order.payout_tx is not None: + order.log( + f"Suggested mining fee is {order.payout_tx.suggested_mining_fee_rate} Sats/vbyte, the swap fee rate is {order.payout_tx.swap_fee_rate}%" + ) if not valid: context["swap_allowed"] = False context[ diff --git a/tests/test_trade_pipeline.py b/tests/test_trade_pipeline.py index 32a39c9e..d27b0197 100644 --- a/tests/test_trade_pipeline.py +++ b/tests/test_trade_pipeline.py @@ -1012,8 +1012,8 @@ class TradeTest(BaseAPITestCase): invoice = add_invoice("robot", response.json()["earned_rewards"]) signed_payout_invoice = sign_message( invoice, - passphrase_path=f"tests/robots/{trade.taker_index}/token", - private_key_path=f"tests/robots/{trade.taker_index}/enc_priv_key", + passphrase_path=f"tests/robots/{trade.maker_index}/token", + private_key_path=f"tests/robots/{trade.maker_index}/enc_priv_key", ) body = { "invoice": signed_payout_invoice, diff --git a/tests/utils/pgp.py b/tests/utils/pgp.py index a269ef7e..7150c64f 100644 --- a/tests/utils/pgp.py +++ b/tests/utils/pgp.py @@ -10,11 +10,11 @@ def sign_message(message, private_key_path, passphrase_path): with open(passphrase_path, "r") as f: passphrase = f.read() - gpg.import_keys(private_key, passphrase=passphrase) + import_result = gpg.import_keys(private_key, passphrase=passphrase) - # keyid=import_result.fingerprints[0] signed_message = gpg.sign( - message, passphrase=passphrase, extra_args=["--digest-algo", "SHA512"] + message, keyid=import_result.fingerprints[0], passphrase=passphrase, + extra_args=["--digest-algo", "SHA512"] ) # [print(name, getattr(signed_message, name)) for name in dir(signed_message) if not callable(getattr(signed_message, name))] From 7bfafc933ee4d165bddcd3aa111e4a890555a0c9 Mon Sep 17 00:00:00 2001 From: jerryfletcher21 Date: Mon, 17 Jun 2024 01:56:33 +0200 Subject: [PATCH 02/18] fix test_withdraw_reward_after_unilateral_cancel --- tests/test_trade_pipeline.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/test_trade_pipeline.py b/tests/test_trade_pipeline.py index d27b0197..60698fad 100644 --- a/tests/test_trade_pipeline.py +++ b/tests/test_trade_pipeline.py @@ -1000,7 +1000,7 @@ class TradeTest(BaseAPITestCase): # Fetch amount of rewards for taker path = reverse("robot") - taker_headers = trade.get_robot_auth(trade.maker_index) + taker_headers = trade.get_robot_auth(trade.taker_index) response = self.client.get(path, **taker_headers) self.assertEqual(response.status_code, 200) @@ -1012,8 +1012,8 @@ class TradeTest(BaseAPITestCase): invoice = add_invoice("robot", response.json()["earned_rewards"]) signed_payout_invoice = sign_message( invoice, - passphrase_path=f"tests/robots/{trade.maker_index}/token", - private_key_path=f"tests/robots/{trade.maker_index}/enc_priv_key", + passphrase_path=f"tests/robots/{trade.taker_index}/token", + private_key_path=f"tests/robots/{trade.taker_index}/enc_priv_key", ) body = { "invoice": signed_payout_invoice, From 5e26e3ab938bd7af79959b862761e26b12d1444c Mon Sep 17 00:00:00 2001 From: jerryfletcher21 Date: Thu, 20 Jun 2024 19:26:42 +0200 Subject: [PATCH 03/18] remove payout_tx check in logics.py --- api/logics.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/api/logics.py b/api/logics.py index 72122288..7049e21c 100644 --- a/api/logics.py +++ b/api/logics.py @@ -736,10 +736,9 @@ class Logics: valid = cls.create_onchain_payment( order, user, preliminary_amount=context["invoice_amount"] ) - if order.payout_tx is not None: - order.log( - f"Suggested mining fee is {order.payout_tx.suggested_mining_fee_rate} Sats/vbyte, the swap fee rate is {order.payout_tx.swap_fee_rate}%" - ) + order.log( + f"Suggested mining fee is {order.payout_tx.suggested_mining_fee_rate} Sats/vbyte, the swap fee rate is {order.payout_tx.swap_fee_rate}%" + ) if not valid: context["swap_allowed"] = False context[ From 20d56bdb6f61bf20ad0b528bf8dbfe23879034eb Mon Sep 17 00:00:00 2001 From: jerryfletcher21 Date: Wed, 26 Jun 2024 19:07:14 +0200 Subject: [PATCH 04/18] fix verify_signed_message verify_signed_message was not checking for the validity of the signature. The documentation of python-gnupg is not clear about this, it says that the fiels are set just if the signature is valid. In this case tests/robots/1/signed_message was signed with the correct key but with the wrong digest-algo (SHA256 instead of SHA512) as expressed on the signature. Running gpg --verify tests/robots/1/signed_message returned: gpg: WARNING: signature digest conflict in message gpg: Can't check signature: General error and a non zero error code, but verify_signed_message was not catching this because verified.fingerprint was set even though verified.valid was False. --- api/utils.py | 2 +- tests/robots/1/signed_message | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/api/utils.py b/api/utils.py index 13fad5b0..2d797fd7 100644 --- a/api/utils.py +++ b/api/utils.py @@ -448,7 +448,7 @@ def verify_signed_message(pub_key, signed_message): # verify the signed message verified = gpg.verify(signed_message) - if verified.fingerprint == import_result.fingerprints[0]: + if verified.valid and verified.fingerprint == import_result.fingerprints[0]: header = "-----BEGIN PGP SIGNED MESSAGE-----\nHash: SHA512\n\n" footer = "-----BEGIN PGP SIGNATURE-----" cleartext_message = signed_message.split(header)[1].split(footer)[0].strip() diff --git a/tests/robots/1/signed_message b/tests/robots/1/signed_message index 6be10ef6..2f88965f 100644 --- a/tests/robots/1/signed_message +++ b/tests/robots/1/signed_message @@ -4,8 +4,8 @@ Hash: SHA512 bcrt1qrrvml8tr4lkwlqpg9g394tye6s5950qf9tj9e9 -----BEGIN PGP SIGNATURE----- -iHUEARYIAB0WIQQyIVYjhac1qLz7sLwuNFtLSY2XJAUCZVUUTQAKCRAuNFtLSY2X -JA4zAP9PW71ZvQglGnexa9LYryVbnI0w3WnWXYaOmowy/aMM5wD/a2xZNk95DiDq -s8PnKT41yS+QIBrn7+iZ2DqlCjKdNgc= -=NOcM +iHUEARYKAB0WIQQyIVYjhac1qLz7sLwuNFtLSY2XJAUCZnxJEwAKCRAuNFtLSY2X +JEEvAQCh/RPf17JvbodoTbmnyrxWFAeydn3aNefnCVtPrL81XQD/YPMEfIM4f2Tf +3uPqTn0vtXUKtsYtZvxRi8STL7nXKws= +=Nlv0 -----END PGP SIGNATURE----- From c78b760b7eead71ab169da17fe38f391e3277d95 Mon Sep 17 00:00:00 2001 From: BitcoinVeneto Date: Sun, 3 Nov 2024 17:40:35 +0100 Subject: [PATCH 05/18] Update it.json Update italian translation --- frontend/static/locales/it.json | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/frontend/static/locales/it.json b/frontend/static/locales/it.json index 1c118c98..a9c4be38 100644 --- a/frontend/static/locales/it.json +++ b/frontend/static/locales/it.json @@ -166,14 +166,14 @@ "#18": "Phrases in components/Dialogs/About.tsx", "(GitHub).": "(GitHub).", "(Telegram)": "(Telegram)", - ". RoboSats developers will never contact you. The developers or the coordinators will definitely never ask for your robot token.": ". RoboSats developers will never contact you. The developers or the coordinators will definitely never ask for your robot token.", + ". RoboSats developers will never contact you. The developers or the coordinators will definitely never ask for your robot token.": ". Gli sviluppatori di Robosats non ti contatteranno mai. Gli sviluppatori o i coordinatori, non ti chiederranno mai il tuo token.", "All of them as long as they are fast. You can write down your preferred payment method(s). You will have to match with a peer who also accepts that method. The step to exchange fiat has a expiry time of 24 hours before a dispute is automatically open. We highly recommend using instant fiat payment rails.": "Tutti, purchè siano veloci. Puoi indicare i tuoi metodi di pagamento preferiti. Dovrai trovare un tuo pari che preferisce gli stessi metodi. Il passaggio di trasferimento di fiat ha una scadenza di 24 ore prima che una disputa sia aperta automaticamente. Raccomandiamo caldamente di usare canali di pagamento fiat instantanei.", "Are there trade limits?": "Ci sono limiti agli scambi?", - "At no point, AnonymousAlice01 and BafflingBob02 have to entrust the bitcoin funds to each other. In case they have a conflict, the RoboSats coordinator will help resolving the dispute.": "At no point, AnonymousAlice01 and BafflingBob02 have to entrust the bitcoin funds to each other. In case they have a conflict, the RoboSats coordinator will help resolving the dispute.", + "At no point, AnonymousAlice01 and BafflingBob02 have to entrust the bitcoin funds to each other. In case they have a conflict, the RoboSats coordinator will help resolving the dispute.": "In nessun momento AnonymousAlice01 e BafflingBob02 devono affidarsi reciprocamente i fondi bitcoin. In caso di disputa, il coordinatore RoboSats aiuterà a risolvere la controversia.", "Be aware your fiat payment provider might charge extra fees. In any case, the buyer bears the costs of sending fiat. That includes banking charges, transfer fees and foreign exchange spreads. The seller must receive exactly the amount stated in the order details.": "Tieni presente che il tuo fornitore di pagamenti in fiat potrebbe addebitare costi aggiuntivi. In ogni caso, l'acquirente sostiene i costi dell'invio di valuta fiat. Ciò include le spese bancarie, le commissioni di trasferimento e gli spread di cambio. Il venditore deve ricevere esattamente l'importo indicato nei dettagli dell'ordine.", "Disclaimer": "Avvertenza", - "During a typical order, your trading peer is the only one who can potentially guess anything about you. Keep your chat short and concise. Avoid providing non-essential information other than strictly necessary for the fiat payment.": "During a typical order, your trading peer is the only one who can potentially guess anything about you. Keep your chat short and concise. Avoid providing non-essential information other than strictly necessary for the fiat payment.", - "Each RoboSats coordinator will set a maximum trade size to minimize the hassle of lightning routing failures. There is no limits to the number of trades per day. A robot can only have one order at a time. However, you can use multiple robots simultaneously using the Robot garage. Remember to back up your robot tokens!": "Each RoboSats coordinator will set a maximum trade size to minimize the hassle of lightning routing failures. There is no limits to the number of trades per day. A robot can only have one order at a time. However, you can use multiple robots simultaneously using the Robot garage. Remember to back up your robot tokens!", + "During a typical order, your trading peer is the only one who can potentially guess anything about you. Keep your chat short and concise. Avoid providing non-essential information other than strictly necessary for the fiat payment.": "Durante un ordine tipico, il tuo partner di trading è l'unico che può potenzialmente scoprire qualcosa su di te. Mantieni la tua chat breve e concisa. Evitare di fornire informazioni non essenziali diverse da quelle strettamente necessarie per il pagamento in valuta reale.", + "Each RoboSats coordinator will set a maximum trade size to minimize the hassle of lightning routing failures. There is no limits to the number of trades per day. A robot can only have one order at a time. However, you can use multiple robots simultaneously using the Robot garage. Remember to back up your robot tokens!": "Ciascun coordinatore RoboSats imposterà una dimensione massima degli scambi per ridurre al minimo il fastidio di errori di routing su rete lightning. Non ci sono limiti al numero di operazioni giornaliere. Un robot può avere un solo ordine alla volta. Tuttavia, puoi utilizzare più robot contemporaneamente utilizzando il Garage dei robots. Ricordati di eseguire il backup dei token dei tuoi robots!", "How does it work?": "Come funziona?", "How it works": "Come funziona", "How to use": "Come usarlo", @@ -183,26 +183,26 @@ "It is a BTC/FIAT peer-to-peer exchange over lightning.": "E' una borsa di scambio BTC/FIAT peer-to-peer che utilizza lightning.", "It simplifies matchmaking and minimizes the need of trust. RoboSats focuses in privacy and speed.": "Semplifica il coordinamento tra parti e riduce al minimo la necessità di fiducia. RoboSats si concentra su privacy e velocità.", "Project source code": "Codice sorgente del progetto", - "RoboSats is a decentralized exchange with multiple, fully redundant, trade coordinators. The coordinator provides the infrastructure for your trade: mantains the intermediary lightning node, does book keeping, and relays your encrypted chat messages. The coordinator is also the judge in case your order enters a dispute. The coordinator is a trusted role, make sure you trust your coordinator by exploring its profile, webpage, social media and the comments from other users online.": "RoboSats is a decentralized exchange with multiple, fully redundant, trade coordinators. The coordinator provides the infrastructure for your trade: mantains the intermediary lightning node, does book keeping, and relays your encrypted chat messages. The coordinator is also the judge in case your order enters a dispute. The coordinator is a trusted role, make sure you trust your coordinator by exploring its profile, webpage, social media and the comments from other users online.", + "RoboSats is a decentralized exchange with multiple, fully redundant, trade coordinators. The coordinator provides the infrastructure for your trade: mantains the intermediary lightning node, does book keeping, and relays your encrypted chat messages. The coordinator is also the judge in case your order enters a dispute. The coordinator is a trusted role, make sure you trust your coordinator by exploring its profile, webpage, social media and the comments from other users online.": "RoboSats è uno scambio decentralizzato con più coordinatori commerciali completamente ridondanti. Il coordinatore fornisce l'infrastruttura per la tua attività: mantiene il nodo Lightning intermediario, tiene la contabilità e inoltra i tuoi messaggi di chat crittografati. Il coordinatore è anche il giudice nel caso in cui il tuo ordine entri in controversia. Il coordinatore è un ruolo che si basa sulla fiducia, assicurati di fidarti del tuo coordinatore esplorando il suo profilo, la pagina web, i social media e i commenti di altri utenti online.", "RoboSats is an open source project ": "RoboSats è un progetto open-source", - "The RoboSats client, which you run on your local machine or browser, does not collect or share your IP address, location, name, or personal data. The client encrypts your private messages, which can only be decrypted by your trade partner.": "The RoboSats client, which you run on your local machine or browser, does not collect or share your IP address, location, name, or personal data. The client encrypts your private messages, which can only be decrypted by your trade partner.", - "The coordinator you choose will maintain a database of pseudonymous robots and orders for the application to function correctly. You can further enhance your privacy by using proxy nodes or coinjoining.": "The coordinator you choose will maintain a database of pseudonymous robots and orders for the application to function correctly. You can further enhance your privacy by using proxy nodes or coinjoining.", + "The RoboSats client, which you run on your local machine or browser, does not collect or share your IP address, location, name, or personal data. The client encrypts your private messages, which can only be decrypted by your trade partner.": "Il client RoboSats, che esegui sul tuo computer locale o browser, non raccoglie né condivide il tuo indirizzo IP, posizione, nome o dati personali. Il client crittografa i tuoi messaggi privati, che possono essere decrittografati solo dal tuo partner commerciale.", + "The coordinator you choose will maintain a database of pseudonymous robots and orders for the application to function correctly. You can further enhance your privacy by using proxy nodes or coinjoining.": "Il coordinatore scelto manterrà un database di robot pseudonimi e ordini per il corretto funzionamento dell'applicazione. Puoi migliorare ulteriormente la tua privacy utilizzando nodi proxy o coinjoining.", "The seller faces the same charge-back risk as with any other peer-to-peer service. Paypal or credit cards are not recommended.": "L'offerente è soggetto allo stesso rischio di charge-back di qualsiasi altro servizio peer-to-peer. Paypal o le carte di credito non sono raccomandate.", - "The trade fee is collected by the robosats coordinator as a compensation for their service. You can see the fees of each coordinator by checking out their profile. The trade fee is split to be covered by both: the order maker and the order taker. Typically, the maker fee will be significantly smaller than the taker fee. In case an onchain address is used to received the Sats a variable swap fee applies. The onchain payout fee can also be seen in the profile of the coordinator.": "The trade fee is collected by the robosats coordinator as a compensation for their service. You can see the fees of each coordinator by checking out their profile. The trade fee is split to be covered by both: the order maker and the order taker. Typically, the maker fee will be significantly smaller than the taker fee. In case an onchain address is used to received the Sats a variable swap fee applies. The onchain payout fee can also be seen in the profile of the coordinator.", + "The trade fee is collected by the robosats coordinator as a compensation for their service. You can see the fees of each coordinator by checking out their profile. The trade fee is split to be covered by both: the order maker and the order taker. Typically, the maker fee will be significantly smaller than the taker fee. In case an onchain address is used to received the Sats a variable swap fee applies. The onchain payout fee can also be seen in the profile of the coordinator.": "La commissione commerciale viene riscossa dal coordinatore di robosat come compenso per il proprio servizio. Puoi vedere le tariffe di ciascun coordinatore controllando il loro profilo. La commissione di negoziazione è condivisa da entrambi i peer di una transazione: sia il creatore dell'ordine e l'acquirente dell'ordine. In genere, la commissione del creatore dell'ordine sarà significativamente inferiore alla commissione dell’acquirente. Nel caso in cui venga utilizzato un indirizzo onchain per ricevere i Satoshi, si applica una commissione di swap variabile. La commissione per il pagamento onchain può essere visualizzata anche nel profilo del coordinatore.", "This is an experimental application, things could go wrong. Trade small amounts!": "Questa è un'applicazione sperimentale, le cose potrebbero andare male. Scambia piccole quantità!", "This lightning application is provided as is. It is in active development: trade with the utmost caution. There is no private support. Support is only offered via public channels ": "Questa applicazione lightning viene fornita così com'è. È in fase di sviluppo attivo: è opportuno utilizzarla con la massima cautela. Non esiste un supporto privato. Il supporto è offerto solo attraverso i canali pubblici ", "What are the fees?": "Quali sono le commissioni", "What are the risks?": "Quali sono i rischi?", - "What happens if my coordinator goes offline forever?": "What happens if my coordinator goes offline forever?", + "What happens if my coordinator goes offline forever?": "Cosa succedere se il mio coordinatore è offline?", "What is RoboSats?": "Cos'è RoboSats?", - "What is a coordinator?": "What is a coordinator?", + "What is a coordinator?": "Co'sè un coordinatore?", "What is the trust model?": "Qual è il modello di fiducia?", "What payment methods are accepted?": "Quali pagamenti sono accettati?", "You can also check the full guide in ": "Puoi anche consultare la guida completa in ", - "You can build more trust on the RoboSats and coordinator infrastructure by inspecting the source code.": "You can build more trust on the RoboSats and coordinator infrastructure by inspecting the source code.", + "You can build more trust on the RoboSats and coordinator infrastructure by inspecting the source code.": "Puoi creare maggiore fiducia in RoboSats e nell'infrastruttura del coordinatore controllando il codice sorgente.", "You can find a step-by-step description of the trade pipeline in ": "Una descrizione passo passo della sequenza di scambio è disponibile in ", - "Your sats will return to you. Any hold invoice that is not settled would be automatically returned even if the coordinator goes down forever. This is true for both, locked bonds and trading escrows. However, there is a small window between the seller confirms FIAT RECEIVED and the moment the buyer receives the satoshis when the funds could be permanently lost if the coordinator disappears. This window is usually about 1 second long. Make sure to have enough inbound liquidity to avoid routing failures. If you have any problem, reach out trough the RoboSats public channels or directly to your trade coordinator using one of the contact methods listed on their profile.": "Your sats will return to you. Any hold invoice that is not settled would be automatically returned even if the coordinator goes down forever. This is true for both, locked bonds and trading escrows. However, there is a small window between the seller confirms FIAT RECEIVED and the moment the buyer receives the satoshis when the funds could be permanently lost if the coordinator disappears. This window is usually about 1 second long. Make sure to have enough inbound liquidity to avoid routing failures. If you have any problem, reach out trough the RoboSats public channels or directly to your trade coordinator using one of the contact methods listed on their profile.", - "Your trade partner will not know the destination of the Lightning payment. The permanence of the data collected by the coordinators depend on their privacy and data policies. If a dispute arises, a coordinator may request additional information. The specifics of this process can vary from coordinator to coordinator.": "Your trade partner will not know the destination of the Lightning payment. The permanence of the data collected by the coordinators depend on their privacy and data policies. If a dispute arises, a coordinator may request additional information. The specifics of this process can vary from coordinator to coordinator.", + "Your sats will return to you. Any hold invoice that is not settled would be automatically returned even if the coordinator goes down forever. This is true for both, locked bonds and trading escrows. However, there is a small window between the seller confirms FIAT RECEIVED and the moment the buyer receives the satoshis when the funds could be permanently lost if the coordinator disappears. This window is usually about 1 second long. Make sure to have enough inbound liquidity to avoid routing failures. If you have any problem, reach out trough the RoboSats public channels or directly to your trade coordinator using one of the contact methods listed on their profile.": "Il tuoi satoshi torneranno nel tuo wallet. Qualsiasi fattura trattenuta(Hold invoice) non saldata verrà automaticamente restituita anche se il coordinatore non dovesse più tornare attivo. Questo vale sia per le obbligazioni vincolate che per i depositi a garanzia di negoziazione. Tuttavia, c'è una piccola finestra tra la conferma da parte del venditore della RICEVUTA FIAT e il momento in cui l'acquirente riceve i satoshi, quando i fondi potrebbero essere persi definitivamente se il coordinatore scompare. Questa finestra dura solitamente circa 1 secondo. Assicurati di avere abbastanza liquidità in entrata per evitare errori di routing. In caso di problemi, contatta i canali pubblici di RoboSats o direttamente il tuo coordinatore commerciale utilizzando uno dei metodi di contatto elencati sul loro profilo.", + "Your trade partner will not know the destination of the Lightning payment. The permanence of the data collected by the coordinators depend on their privacy and data policies. If a dispute arises, a coordinator may request additional information. The specifics of this process can vary from coordinator to coordinator.": "Il tuo partner commerciale non conoscerà la destinazione del pagamento Lightning. La permanenza dei dati raccolti dai coordinatori dipende dalle loro politiche sulla privacy e sui dati. In caso di controversia, un coordinatore può richiedere ulteriori informazioni. Le specifiche di questo processo possono variare da coordinatore a coordinatore.", "#19": "Phrases in components/Dialogs/AuditPGP.tsx", "Go back": "Indietro", "Keys": "Chiavi", @@ -250,9 +250,9 @@ "Coordinator": "Coordinatore", "Coordinator Notice": "Avviso del Coordinatore", "Coordinator commit hash": "Commit hash del coordinatore", - "Coordinator description": "Coordinator description", - "Coordinator hosted web app": "Coordinator hosted web app", - "Coordinator offline": "Coordinator offline", + "Coordinator description": "Descrizione del coordinatore", + "Coordinator hosted web app": "Indirizzo diretto del coordinatore", + "Coordinator offline": "Coordinatore offline", "Current onchain payout fee": "Attuale tariffa di pagamento onchain", "Current onchain payout status": "Current onchain payout status", "Development fund supporter: donates {{percent}}% to make RoboSats better.": "Development fund supporter: donates {{percent}}% to make RoboSats better.", From bba1462df2dd8e47f9f0182e76c256adeea61986 Mon Sep 17 00:00:00 2001 From: KoalaSat Date: Thu, 20 Feb 2025 00:36:38 +0100 Subject: [PATCH 06/18] Update README.md --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index aa70c593..e657fb9b 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,10 @@ RoboSats is a simple and private way to exchange bitcoin for national currencies +## Learn + +Check our tutorials and many more at https://learn.robosats.org + ## Try it out! - **TOR URL:** [**RoboSats**y56bwqn56qyadmcxkx767hnabg4mihxlmgyt6if5gnuxvzad.onion](http://RoboSatsy56bwqn56qyadmcxkx767hnabg4mihxlmgyt6if5gnuxvzad.onion) ( Open with [Tor Browser](https://www.torproject.org/download/)) - Clearnet URL: [unsafe.robosats.org](https://unsafe.robosats.org) (not recommended!) From 4ccd0871c4c55922332ec8bab5e30fdb115dabc5 Mon Sep 17 00:00:00 2001 From: koalasat Date: Sat, 22 Feb 2025 12:06:32 +0100 Subject: [PATCH 07/18] Display all payment methods --- frontend/.prettierrc | 2 +- .../src/components/MakerForm/AutocompletePayments.tsx | 11 +++++------ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/frontend/.prettierrc b/frontend/.prettierrc index 4b3d5409..95f5249c 100644 --- a/frontend/.prettierrc +++ b/frontend/.prettierrc @@ -6,4 +6,4 @@ "trailingComma": "all", "jsxSingleQuote": true, "bracketSpacing": true -} \ No newline at end of file +} diff --git a/frontend/src/components/MakerForm/AutocompletePayments.tsx b/frontend/src/components/MakerForm/AutocompletePayments.tsx index 78337d39..8b4401d4 100644 --- a/frontend/src/components/MakerForm/AutocompletePayments.tsx +++ b/frontend/src/components/MakerForm/AutocompletePayments.tsx @@ -323,7 +323,6 @@ const AutocompletePayments: React.FC = (props) => { }, }); - const fewerOptions = groupedOptions.length > 8 ? groupedOptions.slice(0, 8) : groupedOptions; const theme = useTheme(); const iconSize = 1.5 * theme.typography.fontSize; @@ -364,7 +363,7 @@ const AutocompletePayments: React.FC = (props) => {
- 0}> + 0}> {props.listHeaderText ? (
= (props) => {
) : null} - {fewerOptions.map((option, index) => ( + {groupedOptions.map((option, index) => (
  • + - \ No newline at end of file + From b59a57856b90f0551193036f86b570e4a991cab5 Mon Sep 17 00:00:00 2001 From: Aryan Jain <117700812+gitsofaryan@users.noreply.github.com> Date: Mon, 24 Feb 2025 13:34:58 +0530 Subject: [PATCH 17/18] Update index.ejs --- frontend/templates/frontend/index.ejs | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/templates/frontend/index.ejs b/frontend/templates/frontend/index.ejs index 0a8f7af7..65eadca7 100644 --- a/frontend/templates/frontend/index.ejs +++ b/frontend/templates/frontend/index.ejs @@ -27,6 +27,7 @@ +