diff --git a/frontend/src/locale/messages.es.xlf b/frontend/src/locale/messages.es.xlf index abe3da134..88d7235a2 100644 --- a/frontend/src/locale/messages.es.xlf +++ b/frontend/src/locale/messages.es.xlf @@ -11,6 +11,7 @@ Slide of + Diapositiva de node_modules/@ng-bootstrap/src/carousel/carousel.ts 114,118 @@ -147,6 +148,7 @@ + node_modules/@ng-bootstrap/src/progressbar/progressbar.ts 32,38 @@ -250,6 +252,7 @@ + node_modules/@ng-bootstrap/src/timepicker/timepicker.ts 115,121 @@ -257,6 +260,7 @@ + node_modules/@ng-bootstrap/src/timepicker/timepicker.ts 123,131 @@ -432,6 +436,7 @@ transaction + Transacción src/app/bisq/bisq-address/bisq-address.component.html 50 @@ -456,6 +461,7 @@ transactions + transacciones src/app/bisq/bisq-address/bisq-address.component.html 51 @@ -480,6 +486,7 @@ Address: + Dirección: src/app/bisq/bisq-address/bisq-address.component.ts 43 @@ -487,6 +494,7 @@ Block + B loque src/app/bisq/bisq-block/bisq-block.component.html 4 @@ -552,6 +560,7 @@ Block : + Bloque : src/app/bisq/bisq-block/bisq-block.component.ts 89 @@ -852,6 +861,7 @@ Amount () + Cantidad () src/app/bisq/bisq-market/bisq-market.component.html 112,113 @@ -1082,6 +1092,7 @@ confirmation + confirmación src/app/bisq/bisq-transaction/bisq-transaction.component.html 20,21 @@ -1103,6 +1114,7 @@ confirmations + confirmaciones src/app/bisq/bisq-transaction/bisq-transaction.component.html 21,22 @@ -1209,6 +1221,7 @@ Transaction: + Transacción: src/app/bisq/bisq-transaction/bisq-transaction.component.ts 50 @@ -1436,6 +1449,7 @@ Navigate to https://mempool.space/sponsor to sponsor + Navega a https://mempool.space/sponsor para patrocinar src/app/components/about/about.component.html 78 @@ -1475,6 +1489,7 @@ Project Members + Miembros del proyecto src/app/components/about/about.component.html 181,183 @@ -1512,6 +1527,7 @@ multisig of + multifirma de src/app/components/address-labels/address-labels.component.html 5 @@ -1520,6 +1536,7 @@ Lightning + Lightning src/app/components/address-labels/address-labels.component.html 11 @@ -1528,6 +1545,7 @@ Liquid + Liquid src/app/components/address-labels/address-labels.component.html 17 @@ -1536,6 +1554,7 @@ Unconfidential + No confidencial src/app/components/address/address.component.html 23,24 @@ -1544,6 +1563,7 @@ of transaction + de transacción src/app/components/address/address.component.html 60,61 @@ -1552,6 +1572,7 @@ of transactions + de transacciones src/app/components/address/address.component.html 61,62 @@ -1569,6 +1590,7 @@ The number of transactions on this address exceeds the Electrum server limit Consider viewing this address on the official Mempool website instead: + El número de transacciones en esta dirección excede el límite del servidor Electrum Considere ver esta dirección en la web oficial de mempool en su lugar: src/app/components/address/address.component.html 137,140 @@ -1602,6 +1624,7 @@ Address: + Dirección: src/app/components/address/address.component.ts 78 @@ -1703,6 +1726,7 @@ of   + de   src/app/components/asset/asset.component.html 80 @@ -1738,6 +1762,7 @@ Asset: + Activo: src/app/components/asset/asset.component.ts 73 @@ -1826,6 +1851,7 @@ Docs + Documentos src/app/components/bisq-master-page/bisq-master-page.component.html 42,45 @@ -1838,6 +1864,7 @@ Next Block + Siguiente bloque src/app/components/block/block.component.html 7,8 @@ -1850,6 +1877,7 @@ Previous Block + Bloque previo src/app/components/block/block.component.html 26,27 @@ -2122,6 +2150,7 @@ Block : + Bloque : src/app/components/block/block.component.ts 141 @@ -2137,6 +2166,7 @@ API service + Servicio API src/app/components/docs/api-docs.component.html 12,14 @@ -2534,6 +2564,7 @@ Provides list of available currencies for a given base currency. + Entrega una lista de monedas disponibles para una determinada moneda base. src/app/components/docs/api-docs.component.html 54,56 @@ -2541,6 +2572,7 @@ Provides list of open offer prices for a single market. + Entrega una lista de ofertas abiertas para un mercado individual. src/app/components/docs/api-docs.component.html 67,69 @@ -2548,6 +2580,7 @@ Provides hi/low/open/close data for a given market. This can be used to generate a candlestick chart. + Entrega datos máx/mín/apertura/cierre para un determinado mercado. Puede usarse para generar un gráfico de velas. src/app/components/docs/api-docs.component.html 80,82 @@ -2555,6 +2588,7 @@ Provides list of available markets. + Entrega una lista de mercados disponibles. src/app/components/docs/api-docs.component.html 93,95 @@ -2562,6 +2596,7 @@ Provides list of open offer details for a single market. + Entrega una lista de detalles para un mercado único. src/app/components/docs/api-docs.component.html 106,108 @@ -2569,6 +2604,7 @@ Provides 24 hour price ticker for single market or all markets + Entrega un ticker de precio de 24h para un mercado único o todos los mercados src/app/components/docs/api-docs.component.html 119,121 @@ -2576,6 +2612,7 @@ Provides list of completed trades for a single market. + Entrega una lista de intercambios completados para un mercado único src/app/components/docs/api-docs.component.html 132,134 @@ -2583,6 +2620,7 @@ Provides periodic volume data in terms of base currency for one or all markets. + Entrega datos de volumen periódicos en términos de moneda base para uno o todos los mercados. src/app/components/docs/api-docs.component.html 145,147 @@ -2598,6 +2636,7 @@ Returns details about an address. Available fields: address, chain_stats, and mempool_stats. chain,mempool_stats each contain an object with tx_count, funded_txo_count, funded_txo_sum, spent_txo_count, and spent_txo_sum. + Devuelve detalles acerca de una dirección. Campos disponibles: dirección, chain_stats, y mempool_stats. chain,mempool_stats cada cual contiene un objeto con tx_count, funded_txo_count, funded_txo_sum, spent_txo_count, y spent_txo_sum. src/app/components/docs/api-docs.component.html 179,180 @@ -2605,6 +2644,7 @@ Get transaction history for the specified address/scripthash, sorted with newest first. Returns up to 50 mempool transactions plus the first 25 confirmed transactions. You can request more confirmed transactions using :last_seen_txid (see below). + Obtén el histoial de transacciones para una determinada dirección/scripthash determinada, ordenada desde la más nueva primero. Devuelve hasta 50 transacciones de mempool más las primeras 25 transacciones confirmadas. Puede solicitar más transacciones confirmadas usando :last_seen_txid (ver abajo). src/app/components/docs/api-docs.component.html 192,193 @@ -2628,6 +2668,7 @@ Get the list of unspent transaction outputs associated with the address/scripthash. Available fields: txid, vout, value, and status (with the status of the funding tx).There is also a valuecommitment field that may appear in place of value, plus the following additional fields: asset/assetcommitment, nonce/noncecommitment, surjection_proof, and range_proof. + Obtén la lista outputs de transacciones sin gastar (UTXO) asociadas a la dirección/scripthash. Campos disponibles. txid, vout, value, y status (con el estado de transacción de fondeo).También hay un campo valuecommitment que puede aparecer en lugar de value, junto a los siguientes campos adicionales: asset/assetcommitment, nonce/noncecommitment, surjection_proof, y range_proof. src/app/components/docs/api-docs.component.html 231,233 @@ -2659,6 +2700,7 @@ Returns details about a block. Available fields: id, height, version, timestamp, bits, nonce, merkle_root, tx_count, size, weight,proof, and previousblockhash. + Devuelve detalles acercad e un bloque. Campos disponibles: id, height, version, timestamp, bits, nonce, merkle_root, tx_count, size, weight,proof, y previousblockhash. src/app/components/docs/api-docs.component.html 290,291 @@ -2674,6 +2716,7 @@ Returns the hash of the block currently at :height. + Devuelve el hash de el bloque actual en :height. src/app/components/docs/api-docs.component.html 316,317 @@ -2689,6 +2732,7 @@ Returns the confirmation status of a block. Available fields: in_best_chain (boolean, false for orphaned blocks), next_best (the hash of the next block, only available for blocks in the best chain). + Devuelve el estado de confirmación de un bloque. Campos disponibles: in_best_chain (boolean, falso para bloques huérfanos), next_best (el hash ddel siguiente bloque, solo disponible para bloques en la mejor cadena). src/app/components/docs/api-docs.component.html 342,343 @@ -2712,6 +2756,7 @@ Returns the transaction at index :index within the specified block. + Devuelve la transacción en índice :index dentro de un bloque específico. src/app/components/docs/api-docs.component.html 381,382 @@ -2727,6 +2772,7 @@ Returns a list of transactions in the block (up to 25 transactions beginning at start_index). Transactions returned here do not have the status field, since all the transactions share the same block and confirmation status. + Devuelve una lista de transacciones en el bloque (hasta 25 transacciones comenzando por start_index). Las transacciones devueltas aquí no tienen el capo de status , ya que todas las transacciones comparten el mismo bloque y estado de confirmación. src/app/components/docs/api-docs.component.html 407,408 @@ -2734,6 +2780,7 @@ Returns the 10 newest blocks starting at the tip or at :start_height if specified. + Devuelve los 10 bloques más recientes compenzando por la punta o :start_height si se especifica. src/app/components/docs/api-docs.component.html 420,421 @@ -2785,6 +2832,7 @@ Get a list of the last 10 transactions to enter the mempool. Each transaction object contains simplified overview data, with the following fields: txid, fee, vsize, and value. + Obtiene una lista de las 10 transacciones a introducir en la mempool. Cada transacción contiene datos de vista simplificada, con los siguientes campos: txid, fee, vsize, y value. src/app/components/docs/api-docs.component.html 506,507 @@ -2804,6 +2852,7 @@ Returns details about a transaction. Available fields: txid, version, locktime, size, weight, fee, vin, vout, and status. + Devuelve detalles acerca de una transacción. Campos disponibles:txid, version, locktime, size, weight, fee, vin, vout, y status. src/app/components/docs/api-docs.component.html 536,537 @@ -2819,6 +2868,7 @@ Returns a merkle inclusion proof for the transaction using bitcoind's merkleblock format. + Devuelve una prueba de inclusión Merkle para la transacción utilizando el formato bitcoind's merkleblock. src/app/components/docs/api-docs.component.html 562,563 @@ -2826,6 +2876,7 @@ Returns a merkle inclusion proof for the transaction using Electrum's blockchain.transaction.get_merkle format. + Devuelve una prueba de inclusión Merkle para la transacción utilizando el fromato Electrum's blockchain.transaction.get_merkle src/app/components/docs/api-docs.component.html 575,576 @@ -2833,6 +2884,7 @@ Returns the spending status of a transaction output. Available fields: spent (boolean), txid (optional), vin (optional), and status (optional, the status of the spending tx). + Devuelve el estado de gasto de un output de transacción. Campos disponibles: spent (boolean), txid (opcional), vin (optional), y status (opcional, el estado de la transacción de gasto). src/app/components/docs/api-docs.component.html 588,589 @@ -2856,6 +2908,7 @@ Returns the confirmation status of a transaction. Available fields: confirmed (boolean), block_height (optional), and block_hash (optional). + Devuelve el estado de confirmación de una transacción. Campos disponibles:confirmed (boolean), block_height (opcional), y block_hash (opcional). src/app/components/docs/api-docs.component.html 627,628 @@ -2871,6 +2924,7 @@ Broadcast a raw transaction to the network. The transaction should be provided as hex in the request body. The txid will be returned on success. + Transmite una transacción en bruto a la red. La transacción debe entregarse como hex en el campo de solicitud. La txid se devolverá en el proceso. src/app/components/docs/api-docs.component.html 653,654 @@ -2878,6 +2932,7 @@ Default push: action: 'want', data: ['blocks', ...] to express what you want pushed. Available: blocks, mempool-blocks, live-2h-chart, and stats.Push transactions related to address: 'track-address': '3PbJ...bF9B' to receive all new transactions containing that address as input or output. Returns an array of transactions. address-transactions for new mempool transactions, and block-transactions for new block confirmed transactions. + Empujar por defecto: acciona: 'want', data: ['blocks', ...] para expresar lo que quiere empujar. Disponible: blocks, mempool-blocks, live-2h-chart, y stats.Empujar transacciones relaccionadas a la direccion: 'track-address': '3PbJ...bF9B' para recibir todas las nuevas transacciones que contengan la direccion como input o output. Devuelve cualquier formación de transacciones. dirección-transacciones para nuevas transacciones mempool, y bloque-transacciones para nuevas transacciones confirmadas en bloque. src/app/components/docs/api-docs.component.html 671,672 @@ -2929,6 +2984,7 @@ Documentation + Documentación src/app/components/docs/docs.component.html 4 @@ -3054,6 +3110,7 @@ blocks + bloques src/app/components/footer/footer.component.html 22,23 @@ -3070,6 +3127,7 @@ block + bloque src/app/components/footer/footer.component.html 23,24 @@ -3159,6 +3217,7 @@ Stack of mempool blocks + Montón de bloques mempool src/app/components/mempool-block/mempool-block.component.ts 73 @@ -3166,6 +3225,7 @@ Mempool block + Bloque mempool src/app/components/mempool-block/mempool-block.component.ts 75 @@ -3173,6 +3233,7 @@ Range + Rango src/app/components/mempool-graph/mempool-graph.component.ts 256 @@ -3180,6 +3241,7 @@ Sum + Suma src/app/components/mempool-graph/mempool-graph.component.ts 258 @@ -3196,6 +3258,7 @@ Identified by payout address: '' + Identificado por dirección de pago: '' src/app/components/miner/miner.component.ts 42 @@ -3203,6 +3266,7 @@ Identified by coinbase tag: '' + Identificado por etiqueta coinbase: '' src/app/components/miner/miner.component.ts 52 @@ -3210,6 +3274,7 @@ Broadcast Transaction + Transmitir transacción src/app/components/push-transaction/push-transaction.component.html 2 @@ -3316,6 +3381,7 @@ Filter + Filtro src/app/components/statistics/statistics.component.html 40 @@ -3354,6 +3420,7 @@ ago + atrás src/app/components/time-since/time-since.component.ts 67 @@ -3413,6 +3480,7 @@ After + Después src/app/components/time-span/time-span.component.ts 67 @@ -3472,6 +3540,7 @@ In ~ + En ~ src/app/components/time-until/time-until.component.ts 66 @@ -3667,6 +3736,7 @@ Locktime + Tiempo de bloqueo src/app/components/transaction/transaction.component.html 234,236 @@ -3815,6 +3885,7 @@ Previous output type + Anterior tipo de salida src/app/components/transactions-list/transactions-list.component.html 116,117 @@ -3836,6 +3907,7 @@ Peg-out to + Peg-out a src/app/components/transactions-list/transactions-list.component.html 146,147 @@ -3883,6 +3955,7 @@ This transaction saved % on fees by using native SegWit-Bech32 + Esta transacción ahorra % en tasas usando Segwit-Bech32 nativo src/app/components/tx-features/tx-features.component.html 1 @@ -3909,6 +3982,7 @@ This transaction saved % on fees by using SegWit and could save % more by fully upgrading to native SegWit-Bech32 + Esta transacción ahorra % en tasas usando Segwit y podría ahorrar % más actualizando a SegWit-Bech32 nativo src/app/components/tx-features/tx-features.component.html 3 @@ -3917,6 +3991,7 @@ This transaction could save % on fees by upgrading to native SegWit-Bech32 or % by upgrading to SegWit-P2SH + Esta transacción podría ahorrar% en tasas actualizando a SegWit-Bech32 nativo o % actualizando a Segwit-P2SH src/app/components/tx-features/tx-features.component.html 5 @@ -3925,6 +4000,7 @@ This transaction uses Taproot + Esta transacción utiliza Taproot src/app/components/tx-features/tx-features.component.html 8 @@ -3933,6 +4009,7 @@ Taproot + Taproot src/app/components/tx-features/tx-features.component.html 8 @@ -3983,6 +4060,7 @@ Only ~ sat/vB was needed to get into this block + Solo ~ sat/vB se necesitaban para entrar en este bloque src/app/components/tx-fee-rating/tx-fee-rating.component.html 2 @@ -3995,6 +4073,7 @@ Overpaid x + Pagado de más x src/app/components/tx-fee-rating/tx-fee-rating.component.html 2 @@ -4118,6 +4197,7 @@ L-BTC in circulation + L-BTC en circulación src/app/dashboard/dashboard.component.html 209,211 @@ -4192,6 +4272,7 @@ year + año src/app/shared/i18n/dates.ts 3 @@ -4199,6 +4280,7 @@ years + años src/app/shared/i18n/dates.ts 4 @@ -4206,6 +4288,7 @@ month + mes src/app/shared/i18n/dates.ts 5 @@ -4213,6 +4296,7 @@ months + meses src/app/shared/i18n/dates.ts 6 @@ -4220,6 +4304,7 @@ week + semana src/app/shared/i18n/dates.ts 7 @@ -4227,6 +4312,7 @@ weeks + semanas src/app/shared/i18n/dates.ts 8 @@ -4234,6 +4320,7 @@ day + día src/app/shared/i18n/dates.ts 9 @@ -4241,6 +4328,7 @@ days + días src/app/shared/i18n/dates.ts 10 @@ -4248,6 +4336,7 @@ hour + hora src/app/shared/i18n/dates.ts 11 @@ -4255,6 +4344,7 @@ hours + horas src/app/shared/i18n/dates.ts 12 @@ -4262,6 +4352,7 @@ minute + minuto src/app/shared/i18n/dates.ts 13 @@ -4269,6 +4360,7 @@ minutes + minutos src/app/shared/i18n/dates.ts 14 @@ -4276,6 +4368,7 @@ second + segundo src/app/shared/i18n/dates.ts 15 @@ -4283,6 +4376,7 @@ seconds + segundos src/app/shared/i18n/dates.ts 16 diff --git a/frontend/src/locale/messages.hu.xlf b/frontend/src/locale/messages.hu.xlf index cc343a946..cfdeb5784 100644 --- a/frontend/src/locale/messages.hu.xlf +++ b/frontend/src/locale/messages.hu.xlf @@ -2929,6 +2929,7 @@ Documentation + Dokumentáció src/app/components/docs/docs.component.html 4 @@ -3180,6 +3181,7 @@ Sum + Összesen src/app/components/mempool-graph/mempool-graph.component.ts 258 @@ -3316,6 +3318,7 @@ Filter + Filter src/app/components/statistics/statistics.component.html 40 @@ -3354,6 +3357,7 @@ ago + perce src/app/components/time-since/time-since.component.ts 67 @@ -3413,6 +3417,7 @@ After + után src/app/components/time-span/time-span.component.ts 67 @@ -3472,6 +3477,7 @@ In ~ + ~ percen belül src/app/components/time-until/time-until.component.ts 66 @@ -3667,6 +3673,7 @@ Locktime + Zárolási idő src/app/components/transaction/transaction.component.html 234,236 @@ -3933,6 +3940,7 @@ Taproot + Taproot src/app/components/tx-features/tx-features.component.html 8 @@ -4118,6 +4126,7 @@ L-BTC in circulation + L-BTC forgalomban src/app/dashboard/dashboard.component.html 209,211 @@ -4192,6 +4201,7 @@ year + év src/app/shared/i18n/dates.ts 3 @@ -4199,6 +4209,7 @@ years + éve src/app/shared/i18n/dates.ts 4 @@ -4206,6 +4217,7 @@ month + hónap src/app/shared/i18n/dates.ts 5 @@ -4213,6 +4225,7 @@ months + hónapja src/app/shared/i18n/dates.ts 6 diff --git a/frontend/src/locale/messages.ja.xlf b/frontend/src/locale/messages.ja.xlf index 5e86c14a5..f2ac3dc71 100644 --- a/frontend/src/locale/messages.ja.xlf +++ b/frontend/src/locale/messages.ja.xlf @@ -3110,7 +3110,7 @@ blocks - ブロック + ブロック src/app/components/footer/footer.component.html 22,23 @@ -4336,7 +4336,7 @@ hour - + 時間 src/app/shared/i18n/dates.ts 11 @@ -4344,7 +4344,7 @@ hours - + 時間 src/app/shared/i18n/dates.ts 12 diff --git a/frontend/src/locale/messages.ko.xlf b/frontend/src/locale/messages.ko.xlf index 28c0612b3..eaa633980 100644 --- a/frontend/src/locale/messages.ko.xlf +++ b/frontend/src/locale/messages.ko.xlf @@ -147,6 +147,7 @@ + node_modules/@ng-bootstrap/src/progressbar/progressbar.ts 32,38 @@ -250,6 +251,7 @@ + node_modules/@ng-bootstrap/src/timepicker/timepicker.ts 115,121 @@ -257,6 +259,7 @@ + node_modules/@ng-bootstrap/src/timepicker/timepicker.ts 123,131 @@ -432,6 +435,7 @@ transaction + 트랜잭션 src/app/bisq/bisq-address/bisq-address.component.html 50 @@ -456,6 +460,7 @@ transactions + 트랜잭년 src/app/bisq/bisq-address/bisq-address.component.html 51 @@ -480,6 +485,7 @@ Address: + 주소: src/app/bisq/bisq-address/bisq-address.component.ts 43 @@ -487,6 +493,7 @@ Block + 블록 src/app/bisq/bisq-block/bisq-block.component.html 4 @@ -552,6 +559,7 @@ Block : + 블록 : src/app/bisq/bisq-block/bisq-block.component.ts 89 @@ -852,6 +860,7 @@ Amount () + 금액 () src/app/bisq/bisq-market/bisq-market.component.html 112,113 @@ -1082,6 +1091,7 @@ confirmation + 컨펌 src/app/bisq/bisq-transaction/bisq-transaction.component.html 20,21 @@ -1103,6 +1113,7 @@ confirmations + 컨펌들 src/app/bisq/bisq-transaction/bisq-transaction.component.html 21,22 @@ -1209,6 +1220,7 @@ Transaction: + 트랜잭션: src/app/bisq/bisq-transaction/bisq-transaction.component.ts 50 @@ -1220,7 +1232,7 @@ BSQ Transactions - BSQ 거래 + BSQ 트랜잭션 src/app/bisq/bisq-transactions/bisq-transactions.component.html 2,5 @@ -1477,6 +1489,7 @@ Project Members + 프로젝트 멤버들 src/app/components/about/about.component.html 181,183 @@ -1522,6 +1535,7 @@ Lightning + 라이트닝 src/app/components/address-labels/address-labels.component.html 11 @@ -1530,6 +1544,7 @@ Liquid + Liquid src/app/components/address-labels/address-labels.component.html 17 @@ -1604,6 +1619,7 @@ Address: + 주소: src/app/components/address/address.component.ts 78 @@ -1740,6 +1756,7 @@ Asset: + 자산: src/app/components/asset/asset.component.ts 73 @@ -1828,6 +1845,7 @@ Docs + 문서들 src/app/components/bisq-master-page/bisq-master-page.component.html 42,45 @@ -1840,6 +1858,7 @@ Next Block + 다음 블록 src/app/components/block/block.component.html 7,8 @@ -1852,6 +1871,7 @@ Previous Block + 이전 블록 src/app/components/block/block.component.html 26,27 @@ -2124,6 +2144,7 @@ Block : + 블록 : src/app/components/block/block.component.ts 141 @@ -2139,6 +2160,7 @@ API service + API 서비스 src/app/components/docs/api-docs.component.html 12,14 @@ -2645,7 +2667,7 @@ Returns transactions associated with the specified Liquid asset. For the network's native asset, returns a list of peg in, peg out, and burn transactions. For user-issued assets, returns a list of issuance, reissuance, and burn transactions. Does not include regular transactions transferring this asset. - 지정된 유동 자산과 관련된 거래를 반환합니다. 네트워크의 기본 자산을 위해 페그 인, 페그 아웃 및 소각 트랜잭션 목록을 반환합니다. 사용자 발행 자산의 경우 발행, 재발행 및 소각 트랜잭션 목록을 반환합니다. 이 자산을 양도하는 일반 거래는 포함되지 않습니다. + 지정된 Liquid 자산과 관련된 거래를 반환합니다. 네트워크의 기본 자산을 위해 페그 인, 페그 아웃 및 소각 트랜잭션 목록을 반환합니다. 사용자 발행 자산의 경우 발행, 재발행 및 소각 트랜잭션 목록을 반환합니다. 이 자산을 양도하는 일반 거래는 포함되지 않습니다. src/app/components/docs/api-docs.component.html 260,262 @@ -2937,6 +2959,7 @@ Documentation + 문서 src/app/components/docs/docs.component.html 4 @@ -3823,6 +3846,7 @@ Previous output type + 이전 아웃풋 유형 src/app/components/transactions-list/transactions-list.component.html 116,117 @@ -3933,6 +3957,7 @@ This transaction uses Taproot + 이 거래는 탭루트를 사용하고 있습니다 src/app/components/tx-features/tx-features.component.html 8 @@ -3941,6 +3966,7 @@ Taproot + 탭루트 src/app/components/tx-features/tx-features.component.html 8 @@ -4126,6 +4152,7 @@ L-BTC in circulation + 유통 중인 L-BTC src/app/dashboard/dashboard.component.html 209,211 @@ -4200,6 +4227,7 @@ year + src/app/shared/i18n/dates.ts 3 @@ -4207,6 +4235,7 @@ years + src/app/shared/i18n/dates.ts 4 @@ -4214,6 +4243,7 @@ month + src/app/shared/i18n/dates.ts 5 @@ -4221,6 +4251,7 @@ months + src/app/shared/i18n/dates.ts 6 @@ -4228,6 +4259,7 @@ week + src/app/shared/i18n/dates.ts 7 @@ -4235,6 +4267,7 @@ weeks + src/app/shared/i18n/dates.ts 8 @@ -4242,6 +4275,7 @@ day + src/app/shared/i18n/dates.ts 9 @@ -4249,6 +4283,7 @@ days + src/app/shared/i18n/dates.ts 10 @@ -4256,6 +4291,7 @@ hour + 시간 src/app/shared/i18n/dates.ts 11 @@ -4263,6 +4299,7 @@ hours + 시간 src/app/shared/i18n/dates.ts 12 @@ -4270,6 +4307,7 @@ minute + src/app/shared/i18n/dates.ts 13 @@ -4277,6 +4315,7 @@ minutes + src/app/shared/i18n/dates.ts 14 @@ -4284,6 +4323,7 @@ second + src/app/shared/i18n/dates.ts 15 @@ -4291,6 +4331,7 @@ seconds + src/app/shared/i18n/dates.ts 16 diff --git a/frontend/src/locale/messages.nl.xlf b/frontend/src/locale/messages.nl.xlf index 57711b62c..b91d8f301 100644 --- a/frontend/src/locale/messages.nl.xlf +++ b/frontend/src/locale/messages.nl.xlf @@ -11,6 +11,7 @@ Slide of + Dia van node_modules/@ng-bootstrap/src/carousel/carousel.ts 114,118 @@ -147,6 +148,7 @@ + node_modules/@ng-bootstrap/src/progressbar/progressbar.ts 32,38 @@ -250,6 +252,7 @@ + node_modules/@ng-bootstrap/src/timepicker/timepicker.ts 115,121 @@ -257,6 +260,7 @@ + node_modules/@ng-bootstrap/src/timepicker/timepicker.ts 123,131 @@ -432,6 +436,7 @@ transaction + transactie src/app/bisq/bisq-address/bisq-address.component.html 50 @@ -456,6 +461,7 @@ transactions + transacties src/app/bisq/bisq-address/bisq-address.component.html 51 @@ -480,6 +486,7 @@ Address: + Adres: src/app/bisq/bisq-address/bisq-address.component.ts 43 @@ -487,6 +494,7 @@ Block + Blok src/app/bisq/bisq-block/bisq-block.component.html 4 @@ -552,6 +560,7 @@ Block : + Blok : src/app/bisq/bisq-block/bisq-block.component.ts 89 @@ -852,6 +861,7 @@ Amount () + Hoeveelheid () src/app/bisq/bisq-market/bisq-market.component.html 112,113 @@ -1082,6 +1092,7 @@ confirmation + bevestiging src/app/bisq/bisq-transaction/bisq-transaction.component.html 20,21 @@ -1103,6 +1114,7 @@ confirmations + bevestigingen src/app/bisq/bisq-transaction/bisq-transaction.component.html 21,22 @@ -1209,6 +1221,7 @@ Transaction: + Transactie: src/app/bisq/bisq-transaction/bisq-transaction.component.ts 50 @@ -1436,6 +1449,7 @@ Navigate to https://mempool.space/sponsor to sponsor + Navigeer naar https://mempool.space/sponsor om te sponsoren src/app/components/about/about.component.html 78 @@ -1475,6 +1489,7 @@ Project Members + Projectleden src/app/components/about/about.component.html 181,183 @@ -1512,6 +1527,7 @@ multisig of + multisig van src/app/components/address-labels/address-labels.component.html 5 @@ -1520,6 +1536,7 @@ Lightning + Lightning src/app/components/address-labels/address-labels.component.html 11 @@ -1528,6 +1545,7 @@ Liquid + Liquid src/app/components/address-labels/address-labels.component.html 17 @@ -1536,6 +1554,7 @@ Unconfidential + Niet-vertrouwelijk src/app/components/address/address.component.html 23,24 @@ -1544,6 +1563,7 @@ of transaction + van transactie src/app/components/address/address.component.html 60,61 @@ -1552,6 +1572,7 @@ of transactions + van transacties src/app/components/address/address.component.html 61,62 @@ -1569,6 +1590,7 @@ The number of transactions on this address exceeds the Electrum server limit Consider viewing this address on the official Mempool website instead: + Het aantal transacties van dit adres overschrijdt het Electrum-serverlimiet Overweeg in plaats daarvan dit adres op de officiële Mempool-website te bekijken: src/app/components/address/address.component.html 137,140 @@ -1602,6 +1624,7 @@ Address: + Adres: src/app/components/address/address.component.ts 78 @@ -1703,6 +1726,7 @@ of   + van   src/app/components/asset/asset.component.html 80 @@ -1738,6 +1762,7 @@ Asset: + Activa: src/app/components/asset/asset.component.ts 73 @@ -1826,6 +1851,7 @@ Docs + Docs src/app/components/bisq-master-page/bisq-master-page.component.html 42,45 @@ -1838,6 +1864,7 @@ Next Block + Volgend Blok src/app/components/block/block.component.html 7,8 @@ -1850,6 +1877,7 @@ Previous Block + Vorig Blok src/app/components/block/block.component.html 26,27 @@ -2122,6 +2150,7 @@ Block : + Blok : src/app/components/block/block.component.ts 141 @@ -2137,6 +2166,7 @@ API service + API service src/app/components/docs/api-docs.component.html 12,14 @@ -2534,6 +2564,7 @@ Provides list of available currencies for a given base currency. + Geeft een lijst met beschikbare valuta's voor een bepaalde basisvaluta src/app/components/docs/api-docs.component.html 54,56 @@ -2541,6 +2572,7 @@ Provides list of open offer prices for a single market. + Geeft een lijst met open aanbiedingsprijzen voor een enkele markt. src/app/components/docs/api-docs.component.html 67,69 @@ -2548,6 +2580,7 @@ Provides hi/low/open/close data for a given market. This can be used to generate a candlestick chart. + Geeft hoog/laag/open/sluit-gegevens voor een bepaalde markt. Dit kan worden gebruikt om een kandelaargrafiek te genereren. src/app/components/docs/api-docs.component.html 80,82 @@ -2555,6 +2588,7 @@ Provides list of available markets. + Geeft een lijst van beschikbare markten. src/app/components/docs/api-docs.component.html 93,95 @@ -2562,6 +2596,7 @@ Provides list of open offer details for a single market. + Geeft een lijst met details van openstaande aanbiedingen voor een enkele markt. src/app/components/docs/api-docs.component.html 106,108 @@ -2569,6 +2604,7 @@ Provides 24 hour price ticker for single market or all markets + Geeft een 24-uurs prijsticker voor een enkele markt of alle markten. src/app/components/docs/api-docs.component.html 119,121 @@ -2576,6 +2612,7 @@ Provides list of completed trades for a single market. + Geeft een lijst van voltooide transacties voor een enkele markt. src/app/components/docs/api-docs.component.html 132,134 @@ -2583,6 +2620,7 @@ Provides periodic volume data in terms of base currency for one or all markets. + Geeft periodieke volumegegevens van een basisvaluta voor één of alle markten. src/app/components/docs/api-docs.component.html 145,147 @@ -2598,6 +2636,7 @@ Returns details about an address. Available fields: address, chain_stats, and mempool_stats. chain,mempool_stats each contain an object with tx_count, funded_txo_count, funded_txo_sum, spent_txo_count, and spent_txo_sum. + Geeft details over een adres. Beschikbare velden: adres, chain_stats, en mempool_stats. keten,mempool_stats die elk een object bevatten met tx_count, funded_txo_count, funded_txo_sum, spent_txo_count, en spent_txo_sum. src/app/components/docs/api-docs.component.html 179,180 @@ -2605,6 +2644,7 @@ Get transaction history for the specified address/scripthash, sorted with newest first. Returns up to 50 mempool transactions plus the first 25 confirmed transactions. You can request more confirmed transactions using :last_seen_txid (see below). + Verkrijg transactiegeschiedenis voor het opgegeven adres/scripthash, gesorteerd met de nieuwste eerst. Retourneert tot 50 mempool-transacties plus de eerste 25 bevestigde transacties. Je kan meer bevestigde transacties opvragen door het volgende te gebruiken :last_seen_txid (zie hieronder). src/app/components/docs/api-docs.component.html 192,193 @@ -2628,6 +2668,7 @@ Get the list of unspent transaction outputs associated with the address/scripthash. Available fields: txid, vout, value, and status (with the status of the funding tx).There is also a valuecommitment field that may appear in place of value, plus the following additional fields: asset/assetcommitment, nonce/noncecommitment, surjection_proof, and range_proof. + Krijg de lijst met niet-uitgegeven transactie-outputs die zijn gekoppeld aan het adres/scripthash. Beschikbare velden: txid, vout, value, en status (met de status van de financiering-tx).Er is ook een valuecommitment veld die mogelijk verschijnt in plaats van value, plus de volgende aanvullende velden: asset/assetcommitment, nonce/noncecommitment, surjection_proof, en range_proof. src/app/components/docs/api-docs.component.html 231,233 @@ -2659,6 +2700,7 @@ Returns details about a block. Available fields: id, height, version, timestamp, bits, nonce, merkle_root, tx_count, size, weight,proof, and previousblockhash. + Geeft details over een blok. Beschikbare velden: id, height, version, timestamp, bits, nonce, merkle_root, tx_count, size, weight,proof, en previousblockhash. src/app/components/docs/api-docs.component.html 290,291 @@ -2674,6 +2716,7 @@ Returns the hash of the block currently at :height. + Geeft de hash van het blok dat momenteel op :height is. src/app/components/docs/api-docs.component.html 316,317 @@ -2689,6 +2732,7 @@ Returns the confirmation status of a block. Available fields: in_best_chain (boolean, false for orphaned blocks), next_best (the hash of the next block, only available for blocks in the best chain). + Geeft de bevestigingsstatus van een blok. Beschikbare velden: in_best_chain (boolean, false voor georphanede blokken), next_best (de hash van het volgende blok, alleen beschikbaar voor blokken in de beste keten). src/app/components/docs/api-docs.component.html 342,343 @@ -2712,6 +2756,7 @@ Returns the transaction at index :index within the specified block. + Geeft de transactie op index :index binnen het specifieke blok. src/app/components/docs/api-docs.component.html 381,382 @@ -2929,6 +2974,7 @@ Documentation + Documentatie src/app/components/docs/docs.component.html 4 @@ -3054,6 +3100,7 @@ blocks + blokken src/app/components/footer/footer.component.html 22,23 @@ -3070,6 +3117,7 @@ block + blok src/app/components/footer/footer.component.html 23,24 @@ -3159,6 +3207,7 @@ Stack of mempool blocks + Stapel van mempoolblokken src/app/components/mempool-block/mempool-block.component.ts 73 @@ -3166,6 +3215,7 @@ Mempool block + Mempoolblok src/app/components/mempool-block/mempool-block.component.ts 75 @@ -3173,6 +3223,7 @@ Range + Bereik src/app/components/mempool-graph/mempool-graph.component.ts 256 @@ -3180,6 +3231,7 @@ Sum + Som src/app/components/mempool-graph/mempool-graph.component.ts 258 @@ -3196,6 +3248,7 @@ Identified by payout address: '' + Geïdentificeerd door uitbetalingsadres: '' src/app/components/miner/miner.component.ts 42 @@ -3203,6 +3256,7 @@ Identified by coinbase tag: '' + Geïdentificeerd door coinbase-tag: '' src/app/components/miner/miner.component.ts 52 @@ -3210,6 +3264,7 @@ Broadcast Transaction + Uitzendtransactie src/app/components/push-transaction/push-transaction.component.html 2 @@ -3316,6 +3371,7 @@ Filter + Filter src/app/components/statistics/statistics.component.html 40 @@ -3354,6 +3410,7 @@ ago + geleden src/app/components/time-since/time-since.component.ts 67 @@ -3413,6 +3470,7 @@ After + Na src/app/components/time-span/time-span.component.ts 67 @@ -3472,6 +3530,7 @@ In ~ + In ~ src/app/components/time-until/time-until.component.ts 66 @@ -3667,6 +3726,7 @@ Locktime + Locktime src/app/components/transaction/transaction.component.html 234,236 @@ -3815,6 +3875,7 @@ Previous output type + Vorig output-type src/app/components/transactions-list/transactions-list.component.html 116,117 @@ -3836,6 +3897,7 @@ Peg-out to + Peg-out naar src/app/components/transactions-list/transactions-list.component.html 146,147 @@ -3883,6 +3945,7 @@ This transaction saved % on fees by using native SegWit-Bech32 + Deze transactie heeft % aan vergoedingen bespaard door native SegWit-Bech32 te gebruiken src/app/components/tx-features/tx-features.component.html 1 @@ -3909,6 +3972,7 @@ This transaction saved % on fees by using SegWit and could save % more by fully upgrading to native SegWit-Bech32 + Deze transactie heeft % aan vergoedingen bespaard door SegWit te gebruiken en had % meer kunnen besparen door volledig te upgraden naar native SegWit-Bech32 src/app/components/tx-features/tx-features.component.html 3 @@ -3917,6 +3981,7 @@ This transaction could save % on fees by upgrading to native SegWit-Bech32 or % by upgrading to SegWit-P2SH + Deze transactie had % aan vergoedingen kunnen besparen door te upgraden naar native SegWit-Bech32 of % door te upgraden naar SegWit-P2SH src/app/components/tx-features/tx-features.component.html 5 @@ -3925,6 +3990,7 @@ This transaction uses Taproot + Deze transactie gebruikt Taproot src/app/components/tx-features/tx-features.component.html 8 @@ -3933,6 +3999,7 @@ Taproot + Taproot src/app/components/tx-features/tx-features.component.html 8 @@ -3983,6 +4050,7 @@ Only ~ sat/vB was needed to get into this block + Er was maar ~ sat/vB nodig om in dit blok te komen src/app/components/tx-fee-rating/tx-fee-rating.component.html 2 @@ -3995,6 +4063,7 @@ Overpaid x + Overbetaald x src/app/components/tx-fee-rating/tx-fee-rating.component.html 2 @@ -4118,6 +4187,7 @@ L-BTC in circulation + L-BTC in circulatie src/app/dashboard/dashboard.component.html 209,211 @@ -4192,6 +4262,7 @@ year + jaar src/app/shared/i18n/dates.ts 3 @@ -4199,6 +4270,7 @@ years + jaren src/app/shared/i18n/dates.ts 4 @@ -4206,6 +4278,7 @@ month + maand src/app/shared/i18n/dates.ts 5 @@ -4213,6 +4286,7 @@ months + maanden src/app/shared/i18n/dates.ts 6 @@ -4220,6 +4294,7 @@ week + week src/app/shared/i18n/dates.ts 7 @@ -4227,6 +4302,7 @@ weeks + weken src/app/shared/i18n/dates.ts 8 @@ -4234,6 +4310,7 @@ day + dag src/app/shared/i18n/dates.ts 9 @@ -4241,6 +4318,7 @@ days + dagen src/app/shared/i18n/dates.ts 10 @@ -4248,6 +4326,7 @@ hour + uur src/app/shared/i18n/dates.ts 11 @@ -4255,6 +4334,7 @@ hours + uren src/app/shared/i18n/dates.ts 12 @@ -4262,6 +4342,7 @@ minute + minuut src/app/shared/i18n/dates.ts 13 @@ -4269,6 +4350,7 @@ minutes + minuten src/app/shared/i18n/dates.ts 14 @@ -4276,6 +4358,7 @@ second + seconde src/app/shared/i18n/dates.ts 15 @@ -4283,6 +4366,7 @@ seconds + seconden src/app/shared/i18n/dates.ts 16 diff --git a/frontend/src/locale/messages.sl.xlf b/frontend/src/locale/messages.sl.xlf index 1f6e785b8..a51a59d41 100644 --- a/frontend/src/locale/messages.sl.xlf +++ b/frontend/src/locale/messages.sl.xlf @@ -147,6 +147,7 @@ + node_modules/@ng-bootstrap/src/progressbar/progressbar.ts 32,38 @@ -250,6 +251,7 @@ + node_modules/@ng-bootstrap/src/timepicker/timepicker.ts 115,121 @@ -257,6 +259,7 @@ + node_modules/@ng-bootstrap/src/timepicker/timepicker.ts 123,131 @@ -432,6 +435,7 @@ transaction + transakcija src/app/bisq/bisq-address/bisq-address.component.html 50 @@ -456,6 +460,7 @@ transactions + transakcij src/app/bisq/bisq-address/bisq-address.component.html 51 @@ -480,6 +485,7 @@ Address: + Naslov: src/app/bisq/bisq-address/bisq-address.component.ts 43 @@ -487,6 +493,7 @@ Block + Blok src/app/bisq/bisq-block/bisq-block.component.html 4 @@ -552,6 +559,7 @@ Block : + Blok : src/app/bisq/bisq-block/bisq-block.component.ts 89 @@ -852,6 +860,7 @@ Amount () + Znesek () src/app/bisq/bisq-market/bisq-market.component.html 112,113 @@ -1082,6 +1091,7 @@ confirmation + potrditev src/app/bisq/bisq-transaction/bisq-transaction.component.html 20,21 @@ -1103,6 +1113,7 @@ confirmations + potrditev src/app/bisq/bisq-transaction/bisq-transaction.component.html 21,22 @@ -1209,6 +1220,7 @@ Transaction: + Transakcija: src/app/bisq/bisq-transaction/bisq-transaction.component.ts 50 @@ -1436,6 +1448,7 @@ Navigate to https://mempool.space/sponsor to sponsor + Pojdite na https://mempool.space/sponsor za sponzorstvo. src/app/components/about/about.component.html 78 @@ -1512,6 +1525,7 @@ multisig of + multisig od src/app/components/address-labels/address-labels.component.html 5 @@ -1520,6 +1534,7 @@ Lightning + Lightning src/app/components/address-labels/address-labels.component.html 11 @@ -1528,6 +1543,7 @@ Liquid + Liquid src/app/components/address-labels/address-labels.component.html 17 @@ -1545,6 +1561,7 @@ of transaction + od transakcij src/app/components/address/address.component.html 60,61 @@ -1553,6 +1570,7 @@ of transactions + od transakcij src/app/components/address/address.component.html 61,62 @@ -1603,6 +1621,7 @@ Address: + Naslov: src/app/components/address/address.component.ts 78 @@ -1704,6 +1723,7 @@ of   + od   src/app/components/asset/asset.component.html 80 @@ -1739,6 +1759,7 @@ Asset: + Sredstvo: src/app/components/asset/asset.component.ts 73 @@ -1827,6 +1848,7 @@ Docs + Dokumentacija src/app/components/bisq-master-page/bisq-master-page.component.html 42,45 @@ -2125,6 +2147,7 @@ Block : + Blok : src/app/components/block/block.component.ts 141 @@ -2140,6 +2163,7 @@ API service + API storitev src/app/components/docs/api-docs.component.html 12,14 @@ -2609,6 +2633,7 @@ Returns details about an address. Available fields: address, chain_stats, and mempool_stats. chain,mempool_stats each contain an object with tx_count, funded_txo_count, funded_txo_sum, spent_txo_count, and spent_txo_sum. + Vrne podatke o naslovu. Razpoložljiva polja: address, chain_stats, in mempool_stats. chain,mempool_stats vsebujeta objekt z tx_count, funded_txo_count, funded_txo_sum, spent_txo_count, in spent_txo_sum. src/app/components/docs/api-docs.component.html 179,180 @@ -2940,6 +2965,7 @@ Documentation + Dokumentacija src/app/components/docs/docs.component.html 4 @@ -3065,6 +3091,7 @@ blocks + blokov src/app/components/footer/footer.component.html 22,23 @@ -3081,6 +3108,7 @@ block + blok src/app/components/footer/footer.component.html 23,24 @@ -3170,6 +3198,7 @@ Stack of mempool blocks + Sklad mempool blokov src/app/components/mempool-block/mempool-block.component.ts 73 @@ -3177,6 +3206,7 @@ Mempool block + Mempool blok src/app/components/mempool-block/mempool-block.component.ts 75 @@ -3209,6 +3239,7 @@ Identified by payout address: '' + Prepoznano po naslovu za izplačilo: '' src/app/components/miner/miner.component.ts 42 @@ -3216,6 +3247,7 @@ Identified by coinbase tag: '' + Prepoznano po coinbase oznaki: '' src/app/components/miner/miner.component.ts 52 @@ -3369,6 +3401,7 @@ ago + nazaj src/app/components/time-since/time-since.component.ts 67 @@ -3428,6 +3461,7 @@ After + Po src/app/components/time-span/time-span.component.ts 67 @@ -3487,6 +3521,7 @@ In ~ + Čez ~ src/app/components/time-until/time-until.component.ts 66 @@ -3853,6 +3888,7 @@ Peg-out to + Peg-out v src/app/components/transactions-list/transactions-list.component.html 146,147 @@ -3900,6 +3936,7 @@ This transaction saved % on fees by using native SegWit-Bech32 + Ta transakcija je prihranila % omrežnine z uporabo native SegWit-Bech32. src/app/components/tx-features/tx-features.component.html 1 @@ -3926,6 +3963,7 @@ This transaction saved % on fees by using SegWit and could save % more by fully upgrading to native SegWit-Bech32 + Ta transakcija je prihranila % omrežnine z uporabo SegWit in bi lahko dodatnih % s popolno nadgradnjo na native SegWit-Bech32. src/app/components/tx-features/tx-features.component.html 3 @@ -4002,6 +4040,7 @@ Only ~ sat/vB was needed to get into this block + Samo ~ sat/vB je bilo potrebno za vključitev v ta blok. src/app/components/tx-fee-rating/tx-fee-rating.component.html 2 @@ -4014,6 +4053,7 @@ Overpaid x + Preplačano x src/app/components/tx-fee-rating/tx-fee-rating.component.html 2 diff --git a/frontend/src/locale/messages.th.xlf b/frontend/src/locale/messages.th.xlf index d11c3c7cb..4e44d97ce 100644 --- a/frontend/src/locale/messages.th.xlf +++ b/frontend/src/locale/messages.th.xlf @@ -11,6 +11,7 @@ Slide of + สไลด์ จาก node_modules/@ng-bootstrap/src/carousel/carousel.ts 114,118 @@ -147,6 +148,7 @@ + node_modules/@ng-bootstrap/src/progressbar/progressbar.ts 32,38 @@ -250,6 +252,7 @@ + node_modules/@ng-bootstrap/src/timepicker/timepicker.ts 115,121 @@ -257,6 +260,7 @@ + node_modules/@ng-bootstrap/src/timepicker/timepicker.ts 123,131 @@ -376,7 +380,7 @@ Address - ที่อยู่ + แอดเดรส src/app/bisq/bisq-address/bisq-address.component.html 2 @@ -432,6 +436,7 @@ transaction + ธุรกรรม src/app/bisq/bisq-address/bisq-address.component.html 50 @@ -456,6 +461,7 @@ transactions + ธุรกรรม src/app/bisq/bisq-address/bisq-address.component.html 51 @@ -480,6 +486,7 @@ Address: + แอดเดรส: src/app/bisq/bisq-address/bisq-address.component.ts 43 @@ -487,6 +494,7 @@ Block + บล็อก src/app/bisq/bisq-block/bisq-block.component.html 4 @@ -552,6 +560,7 @@ Block : + บล็อก : src/app/bisq/bisq-block/bisq-block.component.ts 89 @@ -852,6 +861,7 @@ Amount () + จำนวน () src/app/bisq/bisq-market/bisq-market.component.html 112,113 @@ -924,7 +934,7 @@ Addresses - ที่อยู่ + แอดเดรส src/app/bisq/bisq-stats/bisq-stats.component.html 24 @@ -1082,6 +1092,7 @@ confirmation + การยืนยัน src/app/bisq/bisq-transaction/bisq-transaction.component.html 20,21 @@ -1103,6 +1114,7 @@ confirmations + การยืนยัน src/app/bisq/bisq-transaction/bisq-transaction.component.html 21,22 @@ -1209,6 +1221,7 @@ Transaction: + ธุรกรรม: src/app/bisq/bisq-transaction/bisq-transaction.component.ts 50 @@ -1436,6 +1449,7 @@ Navigate to https://mempool.space/sponsor to sponsor + โปรดไปที่https://mempool.space/sponsor เพื่อสนับสนุนเรา src/app/components/about/about.component.html 78 @@ -1475,6 +1489,7 @@ Project Members + สมาชิกในโปรเจคนี้ src/app/components/about/about.component.html 181,183 @@ -1512,6 +1527,7 @@ multisig of + multisig จาก src/app/components/address-labels/address-labels.component.html 5 @@ -1520,6 +1536,7 @@ Lightning + Lightning src/app/components/address-labels/address-labels.component.html 11 @@ -1528,6 +1545,7 @@ Liquid + Liquid src/app/components/address-labels/address-labels.component.html 17 @@ -1536,6 +1554,7 @@ Unconfidential + ไม่เป็นความลับ src/app/components/address/address.component.html 23,24 @@ -1544,6 +1563,7 @@ of transaction + จาก ธุรกรรม src/app/components/address/address.component.html 60,61 @@ -1552,6 +1572,7 @@ of transactions + ของ ธุรกรรม src/app/components/address/address.component.html 61,62 @@ -1560,7 +1581,7 @@ Error loading address data. - เกิดข้อผิดพลาดในการโหลดข้อมูลที่อยู่ + เกิดข้อผิดพลาดในการโหลดข้อมูลแอดเดรส src/app/components/address/address.component.html 132,134 @@ -1602,6 +1623,7 @@ Address: + แอดเดรส: src/app/components/address/address.component.ts 78 @@ -1703,6 +1725,7 @@ of   + ของ   src/app/components/asset/asset.component.html 80 @@ -1738,6 +1761,7 @@ Asset: + สินทรัพย์: src/app/components/asset/asset.component.ts 73 @@ -1826,6 +1850,7 @@ Docs + เอกสาร src/app/components/bisq-master-page/bisq-master-page.component.html 42,45 @@ -1838,6 +1863,7 @@ Next Block + บล็อกถัดไป src/app/components/block/block.component.html 7,8 @@ -1850,6 +1876,7 @@ Previous Block + บล็อกก่อนหน้า src/app/components/block/block.component.html 26,27 @@ -2122,6 +2149,7 @@ Block : + บล็อก : src/app/components/block/block.component.ts 141 @@ -2137,6 +2165,7 @@ API service + บริการ API src/app/components/docs/api-docs.component.html 12,14 @@ -2612,7 +2641,7 @@ Get confirmed transaction history for the specified address/scripthash, sorted with newest first. Returns 25 transactions per page. More can be requested by specifying the last txid seen by the previous query. - แสดงการยืนยันประวัติการทำธุรกรรมสำหรับ ที่อยู่/scripthash ที่ระบุ โดยเรียงลำดับที่ใหม่ที่สุดก่อน ส่งกลับธุรกรรม 25 รายการต่อหน้า สามารถขอเพิ่มเติมได้โดยระบุ txid สุดท้ายที่เห็นในข้อความค้นหาก่อนหน้า + แสดงการยืนยันประวัติการทำธุรกรรมสำหรับ แอดเดรส/scripthash ที่ระบุ โดยเรียงลำดับที่ใหม่ที่สุดก่อน ส่งกลับธุรกรรม 25 รายการต่อหน้า สามารถขอเพิ่มเติมได้โดยระบุ txid สุดท้ายที่เห็นในข้อความค้นหาก่อนหน้า src/app/components/docs/api-docs.component.html 205,207 @@ -2620,7 +2649,7 @@ Get unconfirmed transaction history for the specified address/scripthash. Returns up to 50 transactions (no paging). - แสดงประวัติการทำธุรกรรมที่ไม่ได้รับการยืนยันสำหรับ ที่อยู่/scripthash ที่ระบุ โดยแสดงค่าธุรกรรมสูงสุด 50 รายการ (ไม่มีการเพจ) + แสดงประวัติการทำธุรกรรมที่ไม่ได้รับการยืนยันสำหรับ แอดเดรส/scripthash ที่ระบุ โดยแสดงค่าธุรกรรมสูงสุด 50 รายการ (ไม่มีการเพจ) src/app/components/docs/api-docs.component.html 218,220 @@ -2929,6 +2958,7 @@ Documentation + เอกสารคำอภิบาย src/app/components/docs/docs.component.html 4 @@ -3054,6 +3084,7 @@ blocks + บล็อก src/app/components/footer/footer.component.html 22,23 @@ -3070,6 +3101,7 @@ block + บล็อก src/app/components/footer/footer.component.html 23,24 @@ -3159,6 +3191,7 @@ Stack of mempool blocks + ชั้นของ บล็อก mempool src/app/components/mempool-block/mempool-block.component.ts 73 @@ -3166,6 +3199,7 @@ Mempool block + บล็อก mempool src/app/components/mempool-block/mempool-block.component.ts 75 @@ -3173,6 +3207,7 @@ Range + ระยะ src/app/components/mempool-graph/mempool-graph.component.ts 256 @@ -3180,6 +3215,7 @@ Sum + ผลรวม src/app/components/mempool-graph/mempool-graph.component.ts 258 @@ -3210,6 +3246,7 @@ Broadcast Transaction + ประกาศธุรกรรม src/app/components/push-transaction/push-transaction.component.html 2 @@ -3240,7 +3277,7 @@ TXID, block height, hash or address - TXID, ความสูงบล็อก, แฮชหรือที่อยู่ + TXID, ความสูงบล็อก, แฮชหรือแอดเดรส src/app/components/search-form/search-form.component.html 4 @@ -3667,6 +3704,7 @@ Locktime + เวลาล็อก src/app/components/transaction/transaction.component.html 234,236 @@ -3917,6 +3955,7 @@ This transaction could save % on fees by upgrading to native SegWit-Bech32 or % by upgrading to SegWit-P2SH + ธุรกรรมนี้สามารถประหยัดค่าธรรมเนียมได้ % โดยเปลี่ยนไปใช้ native SegWit-Bech32 หรือประหยัดได้ % โดยใช้ SegWit-P2SH src/app/components/tx-features/tx-features.component.html 5 @@ -3925,6 +3964,7 @@ This transaction uses Taproot + ธุรกรรมนี้ใช้ Taproot src/app/components/tx-features/tx-features.component.html 8 @@ -3933,6 +3973,7 @@ Taproot + Taproot src/app/components/tx-features/tx-features.component.html 8 @@ -3983,6 +4024,7 @@ Only ~ sat/vB was needed to get into this block + จำเป็นต้องมีเพียง ~ sat/vB เพื่อที่จะเข้าสู่บล็อกนี้ src/app/components/tx-fee-rating/tx-fee-rating.component.html 2 @@ -3995,6 +4037,7 @@ Overpaid x + จ่ายเกิน x src/app/components/tx-fee-rating/tx-fee-rating.component.html 2 @@ -4052,7 +4095,7 @@ USD - ดอลล่าร์ + USD src/app/dashboard/dashboard.component.html 123,124 @@ -4118,6 +4161,7 @@ L-BTC in circulation + อุปทานหมุนเวียน L-BTC src/app/dashboard/dashboard.component.html 209,211 @@ -4192,6 +4236,7 @@ year + ปี src/app/shared/i18n/dates.ts 3 @@ -4199,6 +4244,7 @@ years + ปี src/app/shared/i18n/dates.ts 4 @@ -4206,6 +4252,7 @@ month + เดือน src/app/shared/i18n/dates.ts 5 @@ -4213,6 +4260,7 @@ months + เดือน src/app/shared/i18n/dates.ts 6 @@ -4220,6 +4268,7 @@ week + สัปดาห์ src/app/shared/i18n/dates.ts 7 @@ -4227,6 +4276,7 @@ weeks + สัปดาห์ src/app/shared/i18n/dates.ts 8 @@ -4234,6 +4284,7 @@ day + วัน src/app/shared/i18n/dates.ts 9 @@ -4241,6 +4292,7 @@ days + วัน src/app/shared/i18n/dates.ts 10 @@ -4248,6 +4300,7 @@ hour + ชั่วโมง src/app/shared/i18n/dates.ts 11 @@ -4255,6 +4308,7 @@ hours + ชั่วโมง src/app/shared/i18n/dates.ts 12 @@ -4262,6 +4316,7 @@ minute + นาที src/app/shared/i18n/dates.ts 13 @@ -4269,6 +4324,7 @@ minutes + นาที src/app/shared/i18n/dates.ts 14 @@ -4276,6 +4332,7 @@ second + วินาที src/app/shared/i18n/dates.ts 15 @@ -4283,6 +4340,7 @@ seconds + วินาที src/app/shared/i18n/dates.ts 16 diff --git a/frontend/src/locale/messages.zh.xlf b/frontend/src/locale/messages.zh.xlf index 7977fdd1b..34fcd1405 100644 --- a/frontend/src/locale/messages.zh.xlf +++ b/frontend/src/locale/messages.zh.xlf @@ -147,6 +147,7 @@ + node_modules/@ng-bootstrap/src/progressbar/progressbar.ts 32,38 @@ -250,6 +251,7 @@ + node_modules/@ng-bootstrap/src/timepicker/timepicker.ts 115,121 @@ -257,6 +259,7 @@ + node_modules/@ng-bootstrap/src/timepicker/timepicker.ts 123,131 @@ -432,6 +435,7 @@ transaction + 交易 src/app/bisq/bisq-address/bisq-address.component.html 50 @@ -456,6 +460,7 @@ transactions + 交易 src/app/bisq/bisq-address/bisq-address.component.html 51 @@ -480,6 +485,7 @@ Address: + 地址: src/app/bisq/bisq-address/bisq-address.component.ts 43 @@ -487,6 +493,7 @@ Block + 区块 src/app/bisq/bisq-block/bisq-block.component.html 4 @@ -552,6 +559,7 @@ Block : + 区块 src/app/bisq/bisq-block/bisq-block.component.ts 89 @@ -852,6 +860,7 @@ Amount () + 数量( src/app/bisq/bisq-market/bisq-market.component.html 112,113 @@ -1082,6 +1091,7 @@ confirmation + 已确认 src/app/bisq/bisq-transaction/bisq-transaction.component.html 20,21 @@ -1103,6 +1113,7 @@ confirmations + 已确认 src/app/bisq/bisq-transaction/bisq-transaction.component.html 21,22 @@ -1209,6 +1220,7 @@ Transaction: + 交易: src/app/bisq/bisq-transaction/bisq-transaction.component.ts 50 @@ -1436,6 +1448,7 @@ Navigate to https://mempool.space/sponsor to sponsor + 前往https://mempool.space/sponsor去赞助 src/app/components/about/about.component.html 78 @@ -1475,6 +1488,7 @@ Project Members + 项目成员 src/app/components/about/about.component.html 181,183 @@ -1512,6 +1526,7 @@ multisig of + 多重签名 of src/app/components/address-labels/address-labels.component.html 5 @@ -1520,6 +1535,7 @@ Lightning + 闪电交易 src/app/components/address-labels/address-labels.component.html 11 @@ -1528,6 +1544,7 @@ Liquid + Liquid交易 src/app/components/address-labels/address-labels.component.html 17 @@ -1545,6 +1562,7 @@ of transaction + 中的交易 src/app/components/address/address.component.html 60,61 @@ -1553,6 +1571,7 @@ of transactions + 中的交易 src/app/components/address/address.component.html 61,62 diff --git a/production/README.md b/production/README.md index 8821cb43b..c9f067089 100644 --- a/production/README.md +++ b/production/README.md @@ -1,80 +1,88 @@ -# mempool.space v2 production website hosting +# mempool enterprise production instance -These instructions are for setting up a serious production mempool website for Mainnet, Testnet, and Liquid. For home users, follow the main instructions instead. +These instructions are for setting up a serious production mempool website for Bitcoin mainnet, testnet, signet, Liquid mainnet and testnet, and Bisq. For home users, you should use one-click installation methods instead, and for advanced manual deployments of mainnet only see the top-level installation instructions. ### Server Hardware -Mempool V2 is powered by electrs, which is a beast. I recommend a beefy server: +Mempool V2 is powered by blockstream/electrs, which is a beast. I recommend a beefy server: -* 16C CPU (more is better) +* 20C CPU (more is better) * 64G RAM (more is better) -* 2TB SSD (NVMe is better) +* 4TB SSD (NVMe is better) ### HDD vs SSD vs NVMe If you don't have a fast SSD or NVMe backed disk, that's fine. What you do is, go online and buy some fast new NVMe drives and wait for them to arrive. After you install them, throw away your old HDDs and then proceed with the rest of this guide. -## FreeBSD 12 +## FreeBSD 13 The mempool.space site is powered by FreeBSD with ZFS root and ARC cache for maximum performance. Linux probably works fine too, but why settle? ### Filesystem -For maximum performance, I use 2x 1TB NVMe SSDs in a RAID 0 using ZFS with lots of RAM for the ARC L2 cache. +For maximum performance, I use 2x 2TB NVMe SSDs in a RAID 0 using ZFS with lots of RAM for the ARC L2 cache. ``` -# zpool list -v nvmraid -NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT -nvmraid 1.81T 1.04T 787G - - 0% 57% 1.00x ONLINE - - nvd0 928G 535G 393G - - 0% 57% - nvd1 928G 534G 394G - - 0% 57% +% zpool list -v +NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT +nvm 3.62T 1.25T 2.38T - - 2% 34% 1.00x ONLINE - + nvd0p3 1.81T 629G 1.20T - - 2% 33.9% - ONLINE + nvd1p3 1.81T 646G 1.18T - - 2% 34.8% - ONLINE ``` -For maximum flexibility of configuration, I configure the partitions separately for each data folder: +For maximum flexibility of configuration, I recommend partitions separately for each data folder: ``` Filesystem Size Used Avail Capacity Mounted on -nvmraid/mempool 732G 3.0G 729G 0% /mempool -nvmraid/mysql 730G 618M 729G 0% /mysql -nvmraid/bisq 729G 88K 729G 0% /bisq -nvmraid/elements 731G 1.8G 729G 0% /elements -nvmraid/elements/liquidv1 737G 7.2G 729G 1% /elements/liquidv1 -nvmraid/elements/electrs 730G 434M 729G 0% /elements/electrs -nvmraid/bitcoin 730G 694M 729G 0% /bitcoin -nvmraid/bitcoin/chainstate 733G 3.9G 729G 1% /bitcoin/chainstate -nvmraid/bitcoin/indexes 757G 27G 729G 4% /bitcoin/indexes -nvmraid/bitcoin/electrs 730G 853M 729G 0% /bitcoin/electrs -nvmraid/bitcoin/blocks 1.0T 306G 729G 30% /bitcoin/blocks -nvmraid/bitcoin/testnet3 729G 13M 729G 0% /bitcoin/testnet3 -nvmraid/bitcoin/testnet3/blocks 756G 26G 729G 3% /bitcoin/testnet3/blocks -nvmraid/bitcoin/testnet3/chainstate 731G 1.3G 729G 0% /bitcoin/testnet3/chainstate -nvmraid/bitcoin/testnet3/indexes 733G 3.8G 729G 1% /bitcoin/testnet3/indexes -nvmraid/electrs/liquid/cache 729G 39M 729G 0% /electrs/liquid/newindex/cache -nvmraid/electrs/liquid/history 730G 737M 729G 0% /electrs/liquid/newindex/history -nvmraid/electrs/liquid/txstore 736G 6.2G 729G 1% /electrs/liquid/newindex/txstore -nvmraid/electrs/mainnet/cache 729G 44M 729G 0% /electrs/mainnet/newindex/cache -nvmraid/electrs/mainnet/history 964G 234G 729G 24% /electrs/mainnet/newindex/history -nvmraid/electrs/mainnet/txstore 1.1T 392G 729G 35% /electrs/mainnet/newindex/txstore -nvmraid/electrs/testnet/cache 729G 40M 729G 0% /electrs/testnet/newindex/cache -nvmraid/electrs/testnet/history 747G 18G 729G 2% /electrs/testnet/newindex/history -nvmraid/electrs/testnet/txstore 764G 34G 729G 4% /electrs/testnet/newindex/txstore +nvm/bisq 766G 1.1G 765G 0% /bisq +nvm/bitcoin 766G 648M 765G 0% /bitcoin +nvm/bitcoin/blocks 1.1T 375G 765G 33% /bitcoin/blocks +nvm/bitcoin/chainstate 770G 4.5G 765G 1% /bitcoin/chainstate +nvm/bitcoin/electrs 772G 7.3G 765G 1% /bitcoin/electrs +nvm/bitcoin/indexes 799G 34G 765G 4% /bitcoin/indexes +nvm/bitcoin/testnet3 765G 5.0M 765G 0% /bitcoin/testnet3 +nvm/bitcoin/testnet3/blocks 786G 21G 765G 3% /bitcoin/testnet3/blocks +nvm/bitcoin/testnet3/chainstate 766G 1.1G 765G 0% /bitcoin/testnet3/chainstate +nvm/bitcoin/testnet3/indexes 768G 2.9G 765G 0% /bitcoin/testnet3/indexes +nvm/electrs 765G 128K 765G 0% /electrs +nvm/electrs/liquid 765G 104K 765G 0% /electrs/liquid +nvm/electrs/liquid/cache 765G 7.8M 765G 0% /electrs/liquid/newindex/cache +nvm/electrs/liquid/history 766G 886M 765G 0% /electrs/liquid/newindex/history +nvm/electrs/liquid/txstore 775G 10G 765G 1% /electrs/liquid/newindex/txstore +nvm/electrs/liquidtestnet 765G 112K 765G 0% /electrs/liquidtestnet +nvm/electrs/liquidtestnet/cache 765G 96K 765G 0% /electrs/liquidtestnet/newindex/cache +nvm/electrs/liquidtestnet/history 765G 96K 765G 0% /electrs/liquidtestnet/newindex/history +nvm/electrs/liquidtestnet/txstore 765G 96K 765G 0% /electrs/liquidtestnet/newindex/txstore +nvm/electrs/mainnet 765G 112K 765G 0% /electrs/mainnet +nvm/electrs/mainnet/cache 765G 4.4M 765G 0% /electrs/mainnet/newindex/cache +nvm/electrs/mainnet/history 1.0T 300G 765G 28% /electrs/mainnet/newindex/history +nvm/electrs/mainnet/txstore 1.3T 530G 765G 41% /electrs/mainnet/newindex/txstore +nvm/electrs/signet 766G 522M 765G 0% /electrs/signet +nvm/electrs/testnet 765G 104K 765G 0% /electrs/testnet +nvm/electrs/testnet/cache 765G 1.6M 765G 0% /electrs/testnet/newindex/cache +nvm/electrs/testnet/history 784G 19G 765G 2% /electrs/testnet/newindex/history +nvm/electrs/testnet/txstore 803G 38G 765G 5% /electrs/testnet/newindex/txstore +nvm/elements 766G 927M 765G 0% /elements +nvm/elements/electrs 766G 716M 765G 0% /elements/electrs +nvm/elements/liquidv1 777G 11G 765G 1% /elements/liquidv1 +nvm/mempool 789G 24G 765G 3% /mempool +nvm/mysql 766G 648M 765G 0% /mysql +tmpfs 1.0G 1.3M 1.0G 0% /var/cache/nginx +tmpfs 3.0G 1.9G 1.1G 63% /bisq/statsnode-data/btc_mainnet/db/json ``` ### Build Dependencies You'll probably need these: ``` -pkg install -y zsh sudo git screen vim-console curl wget neovim rsync -pkg install -y openssl openssh-portable open-vm-tools-nox11 py37-pip -pkg install -y boost-libs autoconf automake gmake gcc libevent libtool pkgconf -pkg install -y mariadb55-server mariadb55-client nginx py37-certbot-nginx npm +pkg install -y zsh sudo git screen curl wget neovim rsync nginx openssl openssh-portable py38-pip py38-certbot-nginx boost-libs autoconf automake gmake gcc libevent libtool pkgconf mariadb105-server mariadb105-client ``` ### NodeJS / npm I recommend to build nodejs / npm from source using nvm: ``` -curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | zsh +curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | zsh source $HOME/.zshrc -nvm install node +nvm install v16.10.0 nvm alias default node ``` @@ -107,11 +115,18 @@ DataDirectory /var/db/tor DataDirectoryGroupReadable 1 HiddenServiceDir /var/db/tor/mempool -HiddenServicePort 80 127.0.0.1:80 +HiddenServicePort 80 127.0.0.1:81 +HiddenServiceVersion 3 + +HiddenServiceDir /var/db/tor/bisq +HiddenServicePort 80 127.0.0.1:82 +HiddenServiceVersion 3 + +HiddenServiceDir /var/db/tor/liquid +HiddenServicePort 80 127.0.0.1:83 HiddenServiceVersion 3 ``` - ### Bitcoin Build [Bitcoin Core](https://github.com/bitcoin/bitcoin) from source. Alternatively, install the OS packages: @@ -121,25 +136,35 @@ pkg install -y bitcoin-daemon bitcoin-utils Configure your bitcoin.conf like this: ``` +datadir=/bitcoin server=1 -daemon=1 +txindex=1 listen=1 discover=1 -txindex=1 -dbcache=3700 -maxconnections=1337 +par=16 +dbcache=4096 +maxmempool=1337 +mempoolexpiry=999999 +maxconnections=42 onion=127.0.0.1:9050 rpcallowip=127.0.0.1 -rpcuser=0cd862dce678b830bd2aa36f10b9b6b2 -rpcpassword=2d89d36cac4a13c87b5d19ef8f577e37 +rpcuser=foo +rpcpassword=bar [main] bind=127.0.0.1:8333 rpcbind=127.0.0.1:8332 +whitelist=bloomfilter@127.0.0.1 [test] +daemon=1 bind=127.0.0.1:18333 rpcbind=127.0.0.1:18332 + +[signet] +daemon=1 +bind=127.0.0.1:38333 +rpcbind=127.0.0.1:38332 ``` ### Elements @@ -158,15 +183,39 @@ Configure your elements.conf like this: server=1 daemon=1 listen=1 -chain=liquidv1 -rpcuser=liquiduser -rpcpassword=liquidpass -validatepegin=1 +rpcuser=foo +rpcpassword=bar mainchainrpchost=127.0.0.1 -mainchainrpcport=8332 -mainchainrpcuser=user -mainchainrpcpassword=pass +mainchainrpcuser=foo +mainchainrpcpassword=bar txindex=1 + +[liquidv1] +validatepegin=1 +mainchainrpcport=8332 + +[liquidtestnet] +validatepegin=0 +anyonecanspendaremine=0 +initialfreecoins=2100000000000000 +con_dyna_deploy_start=0 +con_max_block_sig_size=150 +checkblockindex=0 +fallbackfee=0.00000100 +con_has_parent_chain=0 +parentgenesisblockhash=NULL +pubkeyprefix=36 +scriptprefix=19 +blindedprefix=23 +bech32_hrp=tex +blech32_hrp=tlq +pchmessagestart=410edd62 +dynamic_epoch_length=1000 +signblockscript=51210217e403ddb181872c32a0cd468c710040b2f53d8cac69f18dad07985ee37e9a7151ae +evbparams=dynafed:0::: +addnode=liquid-testnet.blockstream.com:18892 +addnode=liquidtestnet.com:18891 +addnode=liquid.network:18444 ``` Start elementsd and wait for it to sync the Liquid blockchain. @@ -180,11 +229,13 @@ cd electrs git checkout new-index ``` -You'll need 3 instances, one for each network. Build one at a time: +You'll need one instance per network. Build and run them one at a time: ``` ./electrs-start-mainnet ./electrs-start-testnet +./electrs-start-signet ./electrs-start-liquid +./electrs-start-liquidtestnet ``` ### MariaDB @@ -194,12 +245,26 @@ Import historical mempool fee database snapshot: mysql -u root create database mempool; grant all on mempool.* to 'mempool'@'localhost' identified by 'mempool'; -create database tmempool; -grant all on tmempool.* to 'tmempool'@'localhost' identified by 'tmempool'; -create database lmempool; -grant all on lmempool.* to 'lmempool'@'localhost' identified by 'lmempool'; +create database mempool_testnet; +grant all on mempool_testnet.* to 'mempool_testnet'@'localhost' identified by 'mempool_testnet'; +create database mempool_signet; +grant all on mempool_signet.* to 'mempool_signet'@'localhost' identified by 'mempool_signet'; +create database mempool_liquid; +grant all on mempool_liquid.* to 'mempool_liquid'@'localhost' identified by 'mempool_liquid'; +create database mempool_liquidtestnet; +grant all on mempool_liquidtestnet.* to 'mempool_liquidtestnet'@'localhost' identified by 'mempool_liquidtestnet'; ``` + +### Bisq + +Build bisq-statsnode normally and run using options like this: +``` +./bisq-statsnode --dumpBlockchainData=true --dumpStatistics=true +``` + +If bisq is happy, it should dump JSON files for Bisq Markets and BSQ data into /bisq that the mempool backend will use. + ### Mempool After all 3 electrs instances are fully indexed, install your 3 mempool nodes: @@ -217,13 +282,15 @@ Finally, start your 3 mempool backends: Get SSL certificate using certbot: ``` -certbot --nginx -d mempool.space +certbot --nginx -d mempool.ninja ``` -Install nginx.conf from this repo, edit as necessary: +Make a symlink from /usr/local/etc/nginx/mempool to /mempool/mempool, and copy the nginx.conf and edit as necessary. You probably only need to edit the top-level nginx.conf file. ``` -cp nginx.conf /usr/local/etc/nginx/nginx.conf -vi /usr/local/etc/nginx/nginx.conf +cd /usr/local/etc/nginx +ln -s /mempool/mempool +cp /mempool/mempool/nginx.conf . +vi nginx.conf ``` Restart nginx @@ -234,4 +301,3 @@ service nginx restart ### Done Your site should look like https://mempool.space/ -If it doesn't ask wiz on Keybase DM or Twitter for help. diff --git a/production/nginx-bisq.conf b/production/nginx-bisq.conf deleted file mode 100644 index 25873c78c..000000000 --- a/production/nginx-bisq.conf +++ /dev/null @@ -1,75 +0,0 @@ -root /mempool/public_html/markets/en-US; -index index.html; - -set $frameOptions "DENY"; -set $contentSecurityPolicy "frame-ancestors 'none'"; -if ($http_referer ~ ^https://bisq.markets/) -{ - set $frameOptions "ALLOW-FROM https://bisq.markets"; - set $contentSecurityPolicy "frame-ancestors https://bisq.markets"; -} -if ($http_referer ~ ^https://bisq.network/) -{ - set $frameOptions "ALLOW-FROM https://bisq.network"; - set $contentSecurityPolicy "frame-ancestors https://bisq.network"; -} -add_header X-Frame-Options $frameOptions; -add_header Content-Security-Policy $contentSecurityPolicy; -add_header Link "; rel=\"canonical\""; -add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"; -#add_header Onion-Location http://mempoolhqx4isw62xs7abwphsq7ldayuidyx2v2oethdhhj6mlo2r6ad.onion$request_uri; - -proxy_cache markets; -proxy_cache_valid 200 30s; - -location / { - try_files $uri $uri/ /index.html; -} -location /api { - rewrite ^/api$ / break; - rewrite ^/api/$ / break; - rewrite ^/api/(.*) /api/v1/bisq/markets/$1 break; - try_files $uri $uri/ @mempool; -} -location /bisq/api/markets { - rewrite ^/bisq/api/markets/(.*) /api/v1/bisq/markets/$1 break; - try_files $uri $uri/ @mempool; -} -location /bisq/api/v1/markets { - rewrite ^/bisq/api/v1/markets/(.*) /api/v1/bisq/markets/$1 break; - try_files $uri $uri/ @mempool; -} -location /bisq/api/v1/ws { - proxy_pass http://127.0.0.1:8996/; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "Upgrade"; -} -location /api/markets { - rewrite ^/api/markets/(.*) /api/v1/bisq/markets/$1 break; - try_files $uri $uri/ @mempool; -} -location /api/v1/markets { - rewrite ^/api/v1/markets/(.*) /api/v1/bisq/markets/$1 break; - try_files $uri $uri/ @mempool; -} -location /api/v1/ws { - proxy_pass http://127.0.0.1:8996/; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "Upgrade"; -} -location @mempool { - proxy_pass http://127.0.0.1:8996; - proxy_http_version 1.1; - - proxy_set_header Host $http_host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "upgrade"; - - proxy_cache_bypass $http_upgrade; - proxy_redirect off; - proxy_set_header X-Forwarded-Proto $scheme; -} diff --git a/production/nginx-liquid.conf b/production/nginx-liquid.conf deleted file mode 100644 index 37451fdb7..000000000 --- a/production/nginx-liquid.conf +++ /dev/null @@ -1,167 +0,0 @@ -root /mempool/public_html/liquid/; - -index index.html; - -set $frameOptions "DENY"; -set $contentSecurityPolicy "frame-ancestors 'none'"; -if ($http_referer ~ ^https://mempool.space/) -{ - set $frameOptions "ALLOW-FROM https://mempool.space"; - set $contentSecurityPolicy "frame-ancestors https://mempool.space"; -} -if ($http_referer ~ ^https://mempool.ninja/) -{ - set $frameOptions "ALLOW-FROM https://mempool.ninja"; - set $contentSecurityPolicy "frame-ancestors https://mempool.ninja"; -} -if ($http_referer ~ ^https://wiz.biz/) -{ - set $frameOptions "ALLOW-FROM https://wiz.biz"; - set $contentSecurityPolicy "frame-ancestors https://wiz.biz"; -} - -add_header X-Frame-Options $frameOptions; -add_header Content-Security-Policy $contentSecurityPolicy; -add_header Onion-Location http://mempoolhqx4isw62xs7abwphsq7ldayuidyx2v2oethdhhj6mlo2r6ad.onion$request_uri; -add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"; - -# fallback for all URLs i.e. /address/foo /tx/foo /block/000 -location / { - try_files /$lang/$uri /$lang/$uri/ $uri $uri/ /en-US/$uri @index-redirect; - add_header Cache-Control "public, no-transform"; - add_header X-Frame-Options $frameOptions; - add_header Content-Security-Policy $contentSecurityPolicy; - add_header Onion-Location http://mempoolhqx4isw62xs7abwphsq7ldayuidyx2v2oethdhhj6mlo2r6ad.onion$request_uri; - add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"; - expires 10m; -} -location /resources { - try_files /$lang/$uri /$lang/$uri/ $uri $uri/ /en-US/$uri @index-redirect; - add_header Cache-Control "public, no-transform"; - add_header X-Frame-Options $frameOptions; - add_header Content-Security-Policy $contentSecurityPolicy; - add_header Onion-Location http://mempoolhqx4isw62xs7abwphsq7ldayuidyx2v2oethdhhj6mlo2r6ad.onion$request_uri; - add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"; - expires 1h; -} -location @index-redirect { - add_header Vary accept-language; - add_header X-Frame-Options $frameOptions; - add_header Content-Security-Policy $contentSecurityPolicy; - add_header Onion-Location http://mempoolhqx4isw62xs7abwphsq7ldayuidyx2v2oethdhhj6mlo2r6ad.onion$request_uri; - add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"; - rewrite (.*) /$lang/index.html; -} - -# location block using regex are matched in order - -# used to rewrite resources from // to /en-US/ -location ~ ^/(ar|bg|bs|ca|cs|da|de|et|el|es|eo|eu|fa|fr|gl|ko|hr|id|it|he|ka|lv|lt|hu|mk|ms|nl|ja|ka|no|nb|nn|pl|pt|pt-BR|ro|ru|sk|sl|sr|sh|fi|sv|th|tr|uk|vi|zh)/resources/ { - rewrite ^/[a-zA-Z-]*/resources/(.*) /en-US/resources/$1; -} -# used for cookie override -location ~ ^/(ar|bg|bs|ca|cs|da|de|et|el|es|eo|eu|fa|fr|gl|ko|hr|id|it|he|ka|lv|lt|hu|mk|ms|nl|ja|ka|no|nb|nn|pl|pt|pt-BR|ro|ru|sk|sl|sr|sh|fi|sv|th|tr|uk|vi|zh)/ { - try_files $uri $uri/ /$1/index.html =404; -} - -# static API docs -location = /api { - #return 302 https://mempool.space/$request_uri; - try_files $uri $uri/ /en-US/index.html =404; -} -location = /api/ { - #return 302 https://mempool.space/$request_uri; - try_files $uri $uri/ /en-US/index.html =404; -} -location = /liquid/api { - #return 302 https://mempool.space/$request_uri; - try_files $uri $uri/ /en-US/index.html =404; -} -location = /liquid/api/ { - #return 302 https://mempool.space/$request_uri; - try_files $uri $uri/ /en-US/index.html =404; -} -location = /testnet/api { - #return 302 https://mempool.space/$request_uri; - try_files $uri $uri/ /en-US/index.html =404; -} -location = /testnet/api/ { - #return 302 https://mempool.space/$request_uri; - try_files $uri $uri/ /en-US/index.html =404; -} - -# mainnet API -location /api/v1/contributors { - proxy_pass https://mempool.space; - proxy_hide_header onion-location; - proxy_hide_header strict-transport-security; - proxy_hide_header content-security-policy; - proxy_hide_header x-frame-options; -} -location /api/v1/donations { - proxy_pass https://mempool.space; - proxy_hide_header onion-location; - proxy_hide_header strict-transport-security; - proxy_hide_header content-security-policy; - proxy_hide_header x-frame-options; -} -location /api/v1/donations/images { - proxy_pass https://mempool.space; - proxy_cache services; - proxy_cache_valid 200 1d; - expires 7d; - add_header Cache-Control "public, no-transform"; - proxy_hide_header onion-location; - proxy_hide_header strict-transport-security; - proxy_hide_header content-security-policy; - proxy_hide_header x-frame-options; -} -location /api/v1/ws { - proxy_pass http://127.0.0.1:8998/; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "Upgrade"; -} -location /api/v1 { - proxy_pass http://127.0.0.1:8998/api/v1; -} -location /api/address { - proxy_pass http://electrs-liquid/address; -} -location /api/tx { - proxy_pass http://electrs-liquid/tx; -} -location /api/block { - proxy_pass http://electrs-liquid/block; -} -location /api/ { - proxy_pass http://electrs-liquid/; -} - -# liquid API -location /liquid/api/v1/ws { - proxy_pass http://127.0.0.1:8998/; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "Upgrade"; -} -location /liquid/api/v1 { - proxy_pass http://127.0.0.1:8998/api/v1; -} -location /liquid/api/ { - proxy_pass http://electrs-liquid/; -} - -# liquidtestnet API -location /liquidtestnet/api/v1/ws { - proxy_pass http://127.0.0.1:8994/; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "Upgrade"; -} -location /liquidtestnet/api/v1 { - proxy_pass http://127.0.0.1:8994/api/v1; -} -location /liquidtestnet/api/ { - proxy_pass http://electrs-liquidtestnet/; -} diff --git a/production/nginx-mempool-ssr.conf b/production/nginx-mempool-ssr.conf deleted file mode 100644 index 5c80bb75f..000000000 --- a/production/nginx-mempool-ssr.conf +++ /dev/null @@ -1,212 +0,0 @@ - root /mempool/public_html/mainnet/; - - index index.html; - - add_header Onion-Location http://mempoolhqx4isw62xs7abwphsq7ldayuidyx2v2oethdhhj6mlo2r6ad.onion$request_uri; - add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"; - - set $frameOptions "DENY"; - set $contentSecurityPolicy "frame-ancestors 'none'"; - if ($http_referer ~ ^https://mempool.space/) - { - set $frameOptions "ALLOW-FROM https://mempool.space"; - set $contentSecurityPolicy "frame-ancestors https://mempool.space"; - } - if ($http_referer ~ ^https://mempool.ninja/) - { - set $frameOptions "ALLOW-FROM https://mempool.ninja"; - set $contentSecurityPolicy "frame-ancestors https://mempool.ninja"; - } - if ($http_referer ~ ^https://node100.bitcoin.wiz.biz/) - { - set $frameOptions "ALLOW-FROM https://node100.bitcoin.wiz.biz"; - set $contentSecurityPolicy "frame-ancestors https://node100.bitcoin.wiz.biz"; - } - if ($http_referer ~ ^https://wiz.biz/) - { - set $frameOptions "ALLOW-FROM https://wiz.biz"; - set $contentSecurityPolicy "frame-ancestors https://wiz.biz"; - } - - add_header X-Frame-Options $frameOptions; - add_header Content-Security-Policy $contentSecurityPolicy; - - # fallback for all URLs i.e. /address/foo /tx/foo /block/000 - location / { - #try_files /$lang/$uri /$lang/$uri/ $uri $uri/ /en-US/$uri @index-redirect; - proxy_pass http://127.0.0.1:4000; - } - location @index-redirect { - add_header vary accept-language; - rewrite (.*) /$lang/index.html; - } - - # location block using regex are matched in order - - # used to rewrite resources from // to /en-US/ - location ~ ^/(ar|bg|bs|ca|cs|da|de|et|el|es|eo|eu|fa|fr|gl|ko|hr|id|it|he|ka|lv|lt|hu|mk|ms|nl|ja|ka|no|nb|nn|pl|pt|pt-BR|ro|ru|sk|sl|sr|sh|fi|sv|th|tr|uk|vi|zh)/resources/ { - #rewrite ^/[a-zA-Z-]*/resources/(.*) /resources/$1; - try_files $uri /en-US/$uri =404; - } - location /resources/ { - try_files $uri /en-US/$uri =404; - } - # used for cookie override - location ~ ^/(ar|bg|bs|ca|cs|da|de|et|el|es|eo|eu|fa|fr|gl|ko|hr|id|it|he|ka|lv|lt|hu|mk|ms|nl|ja|ka|no|nb|nn|pl|pt|pt-BR|ro|ru|sk|sl|sr|sh|fi|sv|th|tr|uk|vi|zh)/ { - #try_files $uri $uri/ /$1/index.html =404; - proxy_pass http://127.0.0.1:4000; - } - - # add /sitemap for production SEO - location /sitemap { - try_files $uri =410; - } - # old /explorer redirect from v1 days - location /explorer { - rewrite /explorer/(.*) https://$host/$1 permanent; - } - - # static API docs - location = /api { - #return 302 https://mempool.space/$request_uri; - #try_files $uri $uri/ /en-US/index.html =404; - proxy_pass http://127.0.0.1:4000; - } - location = /api/ { - #return 302 https://mempool.space/$request_uri; - #try_files $uri $uri/ /en-US/index.html =404; - proxy_pass http://127.0.0.1:4000; - } - location = /liquid/api { - #return 302 https://mempool.space/$request_uri; - #try_files $uri $uri/ /en-US/index.html =404; - proxy_pass http://127.0.0.1:4000; - } - location = /liquid/api/ { - #return 302 https://mempool.space/$request_uri; - #try_files $uri $uri/ /en-US/index.html =404; - proxy_pass http://127.0.0.1:4000; - } - location = /testnet/api { - #return 302 https://mempool.space/$request_uri; - #try_files $uri $uri/ /en-US/index.html =404; - proxy_pass http://127.0.0.1:4000; - } - location = /testnet/api/ { - #return 302 https://mempool.space/$request_uri; - #try_files $uri $uri/ /en-US/index.html =404; - proxy_pass http://127.0.0.1:4000; - } - location = /bisq/api { - #return 302 https://mempool.space/$request_uri; - #try_files $uri $uri/ /en-US/index.html =404; - proxy_pass http://127.0.0.1:4000; - } - location = /bisq/api/ { - #return 302 https://mempool.space/$request_uri; - #try_files $uri $uri/ /en-US/index.html =404; - proxy_pass http://127.0.0.1:4000; - } - - # mainnet API - location /api/v1/donations { - proxy_pass http://127.0.0.1:8999; - # don't rate limit this API prefix - } - location /api/v1/donations/images { - proxy_pass http://127.0.0.1:8999; - proxy_cache services; - proxy_cache_valid 200 1d; - } - location /api/v1/ws { - proxy_pass http://127.0.0.1:8999/; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "Upgrade"; - } - location /api/v1 { - proxy_pass http://127.0.0.1:8999/api/v1; - limit_req burst=50 nodelay zone=api; - } - location /api/ { - proxy_pass http://[::1]:3000/; - limit_req burst=50 nodelay zone=electrs; - } - - # liquid API - location /liquid/api/v1/ws { - proxy_pass http://127.0.0.1:8998/; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "Upgrade"; - } - location /liquid/api/v1 { - proxy_pass http://127.0.0.1:8998/api/v1; - limit_req burst=50 nodelay zone=api; - } - location /liquid/api/ { - proxy_pass http://[::1]:3001/; - limit_req burst=50 nodelay zone=electrs; - } - - # testnet API - location /testnet/api/v1/ws { - proxy_pass http://127.0.0.1:8997/; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "Upgrade"; - } - location /testnet/api/v1 { - proxy_pass http://127.0.0.1:8997/api/v1; - limit_req burst=50 nodelay zone=api; - } - location /testnet/api/ { - proxy_pass http://[::1]:3002/; - limit_req burst=50 nodelay zone=electrs; - } - - # bisq API - location /bisq/api/v1/ws { - proxy_pass http://127.0.0.1:8996/; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "Upgrade"; - } - location /bisq/api/v1/markets { - proxy_pass http://127.0.0.1:8996/api/v1/bisq/markets; - #limit_req burst=50 nodelay zone=api; - } - location /bisq/api/v1 { - proxy_pass http://127.0.0.1:8996/api/v1; - limit_req burst=50 nodelay zone=api; - } - location /bisq/api { - proxy_pass http://127.0.0.1:8996/api/v1/bisq; - limit_req burst=50 nodelay zone=api; - } - - # mainnet API - location /ws { - proxy_pass http://127.0.0.1:8999/; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "Upgrade"; - } - location /ws/mainnet { - proxy_pass http://127.0.0.1:8999/; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "Upgrade"; - } - location /ws/liquid { - proxy_pass http://127.0.0.1:8998/; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "Upgrade"; - } - location /ws/testnet { - proxy_pass http://127.0.0.1:8997/; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "Upgrade"; - } diff --git a/production/nginx-mempool.conf b/production/nginx-mempool.conf deleted file mode 100644 index 8b948b305..000000000 --- a/production/nginx-mempool.conf +++ /dev/null @@ -1,272 +0,0 @@ - root /mempool/public_html/mainnet/; - - index index.html; - - # tor onion redirect - add_header Onion-Location http://mempoolhqx4isw62xs7abwphsq7ldayuidyx2v2oethdhhj6mlo2r6ad.onion$request_uri; - - # HSTS preload enable - add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"; - - # generate frame configuration from origin header - set $frameOptions "DENY"; - set $contentSecurityPolicy "frame-ancestors 'none'"; - if ($http_referer ~ ^https://mempool.space/) - { - set $frameOptions "ALLOW-FROM https://mempool.space"; - set $contentSecurityPolicy "frame-ancestors https://mempool.space"; - } - if ($http_referer ~ ^https://mempool.ninja/) - { - set $frameOptions "ALLOW-FROM https://mempool.ninja"; - set $contentSecurityPolicy "frame-ancestors https://mempool.ninja"; - } - if ($http_referer ~ ^https://wiz.biz/) - { - set $frameOptions "ALLOW-FROM https://wiz.biz"; - set $contentSecurityPolicy "frame-ancestors https://wiz.biz"; - } - - # restrict usage of frames - add_header X-Frame-Options $frameOptions; - add_header Content-Security-Policy $contentSecurityPolicy; - - # enable browser and proxy caching - add_header Cache-Control "public, no-transform"; - - # vary cache if user changes language preference - add_header Vary Accept-Language; - add_header Vary Cookie; - - # fallback for all URLs i.e. /address/foo /tx/foo /block/000 - location / { - try_files /$lang/$uri /$lang/$uri/ $uri $uri/ /en-US/$uri @index-redirect; - expires 10m; - } - location /resources { - try_files /$lang/$uri /$lang/$uri/ $uri $uri/ /en-US/$uri @index-redirect; - expires 1h; - } - location @index-redirect { - rewrite (.*) /$lang/index.html; - } - - # location block using regex are matched in order - - # used to rewrite resources from // to /en-US/ - location ~ ^/(ar|bg|bs|ca|cs|da|de|et|el|es|eo|eu|fa|fr|gl|ko|hr|id|it|he|ka|lv|lt|hu|mk|ms|nl|ja|nb|nn|pl|pt|pt-BR|ro|ru|sk|sl|sr|sh|fi|sv|th|tr|uk|vi|zh|hi)/resources/ { - rewrite ^/[a-zA-Z-]*/resources/(.*) /en-US/resources/$1; - } - # used for cookie override - location ~ ^/(ar|bg|bs|ca|cs|da|de|et|el|es|eo|eu|fa|fr|gl|ko|hr|id|it|he|ka|lv|lt|hu|mk|ms|nl|ja|nb|nn|pl|pt|pt-BR|ro|ru|sk|sl|sr|sh|fi|sv|th|tr|uk|vi|zh|hi)/ { - try_files $uri $uri/ /$1/index.html =404; - } - - # add /sitemap for production SEO - location /sitemap { - try_files $uri =410; - } - # old /explorer redirect from v1 days - location /explorer { - rewrite /explorer/(.*) https://$host/$1 permanent; - } - - # static API docs - location = /api { - #return 302 https://mempool.space/$request_uri; - try_files $uri $uri/ /en-US/index.html =404; - } - location = /api/ { - #return 302 https://mempool.space/$request_uri; - try_files $uri $uri/ /en-US/index.html =404; - } - location = /liquid/api { - #return 302 https://mempool.space/$request_uri; - try_files $uri $uri/ /en-US/index.html =404; - } - location = /liquid/api/ { - #return 302 https://mempool.space/$request_uri; - try_files $uri $uri/ /en-US/index.html =404; - } - location = /testnet/api { - #return 302 https://mempool.space/$request_uri; - try_files $uri $uri/ /en-US/index.html =404; - } - location = /testnet/api/ { - #return 302 https://mempool.space/$request_uri; - try_files $uri $uri/ /en-US/index.html =404; - } - location = /bisq/api { - #return 302 https://mempool.space/$request_uri; - try_files $uri $uri/ /en-US/index.html =404; - } - location = /bisq/api/ { - #return 302 https://mempool.space/$request_uri; - try_files $uri $uri/ /en-US/index.html =404; - } - location = /signet/api { - #return 302 https://mempool.space/$request_uri; - try_files $uri $uri/ /en-US/index.html =404; - } - location = /signet/api/ { - #return 302 https://mempool.space/$request_uri; - try_files $uri $uri/ /en-US/index.html =404; - } - - # serivces API - location /api/v1/contributors { - # don't rate limit this API prefix - proxy_pass https://mempool.space; - proxy_hide_header onion-location; - proxy_hide_header strict-transport-security; - proxy_hide_header content-security-policy; - proxy_hide_header x-frame-options; - } - location /api/v1/donations { - # don't rate limit this API prefix - proxy_pass https://mempool.space; - proxy_hide_header onion-location; - proxy_hide_header strict-transport-security; - proxy_hide_header content-security-policy; - proxy_hide_header x-frame-options; - } - location /api/v1/donations/images { - # don't rate limit this API prefix - proxy_pass https://mempool.space; - proxy_cache services; - proxy_cache_valid 200 1d; - expires 7d; - add_header Cache-Control "public, no-transform"; - proxy_hide_header onion-location; - proxy_hide_header strict-transport-security; - proxy_hide_header content-security-policy; - proxy_hide_header x-frame-options; - } - - # mainnet API - location /api/v1/ws { - proxy_pass http://127.0.0.1:8999/; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "Upgrade"; - } - location /api/v1 { - proxy_pass http://127.0.0.1:8999/api/v1; - limit_req burst=50 nodelay zone=api; - } - location /api/address { - proxy_pass http://electrs-mainnet/address; - limit_req burst=50 nodelay zone=electrs-address; - } - location /api/tx { - proxy_pass http://electrs-mainnet/tx; - limit_req burst=50 nodelay zone=electrs-tx; - } - location /api/block { - proxy_pass http://electrs-mainnet/block; - limit_req burst=50 nodelay zone=electrs-block; - } - location /api/ { - proxy_pass http://electrs-mainnet/; - limit_req burst=50 nodelay zone=electrs; - } - - # liquid API - location /liquid/api/v1/ws { - proxy_pass http://127.0.0.1:8998/; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "Upgrade"; - } - location /liquid/api/v1 { - proxy_pass http://127.0.0.1:8998/api/v1; - limit_req burst=50 nodelay zone=api; - } - location /liquid/api/ { - proxy_pass http://electrs-liquid/; - limit_req burst=50 nodelay zone=electrs; - } - - # testnet API - location /testnet/api/v1/ws { - proxy_pass http://127.0.0.1:8997/; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "Upgrade"; - } - location /testnet/api/v1 { - proxy_pass http://127.0.0.1:8997/api/v1; - limit_req burst=50 nodelay zone=api; - } - location /testnet/api/ { - proxy_pass http://electrs-testnet/; - limit_req burst=50 nodelay zone=electrs; - } - - # bisq API - location /bisq/api/v1/ws { - proxy_pass http://127.0.0.1:8996/; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "Upgrade"; - } - location /bisq/api/v1/markets { - proxy_pass http://127.0.0.1:8996/api/v1/bisq/markets; - #limit_req burst=50 nodelay zone=api; - } - location /bisq/api/v1 { - proxy_pass http://127.0.0.1:8996/api/v1; - limit_req burst=50 nodelay zone=api; - } - location /bisq/api { - proxy_pass http://127.0.0.1:8996/api/v1/bisq; - limit_req burst=50 nodelay zone=api; - } - - # signet API - location /signet/api/v1/ws { - proxy_pass http://127.0.0.1:8995/; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "Upgrade"; - } - location /signet/api/v1 { - proxy_pass http://127.0.0.1:8995/api/v1; - limit_req burst=50 nodelay zone=api; - } - location /signet/api/ { - proxy_pass http://electrs-signet/; - limit_req burst=50 nodelay zone=electrs; - } - - # websockets - location /ws { - proxy_pass http://127.0.0.1:8999/; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "Upgrade"; - } - location /ws/mainnet { - proxy_pass http://127.0.0.1:8999/; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "Upgrade"; - } - location /ws/liquid { - proxy_pass http://127.0.0.1:8998/; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "Upgrade"; - } - location /ws/testnet { - proxy_pass http://127.0.0.1:8997/; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "Upgrade"; - } - location /ws/signet { - proxy_pass http://127.0.0.1:8995/; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "Upgrade"; - } diff --git a/production/nginx.conf b/production/nginx.conf deleted file mode 100644 index 7a00580dc..000000000 --- a/production/nginx.conf +++ /dev/null @@ -1,301 +0,0 @@ -user nobody; -pid /var/run/nginx.pid; - -worker_processes auto; -worker_rlimit_nofile 100000; - -events { - worker_connections 9000; - multi_accept on; -} - -http { - sendfile on; - tcp_nopush on; - tcp_nodelay on; - - server_tokens off; - server_name_in_redirect off; - - include /usr/local/etc/nginx/mime.types; - default_type application/octet-stream; - - access_log /var/log/nginx/access.log; - error_log /var/log/nginx/error.log; - - # reset timed out connections freeing ram - reset_timedout_connection on; - # maximum time between packets the client can pause when sending nginx any data - client_body_timeout 10s; - # maximum time the client has to send the entire header to nginx - client_header_timeout 10s; - # timeout which a single keep-alive client connection will stay open - keepalive_timeout 69s; - # maximum time between packets nginx is allowed to pause when sending the client data - send_timeout 10s; - - # number of requests per connection, does not affect SPDY - keepalive_requests 100; - - # enable gzip compression - gzip on; - gzip_vary on; - gzip_comp_level 6; - gzip_min_length 1000; - gzip_proxied expired no-cache no-store private auth; - # text/html is always compressed by gzip module - gzip_types application/javascript application/json application/ld+json application/manifest+json application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard; - - # limit request body size - client_max_body_size 10m; - - # proxy cache - proxy_cache off; - proxy_cache_path /var/cache/nginx/services keys_zone=services:20m levels=1:2 inactive=600s max_size=100m; - proxy_cache_path /var/cache/nginx/markets keys_zone=markets:20m levels=1:2 inactive=600s max_size=100m; - proxy_cache_path /var/cache/nginx/mainnet keys_zone=mainnet:20m levels=1:2 inactive=600s max_size=100m; - proxy_cache_path /var/cache/nginx/testnet keys_zone=testnet:20m levels=1:2 inactive=600s max_size=100m; - proxy_cache_path /var/cache/nginx/liquid keys_zone=liquid:20m levels=1:2 inactive=600s max_size=100m; - proxy_cache_path /var/cache/nginx/signet keys_zone=signet:20m levels=1:2 inactive=600s max_size=100m; - types_hash_max_size 2048; - - map $http_accept_language $header_lang { - default en-US; - ~*^en-US en-US; - ~*^en en-US; - ~*^ar ar; - ~*^cs cs; - ~*^de de; - ~*^es es; - ~*^fa fa; - ~*^fr fr; - ~*^ko ko; - ~*^hi hi; - ~*^it it; - ~*^ka ka; - ~*^hu hu; - ~*^nl nl; - ~*^ja ja; - ~*^nb nb; - ~*^pl pl; - ~*^pt pt; - ~*^sl sl; - ~*^fi fi; - ~*^sv sv; - ~*^tr tr; - ~*^uk uk; - ~*^vi vi; - ~*^zh zh; - } - - map $cookie_lang $lang { - default $header_lang; - ~*^en-US en-US; - ~*^en en-US; - ~*^ar ar; - ~*^cs cs; - ~*^de de; - ~*^es es; - ~*^fa fa; - ~*^fr fr; - ~*^hi hi; - ~*^it it; - ~*^ka ka; - ~*^hu hu; - ~*^ja ja; - ~*^ko ko; - ~*^nb nb; - ~*^nl nl; - ~*^pl pl; - ~*^pt pt; - ~*^sl sl; - ~*^fi fi; - ~*^sv sv; - ~*^tr tr; - ~*^uk uk; - ~*^vi vi; - ~*^zh zh; - } - - server { - listen 80; - listen [::]:80; - server_name node206.mempool.space mempool.space mempool.ninja bisq.markets liquid.network; - - if ($host = mempool.space) - { - return 301 https://$host$request_uri; - } - if ($host = mempool.ninja) - { - return 301 https://$host$request_uri; - } - if ($host = bisq.markets) - { - return 301 https://$host$request_uri; - } - if ($host = liquid.network) - { - return 301 https://$host$request_uri; - } - if ($host = node206.mempool.space) - { - return 301 https://$host$request_uri; - } - return 503; - } - - upstream electrs-mainnet { - server [2401:b140:1::92:201]:3000 backup; - server [2401:b140:1::92:202]:3000 backup; - server [2401:b140:1::92:203]:3000 weight=1 fail_timeout=10s max_fails=10; - server [2401:b140:1::92:204]:3000 weight=1 fail_timeout=10s max_fails=10; - server [2401:b140:1::92:205]:3000 weight=1 fail_timeout=10s max_fails=10; - server [2401:b140:1::92:206]:3000 weight=9999 fail_timeout=10s max_fails=10; - } - server { - listen 127.0.0.1:4000; - access_log /dev/null; - location / { - proxy_pass http://electrs-mainnet; - } - } - - upstream electrs-liquid { - server [2401:b140:1::92:201]:3001 backup; - server [2401:b140:1::92:202]:3001 backup; - server [2401:b140:1::92:203]:3001 weight=1 fail_timeout=10s max_fails=10; - server [2401:b140:1::92:204]:3001 weight=1 fail_timeout=10s max_fails=10; - server [2401:b140:1::92:205]:3001 weight=1 fail_timeout=10s max_fails=10; - server [2401:b140:1::92:206]:3001 weight=9999 fail_timeout=10s max_fails=10; - } - server { - listen 127.0.0.1:4001; - access_log /dev/null; - location / { - proxy_pass http://electrs-liquid; - } - } - - upstream electrs-testnet { - server [2401:b140:1::92:201]:3002 backup; - server [2401:b140:1::92:202]:3002 backup; - server [2401:b140:1::92:203]:3002 weight=1 fail_timeout=10s max_fails=10; - server [2401:b140:1::92:204]:3002 weight=1 fail_timeout=10s max_fails=10; - server [2401:b140:1::92:205]:3002 weight=1 fail_timeout=10s max_fails=10; - server [2401:b140:1::92:206]:3002 weight=9999 fail_timeout=10s max_fails=10; - } - server { - listen 127.0.0.1:4002; - access_log /dev/null; - location / { - proxy_pass http://electrs-testnet; - } - } - - upstream electrs-signet { - server [2401:b140:1::92:201]:3003 backup; - server [2401:b140:1::92:202]:3003 backup; - server [2401:b140:1::92:203]:3003 weight=1 fail_timeout=10s max_fails=10; - server [2401:b140:1::92:204]:3003 weight=1 fail_timeout=10s max_fails=10; - server [2401:b140:1::92:205]:3003 weight=1 fail_timeout=10s max_fails=10; - server [2401:b140:1::92:206]:3003 weight=9999 fail_timeout=10s max_fails=10; - } - server { - listen 127.0.0.1:4003; - access_log /dev/null; - location / { - proxy_pass http://electrs-signet; - } - } - - upstream electrs-liquidtestnet { - server [2401:b140:1::92:201]:3004 backup; - server [2401:b140:1::92:202]:3004 backup; - server [2401:b140:1::92:203]:3004 weight=1 fail_timeout=10s max_fails=10; - server [2401:b140:1::92:204]:3004 weight=1 fail_timeout=10s max_fails=10; - server [2401:b140:1::92:205]:3004 weight=1 fail_timeout=10s max_fails=10; - server [2401:b140:1::92:206]:3004 weight=9999 fail_timeout=10s max_fails=10; - } - server { - listen 127.0.0.1:4004; - access_log /dev/null; - location / { - proxy_pass http://electrs-liquidtestnet; - } - } - - server { - listen 127.0.0.1:80; - listen 443 ssl http2; - listen [::]:443 ssl http2; - server_name mempool.space node206.mempool.space; - - include /usr/local/etc/nginx/ssl/mempool.conf; - include /usr/local/etc/nginx/nginx-mempool.conf; - access_log /var/log/nginx/mempool-access.log; - error_log /var/log/nginx/mempool-error.log; - } - - server { - listen 127.0.0.1:80; - listen 443 ssl http2; - listen [::]:443 ssl http2; - server_name liquid.network; - include /usr/local/etc/nginx/ssl/mempool.conf; - include /usr/local/etc/nginx/nginx-liquid.conf; - access_log /var/log/nginx/liquid-access.log; - error_log /var/log/nginx/liquid-error.log; - } - - server { - listen 127.0.0.1:80; - listen 443 ssl http2; - listen [::]:443 ssl http2; - server_name bisq.markets; - include /usr/local/etc/nginx/ssl/mempool.conf; - include /usr/local/etc/nginx/nginx-bisq.conf; - access_log /var/log/nginx/bisq-access.log; - error_log /var/log/nginx/bisq-error.log; - - } - - server { - listen 127.0.0.1:80; - listen 443 ssl http2; - listen [::]:443 ssl http2; - server_name mempool.ninja; - ssl_certificate /usr/local/etc/letsencrypt/live/mempool.ninja/fullchain.pem; - ssl_certificate_key /usr/local/etc/letsencrypt/live/mempool.ninja/privkey.pem; - include /usr/local/etc/letsencrypt/options-ssl-nginx.conf; - ssl_dhparam /usr/local/etc/letsencrypt/ssl-dhparams.pem; - - include /usr/local/etc/nginx/nginx-mempool.conf; - } - - server { - listen 127.0.0.1:80; - listen 443 ssl http2; - listen [::]:443 ssl http2; - server_name liquid.place; - ssl_certificate /usr/local/etc/letsencrypt/live/liquid.place/fullchain.pem; - ssl_certificate_key /usr/local/etc/letsencrypt/live/liquid.place/privkey.pem; - include /usr/local/etc/letsencrypt/options-ssl-nginx.conf; - ssl_dhparam /usr/local/etc/letsencrypt/ssl-dhparams.pem; - - include /usr/local/etc/nginx/nginx-liquid.conf; - } - - server { - listen 127.0.0.1:80; - listen 443 ssl http2; - listen [::]:443 ssl http2; - server_name bisq.ninja; - ssl_certificate /usr/local/etc/letsencrypt/live/bisq.ninja/fullchain.pem; - ssl_certificate_key /usr/local/etc/letsencrypt/live/bisq.ninja/privkey.pem; - include /usr/local/etc/letsencrypt/options-ssl-nginx.conf; - ssl_dhparam /usr/local/etc/letsencrypt/ssl-dhparams.pem; - - include /usr/local/etc/nginx/nginx-bisq.conf; - } -} diff --git a/production/nginx/http-basic.conf b/production/nginx/http-basic.conf new file mode 100644 index 000000000..ce257591a --- /dev/null +++ b/production/nginx/http-basic.conf @@ -0,0 +1,39 @@ +# basics +sendfile on; +tcp_nopush on; +tcp_nodelay on; +server_tokens off; +server_name_in_redirect off; +include /usr/local/etc/nginx/mime.types; +default_type application/octet-stream; + +# default logs +access_log /var/log/nginx/access.log; +error_log /var/log/nginx/error.log; + +# reset timed out connections freeing ram +reset_timedout_connection on; +# maximum time between packets the client can pause when sending nginx any data +client_body_timeout 10s; +# maximum time the client has to send the entire header to nginx +client_header_timeout 10s; +# timeout which a single keep-alive client connection will stay open +keepalive_timeout 69s; +# maximum time between packets nginx is allowed to pause when sending the client data +send_timeout 10s; + +# number of requests per connection, does not affect SPDY +keepalive_requests 100; + +# enable gzip compression +gzip on; +gzip_vary on; +gzip_comp_level 6; +gzip_min_length 1000; +gzip_proxied expired no-cache no-store private auth; +# text/html is always compressed by gzip module +gzip_types application/javascript application/json application/ld+json application/manifest+json application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard; + +# limit request body size +client_max_body_size 10m; + diff --git a/production/nginx/http-language.conf b/production/nginx/http-language.conf new file mode 100644 index 000000000..aacb030c4 --- /dev/null +++ b/production/nginx/http-language.conf @@ -0,0 +1,57 @@ +map $http_accept_language $header_lang { + default en-US; + ~*^en-US en-US; + ~*^en en-US; + ~*^ar ar; + ~*^cs cs; + ~*^de de; + ~*^es es; + ~*^fa fa; + ~*^fr fr; + ~*^ko ko; + ~*^hi hi; + ~*^it it; + ~*^ka ka; + ~*^hu hu; + ~*^nl nl; + ~*^ja ja; + ~*^nb nb; + ~*^pl pl; + ~*^pt pt; + ~*^sl sl; + ~*^fi fi; + ~*^sv sv; + ~*^tr tr; + ~*^uk uk; + ~*^vi vi; + ~*^zh zh; +} +map $cookie_lang $lang { + default $header_lang; + ~*^en-US en-US; + ~*^en en-US; + ~*^ar ar; + ~*^cs cs; + ~*^de de; + ~*^es es; + ~*^fa fa; + ~*^fr fr; + ~*^hi hi; + ~*^it it; + ~*^ka ka; + ~*^hu hu; + ~*^ja ja; + ~*^ko ko; + ~*^nb nb; + ~*^nl nl; + ~*^pl pl; + ~*^pt pt; + ~*^sl sl; + ~*^fi fi; + ~*^sv sv; + ~*^tr tr; + ~*^uk uk; + ~*^vi vi; + ~*^zh zh; +} + diff --git a/production/nginx/http-proxy-cache.conf b/production/nginx/http-proxy-cache.conf new file mode 100644 index 000000000..84efabffc --- /dev/null +++ b/production/nginx/http-proxy-cache.conf @@ -0,0 +1,4 @@ +# proxy cache +proxy_cache_path /var/cache/nginx/services keys_zone=services:20m levels=1:2 inactive=600s max_size=100m; +proxy_cache_path /var/cache/nginx/markets keys_zone=markets:20m levels=1:2 inactive=600s max_size=100m; +types_hash_max_size 2048; diff --git a/production/nginx/location-api-v1-contributors.conf b/production/nginx/location-api-v1-contributors.conf new file mode 100644 index 000000000..34fb5d06c --- /dev/null +++ b/production/nginx/location-api-v1-contributors.conf @@ -0,0 +1,8 @@ +location /api/v1/contributors { + proxy_pass https://mempool.space; + proxy_hide_header onion-location; + proxy_hide_header strict-transport-security; + proxy_hide_header content-security-policy; + proxy_hide_header x-frame-options; + # don't rate limit this API prefix +} diff --git a/production/nginx/location-api-v1-donations-images.conf b/production/nginx/location-api-v1-donations-images.conf new file mode 100644 index 000000000..bbd83738a --- /dev/null +++ b/production/nginx/location-api-v1-donations-images.conf @@ -0,0 +1,11 @@ +location /api/v1/donations/images { + proxy_pass https://mempool.space; + proxy_cache services; + proxy_cache_valid 200 1d; + expires 7d; + add_header Cache-Control "public, no-transform"; + proxy_hide_header onion-location; + proxy_hide_header strict-transport-security; + proxy_hide_header content-security-policy; + proxy_hide_header x-frame-options; +} diff --git a/production/nginx/location-api-v1-donations.conf b/production/nginx/location-api-v1-donations.conf new file mode 100644 index 000000000..8c748beea --- /dev/null +++ b/production/nginx/location-api-v1-donations.conf @@ -0,0 +1,8 @@ +location /api/v1/donations { + proxy_pass https://mempool.space; + proxy_hide_header onion-location; + proxy_hide_header strict-transport-security; + proxy_hide_header content-security-policy; + proxy_hide_header x-frame-options; + # don't rate limit this API prefix +} diff --git a/production/nginx/location-api.conf b/production/nginx/location-api.conf new file mode 100644 index 000000000..75cc1f5a2 --- /dev/null +++ b/production/nginx/location-api.conf @@ -0,0 +1,43 @@ +location /api/v1/ws { + proxy_pass $mempoolBackend; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "Upgrade"; +} +location /api/v1 { + try_files /dev/null @mempool-api-v1; +} +location /api/ { + rewrite ^/api/(.*) /$1 break; + try_files /dev/null @electrs-api; +} + +location @mempool-api-v1 { + proxy_pass $mempoolBackend; + proxy_http_version 1.1; + + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + + proxy_cache_bypass $http_upgrade; + proxy_redirect off; + proxy_set_header X-Forwarded-Proto $scheme; +} + +location @electrs-api { + proxy_pass $electrsBackend; + proxy_http_version 1.1; + + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + + proxy_cache_bypass $http_upgrade; + proxy_redirect off; + proxy_set_header X-Forwarded-Proto $scheme; +} diff --git a/production/nginx/location-liquid-api.conf b/production/nginx/location-liquid-api.conf new file mode 100644 index 000000000..7c2f927a6 --- /dev/null +++ b/production/nginx/location-liquid-api.conf @@ -0,0 +1,12 @@ +location /liquid/api/v1/ws { + proxy_pass http://mempool-liquid-mainnet/; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "Upgrade"; +} +location /liquid/api/v1 { + proxy_pass http://mempool-liquid-mainnet/api/v1; +} +location /liquid/api/ { + proxy_pass http://electrs-liquid-mainnet/; +} diff --git a/production/nginx/location-liquidtestnet-api.conf b/production/nginx/location-liquidtestnet-api.conf new file mode 100644 index 000000000..8b03c6fc4 --- /dev/null +++ b/production/nginx/location-liquidtestnet-api.conf @@ -0,0 +1,12 @@ +location /liquidtestnet/api/v1/ws { + proxy_pass http://mempool-liquid-testnet/; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "Upgrade"; +} +location /liquidtestnet/api/v1 { + proxy_pass http://mempool-liquid-testnet/api/v1; +} +location /liquidtestnet/api/ { + proxy_pass http://electrs-liquid-testnet/; +} diff --git a/production/nginx/location-redirects.conf b/production/nginx/location-redirects.conf new file mode 100644 index 000000000..c6f20e7ad --- /dev/null +++ b/production/nginx/location-redirects.conf @@ -0,0 +1,46 @@ +# redirect mempool.space/liquid to liquid.network +location /liquid { + rewrite /liquid/(.*) https://liquid.network/$1; + rewrite /liquid https://liquid.network/; + return 308; +} + +# redirect mempool.space/liquidtestnet to liquid.network/testnet +location /liquidtestnet { + rewrite /liquidtestnet/(.*) https://liquid.network/testnet/$1; + rewrite /liquidtestnet/ https://liquid.network/testnet/; + rewrite /liquidtestnet https://liquid.network/testnet; + return 308; +} + +# redirect mempool.space/bisq to bisq.markets +location /bisq { + rewrite /bisq/(.*) https://bisq.markets/$1; + rewrite /bisq https://bisq.markets/; + return 308; +} + +# redirect /api to /docs/api +location = /api { + return 308 https://$host/docs/api; +} +location = /api/ { + return 308 https://$host/docs/api; +} + +# redirect /testnet/api to /testnet/docs/api +location = /testnet/api { + return 308 https://$host/testnet/docs/api; +} +location = /testnet/api/ { + return 308 https://$host/testnet/docs/api; +} + +# redirect /signet/api to /signet/docs/api +location = /signet/api { + return 308 https://$host/signet/docs/api; +} +location = /signet/api/ { + return 308 https://$host/signet/docs/api; +} + diff --git a/production/nginx/location-signet-api.conf b/production/nginx/location-signet-api.conf new file mode 100644 index 000000000..245979229 --- /dev/null +++ b/production/nginx/location-signet-api.conf @@ -0,0 +1,12 @@ +location /signet/api/v1/ws { + proxy_pass http://mempool-bitcoin-signet/; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "Upgrade"; +} +location /signet/api/v1 { + proxy_pass http://mempool-bitcoin-signet/api/v1; +} +location /signet/api/ { + proxy_pass http://electrs-bitcoin-signet/; +} diff --git a/production/nginx/location-testnet-api.conf b/production/nginx/location-testnet-api.conf new file mode 100644 index 000000000..857b1b957 --- /dev/null +++ b/production/nginx/location-testnet-api.conf @@ -0,0 +1,12 @@ +location /testnet/api/v1/ws { + proxy_pass http://mempool-bitcoin-testnet/; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "Upgrade"; +} +location /testnet/api/v1 { + proxy_pass http://mempool-bitcoin-testnet/api/v1; +} +location /testnet/api/ { + proxy_pass http://electrs-bitcoin-testnet/; +} diff --git a/production/nginx/nginx.conf b/production/nginx/nginx.conf new file mode 100644 index 000000000..01ed722c3 --- /dev/null +++ b/production/nginx/nginx.conf @@ -0,0 +1,124 @@ +# FreeBSD configuration +user nobody; +pid /var/run/nginx.pid; + +worker_processes auto; +worker_rlimit_nofile 100000; + +events { + worker_connections 9000; + multi_accept on; +} + +http { + # DNS servers for on-demand recursive resolver + resolver 8.8.8.8; + + # HTTP basic configuration + include mempool/production/nginx/http-basic.conf; + include mempool/production/nginx/http-proxy-cache.conf; + include mempool/production/nginx/http-language.conf; + + # mempool backend configuration + include mempool/production/nginx/upstream-mempool.conf; + + # electrs backend configuration + include mempool/production/nginx/upstream-electrs.conf; + include mempool/production/nginx/server-electrs.conf; + + # MEMPOOL.NINJA + server { + # clearnet v4/v6 + listen 443 ssl http2; + listen [::]:443 ssl http2; + server_name mempool.ninja; + set $mempoolBackend "http://mempool-bitcoin-mainnet"; + set $electrsBackend "http://electrs-bitcoin-mainnet"; + + # tor v3 + listen 127.0.0.1:81; + set $onion "mempoolhqx4isw62xs7abwphsq7ldayuidyx2v2oethdhhj6mlo2r6ad"; + + # filesystem paths + root /mempool/public_html/mainnet/; + access_log /var/log/nginx/mempool-access.log; + error_log /var/log/nginx/mempool-error.log; + + # ssl configuration + ssl_certificate /usr/local/etc/letsencrypt/live/mempool.ninja/fullchain.pem; + ssl_certificate_key /usr/local/etc/letsencrypt/live/mempool.ninja/privkey.pem; + include /usr/local/etc/letsencrypt/options-ssl-nginx.conf; + ssl_dhparam /usr/local/etc/letsencrypt/ssl-dhparams.pem; + + # site configuration + include mempool/production/nginx/server-mempool.conf; + } + # BISQ.NINJA + server { + # clearnet v4/v6 + listen 443 ssl http2; + listen [::]:443 ssl http2; + server_name bisq.ninja; + set $mempoolBackend "http://mempool-bisq-mainnet"; + set $electrsBackend "http://electrs-bitcoin-mainnet"; + + # tor v3 + listen 127.0.0.1:82; + set $onion "mempoolhqx4isw62xs7abwphsq7ldayuidyx2v2oethdhhj6mlo2r6ad"; + + # filesystem paths + root /mempool/public_html/bisq/; + access_log /var/log/nginx/bisq-access.log; + error_log /var/log/nginx/bisq-error.log; + + # ssl configuration + ssl_certificate /usr/local/etc/letsencrypt/live/bisq.ninja/fullchain.pem; + ssl_certificate_key /usr/local/etc/letsencrypt/live/bisq.ninja/privkey.pem; + include /usr/local/etc/letsencrypt/options-ssl-nginx.conf; + ssl_dhparam /usr/local/etc/letsencrypt/ssl-dhparams.pem; + + # site configuration + include mempool/production/nginx/server-bisq.conf; + } + # LIQUID.PLACE + server { + # clearnet v4/v6 + listen 443 ssl http2; + listen [::]:443 ssl http2; + server_name liquid.place; + set $mempoolBackend "http://mempool-liquid-mainnet"; + set $electrsBackend "http://electrs-liquid-mainnet"; + + # tor v3 + listen 127.0.0.1:83; + set $onion "mempoolhqx4isw62xs7abwphsq7ldayuidyx2v2oethdhhj6mlo2r6ad"; + + # filesystem paths + root /mempool/public_html/liquid/; + access_log /var/log/nginx/liquid-access.log; + error_log /var/log/nginx/liquid-error.log; + + # ssl configuration + ssl_certificate /usr/local/etc/letsencrypt/live/liquid.place/fullchain.pem; + ssl_certificate_key /usr/local/etc/letsencrypt/live/liquid.place/privkey.pem; + include /usr/local/etc/letsencrypt/options-ssl-nginx.conf; + ssl_dhparam /usr/local/etc/letsencrypt/ssl-dhparams.pem; + + # site configuration + include mempool/production/nginx/server-liquid.conf; + } + # HTTP to HTTPS redirect + server { + # clearnet v4/v6 + listen 80; + listen [::]:80; + server_name _; + + # only redirect for our hosted domains + if ($host ~ "^(mempool.ninja|bisq.ninja|liquid.place)$") + { + return 301 https://$host$request_uri; + } + return 503; + } +} diff --git a/production/nginx/server-bisq.conf b/production/nginx/server-bisq.conf new file mode 100644 index 000000000..2a6886f4b --- /dev/null +++ b/production/nginx/server-bisq.conf @@ -0,0 +1,85 @@ +include mempool/production/nginx/server-common.conf; +include mempool/production/nginx/location-api-v1-contributors.conf; +include mempool/production/nginx/location-api-v1-donations.conf; +include mempool/production/nginx/location-api-v1-donations-images.conf; + +proxy_cache markets; +proxy_cache_valid 200 30s; + +# route electrs APIs to electrs +location /api/tx/ { + proxy_pass http://electrs-bitcoin-mainnet/tx/; +} + +# rewrite APIs to match what backend expects +location /api/currencies { + rewrite ^/api/(.*) /api/v1/bisq/markets/$1 break; + try_files $uri $uri/ @mempool-bisq; +} +location /api/depth { + rewrite ^/api/(.*) /api/v1/bisq/markets/$1 break; + try_files $uri $uri/ @mempool-bisq; +} +location /api/hloc { + rewrite ^/api/(.*) /api/v1/bisq/markets/$1 break; + try_files $uri $uri/ @mempool-bisq; +} +location /api/offers { + rewrite ^/api/(.*) /api/v1/bisq/markets/$1 break; + try_files $uri $uri/ @mempool-bisq; +} +location /api/ticker { + rewrite ^/api/(.*) /api/v1/bisq/markets/$1 break; + try_files $uri $uri/ @mempool-bisq; +} +location /api/trades { + rewrite ^/api/(.*) /api/v1/bisq/markets/$1 break; + try_files $uri $uri/ @mempool-bisq; +} +location /api/volumes { + rewrite ^/api/(.*) /api/v1/bisq/markets/$1 break; + try_files $uri $uri/ @mempool-bisq; +} +location /api/markets { + rewrite ^/api/(.*) /api/v1/bisq/markets/$1 break; + try_files $uri $uri/ @mempool-bisq; +} +location /api/v1 { + rewrite ^/api/v1/(.*) /api/v1/bisq/$1 break; + try_files $uri $uri/ @mempool-bisq; +} +location /api { + rewrite ^/api/(.*) /api/v1/bisq/$1 break; + try_files $uri $uri/ @mempool-bisq; +} +location /bisq/api/v1 { + rewrite ^/bisq/api/v1/(.*) /api/v1/bisq/$1 break; + try_files $uri $uri/ @mempool-bisq; +} +location /bisq/api { + rewrite ^/bisq/api/(.*) /api/v1/bisq/$1 break; + try_files $uri $uri/ @mempool-bisq; +} + +# special handling for websocket +location /api/v1/ws { + proxy_pass http://mempool-bitcoin-bisq/; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "Upgrade"; +} + +location @mempool-bisq { + proxy_pass http://mempool-bitcoin-bisq; + proxy_http_version 1.1; + + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + + proxy_cache_bypass $http_upgrade; + proxy_redirect off; + proxy_set_header X-Forwarded-Proto $scheme; +} diff --git a/production/nginx/server-common.conf b/production/nginx/server-common.conf new file mode 100644 index 000000000..c380831cc --- /dev/null +++ b/production/nginx/server-common.conf @@ -0,0 +1,66 @@ +# angular builds to index.html +index index.html; + +# tor onion redirect +add_header Onion-Location http://$onion.onion$request_uri; + +# HSTS preload enable +add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"; + +# generate frame configuration from origin header +set $frameOptions "DENY"; +set $contentSecurityPolicy "frame-ancestors 'none'"; + +# used for iframes on https://mempool.space/network +if ($http_referer ~ ^https://mempool.space/) +{ + set $frameOptions "ALLOW-FROM https://mempool.space"; + set $contentSecurityPolicy "frame-ancestors https://mempool.space"; +} +# used for iframes on https://mempool.ninja/network +if ($http_referer ~ ^https://mempool.ninja/) +{ + set $frameOptions "ALLOW-FROM https://mempool.ninja"; + set $contentSecurityPolicy "frame-ancestors https://mempool.ninja"; +} +# used for iframes on https://wiz.biz/bitcoin/nodes +if ($http_referer ~ ^https://wiz.biz/) +{ + set $frameOptions "ALLOW-FROM https://wiz.biz"; + set $contentSecurityPolicy "frame-ancestors https://wiz.biz"; +} + +# restrict usage of frames +add_header X-Frame-Options $frameOptions; +add_header Content-Security-Policy $contentSecurityPolicy; + +# enable browser and proxy caching +add_header Cache-Control "public, no-transform"; + +# vary cache if user changes language preference +add_header Vary Accept-Language; +add_header Vary Cookie; + +# fallback for all URLs i.e. /address/foo /tx/foo /block/000 +location / { + try_files /$lang/$uri /$lang/$uri/ $uri $uri/ /en-US/$uri @index-redirect; + expires 10m; +} +location /resources { + try_files /$lang/$uri /$lang/$uri/ $uri $uri/ /en-US/$uri @index-redirect; + expires 1h; +} +location @index-redirect { + rewrite (.*) /$lang/index.html; +} + +# location block using regex are matched in order + +# used to rewrite resources from // to /en-US/ + location ~ ^/(ar|bg|bs|ca|cs|da|de|et|el|es|eo|eu|fa|fr|gl|ko|hr|id|it|he|ka|lv|lt|hu|mk|ms|nl|ja|ka|no|nb|nn|pl|pt|pt-BR|ro|ru|sk|sl|sr|sh|fi|sv|th|tr|uk|vi|zh)/resources/ { + rewrite ^/[a-zA-Z-]*/resources/(.*) /en-US/resources/$1; +} +# used for cookie override + location ~ ^/(ar|bg|bs|ca|cs|da|de|et|el|es|eo|eu|fa|fr|gl|ko|hr|id|it|he|ka|lv|lt|hu|mk|ms|nl|ja|ka|no|nb|nn|pl|pt|pt-BR|ro|ru|sk|sl|sr|sh|fi|sv|th|tr|uk|vi|zh)/ { + try_files $uri $uri/ /$1/index.html =404; +} diff --git a/production/nginx/server-electrs.conf b/production/nginx/server-electrs.conf new file mode 100644 index 000000000..b817b8163 --- /dev/null +++ b/production/nginx/server-electrs.conf @@ -0,0 +1,35 @@ +server { + listen 127.0.0.1:4000; + access_log /dev/null; + location / { + proxy_pass http://electrs-bitcoin-mainnet; + } +} +server { + listen 127.0.0.1:4001; + access_log /dev/null; + location / { + proxy_pass http://electrs-liquid-mainnet; + } +} +server { + listen 127.0.0.1:4002; + access_log /dev/null; + location / { + proxy_pass http://electrs-bitcoin-testnet; + } +} +server { + listen 127.0.0.1:4003; + access_log /dev/null; + location / { + proxy_pass http://electrs-bitcoin-signet; + } +} +server { + listen 127.0.0.1:4004; + access_log /dev/null; + location / { + proxy_pass http://electrs-liquid-testnet; + } +} diff --git a/production/nginx/server-liquid.conf b/production/nginx/server-liquid.conf new file mode 100644 index 000000000..a7161af29 --- /dev/null +++ b/production/nginx/server-liquid.conf @@ -0,0 +1,7 @@ +include mempool/production/nginx/server-common.conf; +include mempool/production/nginx/location-api-v1-contributors.conf; +include mempool/production/nginx/location-api-v1-donations-images.conf; +include mempool/production/nginx/location-api-v1-donations.conf; +include mempool/production/nginx/location-api.conf; +include mempool/production/nginx/location-liquid-api.conf; +include mempool/production/nginx/location-liquidtestnet-api.conf; diff --git a/production/nginx/server-mempool.conf b/production/nginx/server-mempool.conf new file mode 100644 index 000000000..9bbbb1b8c --- /dev/null +++ b/production/nginx/server-mempool.conf @@ -0,0 +1,8 @@ +include mempool/production/nginx/server-common.conf; +include mempool/production/nginx/location-redirects.conf; +include mempool/production/nginx/location-api-v1-contributors.conf; +include mempool/production/nginx/location-api-v1-donations.conf; +include mempool/production/nginx/location-api-v1-donations-images.conf; +include mempool/production/nginx/location-api.conf; +include mempool/production/nginx/location-testnet-api.conf; +include mempool/production/nginx/location-signet-api.conf; diff --git a/production/nginx/upstream-electrs.conf b/production/nginx/upstream-electrs.conf new file mode 100644 index 000000000..476b73054 --- /dev/null +++ b/production/nginx/upstream-electrs.conf @@ -0,0 +1,15 @@ +upstream electrs-bitcoin-mainnet { + server [::1]:3000 fail_timeout=10s max_fails=10 weight=99999; +} +upstream electrs-liquid-mainnet { + server [::1]:3001 fail_timeout=10s max_fails=10 weight=99999; +} +upstream electrs-bitcoin-testnet { + server [::1]:3002 fail_timeout=10s max_fails=10 weight=99999; +} +upstream electrs-bitcoin-signet { + server [::1]:3003 fail_timeout=10s max_fails=10 weight=99999; +} +upstream electrs-liquid-testnet { + server [::1]:3004 fail_timeout=10s max_fails=10 weight=99999; +} diff --git a/production/nginx/upstream-mempool.conf b/production/nginx/upstream-mempool.conf new file mode 100644 index 000000000..8e0f12ab6 --- /dev/null +++ b/production/nginx/upstream-mempool.conf @@ -0,0 +1,18 @@ +upstream mempool-bitcoin-mainnet { + server 127.0.0.1:8999 fail_timeout=10s max_fails=10 weight=99999; +} +upstream mempool-liquid-mainnet { + server 127.0.0.1:8998 fail_timeout=10s max_fails=10 weight=99999; +} +upstream mempool-bitcoin-testnet { + server 127.0.0.1:8997 fail_timeout=10s max_fails=10 weight=99999; +} +upstream mempool-bitcoin-bisq { + server 127.0.0.1:8996 fail_timeout=10s max_fails=10 weight=99999; +} +upstream mempool-bitcoin-signet { + server 127.0.0.1:8995 fail_timeout=10s max_fails=10 weight=99999; +} +upstream mempool-liquid-testnet { + server 127.0.0.1:8994 fail_timeout=10s max_fails=10 weight=99999; +}