mirror of
https://github.com/mempool/mempool.git
synced 2025-01-18 21:32:55 +01:00
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:
commit
8d0db12abe
2
frontend/.gitignore
vendored
2
frontend/.gitignore
vendored
@ -4,6 +4,8 @@
|
||||
/dist
|
||||
/tmp
|
||||
/out-tsc
|
||||
server.run.js
|
||||
|
||||
# Only exists if Bazel was run
|
||||
/bazel-out
|
||||
|
||||
|
@ -101,7 +101,7 @@
|
||||
"build": {
|
||||
"builder": "@angular-devkit/build-angular:browser",
|
||||
"options": {
|
||||
"outputPath": "dist/mempool",
|
||||
"outputPath": "dist/mempool/browser",
|
||||
"index": "src/index.html",
|
||||
"main": "src/main.ts",
|
||||
"polyfills": "src/polyfills.ts",
|
||||
@ -113,7 +113,8 @@
|
||||
"src/robots.txt"
|
||||
],
|
||||
"styles": [
|
||||
"src/styles.scss"
|
||||
"src/styles.scss",
|
||||
"node_modules/@fortawesome/fontawesome-svg-core/styles.css"
|
||||
],
|
||||
"scripts": [
|
||||
"generated-config.js"
|
||||
@ -189,7 +190,8 @@
|
||||
"tsConfig": [
|
||||
"tsconfig.app.json",
|
||||
"tsconfig.spec.json",
|
||||
"e2e/tsconfig.json"
|
||||
"e2e/tsconfig.json",
|
||||
"tsconfig.server.json"
|
||||
],
|
||||
"exclude": [
|
||||
"**/node_modules/**"
|
||||
@ -207,6 +209,54 @@
|
||||
"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": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
}},
|
||||
|
@ -25,7 +25,7 @@ for (setting in configContent) {
|
||||
const code = `(function (window) {
|
||||
window.__env = window.__env || {};${settings.reduce((str, obj) => `${str}
|
||||
window.__env.${obj.key} = ${ typeof obj.value === 'string' ? `'${obj.value}'` : obj.value };`, '')}
|
||||
}(this));`;
|
||||
}(global || this));`;
|
||||
|
||||
try {
|
||||
fs.writeFileSync(GENERATED_CONFIG_FILE_NAME, code, 'utf8');
|
||||
|
@ -3,7 +3,10 @@
|
||||
"LIQUID_ENABLED": false,
|
||||
"BISQ_ENABLED": false,
|
||||
"BISQ_SEPARATE_BACKEND": false,
|
||||
"ELCTRS_ITEMS_PER_PAGE": 25,
|
||||
"ELECTRS_ITEMS_PER_PAGE": 25,
|
||||
"KEEP_BLOCKS_AMOUNT": 8,
|
||||
"SPONSORS_ENABLED": false
|
||||
}
|
||||
"SPONSORS_ENABLED": false,
|
||||
"NGINX_PROTOCOL": "http",
|
||||
"NGINX_HOSTNAME": "127.0.0.1",
|
||||
"NGINX_PORT": "80"
|
||||
}
|
||||
|
65974
frontend/package-lock.json
generated
65974
frontend/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -32,7 +32,11 @@
|
||||
"generate-config": "node generate-config.js",
|
||||
"test": "ng test",
|
||||
"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": {
|
||||
"@angular/animations": "~10.2.3",
|
||||
@ -43,6 +47,7 @@
|
||||
"@angular/localize": "^10.2.3",
|
||||
"@angular/platform-browser": "~10.2.3",
|
||||
"@angular/platform-browser-dynamic": "~10.2.3",
|
||||
"@angular/platform-server": "~10.2.2",
|
||||
"@angular/router": "~10.2.3",
|
||||
"@fortawesome/angular-fontawesome": "^0.7.0",
|
||||
"@fortawesome/fontawesome-common-types": "^0.2.30",
|
||||
@ -50,13 +55,16 @@
|
||||
"@fortawesome/free-solid-svg-icons": "^5.14.0",
|
||||
"@mempool/chartist": "^0.11.4",
|
||||
"@ng-bootstrap/ng-bootstrap": "^7.0.0",
|
||||
"@nguniversal/express-engine": "10.1.0",
|
||||
"@types/qrcode": "^1.3.4",
|
||||
"bootstrap": "4.5.0",
|
||||
"clipboard": "^2.0.4",
|
||||
"domino": "^2.1.6",
|
||||
"express": "^4.15.2",
|
||||
"ngx-bootrap-multiselect": "^2.0.0",
|
||||
"ngx-infinite-scroll": "^9.0.0",
|
||||
"qrcode": "^1.4.4",
|
||||
"rxjs": "^6.6.0",
|
||||
"rxjs": "^6.6.3",
|
||||
"tlite": "^0.1.9",
|
||||
"tslib": "^2.0.0",
|
||||
"zone.js": "~0.10.3"
|
||||
@ -64,12 +72,15 @@
|
||||
"devDependencies": {
|
||||
"@angular-devkit/build-angular": "^0.1002.0",
|
||||
"@angular/cli": "~10.2.0",
|
||||
"@angular/compiler-cli": "~10.2.0",
|
||||
"@angular/language-service": "~10.2.0",
|
||||
"@angular/compiler-cli": "~10.2.2",
|
||||
"@angular/language-service": "~10.2.2",
|
||||
"@nguniversal/builders": "^10.1.0",
|
||||
"@types/express": "^4.17.0",
|
||||
"@types/jasmine": "~3.3.8",
|
||||
"@types/jasminewd2": "~2.0.3",
|
||||
"@types/node": "^12.11.1",
|
||||
"codelyzer": "^6.0.0",
|
||||
"http-proxy-middleware": "^1.0.5",
|
||||
"jasmine-core": "~3.5.0",
|
||||
"jasmine-spec-reporter": "~5.0.0",
|
||||
"karma": "~5.0.0",
|
||||
|
96
frontend/server.run.ts
Normal file
96
frontend/server.run.ts
Normal 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
146
frontend/server.ts
Normal 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';
|
@ -222,7 +222,9 @@ const routes: Routes = [
|
||||
];
|
||||
|
||||
@NgModule({
|
||||
imports: [RouterModule.forRoot(routes)],
|
||||
imports: [RouterModule.forRoot(routes, {
|
||||
initialNavigation: 'enabled'
|
||||
})],
|
||||
exports: [RouterModule]
|
||||
})
|
||||
export class AppRoutingModule { }
|
||||
|
@ -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,
|
||||
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 {
|
||||
code: string;
|
||||
name: string;
|
||||
|
@ -1,6 +1,6 @@
|
||||
import { BrowserModule } from '@angular/platform-browser';
|
||||
import { BrowserModule, BrowserTransferStateModule } from '@angular/platform-browser';
|
||||
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 { 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 { TermsOfServiceComponent } from './components/terms-of-service/terms-of-service.component';
|
||||
import { StorageService } from './services/storage.service';
|
||||
import { HttpCacheInterceptor } from './services/http-cache.interceptor';
|
||||
|
||||
@NgModule({
|
||||
declarations: [
|
||||
@ -84,7 +85,8 @@ import { StorageService } from './services/storage.service';
|
||||
TermsOfServiceComponent,
|
||||
],
|
||||
imports: [
|
||||
BrowserModule,
|
||||
BrowserModule.withServerTransition({ appId: 'serverApp' }),
|
||||
BrowserTransferStateModule,
|
||||
AppRoutingModule,
|
||||
HttpClientModule,
|
||||
BrowserAnimationsModule,
|
||||
@ -100,6 +102,7 @@ import { StorageService } from './services/storage.service';
|
||||
AudioService,
|
||||
SeoService,
|
||||
StorageService,
|
||||
{ provide: HTTP_INTERCEPTORS, useClass: HttpCacheInterceptor, multi: true }
|
||||
],
|
||||
bootstrap: [AppComponent]
|
||||
})
|
||||
|
20
frontend/src/app/app.server.module.ts
Normal file
20
frontend/src/app/app.server.module.ts
Normal 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 {}
|
@ -5,7 +5,6 @@ import { StateService } from 'src/app/services/state.service';
|
||||
import { Observable } from 'rxjs';
|
||||
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
|
||||
import { ApiService } from 'src/app/services/api.service';
|
||||
import { env } from '../../app.constants';
|
||||
import { DomSanitizer, SafeUrl } from '@angular/platform-browser';
|
||||
import { map } from 'rxjs/operators';
|
||||
|
||||
@ -21,7 +20,7 @@ export class AboutComponent implements OnInit {
|
||||
donationStatus = 1;
|
||||
sponsors$: Observable<any>;
|
||||
donationObj: any;
|
||||
sponsorsEnabled = env.SPONSORS_ENABLED;
|
||||
sponsorsEnabled = this.stateService.env.SPONSORS_ENABLED;
|
||||
sponsors = null;
|
||||
|
||||
constructor(
|
||||
|
@ -1,3 +1,4 @@
|
||||
import { Location } from '@angular/common';
|
||||
import { Component, HostListener, OnInit, Inject, LOCALE_ID, HostBinding } from '@angular/core';
|
||||
import { Router, NavigationEnd } from '@angular/router';
|
||||
import { WebsocketService } from '../../services/websocket.service';
|
||||
@ -15,6 +16,7 @@ export class AppComponent implements OnInit {
|
||||
public router: Router,
|
||||
private websocketService: WebsocketService,
|
||||
private stateService: StateService,
|
||||
private location: Location,
|
||||
@Inject(LOCALE_ID) private locale: string,
|
||||
) {
|
||||
if (this.locale.startsWith('ar') || this.locale.startsWith('fa')) {
|
||||
@ -37,7 +39,7 @@ export class AppComponent implements OnInit {
|
||||
ngOnInit() {
|
||||
this.router.events.subscribe((val) => {
|
||||
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()));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -7,7 +7,6 @@ import { Block, Transaction, Vout } from '../../interfaces/electrs.interface';
|
||||
import { of, Subscription } from 'rxjs';
|
||||
import { StateService } from '../../services/state.service';
|
||||
import { SeoService } from 'src/app/services/seo.service';
|
||||
import { env } from 'src/app/app.constants';
|
||||
import { WebsocketService } from 'src/app/services/websocket.service';
|
||||
|
||||
@Component({
|
||||
@ -31,7 +30,7 @@ export class BlockComponent implements OnInit, OnDestroy {
|
||||
paginationMaxSize: number;
|
||||
coinbaseTx: Transaction;
|
||||
page = 1;
|
||||
itemsPerPage = env.ELCTRS_ITEMS_PER_PAGE;
|
||||
itemsPerPage: number;
|
||||
|
||||
constructor(
|
||||
private route: ActivatedRoute,
|
||||
@ -47,6 +46,7 @@ export class BlockComponent implements OnInit, OnDestroy {
|
||||
this.websocketService.want(['blocks', 'mempool-blocks']);
|
||||
this.paginationMaxSize = window.matchMedia('(max-width: 700px)').matches ? 3 : 5;
|
||||
this.network = this.stateService.network;
|
||||
this.itemsPerPage = this.stateService.env.ELECTRS_ITEMS_PER_PAGE;
|
||||
|
||||
this.subscription = this.route.paramMap
|
||||
.pipe(
|
||||
|
@ -3,7 +3,6 @@ import { Subscription } from 'rxjs';
|
||||
import { Block } from 'src/app/interfaces/electrs.interface';
|
||||
import { StateService } from 'src/app/services/state.service';
|
||||
import { Router } from '@angular/router';
|
||||
import { env } from 'src/app/app.constants';
|
||||
|
||||
@Component({
|
||||
selector: 'app-blockchain-blocks',
|
||||
@ -78,7 +77,7 @@ export class BlockchainBlocksComponent implements OnInit, OnDestroy {
|
||||
this.cd.markForCheck();
|
||||
}, 50);
|
||||
|
||||
if (this.blocks.length === env.KEEP_BLOCKS_AMOUNT) {
|
||||
if (this.blocks.length === this.stateService.env.KEEP_BLOCKS_AMOUNT) {
|
||||
this.blocksFilled = true;
|
||||
}
|
||||
this.cd.markForCheck();
|
||||
|
@ -1,6 +1,5 @@
|
||||
import { Component, OnInit, ChangeDetectionStrategy } from '@angular/core';
|
||||
import { StateService } from '../../services/state.service';
|
||||
import { env } from 'src/app/app.constants';
|
||||
import { Component, OnInit } from '@angular/core';
|
||||
import { Env, StateService } from '../../services/state.service';
|
||||
import { Observable, merge, of } from 'rxjs';
|
||||
|
||||
@Component({
|
||||
@ -9,7 +8,7 @@ import { Observable, merge, of } from 'rxjs';
|
||||
styleUrls: ['./master-page.component.scss'],
|
||||
})
|
||||
export class MasterPageComponent implements OnInit {
|
||||
env = env;
|
||||
env: Env;
|
||||
network$: Observable<string>;
|
||||
connectionState$: Observable<number>;
|
||||
navCollapsed = false;
|
||||
@ -20,6 +19,7 @@ export class MasterPageComponent implements OnInit {
|
||||
) { }
|
||||
|
||||
ngOnInit() {
|
||||
this.env = this.stateService.env;
|
||||
this.connectionState$ = this.stateService.connectionState$;
|
||||
this.network$ = merge(of(''), this.stateService.networkChanged$);
|
||||
}
|
||||
|
@ -5,7 +5,6 @@ import { switchMap, map, tap, filter } from 'rxjs/operators';
|
||||
import { MempoolBlock } from 'src/app/interfaces/websocket.interface';
|
||||
import { Observable, BehaviorSubject } from 'rxjs';
|
||||
import { SeoService } from 'src/app/services/seo.service';
|
||||
import { env } from 'src/app/app.constants';
|
||||
import { WebsocketService } from 'src/app/services/websocket.service';
|
||||
|
||||
@Component({
|
||||
@ -70,7 +69,7 @@ export class MempoolBlockComponent implements OnInit, OnDestroy {
|
||||
const blocksInBlock = Math.ceil(mempoolBlock.blockVSize / 1000000);
|
||||
if (this.mempoolBlockIndex === 0) {
|
||||
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`;
|
||||
} else {
|
||||
return $localize`:@@mempool-block.block.no:Mempool block ${this.mempoolBlockIndex + 1}:INTERPOLATION:`;
|
||||
|
@ -1,5 +1,6 @@
|
||||
import { Component, Input, AfterViewInit, OnDestroy, ViewChild, ElementRef } from '@angular/core';
|
||||
import * as QRCode from 'qrcode/build/qrcode.js';
|
||||
import { StateService } from 'src/app/services/state.service';
|
||||
|
||||
@Component({
|
||||
selector: 'app-qrcode',
|
||||
@ -14,9 +15,14 @@ export class QrcodeComponent implements AfterViewInit {
|
||||
|
||||
qrcodeObject: any;
|
||||
|
||||
constructor() { }
|
||||
constructor(
|
||||
private stateService: StateService,
|
||||
) { }
|
||||
|
||||
ngAfterViewInit() {
|
||||
if (!this.stateService.isBrowser) {
|
||||
return;
|
||||
}
|
||||
const opts = {
|
||||
errorCorrectionLevel: 'H',
|
||||
margin: 0,
|
||||
|
@ -1,14 +1,18 @@
|
||||
import {
|
||||
Component,
|
||||
ElementRef,
|
||||
Inject,
|
||||
Input,
|
||||
OnChanges,
|
||||
OnDestroy,
|
||||
OnInit,
|
||||
PLATFORM_ID,
|
||||
SimpleChanges,
|
||||
ViewEncapsulation
|
||||
} from '@angular/core';
|
||||
|
||||
import { isPlatformBrowser } from '@angular/common';
|
||||
|
||||
import * as Chartist from '@mempool/chartist';
|
||||
|
||||
/**
|
||||
@ -63,16 +67,25 @@ export class ChartistComponent implements OnInit, OnChanges, OnDestroy {
|
||||
// @ts-ignore
|
||||
@Input() public events: ChartEvent;
|
||||
|
||||
isBrowser: boolean = isPlatformBrowser(this.platformId);
|
||||
|
||||
// @ts-ignore
|
||||
public chart: ChartInterfaces;
|
||||
|
||||
private element: HTMLElement;
|
||||
|
||||
constructor(element: ElementRef) {
|
||||
constructor(
|
||||
element: ElementRef,
|
||||
@Inject(PLATFORM_ID) private platformId: any,
|
||||
) {
|
||||
this.element = element.nativeElement;
|
||||
}
|
||||
|
||||
public ngOnInit(): Promise<ChartInterfaces> {
|
||||
if (!this.isBrowser) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!this.type || !this.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 {
|
||||
if (!this.isBrowser) {
|
||||
return;
|
||||
}
|
||||
|
||||
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 = {
|
||||
className: '',
|
||||
|
@ -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({
|
||||
selector: 'app-time-since',
|
||||
@ -14,7 +15,8 @@ export class TimeSinceComponent implements OnInit, OnChanges, OnDestroy {
|
||||
@Input() fastRender = false;
|
||||
|
||||
constructor(
|
||||
private ref: ChangeDetectorRef
|
||||
private ref: ChangeDetectorRef,
|
||||
private stateService: StateService,
|
||||
) {
|
||||
this.intervals = {
|
||||
year: 31536000,
|
||||
@ -28,6 +30,11 @@ export class TimeSinceComponent implements OnInit, OnChanges, OnDestroy {
|
||||
}
|
||||
|
||||
ngOnInit() {
|
||||
if (!this.stateService.isBrowser) {
|
||||
this.text = this.calculate();
|
||||
this.ref.markForCheck();
|
||||
return;
|
||||
}
|
||||
this.interval = window.setInterval(() => {
|
||||
this.text = this.calculate();
|
||||
this.ref.markForCheck();
|
||||
|
@ -247,10 +247,10 @@ export class DashboardComponent implements OnInit {
|
||||
|
||||
setLanguageFromUrl() {
|
||||
const urlLanguage = this.document.location.pathname.split('/')[1];
|
||||
if (urlLanguage === '') {
|
||||
this.languageForm.get('language').setValue('en');
|
||||
} else if (this.languages.map((lang) => lang.code).indexOf(urlLanguage) > -1) {
|
||||
if (this.languages.map((lang) => lang.code).indexOf(urlLanguage) > -1) {
|
||||
this.languageForm.get('language').setValue(urlLanguage);
|
||||
} else {
|
||||
this.languageForm.get('language').setValue('en');
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,57 +1,60 @@
|
||||
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 { Observable } from 'rxjs';
|
||||
import { StateService } from './state.service';
|
||||
import { env } from '../app.constants';
|
||||
|
||||
const API_BASE_URL = '{network}/api/v1';
|
||||
import { WebsocketResponse } from '../interfaces/websocket.interface';
|
||||
|
||||
@Injectable({
|
||||
providedIn: 'root'
|
||||
})
|
||||
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(
|
||||
private httpClient: HttpClient,
|
||||
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) => {
|
||||
if (network === 'bisq' && !env.BISQ_SEPARATE_BACKEND) {
|
||||
if (network === 'bisq' && !this.stateService.env.BISQ_SEPARATE_BACKEND) {
|
||||
network = '';
|
||||
}
|
||||
this.apiBaseUrl = API_BASE_URL.replace('{network}', network ? '/' + network : '');
|
||||
this.apiBasePath = network ? '/' + network : '';
|
||||
});
|
||||
}
|
||||
|
||||
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[]> {
|
||||
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[]> {
|
||||
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[]> {
|
||||
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[]> {
|
||||
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[]> {
|
||||
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[]> {
|
||||
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[]> {
|
||||
@ -59,7 +62,7 @@ export class ApiService {
|
||||
txIds.forEach((txId: string) => {
|
||||
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> {
|
||||
@ -67,10 +70,14 @@ export class ApiService {
|
||||
amount: amount,
|
||||
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[]> {
|
||||
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');
|
||||
}
|
||||
}
|
||||
|
@ -2,6 +2,7 @@ import { Injectable } from '@angular/core';
|
||||
import { HttpClient } from '@angular/common/http';
|
||||
import { Observable } from 'rxjs';
|
||||
import { shareReplay } from 'rxjs/operators';
|
||||
import { StateService } from './state.service';
|
||||
|
||||
@Injectable({
|
||||
providedIn: 'root'
|
||||
@ -13,9 +14,15 @@ export class AssetsService {
|
||||
|
||||
constructor(
|
||||
private httpClient: HttpClient,
|
||||
private stateService: StateService,
|
||||
) {
|
||||
this.getAssetsJson$ = this.httpClient.get('/resources/assets.json').pipe(shareReplay());
|
||||
this.getAssetsMinimalJson$ = this.httpClient.get('/resources/assets.minimal.json').pipe(shareReplay());
|
||||
this.getMiningPools$ = this.httpClient.get('/resources/pools.json').pipe(shareReplay());
|
||||
let apiBaseUrl = '';
|
||||
if (!this.stateService.isBrowser) {
|
||||
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());
|
||||
}
|
||||
}
|
||||
|
@ -4,13 +4,17 @@ import { Injectable } from '@angular/core';
|
||||
providedIn: 'root'
|
||||
})
|
||||
export class AudioService {
|
||||
audio = new Audio();
|
||||
audio: HTMLAudioElement;
|
||||
isPlaying = false;
|
||||
|
||||
constructor() { }
|
||||
constructor() {
|
||||
try {
|
||||
this.audio = new Audio();
|
||||
} catch (e) {}
|
||||
}
|
||||
|
||||
public playSound(name: 'magic' | 'chime' | 'cha-ching' | 'bright-harmony') {
|
||||
if (this.isPlaying) {
|
||||
if (this.isPlaying || !this.audio) {
|
||||
return;
|
||||
}
|
||||
this.isPlaying = true;
|
||||
|
@ -3,86 +3,88 @@ import { HttpClient } from '@angular/common/http';
|
||||
import { Observable } from 'rxjs';
|
||||
import { Block, Transaction, Address, Outspend, Recent, Asset } from '../interfaces/electrs.interface';
|
||||
import { StateService } from './state.service';
|
||||
import { env } from '../app.constants';
|
||||
|
||||
const API_BASE_URL = '{network}/api';
|
||||
|
||||
@Injectable({
|
||||
providedIn: 'root'
|
||||
})
|
||||
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(
|
||||
private httpClient: HttpClient,
|
||||
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) => {
|
||||
if (network === 'bisq') {
|
||||
network = '';
|
||||
}
|
||||
this.apiBaseUrl = API_BASE_URL.replace('{network}', network ? '/' + network : '');
|
||||
this.apiBasePath = network ? '/' + network : '';
|
||||
});
|
||||
}
|
||||
|
||||
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[]> {
|
||||
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> {
|
||||
return this.httpClient.get<Transaction>(this.apiBaseUrl + '/tx/' + txId);
|
||||
return this.httpClient.get<Transaction>(this.apiBaseUrl + this.apiBasePath + '/api/tx/' + txId);
|
||||
}
|
||||
|
||||
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> {
|
||||
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[]> {
|
||||
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[]> {
|
||||
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> {
|
||||
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> {
|
||||
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[]> {
|
||||
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[]> {
|
||||
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> {
|
||||
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[]> {
|
||||
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[]> {
|
||||
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[]> {
|
||||
return this.httpClient.get<string[]>(this.apiBaseUrl + '/address-prefix/' + prefix);
|
||||
return this.httpClient.get<string[]>(this.apiBaseUrl + this.apiBasePath + '/api/address-prefix/' + prefix);
|
||||
}
|
||||
}
|
||||
|
42
frontend/src/app/services/http-cache.interceptor.ts
Normal file
42
frontend/src/app/services/http-cache.interceptor.ts
Normal 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);
|
||||
}
|
||||
}));
|
||||
}
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
import { Injectable } from '@angular/core';
|
||||
import { Title } from '@angular/platform-browser';
|
||||
import { Title, Meta } from '@angular/platform-browser';
|
||||
import { StateService } from './state.service';
|
||||
|
||||
@Injectable({
|
||||
@ -10,6 +10,7 @@ export class SeoService {
|
||||
|
||||
constructor(
|
||||
private titleService: Title,
|
||||
private metaService: Meta,
|
||||
private stateService: StateService,
|
||||
) {
|
||||
this.stateService.networkChanged$.subscribe((network) => this.network = network);
|
||||
@ -17,10 +18,12 @@ export class SeoService {
|
||||
|
||||
setTitle(newTitle: string): void {
|
||||
this.titleService.setTitle(newTitle + ' - ' + this.getTitle());
|
||||
this.metaService.updateTag({ property: 'og:title', content: newTitle});
|
||||
}
|
||||
|
||||
resetTitle(): void {
|
||||
this.titleService.setTitle(this.getTitle());
|
||||
this.metaService.updateTag({ property: 'og:title', content: this.getTitle()});
|
||||
}
|
||||
|
||||
getTitle(): string {
|
||||
|
@ -1,11 +1,11 @@
|
||||
import { Injectable } from '@angular/core';
|
||||
import { ReplaySubject, BehaviorSubject, Subject, fromEvent } from 'rxjs';
|
||||
import { Inject, Injectable, PLATFORM_ID } from '@angular/core';
|
||||
import { ReplaySubject, BehaviorSubject, Subject, fromEvent, Observable } from 'rxjs';
|
||||
import { Block, Transaction } from '../interfaces/electrs.interface';
|
||||
import { MempoolBlock, MempoolInfo, TransactionStripped } from '../interfaces/websocket.interface';
|
||||
import { OptimizedMempoolStats } from '../interfaces/node-api.interface';
|
||||
import { Router, NavigationStart } from '@angular/router';
|
||||
import { env } from '../app.constants';
|
||||
import { shareReplay, map } from 'rxjs/operators';
|
||||
import { isPlatformBrowser } from '@angular/common';
|
||||
import { map, shareReplay } from 'rxjs/operators';
|
||||
|
||||
interface MarkBlockState {
|
||||
blockHeight?: number;
|
||||
@ -13,15 +13,43 @@ interface MarkBlockState {
|
||||
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({
|
||||
providedIn: 'root'
|
||||
})
|
||||
export class StateService {
|
||||
isBrowser: boolean = isPlatformBrowser(this.platformId);
|
||||
network = '';
|
||||
env: Env;
|
||||
latestBlockHeight = 0;
|
||||
|
||||
networkChanged$ = new ReplaySubject<string>(1);
|
||||
blocks$ = new ReplaySubject<[Block, boolean]>(env.KEEP_BLOCKS_AMOUNT);
|
||||
blocks$: ReplaySubject<[Block, boolean]>;
|
||||
transactions$ = new ReplaySubject<TransactionStripped>(6);
|
||||
conversions$ = new ReplaySubject<any>(1);
|
||||
bsqPrice$ = new ReplaySubject<number>(1);
|
||||
@ -40,21 +68,35 @@ export class StateService {
|
||||
|
||||
viewFiat$ = new BehaviorSubject<boolean>(false);
|
||||
connectionState$ = new BehaviorSubject<0 | 1 | 2>(2);
|
||||
isTabHidden$ = fromEvent(document, 'visibilitychange').pipe(map((event) => this.isHidden()), shareReplay());
|
||||
isTabHidden$: Observable<boolean>;
|
||||
|
||||
markBlock$ = new ReplaySubject<MarkBlockState>();
|
||||
keyNavigation$ = new Subject<KeyboardEvent>();
|
||||
|
||||
constructor(
|
||||
@Inject(PLATFORM_ID) private platformId: any,
|
||||
private router: Router,
|
||||
) {
|
||||
this.setNetworkBasedonUrl(window.location.pathname);
|
||||
|
||||
this.router.events.subscribe((event) => {
|
||||
if (event instanceof NavigationStart) {
|
||||
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) {
|
||||
|
@ -4,19 +4,23 @@ import { WebsocketResponse } from '../interfaces/websocket.interface';
|
||||
import { StateService } from './state.service';
|
||||
import { Block, Transaction } from '../interfaces/electrs.interface';
|
||||
import { Subscription } from 'rxjs';
|
||||
import { env } from '../app.constants';
|
||||
|
||||
const WEB_SOCKET_PROTOCOL = (document.location.protocol === 'https:') ? 'wss:' : 'ws:';
|
||||
const WEB_SOCKET_URL = WEB_SOCKET_PROTOCOL + '//' + document.location.hostname + ':' + document.location.port + '{network}/api/v1/ws';
|
||||
import { ApiService } from './api.service';
|
||||
import { take } from 'rxjs/operators';
|
||||
import { TransferState, makeStateKey } from '@angular/platform-browser';
|
||||
|
||||
const OFFLINE_RETRY_AFTER_MS = 10000;
|
||||
const OFFLINE_PING_CHECK_AFTER_MS = 30000;
|
||||
const EXPECT_PING_RESPONSE_AFTER_MS = 4000;
|
||||
|
||||
const initData = makeStateKey('/api/v1/init-data');
|
||||
|
||||
@Injectable({
|
||||
providedIn: 'root'
|
||||
})
|
||||
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 goneOffline = false;
|
||||
private lastWant: string[] | null = null;
|
||||
@ -29,135 +33,64 @@ export class WebsocketService {
|
||||
|
||||
constructor(
|
||||
private stateService: StateService,
|
||||
private apiService: ApiService,
|
||||
private transferState: TransferState,
|
||||
) {
|
||||
this.network = this.stateService.network === 'bisq' && !env.BISQ_SEPARATE_BACKEND ? '' : this.stateService.network;
|
||||
this.websocketSubject = webSocket<WebsocketResponse>(WEB_SOCKET_URL.replace('{network}', this.network ? '/' + this.network : ''));
|
||||
this.startSubscription();
|
||||
if (!this.stateService.isBrowser) {
|
||||
// @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 : ''));
|
||||
|
||||
this.stateService.networkChanged$.subscribe((network) => {
|
||||
if (network === 'bisq' && !env.BISQ_SEPARATE_BACKEND) {
|
||||
network = '';
|
||||
const theInitData = this.transferState.get(initData, null);
|
||||
if (theInitData) {
|
||||
this.handleResponse(theInitData.body);
|
||||
this.startSubscription(false, true);
|
||||
} else {
|
||||
this.startSubscription();
|
||||
}
|
||||
if (network === this.network) {
|
||||
return;
|
||||
}
|
||||
this.network = network;
|
||||
clearTimeout(this.onlineCheckTimeout);
|
||||
clearTimeout(this.onlineCheckTimeoutTwo);
|
||||
|
||||
this.stateService.latestBlockHeight = 0;
|
||||
this.stateService.networkChanged$.subscribe((network) => {
|
||||
if (network === 'bisq' && !this.stateService.env.BISQ_SEPARATE_BACKEND) {
|
||||
network = '';
|
||||
}
|
||||
if (network === this.network) {
|
||||
return;
|
||||
}
|
||||
this.network = network;
|
||||
clearTimeout(this.onlineCheckTimeout);
|
||||
clearTimeout(this.onlineCheckTimeoutTwo);
|
||||
|
||||
this.websocketSubject.complete();
|
||||
this.subscription.unsubscribe();
|
||||
this.websocketSubject = webSocket<WebsocketResponse>(WEB_SOCKET_URL.replace('{network}', this.network ? '/' + this.network : ''));
|
||||
this.stateService.latestBlockHeight = 0;
|
||||
|
||||
this.startSubscription();
|
||||
});
|
||||
this.websocketSubject.complete();
|
||||
this.subscription.unsubscribe();
|
||||
this.websocketSubject = webSocket<WebsocketResponse>(
|
||||
this.webSocketUrl.replace('{network}', this.network ? '/' + this.network : '')
|
||||
);
|
||||
|
||||
this.startSubscription();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
startSubscription(retrying = false) {
|
||||
this.stateService.isLoadingWebSocket$.next(true);
|
||||
startSubscription(retrying = false, hasInitData = false) {
|
||||
if (!hasInitData) {
|
||||
this.stateService.isLoadingWebSocket$.next(true);
|
||||
this.websocketSubject.next({'action': 'init'});
|
||||
}
|
||||
if (retrying) {
|
||||
this.stateService.connectionState$.next(1);
|
||||
}
|
||||
this.websocketSubject.next({'action': 'init'});
|
||||
this.subscription = this.websocketSubject
|
||||
.subscribe((response: WebsocketResponse) => {
|
||||
this.stateService.isLoadingWebSocket$.next(false);
|
||||
if (response.blocks && response.blocks.length) {
|
||||
const blocks = response.blocks;
|
||||
blocks.forEach((block: Block) => {
|
||||
if (block.height > this.stateService.latestBlockHeight) {
|
||||
this.stateService.latestBlockHeight = block.height;
|
||||
this.stateService.blocks$.next([block, false]);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (response.tx) {
|
||||
this.stateService.mempoolTransactions$.next(response.tx);
|
||||
}
|
||||
|
||||
if (response.block) {
|
||||
if (response.block.height > this.stateService.latestBlockHeight) {
|
||||
this.stateService.latestBlockHeight = response.block.height;
|
||||
this.stateService.blocks$.next([response.block, !!response.txConfirmed]);
|
||||
}
|
||||
|
||||
if (response.txConfirmed) {
|
||||
this.isTrackingTx = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (response.conversions) {
|
||||
this.stateService.conversions$.next(response.conversions);
|
||||
}
|
||||
|
||||
if (response.rbfTransaction) {
|
||||
this.stateService.txReplaced$.next(response.rbfTransaction);
|
||||
}
|
||||
|
||||
if (response['mempool-blocks']) {
|
||||
this.stateService.mempoolBlocks$.next(response['mempool-blocks']);
|
||||
}
|
||||
|
||||
if (response.transactions) {
|
||||
response.transactions.forEach((tx) => this.stateService.transactions$.next(tx));
|
||||
}
|
||||
|
||||
if (response['bsq-price']) {
|
||||
this.stateService.bsqPrice$.next(response['bsq-price']);
|
||||
}
|
||||
|
||||
if (response['git-commit']) {
|
||||
this.stateService.gitCommit$.next(response['git-commit']);
|
||||
|
||||
if (!this.latestGitCommit) {
|
||||
this.latestGitCommit = response['git-commit'];
|
||||
} else {
|
||||
if (this.latestGitCommit !== response['git-commit']) {
|
||||
setTimeout(() => {
|
||||
window.location.reload();
|
||||
}, Math.floor(Math.random() * 60000) + 60000);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (response['address-transactions']) {
|
||||
response['address-transactions'].forEach((addressTransaction: Transaction) => {
|
||||
this.stateService.mempoolTransactions$.next(addressTransaction);
|
||||
});
|
||||
}
|
||||
|
||||
if (response['block-transactions']) {
|
||||
response['block-transactions'].forEach((addressTransaction: Transaction) => {
|
||||
this.stateService.blockTransactions$.next(addressTransaction);
|
||||
});
|
||||
}
|
||||
|
||||
if (response['live-2h-chart']) {
|
||||
this.stateService.live2Chart$.next(response['live-2h-chart']);
|
||||
}
|
||||
|
||||
if (response.mempoolInfo) {
|
||||
this.stateService.mempoolInfo$.next(response.mempoolInfo);
|
||||
}
|
||||
|
||||
if (response.vBytesPerSecond !== undefined) {
|
||||
this.stateService.vbytesPerSecond$.next(response.vBytesPerSecond);
|
||||
}
|
||||
|
||||
if (response.lastDifficultyAdjustment !== undefined) {
|
||||
this.stateService.lastDifficultyAdjustment$.next(response.lastDifficultyAdjustment);
|
||||
}
|
||||
|
||||
if (response['git-commit']) {
|
||||
this.stateService.gitCommit$.next(response['git-commit']);
|
||||
}
|
||||
|
||||
if (response.donationConfirmed) {
|
||||
this.stateService.donationConfirmed$.next(true);
|
||||
}
|
||||
this.handleResponse(response);
|
||||
|
||||
if (this.goneOffline === true) {
|
||||
this.goneOffline = false;
|
||||
@ -226,6 +159,9 @@ export class WebsocketService {
|
||||
}
|
||||
|
||||
want(data: string[], force = false) {
|
||||
if (!this.stateService.isBrowser) {
|
||||
return;
|
||||
}
|
||||
if (data === this.lastWant && !force) {
|
||||
return;
|
||||
}
|
||||
@ -257,4 +193,101 @@ export class WebsocketService {
|
||||
}, EXPECT_PING_RESPONSE_AFTER_MS);
|
||||
}, OFFLINE_PING_CHECK_AFTER_MS);
|
||||
}
|
||||
|
||||
handleResponse(response: WebsocketResponse) {
|
||||
if (response.blocks && response.blocks.length) {
|
||||
const blocks = response.blocks;
|
||||
blocks.forEach((block: Block) => {
|
||||
if (block.height > this.stateService.latestBlockHeight) {
|
||||
this.stateService.latestBlockHeight = block.height;
|
||||
this.stateService.blocks$.next([block, false]);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (response.tx) {
|
||||
this.stateService.mempoolTransactions$.next(response.tx);
|
||||
}
|
||||
|
||||
if (response.block) {
|
||||
if (response.block.height > this.stateService.latestBlockHeight) {
|
||||
this.stateService.latestBlockHeight = response.block.height;
|
||||
this.stateService.blocks$.next([response.block, !!response.txConfirmed]);
|
||||
}
|
||||
|
||||
if (response.txConfirmed) {
|
||||
this.isTrackingTx = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (response.conversions) {
|
||||
this.stateService.conversions$.next(response.conversions);
|
||||
}
|
||||
|
||||
if (response.rbfTransaction) {
|
||||
this.stateService.txReplaced$.next(response.rbfTransaction);
|
||||
}
|
||||
|
||||
if (response['mempool-blocks']) {
|
||||
this.stateService.mempoolBlocks$.next(response['mempool-blocks']);
|
||||
}
|
||||
|
||||
if (response.transactions) {
|
||||
response.transactions.forEach((tx) => this.stateService.transactions$.next(tx));
|
||||
}
|
||||
|
||||
if (response['bsq-price']) {
|
||||
this.stateService.bsqPrice$.next(response['bsq-price']);
|
||||
}
|
||||
|
||||
if (response['git-commit']) {
|
||||
this.stateService.gitCommit$.next(response['git-commit']);
|
||||
|
||||
if (!this.latestGitCommit) {
|
||||
this.latestGitCommit = response['git-commit'];
|
||||
} else {
|
||||
if (this.latestGitCommit !== response['git-commit']) {
|
||||
setTimeout(() => {
|
||||
window.location.reload();
|
||||
}, Math.floor(Math.random() * 60000) + 60000);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (response['address-transactions']) {
|
||||
response['address-transactions'].forEach((addressTransaction: Transaction) => {
|
||||
this.stateService.mempoolTransactions$.next(addressTransaction);
|
||||
});
|
||||
}
|
||||
|
||||
if (response['block-transactions']) {
|
||||
response['block-transactions'].forEach((addressTransaction: Transaction) => {
|
||||
this.stateService.blockTransactions$.next(addressTransaction);
|
||||
});
|
||||
}
|
||||
|
||||
if (response['live-2h-chart']) {
|
||||
this.stateService.live2Chart$.next(response['live-2h-chart']);
|
||||
}
|
||||
|
||||
if (response.mempoolInfo) {
|
||||
this.stateService.mempoolInfo$.next(response.mempoolInfo);
|
||||
}
|
||||
|
||||
if (response.vBytesPerSecond !== undefined) {
|
||||
this.stateService.vbytesPerSecond$.next(response.vBytesPerSecond);
|
||||
}
|
||||
|
||||
if (response.lastDifficultyAdjustment !== undefined) {
|
||||
this.stateService.lastDifficultyAdjustment$.next(response.lastDifficultyAdjustment);
|
||||
}
|
||||
|
||||
if (response['git-commit']) {
|
||||
this.stateService.gitCommit$.next(response['git-commit']);
|
||||
}
|
||||
|
||||
if (response.donationConfirmed) {
|
||||
this.stateService.donationConfirmed$.next(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -32,10 +32,6 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
</head>
|
||||
<body>
|
||||
<noscript>
|
||||
<div style="font-size: 36px">🚨 mempool requires javascript🚨</div>
|
||||
<div style="font-size: 20px"> You need to enable JS in your browser to use this website.</div>
|
||||
</noscript>
|
||||
<app-root></app-root>
|
||||
<script type="text/javascript">
|
||||
if (document.location.hostname === "mempool.space")
|
||||
|
@ -3,7 +3,7 @@
|
||||
<body>
|
||||
<trans-unit datatype="html" id="bisq.transaction.browser-title">
|
||||
<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 context-type="sourcefile">src/app/components/transaction/transaction.component.ts</context>
|
||||
<context context-type="linenumber">48</context>
|
||||
@ -42,6 +42,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="8e623d3cfecb7c560c114390db53c1f430ffd0de">
|
||||
<source><x equiv-text="{{ i }}" id="INTERPOLATION"/> confirmation</source>
|
||||
<target><x equiv-text="{{ i }}" id="INTERPOLATION"/>confirmation</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
|
||||
<context context-type="linenumber">17</context>
|
||||
@ -1151,7 +1152,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="c5d46228bea3555d65c705bad40be80f8798a113">
|
||||
<source>Reconnecting...</source>
|
||||
<target>Reconnection...</target>
|
||||
<target>Reconnexion...</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/master-page/master-page.component.html</context>
|
||||
<context context-type="linenumber">8</context>
|
||||
@ -2048,6 +2049,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="fe56475a8f4cf4bfc3acaafa215a7dd60d9ed7da">
|
||||
<source>Default push: <x ctype="x-code" equiv-text="<code>" 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="</code> " id="CLOSE_TAG_CODE"/> to express what you want pushed. Available: <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>blocks<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>mempool-block<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>live-2h-chart<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/>, and <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>stats<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/>.<x ctype="lb" equiv-text="<br>" id="LINE_BREAK"/><x ctype="lb" equiv-text="<br>" id="LINE_BREAK"/>Push transactions related to address: <x ctype="x-code" equiv-text="<code>" 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="</code> " 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="<code>" id="START_TAG_CODE"/>address-transactions<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/> for new mempool transactions, and <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>block-transactions<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/> for new block confirmed transactions.</source>
|
||||
<target>Pousser par défaut:<x ctype="x-code" equiv-text="<code>" 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="</code> " id="CLOSE_TAG_CODE"/> pour exprimer ce que vous voulez pousser. Disponible:<x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>blocks<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>mempool-block<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>live-2h-chart<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/>, et<x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>stats.<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/>.<x ctype="lb" equiv-text="<br>" id="LINE_BREAK"/><x ctype="lb" equiv-text="<br>" id="LINE_BREAK"/> Transaction pousser liées à l'adresse:<x ctype="x-code" equiv-text="<code>" 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="</code> " 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="<code>" id="START_TAG_CODE"/>address-transactions<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/>pour les nouvelles transactions mempool, et<x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>block-transactions<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/>pour les nouvelles transactions confirmées.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">19</context>
|
||||
@ -2134,6 +2136,7 @@
|
||||
</trans-unit>
|
||||
<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="<code>" id="START_TAG_CODE"/>start_index<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/>). Transactions returned here do not have the <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>status<x ctype="x-code" equiv-text="</code> " 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="<code>" id="START_TAG_CODE"/>start_index<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/>). Les transactions retournées n'ont pas le champ<x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>status<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/>, puisque toutes les transactions partagent le même statut.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">93</context>
|
||||
@ -2141,6 +2144,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="3846f2527c3c9a50bb84b2c941a876f66797449b">
|
||||
<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 context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">97</context>
|
||||
@ -2148,6 +2152,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="3e08815110b2e5ce8aa7256ed05a2faf6dbb7077">
|
||||
<source>Returns the transaction at index <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>:index<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/> within the specified block.</source>
|
||||
<target>Renvoie la transaction à l'index<x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>:index<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/>dans le bloc spécifié.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">101</context>
|
||||
@ -2155,6 +2160,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="6d5aacdd7e6c375570a88c25bfd0be82beba4c7b">
|
||||
<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 context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">105</context>
|
||||
@ -2162,6 +2168,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="36df9865e9099d98537ea69c9cfdc035d1b64116">
|
||||
<source>Returns the hash of the block currently at <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>:height<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>.</source>
|
||||
<target>Renvoie le hachage du bloc actuellement à<x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>:height<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">109</context>
|
||||
@ -2169,6 +2176,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="f8380186899495340cbfe7fb836ba664fb4b52af">
|
||||
<source>Returns the 10 newest blocks starting at the tip or at <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>:start_height<x ctype="x-code" equiv-text="</code> " 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="<code>" id="START_TAG_CODE"/>:start_height<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/> si spécifié.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">113</context>
|
||||
@ -2192,6 +2200,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="194d480219559b855b01ea58459066e3c63acdb2">
|
||||
<source>Returns details about a block. Available fields: <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>id<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>height<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>version<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>timestamp<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>bits<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>nonce<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>merkle_root<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>tx_count<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>size<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>weight<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>,<x ctype="x-ng_container" equiv-text="<ng-container *ngIf="network.val === 'liquid'"> " id="START_TAG_NG_CONTAINER"/><x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>proof<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>,<x ctype="x-ng_container" equiv-text="</ng-container> " id="CLOSE_TAG_NG_CONTAINER"/> and <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>previousblockhash<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>.</source>
|
||||
<target>Renvoie des détails sur un bloc. Champs disponibles: <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>id<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>height<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>version<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>timestamp<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>bits<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>nonce<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>merkle_root<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>tx_count<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>size<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>weight<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>,<x ctype="x-ng_container" equiv-text="<ng-container *ngIf="network.val === 'liquid'"> " id="START_TAG_NG_CONTAINER"/><x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>proof<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>,<x ctype="x-ng_container" equiv-text="</ng-container> " id="CLOSE_TAG_NG_CONTAINER"/> et <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>previousblockhash<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">85</context>
|
||||
@ -2199,6 +2208,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="8a4a4b8f308aaaeae782f7c9847013348d969c2d">
|
||||
<source>Transactions</source>
|
||||
<target>Transactions</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">129</context>
|
||||
@ -2208,6 +2218,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="a8ea1ec66e7bb9f92e87ae5482e50748baafffd2">
|
||||
<source>Returns details about a transaction. Available fields: <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>txid<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>version<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>locktime<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>size<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>weight<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>fee<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>vin<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>vout<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, and <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>status<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>.</source>
|
||||
<target>Renvoie des détails sur un bloc. Champs disponibles: <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>txid<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>version<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>locktime<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>size<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>weight<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>fee<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>vin<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>vout<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, et<x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>status<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">139</context>
|
||||
@ -2215,6 +2226,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="7e784cfa5833e7b54d4dfc723fabde94f66ebde3">
|
||||
<source>Returns the confirmation status of a transaction. Available fields: <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>confirmed<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/> (boolean), <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>block_height<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/> (optional), and <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>block_hash<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/> (optional).</source>
|
||||
<target>Renvoie l'état de confirmation d'une transaction. Champs disponibles:<x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>confirmed<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/> (booléen), <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>block_height<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/> (optionnel ), et <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>block_hash<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/> (optionnel).</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">143</context>
|
||||
@ -2222,6 +2234,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="34c21c242665d87bf22645c90f571bd5078eac93">
|
||||
<source>Returns a transaction serialized as hex.</source>
|
||||
<target>Renvoie une transaction sérialisée en hexadécimal.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">147</context>
|
||||
@ -2229,6 +2242,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="fd42ee72bb64b93578d7d2142ae50796d0056d7a">
|
||||
<source>Returns a transaction as binary data.</source>
|
||||
<target>Renvoie une transaction sous forme de données binaires.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">151</context>
|
||||
@ -2236,6 +2250,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="a57953199686e9980df838cb25edb51691941ac5">
|
||||
<source>Returns a merkle inclusion proof for the transaction using <x ctype="x-a" equiv-text="<a href="https://electrumx.readthedocs.io/en/latest/protocol-methods.html#blockchain-transaction-get-merkle">" id="START_LINK"/>Electrum's blockchain.transaction.get_merkle format.<x ctype="x-a" equiv-text="</a>" id="CLOSE_LINK"/></source>
|
||||
<target>Renvoie une preuve d'inclusion merkle pour la transaction en utilisant le format<x ctype="x-a" equiv-text="<a href="https://electrumx.readthedocs.io/en/latest/protocol-methods.html#blockchain-transaction-get-merkle">" id="START_LINK"/>blockchain.transaction.get_merkle d'Electrum<x ctype="x-a" equiv-text="</a>" id="CLOSE_LINK"/></target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">159</context>
|
||||
@ -2243,6 +2258,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="fe9a40b2ff9674b4ab7d82624ffed340c9ee5b89">
|
||||
<source>Returns the spending status of a transaction output. Available fields: <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>spent<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/> (boolean), <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>txid<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/> (optional), <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>vin<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/> (optional), and <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>status<x ctype="x-code" equiv-text="</code> " 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="<code>" id="START_TAG_CODE"/>spent<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/> (booléen), <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>txid<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/> (optionnel ), <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>vin<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/> (optionnel ), et <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>status<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/> (optionnel , l'état de la tx de dépense).</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">163</context>
|
||||
@ -2250,6 +2266,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="0358265aa88614843e1f5e887b94c673808c84f1">
|
||||
<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 context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">167</context>
|
||||
@ -2257,6 +2274,7 @@
|
||||
</trans-unit>
|
||||
<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="<code>" id="START_TAG_CODE"/>txid<x ctype="x-code" equiv-text="</code> " 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="<code>" id="START_TAG_CODE"/>txid<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/> sera retourné en cas de succès.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">171</context>
|
||||
@ -2264,6 +2282,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="d51106cc898981e9862d35a4db40796f0cf464f8">
|
||||
<source>Returns a merkle inclusion proof for the transaction using <x ctype="x-a" equiv-text="<a href="https://bitcoin.org/en/glossary/merkle-block">" id="START_LINK"/>bitcoind's merkleblock<x ctype="x-a" equiv-text="</a> " 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="<a href="https://bitcoin.org/en/glossary/merkle-block">" id="START_LINK"/>merkleblock de bitcoind<x ctype="x-a" equiv-text="</a> " id="CLOSE_LINK"/>.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">155</context>
|
||||
@ -2271,6 +2290,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="9885457131a86be85a59c5366767e82c12d0a288">
|
||||
<source>Addresses</source>
|
||||
<target>Adresses</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">179</context>
|
||||
@ -2280,6 +2300,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="e12cd52eaa77b446ba97436c145b59741151adf3">
|
||||
<source>Returns details about an address. Available fields: <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>address<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>chain_stats<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, and <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>mempool_stats<x ctype="x-code" equiv-text="</code>" 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="<code>" id="START_TAG_CODE"/>tx_count<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>funded_txo_count<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>funded_txo_sum<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>spent_txo_count<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, and <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>spent_txo_sum<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>.</source>
|
||||
<target>Renvoie des détails sur une adresse. Champs disponibles:<x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>address<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>chain_stats<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, et <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>mempool_stats<x ctype="x-code" equiv-text="</code>" 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="<code>" id="START_TAG_CODE"/>tx_count<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>funded_txo_count<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>funded_txo_sum<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>spent_txo_count<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, et <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>spent_txo_sum<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">189</context>
|
||||
@ -2287,6 +2308,7 @@
|
||||
</trans-unit>
|
||||
<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="<code>" id="START_TAG_CODE"/>:last_seen_txid<x ctype="x-code" equiv-text="</code> " 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="<code>" id="START_TAG_CODE"/>:last_seen_txid<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/> (voir ci-dessous). </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">193,194</context>
|
||||
@ -2294,6 +2316,7 @@
|
||||
</trans-unit>
|
||||
<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>
|
||||
<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. D’additionnel peut être demandé en spécifiant le dernier txid vu par la requête précédente.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">197</context>
|
||||
@ -2301,6 +2324,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="f10009779c64e19e20414fae506f27118420aa33">
|
||||
<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 context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">201</context>
|
||||
@ -2308,6 +2332,7 @@
|
||||
</trans-unit>
|
||||
<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="<code>" id="START_TAG_CODE"/>txid<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>vout<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>value<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, and <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>status<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/> (with the status of the funding tx).<x ctype="x-ng_container" equiv-text="<ng-container *ngIf="network.val === 'liquid'">" id="START_TAG_NG_CONTAINER"/>There is also a <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>valuecommitment<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/> field that may appear in place of <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>value<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, plus the following additional fields: <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>asset<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>/<x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>assetcommitment<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>nonce<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>/<x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>noncecommitment<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>surjection_proof<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, and <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>range_proof<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>.<x ctype="x-ng_container" equiv-text="</ng-container>" 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="<code>" id="START_TAG_CODE"/>txid<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>vout<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>value<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, et <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>status<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/> (avec l'état de la tx financières).<x ctype="x-ng_container" equiv-text="<ng-container *ngIf="network.val === 'liquid'">" id="START_TAG_NG_CONTAINER"/>Il y a aussi <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>valuecommitment<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/> champ qui peut apparaître à la place de<x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>value<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, ainsi que les champs supplémentaires suivants: <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>asset<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>/<x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>assetcommitment<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>nonce<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>/<x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>noncecommitment<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>surjection_proof<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, et <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>range_proof<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>.<x ctype="x-ng_container" equiv-text="</ng-container>" id="CLOSE_TAG_NG_CONTAINER"/></target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">205</context>
|
||||
@ -2315,6 +2340,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="b861fd11d5aa8772acc40c5412621b6dd52378e8">
|
||||
<source>Assets</source>
|
||||
<target>Actifs</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">213</context>
|
||||
@ -2324,6 +2350,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="b885a96aa1a96bff3f603dab79746f90eef5cbdf">
|
||||
<source>Returns information about a Liquid asset.</source>
|
||||
<target>Renvoie des informations sur un actif Liquide.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">223</context>
|
||||
@ -2331,6 +2358,7 @@
|
||||
</trans-unit>
|
||||
<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>
|
||||
<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 context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">227</context>
|
||||
@ -2338,6 +2366,7 @@
|
||||
</trans-unit>
|
||||
<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>
|
||||
<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 context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">231</context>
|
||||
@ -2345,6 +2374,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="a29245620333b4788dee4c478c327d99846513c6">
|
||||
<source>BSQ</source>
|
||||
<target>BSQ</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">238</context>
|
||||
@ -2354,6 +2384,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="088d201b8d0589637d7aa64457a6cdd97a5d0f11">
|
||||
<source>Returns statistics about all Bisq transactions.</source>
|
||||
<target>Renvoie des statistiques sur toutes les transactions Bisq.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">248</context>
|
||||
@ -2361,6 +2392,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="5d67fbdf2986058351024c16d526c444475ead37">
|
||||
<source>Returns details about a Bisq transaction.</source>
|
||||
<target>Renvoie les détails d'une transaction Bisq.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">252</context>
|
||||
@ -2368,6 +2400,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="e9a58657c410cf65dba4c3cdfb1af7099dedb241">
|
||||
<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 context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">256</context>
|
||||
@ -2375,6 +2408,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="e7e7c97535181ba299bc0ad02904f851088a0dd5">
|
||||
<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 context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">260</context>
|
||||
@ -2382,6 +2416,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="6fdafaace68cb298c6281e89eedc704f3d8f3f6a">
|
||||
<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 context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">264</context>
|
||||
@ -2389,6 +2424,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="ac234ff46c8f499399a20fb5d74005094de7cdcd">
|
||||
<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 context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">268</context>
|
||||
@ -2396,6 +2432,7 @@
|
||||
</trans-unit>
|
||||
<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>
|
||||
<target>Renvoie toutes les transactions Bisq appartenant à une adresse Bitcoin, avec le préfixe 'B' devant l'adresse.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">272</context>
|
||||
@ -2403,6 +2440,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="clipboard.copied-message">
|
||||
<source>Copied!</source>
|
||||
<target>Copié!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/clipboard/clipboard.component.ts</context>
|
||||
<context context-type="linenumber">15</context>
|
||||
@ -2410,6 +2448,7 @@
|
||||
</trans-unit>
|
||||
<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>
|
||||
<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 context-type="sourcefile">src/app/components/tx-features/tx-features.component.html</context>
|
||||
<context context-type="linenumber">1</context>
|
||||
@ -2436,6 +2475,7 @@
|
||||
</trans-unit>
|
||||
<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>
|
||||
<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 context-type="sourcefile">src/app/components/tx-features/tx-features.component.html</context>
|
||||
<context context-type="linenumber">3</context>
|
||||
@ -2444,6 +2484,7 @@
|
||||
</trans-unit>
|
||||
<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>
|
||||
<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 context-type="sourcefile">src/app/components/tx-features/tx-features.component.html</context>
|
||||
<context context-type="linenumber">5</context>
|
||||
@ -2452,6 +2493,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="5531c86f8e09b83930f66566fb85baf3057e2f51">
|
||||
<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 context-type="sourcefile">src/app/components/tx-features/tx-features.component.html</context>
|
||||
<context context-type="linenumber">8</context>
|
||||
@ -2460,6 +2502,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="f0e7d6d900658ee5ce66d8fef3637caf13891c53">
|
||||
<source>RBF</source>
|
||||
<target>RBF</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tx-features/tx-features.component.html</context>
|
||||
<context context-type="linenumber">8</context>
|
||||
@ -2479,6 +2522,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="f1b50928719b5261ccc81e9ec3ea4cc074018f89">
|
||||
<source>Only ~<x equiv-text="ltip="Only ~{{ median" id="INTERPOLATION"/> sat/vB was needed to get into this block</source>
|
||||
<target>Seulement ~ <x equiv-text="ltip="Only ~{{ median" id="INTERPOLATION"/>sat/vB était nécessaire pour entrer dans ce bloc</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tx-fee-rating/tx-fee-rating.component.html</context>
|
||||
<context context-type="linenumber">2</context>
|
||||
@ -2491,6 +2535,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="0fa66b0c410bef320d3f370d7c98c51754b5f28f">
|
||||
<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 context-type="sourcefile">src/app/components/tx-fee-rating/tx-fee-rating.component.html</context>
|
||||
<context context-type="linenumber">2</context>
|
||||
@ -2500,6 +2545,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="f948156b1396cbbf78bbbce437c4d73a1f0770f3">
|
||||
<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 context-type="sourcefile">src/app/components/tx-fee-rating/tx-fee-rating.component.html</context>
|
||||
<context context-type="linenumber">3</context>
|
||||
@ -2509,6 +2555,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="time-since.just-now">
|
||||
<source>Just now</source>
|
||||
<target>À l'instant même </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context>
|
||||
<context context-type="linenumber">49</context>
|
||||
@ -2516,6 +2563,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="time-since.year.ago">
|
||||
<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 context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context>
|
||||
<context context-type="linenumber">58</context>
|
||||
@ -2523,6 +2571,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="time-since.month.ago">
|
||||
<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 context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context>
|
||||
<context context-type="linenumber">59</context>
|
||||
@ -2530,6 +2579,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="time-since.week.ago">
|
||||
<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 context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context>
|
||||
<context context-type="linenumber">60</context>
|
||||
@ -2537,6 +2587,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="time-since.day.ago">
|
||||
<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 context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context>
|
||||
<context context-type="linenumber">61</context>
|
||||
@ -2544,6 +2595,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="time-since.hour.ago">
|
||||
<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 context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context>
|
||||
<context context-type="linenumber">62</context>
|
||||
@ -2551,6 +2603,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="time-since.min.ago">
|
||||
<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 context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context>
|
||||
<context context-type="linenumber">65</context>
|
||||
@ -2558,6 +2611,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="time-since.minute.ago">
|
||||
<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 context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context>
|
||||
<context context-type="linenumber">67</context>
|
||||
@ -2565,6 +2619,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="time-since.sec.ago">
|
||||
<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 context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context>
|
||||
<context context-type="linenumber">70</context>
|
||||
@ -2572,6 +2627,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="time-since.second.ago">
|
||||
<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 context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context>
|
||||
<context context-type="linenumber">72</context>
|
||||
@ -2579,6 +2635,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="time-since.years.ago">
|
||||
<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 context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context>
|
||||
<context context-type="linenumber">76</context>
|
||||
@ -2586,6 +2643,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="time-since.months.ago">
|
||||
<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 context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context>
|
||||
<context context-type="linenumber">77</context>
|
||||
@ -2593,6 +2651,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="time-since.weeks.ago">
|
||||
<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 context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context>
|
||||
<context context-type="linenumber">78</context>
|
||||
@ -2600,6 +2659,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="time-since.days.ago">
|
||||
<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 context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context>
|
||||
<context context-type="linenumber">79</context>
|
||||
@ -2607,6 +2667,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="time-since.hours.ago">
|
||||
<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 context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context>
|
||||
<context context-type="linenumber">80</context>
|
||||
@ -2614,6 +2675,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="time-since.mins.ago">
|
||||
<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 context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context>
|
||||
<context context-type="linenumber">83</context>
|
||||
@ -2621,6 +2683,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="time-since.minutes.ago">
|
||||
<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 context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context>
|
||||
<context context-type="linenumber">85</context>
|
||||
@ -2628,6 +2691,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="time-since.secs.ago">
|
||||
<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 context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context>
|
||||
<context context-type="linenumber">88</context>
|
||||
@ -2635,6 +2699,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="time-since.seconds.ago">
|
||||
<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 context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context>
|
||||
<context context-type="linenumber">90</context>
|
||||
@ -2642,6 +2707,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="2a30a4cdb123a03facc5ab8c5b3e6d8b8dbbc3d4">
|
||||
<source>BSQ statistics</source>
|
||||
<target>Statistiques de BSQ</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/bisq/bisq-stats/bisq-stats.component.ts</context>
|
||||
<context context-type="linenumber">24</context>
|
||||
@ -2653,6 +2719,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="1cde02174ca8cc2cc0b18172cd2ec598aa82dcc7">
|
||||
<source>Existing amount</source>
|
||||
<target>Somme existantes</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/bisq/bisq-stats/bisq-stats.component.html</context>
|
||||
<context context-type="linenumber">12</context>
|
||||
@ -2665,6 +2732,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="3218e6768d0d5fbc69d4931819e21451c89ba8ed">
|
||||
<source>Minted amount</source>
|
||||
<target>Somme émis</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/bisq/bisq-stats/bisq-stats.component.html</context>
|
||||
<context context-type="linenumber">16</context>
|
||||
@ -2677,6 +2745,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="32377aae07f946d943f9361c8e518f714988c619">
|
||||
<source>Burnt amount</source>
|
||||
<target>Somme brulé</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/bisq/bisq-stats/bisq-stats.component.html</context>
|
||||
<context context-type="linenumber">20</context>
|
||||
@ -2697,6 +2766,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="7882f2edb1d4139800b276b6b0bbf5ae0b2234ef">
|
||||
<source>Addresses</source>
|
||||
<target>Adresses</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/bisq/bisq-stats/bisq-stats.component.html</context>
|
||||
<context context-type="linenumber">24</context>
|
||||
@ -2709,6 +2779,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="fb5b5aec9a6add4912de64b7bbc55884cc7f8e3a">
|
||||
<source>Unspent TXOs</source>
|
||||
<target>TXOs inutilisé</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/bisq/bisq-stats/bisq-stats.component.html</context>
|
||||
<context context-type="linenumber">28</context>
|
||||
@ -2721,6 +2792,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="0f8a41c901cd606bd3389d8a022cee193264f20b">
|
||||
<source>Spent TXOs</source>
|
||||
<target>TXOs dépensé</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/bisq/bisq-stats/bisq-stats.component.html</context>
|
||||
<context context-type="linenumber">32</context>
|
||||
@ -2729,6 +2801,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="4d6ee53858628de558a18623894a03c8673bce9e">
|
||||
<source>Price</source>
|
||||
<target>Prix</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/bisq/bisq-stats/bisq-stats.component.html</context>
|
||||
<context context-type="linenumber">36</context>
|
||||
@ -2741,6 +2814,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="b8552f7d0a57c0cc7e63eb57d3371ea35a8bbfd3">
|
||||
<source>Market cap</source>
|
||||
<target>Capitalisation boursière</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/bisq/bisq-stats/bisq-stats.component.html</context>
|
||||
<context context-type="linenumber">40</context>
|
||||
@ -2753,6 +2827,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="bisq-address.component.browser-title">
|
||||
<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 context-type="sourcefile">src/app/bisq/bisq-address/bisq-address.component.ts</context>
|
||||
<context context-type="linenumber">39</context>
|
||||
@ -2760,6 +2835,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="a1daf43d26259bffdd5eb2d405c61583540b113b">
|
||||
<source>Confirmed</source>
|
||||
<target>Confirmé</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/bisq/bisq-blocks/bisq-blocks.component.html</context>
|
||||
<context context-type="linenumber">13</context>
|
||||
@ -2772,6 +2848,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="23b4db80cfba2937f6b087d8776cb5cd6725a16b">
|
||||
<source>Inputs</source>
|
||||
<target>Entrées</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/bisq/bisq-transaction-details/bisq-transaction-details.component.html</context>
|
||||
<context context-type="linenumber">7</context>
|
||||
@ -2780,6 +2857,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="93883f08c5e22b14770da46e1a5b724bab7d43fb">
|
||||
<source>Outputs</source>
|
||||
<target>Sorties</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/bisq/bisq-transaction-details/bisq-transaction-details.component.html</context>
|
||||
<context context-type="linenumber">11</context>
|
||||
@ -2788,6 +2866,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="8fe73a4787b8068b2ba61f54ab7e0f9af2ea1fc9">
|
||||
<source>Version</source>
|
||||
<target>Version</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/bisq/bisq-transaction-details/bisq-transaction-details.component.html</context>
|
||||
<context context-type="linenumber">29</context>
|
||||
@ -2796,6 +2875,7 @@
|
||||
</trans-unit>
|
||||
<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>
|
||||
<target>Bloc <x equiv-text="block.height" id="BLOCK_HEIGHT"/>: <x equiv-text="block.hash" id="BLOCK_HASH"/></target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/bisq/bisq-block/bisq-block.component.ts</context>
|
||||
<context context-type="linenumber">85</context>
|
||||
@ -2803,6 +2883,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="6d0db947a91dc4884aefa858a27fc848530e6404">
|
||||
<source>Previous hash</source>
|
||||
<target>Hachage précédent</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/bisq/bisq-block/bisq-block.component.html</context>
|
||||
<context context-type="linenumber">35</context>
|
||||
@ -2816,6 +2897,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="bisq-transactions.filter">
|
||||
<source>Filter</source>
|
||||
<target>filtre</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/bisq/bisq-transactions/bisq-transactions.component.ts</context>
|
||||
<context context-type="linenumber">55</context>
|
||||
@ -2823,6 +2905,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="bisq-transactions.selectall">
|
||||
<source>Select all</source>
|
||||
<target>Tout sélectionner</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/bisq/bisq-transactions/bisq-transactions.component.ts</context>
|
||||
<context context-type="linenumber">56</context>
|
||||
@ -2830,6 +2913,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="bisq-transactions.unselectall">
|
||||
<source>Unselect all</source>
|
||||
<target>Tout déselectionner</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/bisq/bisq-transactions/bisq-transactions.component.ts</context>
|
||||
<context context-type="linenumber">57</context>
|
||||
|
@ -1316,7 +1316,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="90a59434bf67130fb2531e0610f10d28af0fcc87">
|
||||
<source>Navigate to <x ctype="x-a" equiv-text="<a href="https://mempool.space/about" target="_blank">" id="START_LINK"/>https://mempool.space/about<x ctype="x-a" equiv-text="</a> " id="CLOSE_LINK"/> to sponsor</source>
|
||||
<target>スポンサーになるには、<x ctype="x-a" equiv-text="<a href="https://mempool.space/about" target="_blank">" id="START_LINK"/>https://mempool.space/about<x ctype="x-a" equiv-text="</a> " id="CLOSE_LINK"/>に移動します。</target>
|
||||
<target>スポンサーになるには、<x ctype="x-a" equiv-text="<a href="https://mempool.space/about" target="_blank">" id="START_LINK"/>https://mempool.space/about<x ctype="x-a" equiv-text="</a> " id="CLOSE_LINK"/>に移動します。</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/about/about.component.html</context>
|
||||
<context context-type="linenumber">65</context>
|
||||
@ -2049,7 +2049,6 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="fe56475a8f4cf4bfc3acaafa215a7dd60d9ed7da">
|
||||
<source>Default push: <x ctype="x-code" equiv-text="<code>" 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="</code> " id="CLOSE_TAG_CODE"/> to express what you want pushed. Available: <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>blocks<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>mempool-block<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>live-2h-chart<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/>, and <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>stats<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/>.<x ctype="lb" equiv-text="<br>" id="LINE_BREAK"/><x ctype="lb" equiv-text="<br>" id="LINE_BREAK"/>Push transactions related to address: <x ctype="x-code" equiv-text="<code>" 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="</code> " 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="<code>" id="START_TAG_CODE"/>address-transactions<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/> for new mempool transactions, and <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>block-transactions<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/> for new block confirmed transactions.</source>
|
||||
<target>Default push: <x ctype="x-code" equiv-text="<code>" 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="</code> " id="CLOSE_TAG_CODE"/> to express what you want pushed. Available: <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>blocks<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>mempool-block<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>live-2h-chart<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/>, and <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>stats<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/>.<x ctype="lb" equiv-text="<br>" id="LINE_BREAK"/><x ctype="lb" equiv-text="<br>" id="LINE_BREAK"/>Push transactions related to address: <x ctype="x-code" equiv-text="<code>" 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="</code> " 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="<code>" id="START_TAG_CODE"/>address-transactions<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/> for new mempool transactions, and <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>block-transactions<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/> for new block confirmed transactions.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">19</context>
|
||||
@ -2118,7 +2117,6 @@
|
||||
</trans-unit>
|
||||
<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="<code>" id="START_TAG_CODE"/>txid<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>fee<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>vsize<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, and <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>value<x ctype="x-code" equiv-text="</code>" 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="<code>" id="START_TAG_CODE"/>txid<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>fee<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>vsize<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, and <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>value<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">67</context>
|
||||
@ -2128,7 +2126,6 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="a2c00fbdcce9d6291c3b04c67979f9694be23f28">
|
||||
<source>Returns the confirmation status of a block. Available fields: <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>in_best_chain<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/> (boolean, false for orphaned blocks), <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>next_best<x ctype="x-code" equiv-text="</code> " 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="<code>" id="START_TAG_CODE"/>in_best_chain<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/> (boolean, false for orphaned blocks), <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>next_best<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/> (the hash of the next block, only available for blocks in the best chain).</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">89</context>
|
||||
@ -2136,7 +2133,6 @@
|
||||
</trans-unit>
|
||||
<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="<code>" id="START_TAG_CODE"/>start_index<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/>). Transactions returned here do not have the <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>status<x ctype="x-code" equiv-text="</code> " 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="<code>" id="START_TAG_CODE"/>start_index<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/>). Transactions returned here do not have the <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>status<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/> field, since all the transactions share the same block and confirmation status.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">93</context>
|
||||
@ -2152,7 +2148,6 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="3e08815110b2e5ce8aa7256ed05a2faf6dbb7077">
|
||||
<source>Returns the transaction at index <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>:index<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/> within the specified block.</source>
|
||||
<target>Returns the transaction at index <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>:index<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/> within the specified block.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">101</context>
|
||||
@ -2160,7 +2155,6 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="6d5aacdd7e6c375570a88c25bfd0be82beba4c7b">
|
||||
<source>Returns the raw block representation in binary.</source>
|
||||
<target>Returns the raw block representation in binary.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">105</context>
|
||||
@ -2168,7 +2162,6 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="36df9865e9099d98537ea69c9cfdc035d1b64116">
|
||||
<source>Returns the hash of the block currently at <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>:height<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>.</source>
|
||||
<target>Returns the hash of the block currently at <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>:height<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">109</context>
|
||||
@ -2176,7 +2169,6 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="f8380186899495340cbfe7fb836ba664fb4b52af">
|
||||
<source>Returns the 10 newest blocks starting at the tip or at <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>:start_height<x ctype="x-code" equiv-text="</code> " 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="<code>" id="START_TAG_CODE"/>:start_height<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/> if specified.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">113</context>
|
||||
@ -2200,7 +2192,6 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="194d480219559b855b01ea58459066e3c63acdb2">
|
||||
<source>Returns details about a block. Available fields: <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>id<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>height<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>version<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>timestamp<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>bits<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>nonce<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>merkle_root<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>tx_count<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>size<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>weight<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>,<x ctype="x-ng_container" equiv-text="<ng-container *ngIf="network.val === 'liquid'"> " id="START_TAG_NG_CONTAINER"/><x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>proof<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>,<x ctype="x-ng_container" equiv-text="</ng-container> " id="CLOSE_TAG_NG_CONTAINER"/> and <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>previousblockhash<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>.</source>
|
||||
<target>Returns details about a block. Available fields: <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>id<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>height<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>version<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>timestamp<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>bits<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>nonce<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>merkle_root<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>tx_count<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>size<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>weight<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>,<x ctype="x-ng_container" equiv-text="<ng-container *ngIf="network.val === 'liquid'"> " id="START_TAG_NG_CONTAINER"/><x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>proof<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>,<x ctype="x-ng_container" equiv-text="</ng-container> " id="CLOSE_TAG_NG_CONTAINER"/> and <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>previousblockhash<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">85</context>
|
||||
@ -2218,7 +2209,6 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="a8ea1ec66e7bb9f92e87ae5482e50748baafffd2">
|
||||
<source>Returns details about a transaction. Available fields: <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>txid<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>version<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>locktime<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>size<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>weight<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>fee<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>vin<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>vout<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, and <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>status<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>.</source>
|
||||
<target>Returns details about a transaction. Available fields: <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>txid<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>version<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>locktime<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>size<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>weight<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>fee<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>vin<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>vout<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, and <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>status<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">139</context>
|
||||
@ -2226,7 +2216,6 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="7e784cfa5833e7b54d4dfc723fabde94f66ebde3">
|
||||
<source>Returns the confirmation status of a transaction. Available fields: <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>confirmed<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/> (boolean), <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>block_height<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/> (optional), and <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>block_hash<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/> (optional).</source>
|
||||
<target>Returns the confirmation status of a transaction. Available fields: <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>confirmed<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/> (boolean), <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>block_height<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/> (optional), and <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>block_hash<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/> (optional).</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">143</context>
|
||||
@ -2234,7 +2223,6 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="34c21c242665d87bf22645c90f571bd5078eac93">
|
||||
<source>Returns a transaction serialized as hex.</source>
|
||||
<target>Returns a transaction serialized as hex.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">147</context>
|
||||
@ -2250,7 +2238,6 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="a57953199686e9980df838cb25edb51691941ac5">
|
||||
<source>Returns a merkle inclusion proof for the transaction using <x ctype="x-a" equiv-text="<a href="https://electrumx.readthedocs.io/en/latest/protocol-methods.html#blockchain-transaction-get-merkle">" id="START_LINK"/>Electrum's blockchain.transaction.get_merkle format.<x ctype="x-a" equiv-text="</a>" id="CLOSE_LINK"/></source>
|
||||
<target>Returns a merkle inclusion proof for the transaction using <x ctype="x-a" equiv-text="<a href="https://electrumx.readthedocs.io/en/latest/protocol-methods.html#blockchain-transaction-get-merkle">" id="START_LINK"/>Electrum's blockchain.transaction.get_merkle format.<x ctype="x-a" equiv-text="</a>" id="CLOSE_LINK"/></target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">159</context>
|
||||
@ -2258,7 +2245,6 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="fe9a40b2ff9674b4ab7d82624ffed340c9ee5b89">
|
||||
<source>Returns the spending status of a transaction output. Available fields: <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>spent<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/> (boolean), <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>txid<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/> (optional), <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>vin<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/> (optional), and <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>status<x ctype="x-code" equiv-text="</code> " 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="<code>" id="START_TAG_CODE"/>spent<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/> (boolean), <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>txid<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/> (optional), <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>vin<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/> (optional), and <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>status<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/> (optional, the status of the spending tx).</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">163</context>
|
||||
@ -2266,7 +2252,6 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="0358265aa88614843e1f5e887b94c673808c84f1">
|
||||
<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 context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">167</context>
|
||||
@ -2274,7 +2259,6 @@
|
||||
</trans-unit>
|
||||
<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="<code>" id="START_TAG_CODE"/>txid<x ctype="x-code" equiv-text="</code> " 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="<code>" id="START_TAG_CODE"/>txid<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/> will be returned on success.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">171</context>
|
||||
@ -2282,7 +2266,6 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="d51106cc898981e9862d35a4db40796f0cf464f8">
|
||||
<source>Returns a merkle inclusion proof for the transaction using <x ctype="x-a" equiv-text="<a href="https://bitcoin.org/en/glossary/merkle-block">" id="START_LINK"/>bitcoind's merkleblock<x ctype="x-a" equiv-text="</a> " id="CLOSE_LINK"/> format.</source>
|
||||
<target>Returns a merkle inclusion proof for the transaction using <x ctype="x-a" equiv-text="<a href="https://bitcoin.org/en/glossary/merkle-block">" id="START_LINK"/>bitcoind's merkleblock<x ctype="x-a" equiv-text="</a> " id="CLOSE_LINK"/> format.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">155</context>
|
||||
@ -2300,7 +2283,6 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="e12cd52eaa77b446ba97436c145b59741151adf3">
|
||||
<source>Returns details about an address. Available fields: <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>address<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>chain_stats<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, and <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>mempool_stats<x ctype="x-code" equiv-text="</code>" 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="<code>" id="START_TAG_CODE"/>tx_count<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>funded_txo_count<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>funded_txo_sum<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>spent_txo_count<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, and <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>spent_txo_sum<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>.</source>
|
||||
<target>Returns details about an address. Available fields: <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>address<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>chain_stats<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, and <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>mempool_stats<x ctype="x-code" equiv-text="</code>" 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="<code>" id="START_TAG_CODE"/>tx_count<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>funded_txo_count<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>funded_txo_sum<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>spent_txo_count<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, and <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>spent_txo_sum<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">189</context>
|
||||
@ -2308,7 +2290,6 @@
|
||||
</trans-unit>
|
||||
<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="<code>" id="START_TAG_CODE"/>:last_seen_txid<x ctype="x-code" equiv-text="</code> " 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="<code>" id="START_TAG_CODE"/>:last_seen_txid<x ctype="x-code" equiv-text="</code> " id="CLOSE_TAG_CODE"/> (see below). </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">193,194</context>
|
||||
@ -2316,7 +2297,6 @@
|
||||
</trans-unit>
|
||||
<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>
|
||||
<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 context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">197</context>
|
||||
@ -2324,7 +2304,6 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="f10009779c64e19e20414fae506f27118420aa33">
|
||||
<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 context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">201</context>
|
||||
@ -2332,7 +2311,6 @@
|
||||
</trans-unit>
|
||||
<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="<code>" id="START_TAG_CODE"/>txid<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>vout<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>value<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, and <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>status<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/> (with the status of the funding tx).<x ctype="x-ng_container" equiv-text="<ng-container *ngIf="network.val === 'liquid'">" id="START_TAG_NG_CONTAINER"/>There is also a <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>valuecommitment<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/> field that may appear in place of <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>value<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, plus the following additional fields: <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>asset<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>/<x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>assetcommitment<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>nonce<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>/<x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>noncecommitment<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>surjection_proof<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, and <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>range_proof<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>.<x ctype="x-ng_container" equiv-text="</ng-container>" 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="<code>" id="START_TAG_CODE"/>txid<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>vout<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>value<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, and <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>status<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/> (with the status of the funding tx).<x ctype="x-ng_container" equiv-text="<ng-container *ngIf="network.val === 'liquid'">" id="START_TAG_NG_CONTAINER"/>There is also a <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>valuecommitment<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/> field that may appear in place of <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>value<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, plus the following additional fields: <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>asset<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>/<x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>assetcommitment<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>nonce<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>/<x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>noncecommitment<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>surjection_proof<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>, and <x ctype="x-code" equiv-text="<code>" id="START_TAG_CODE"/>range_proof<x ctype="x-code" equiv-text="</code>" id="CLOSE_TAG_CODE"/>.<x ctype="x-ng_container" equiv-text="</ng-container>" id="CLOSE_TAG_NG_CONTAINER"/></target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">205</context>
|
||||
@ -2358,7 +2336,6 @@
|
||||
</trans-unit>
|
||||
<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>
|
||||
<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 context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">227</context>
|
||||
@ -2366,7 +2343,6 @@
|
||||
</trans-unit>
|
||||
<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>
|
||||
<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 context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">231</context>
|
||||
@ -2400,7 +2376,6 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="e9a58657c410cf65dba4c3cdfb1af7099dedb241">
|
||||
<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 context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">256</context>
|
||||
@ -2408,7 +2383,6 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="e7e7c97535181ba299bc0ad02904f851088a0dd5">
|
||||
<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 context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">260</context>
|
||||
@ -2416,7 +2390,6 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="6fdafaace68cb298c6281e89eedc704f3d8f3f6a">
|
||||
<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 context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">264</context>
|
||||
@ -2424,7 +2397,6 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="ac234ff46c8f499399a20fb5d74005094de7cdcd">
|
||||
<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 context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">268</context>
|
||||
@ -2432,7 +2404,6 @@
|
||||
</trans-unit>
|
||||
<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>
|
||||
<target>Returns all Bisq transactions belonging to a Bitcoin address, with 'B' prefixed in front of the address.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">272</context>
|
||||
|
@ -1298,7 +1298,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="94731fb77c18c6d537337dddc3699f67a0587985">
|
||||
<source>Terms of Service</source>
|
||||
<target>Vilkår for bruk</target>
|
||||
<target>Bruksvilkår</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/about/about.component.html</context>
|
||||
<context context-type="linenumber">206</context>
|
||||
|
@ -2595,7 +2595,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit datatype="html" id="time-since.hour.ago">
|
||||
<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 context-type="sourcefile">src/app/components/time-since/time-since.component.ts</context>
|
||||
<context context-type="linenumber">62</context>
|
||||
|
16
frontend/src/main.server.ts
Normal file
16
frontend/src/main.server.ts
Normal 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';
|
@ -8,5 +8,7 @@ if (environment.production) {
|
||||
enableProdMode();
|
||||
}
|
||||
|
||||
platformBrowserDynamic().bootstrapModule(AppModule)
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
platformBrowserDynamic().bootstrapModule(AppModule)
|
||||
.catch(err => console.error(err));
|
||||
});
|
||||
|
@ -12,6 +12,9 @@
|
||||
},
|
||||
{
|
||||
"path": "./tsconfig.spec.json"
|
||||
},
|
||||
{
|
||||
"path": "./tsconfig.server.json"
|
||||
}
|
||||
]
|
||||
}
|
18
frontend/tsconfig.server.json
Normal file
18
frontend/tsconfig.server.json
Normal 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"
|
||||
}
|
||||
}
|
@ -18,6 +18,6 @@ do
|
||||
cd "${HOME}/${site}/frontend/"
|
||||
npm install
|
||||
npm run build
|
||||
rsync -av ./dist/mempool/* "${HOME}/public_html/${site}/"
|
||||
rsync -av ./dist/mempool/browser/* "${HOME}/public_html/${site}/"
|
||||
fi
|
||||
done
|
||||
|
@ -36,7 +36,7 @@ do
|
||||
cd "$HOME/${site}/frontend"
|
||||
npm install
|
||||
npm run build
|
||||
rsync -av ./dist/mempool/* "${HOME}/public_html/${site}/"
|
||||
rsync -av ./dist/mempool/browser/* "${HOME}/public_html/${site}/"
|
||||
fi
|
||||
|
||||
cd "$HOME/${site}/backend"
|
||||
|
212
production/nginx-mempool-ssr.conf
Normal file
212
production/nginx-mempool-ssr.conf
Normal 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";
|
||||
}
|
Loading…
Reference in New Issue
Block a user