Merge branch 'master' into simon/bitcoind

* master: (22 commits)
  Update translated strings from Transifex
  Rewrite server.ts again to properly add i18n support into SSR mode
  Rewrite server.ts to fix i18n and implement proper HTTP 404 responses
  Update mempool-frontend-config.sample.json for NGINX_HOSTNAME vars
  Fixes after merging master into AU branch, add nginx.conf for SSR
  Adjust build scripts for new AU frontend build output in /browser/
  Always set a value for the locale selector, for /liquid/ etc.
  Correcting merge conflict.
  Route all Angular Universal requests to nginx, remove simon's hacks
  Hack to fix the urls.
  Fix for non matching request URLs.
  Adding ServerTransferStateModule for AU with custom http interceptor for cache transfer.
  removing /api again
  New frontend config for webserver url to fix static asset httpGet. Removed "absolute" from config names.
  Remove ssr prepended url from asset service.
  Don't append /api to electrs backend path for SSR
  Update absolute url config variables.
  Frontend config support for AU. New absolute server url settings. refs #104
  Transaction, address and block page now works.
  Update `og:title` meta tag when changing page title
  ...
This commit is contained in:
softsimon 2020-12-24 10:38:14 +07:00
commit 8d0db12abe
42 changed files with 35785 additions and 31520 deletions

2
frontend/.gitignore vendored
View File

@ -4,6 +4,8 @@
/dist /dist
/tmp /tmp
/out-tsc /out-tsc
server.run.js
# Only exists if Bazel was run # Only exists if Bazel was run
/bazel-out /bazel-out

View File

@ -101,7 +101,7 @@
"build": { "build": {
"builder": "@angular-devkit/build-angular:browser", "builder": "@angular-devkit/build-angular:browser",
"options": { "options": {
"outputPath": "dist/mempool", "outputPath": "dist/mempool/browser",
"index": "src/index.html", "index": "src/index.html",
"main": "src/main.ts", "main": "src/main.ts",
"polyfills": "src/polyfills.ts", "polyfills": "src/polyfills.ts",
@ -113,7 +113,8 @@
"src/robots.txt" "src/robots.txt"
], ],
"styles": [ "styles": [
"src/styles.scss" "src/styles.scss",
"node_modules/@fortawesome/fontawesome-svg-core/styles.css"
], ],
"scripts": [ "scripts": [
"generated-config.js" "generated-config.js"
@ -189,7 +190,8 @@
"tsConfig": [ "tsConfig": [
"tsconfig.app.json", "tsconfig.app.json",
"tsconfig.spec.json", "tsconfig.spec.json",
"e2e/tsconfig.json" "e2e/tsconfig.json",
"tsconfig.server.json"
], ],
"exclude": [ "exclude": [
"**/node_modules/**" "**/node_modules/**"
@ -207,6 +209,54 @@
"devServerTarget": "mempool:serve:production" "devServerTarget": "mempool:serve:production"
} }
} }
},
"server": {
"builder": "@angular-devkit/build-angular:server",
"options": {
"outputPath": "dist/mempool/server",
"main": "server.ts",
"tsConfig": "tsconfig.server.json"
},
"configurations": {
"production": {
"outputHashing": "media",
"fileReplacements": [
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.prod.ts"
}
],
"sourceMap": false,
"localize": true,
"optimization": true
}
}
},
"serve-ssr": {
"builder": "@nguniversal/builders:ssr-dev-server",
"options": {
"browserTarget": "mempool:build",
"serverTarget": "mempool:server"
},
"configurations": {
"production": {
"browserTarget": "mempool:build:production",
"serverTarget": "mempool:server:production"
}
}
},
"prerender": {
"builder": "@nguniversal/builders:prerender",
"options": {
"browserTarget": "mempool:build:production",
"serverTarget": "mempool:server:production",
"routes": [
"/"
]
},
"configurations": {
"production": {}
}
} }
} }
}}, }},

View File

@ -25,7 +25,7 @@ for (setting in configContent) {
const code = `(function (window) { const code = `(function (window) {
window.__env = window.__env || {};${settings.reduce((str, obj) => `${str} window.__env = window.__env || {};${settings.reduce((str, obj) => `${str}
window.__env.${obj.key} = ${ typeof obj.value === 'string' ? `'${obj.value}'` : obj.value };`, '')} window.__env.${obj.key} = ${ typeof obj.value === 'string' ? `'${obj.value}'` : obj.value };`, '')}
}(this));`; }(global || this));`;
try { try {
fs.writeFileSync(GENERATED_CONFIG_FILE_NAME, code, 'utf8'); fs.writeFileSync(GENERATED_CONFIG_FILE_NAME, code, 'utf8');

View File

@ -3,7 +3,10 @@
"LIQUID_ENABLED": false, "LIQUID_ENABLED": false,
"BISQ_ENABLED": false, "BISQ_ENABLED": false,
"BISQ_SEPARATE_BACKEND": false, "BISQ_SEPARATE_BACKEND": false,
"ELCTRS_ITEMS_PER_PAGE": 25, "ELECTRS_ITEMS_PER_PAGE": 25,
"KEEP_BLOCKS_AMOUNT": 8, "KEEP_BLOCKS_AMOUNT": 8,
"SPONSORS_ENABLED": false "SPONSORS_ENABLED": false,
"NGINX_PROTOCOL": "http",
"NGINX_HOSTNAME": "127.0.0.1",
"NGINX_PORT": "80"
} }

File diff suppressed because it is too large Load Diff

View File

@ -32,7 +32,11 @@
"generate-config": "node generate-config.js", "generate-config": "node generate-config.js",
"test": "ng test", "test": "ng test",
"lint": "ng lint", "lint": "ng lint",
"e2e": "ng e2e" "e2e": "ng e2e",
"dev:ssr": "npm run generate-config && ng run mempool:serve-ssr",
"serve:ssr": "node server.run.js",
"build:ssr": "npm run build && ng run mempool:server:production && ./node_modules/typescript/bin/tsc server.run.ts",
"prerender": "ng run mempool:prerender"
}, },
"dependencies": { "dependencies": {
"@angular/animations": "~10.2.3", "@angular/animations": "~10.2.3",
@ -43,6 +47,7 @@
"@angular/localize": "^10.2.3", "@angular/localize": "^10.2.3",
"@angular/platform-browser": "~10.2.3", "@angular/platform-browser": "~10.2.3",
"@angular/platform-browser-dynamic": "~10.2.3", "@angular/platform-browser-dynamic": "~10.2.3",
"@angular/platform-server": "~10.2.2",
"@angular/router": "~10.2.3", "@angular/router": "~10.2.3",
"@fortawesome/angular-fontawesome": "^0.7.0", "@fortawesome/angular-fontawesome": "^0.7.0",
"@fortawesome/fontawesome-common-types": "^0.2.30", "@fortawesome/fontawesome-common-types": "^0.2.30",
@ -50,13 +55,16 @@
"@fortawesome/free-solid-svg-icons": "^5.14.0", "@fortawesome/free-solid-svg-icons": "^5.14.0",
"@mempool/chartist": "^0.11.4", "@mempool/chartist": "^0.11.4",
"@ng-bootstrap/ng-bootstrap": "^7.0.0", "@ng-bootstrap/ng-bootstrap": "^7.0.0",
"@nguniversal/express-engine": "10.1.0",
"@types/qrcode": "^1.3.4", "@types/qrcode": "^1.3.4",
"bootstrap": "4.5.0", "bootstrap": "4.5.0",
"clipboard": "^2.0.4", "clipboard": "^2.0.4",
"domino": "^2.1.6",
"express": "^4.15.2",
"ngx-bootrap-multiselect": "^2.0.0", "ngx-bootrap-multiselect": "^2.0.0",
"ngx-infinite-scroll": "^9.0.0", "ngx-infinite-scroll": "^9.0.0",
"qrcode": "^1.4.4", "qrcode": "^1.4.4",
"rxjs": "^6.6.0", "rxjs": "^6.6.3",
"tlite": "^0.1.9", "tlite": "^0.1.9",
"tslib": "^2.0.0", "tslib": "^2.0.0",
"zone.js": "~0.10.3" "zone.js": "~0.10.3"
@ -64,12 +72,15 @@
"devDependencies": { "devDependencies": {
"@angular-devkit/build-angular": "^0.1002.0", "@angular-devkit/build-angular": "^0.1002.0",
"@angular/cli": "~10.2.0", "@angular/cli": "~10.2.0",
"@angular/compiler-cli": "~10.2.0", "@angular/compiler-cli": "~10.2.2",
"@angular/language-service": "~10.2.0", "@angular/language-service": "~10.2.2",
"@nguniversal/builders": "^10.1.0",
"@types/express": "^4.17.0",
"@types/jasmine": "~3.3.8", "@types/jasmine": "~3.3.8",
"@types/jasminewd2": "~2.0.3", "@types/jasminewd2": "~2.0.3",
"@types/node": "^12.11.1", "@types/node": "^12.11.1",
"codelyzer": "^6.0.0", "codelyzer": "^6.0.0",
"http-proxy-middleware": "^1.0.5",
"jasmine-core": "~3.5.0", "jasmine-core": "~3.5.0",
"jasmine-spec-reporter": "~5.0.0", "jasmine-spec-reporter": "~5.0.0",
"karma": "~5.0.0", "karma": "~5.0.0",

96
frontend/server.run.ts Normal file
View File

@ -0,0 +1,96 @@
import 'zone.js/dist/zone-node';
import './generated-config';
import * as domino from 'domino';
import * as express from 'express';
import * as fs from 'fs';
import * as path from 'path';
const {readFileSync, existsSync} = require('fs');
const {createProxyMiddleware} = require('http-proxy-middleware');
const template = fs.readFileSync(path.join(process.cwd(), 'dist/mempool/browser/en-US/', 'index.html')).toString();
const win = domino.createWindow(template);
// @ts-ignore
win.__env = global.__env;
// @ts-ignore
win.matchMedia = () => {
return {
matches: true
};
};
// @ts-ignore
win.setTimeout = (fn) => { fn(); };
win.document.body.scrollTo = (() => {});
// @ts-ignore
global['window'] = win;
global['document'] = win.document;
// @ts-ignore
global['history'] = { state: { } };
global['localStorage'] = {
getItem: () => '',
setItem: () => {},
removeItem: () => {},
clear: () => {},
length: 0,
key: () => '',
};
/**
* Return the list of supported and actually active locales
*/
function getActiveLocales() {
const angularConfig = JSON.parse(readFileSync('angular.json', 'utf8'));
const supportedLocales = [
angularConfig.projects.mempool.i18n.sourceLocale,
...Object.keys(angularConfig.projects.mempool.i18n.locales),
];
return supportedLocales.filter(locale => existsSync(`./dist/mempool/server/${locale}`));
}
function app() {
const server = express();
// proxy API to nginx
server.get('/api/**', createProxyMiddleware({
// @ts-ignore
target: win.__env.NGINX_PROTOCOL + '://' + win.__env.NGINX_HOSTNAME + ':' + win.__env.NGINX_PORT,
changeOrigin: true,
}));
// map / and /en to en-US
const defaultLocale = 'en-US';
console.log(`serving default locale: ${defaultLocale}`);
const appServerModule = require(`./dist/mempool/server/${defaultLocale}/main.js`);
server.use('/', appServerModule.app(defaultLocale));
server.use('/en', appServerModule.app(defaultLocale));
// map each locale to its localized main.js
getActiveLocales().forEach(locale => {
console.log('serving locale:', locale);
const appServerModule = require(`./dist/mempool/server/${locale}/main.js`);
// map everything to itself
server.use(`/${locale}`, appServerModule.app(locale));
});
return server;
}
function run() {
const port = process.env.PORT || 4000;
// Start up the Node server
app().listen(port, () => {
console.log(`Node Express server listening on port ${port}`);
});
}
run();

146
frontend/server.ts Normal file
View File

@ -0,0 +1,146 @@
import 'zone.js/dist/zone-node';
import './generated-config';
import { ngExpressEngine } from '@nguniversal/express-engine';
import * as express from 'express';
import * as fs from 'fs';
import * as path from 'path';
import * as domino from 'domino';
import { createProxyMiddleware } from 'http-proxy-middleware';
import { join } from 'path';
import { AppServerModule } from './src/main.server';
import { APP_BASE_HREF } from '@angular/common';
import { existsSync } from 'fs';
const template = fs.readFileSync(path.join(process.cwd(), 'dist/mempool/browser/en-US/', 'index.html')).toString();
const win = domino.createWindow(template);
// @ts-ignore
win.__env = global.__env;
// @ts-ignore
win.matchMedia = () => {
return {
matches: true
};
};
// @ts-ignore
win.setTimeout = (fn) => { fn(); };
win.document.body.scrollTo = (() => {});
// @ts-ignore
global['window'] = win;
global['document'] = win.document;
// @ts-ignore
global['history'] = { state: { } };
global['localStorage'] = {
getItem: () => '',
setItem: () => {},
removeItem: () => {},
clear: () => {},
length: 0,
key: () => '',
};
// The Express app is exported so that it can be used by serverless Functions.
export function app(locale: string): express.Express {
const server = express();
const distFolder = join(process.cwd(), `dist/mempool/browser/${locale}`);
const indexHtml = existsSync(join(distFolder, 'index.original.html')) ? 'index.original.html' : 'index';
// Our Universal express-engine (found @ https://github.com/angular/universal/tree/master/modules/express-engine)
server.engine('html', ngExpressEngine({
bootstrap: AppServerModule,
}));
server.set('view engine', 'html');
server.set('views', distFolder);
// only handle URLs that actually exist
//server.get(locale, getLocalizedSSR(indexHtml));
server.get('/', getLocalizedSSR(indexHtml));
server.get('/tx/*', getLocalizedSSR(indexHtml));
server.get('/block/*', getLocalizedSSR(indexHtml));
server.get('/mempool-block/*', getLocalizedSSR(indexHtml));
server.get('/address/*', getLocalizedSSR(indexHtml));
server.get('/blocks', getLocalizedSSR(indexHtml));
server.get('/graphs', getLocalizedSSR(indexHtml));
server.get('/liquid', getLocalizedSSR(indexHtml));
server.get('/liquid/tx/*', getLocalizedSSR(indexHtml));
server.get('/liquid/block/*', getLocalizedSSR(indexHtml));
server.get('/liquid/mempool-block/*', getLocalizedSSR(indexHtml));
server.get('/liquid/address/*', getLocalizedSSR(indexHtml));
server.get('/liquid/asset/*', getLocalizedSSR(indexHtml));
server.get('/liquid/blocks', getLocalizedSSR(indexHtml));
server.get('/liquid/graphs', getLocalizedSSR(indexHtml));
server.get('/liquid/assets', getLocalizedSSR(indexHtml));
server.get('/liquid/api', getLocalizedSSR(indexHtml));
server.get('/liquid/tv', getLocalizedSSR(indexHtml));
server.get('/liquid/status', getLocalizedSSR(indexHtml));
server.get('/liquid/about', getLocalizedSSR(indexHtml));
server.get('/testnet', getLocalizedSSR(indexHtml));
server.get('/testnet/tx/*', getLocalizedSSR(indexHtml));
server.get('/testnet/block/*', getLocalizedSSR(indexHtml));
server.get('/testnet/mempool-block/*', getLocalizedSSR(indexHtml));
server.get('/testnet/address/*', getLocalizedSSR(indexHtml));
server.get('/testnet/blocks', getLocalizedSSR(indexHtml));
server.get('/testnet/graphs', getLocalizedSSR(indexHtml));
server.get('/testnet/api', getLocalizedSSR(indexHtml));
server.get('/testnet/tv', getLocalizedSSR(indexHtml));
server.get('/testnet/status', getLocalizedSSR(indexHtml));
server.get('/testnet/about', getLocalizedSSR(indexHtml));
server.get('/bisq', getLocalizedSSR(indexHtml));
server.get('/bisq/tx/*', getLocalizedSSR(indexHtml));
server.get('/bisq/blocks', getLocalizedSSR(indexHtml));
server.get('/bisq/block/*', getLocalizedSSR(indexHtml));
server.get('/bisq/address/*', getLocalizedSSR(indexHtml));
server.get('/bisq/stats', getLocalizedSSR(indexHtml));
server.get('/bisq/about', getLocalizedSSR(indexHtml));
server.get('/bisq/api', getLocalizedSSR(indexHtml));
server.get('/about', getLocalizedSSR(indexHtml));
server.get('/api', getLocalizedSSR(indexHtml));
server.get('/tv', getLocalizedSSR(indexHtml));
server.get('/status', getLocalizedSSR(indexHtml));
server.get('/terms-of-service', getLocalizedSSR(indexHtml));
// fallback to static file handler so we send HTTP 404 to nginx
server.get('/**', express.static(distFolder, { maxAge: '1y' }));
return server;
}
function getLocalizedSSR(indexHtml) {
return (req, res) => {
res.render(indexHtml, {
req,
providers: [
{ provide: APP_BASE_HREF, useValue: req.baseUrl }
]
});
}
}
// only used for development mode
function run(): void {
const port = process.env.PORT || 4000;
// Start up the Node server
const server = app('en-US');
server.listen(port, () => {
console.log(`Node Express server listening on port ${port}`);
});
}
// Webpack will replace 'require' with '__webpack_require__'
// '__non_webpack_require__' is a proxy to Node 'require'
// The below code is to ensure that the server is run only when not requiring the bundle.
declare const __non_webpack_require__: NodeRequire;
const mainModule = __non_webpack_require__.main;
const moduleFilename = mainModule && mainModule.filename || '';
if (moduleFilename === __filename || moduleFilename.includes('iisnode')) {
run();
}
export * from './src/main.server';

View File

@ -222,7 +222,9 @@ const routes: Routes = [
]; ];
@NgModule({ @NgModule({
imports: [RouterModule.forRoot(routes)], imports: [RouterModule.forRoot(routes, {
initialNavigation: 'enabled'
})],
exports: [RouterModule] exports: [RouterModule]
}) })
export class AppRoutingModule { } export class AppRoutingModule { }

View File

@ -34,31 +34,6 @@ export const mempoolFeeColors = [
export const feeLevels = [1, 2, 3, 4, 5, 6, 8, 10, 12, 15, 20, 30, 40, 50, 60, 70, 80, 90, 100, 125, 150, 175, 200, export const feeLevels = [1, 2, 3, 4, 5, 6, 8, 10, 12, 15, 20, 30, 40, 50, 60, 70, 80, 90, 100, 125, 150, 175, 200,
250, 300, 350, 400, 500, 600, 700, 800, 900, 1000, 1200, 1400, 1600, 1800, 2000]; 250, 300, 350, 400, 500, 600, 700, 800, 900, 1000, 1200, 1400, 1600, 1800, 2000];
interface Env {
TESTNET_ENABLED: boolean;
LIQUID_ENABLED: boolean;
BISQ_ENABLED: boolean;
BISQ_SEPARATE_BACKEND: boolean;
SPONSORS_ENABLED: boolean;
ELCTRS_ITEMS_PER_PAGE: number;
KEEP_BLOCKS_AMOUNT: number;
}
const defaultEnv: Env = {
'TESTNET_ENABLED': false,
'LIQUID_ENABLED': false,
'BISQ_ENABLED': false,
'BISQ_SEPARATE_BACKEND': false,
'SPONSORS_ENABLED': false,
'ELCTRS_ITEMS_PER_PAGE': 25,
'KEEP_BLOCKS_AMOUNT': 8
};
const browserWindow = window || {};
// @ts-ignore
const browserWindowEnv = browserWindow.__env || {};
export const env: Env = Object.assign(defaultEnv, browserWindowEnv);
export interface Language { export interface Language {
code: string; code: string;
name: string; name: string;

View File

@ -1,6 +1,6 @@
import { BrowserModule } from '@angular/platform-browser'; import { BrowserModule, BrowserTransferStateModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core'; import { NgModule } from '@angular/core';
import { HttpClientModule } from '@angular/common/http'; import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { InfiniteScrollModule } from 'ngx-infinite-scroll'; import { InfiniteScrollModule } from 'ngx-infinite-scroll';
@ -48,6 +48,7 @@ import { faAngleDown, faAngleUp, faBolt, faChartArea, faCogs, faCubes, faDatabas
import { ApiDocsComponent } from './components/api-docs/api-docs.component'; import { ApiDocsComponent } from './components/api-docs/api-docs.component';
import { TermsOfServiceComponent } from './components/terms-of-service/terms-of-service.component'; import { TermsOfServiceComponent } from './components/terms-of-service/terms-of-service.component';
import { StorageService } from './services/storage.service'; import { StorageService } from './services/storage.service';
import { HttpCacheInterceptor } from './services/http-cache.interceptor';
@NgModule({ @NgModule({
declarations: [ declarations: [
@ -84,7 +85,8 @@ import { StorageService } from './services/storage.service';
TermsOfServiceComponent, TermsOfServiceComponent,
], ],
imports: [ imports: [
BrowserModule, BrowserModule.withServerTransition({ appId: 'serverApp' }),
BrowserTransferStateModule,
AppRoutingModule, AppRoutingModule,
HttpClientModule, HttpClientModule,
BrowserAnimationsModule, BrowserAnimationsModule,
@ -100,6 +102,7 @@ import { StorageService } from './services/storage.service';
AudioService, AudioService,
SeoService, SeoService,
StorageService, StorageService,
{ provide: HTTP_INTERCEPTORS, useClass: HttpCacheInterceptor, multi: true }
], ],
bootstrap: [AppComponent] bootstrap: [AppComponent]
}) })

View File

@ -0,0 +1,20 @@
import { HTTP_INTERCEPTORS } from '@angular/common/http';
import { NgModule } from '@angular/core';
import { ServerModule, ServerTransferStateModule } from '@angular/platform-server';
import { AppModule } from './app.module';
import { AppComponent } from './components/app/app.component';
import { HttpCacheInterceptor } from './services/http-cache.interceptor';
@NgModule({
imports: [
AppModule,
ServerModule,
ServerTransferStateModule,
],
providers: [
{ provide: HTTP_INTERCEPTORS, useClass: HttpCacheInterceptor, multi: true }
],
bootstrap: [AppComponent],
})
export class AppServerModule {}

View File

@ -5,7 +5,6 @@ import { StateService } from 'src/app/services/state.service';
import { Observable } from 'rxjs'; import { Observable } from 'rxjs';
import { FormBuilder, FormGroup, Validators } from '@angular/forms'; import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { ApiService } from 'src/app/services/api.service'; import { ApiService } from 'src/app/services/api.service';
import { env } from '../../app.constants';
import { DomSanitizer, SafeUrl } from '@angular/platform-browser'; import { DomSanitizer, SafeUrl } from '@angular/platform-browser';
import { map } from 'rxjs/operators'; import { map } from 'rxjs/operators';
@ -21,7 +20,7 @@ export class AboutComponent implements OnInit {
donationStatus = 1; donationStatus = 1;
sponsors$: Observable<any>; sponsors$: Observable<any>;
donationObj: any; donationObj: any;
sponsorsEnabled = env.SPONSORS_ENABLED; sponsorsEnabled = this.stateService.env.SPONSORS_ENABLED;
sponsors = null; sponsors = null;
constructor( constructor(

View File

@ -1,3 +1,4 @@
import { Location } from '@angular/common';
import { Component, HostListener, OnInit, Inject, LOCALE_ID, HostBinding } from '@angular/core'; import { Component, HostListener, OnInit, Inject, LOCALE_ID, HostBinding } from '@angular/core';
import { Router, NavigationEnd } from '@angular/router'; import { Router, NavigationEnd } from '@angular/router';
import { WebsocketService } from '../../services/websocket.service'; import { WebsocketService } from '../../services/websocket.service';
@ -15,6 +16,7 @@ export class AppComponent implements OnInit {
public router: Router, public router: Router,
private websocketService: WebsocketService, private websocketService: WebsocketService,
private stateService: StateService, private stateService: StateService,
private location: Location,
@Inject(LOCALE_ID) private locale: string, @Inject(LOCALE_ID) private locale: string,
) { ) {
if (this.locale.startsWith('ar') || this.locale.startsWith('fa')) { if (this.locale.startsWith('ar') || this.locale.startsWith('fa')) {
@ -37,7 +39,7 @@ export class AppComponent implements OnInit {
ngOnInit() { ngOnInit() {
this.router.events.subscribe((val) => { this.router.events.subscribe((val) => {
if (val instanceof NavigationEnd) { if (val instanceof NavigationEnd) {
this.link.setAttribute('href', 'https://mempool.space' + (location.pathname === '/' ? '' : location.pathname)); this.link.setAttribute('href', 'https://mempool.space' + (this.location.path() === '/' ? '' : this.location.path()));
} }
}); });
} }

View File

@ -7,7 +7,6 @@ import { Block, Transaction, Vout } from '../../interfaces/electrs.interface';
import { of, Subscription } from 'rxjs'; import { of, Subscription } from 'rxjs';
import { StateService } from '../../services/state.service'; import { StateService } from '../../services/state.service';
import { SeoService } from 'src/app/services/seo.service'; import { SeoService } from 'src/app/services/seo.service';
import { env } from 'src/app/app.constants';
import { WebsocketService } from 'src/app/services/websocket.service'; import { WebsocketService } from 'src/app/services/websocket.service';
@Component({ @Component({
@ -31,7 +30,7 @@ export class BlockComponent implements OnInit, OnDestroy {
paginationMaxSize: number; paginationMaxSize: number;
coinbaseTx: Transaction; coinbaseTx: Transaction;
page = 1; page = 1;
itemsPerPage = env.ELCTRS_ITEMS_PER_PAGE; itemsPerPage: number;
constructor( constructor(
private route: ActivatedRoute, private route: ActivatedRoute,
@ -47,6 +46,7 @@ export class BlockComponent implements OnInit, OnDestroy {
this.websocketService.want(['blocks', 'mempool-blocks']); this.websocketService.want(['blocks', 'mempool-blocks']);
this.paginationMaxSize = window.matchMedia('(max-width: 700px)').matches ? 3 : 5; this.paginationMaxSize = window.matchMedia('(max-width: 700px)').matches ? 3 : 5;
this.network = this.stateService.network; this.network = this.stateService.network;
this.itemsPerPage = this.stateService.env.ELECTRS_ITEMS_PER_PAGE;
this.subscription = this.route.paramMap this.subscription = this.route.paramMap
.pipe( .pipe(

View File

@ -3,7 +3,6 @@ import { Subscription } from 'rxjs';
import { Block } from 'src/app/interfaces/electrs.interface'; import { Block } from 'src/app/interfaces/electrs.interface';
import { StateService } from 'src/app/services/state.service'; import { StateService } from 'src/app/services/state.service';
import { Router } from '@angular/router'; import { Router } from '@angular/router';
import { env } from 'src/app/app.constants';
@Component({ @Component({
selector: 'app-blockchain-blocks', selector: 'app-blockchain-blocks',
@ -78,7 +77,7 @@ export class BlockchainBlocksComponent implements OnInit, OnDestroy {
this.cd.markForCheck(); this.cd.markForCheck();
}, 50); }, 50);
if (this.blocks.length === env.KEEP_BLOCKS_AMOUNT) { if (this.blocks.length === this.stateService.env.KEEP_BLOCKS_AMOUNT) {
this.blocksFilled = true; this.blocksFilled = true;
} }
this.cd.markForCheck(); this.cd.markForCheck();

View File

@ -1,6 +1,5 @@
import { Component, OnInit, ChangeDetectionStrategy } from '@angular/core'; import { Component, OnInit } from '@angular/core';
import { StateService } from '../../services/state.service'; import { Env, StateService } from '../../services/state.service';
import { env } from 'src/app/app.constants';
import { Observable, merge, of } from 'rxjs'; import { Observable, merge, of } from 'rxjs';
@Component({ @Component({
@ -9,7 +8,7 @@ import { Observable, merge, of } from 'rxjs';
styleUrls: ['./master-page.component.scss'], styleUrls: ['./master-page.component.scss'],
}) })
export class MasterPageComponent implements OnInit { export class MasterPageComponent implements OnInit {
env = env; env: Env;
network$: Observable<string>; network$: Observable<string>;
connectionState$: Observable<number>; connectionState$: Observable<number>;
navCollapsed = false; navCollapsed = false;
@ -20,6 +19,7 @@ export class MasterPageComponent implements OnInit {
) { } ) { }
ngOnInit() { ngOnInit() {
this.env = this.stateService.env;
this.connectionState$ = this.stateService.connectionState$; this.connectionState$ = this.stateService.connectionState$;
this.network$ = merge(of(''), this.stateService.networkChanged$); this.network$ = merge(of(''), this.stateService.networkChanged$);
} }

View File

@ -5,7 +5,6 @@ import { switchMap, map, tap, filter } from 'rxjs/operators';
import { MempoolBlock } from 'src/app/interfaces/websocket.interface'; import { MempoolBlock } from 'src/app/interfaces/websocket.interface';
import { Observable, BehaviorSubject } from 'rxjs'; import { Observable, BehaviorSubject } from 'rxjs';
import { SeoService } from 'src/app/services/seo.service'; import { SeoService } from 'src/app/services/seo.service';
import { env } from 'src/app/app.constants';
import { WebsocketService } from 'src/app/services/websocket.service'; import { WebsocketService } from 'src/app/services/websocket.service';
@Component({ @Component({
@ -70,7 +69,7 @@ export class MempoolBlockComponent implements OnInit, OnDestroy {
const blocksInBlock = Math.ceil(mempoolBlock.blockVSize / 1000000); const blocksInBlock = Math.ceil(mempoolBlock.blockVSize / 1000000);
if (this.mempoolBlockIndex === 0) { if (this.mempoolBlockIndex === 0) {
return $localize`:@@mempool-block.next.block:Next block`; return $localize`:@@mempool-block.next.block:Next block`;
} else if (this.mempoolBlockIndex === env.KEEP_BLOCKS_AMOUNT - 1 && blocksInBlock > 1 ) { } else if (this.mempoolBlockIndex === this.stateService.env.KEEP_BLOCKS_AMOUNT - 1 && blocksInBlock > 1) {
return $localize`:@@mempool-block.stack.of.blocks:Stack of ${blocksInBlock}:INTERPOLATION: mempool blocks`; return $localize`:@@mempool-block.stack.of.blocks:Stack of ${blocksInBlock}:INTERPOLATION: mempool blocks`;
} else { } else {
return $localize`:@@mempool-block.block.no:Mempool block ${this.mempoolBlockIndex + 1}:INTERPOLATION:`; return $localize`:@@mempool-block.block.no:Mempool block ${this.mempoolBlockIndex + 1}:INTERPOLATION:`;

View File

@ -1,5 +1,6 @@
import { Component, Input, AfterViewInit, OnDestroy, ViewChild, ElementRef } from '@angular/core'; import { Component, Input, AfterViewInit, OnDestroy, ViewChild, ElementRef } from '@angular/core';
import * as QRCode from 'qrcode/build/qrcode.js'; import * as QRCode from 'qrcode/build/qrcode.js';
import { StateService } from 'src/app/services/state.service';
@Component({ @Component({
selector: 'app-qrcode', selector: 'app-qrcode',
@ -14,9 +15,14 @@ export class QrcodeComponent implements AfterViewInit {
qrcodeObject: any; qrcodeObject: any;
constructor() { } constructor(
private stateService: StateService,
) { }
ngAfterViewInit() { ngAfterViewInit() {
if (!this.stateService.isBrowser) {
return;
}
const opts = { const opts = {
errorCorrectionLevel: 'H', errorCorrectionLevel: 'H',
margin: 0, margin: 0,

View File

@ -1,14 +1,18 @@
import { import {
Component, Component,
ElementRef, ElementRef,
Inject,
Input, Input,
OnChanges, OnChanges,
OnDestroy, OnDestroy,
OnInit, OnInit,
PLATFORM_ID,
SimpleChanges, SimpleChanges,
ViewEncapsulation ViewEncapsulation
} from '@angular/core'; } from '@angular/core';
import { isPlatformBrowser } from '@angular/common';
import * as Chartist from '@mempool/chartist'; import * as Chartist from '@mempool/chartist';
/** /**
@ -63,16 +67,25 @@ export class ChartistComponent implements OnInit, OnChanges, OnDestroy {
// @ts-ignore // @ts-ignore
@Input() public events: ChartEvent; @Input() public events: ChartEvent;
isBrowser: boolean = isPlatformBrowser(this.platformId);
// @ts-ignore // @ts-ignore
public chart: ChartInterfaces; public chart: ChartInterfaces;
private element: HTMLElement; private element: HTMLElement;
constructor(element: ElementRef) { constructor(
element: ElementRef,
@Inject(PLATFORM_ID) private platformId: any,
) {
this.element = element.nativeElement; this.element = element.nativeElement;
} }
public ngOnInit(): Promise<ChartInterfaces> { public ngOnInit(): Promise<ChartInterfaces> {
if (!this.isBrowser) {
return;
}
if (!this.type || !this.data) { if (!this.type || !this.data) {
Promise.reject('Expected at least type and data.'); Promise.reject('Expected at least type and data.');
} }
@ -87,6 +100,10 @@ export class ChartistComponent implements OnInit, OnChanges, OnDestroy {
} }
public ngOnChanges(changes: SimpleChanges): void { public ngOnChanges(changes: SimpleChanges): void {
if (!this.isBrowser) {
return;
}
this.update(changes); this.update(changes);
} }
@ -194,7 +211,7 @@ export class ChartistComponent implements OnInit, OnChanges, OnDestroy {
}; };
}; };
}(window, document, Chartist)); }(null, null, Chartist));
/** /**
@ -278,7 +295,7 @@ export class ChartistComponent implements OnInit, OnChanges, OnDestroy {
}; };
}; };
}(window, document, Chartist)); }(null, null, Chartist));
const defaultOptions = { const defaultOptions = {
className: '', className: '',

View File

@ -1,4 +1,5 @@
import { Component, OnInit, OnDestroy, ChangeDetectionStrategy, Input, ChangeDetectorRef, OnChanges } from '@angular/core'; import { Component, OnInit, OnDestroy, ChangeDetectionStrategy, Input, ChangeDetectorRef, OnChanges, PLATFORM_ID, Inject } from '@angular/core';
import { StateService } from 'src/app/services/state.service';
@Component({ @Component({
selector: 'app-time-since', selector: 'app-time-since',
@ -14,7 +15,8 @@ export class TimeSinceComponent implements OnInit, OnChanges, OnDestroy {
@Input() fastRender = false; @Input() fastRender = false;
constructor( constructor(
private ref: ChangeDetectorRef private ref: ChangeDetectorRef,
private stateService: StateService,
) { ) {
this.intervals = { this.intervals = {
year: 31536000, year: 31536000,
@ -28,6 +30,11 @@ export class TimeSinceComponent implements OnInit, OnChanges, OnDestroy {
} }
ngOnInit() { ngOnInit() {
if (!this.stateService.isBrowser) {
this.text = this.calculate();
this.ref.markForCheck();
return;
}
this.interval = window.setInterval(() => { this.interval = window.setInterval(() => {
this.text = this.calculate(); this.text = this.calculate();
this.ref.markForCheck(); this.ref.markForCheck();

View File

@ -247,10 +247,10 @@ export class DashboardComponent implements OnInit {
setLanguageFromUrl() { setLanguageFromUrl() {
const urlLanguage = this.document.location.pathname.split('/')[1]; const urlLanguage = this.document.location.pathname.split('/')[1];
if (urlLanguage === '') { if (this.languages.map((lang) => lang.code).indexOf(urlLanguage) > -1) {
this.languageForm.get('language').setValue('en');
} else if (this.languages.map((lang) => lang.code).indexOf(urlLanguage) > -1) {
this.languageForm.get('language').setValue(urlLanguage); this.languageForm.get('language').setValue(urlLanguage);
} else {
this.languageForm.get('language').setValue('en');
} }
} }

View File

@ -1,57 +1,60 @@
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { HttpClient, HttpParams, HttpResponse } from '@angular/common/http'; import { HttpClient, HttpParams } from '@angular/common/http';
import { OptimizedMempoolStats } from '../interfaces/node-api.interface'; import { OptimizedMempoolStats } from '../interfaces/node-api.interface';
import { Observable } from 'rxjs'; import { Observable } from 'rxjs';
import { StateService } from './state.service'; import { StateService } from './state.service';
import { env } from '../app.constants'; import { WebsocketResponse } from '../interfaces/websocket.interface';
const API_BASE_URL = '{network}/api/v1';
@Injectable({ @Injectable({
providedIn: 'root' providedIn: 'root'
}) })
export class ApiService { export class ApiService {
apiBaseUrl: string; private apiBaseUrl: string; // base URL is protocol, hostname, and port
private apiBasePath: string; // network path is /testnet, etc. or '' for mainnet
constructor( constructor(
private httpClient: HttpClient, private httpClient: HttpClient,
private stateService: StateService, private stateService: StateService,
) { ) {
this.apiBaseUrl = API_BASE_URL.replace('{network}', ''); this.apiBaseUrl = ''; // use relative URL by default
if (!stateService.isBrowser) { // except when inside AU SSR process
this.apiBaseUrl = this.stateService.env.NGINX_PROTOCOL + '://' + this.stateService.env.NGINX_HOSTNAME + ':' + this.stateService.env.NGINX_PORT;
}
this.apiBasePath = ''; // assume mainnet by default
this.stateService.networkChanged$.subscribe((network) => { this.stateService.networkChanged$.subscribe((network) => {
if (network === 'bisq' && !env.BISQ_SEPARATE_BACKEND) { if (network === 'bisq' && !this.stateService.env.BISQ_SEPARATE_BACKEND) {
network = ''; network = '';
} }
this.apiBaseUrl = API_BASE_URL.replace('{network}', network ? '/' + network : ''); this.apiBasePath = network ? '/' + network : '';
}); });
} }
list2HStatistics$(): Observable<OptimizedMempoolStats[]> { list2HStatistics$(): Observable<OptimizedMempoolStats[]> {
return this.httpClient.get<OptimizedMempoolStats[]>(this.apiBaseUrl + '/statistics/2h'); return this.httpClient.get<OptimizedMempoolStats[]>(this.apiBaseUrl + this.apiBasePath + '/api/v1/statistics/2h');
} }
list24HStatistics$(): Observable<OptimizedMempoolStats[]> { list24HStatistics$(): Observable<OptimizedMempoolStats[]> {
return this.httpClient.get<OptimizedMempoolStats[]>(this.apiBaseUrl + '/statistics/24h'); return this.httpClient.get<OptimizedMempoolStats[]>(this.apiBaseUrl + this.apiBasePath + '/api/v1/statistics/24h');
} }
list1WStatistics$(): Observable<OptimizedMempoolStats[]> { list1WStatistics$(): Observable<OptimizedMempoolStats[]> {
return this.httpClient.get<OptimizedMempoolStats[]>(this.apiBaseUrl + '/statistics/1w'); return this.httpClient.get<OptimizedMempoolStats[]>(this.apiBaseUrl + this.apiBasePath + '/api/v1/statistics/1w');
} }
list1MStatistics$(): Observable<OptimizedMempoolStats[]> { list1MStatistics$(): Observable<OptimizedMempoolStats[]> {
return this.httpClient.get<OptimizedMempoolStats[]>(this.apiBaseUrl + '/statistics/1m'); return this.httpClient.get<OptimizedMempoolStats[]>(this.apiBaseUrl + this.apiBasePath + '/api/v1/statistics/1m');
} }
list3MStatistics$(): Observable<OptimizedMempoolStats[]> { list3MStatistics$(): Observable<OptimizedMempoolStats[]> {
return this.httpClient.get<OptimizedMempoolStats[]>(this.apiBaseUrl + '/statistics/3m'); return this.httpClient.get<OptimizedMempoolStats[]>(this.apiBaseUrl + this.apiBasePath + '/api/v1/statistics/3m');
} }
list6MStatistics$(): Observable<OptimizedMempoolStats[]> { list6MStatistics$(): Observable<OptimizedMempoolStats[]> {
return this.httpClient.get<OptimizedMempoolStats[]>(this.apiBaseUrl + '/statistics/6m'); return this.httpClient.get<OptimizedMempoolStats[]>(this.apiBaseUrl + this.apiBasePath + '/api/v1/statistics/6m');
} }
list1YStatistics$(): Observable<OptimizedMempoolStats[]> { list1YStatistics$(): Observable<OptimizedMempoolStats[]> {
return this.httpClient.get<OptimizedMempoolStats[]>(this.apiBaseUrl + '/statistics/1y'); return this.httpClient.get<OptimizedMempoolStats[]>(this.apiBaseUrl + this.apiBasePath + '/api/v1/statistics/1y');
} }
getTransactionTimes$(txIds: string[]): Observable<number[]> { getTransactionTimes$(txIds: string[]): Observable<number[]> {
@ -59,7 +62,7 @@ export class ApiService {
txIds.forEach((txId: string) => { txIds.forEach((txId: string) => {
params = params.append('txId[]', txId); params = params.append('txId[]', txId);
}); });
return this.httpClient.get<number[]>(this.apiBaseUrl + '/transaction-times', { params }); return this.httpClient.get<number[]>(this.apiBaseUrl + this.apiBasePath + '/api/v1/transaction-times', { params });
} }
requestDonation$(amount: number, orderId: string): Observable<any> { requestDonation$(amount: number, orderId: string): Observable<any> {
@ -67,10 +70,14 @@ export class ApiService {
amount: amount, amount: amount,
orderId: orderId, orderId: orderId,
}; };
return this.httpClient.post<any>(this.apiBaseUrl + '/donations', params); return this.httpClient.post<any>(this.apiBaseUrl + this.apiBasePath + '/api/v1/donations', params);
} }
getDonation$(): Observable<any[]> { getDonation$(): Observable<any[]> {
return this.httpClient.get<any[]>(this.apiBaseUrl + '/donations'); return this.httpClient.get<any[]>(this.apiBaseUrl + this.apiBasePath + '/api/v1/donations');
}
getInitData$(): Observable<WebsocketResponse> {
return this.httpClient.get<WebsocketResponse>(this.apiBaseUrl + this.apiBasePath + '/api/v1/init-data');
} }
} }

View File

@ -2,6 +2,7 @@ import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http'; import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs'; import { Observable } from 'rxjs';
import { shareReplay } from 'rxjs/operators'; import { shareReplay } from 'rxjs/operators';
import { StateService } from './state.service';
@Injectable({ @Injectable({
providedIn: 'root' providedIn: 'root'
@ -13,9 +14,15 @@ export class AssetsService {
constructor( constructor(
private httpClient: HttpClient, private httpClient: HttpClient,
private stateService: StateService,
) { ) {
this.getAssetsJson$ = this.httpClient.get('/resources/assets.json').pipe(shareReplay()); let apiBaseUrl = '';
this.getAssetsMinimalJson$ = this.httpClient.get('/resources/assets.minimal.json').pipe(shareReplay()); if (!this.stateService.isBrowser) {
this.getMiningPools$ = this.httpClient.get('/resources/pools.json').pipe(shareReplay()); apiBaseUrl = this.stateService.env.NGINX_PROTOCOL + '://' + this.stateService.env.NGINX_HOSTNAME + ':' + this.stateService.env.NGINX_PORT;
}
this.getAssetsJson$ = this.httpClient.get(apiBaseUrl + '/resources/assets.json').pipe(shareReplay());
this.getAssetsMinimalJson$ = this.httpClient.get(apiBaseUrl + '/resources/assets.minimal.json').pipe(shareReplay());
this.getMiningPools$ = this.httpClient.get(apiBaseUrl + '/resources/pools.json').pipe(shareReplay());
} }
} }

View File

@ -4,13 +4,17 @@ import { Injectable } from '@angular/core';
providedIn: 'root' providedIn: 'root'
}) })
export class AudioService { export class AudioService {
audio = new Audio(); audio: HTMLAudioElement;
isPlaying = false; isPlaying = false;
constructor() { } constructor() {
try {
this.audio = new Audio();
} catch (e) {}
}
public playSound(name: 'magic' | 'chime' | 'cha-ching' | 'bright-harmony') { public playSound(name: 'magic' | 'chime' | 'cha-ching' | 'bright-harmony') {
if (this.isPlaying) { if (this.isPlaying || !this.audio) {
return; return;
} }
this.isPlaying = true; this.isPlaying = true;

View File

@ -3,86 +3,88 @@ import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs'; import { Observable } from 'rxjs';
import { Block, Transaction, Address, Outspend, Recent, Asset } from '../interfaces/electrs.interface'; import { Block, Transaction, Address, Outspend, Recent, Asset } from '../interfaces/electrs.interface';
import { StateService } from './state.service'; import { StateService } from './state.service';
import { env } from '../app.constants';
const API_BASE_URL = '{network}/api';
@Injectable({ @Injectable({
providedIn: 'root' providedIn: 'root'
}) })
export class ElectrsApiService { export class ElectrsApiService {
apiBaseUrl: string; private apiBaseUrl: string; // base URL is protocol, hostname, and port
private apiBasePath: string; // network path is /testnet, etc. or '' for mainnet
constructor( constructor(
private httpClient: HttpClient, private httpClient: HttpClient,
private stateService: StateService, private stateService: StateService,
) { ) {
this.apiBaseUrl = API_BASE_URL.replace('{network}', ''); this.apiBaseUrl = ''; // use relative URL by default
if (!stateService.isBrowser) { // except when inside AU SSR process
this.apiBaseUrl = this.stateService.env.NGINX_PROTOCOL + '://' + this.stateService.env.NGINX_HOSTNAME + ':' + this.stateService.env.NGINX_PORT;
}
this.apiBasePath = ''; // assume mainnet by default
this.stateService.networkChanged$.subscribe((network) => { this.stateService.networkChanged$.subscribe((network) => {
if (network === 'bisq') { if (network === 'bisq') {
network = ''; network = '';
} }
this.apiBaseUrl = API_BASE_URL.replace('{network}', network ? '/' + network : ''); this.apiBasePath = network ? '/' + network : '';
}); });
} }
getBlock$(hash: string): Observable<Block> { getBlock$(hash: string): Observable<Block> {
return this.httpClient.get<Block>(this.apiBaseUrl + '/block/' + hash); return this.httpClient.get<Block>(this.apiBaseUrl + this.apiBasePath + '/api/block/' + hash);
} }
listBlocks$(height?: number): Observable<Block[]> { listBlocks$(height?: number): Observable<Block[]> {
return this.httpClient.get<Block[]>(this.apiBaseUrl + '/blocks/' + (height || '')); return this.httpClient.get<Block[]>(this.apiBaseUrl + this.apiBasePath + '/api/blocks/' + (height || ''));
} }
getTransaction$(txId: string): Observable<Transaction> { getTransaction$(txId: string): Observable<Transaction> {
return this.httpClient.get<Transaction>(this.apiBaseUrl + '/tx/' + txId); return this.httpClient.get<Transaction>(this.apiBaseUrl + this.apiBasePath + '/api/tx/' + txId);
} }
getRecentTransaction$(): Observable<Recent[]> { getRecentTransaction$(): Observable<Recent[]> {
return this.httpClient.get<Recent[]>(this.apiBaseUrl + '/mempool/recent'); return this.httpClient.get<Recent[]>(this.apiBaseUrl + this.apiBasePath + '/api/mempool/recent');
} }
getOutspend$(hash: string, vout: number): Observable<Outspend> { getOutspend$(hash: string, vout: number): Observable<Outspend> {
return this.httpClient.get<Outspend>(this.apiBaseUrl + '/tx/' + hash + '/outspend/' + vout); return this.httpClient.get<Outspend>(this.apiBaseUrl + this.apiBasePath + '/api/tx/' + hash + '/outspend/' + vout);
} }
getOutspends$(hash: string): Observable<Outspend[]> { getOutspends$(hash: string): Observable<Outspend[]> {
return this.httpClient.get<Outspend[]>(this.apiBaseUrl + '/tx/' + hash + '/outspends'); return this.httpClient.get<Outspend[]>(this.apiBaseUrl + this.apiBasePath + '/api/tx/' + hash + '/outspends');
} }
getBlockTransactions$(hash: string, index: number = 0): Observable<Transaction[]> { getBlockTransactions$(hash: string, index: number = 0): Observable<Transaction[]> {
return this.httpClient.get<Transaction[]>(this.apiBaseUrl + '/block/' + hash + '/txs/' + index); return this.httpClient.get<Transaction[]>(this.apiBaseUrl + this.apiBasePath + '/api/block/' + hash + '/txs/' + index);
} }
getBlockHashFromHeight$(height: number): Observable<string> { getBlockHashFromHeight$(height: number): Observable<string> {
return this.httpClient.get(this.apiBaseUrl + '/block-height/' + height, {responseType: 'text'}); return this.httpClient.get(this.apiBaseUrl + this.apiBasePath + '/api/block-height/' + height, {responseType: 'text'});
} }
getAddress$(address: string): Observable<Address> { getAddress$(address: string): Observable<Address> {
return this.httpClient.get<Address>(this.apiBaseUrl + '/address/' + address); return this.httpClient.get<Address>(this.apiBaseUrl + this.apiBasePath + '/api/address/' + address);
} }
getAddressTransactions$(address: string): Observable<Transaction[]> { getAddressTransactions$(address: string): Observable<Transaction[]> {
return this.httpClient.get<Transaction[]>(this.apiBaseUrl + '/address/' + address + '/txs'); return this.httpClient.get<Transaction[]>(this.apiBaseUrl + this.apiBasePath + '/api/address/' + address + '/txs');
} }
getAddressTransactionsFromHash$(address: string, txid: string): Observable<Transaction[]> { getAddressTransactionsFromHash$(address: string, txid: string): Observable<Transaction[]> {
return this.httpClient.get<Transaction[]>(this.apiBaseUrl + '/address/' + address + '/txs/chain/' + txid); return this.httpClient.get<Transaction[]>(this.apiBaseUrl + this.apiBasePath + '/api/address/' + address + '/txs/chain/' + txid);
} }
getAsset$(assetId: string): Observable<Asset> { getAsset$(assetId: string): Observable<Asset> {
return this.httpClient.get<Asset>(this.apiBaseUrl + '/asset/' + assetId); return this.httpClient.get<Asset>(this.apiBaseUrl + this.apiBasePath + '/api/asset/' + assetId);
} }
getAssetTransactions$(assetId: string): Observable<Transaction[]> { getAssetTransactions$(assetId: string): Observable<Transaction[]> {
return this.httpClient.get<Transaction[]>(this.apiBaseUrl + '/asset/' + assetId + '/txs'); return this.httpClient.get<Transaction[]>(this.apiBaseUrl + this.apiBasePath + '/api/asset/' + assetId + '/txs');
} }
getAssetTransactionsFromHash$(assetId: string, txid: string): Observable<Transaction[]> { getAssetTransactionsFromHash$(assetId: string, txid: string): Observable<Transaction[]> {
return this.httpClient.get<Transaction[]>(this.apiBaseUrl + '/asset/' + assetId + '/txs/chain/' + txid); return this.httpClient.get<Transaction[]>(this.apiBaseUrl + this.apiBasePath + '/api/asset/' + assetId + '/txs/chain/' + txid);
} }
getAddressesByPrefix$(prefix: string): Observable<string[]> { getAddressesByPrefix$(prefix: string): Observable<string[]> {
return this.httpClient.get<string[]>(this.apiBaseUrl + '/address-prefix/' + prefix); return this.httpClient.get<string[]>(this.apiBaseUrl + this.apiBasePath + '/api/address-prefix/' + prefix);
} }
} }

View File

@ -0,0 +1,42 @@
import { Inject, Injectable, PLATFORM_ID } from '@angular/core';
import { HttpInterceptor, HttpEvent, HttpRequest, HttpHandler, HttpResponse } from '@angular/common/http';
import { Observable, of } from 'rxjs';
import { tap } from 'rxjs/operators';
import { TransferState, makeStateKey } from '@angular/platform-browser';
import { isPlatformBrowser } from '@angular/common';
@Injectable()
export class HttpCacheInterceptor implements HttpInterceptor {
isBrowser: boolean = isPlatformBrowser(this.platformId);
constructor(
private transferState: TransferState,
@Inject(PLATFORM_ID) private platformId: any,
) { }
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
if (this.isBrowser && request.method === 'GET') {
const cachedResponse = this.transferState.get(makeStateKey(request.url), null);
if (cachedResponse) {
const modifiedResponse = new HttpResponse<any>({
headers: cachedResponse.headers,
body: cachedResponse.body,
status: cachedResponse.status,
statusText: cachedResponse.statusText,
url: cachedResponse.url
});
this.transferState.remove(makeStateKey(request.url));
return of(modifiedResponse);
}
}
return next.handle(request)
.pipe(tap((event: HttpEvent<any>) => {
if (!this.isBrowser && event instanceof HttpResponse) {
let keyId = request.url.split('/').slice(3).join('/');
this.transferState.set(makeStateKey('/' + keyId), event);
}
}));
}
}

View File

@ -1,5 +1,5 @@
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { Title } from '@angular/platform-browser'; import { Title, Meta } from '@angular/platform-browser';
import { StateService } from './state.service'; import { StateService } from './state.service';
@Injectable({ @Injectable({
@ -10,6 +10,7 @@ export class SeoService {
constructor( constructor(
private titleService: Title, private titleService: Title,
private metaService: Meta,
private stateService: StateService, private stateService: StateService,
) { ) {
this.stateService.networkChanged$.subscribe((network) => this.network = network); this.stateService.networkChanged$.subscribe((network) => this.network = network);
@ -17,10 +18,12 @@ export class SeoService {
setTitle(newTitle: string): void { setTitle(newTitle: string): void {
this.titleService.setTitle(newTitle + ' - ' + this.getTitle()); this.titleService.setTitle(newTitle + ' - ' + this.getTitle());
this.metaService.updateTag({ property: 'og:title', content: newTitle});
} }
resetTitle(): void { resetTitle(): void {
this.titleService.setTitle(this.getTitle()); this.titleService.setTitle(this.getTitle());
this.metaService.updateTag({ property: 'og:title', content: this.getTitle()});
} }
getTitle(): string { getTitle(): string {

View File

@ -1,11 +1,11 @@
import { Injectable } from '@angular/core'; import { Inject, Injectable, PLATFORM_ID } from '@angular/core';
import { ReplaySubject, BehaviorSubject, Subject, fromEvent } from 'rxjs'; import { ReplaySubject, BehaviorSubject, Subject, fromEvent, Observable } from 'rxjs';
import { Block, Transaction } from '../interfaces/electrs.interface'; import { Block, Transaction } from '../interfaces/electrs.interface';
import { MempoolBlock, MempoolInfo, TransactionStripped } from '../interfaces/websocket.interface'; import { MempoolBlock, MempoolInfo, TransactionStripped } from '../interfaces/websocket.interface';
import { OptimizedMempoolStats } from '../interfaces/node-api.interface'; import { OptimizedMempoolStats } from '../interfaces/node-api.interface';
import { Router, NavigationStart } from '@angular/router'; import { Router, NavigationStart } from '@angular/router';
import { env } from '../app.constants'; import { isPlatformBrowser } from '@angular/common';
import { shareReplay, map } from 'rxjs/operators'; import { map, shareReplay } from 'rxjs/operators';
interface MarkBlockState { interface MarkBlockState {
blockHeight?: number; blockHeight?: number;
@ -13,15 +13,43 @@ interface MarkBlockState {
txFeePerVSize?: number; txFeePerVSize?: number;
} }
export interface Env {
TESTNET_ENABLED: boolean;
LIQUID_ENABLED: boolean;
BISQ_ENABLED: boolean;
BISQ_SEPARATE_BACKEND: boolean;
SPONSORS_ENABLED: boolean;
ELECTRS_ITEMS_PER_PAGE: number;
KEEP_BLOCKS_AMOUNT: number;
NGINX_PROTOCOL?: string;
NGINX_HOSTNAME?: string;
NGINX_PORT?: string;
}
const defaultEnv: Env = {
'TESTNET_ENABLED': false,
'LIQUID_ENABLED': false,
'BISQ_ENABLED': false,
'BISQ_SEPARATE_BACKEND': false,
'SPONSORS_ENABLED': false,
'ELECTRS_ITEMS_PER_PAGE': 25,
'KEEP_BLOCKS_AMOUNT': 8,
'NGINX_PROTOCOL': 'http',
'NGINX_HOSTNAME': '127.0.0.1',
'NGINX_PORT': '81',
};
@Injectable({ @Injectable({
providedIn: 'root' providedIn: 'root'
}) })
export class StateService { export class StateService {
isBrowser: boolean = isPlatformBrowser(this.platformId);
network = ''; network = '';
env: Env;
latestBlockHeight = 0; latestBlockHeight = 0;
networkChanged$ = new ReplaySubject<string>(1); networkChanged$ = new ReplaySubject<string>(1);
blocks$ = new ReplaySubject<[Block, boolean]>(env.KEEP_BLOCKS_AMOUNT); blocks$: ReplaySubject<[Block, boolean]>;
transactions$ = new ReplaySubject<TransactionStripped>(6); transactions$ = new ReplaySubject<TransactionStripped>(6);
conversions$ = new ReplaySubject<any>(1); conversions$ = new ReplaySubject<any>(1);
bsqPrice$ = new ReplaySubject<number>(1); bsqPrice$ = new ReplaySubject<number>(1);
@ -40,21 +68,35 @@ export class StateService {
viewFiat$ = new BehaviorSubject<boolean>(false); viewFiat$ = new BehaviorSubject<boolean>(false);
connectionState$ = new BehaviorSubject<0 | 1 | 2>(2); connectionState$ = new BehaviorSubject<0 | 1 | 2>(2);
isTabHidden$ = fromEvent(document, 'visibilitychange').pipe(map((event) => this.isHidden()), shareReplay()); isTabHidden$: Observable<boolean>;
markBlock$ = new ReplaySubject<MarkBlockState>(); markBlock$ = new ReplaySubject<MarkBlockState>();
keyNavigation$ = new Subject<KeyboardEvent>(); keyNavigation$ = new Subject<KeyboardEvent>();
constructor( constructor(
@Inject(PLATFORM_ID) private platformId: any,
private router: Router, private router: Router,
) { ) {
this.setNetworkBasedonUrl(window.location.pathname);
this.router.events.subscribe((event) => { this.router.events.subscribe((event) => {
if (event instanceof NavigationStart) { if (event instanceof NavigationStart) {
this.setNetworkBasedonUrl(event.url); this.setNetworkBasedonUrl(event.url);
} }
}); });
if (this.isBrowser) {
this.setNetworkBasedonUrl(window.location.pathname);
this.isTabHidden$ = fromEvent(document, 'visibilitychange').pipe(map(() => this.isHidden()), shareReplay());
} else {
this.setNetworkBasedonUrl('/');
this.isTabHidden$ = new BehaviorSubject(false);
}
const browserWindow = window || {};
// @ts-ignore
const browserWindowEnv = browserWindow.__env || {};
this.env = Object.assign(defaultEnv, browserWindowEnv);
this.blocks$ = new ReplaySubject<[Block, boolean]>(this.env.KEEP_BLOCKS_AMOUNT);
} }
setNetworkBasedonUrl(url: string) { setNetworkBasedonUrl(url: string) {

View File

@ -4,19 +4,23 @@ import { WebsocketResponse } from '../interfaces/websocket.interface';
import { StateService } from './state.service'; import { StateService } from './state.service';
import { Block, Transaction } from '../interfaces/electrs.interface'; import { Block, Transaction } from '../interfaces/electrs.interface';
import { Subscription } from 'rxjs'; import { Subscription } from 'rxjs';
import { env } from '../app.constants'; import { ApiService } from './api.service';
import { take } from 'rxjs/operators';
const WEB_SOCKET_PROTOCOL = (document.location.protocol === 'https:') ? 'wss:' : 'ws:'; import { TransferState, makeStateKey } from '@angular/platform-browser';
const WEB_SOCKET_URL = WEB_SOCKET_PROTOCOL + '//' + document.location.hostname + ':' + document.location.port + '{network}/api/v1/ws';
const OFFLINE_RETRY_AFTER_MS = 10000; const OFFLINE_RETRY_AFTER_MS = 10000;
const OFFLINE_PING_CHECK_AFTER_MS = 30000; const OFFLINE_PING_CHECK_AFTER_MS = 30000;
const EXPECT_PING_RESPONSE_AFTER_MS = 4000; const EXPECT_PING_RESPONSE_AFTER_MS = 4000;
const initData = makeStateKey('/api/v1/init-data');
@Injectable({ @Injectable({
providedIn: 'root' providedIn: 'root'
}) })
export class WebsocketService { export class WebsocketService {
private webSocketProtocol = (document.location.protocol === 'https:') ? 'wss:' : 'ws:';
private webSocketUrl = this.webSocketProtocol + '//' + document.location.hostname + ':' + document.location.port + '{network}/api/v1/ws';
private websocketSubject: WebSocketSubject<WebsocketResponse>; private websocketSubject: WebSocketSubject<WebsocketResponse>;
private goneOffline = false; private goneOffline = false;
private lastWant: string[] | null = null; private lastWant: string[] | null = null;
@ -29,13 +33,30 @@ export class WebsocketService {
constructor( constructor(
private stateService: StateService, private stateService: StateService,
private apiService: ApiService,
private transferState: TransferState,
) { ) {
this.network = this.stateService.network === 'bisq' && !env.BISQ_SEPARATE_BACKEND ? '' : this.stateService.network; if (!this.stateService.isBrowser) {
this.websocketSubject = webSocket<WebsocketResponse>(WEB_SOCKET_URL.replace('{network}', this.network ? '/' + this.network : '')); // @ts-ignore
this.websocketSubject = { next: () => {}};
this.stateService.isLoadingWebSocket$.next(false);
this.apiService.getInitData$()
.pipe(take(1))
.subscribe((response) => this.handleResponse(response));
} else {
this.network = this.stateService.network === 'bisq' && !this.stateService.env.BISQ_SEPARATE_BACKEND ? '' : this.stateService.network;
this.websocketSubject = webSocket<WebsocketResponse>(this.webSocketUrl.replace('{network}', this.network ? '/' + this.network : ''));
const theInitData = this.transferState.get(initData, null);
if (theInitData) {
this.handleResponse(theInitData.body);
this.startSubscription(false, true);
} else {
this.startSubscription(); this.startSubscription();
}
this.stateService.networkChanged$.subscribe((network) => { this.stateService.networkChanged$.subscribe((network) => {
if (network === 'bisq' && !env.BISQ_SEPARATE_BACKEND) { if (network === 'bisq' && !this.stateService.env.BISQ_SEPARATE_BACKEND) {
network = ''; network = '';
} }
if (network === this.network) { if (network === this.network) {
@ -49,21 +70,131 @@ export class WebsocketService {
this.websocketSubject.complete(); this.websocketSubject.complete();
this.subscription.unsubscribe(); this.subscription.unsubscribe();
this.websocketSubject = webSocket<WebsocketResponse>(WEB_SOCKET_URL.replace('{network}', this.network ? '/' + this.network : '')); this.websocketSubject = webSocket<WebsocketResponse>(
this.webSocketUrl.replace('{network}', this.network ? '/' + this.network : '')
);
this.startSubscription(); this.startSubscription();
}); });
} }
}
startSubscription(retrying = false) { startSubscription(retrying = false, hasInitData = false) {
if (!hasInitData) {
this.stateService.isLoadingWebSocket$.next(true); this.stateService.isLoadingWebSocket$.next(true);
this.websocketSubject.next({'action': 'init'});
}
if (retrying) { if (retrying) {
this.stateService.connectionState$.next(1); this.stateService.connectionState$.next(1);
} }
this.websocketSubject.next({'action': 'init'});
this.subscription = this.websocketSubject this.subscription = this.websocketSubject
.subscribe((response: WebsocketResponse) => { .subscribe((response: WebsocketResponse) => {
this.stateService.isLoadingWebSocket$.next(false); this.stateService.isLoadingWebSocket$.next(false);
this.handleResponse(response);
if (this.goneOffline === true) {
this.goneOffline = false;
if (this.lastWant) {
this.want(this.lastWant, true);
}
this.stateService.connectionState$.next(2);
}
if (this.stateService.connectionState$.value === 1) {
this.stateService.connectionState$.next(2);
}
this.startOnlineCheck();
},
(err: Error) => {
console.log(err);
console.log(`WebSocket error, trying to reconnect in ${OFFLINE_RETRY_AFTER_MS} seconds`);
this.goOffline();
});
}
startTrackTransaction(txId: string) {
if (this.isTrackingTx) {
return;
}
this.websocketSubject.next({ 'track-tx': txId });
this.isTrackingTx = true;
}
startMultiTrackTransaction(txId: string) {
this.websocketSubject.next({ 'track-tx': txId, 'watch-mempool': true });
this.isTrackingTx = true;
}
trackDonation(id: string) {
this.websocketSubject.next({ 'track-donation': id });
}
stopTrackingTransaction() {
if (!this.isTrackingTx) {
return;
}
this.websocketSubject.next({ 'track-tx': 'stop' });
this.isTrackingTx = false;
}
startTrackAddress(address: string) {
this.websocketSubject.next({ 'track-address': address });
}
stopTrackingAddress() {
this.websocketSubject.next({ 'track-address': 'stop' });
}
startTrackAsset(asset: string) {
this.websocketSubject.next({ 'track-asset': asset });
}
stopTrackingAsset() {
this.websocketSubject.next({ 'track-asset': 'stop' });
}
fetchStatistics(historicalDate: string) {
this.websocketSubject.next({ historicalDate });
}
want(data: string[], force = false) {
if (!this.stateService.isBrowser) {
return;
}
if (data === this.lastWant && !force) {
return;
}
this.websocketSubject.next({action: 'want', data: data});
this.lastWant = data;
}
goOffline() {
this.goneOffline = true;
this.stateService.connectionState$.next(0);
window.setTimeout(() => {
this.startSubscription(true);
}, OFFLINE_RETRY_AFTER_MS);
}
startOnlineCheck() {
clearTimeout(this.onlineCheckTimeout);
clearTimeout(this.onlineCheckTimeoutTwo);
this.onlineCheckTimeout = window.setTimeout(() => {
this.websocketSubject.next({action: 'ping'});
this.onlineCheckTimeoutTwo = window.setTimeout(() => {
if (!this.goneOffline) {
console.log('WebSocket response timeout, force closing, trying to reconnect in 10 seconds');
this.websocketSubject.complete();
this.subscription.unsubscribe();
this.goOffline();
}
}, EXPECT_PING_RESPONSE_AFTER_MS);
}, OFFLINE_PING_CHECK_AFTER_MS);
}
handleResponse(response: WebsocketResponse) {
if (response.blocks && response.blocks.length) { if (response.blocks && response.blocks.length) {
const blocks = response.blocks; const blocks = response.blocks;
blocks.forEach((block: Block) => { blocks.forEach((block: Block) => {
@ -158,103 +289,5 @@ export class WebsocketService {
if (response.donationConfirmed) { if (response.donationConfirmed) {
this.stateService.donationConfirmed$.next(true); this.stateService.donationConfirmed$.next(true);
} }
if (this.goneOffline === true) {
this.goneOffline = false;
if (this.lastWant) {
this.want(this.lastWant, true);
}
this.stateService.connectionState$.next(2);
}
if (this.stateService.connectionState$.value === 1) {
this.stateService.connectionState$.next(2);
}
this.startOnlineCheck();
},
(err: Error) => {
console.log(err);
console.log(`WebSocket error, trying to reconnect in ${OFFLINE_RETRY_AFTER_MS} seconds`);
this.goOffline();
});
}
startTrackTransaction(txId: string) {
if (this.isTrackingTx) {
return;
}
this.websocketSubject.next({ 'track-tx': txId });
this.isTrackingTx = true;
}
startMultiTrackTransaction(txId: string) {
this.websocketSubject.next({ 'track-tx': txId, 'watch-mempool': true });
this.isTrackingTx = true;
}
trackDonation(id: string) {
this.websocketSubject.next({ 'track-donation': id });
}
stopTrackingTransaction() {
if (!this.isTrackingTx) {
return;
}
this.websocketSubject.next({ 'track-tx': 'stop' });
this.isTrackingTx = false;
}
startTrackAddress(address: string) {
this.websocketSubject.next({ 'track-address': address });
}
stopTrackingAddress() {
this.websocketSubject.next({ 'track-address': 'stop' });
}
startTrackAsset(asset: string) {
this.websocketSubject.next({ 'track-asset': asset });
}
stopTrackingAsset() {
this.websocketSubject.next({ 'track-asset': 'stop' });
}
fetchStatistics(historicalDate: string) {
this.websocketSubject.next({ historicalDate });
}
want(data: string[], force = false) {
if (data === this.lastWant && !force) {
return;
}
this.websocketSubject.next({action: 'want', data: data});
this.lastWant = data;
}
goOffline() {
this.goneOffline = true;
this.stateService.connectionState$.next(0);
window.setTimeout(() => {
this.startSubscription(true);
}, OFFLINE_RETRY_AFTER_MS);
}
startOnlineCheck() {
clearTimeout(this.onlineCheckTimeout);
clearTimeout(this.onlineCheckTimeoutTwo);
this.onlineCheckTimeout = window.setTimeout(() => {
this.websocketSubject.next({action: 'ping'});
this.onlineCheckTimeoutTwo = window.setTimeout(() => {
if (!this.goneOffline) {
console.log('WebSocket response timeout, force closing, trying to reconnect in 10 seconds');
this.websocketSubject.complete();
this.subscription.unsubscribe();
this.goOffline();
}
}, EXPECT_PING_RESPONSE_AFTER_MS);
}, OFFLINE_PING_CHECK_AFTER_MS);
} }
} }

View File

@ -32,10 +32,6 @@
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
</head> </head>
<body> <body>
<noscript>
<div style="font-size: 36px">&#128680; mempool requires javascript&#128680;</div>
<div style="font-size: 20px">&nbsp; You need to enable JS in your browser to use this website.</div>
</noscript>
<app-root></app-root> <app-root></app-root>
<script type="text/javascript"> <script type="text/javascript">
if (document.location.hostname === "mempool.space") if (document.location.hostname === "mempool.space")

View File

@ -3,7 +3,7 @@
<body> <body>
<trans-unit datatype="html" id="bisq.transaction.browser-title"> <trans-unit datatype="html" id="bisq.transaction.browser-title">
<source>Transaction: <x equiv-text="this.txId" id="INTERPOLATION"/></source> <source>Transaction: <x equiv-text="this.txId" id="INTERPOLATION"/></source>
<target>Transaction : <x equiv-text="this.txId" id="INTERPOLATION"/></target> <target>Transaction: <x equiv-text="this.txId" id="INTERPOLATION"/></target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.ts</context> <context context-type="sourcefile">src/app/components/transaction/transaction.component.ts</context>
<context context-type="linenumber">48</context> <context context-type="linenumber">48</context>
@ -42,6 +42,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="8e623d3cfecb7c560c114390db53c1f430ffd0de"> <trans-unit datatype="html" id="8e623d3cfecb7c560c114390db53c1f430ffd0de">
<source><x equiv-text="{{ i }}" id="INTERPOLATION"/> confirmation</source> <source><x equiv-text="{{ i }}" id="INTERPOLATION"/> confirmation</source>
<target><x equiv-text="{{ i }}" id="INTERPOLATION"/>confirmation</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context> <context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
<context context-type="linenumber">17</context> <context context-type="linenumber">17</context>
@ -1151,7 +1152,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="c5d46228bea3555d65c705bad40be80f8798a113"> <trans-unit datatype="html" id="c5d46228bea3555d65c705bad40be80f8798a113">
<source>Reconnecting...</source> <source>Reconnecting...</source>
<target>Reconnection...</target> <target>Reconnexion...</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/master-page/master-page.component.html</context> <context context-type="sourcefile">src/app/components/master-page/master-page.component.html</context>
<context context-type="linenumber">8</context> <context context-type="linenumber">8</context>
@ -2048,6 +2049,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="fe56475a8f4cf4bfc3acaafa215a7dd60d9ed7da"> <trans-unit datatype="html" id="fe56475a8f4cf4bfc3acaafa215a7dd60d9ed7da">
<source>Default push: <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/><x equiv-text="{{ '{' }}" id="INTERPOLATION"/> action: 'want', data: ['blocks', ...] <x equiv-text="{{ '}' }}" id="INTERPOLATION_1"/><x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> to express what you want pushed. Available: <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>blocks<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>mempool-block<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>live-2h-chart<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/>, and <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>stats<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/>.<x ctype="lb" equiv-text="&lt;br&gt;" id="LINE_BREAK"/><x ctype="lb" equiv-text="&lt;br&gt;" id="LINE_BREAK"/>Push transactions related to address: <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/><x equiv-text="{{ '{' }}" id="INTERPOLATION"/> 'track-address': '3PbJ...bF9B' <x equiv-text="{{ '}' }}" id="INTERPOLATION_1"/><x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> to receive all new transactions containing that address as input or output. Returns an array of transactions. <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>address-transactions<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> for new mempool transactions, and <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>block-transactions<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> for new block confirmed transactions.</source> <source>Default push: <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/><x equiv-text="{{ '{' }}" id="INTERPOLATION"/> action: 'want', data: ['blocks', ...] <x equiv-text="{{ '}' }}" id="INTERPOLATION_1"/><x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> to express what you want pushed. Available: <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>blocks<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>mempool-block<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>live-2h-chart<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/>, and <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>stats<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/>.<x ctype="lb" equiv-text="&lt;br&gt;" id="LINE_BREAK"/><x ctype="lb" equiv-text="&lt;br&gt;" id="LINE_BREAK"/>Push transactions related to address: <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/><x equiv-text="{{ '{' }}" id="INTERPOLATION"/> 'track-address': '3PbJ...bF9B' <x equiv-text="{{ '}' }}" id="INTERPOLATION_1"/><x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> to receive all new transactions containing that address as input or output. Returns an array of transactions. <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>address-transactions<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> for new mempool transactions, and <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>block-transactions<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> for new block confirmed transactions.</source>
<target>Pousser par défaut:<x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/><x equiv-text="{{ '{' }}" id="INTERPOLATION"/>action: 'want', data: ['blocks', ...]<x equiv-text="{{ '}' }}" id="INTERPOLATION_1"/><x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> pour exprimer ce que vous voulez pousser. Disponible:<x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>blocks<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>mempool-block<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>live-2h-chart<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/>, et<x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>stats.<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/>.<x ctype="lb" equiv-text="&lt;br&gt;" id="LINE_BREAK"/><x ctype="lb" equiv-text="&lt;br&gt;" id="LINE_BREAK"/> Transaction pousser liées à l'adresse:<x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/><x equiv-text="{{ '{' }}" id="INTERPOLATION"/>'track-address': '3PbJ...bF9B'<x equiv-text="{{ '}' }}" id="INTERPOLATION_1"/><x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/>pour recevoir toutes les nouvelles transactions contenant cette adresse en entrée ou en sortie. Donne un tableau de transactions.<x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>address-transactions<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/>pour les nouvelles transactions mempool, et<x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>block-transactions<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/>pour les nouvelles transactions confirmées.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">19</context> <context context-type="linenumber">19</context>
@ -2134,6 +2136,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="1126cb2e03d0371d03b57047052d4ff1b6556753"> <trans-unit datatype="html" id="1126cb2e03d0371d03b57047052d4ff1b6556753">
<source>Returns a list of transactions in the block (up to 25 transactions beginning at <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>start_index<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/>). Transactions returned here do not have the <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>status<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> field, since all the transactions share the same block and confirmation status.</source> <source>Returns a list of transactions in the block (up to 25 transactions beginning at <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>start_index<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/>). Transactions returned here do not have the <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>status<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> field, since all the transactions share the same block and confirmation status.</source>
<target>Donne une liste de transactions dans le bloc (jusqu'à 25 transactions commençant à<x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>start_index<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/>). Les transactions retournées n'ont pas le champ<x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>status<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/>, puisque toutes les transactions partagent le même statut.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">93</context> <context context-type="linenumber">93</context>
@ -2141,6 +2144,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="3846f2527c3c9a50bb84b2c941a876f66797449b"> <trans-unit datatype="html" id="3846f2527c3c9a50bb84b2c941a876f66797449b">
<source>Returns a list of all txids in the block.</source> <source>Returns a list of all txids in the block.</source>
<target>Renvoie une liste de tous les txids du bloc. </target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">97</context> <context context-type="linenumber">97</context>
@ -2148,6 +2152,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="3e08815110b2e5ce8aa7256ed05a2faf6dbb7077"> <trans-unit datatype="html" id="3e08815110b2e5ce8aa7256ed05a2faf6dbb7077">
<source>Returns the transaction at index <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>:index<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> within the specified block.</source> <source>Returns the transaction at index <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>:index<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> within the specified block.</source>
<target>Renvoie la transaction à l'index<x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>:index<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/>dans le bloc spécifié.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">101</context> <context context-type="linenumber">101</context>
@ -2155,6 +2160,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="6d5aacdd7e6c375570a88c25bfd0be82beba4c7b"> <trans-unit datatype="html" id="6d5aacdd7e6c375570a88c25bfd0be82beba4c7b">
<source>Returns the raw block representation in binary.</source> <source>Returns the raw block representation in binary.</source>
<target>Renvoie la représentation brute du bloc en binaire.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">105</context> <context context-type="linenumber">105</context>
@ -2162,6 +2168,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="36df9865e9099d98537ea69c9cfdc035d1b64116"> <trans-unit datatype="html" id="36df9865e9099d98537ea69c9cfdc035d1b64116">
<source>Returns the hash of the block currently at <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>:height<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>.</source> <source>Returns the hash of the block currently at <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>:height<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>.</source>
<target>Renvoie le hachage du bloc actuellement à<x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>:height<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">109</context> <context context-type="linenumber">109</context>
@ -2169,6 +2176,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="f8380186899495340cbfe7fb836ba664fb4b52af"> <trans-unit datatype="html" id="f8380186899495340cbfe7fb836ba664fb4b52af">
<source>Returns the 10 newest blocks starting at the tip or at <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>:start_height<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> if specified.</source> <source>Returns the 10 newest blocks starting at the tip or at <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>:start_height<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> if specified.</source>
<target>Renvoie les 10 blocs les plus récents en commençant à la pointe ou à<x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>:start_height<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> si spécifié.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">113</context> <context context-type="linenumber">113</context>
@ -2192,6 +2200,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="194d480219559b855b01ea58459066e3c63acdb2"> <trans-unit datatype="html" id="194d480219559b855b01ea58459066e3c63acdb2">
<source>Returns details about a block. Available fields: <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>id<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>height<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>version<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>timestamp<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>bits<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>nonce<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>merkle_root<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>tx_count<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>size<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>weight<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>,<x ctype="x-ng_container" equiv-text="&lt;ng-container *ngIf=&quot;network.val === 'liquid'&quot;&gt; " id="START_TAG_NG_CONTAINER"/><x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>proof<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>,<x ctype="x-ng_container" equiv-text="&lt;/ng-container&gt; " id="CLOSE_TAG_NG_CONTAINER"/> and <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>previousblockhash<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>.</source> <source>Returns details about a block. Available fields: <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>id<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>height<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>version<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>timestamp<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>bits<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>nonce<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>merkle_root<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>tx_count<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>size<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>weight<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>,<x ctype="x-ng_container" equiv-text="&lt;ng-container *ngIf=&quot;network.val === 'liquid'&quot;&gt; " id="START_TAG_NG_CONTAINER"/><x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>proof<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>,<x ctype="x-ng_container" equiv-text="&lt;/ng-container&gt; " id="CLOSE_TAG_NG_CONTAINER"/> and <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>previousblockhash<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>.</source>
<target>Renvoie des détails sur un bloc. Champs disponibles: <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>id<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>height<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>version<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>timestamp<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>bits<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>nonce<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>merkle_root<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>tx_count<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>size<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>weight<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>,<x ctype="x-ng_container" equiv-text="&lt;ng-container *ngIf=&quot;network.val === 'liquid'&quot;&gt; " id="START_TAG_NG_CONTAINER"/><x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>proof<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>,<x ctype="x-ng_container" equiv-text="&lt;/ng-container&gt; " id="CLOSE_TAG_NG_CONTAINER"/> et <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>previousblockhash<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">85</context> <context context-type="linenumber">85</context>
@ -2199,6 +2208,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="8a4a4b8f308aaaeae782f7c9847013348d969c2d"> <trans-unit datatype="html" id="8a4a4b8f308aaaeae782f7c9847013348d969c2d">
<source>Transactions</source> <source>Transactions</source>
<target>Transactions</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">129</context> <context context-type="linenumber">129</context>
@ -2208,6 +2218,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="a8ea1ec66e7bb9f92e87ae5482e50748baafffd2"> <trans-unit datatype="html" id="a8ea1ec66e7bb9f92e87ae5482e50748baafffd2">
<source>Returns details about a transaction. Available fields: <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>txid<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>version<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>locktime<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>size<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>weight<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>fee<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>vin<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>vout<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, and <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>status<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>.</source> <source>Returns details about a transaction. Available fields: <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>txid<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>version<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>locktime<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>size<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>weight<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>fee<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>vin<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>vout<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, and <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>status<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>.</source>
<target>Renvoie des détails sur un bloc. Champs disponibles: <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>txid<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>version<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>locktime<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>size<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>weight<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>fee<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>vin<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>vout<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, et<x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>status<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">139</context> <context context-type="linenumber">139</context>
@ -2215,6 +2226,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="7e784cfa5833e7b54d4dfc723fabde94f66ebde3"> <trans-unit datatype="html" id="7e784cfa5833e7b54d4dfc723fabde94f66ebde3">
<source>Returns the confirmation status of a transaction. Available fields: <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>confirmed<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> (boolean), <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>block_height<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> (optional), and <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>block_hash<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> (optional).</source> <source>Returns the confirmation status of a transaction. Available fields: <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>confirmed<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> (boolean), <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>block_height<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> (optional), and <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>block_hash<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> (optional).</source>
<target>Renvoie l'état de confirmation d'une transaction. Champs disponibles:<x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>confirmed<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> (booléen), <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>block_height<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> (optionnel ), et <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>block_hash<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> (optionnel).</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">143</context> <context context-type="linenumber">143</context>
@ -2222,6 +2234,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="34c21c242665d87bf22645c90f571bd5078eac93"> <trans-unit datatype="html" id="34c21c242665d87bf22645c90f571bd5078eac93">
<source>Returns a transaction serialized as hex.</source> <source>Returns a transaction serialized as hex.</source>
<target>Renvoie une transaction sérialisée en hexadécimal.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">147</context> <context context-type="linenumber">147</context>
@ -2229,6 +2242,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="fd42ee72bb64b93578d7d2142ae50796d0056d7a"> <trans-unit datatype="html" id="fd42ee72bb64b93578d7d2142ae50796d0056d7a">
<source>Returns a transaction as binary data.</source> <source>Returns a transaction as binary data.</source>
<target>Renvoie une transaction sous forme de données binaires.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">151</context> <context context-type="linenumber">151</context>
@ -2236,6 +2250,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="a57953199686e9980df838cb25edb51691941ac5"> <trans-unit datatype="html" id="a57953199686e9980df838cb25edb51691941ac5">
<source>Returns a merkle inclusion proof for the transaction using <x ctype="x-a" equiv-text="&lt;a href=&quot;https://electrumx.readthedocs.io/en/latest/protocol-methods.html#blockchain-transaction-get-merkle&quot;&gt;" id="START_LINK"/>Electrum's blockchain.transaction.get_merkle format.<x ctype="x-a" equiv-text="&lt;/a&gt;" id="CLOSE_LINK"/></source> <source>Returns a merkle inclusion proof for the transaction using <x ctype="x-a" equiv-text="&lt;a href=&quot;https://electrumx.readthedocs.io/en/latest/protocol-methods.html#blockchain-transaction-get-merkle&quot;&gt;" id="START_LINK"/>Electrum's blockchain.transaction.get_merkle format.<x ctype="x-a" equiv-text="&lt;/a&gt;" id="CLOSE_LINK"/></source>
<target>Renvoie une preuve d'inclusion merkle pour la transaction en utilisant le format<x ctype="x-a" equiv-text="&lt;a href=&quot;https://electrumx.readthedocs.io/en/latest/protocol-methods.html#blockchain-transaction-get-merkle&quot;&gt;" id="START_LINK"/>blockchain.transaction.get_merkle d'Electrum<x ctype="x-a" equiv-text="&lt;/a&gt;" id="CLOSE_LINK"/></target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">159</context> <context context-type="linenumber">159</context>
@ -2243,6 +2258,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="fe9a40b2ff9674b4ab7d82624ffed340c9ee5b89"> <trans-unit datatype="html" id="fe9a40b2ff9674b4ab7d82624ffed340c9ee5b89">
<source>Returns the spending status of a transaction output. Available fields: <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>spent<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> (boolean), <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>txid<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> (optional), <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>vin<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> (optional), and <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>status<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> (optional, the status of the spending tx).</source> <source>Returns the spending status of a transaction output. Available fields: <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>spent<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> (boolean), <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>txid<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> (optional), <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>vin<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> (optional), and <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>status<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> (optional, the status of the spending tx).</source>
<target>Renvoie l'état des dépenses d'une sortie de transaction. Champs disponibles:<x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>spent<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> (booléen), <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>txid<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> (optionnel ), <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>vin<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> (optionnel ), et <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>status<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> (optionnel , l'état de la tx de dépense).</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">163</context> <context context-type="linenumber">163</context>
@ -2250,6 +2266,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="0358265aa88614843e1f5e887b94c673808c84f1"> <trans-unit datatype="html" id="0358265aa88614843e1f5e887b94c673808c84f1">
<source>Returns the spending status of all transaction outputs.</source> <source>Returns the spending status of all transaction outputs.</source>
<target>Renvoie l'état des dépenses de toutes les sorties de transaction.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">167</context> <context context-type="linenumber">167</context>
@ -2257,6 +2274,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="01723473ecc53cab60ef1b37dc39d8941994d56f"> <trans-unit datatype="html" id="01723473ecc53cab60ef1b37dc39d8941994d56f">
<source>Broadcast a raw transaction to the network. The transaction should be provided as hex in the request body. The <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>txid<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> will be returned on success.</source> <source>Broadcast a raw transaction to the network. The transaction should be provided as hex in the request body. The <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>txid<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> will be returned on success.</source>
<target>Diffusez une transaction brute sur le réseau. La transaction doit être fournie en hexadécimal dans le corps de la requête. Le <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>txid<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> sera retourné en cas de succès.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">171</context> <context context-type="linenumber">171</context>
@ -2264,6 +2282,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="d51106cc898981e9862d35a4db40796f0cf464f8"> <trans-unit datatype="html" id="d51106cc898981e9862d35a4db40796f0cf464f8">
<source>Returns a merkle inclusion proof for the transaction using <x ctype="x-a" equiv-text="&lt;a href=&quot;https://bitcoin.org/en/glossary/merkle-block&quot;&gt;" id="START_LINK"/>bitcoind's merkleblock<x ctype="x-a" equiv-text="&lt;/a&gt; " id="CLOSE_LINK"/> format.</source> <source>Returns a merkle inclusion proof for the transaction using <x ctype="x-a" equiv-text="&lt;a href=&quot;https://bitcoin.org/en/glossary/merkle-block&quot;&gt;" id="START_LINK"/>bitcoind's merkleblock<x ctype="x-a" equiv-text="&lt;/a&gt; " id="CLOSE_LINK"/> format.</source>
<target>Renvoie une preuve d'inclusion merkle pour la transaction en utilisant le format<x ctype="x-a" equiv-text="&lt;a href=&quot;https://bitcoin.org/en/glossary/merkle-block&quot;&gt;" id="START_LINK"/>merkleblock de bitcoind<x ctype="x-a" equiv-text="&lt;/a&gt; " id="CLOSE_LINK"/>.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">155</context> <context context-type="linenumber">155</context>
@ -2271,6 +2290,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="9885457131a86be85a59c5366767e82c12d0a288"> <trans-unit datatype="html" id="9885457131a86be85a59c5366767e82c12d0a288">
<source>Addresses</source> <source>Addresses</source>
<target>Adresses</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">179</context> <context context-type="linenumber">179</context>
@ -2280,6 +2300,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="e12cd52eaa77b446ba97436c145b59741151adf3"> <trans-unit datatype="html" id="e12cd52eaa77b446ba97436c145b59741151adf3">
<source>Returns details about an address. Available fields: <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>address<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>chain_stats<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, and <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>mempool_stats<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>. <x equiv-text="{{ '{' }}" id="INTERPOLATION"/>chain,mempool<x equiv-text="{{ '}' }}" id="INTERPOLATION_1"/>_stats each contain an object with <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>tx_count<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>funded_txo_count<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>funded_txo_sum<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>spent_txo_count<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, and <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>spent_txo_sum<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>.</source> <source>Returns details about an address. Available fields: <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>address<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>chain_stats<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, and <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>mempool_stats<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>. <x equiv-text="{{ '{' }}" id="INTERPOLATION"/>chain,mempool<x equiv-text="{{ '}' }}" id="INTERPOLATION_1"/>_stats each contain an object with <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>tx_count<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>funded_txo_count<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>funded_txo_sum<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>spent_txo_count<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, and <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>spent_txo_sum<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>.</source>
<target>Renvoie des détails sur une adresse. Champs disponibles:<x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>address<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>chain_stats<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, et <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>mempool_stats<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>. <x equiv-text="{{ '{' }}" id="INTERPOLATION"/>chain,mempool<x equiv-text="{{ '}' }}" id="INTERPOLATION_1"/>_stats each contain an object with <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>tx_count<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>funded_txo_count<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>funded_txo_sum<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>spent_txo_count<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, et <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>spent_txo_sum<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">189</context> <context context-type="linenumber">189</context>
@ -2287,6 +2308,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="bdc501d28e02e07f692859977fdaee8c52eea401"> <trans-unit datatype="html" id="bdc501d28e02e07f692859977fdaee8c52eea401">
<source>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 <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>:last_seen_txid<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> (see below). </source> <source>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 <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>:last_seen_txid<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> (see below). </source>
<target>Obtenez l'historique des transactions pour l'adresse/scripthash spécifié, trié par le plus récent en premier. Renvoie jusqu'à 50 transactions mempool plus les 25 premières transactions confirmées. Vous pouvez demander pour plus de transactions confirmées en utilisant<x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>:last_seen_txid<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> (voir ci-dessous). </target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">193,194</context> <context context-type="linenumber">193,194</context>
@ -2294,6 +2316,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="5676910aa3ffb568079a7499b366744fe3fd87ea"> <trans-unit datatype="html" id="5676910aa3ffb568079a7499b366744fe3fd87ea">
<source>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.</source> <source>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.</source>
<target>Obtenez l'historique des transactions confirmé pour l'adresse/scripthash spécifié, trié par le plus récent en premier. Renvoie 25 transactions par page. Dadditionnel peut être demandé en spécifiant le dernier txid vu par la requête précédente.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">197</context> <context context-type="linenumber">197</context>
@ -2301,6 +2324,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="f10009779c64e19e20414fae506f27118420aa33"> <trans-unit datatype="html" id="f10009779c64e19e20414fae506f27118420aa33">
<source>Get unconfirmed transaction history for the specified address/scripthash. Returns up to 50 transactions (no paging).</source> <source>Get unconfirmed transaction history for the specified address/scripthash. Returns up to 50 transactions (no paging).</source>
<target>Obtenez l'historique des transactions non confirmées pour l'adresse/scripthash spécifié. Renvoie jusqu'à 50 transactions (sans pagination).</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">201</context> <context context-type="linenumber">201</context>
@ -2308,6 +2332,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="4eb50557085c85bfca995b6ee0de56ec3f5e97eb"> <trans-unit datatype="html" id="4eb50557085c85bfca995b6ee0de56ec3f5e97eb">
<source>Get the list of unspent transaction outputs associated with the address/scripthash. Available fields: <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>txid<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>vout<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>value<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, and <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>status<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/> (with the status of the funding tx).<x ctype="x-ng_container" equiv-text="&lt;ng-container *ngIf=&quot;network.val === 'liquid'&quot;&gt;" id="START_TAG_NG_CONTAINER"/>There is also a <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>valuecommitment<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/> field that may appear in place of <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>value<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, plus the following additional fields: <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>asset<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>/<x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>assetcommitment<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>nonce<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>/<x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>noncecommitment<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>surjection_proof<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, and <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>range_proof<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>.<x ctype="x-ng_container" equiv-text="&lt;/ng-container&gt;" id="CLOSE_TAG_NG_CONTAINER"/></source> <source>Get the list of unspent transaction outputs associated with the address/scripthash. Available fields: <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>txid<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>vout<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>value<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, and <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>status<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/> (with the status of the funding tx).<x ctype="x-ng_container" equiv-text="&lt;ng-container *ngIf=&quot;network.val === 'liquid'&quot;&gt;" id="START_TAG_NG_CONTAINER"/>There is also a <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>valuecommitment<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/> field that may appear in place of <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>value<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, plus the following additional fields: <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>asset<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>/<x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>assetcommitment<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>nonce<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>/<x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>noncecommitment<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>surjection_proof<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, and <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>range_proof<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>.<x ctype="x-ng_container" equiv-text="&lt;/ng-container&gt;" id="CLOSE_TAG_NG_CONTAINER"/></source>
<target>Obtenez la liste des sorties de transaction non dépensées associées à l'adresse/scripthash. Champs disponibles:<x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>txid<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>vout<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>value<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, et <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>status<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/> (avec l'état de la tx financières).<x ctype="x-ng_container" equiv-text="&lt;ng-container *ngIf=&quot;network.val === 'liquid'&quot;&gt;" id="START_TAG_NG_CONTAINER"/>Il y a aussi <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>valuecommitment<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/> champ qui peut apparaître à la place de<x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>value<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, ainsi que les champs supplémentaires suivants: <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>asset<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>/<x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>assetcommitment<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>nonce<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>/<x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>noncecommitment<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>surjection_proof<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, et <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>range_proof<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>.<x ctype="x-ng_container" equiv-text="&lt;/ng-container&gt;" id="CLOSE_TAG_NG_CONTAINER"/></target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">205</context> <context context-type="linenumber">205</context>
@ -2315,6 +2340,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="b861fd11d5aa8772acc40c5412621b6dd52378e8"> <trans-unit datatype="html" id="b861fd11d5aa8772acc40c5412621b6dd52378e8">
<source>Assets</source> <source>Assets</source>
<target>Actifs</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">213</context> <context context-type="linenumber">213</context>
@ -2324,6 +2350,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="b885a96aa1a96bff3f603dab79746f90eef5cbdf"> <trans-unit datatype="html" id="b885a96aa1a96bff3f603dab79746f90eef5cbdf">
<source>Returns information about a Liquid asset.</source> <source>Returns information about a Liquid asset.</source>
<target>Renvoie des informations sur un actif Liquide.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">223</context> <context context-type="linenumber">223</context>
@ -2331,6 +2358,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="4a0bf20cf26a4f4a387bed5c3d47c23294cb606e"> <trans-unit datatype="html" id="4a0bf20cf26a4f4a387bed5c3d47c23294cb606e">
<source>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.</source> <source>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.</source>
<target>Renvoie les transactions associées à l'actif Liquide spécifié. Pour l'actif natif du réseau, renvoie une liste des transactions peg in, peg out et brûler. Pour les actifs émis par l'utilisateur, renvoie une liste des transactions d'émission, de réémission et brûler. N'inclut pas les transactions régulières transférant cet actif.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">227</context> <context context-type="linenumber">227</context>
@ -2338,6 +2366,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="44a238eb28145f904f3a5bbfd4050987668f78d0"> <trans-unit datatype="html" id="44a238eb28145f904f3a5bbfd4050987668f78d0">
<source>Get the current total supply of the specified asset. For the native asset (L-BTC), this is calculated as [chain,mempool]_stats.peg_in_amount - [chain,mempool]_stats.peg_out_amount - [chain,mempool]_stats.burned_amount. For issued assets, this is calculated as [chain,mempool]_stats.issued_amount - [chain,mempool]_stats.burned_amount. Not available for assets with blinded issuances. If /decimal is specified, returns the supply as a decimal according to the asset's divisibility. Otherwise, returned in base units.</source> <source>Get the current total supply of the specified asset. For the native asset (L-BTC), this is calculated as [chain,mempool]_stats.peg_in_amount - [chain,mempool]_stats.peg_out_amount - [chain,mempool]_stats.burned_amount. For issued assets, this is calculated as [chain,mempool]_stats.issued_amount - [chain,mempool]_stats.burned_amount. Not available for assets with blinded issuances. If /decimal is specified, returns the supply as a decimal according to the asset's divisibility. Otherwise, returned in base units.</source>
<target>Obtenez l'approvisionnement total actuel de l'actif spécifié. Pour l'actif natif (L-BTC), ceci est calculé comme suit:[chain,mempool]_stats.peg_in_amount - [chain,mempool]_stats.peg_out_amount - [chain,mempool]_stats.burned_amount. Pour les actifs émis, cela est calculé comme suit: [chain,mempool]_stats.issued_amount - [chain,mempool]_stats.burned_amount. Non disponible pour les actifs avec des émissions aveugle. Si /decimal est spécifié, renvoie l'approvisionnement sous forme de décimale en fonction de la divisibilité de l'actif. Sinon, retourné en unités de base.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">231</context> <context context-type="linenumber">231</context>
@ -2345,6 +2374,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="a29245620333b4788dee4c478c327d99846513c6"> <trans-unit datatype="html" id="a29245620333b4788dee4c478c327d99846513c6">
<source>BSQ</source> <source>BSQ</source>
<target>BSQ</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">238</context> <context context-type="linenumber">238</context>
@ -2354,6 +2384,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="088d201b8d0589637d7aa64457a6cdd97a5d0f11"> <trans-unit datatype="html" id="088d201b8d0589637d7aa64457a6cdd97a5d0f11">
<source>Returns statistics about all Bisq transactions.</source> <source>Returns statistics about all Bisq transactions.</source>
<target>Renvoie des statistiques sur toutes les transactions Bisq.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">248</context> <context context-type="linenumber">248</context>
@ -2361,6 +2392,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="5d67fbdf2986058351024c16d526c444475ead37"> <trans-unit datatype="html" id="5d67fbdf2986058351024c16d526c444475ead37">
<source>Returns details about a Bisq transaction.</source> <source>Returns details about a Bisq transaction.</source>
<target>Renvoie les détails d'une transaction Bisq.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">252</context> <context context-type="linenumber">252</context>
@ -2368,6 +2400,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="e9a58657c410cf65dba4c3cdfb1af7099dedb241"> <trans-unit datatype="html" id="e9a58657c410cf65dba4c3cdfb1af7099dedb241">
<source>Returns :length of latest Bisq transactions, starting from :index.</source> <source>Returns :length of latest Bisq transactions, starting from :index.</source>
<target>Renvoie :length des dernières transactions Bisq, à partir de :index.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">256</context> <context context-type="linenumber">256</context>
@ -2375,6 +2408,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="e7e7c97535181ba299bc0ad02904f851088a0dd5"> <trans-unit datatype="html" id="e7e7c97535181ba299bc0ad02904f851088a0dd5">
<source>Returns all Bisq transactions that exist in a Bitcoin block.</source> <source>Returns all Bisq transactions that exist in a Bitcoin block.</source>
<target>Renvoie toutes les transactions Bisq qui existent dans un bloc Bitcoin.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">260</context> <context context-type="linenumber">260</context>
@ -2382,6 +2416,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="6fdafaace68cb298c6281e89eedc704f3d8f3f6a"> <trans-unit datatype="html" id="6fdafaace68cb298c6281e89eedc704f3d8f3f6a">
<source>Returns :length Bitcoin blocks that contain Bisq transactions, starting from :index.</source> <source>Returns :length Bitcoin blocks that contain Bisq transactions, starting from :index.</source>
<target>Renvoie :longueur des blocs Bitcoin contenant des transactions Bisq, à partir de :index.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">264</context> <context context-type="linenumber">264</context>
@ -2389,6 +2424,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="ac234ff46c8f499399a20fb5d74005094de7cdcd"> <trans-unit datatype="html" id="ac234ff46c8f499399a20fb5d74005094de7cdcd">
<source>Returns the most recently processed Bitcoin block height processed by Bisq.</source> <source>Returns the most recently processed Bitcoin block height processed by Bisq.</source>
<target>Renvoie la hauteur de bloc Bitcoin la plus récemment traitée par Bisq.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">268</context> <context context-type="linenumber">268</context>
@ -2396,6 +2432,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="9604b870a64e6635062828425fcb801371e716ad"> <trans-unit datatype="html" id="9604b870a64e6635062828425fcb801371e716ad">
<source>Returns all Bisq transactions belonging to a Bitcoin address, with 'B' prefixed in front of the address.</source> <source>Returns all Bisq transactions belonging to a Bitcoin address, with 'B' prefixed in front of the address.</source>
<target>Renvoie toutes les transactions Bisq appartenant à une adresse Bitcoin, avec le préfixe 'B' devant l'adresse.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">272</context> <context context-type="linenumber">272</context>
@ -2403,6 +2440,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="clipboard.copied-message"> <trans-unit datatype="html" id="clipboard.copied-message">
<source>Copied!</source> <source>Copied!</source>
<target>Copié!</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/clipboard/clipboard.component.ts</context> <context context-type="sourcefile">src/app/components/clipboard/clipboard.component.ts</context>
<context context-type="linenumber">15</context> <context context-type="linenumber">15</context>
@ -2410,6 +2448,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="f85c05147b720576e50336cf26f63d3b05601699"> <trans-unit datatype="html" id="f85c05147b720576e50336cf26f63d3b05601699">
<source>This transaction saved <x equiv-text="ction saved {{ segwitGains.realizedGains * 100 | number:" id="INTERPOLATION"/>% on fees by using native SegWit-Bech32</source> <source>This transaction saved <x equiv-text="ction saved {{ segwitGains.realizedGains * 100 | number:" id="INTERPOLATION"/>% on fees by using native SegWit-Bech32</source>
<target>Cette transaction a économisé <x equiv-text="ction saved {{ segwitGains.realizedGains * 100 | number:" id="INTERPOLATION"/>% de frais en utilisant SegWit-Bech32 natif</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/tx-features/tx-features.component.html</context> <context context-type="sourcefile">src/app/components/tx-features/tx-features.component.html</context>
<context context-type="linenumber">1</context> <context context-type="linenumber">1</context>
@ -2436,6 +2475,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="975f46d122f2ca0a187308399a58b44d61ef08eb"> <trans-unit datatype="html" id="975f46d122f2ca0a187308399a58b44d61ef08eb">
<source>This transaction saved <x equiv-text="ction saved {{ segwitGains.realizedGains * 100 | number:" id="INTERPOLATION"/>% on fees by using SegWit and could save <x equiv-text=" could save {{ segwitGains.potentialBech32Gains * 100 | number " id="INTERPOLATION_1"/>% more by fully upgrading to native SegWit-Bech32</source> <source>This transaction saved <x equiv-text="ction saved {{ segwitGains.realizedGains * 100 | number:" id="INTERPOLATION"/>% on fees by using SegWit and could save <x equiv-text=" could save {{ segwitGains.potentialBech32Gains * 100 | number " id="INTERPOLATION_1"/>% more by fully upgrading to native SegWit-Bech32</source>
<target>Cette transaction a économisé <x equiv-text="ction saved {{ segwitGains.realizedGains * 100 | number:" id="INTERPOLATION"/>% de frais en utilisant SegWit et pourrait économisé <x equiv-text=" could save {{ segwitGains.potentialBech32Gains * 100 | number " id="INTERPOLATION_1"/> % de plus en passant entièrement à SegWit-Bech32 natif</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/tx-features/tx-features.component.html</context> <context context-type="sourcefile">src/app/components/tx-features/tx-features.component.html</context>
<context context-type="linenumber">3</context> <context context-type="linenumber">3</context>
@ -2444,6 +2484,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="1be04d5407059059b596f72696a3d1704ce9c0ef"> <trans-unit datatype="html" id="1be04d5407059059b596f72696a3d1704ce9c0ef">
<source>This transaction could save <x equiv-text=" could save {{ segwitGains.potentialBech32Gains * 100 | number " id="INTERPOLATION"/>% on fees by upgrading to native SegWit-Bech32 or <x equiv-text="t-Bech32 or {{ segwitGains.potentialP2shGains * 100 | number:" id="INTERPOLATION_1"/>% by upgrading to SegWit-P2SH</source> <source>This transaction could save <x equiv-text=" could save {{ segwitGains.potentialBech32Gains * 100 | number " id="INTERPOLATION"/>% on fees by upgrading to native SegWit-Bech32 or <x equiv-text="t-Bech32 or {{ segwitGains.potentialP2shGains * 100 | number:" id="INTERPOLATION_1"/>% by upgrading to SegWit-P2SH</source>
<target>Cette transaction pourrait économiser <x equiv-text=" could save {{ segwitGains.potentialBech32Gains * 100 | number " id="INTERPOLATION"/>% de frais en passant à SegWit-Bech32 natif ou <x equiv-text="t-Bech32 or {{ segwitGains.potentialP2shGains * 100 | number:" id="INTERPOLATION_1"/>% en passant à SegWit-P2SH</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/tx-features/tx-features.component.html</context> <context context-type="sourcefile">src/app/components/tx-features/tx-features.component.html</context>
<context context-type="linenumber">5</context> <context context-type="linenumber">5</context>
@ -2452,6 +2493,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="5531c86f8e09b83930f66566fb85baf3057e2f51"> <trans-unit datatype="html" id="5531c86f8e09b83930f66566fb85baf3057e2f51">
<source>This transaction support Replace-By-Fee (RBF) allowing fee bumping</source> <source>This transaction support Replace-By-Fee (RBF) allowing fee bumping</source>
<target>Cette transaction prend en charge le Replace-By-Fee/remplacement par frais (RBF), permettant une augmentation des frais</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/tx-features/tx-features.component.html</context> <context context-type="sourcefile">src/app/components/tx-features/tx-features.component.html</context>
<context context-type="linenumber">8</context> <context context-type="linenumber">8</context>
@ -2460,6 +2502,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="f0e7d6d900658ee5ce66d8fef3637caf13891c53"> <trans-unit datatype="html" id="f0e7d6d900658ee5ce66d8fef3637caf13891c53">
<source>RBF</source> <source>RBF</source>
<target>RBF</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/tx-features/tx-features.component.html</context> <context context-type="sourcefile">src/app/components/tx-features/tx-features.component.html</context>
<context context-type="linenumber">8</context> <context context-type="linenumber">8</context>
@ -2479,6 +2522,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="f1b50928719b5261ccc81e9ec3ea4cc074018f89"> <trans-unit datatype="html" id="f1b50928719b5261ccc81e9ec3ea4cc074018f89">
<source>Only ~<x equiv-text="ltip=&quot;Only ~{{ median" id="INTERPOLATION"/> sat/vB was needed to get into this block</source> <source>Only ~<x equiv-text="ltip=&quot;Only ~{{ median" id="INTERPOLATION"/> sat/vB was needed to get into this block</source>
<target>Seulement ~ <x equiv-text="ltip=&quot;Only ~{{ median" id="INTERPOLATION"/>sat/vB était nécessaire pour entrer dans ce bloc</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/tx-fee-rating/tx-fee-rating.component.html</context> <context context-type="sourcefile">src/app/components/tx-fee-rating/tx-fee-rating.component.html</context>
<context context-type="linenumber">2</context> <context context-type="linenumber">2</context>
@ -2491,6 +2535,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="0fa66b0c410bef320d3f370d7c98c51754b5f28f"> <trans-unit datatype="html" id="0fa66b0c410bef320d3f370d7c98c51754b5f28f">
<source>Overpaid <x equiv-text="{{ overpaidTimes }}" id="INTERPOLATION"/>x</source> <source>Overpaid <x equiv-text="{{ overpaidTimes }}" id="INTERPOLATION"/>x</source>
<target>Surpayer <x equiv-text="{{ overpaidTimes }}" id="INTERPOLATION"/>x</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/tx-fee-rating/tx-fee-rating.component.html</context> <context context-type="sourcefile">src/app/components/tx-fee-rating/tx-fee-rating.component.html</context>
<context context-type="linenumber">2</context> <context context-type="linenumber">2</context>
@ -2500,6 +2545,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="f948156b1396cbbf78bbbce437c4d73a1f0770f3"> <trans-unit datatype="html" id="f948156b1396cbbf78bbbce437c4d73a1f0770f3">
<source>Overpaid <x equiv-text="{{ overpaidTimes }}" id="INTERPOLATION"/>x</source> <source>Overpaid <x equiv-text="{{ overpaidTimes }}" id="INTERPOLATION"/>x</source>
<target>Surpayer<x equiv-text="{{ overpaidTimes }}" id="INTERPOLATION"/> 1x</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/tx-fee-rating/tx-fee-rating.component.html</context> <context context-type="sourcefile">src/app/components/tx-fee-rating/tx-fee-rating.component.html</context>
<context context-type="linenumber">3</context> <context context-type="linenumber">3</context>
@ -2509,6 +2555,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="time-since.just-now"> <trans-unit datatype="html" id="time-since.just-now">
<source>Just now</source> <source>Just now</source>
<target>À l'instant même </target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context> <context context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context>
<context context-type="linenumber">49</context> <context context-type="linenumber">49</context>
@ -2516,6 +2563,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="time-since.year.ago"> <trans-unit datatype="html" id="time-since.year.ago">
<source><x equiv-text="counter" id="INTERPOLATION"/> year ago</source> <source><x equiv-text="counter" id="INTERPOLATION"/> year ago</source>
<target>il y a <x equiv-text="counter" id="INTERPOLATION"/> an</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context> <context context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context>
<context context-type="linenumber">58</context> <context context-type="linenumber">58</context>
@ -2523,6 +2571,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="time-since.month.ago"> <trans-unit datatype="html" id="time-since.month.ago">
<source><x equiv-text="counter" id="INTERPOLATION"/> month ago</source> <source><x equiv-text="counter" id="INTERPOLATION"/> month ago</source>
<target>il y a <x equiv-text="counter" id="INTERPOLATION"/> mois</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context> <context context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context>
<context context-type="linenumber">59</context> <context context-type="linenumber">59</context>
@ -2530,6 +2579,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="time-since.week.ago"> <trans-unit datatype="html" id="time-since.week.ago">
<source><x equiv-text="counter" id="INTERPOLATION"/> week ago</source> <source><x equiv-text="counter" id="INTERPOLATION"/> week ago</source>
<target>il y a <x equiv-text="counter" id="INTERPOLATION"/> semaine</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context> <context context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context>
<context context-type="linenumber">60</context> <context context-type="linenumber">60</context>
@ -2537,6 +2587,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="time-since.day.ago"> <trans-unit datatype="html" id="time-since.day.ago">
<source><x equiv-text="counter" id="INTERPOLATION"/> day ago</source> <source><x equiv-text="counter" id="INTERPOLATION"/> day ago</source>
<target>il y a <x equiv-text="counter" id="INTERPOLATION"/> jour</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context> <context context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context>
<context context-type="linenumber">61</context> <context context-type="linenumber">61</context>
@ -2544,6 +2595,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="time-since.hour.ago"> <trans-unit datatype="html" id="time-since.hour.ago">
<source><x equiv-text="counter" id="INTERPOLATION"/> hour ago</source> <source><x equiv-text="counter" id="INTERPOLATION"/> hour ago</source>
<target>il y a <x equiv-text="counter" id="INTERPOLATION"/> heure</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context> <context context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context>
<context context-type="linenumber">62</context> <context context-type="linenumber">62</context>
@ -2551,6 +2603,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="time-since.min.ago"> <trans-unit datatype="html" id="time-since.min.ago">
<source><x equiv-text="counter" id="INTERPOLATION"/> min ago</source> <source><x equiv-text="counter" id="INTERPOLATION"/> min ago</source>
<target>il y a <x equiv-text="counter" id="INTERPOLATION"/> min</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context> <context context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context>
<context context-type="linenumber">65</context> <context context-type="linenumber">65</context>
@ -2558,6 +2611,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="time-since.minute.ago"> <trans-unit datatype="html" id="time-since.minute.ago">
<source><x equiv-text="counter" id="INTERPOLATION"/> minute ago</source> <source><x equiv-text="counter" id="INTERPOLATION"/> minute ago</source>
<target>il y a <x equiv-text="counter" id="INTERPOLATION"/> minute</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context> <context context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context>
<context context-type="linenumber">67</context> <context context-type="linenumber">67</context>
@ -2565,6 +2619,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="time-since.sec.ago"> <trans-unit datatype="html" id="time-since.sec.ago">
<source><x equiv-text="counter" id="INTERPOLATION"/> sec ago</source> <source><x equiv-text="counter" id="INTERPOLATION"/> sec ago</source>
<target>il y a <x equiv-text="counter" id="INTERPOLATION"/> sec</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context> <context context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context>
<context context-type="linenumber">70</context> <context context-type="linenumber">70</context>
@ -2572,6 +2627,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="time-since.second.ago"> <trans-unit datatype="html" id="time-since.second.ago">
<source><x equiv-text="counter" id="INTERPOLATION"/> second ago</source> <source><x equiv-text="counter" id="INTERPOLATION"/> second ago</source>
<target>il y a <x equiv-text="counter" id="INTERPOLATION"/> seconde</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context> <context context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context>
<context context-type="linenumber">72</context> <context context-type="linenumber">72</context>
@ -2579,6 +2635,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="time-since.years.ago"> <trans-unit datatype="html" id="time-since.years.ago">
<source><x equiv-text="counter" id="INTERPOLATION"/> years ago</source> <source><x equiv-text="counter" id="INTERPOLATION"/> years ago</source>
<target> il y a <x equiv-text="counter" id="INTERPOLATION"/> ans</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context> <context context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context>
<context context-type="linenumber">76</context> <context context-type="linenumber">76</context>
@ -2586,6 +2643,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="time-since.months.ago"> <trans-unit datatype="html" id="time-since.months.ago">
<source><x equiv-text="counter" id="INTERPOLATION"/> months ago</source> <source><x equiv-text="counter" id="INTERPOLATION"/> months ago</source>
<target>il y a <x equiv-text="counter" id="INTERPOLATION"/> mois</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context> <context context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context>
<context context-type="linenumber">77</context> <context context-type="linenumber">77</context>
@ -2593,6 +2651,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="time-since.weeks.ago"> <trans-unit datatype="html" id="time-since.weeks.ago">
<source><x equiv-text="counter" id="INTERPOLATION"/> weeks ago</source> <source><x equiv-text="counter" id="INTERPOLATION"/> weeks ago</source>
<target> il y a <x equiv-text="counter" id="INTERPOLATION"/> semaines</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context> <context context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context>
<context context-type="linenumber">78</context> <context context-type="linenumber">78</context>
@ -2600,6 +2659,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="time-since.days.ago"> <trans-unit datatype="html" id="time-since.days.ago">
<source><x equiv-text="counter" id="INTERPOLATION"/> days ago</source> <source><x equiv-text="counter" id="INTERPOLATION"/> days ago</source>
<target> il y a <x equiv-text="counter" id="INTERPOLATION"/> jours</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context> <context context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context>
<context context-type="linenumber">79</context> <context context-type="linenumber">79</context>
@ -2607,6 +2667,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="time-since.hours.ago"> <trans-unit datatype="html" id="time-since.hours.ago">
<source><x equiv-text="counter" id="INTERPOLATION"/> hours ago</source> <source><x equiv-text="counter" id="INTERPOLATION"/> hours ago</source>
<target> il y a <x equiv-text="counter" id="INTERPOLATION"/> heures</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context> <context context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context>
<context context-type="linenumber">80</context> <context context-type="linenumber">80</context>
@ -2614,6 +2675,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="time-since.mins.ago"> <trans-unit datatype="html" id="time-since.mins.ago">
<source><x equiv-text="counter" id="INTERPOLATION"/> mins ago</source> <source><x equiv-text="counter" id="INTERPOLATION"/> mins ago</source>
<target>il y a <x equiv-text="counter" id="INTERPOLATION"/> mins</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context> <context context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context>
<context context-type="linenumber">83</context> <context context-type="linenumber">83</context>
@ -2621,6 +2683,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="time-since.minutes.ago"> <trans-unit datatype="html" id="time-since.minutes.ago">
<source><x equiv-text="counter" id="INTERPOLATION"/> minutes ago</source> <source><x equiv-text="counter" id="INTERPOLATION"/> minutes ago</source>
<target>il y a <x equiv-text="counter" id="INTERPOLATION"/> minutes</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context> <context context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context>
<context context-type="linenumber">85</context> <context context-type="linenumber">85</context>
@ -2628,6 +2691,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="time-since.secs.ago"> <trans-unit datatype="html" id="time-since.secs.ago">
<source><x equiv-text="counter" id="INTERPOLATION"/> secs ago</source> <source><x equiv-text="counter" id="INTERPOLATION"/> secs ago</source>
<target> il y a <x equiv-text="counter" id="INTERPOLATION"/> secs</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context> <context context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context>
<context context-type="linenumber">88</context> <context context-type="linenumber">88</context>
@ -2635,6 +2699,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="time-since.seconds.ago"> <trans-unit datatype="html" id="time-since.seconds.ago">
<source><x equiv-text="counter" id="INTERPOLATION"/> seconds ago</source> <source><x equiv-text="counter" id="INTERPOLATION"/> seconds ago</source>
<target> il y a <x equiv-text="counter" id="INTERPOLATION"/> secondes</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context> <context context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context>
<context context-type="linenumber">90</context> <context context-type="linenumber">90</context>
@ -2642,6 +2707,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="2a30a4cdb123a03facc5ab8c5b3e6d8b8dbbc3d4"> <trans-unit datatype="html" id="2a30a4cdb123a03facc5ab8c5b3e6d8b8dbbc3d4">
<source>BSQ statistics</source> <source>BSQ statistics</source>
<target>Statistiques de BSQ</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/bisq/bisq-stats/bisq-stats.component.ts</context> <context context-type="sourcefile">src/app/bisq/bisq-stats/bisq-stats.component.ts</context>
<context context-type="linenumber">24</context> <context context-type="linenumber">24</context>
@ -2653,6 +2719,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="1cde02174ca8cc2cc0b18172cd2ec598aa82dcc7"> <trans-unit datatype="html" id="1cde02174ca8cc2cc0b18172cd2ec598aa82dcc7">
<source>Existing amount</source> <source>Existing amount</source>
<target>Somme existantes</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/bisq/bisq-stats/bisq-stats.component.html</context> <context context-type="sourcefile">src/app/bisq/bisq-stats/bisq-stats.component.html</context>
<context context-type="linenumber">12</context> <context context-type="linenumber">12</context>
@ -2665,6 +2732,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="3218e6768d0d5fbc69d4931819e21451c89ba8ed"> <trans-unit datatype="html" id="3218e6768d0d5fbc69d4931819e21451c89ba8ed">
<source>Minted amount</source> <source>Minted amount</source>
<target>Somme émis</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/bisq/bisq-stats/bisq-stats.component.html</context> <context context-type="sourcefile">src/app/bisq/bisq-stats/bisq-stats.component.html</context>
<context context-type="linenumber">16</context> <context context-type="linenumber">16</context>
@ -2677,6 +2745,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="32377aae07f946d943f9361c8e518f714988c619"> <trans-unit datatype="html" id="32377aae07f946d943f9361c8e518f714988c619">
<source>Burnt amount</source> <source>Burnt amount</source>
<target>Somme brulé</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/bisq/bisq-stats/bisq-stats.component.html</context> <context context-type="sourcefile">src/app/bisq/bisq-stats/bisq-stats.component.html</context>
<context context-type="linenumber">20</context> <context context-type="linenumber">20</context>
@ -2697,6 +2766,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="7882f2edb1d4139800b276b6b0bbf5ae0b2234ef"> <trans-unit datatype="html" id="7882f2edb1d4139800b276b6b0bbf5ae0b2234ef">
<source>Addresses</source> <source>Addresses</source>
<target>Adresses</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/bisq/bisq-stats/bisq-stats.component.html</context> <context context-type="sourcefile">src/app/bisq/bisq-stats/bisq-stats.component.html</context>
<context context-type="linenumber">24</context> <context context-type="linenumber">24</context>
@ -2709,6 +2779,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="fb5b5aec9a6add4912de64b7bbc55884cc7f8e3a"> <trans-unit datatype="html" id="fb5b5aec9a6add4912de64b7bbc55884cc7f8e3a">
<source>Unspent TXOs</source> <source>Unspent TXOs</source>
<target>TXOs inutilisé</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/bisq/bisq-stats/bisq-stats.component.html</context> <context context-type="sourcefile">src/app/bisq/bisq-stats/bisq-stats.component.html</context>
<context context-type="linenumber">28</context> <context context-type="linenumber">28</context>
@ -2721,6 +2792,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="0f8a41c901cd606bd3389d8a022cee193264f20b"> <trans-unit datatype="html" id="0f8a41c901cd606bd3389d8a022cee193264f20b">
<source>Spent TXOs</source> <source>Spent TXOs</source>
<target>TXOs dépensé</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/bisq/bisq-stats/bisq-stats.component.html</context> <context context-type="sourcefile">src/app/bisq/bisq-stats/bisq-stats.component.html</context>
<context context-type="linenumber">32</context> <context context-type="linenumber">32</context>
@ -2729,6 +2801,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="4d6ee53858628de558a18623894a03c8673bce9e"> <trans-unit datatype="html" id="4d6ee53858628de558a18623894a03c8673bce9e">
<source>Price</source> <source>Price</source>
<target>Prix</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/bisq/bisq-stats/bisq-stats.component.html</context> <context context-type="sourcefile">src/app/bisq/bisq-stats/bisq-stats.component.html</context>
<context context-type="linenumber">36</context> <context context-type="linenumber">36</context>
@ -2741,6 +2814,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="b8552f7d0a57c0cc7e63eb57d3371ea35a8bbfd3"> <trans-unit datatype="html" id="b8552f7d0a57c0cc7e63eb57d3371ea35a8bbfd3">
<source>Market cap</source> <source>Market cap</source>
<target>Capitalisation boursière</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/bisq/bisq-stats/bisq-stats.component.html</context> <context context-type="sourcefile">src/app/bisq/bisq-stats/bisq-stats.component.html</context>
<context context-type="linenumber">40</context> <context context-type="linenumber">40</context>
@ -2753,6 +2827,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="bisq-address.component.browser-title"> <trans-unit datatype="html" id="bisq-address.component.browser-title">
<source>Address: <x equiv-text="this.addressString" id="INTERPOLATION"/></source> <source>Address: <x equiv-text="this.addressString" id="INTERPOLATION"/></source>
<target>Adresse: <x equiv-text="this.addressString" id="INTERPOLATION"/></target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/bisq/bisq-address/bisq-address.component.ts</context> <context context-type="sourcefile">src/app/bisq/bisq-address/bisq-address.component.ts</context>
<context context-type="linenumber">39</context> <context context-type="linenumber">39</context>
@ -2760,6 +2835,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="a1daf43d26259bffdd5eb2d405c61583540b113b"> <trans-unit datatype="html" id="a1daf43d26259bffdd5eb2d405c61583540b113b">
<source>Confirmed</source> <source>Confirmed</source>
<target>Confirmé</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/bisq/bisq-blocks/bisq-blocks.component.html</context> <context context-type="sourcefile">src/app/bisq/bisq-blocks/bisq-blocks.component.html</context>
<context context-type="linenumber">13</context> <context context-type="linenumber">13</context>
@ -2772,6 +2848,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="23b4db80cfba2937f6b087d8776cb5cd6725a16b"> <trans-unit datatype="html" id="23b4db80cfba2937f6b087d8776cb5cd6725a16b">
<source>Inputs</source> <source>Inputs</source>
<target>Entrées</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/bisq/bisq-transaction-details/bisq-transaction-details.component.html</context> <context context-type="sourcefile">src/app/bisq/bisq-transaction-details/bisq-transaction-details.component.html</context>
<context context-type="linenumber">7</context> <context context-type="linenumber">7</context>
@ -2780,6 +2857,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="93883f08c5e22b14770da46e1a5b724bab7d43fb"> <trans-unit datatype="html" id="93883f08c5e22b14770da46e1a5b724bab7d43fb">
<source>Outputs</source> <source>Outputs</source>
<target>Sorties</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/bisq/bisq-transaction-details/bisq-transaction-details.component.html</context> <context context-type="sourcefile">src/app/bisq/bisq-transaction-details/bisq-transaction-details.component.html</context>
<context context-type="linenumber">11</context> <context context-type="linenumber">11</context>
@ -2788,6 +2866,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="8fe73a4787b8068b2ba61f54ab7e0f9af2ea1fc9"> <trans-unit datatype="html" id="8fe73a4787b8068b2ba61f54ab7e0f9af2ea1fc9">
<source>Version</source> <source>Version</source>
<target>Version</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/bisq/bisq-transaction-details/bisq-transaction-details.component.html</context> <context context-type="sourcefile">src/app/bisq/bisq-transaction-details/bisq-transaction-details.component.html</context>
<context context-type="linenumber">29</context> <context context-type="linenumber">29</context>
@ -2796,6 +2875,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="bisq-block.component.browser-title"> <trans-unit datatype="html" id="bisq-block.component.browser-title">
<source>Block <x equiv-text="block.height" id="BLOCK_HEIGHT"/>: <x equiv-text="block.hash" id="BLOCK_HASH"/></source> <source>Block <x equiv-text="block.height" id="BLOCK_HEIGHT"/>: <x equiv-text="block.hash" id="BLOCK_HASH"/></source>
<target>Bloc <x equiv-text="block.height" id="BLOCK_HEIGHT"/>: <x equiv-text="block.hash" id="BLOCK_HASH"/></target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/bisq/bisq-block/bisq-block.component.ts</context> <context context-type="sourcefile">src/app/bisq/bisq-block/bisq-block.component.ts</context>
<context context-type="linenumber">85</context> <context context-type="linenumber">85</context>
@ -2803,6 +2883,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="6d0db947a91dc4884aefa858a27fc848530e6404"> <trans-unit datatype="html" id="6d0db947a91dc4884aefa858a27fc848530e6404">
<source>Previous hash</source> <source>Previous hash</source>
<target>Hachage précédent</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/bisq/bisq-block/bisq-block.component.html</context> <context context-type="sourcefile">src/app/bisq/bisq-block/bisq-block.component.html</context>
<context context-type="linenumber">35</context> <context context-type="linenumber">35</context>
@ -2816,6 +2897,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="bisq-transactions.filter"> <trans-unit datatype="html" id="bisq-transactions.filter">
<source>Filter</source> <source>Filter</source>
<target>filtre</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/bisq/bisq-transactions/bisq-transactions.component.ts</context> <context context-type="sourcefile">src/app/bisq/bisq-transactions/bisq-transactions.component.ts</context>
<context context-type="linenumber">55</context> <context context-type="linenumber">55</context>
@ -2823,6 +2905,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="bisq-transactions.selectall"> <trans-unit datatype="html" id="bisq-transactions.selectall">
<source>Select all</source> <source>Select all</source>
<target>Tout sélectionner</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/bisq/bisq-transactions/bisq-transactions.component.ts</context> <context context-type="sourcefile">src/app/bisq/bisq-transactions/bisq-transactions.component.ts</context>
<context context-type="linenumber">56</context> <context context-type="linenumber">56</context>
@ -2830,6 +2913,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="bisq-transactions.unselectall"> <trans-unit datatype="html" id="bisq-transactions.unselectall">
<source>Unselect all</source> <source>Unselect all</source>
<target>Tout déselectionner</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/bisq/bisq-transactions/bisq-transactions.component.ts</context> <context context-type="sourcefile">src/app/bisq/bisq-transactions/bisq-transactions.component.ts</context>
<context context-type="linenumber">57</context> <context context-type="linenumber">57</context>

View File

@ -1316,7 +1316,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="90a59434bf67130fb2531e0610f10d28af0fcc87"> <trans-unit datatype="html" id="90a59434bf67130fb2531e0610f10d28af0fcc87">
<source>Navigate to <x ctype="x-a" equiv-text="&lt;a href=&quot;https://mempool.space/about&quot; target=&quot;_blank&quot;&gt;" id="START_LINK"/>https://mempool.space/about<x ctype="x-a" equiv-text="&lt;/a&gt; " id="CLOSE_LINK"/> to sponsor</source> <source>Navigate to <x ctype="x-a" equiv-text="&lt;a href=&quot;https://mempool.space/about&quot; target=&quot;_blank&quot;&gt;" id="START_LINK"/>https://mempool.space/about<x ctype="x-a" equiv-text="&lt;/a&gt; " id="CLOSE_LINK"/> to sponsor</source>
<target>スポンサーになるには、<x ctype="x-a" equiv-text="&lt;a href=&quot;https://mempool.space/about&quot; target=&quot;_blank&quot;&gt;" id="START_LINK"/>https//mempool.space/about<x ctype="x-a" equiv-text="&lt;/a&gt; " id="CLOSE_LINK"/>に移動します。</target> <target>スポンサーになるには、<x ctype="x-a" equiv-text="&lt;a href=&quot;https://mempool.space/about&quot; target=&quot;_blank&quot;&gt;" id="START_LINK"/>https://mempool.space/about<x ctype="x-a" equiv-text="&lt;/a&gt; " id="CLOSE_LINK"/>に移動します。</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/about/about.component.html</context> <context context-type="sourcefile">src/app/components/about/about.component.html</context>
<context context-type="linenumber">65</context> <context context-type="linenumber">65</context>
@ -2049,7 +2049,6 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="fe56475a8f4cf4bfc3acaafa215a7dd60d9ed7da"> <trans-unit datatype="html" id="fe56475a8f4cf4bfc3acaafa215a7dd60d9ed7da">
<source>Default push: <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/><x equiv-text="{{ '{' }}" id="INTERPOLATION"/> action: 'want', data: ['blocks', ...] <x equiv-text="{{ '}' }}" id="INTERPOLATION_1"/><x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> to express what you want pushed. Available: <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>blocks<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>mempool-block<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>live-2h-chart<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/>, and <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>stats<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/>.<x ctype="lb" equiv-text="&lt;br&gt;" id="LINE_BREAK"/><x ctype="lb" equiv-text="&lt;br&gt;" id="LINE_BREAK"/>Push transactions related to address: <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/><x equiv-text="{{ '{' }}" id="INTERPOLATION"/> 'track-address': '3PbJ...bF9B' <x equiv-text="{{ '}' }}" id="INTERPOLATION_1"/><x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> to receive all new transactions containing that address as input or output. Returns an array of transactions. <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>address-transactions<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> for new mempool transactions, and <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>block-transactions<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> for new block confirmed transactions.</source> <source>Default push: <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/><x equiv-text="{{ '{' }}" id="INTERPOLATION"/> action: 'want', data: ['blocks', ...] <x equiv-text="{{ '}' }}" id="INTERPOLATION_1"/><x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> to express what you want pushed. Available: <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>blocks<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>mempool-block<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>live-2h-chart<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/>, and <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>stats<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/>.<x ctype="lb" equiv-text="&lt;br&gt;" id="LINE_BREAK"/><x ctype="lb" equiv-text="&lt;br&gt;" id="LINE_BREAK"/>Push transactions related to address: <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/><x equiv-text="{{ '{' }}" id="INTERPOLATION"/> 'track-address': '3PbJ...bF9B' <x equiv-text="{{ '}' }}" id="INTERPOLATION_1"/><x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> to receive all new transactions containing that address as input or output. Returns an array of transactions. <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>address-transactions<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> for new mempool transactions, and <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>block-transactions<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> for new block confirmed transactions.</source>
<target>Default push: <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/><x equiv-text="{{ '{' }}" id="INTERPOLATION"/> action: 'want', data: ['blocks', ...] <x equiv-text="{{ '}' }}" id="INTERPOLATION_1"/><x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> to express what you want pushed. Available: <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>blocks<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>mempool-block<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>live-2h-chart<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/>, and <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>stats<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/>.<x ctype="lb" equiv-text="&lt;br&gt;" id="LINE_BREAK"/><x ctype="lb" equiv-text="&lt;br&gt;" id="LINE_BREAK"/>Push transactions related to address: <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/><x equiv-text="{{ '{' }}" id="INTERPOLATION"/> 'track-address': '3PbJ...bF9B' <x equiv-text="{{ '}' }}" id="INTERPOLATION_1"/><x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> to receive all new transactions containing that address as input or output. Returns an array of transactions. <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>address-transactions<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> for new mempool transactions, and <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>block-transactions<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> for new block confirmed transactions.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">19</context> <context context-type="linenumber">19</context>
@ -2118,7 +2117,6 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="af1a465e50097fabbe55bf5dbcf5d0702bdbc98b"> <trans-unit datatype="html" id="af1a465e50097fabbe55bf5dbcf5d0702bdbc98b">
<source>Get a list of the last 10 transactions to enter the mempool. Each transaction object contains simplified overview data, with the following fields: <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>txid<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>fee<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>vsize<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, and <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>value<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>.</source> <source>Get a list of the last 10 transactions to enter the mempool. Each transaction object contains simplified overview data, with the following fields: <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>txid<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>fee<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>vsize<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, and <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>value<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>.</source>
<target>Get a list of the last 10 transactions to enter the mempool. Each transaction object contains simplified overview data, with the following fields: <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>txid<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>fee<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>vsize<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, and <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>value<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">67</context> <context context-type="linenumber">67</context>
@ -2128,7 +2126,6 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="a2c00fbdcce9d6291c3b04c67979f9694be23f28"> <trans-unit datatype="html" id="a2c00fbdcce9d6291c3b04c67979f9694be23f28">
<source>Returns the confirmation status of a block. Available fields: <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>in_best_chain<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> (boolean, false for orphaned blocks), <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>next_best<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> (the hash of the next block, only available for blocks in the best chain).</source> <source>Returns the confirmation status of a block. Available fields: <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>in_best_chain<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> (boolean, false for orphaned blocks), <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>next_best<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> (the hash of the next block, only available for blocks in the best chain).</source>
<target>Returns the confirmation status of a block. Available fields: <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>in_best_chain<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> (boolean, false for orphaned blocks), <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>next_best<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> (the hash of the next block, only available for blocks in the best chain).</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">89</context> <context context-type="linenumber">89</context>
@ -2136,7 +2133,6 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="1126cb2e03d0371d03b57047052d4ff1b6556753"> <trans-unit datatype="html" id="1126cb2e03d0371d03b57047052d4ff1b6556753">
<source>Returns a list of transactions in the block (up to 25 transactions beginning at <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>start_index<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/>). Transactions returned here do not have the <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>status<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> field, since all the transactions share the same block and confirmation status.</source> <source>Returns a list of transactions in the block (up to 25 transactions beginning at <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>start_index<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/>). Transactions returned here do not have the <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>status<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> field, since all the transactions share the same block and confirmation status.</source>
<target>Returns a list of transactions in the block (up to 25 transactions beginning at <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>start_index<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/>). Transactions returned here do not have the <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>status<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> field, since all the transactions share the same block and confirmation status.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">93</context> <context context-type="linenumber">93</context>
@ -2152,7 +2148,6 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="3e08815110b2e5ce8aa7256ed05a2faf6dbb7077"> <trans-unit datatype="html" id="3e08815110b2e5ce8aa7256ed05a2faf6dbb7077">
<source>Returns the transaction at index <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>:index<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> within the specified block.</source> <source>Returns the transaction at index <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>:index<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> within the specified block.</source>
<target>Returns the transaction at index <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>:index<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> within the specified block.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">101</context> <context context-type="linenumber">101</context>
@ -2160,7 +2155,6 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="6d5aacdd7e6c375570a88c25bfd0be82beba4c7b"> <trans-unit datatype="html" id="6d5aacdd7e6c375570a88c25bfd0be82beba4c7b">
<source>Returns the raw block representation in binary.</source> <source>Returns the raw block representation in binary.</source>
<target>Returns the raw block representation in binary.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">105</context> <context context-type="linenumber">105</context>
@ -2168,7 +2162,6 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="36df9865e9099d98537ea69c9cfdc035d1b64116"> <trans-unit datatype="html" id="36df9865e9099d98537ea69c9cfdc035d1b64116">
<source>Returns the hash of the block currently at <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>:height<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>.</source> <source>Returns the hash of the block currently at <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>:height<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>.</source>
<target>Returns the hash of the block currently at <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>:height<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">109</context> <context context-type="linenumber">109</context>
@ -2176,7 +2169,6 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="f8380186899495340cbfe7fb836ba664fb4b52af"> <trans-unit datatype="html" id="f8380186899495340cbfe7fb836ba664fb4b52af">
<source>Returns the 10 newest blocks starting at the tip or at <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>:start_height<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> if specified.</source> <source>Returns the 10 newest blocks starting at the tip or at <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>:start_height<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> if specified.</source>
<target>Returns the 10 newest blocks starting at the tip or at <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>:start_height<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> if specified.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">113</context> <context context-type="linenumber">113</context>
@ -2200,7 +2192,6 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="194d480219559b855b01ea58459066e3c63acdb2"> <trans-unit datatype="html" id="194d480219559b855b01ea58459066e3c63acdb2">
<source>Returns details about a block. Available fields: <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>id<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>height<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>version<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>timestamp<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>bits<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>nonce<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>merkle_root<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>tx_count<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>size<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>weight<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>,<x ctype="x-ng_container" equiv-text="&lt;ng-container *ngIf=&quot;network.val === 'liquid'&quot;&gt; " id="START_TAG_NG_CONTAINER"/><x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>proof<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>,<x ctype="x-ng_container" equiv-text="&lt;/ng-container&gt; " id="CLOSE_TAG_NG_CONTAINER"/> and <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>previousblockhash<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>.</source> <source>Returns details about a block. Available fields: <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>id<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>height<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>version<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>timestamp<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>bits<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>nonce<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>merkle_root<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>tx_count<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>size<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>weight<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>,<x ctype="x-ng_container" equiv-text="&lt;ng-container *ngIf=&quot;network.val === 'liquid'&quot;&gt; " id="START_TAG_NG_CONTAINER"/><x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>proof<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>,<x ctype="x-ng_container" equiv-text="&lt;/ng-container&gt; " id="CLOSE_TAG_NG_CONTAINER"/> and <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>previousblockhash<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>.</source>
<target>Returns details about a block. Available fields: <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>id<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>height<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>version<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>timestamp<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>bits<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>nonce<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>merkle_root<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>tx_count<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>size<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>weight<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>,<x ctype="x-ng_container" equiv-text="&lt;ng-container *ngIf=&quot;network.val === 'liquid'&quot;&gt; " id="START_TAG_NG_CONTAINER"/><x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>proof<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>,<x ctype="x-ng_container" equiv-text="&lt;/ng-container&gt; " id="CLOSE_TAG_NG_CONTAINER"/> and <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>previousblockhash<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">85</context> <context context-type="linenumber">85</context>
@ -2218,7 +2209,6 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="a8ea1ec66e7bb9f92e87ae5482e50748baafffd2"> <trans-unit datatype="html" id="a8ea1ec66e7bb9f92e87ae5482e50748baafffd2">
<source>Returns details about a transaction. Available fields: <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>txid<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>version<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>locktime<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>size<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>weight<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>fee<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>vin<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>vout<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, and <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>status<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>.</source> <source>Returns details about a transaction. Available fields: <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>txid<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>version<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>locktime<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>size<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>weight<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>fee<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>vin<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>vout<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, and <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>status<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>.</source>
<target>Returns details about a transaction. Available fields: <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>txid<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>version<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>locktime<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>size<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>weight<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>fee<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>vin<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>vout<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, and <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>status<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">139</context> <context context-type="linenumber">139</context>
@ -2226,7 +2216,6 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="7e784cfa5833e7b54d4dfc723fabde94f66ebde3"> <trans-unit datatype="html" id="7e784cfa5833e7b54d4dfc723fabde94f66ebde3">
<source>Returns the confirmation status of a transaction. Available fields: <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>confirmed<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> (boolean), <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>block_height<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> (optional), and <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>block_hash<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> (optional).</source> <source>Returns the confirmation status of a transaction. Available fields: <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>confirmed<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> (boolean), <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>block_height<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> (optional), and <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>block_hash<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> (optional).</source>
<target>Returns the confirmation status of a transaction. Available fields: <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>confirmed<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> (boolean), <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>block_height<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> (optional), and <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>block_hash<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> (optional).</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">143</context> <context context-type="linenumber">143</context>
@ -2234,7 +2223,6 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="34c21c242665d87bf22645c90f571bd5078eac93"> <trans-unit datatype="html" id="34c21c242665d87bf22645c90f571bd5078eac93">
<source>Returns a transaction serialized as hex.</source> <source>Returns a transaction serialized as hex.</source>
<target>Returns a transaction serialized as hex.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">147</context> <context context-type="linenumber">147</context>
@ -2250,7 +2238,6 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="a57953199686e9980df838cb25edb51691941ac5"> <trans-unit datatype="html" id="a57953199686e9980df838cb25edb51691941ac5">
<source>Returns a merkle inclusion proof for the transaction using <x ctype="x-a" equiv-text="&lt;a href=&quot;https://electrumx.readthedocs.io/en/latest/protocol-methods.html#blockchain-transaction-get-merkle&quot;&gt;" id="START_LINK"/>Electrum's blockchain.transaction.get_merkle format.<x ctype="x-a" equiv-text="&lt;/a&gt;" id="CLOSE_LINK"/></source> <source>Returns a merkle inclusion proof for the transaction using <x ctype="x-a" equiv-text="&lt;a href=&quot;https://electrumx.readthedocs.io/en/latest/protocol-methods.html#blockchain-transaction-get-merkle&quot;&gt;" id="START_LINK"/>Electrum's blockchain.transaction.get_merkle format.<x ctype="x-a" equiv-text="&lt;/a&gt;" id="CLOSE_LINK"/></source>
<target>Returns a merkle inclusion proof for the transaction using <x ctype="x-a" equiv-text="&lt;a href=&quot;https://electrumx.readthedocs.io/en/latest/protocol-methods.html#blockchain-transaction-get-merkle&quot;&gt;" id="START_LINK"/>Electrum's blockchain.transaction.get_merkle format.<x ctype="x-a" equiv-text="&lt;/a&gt;" id="CLOSE_LINK"/></target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">159</context> <context context-type="linenumber">159</context>
@ -2258,7 +2245,6 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="fe9a40b2ff9674b4ab7d82624ffed340c9ee5b89"> <trans-unit datatype="html" id="fe9a40b2ff9674b4ab7d82624ffed340c9ee5b89">
<source>Returns the spending status of a transaction output. Available fields: <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>spent<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> (boolean), <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>txid<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> (optional), <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>vin<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> (optional), and <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>status<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> (optional, the status of the spending tx).</source> <source>Returns the spending status of a transaction output. Available fields: <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>spent<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> (boolean), <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>txid<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> (optional), <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>vin<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> (optional), and <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>status<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> (optional, the status of the spending tx).</source>
<target>Returns the spending status of a transaction output. Available fields: <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>spent<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> (boolean), <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>txid<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> (optional), <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>vin<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> (optional), and <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>status<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> (optional, the status of the spending tx).</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">163</context> <context context-type="linenumber">163</context>
@ -2266,7 +2252,6 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="0358265aa88614843e1f5e887b94c673808c84f1"> <trans-unit datatype="html" id="0358265aa88614843e1f5e887b94c673808c84f1">
<source>Returns the spending status of all transaction outputs.</source> <source>Returns the spending status of all transaction outputs.</source>
<target>Returns the spending status of all transaction outputs.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">167</context> <context context-type="linenumber">167</context>
@ -2274,7 +2259,6 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="01723473ecc53cab60ef1b37dc39d8941994d56f"> <trans-unit datatype="html" id="01723473ecc53cab60ef1b37dc39d8941994d56f">
<source>Broadcast a raw transaction to the network. The transaction should be provided as hex in the request body. The <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>txid<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> will be returned on success.</source> <source>Broadcast a raw transaction to the network. The transaction should be provided as hex in the request body. The <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>txid<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> will be returned on success.</source>
<target>Broadcast a raw transaction to the network. The transaction should be provided as hex in the request body. The <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>txid<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> will be returned on success.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">171</context> <context context-type="linenumber">171</context>
@ -2282,7 +2266,6 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="d51106cc898981e9862d35a4db40796f0cf464f8"> <trans-unit datatype="html" id="d51106cc898981e9862d35a4db40796f0cf464f8">
<source>Returns a merkle inclusion proof for the transaction using <x ctype="x-a" equiv-text="&lt;a href=&quot;https://bitcoin.org/en/glossary/merkle-block&quot;&gt;" id="START_LINK"/>bitcoind's merkleblock<x ctype="x-a" equiv-text="&lt;/a&gt; " id="CLOSE_LINK"/> format.</source> <source>Returns a merkle inclusion proof for the transaction using <x ctype="x-a" equiv-text="&lt;a href=&quot;https://bitcoin.org/en/glossary/merkle-block&quot;&gt;" id="START_LINK"/>bitcoind's merkleblock<x ctype="x-a" equiv-text="&lt;/a&gt; " id="CLOSE_LINK"/> format.</source>
<target>Returns a merkle inclusion proof for the transaction using <x ctype="x-a" equiv-text="&lt;a href=&quot;https://bitcoin.org/en/glossary/merkle-block&quot;&gt;" id="START_LINK"/>bitcoind's merkleblock<x ctype="x-a" equiv-text="&lt;/a&gt; " id="CLOSE_LINK"/> format.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">155</context> <context context-type="linenumber">155</context>
@ -2300,7 +2283,6 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="e12cd52eaa77b446ba97436c145b59741151adf3"> <trans-unit datatype="html" id="e12cd52eaa77b446ba97436c145b59741151adf3">
<source>Returns details about an address. Available fields: <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>address<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>chain_stats<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, and <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>mempool_stats<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>. <x equiv-text="{{ '{' }}" id="INTERPOLATION"/>chain,mempool<x equiv-text="{{ '}' }}" id="INTERPOLATION_1"/>_stats each contain an object with <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>tx_count<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>funded_txo_count<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>funded_txo_sum<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>spent_txo_count<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, and <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>spent_txo_sum<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>.</source> <source>Returns details about an address. Available fields: <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>address<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>chain_stats<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, and <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>mempool_stats<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>. <x equiv-text="{{ '{' }}" id="INTERPOLATION"/>chain,mempool<x equiv-text="{{ '}' }}" id="INTERPOLATION_1"/>_stats each contain an object with <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>tx_count<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>funded_txo_count<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>funded_txo_sum<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>spent_txo_count<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, and <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>spent_txo_sum<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>.</source>
<target>Returns details about an address. Available fields: <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>address<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>chain_stats<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, and <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>mempool_stats<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>. <x equiv-text="{{ '{' }}" id="INTERPOLATION"/>chain,mempool<x equiv-text="{{ '}' }}" id="INTERPOLATION_1"/>_stats each contain an object with <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>tx_count<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>funded_txo_count<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>funded_txo_sum<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>spent_txo_count<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, and <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>spent_txo_sum<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">189</context> <context context-type="linenumber">189</context>
@ -2308,7 +2290,6 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="bdc501d28e02e07f692859977fdaee8c52eea401"> <trans-unit datatype="html" id="bdc501d28e02e07f692859977fdaee8c52eea401">
<source>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 <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>:last_seen_txid<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> (see below). </source> <source>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 <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>:last_seen_txid<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> (see below). </source>
<target>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 <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>:last_seen_txid<x ctype="x-code" equiv-text="&lt;/code&gt; " id="CLOSE_TAG_CODE"/> (see below). </target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">193,194</context> <context context-type="linenumber">193,194</context>
@ -2316,7 +2297,6 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="5676910aa3ffb568079a7499b366744fe3fd87ea"> <trans-unit datatype="html" id="5676910aa3ffb568079a7499b366744fe3fd87ea">
<source>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.</source> <source>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.</source>
<target>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.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">197</context> <context context-type="linenumber">197</context>
@ -2324,7 +2304,6 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="f10009779c64e19e20414fae506f27118420aa33"> <trans-unit datatype="html" id="f10009779c64e19e20414fae506f27118420aa33">
<source>Get unconfirmed transaction history for the specified address/scripthash. Returns up to 50 transactions (no paging).</source> <source>Get unconfirmed transaction history for the specified address/scripthash. Returns up to 50 transactions (no paging).</source>
<target>Get unconfirmed transaction history for the specified address/scripthash. Returns up to 50 transactions (no paging).</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">201</context> <context context-type="linenumber">201</context>
@ -2332,7 +2311,6 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="4eb50557085c85bfca995b6ee0de56ec3f5e97eb"> <trans-unit datatype="html" id="4eb50557085c85bfca995b6ee0de56ec3f5e97eb">
<source>Get the list of unspent transaction outputs associated with the address/scripthash. Available fields: <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>txid<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>vout<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>value<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, and <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>status<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/> (with the status of the funding tx).<x ctype="x-ng_container" equiv-text="&lt;ng-container *ngIf=&quot;network.val === 'liquid'&quot;&gt;" id="START_TAG_NG_CONTAINER"/>There is also a <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>valuecommitment<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/> field that may appear in place of <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>value<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, plus the following additional fields: <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>asset<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>/<x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>assetcommitment<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>nonce<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>/<x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>noncecommitment<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>surjection_proof<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, and <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>range_proof<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>.<x ctype="x-ng_container" equiv-text="&lt;/ng-container&gt;" id="CLOSE_TAG_NG_CONTAINER"/></source> <source>Get the list of unspent transaction outputs associated with the address/scripthash. Available fields: <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>txid<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>vout<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>value<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, and <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>status<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/> (with the status of the funding tx).<x ctype="x-ng_container" equiv-text="&lt;ng-container *ngIf=&quot;network.val === 'liquid'&quot;&gt;" id="START_TAG_NG_CONTAINER"/>There is also a <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>valuecommitment<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/> field that may appear in place of <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>value<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, plus the following additional fields: <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>asset<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>/<x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>assetcommitment<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>nonce<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>/<x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>noncecommitment<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>surjection_proof<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, and <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>range_proof<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>.<x ctype="x-ng_container" equiv-text="&lt;/ng-container&gt;" id="CLOSE_TAG_NG_CONTAINER"/></source>
<target>Get the list of unspent transaction outputs associated with the address/scripthash. Available fields: <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>txid<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>vout<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>value<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, and <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>status<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/> (with the status of the funding tx).<x ctype="x-ng_container" equiv-text="&lt;ng-container *ngIf=&quot;network.val === 'liquid'&quot;&gt;" id="START_TAG_NG_CONTAINER"/>There is also a <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>valuecommitment<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/> field that may appear in place of <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>value<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, plus the following additional fields: <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>asset<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>/<x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>assetcommitment<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>nonce<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>/<x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>noncecommitment<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>surjection_proof<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>, and <x ctype="x-code" equiv-text="&lt;code&gt;" id="START_TAG_CODE"/>range_proof<x ctype="x-code" equiv-text="&lt;/code&gt;" id="CLOSE_TAG_CODE"/>.<x ctype="x-ng_container" equiv-text="&lt;/ng-container&gt;" id="CLOSE_TAG_NG_CONTAINER"/></target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">205</context> <context context-type="linenumber">205</context>
@ -2358,7 +2336,6 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="4a0bf20cf26a4f4a387bed5c3d47c23294cb606e"> <trans-unit datatype="html" id="4a0bf20cf26a4f4a387bed5c3d47c23294cb606e">
<source>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.</source> <source>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.</source>
<target>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.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">227</context> <context context-type="linenumber">227</context>
@ -2366,7 +2343,6 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="44a238eb28145f904f3a5bbfd4050987668f78d0"> <trans-unit datatype="html" id="44a238eb28145f904f3a5bbfd4050987668f78d0">
<source>Get the current total supply of the specified asset. For the native asset (L-BTC), this is calculated as [chain,mempool]_stats.peg_in_amount - [chain,mempool]_stats.peg_out_amount - [chain,mempool]_stats.burned_amount. For issued assets, this is calculated as [chain,mempool]_stats.issued_amount - [chain,mempool]_stats.burned_amount. Not available for assets with blinded issuances. If /decimal is specified, returns the supply as a decimal according to the asset's divisibility. Otherwise, returned in base units.</source> <source>Get the current total supply of the specified asset. For the native asset (L-BTC), this is calculated as [chain,mempool]_stats.peg_in_amount - [chain,mempool]_stats.peg_out_amount - [chain,mempool]_stats.burned_amount. For issued assets, this is calculated as [chain,mempool]_stats.issued_amount - [chain,mempool]_stats.burned_amount. Not available for assets with blinded issuances. If /decimal is specified, returns the supply as a decimal according to the asset's divisibility. Otherwise, returned in base units.</source>
<target>Get the current total supply of the specified asset. For the native asset (L-BTC), this is calculated as [chain,mempool]_stats.peg_in_amount - [chain,mempool]_stats.peg_out_amount - [chain,mempool]_stats.burned_amount. For issued assets, this is calculated as [chain,mempool]_stats.issued_amount - [chain,mempool]_stats.burned_amount. Not available for assets with blinded issuances. If /decimal is specified, returns the supply as a decimal according to the asset's divisibility. Otherwise, returned in base units.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">231</context> <context context-type="linenumber">231</context>
@ -2400,7 +2376,6 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="e9a58657c410cf65dba4c3cdfb1af7099dedb241"> <trans-unit datatype="html" id="e9a58657c410cf65dba4c3cdfb1af7099dedb241">
<source>Returns :length of latest Bisq transactions, starting from :index.</source> <source>Returns :length of latest Bisq transactions, starting from :index.</source>
<target>Returns :length of latest Bisq transactions, starting from :index.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">256</context> <context context-type="linenumber">256</context>
@ -2408,7 +2383,6 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="e7e7c97535181ba299bc0ad02904f851088a0dd5"> <trans-unit datatype="html" id="e7e7c97535181ba299bc0ad02904f851088a0dd5">
<source>Returns all Bisq transactions that exist in a Bitcoin block.</source> <source>Returns all Bisq transactions that exist in a Bitcoin block.</source>
<target>Returns all Bisq transactions that exist in a Bitcoin block.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">260</context> <context context-type="linenumber">260</context>
@ -2416,7 +2390,6 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="6fdafaace68cb298c6281e89eedc704f3d8f3f6a"> <trans-unit datatype="html" id="6fdafaace68cb298c6281e89eedc704f3d8f3f6a">
<source>Returns :length Bitcoin blocks that contain Bisq transactions, starting from :index.</source> <source>Returns :length Bitcoin blocks that contain Bisq transactions, starting from :index.</source>
<target>Returns :length Bitcoin blocks that contain Bisq transactions, starting from :index.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">264</context> <context context-type="linenumber">264</context>
@ -2424,7 +2397,6 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="ac234ff46c8f499399a20fb5d74005094de7cdcd"> <trans-unit datatype="html" id="ac234ff46c8f499399a20fb5d74005094de7cdcd">
<source>Returns the most recently processed Bitcoin block height processed by Bisq.</source> <source>Returns the most recently processed Bitcoin block height processed by Bisq.</source>
<target>Returns the most recently processed Bitcoin block height processed by Bisq.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">268</context> <context context-type="linenumber">268</context>
@ -2432,7 +2404,6 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="9604b870a64e6635062828425fcb801371e716ad"> <trans-unit datatype="html" id="9604b870a64e6635062828425fcb801371e716ad">
<source>Returns all Bisq transactions belonging to a Bitcoin address, with 'B' prefixed in front of the address.</source> <source>Returns all Bisq transactions belonging to a Bitcoin address, with 'B' prefixed in front of the address.</source>
<target>Returns all Bisq transactions belonging to a Bitcoin address, with 'B' prefixed in front of the address.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context> <context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
<context context-type="linenumber">272</context> <context context-type="linenumber">272</context>

View File

@ -1298,7 +1298,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="94731fb77c18c6d537337dddc3699f67a0587985"> <trans-unit datatype="html" id="94731fb77c18c6d537337dddc3699f67a0587985">
<source>Terms of Service</source> <source>Terms of Service</source>
<target>Vilkår for bruk</target> <target>Bruksvilkår</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/about/about.component.html</context> <context context-type="sourcefile">src/app/components/about/about.component.html</context>
<context context-type="linenumber">206</context> <context context-type="linenumber">206</context>

View File

@ -2595,7 +2595,7 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="time-since.hour.ago"> <trans-unit datatype="html" id="time-since.hour.ago">
<source><x equiv-text="counter" id="INTERPOLATION"/> hour ago</source> <source><x equiv-text="counter" id="INTERPOLATION"/> hour ago</source>
<target><x equiv-text="counter" id="INTERPOLATION"/> timmar sedan</target> <target><x equiv-text="counter" id="INTERPOLATION"/> timma sedan</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context> <context context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context>
<context context-type="linenumber">62</context> <context context-type="linenumber">62</context>

View File

@ -0,0 +1,16 @@
/***************************************************************************************************
* Load `$localize` onto the global scope - used if i18n tags appear in Angular templates.
*/
import '@angular/localize/init';
import { enableProdMode } from '@angular/core';
import { environment } from './environments/environment';
if (environment.production) {
enableProdMode();
}
export { AppServerModule } from './app/app.server.module';
export { renderModule, renderModuleFactory } from '@angular/platform-server';

View File

@ -8,5 +8,7 @@ if (environment.production) {
enableProdMode(); enableProdMode();
} }
platformBrowserDynamic().bootstrapModule(AppModule) document.addEventListener('DOMContentLoaded', () => {
platformBrowserDynamic().bootstrapModule(AppModule)
.catch(err => console.error(err)); .catch(err => console.error(err));
});

View File

@ -12,6 +12,9 @@
}, },
{ {
"path": "./tsconfig.spec.json" "path": "./tsconfig.spec.json"
},
{
"path": "./tsconfig.server.json"
} }
] ]
} }

View File

@ -0,0 +1,18 @@
/* To learn more about this file see: https://angular.io/config/tsconfig. */
{
"extends": "./tsconfig.app.json",
"compilerOptions": {
"outDir": "./out-tsc/server",
"target": "es2015",
"types": [
"node"
]
},
"files": [
"src/main.server.ts",
"server.ts"
],
"angularCompilerOptions": {
"entryModule": "./src/app/app.server.module#AppServerModule"
}
}

View File

@ -18,6 +18,6 @@ do
cd "${HOME}/${site}/frontend/" cd "${HOME}/${site}/frontend/"
npm install npm install
npm run build npm run build
rsync -av ./dist/mempool/* "${HOME}/public_html/${site}/" rsync -av ./dist/mempool/browser/* "${HOME}/public_html/${site}/"
fi fi
done done

View File

@ -36,7 +36,7 @@ do
cd "$HOME/${site}/frontend" cd "$HOME/${site}/frontend"
npm install npm install
npm run build npm run build
rsync -av ./dist/mempool/* "${HOME}/public_html/${site}/" rsync -av ./dist/mempool/browser/* "${HOME}/public_html/${site}/"
fi fi
cd "$HOME/${site}/backend" cd "$HOME/${site}/backend"

View File

@ -0,0 +1,212 @@
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 /<lang>/ 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 cache;
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";
}