mirror of
https://github.com/mempool/mempool.git
synced 2026-08-13 12:33:11 +02:00
Merge branch 'master' into natsoni/update-footer-logo
This commit is contained in:
commit
f202ae0e3c
27 changed files with 613 additions and 103 deletions
|
|
@ -114,31 +114,29 @@ class Mining {
|
|||
const poolsStatistics = {};
|
||||
|
||||
const poolsInfo: PoolInfo[] = await PoolsRepository.$getPoolsInfo(interval);
|
||||
const emptyBlocks: any[] = await BlocksRepository.$countEmptyBlocks(null, interval);
|
||||
|
||||
const poolsStats: PoolStats[] = [];
|
||||
let rank = 1;
|
||||
let blockCount = 0;
|
||||
|
||||
poolsInfo.forEach((poolInfo: PoolInfo) => {
|
||||
const emptyBlocksCount = emptyBlocks.filter((emptyCount) => emptyCount.poolId === poolInfo.poolId);
|
||||
const poolStat: PoolStats = {
|
||||
poolId: poolInfo.poolId, // mysql row id
|
||||
name: poolInfo.name,
|
||||
link: poolInfo.link,
|
||||
blockCount: poolInfo.blockCount,
|
||||
rank: rank++,
|
||||
emptyBlocks: emptyBlocksCount.length > 0 ? emptyBlocksCount[0]['count'] : 0,
|
||||
emptyBlocks: poolInfo.emptyBlocks,
|
||||
slug: poolInfo.slug,
|
||||
avgMatchRate: poolInfo.avgMatchRate !== null ? Math.round(100 * poolInfo.avgMatchRate) / 100 : null,
|
||||
avgFeeDelta: poolInfo.avgFeeDelta,
|
||||
poolUniqueId: poolInfo.poolUniqueId
|
||||
};
|
||||
poolsStats.push(poolStat);
|
||||
blockCount += poolInfo.blockCount;
|
||||
});
|
||||
|
||||
poolsStatistics['pools'] = poolsStats;
|
||||
|
||||
const blockCount: number = await BlocksRepository.$blockCount(null, interval);
|
||||
poolsStatistics['blockCount'] = blockCount;
|
||||
|
||||
const totalBlock24h: number = await BlocksRepository.$blockCount(null, '24h');
|
||||
|
|
@ -151,6 +149,8 @@ class Mining {
|
|||
poolsStatistics['lastEstimatedHashrate1w'] = await bitcoinClient.getNetworkHashPs(totalBlock1w);
|
||||
} catch (e) {
|
||||
poolsStatistics['lastEstimatedHashrate'] = 0;
|
||||
poolsStatistics['lastEstimatedHashrate3d'] = 0;
|
||||
poolsStatistics['lastEstimatedHashrate1w'] = 0;
|
||||
logger.debug('Bitcoin Core is not available, using zeroed value for current hashrate', logger.tags.mining);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ export interface PoolInfo {
|
|||
name: string;
|
||||
link: string;
|
||||
blockCount: number;
|
||||
emptyBlocks: number;
|
||||
slug: string;
|
||||
avgMatchRate: number | null;
|
||||
avgFeeDelta: number | null;
|
||||
|
|
@ -25,7 +26,6 @@ export interface PoolInfo {
|
|||
|
||||
export interface PoolStats extends PoolInfo {
|
||||
rank: number;
|
||||
emptyBlocks: number;
|
||||
}
|
||||
|
||||
export enum TemplateAlgorithm {
|
||||
|
|
|
|||
|
|
@ -305,39 +305,6 @@ class BlocksRepository {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get empty blocks for one or all pools
|
||||
* @asyncSafe
|
||||
*/
|
||||
public async $countEmptyBlocks(poolId: number | null, interval: string | null = null): Promise<any> {
|
||||
interval = Common.getSqlInterval(interval);
|
||||
|
||||
const params: any[] = [];
|
||||
let query = `SELECT count(height) as count, pools.id as poolId
|
||||
FROM blocks
|
||||
JOIN pools on pools.id = blocks.pool_id
|
||||
WHERE tx_count = 1 AND stale = 0`;
|
||||
|
||||
if (poolId) {
|
||||
query += ` AND pool_id = ?`;
|
||||
params.push(poolId);
|
||||
}
|
||||
|
||||
if (interval) {
|
||||
query += ` AND blockTimestamp BETWEEN DATE_SUB(NOW(), INTERVAL ${interval}) AND NOW()`;
|
||||
}
|
||||
|
||||
query += ` GROUP by pools.id`;
|
||||
|
||||
try {
|
||||
const [rows] = await DB.query(query, params);
|
||||
return rows;
|
||||
} catch (e) {
|
||||
logger.err('Cannot count empty blocks. Reason: ' + (e instanceof Error ? e.message : e));
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return most recent block height
|
||||
* @asyncSafe
|
||||
|
|
@ -360,17 +327,26 @@ class BlocksRepository {
|
|||
interval = Common.getSqlInterval(interval);
|
||||
|
||||
const params: any[] = [];
|
||||
let query = `SELECT count(height) as blockCount
|
||||
FROM blocks
|
||||
WHERE stale = 0`;
|
||||
|
||||
if (poolId) {
|
||||
query += ` AND pool_id = ?`;
|
||||
let query;
|
||||
if (!poolId && !interval) {
|
||||
// optimized query to get full indexed block count
|
||||
query = `SELECT CAST(COALESCE(MAX(height) - MIN(height) + 1, 0) AS SIGNED) as blockCount FROM blocks`;
|
||||
} else if (!poolId) {
|
||||
// optimized query for indexed count within an interval
|
||||
query = `SELECT GREATEST(0, COALESCE(
|
||||
CAST((SELECT height FROM blocks WHERE stale = 0 AND blockTimestamp <= NOW() ORDER BY blockTimestamp DESC LIMIT 1) AS SIGNED) -
|
||||
CAST((SELECT height FROM blocks WHERE stale = 0 AND blockTimestamp >= DATE_SUB(NOW(), INTERVAL ${interval}) ORDER BY blockTimestamp ASC LIMIT 1) AS SIGNED) + 1
|
||||
, 0)) as blockCount`;
|
||||
} else {
|
||||
// for specific pools, we do still have to actually count the blocks
|
||||
query = `SELECT count(*) as blockCount
|
||||
FROM blocks
|
||||
WHERE stale = 0 AND pool_id = ?`;
|
||||
params.push(poolId);
|
||||
}
|
||||
|
||||
if (interval) {
|
||||
query += ` AND blockTimestamp BETWEEN DATE_SUB(NOW(), INTERVAL ${interval}) AND NOW()`;
|
||||
if (interval) {
|
||||
query += ` AND blockTimestamp BETWEEN DATE_SUB(NOW(), INTERVAL ${interval}) AND NOW()`;
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@ class PoolsRepository {
|
|||
let query = `
|
||||
SELECT
|
||||
COUNT(blocks.height) As blockCount,
|
||||
COUNT(CASE WHEN blocks.tx_count = 1 THEN 1 END) AS emptyBlocks,
|
||||
pool_id AS poolId,
|
||||
pools.name AS name,
|
||||
pools.link AS link,
|
||||
|
|
@ -47,7 +48,7 @@ class PoolsRepository {
|
|||
unique_id as poolUniqueId
|
||||
FROM blocks
|
||||
JOIN pools on pools.id = pool_id
|
||||
LEFT JOIN blocks_audits ON blocks_audits.height = blocks.height
|
||||
LEFT JOIN blocks_audits ON blocks_audits.hash = blocks.hash
|
||||
WHERE blocks.stale = 0
|
||||
`;
|
||||
|
||||
|
|
|
|||
270
frontend/package-lock.json
generated
270
frontend/package-lock.json
generated
|
|
@ -32,7 +32,7 @@
|
|||
"bootstrap": "~5.3.8",
|
||||
"clipboard": "^2.0.11",
|
||||
"domino": "^2.1.6",
|
||||
"echarts": "~5.4.0",
|
||||
"echarts": "~6.1.0",
|
||||
"ngx-echarts": "~20.0.2",
|
||||
"ngx-infinite-scroll": "^20.0.0",
|
||||
"qrcode": "1.5.1",
|
||||
|
|
@ -354,6 +354,22 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"node_modules/@angular-devkit/architect/node_modules/chokidar": {
|
||||
"version": "4.0.3",
|
||||
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz",
|
||||
"integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
|
||||
"optional": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"readdirp": "^4.0.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 14.16.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://paulmillr.com/funding/"
|
||||
}
|
||||
},
|
||||
"node_modules/@angular-devkit/architect/node_modules/json-schema-traverse": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
|
||||
|
|
@ -372,6 +388,20 @@
|
|||
"url": "https://github.com/sponsors/jonschlinkert"
|
||||
}
|
||||
},
|
||||
"node_modules/@angular-devkit/architect/node_modules/readdirp": {
|
||||
"version": "4.1.2",
|
||||
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz",
|
||||
"integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==",
|
||||
"optional": true,
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">= 14.18.0"
|
||||
},
|
||||
"funding": {
|
||||
"type": "individual",
|
||||
"url": "https://paulmillr.com/funding/"
|
||||
}
|
||||
},
|
||||
"node_modules/@angular-devkit/architect/node_modules/source-map": {
|
||||
"version": "0.7.6",
|
||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz",
|
||||
|
|
@ -989,6 +1019,22 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"node_modules/@angular-devkit/build-angular/node_modules/chokidar": {
|
||||
"version": "4.0.3",
|
||||
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz",
|
||||
"integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
|
||||
"optional": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"readdirp": "^4.0.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 14.16.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://paulmillr.com/funding/"
|
||||
}
|
||||
},
|
||||
"node_modules/@angular-devkit/build-angular/node_modules/debug": {
|
||||
"version": "4.4.3",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
|
||||
|
|
@ -1107,6 +1153,20 @@
|
|||
"url": "https://github.com/sponsors/jonschlinkert"
|
||||
}
|
||||
},
|
||||
"node_modules/@angular-devkit/build-angular/node_modules/readdirp": {
|
||||
"version": "4.1.2",
|
||||
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz",
|
||||
"integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==",
|
||||
"optional": true,
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">= 14.18.0"
|
||||
},
|
||||
"funding": {
|
||||
"type": "individual",
|
||||
"url": "https://paulmillr.com/funding/"
|
||||
}
|
||||
},
|
||||
"node_modules/@angular-devkit/build-angular/node_modules/semver": {
|
||||
"version": "7.7.2",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
|
||||
|
|
@ -1243,6 +1303,22 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"node_modules/@angular-devkit/schematics/node_modules/chokidar": {
|
||||
"version": "4.0.3",
|
||||
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz",
|
||||
"integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
|
||||
"optional": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"readdirp": "^4.0.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 14.16.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://paulmillr.com/funding/"
|
||||
}
|
||||
},
|
||||
"node_modules/@angular-devkit/schematics/node_modules/json-schema-traverse": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
|
||||
|
|
@ -1261,6 +1337,20 @@
|
|||
"url": "https://github.com/sponsors/jonschlinkert"
|
||||
}
|
||||
},
|
||||
"node_modules/@angular-devkit/schematics/node_modules/readdirp": {
|
||||
"version": "4.1.2",
|
||||
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz",
|
||||
"integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==",
|
||||
"optional": true,
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">= 14.18.0"
|
||||
},
|
||||
"funding": {
|
||||
"type": "individual",
|
||||
"url": "https://paulmillr.com/funding/"
|
||||
}
|
||||
},
|
||||
"node_modules/@angular-devkit/schematics/node_modules/source-map": {
|
||||
"version": "0.7.6",
|
||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz",
|
||||
|
|
@ -2145,6 +2235,22 @@
|
|||
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/@angular/cli/node_modules/chokidar": {
|
||||
"version": "4.0.3",
|
||||
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz",
|
||||
"integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
|
||||
"optional": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"readdirp": "^4.0.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 14.16.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://paulmillr.com/funding/"
|
||||
}
|
||||
},
|
||||
"node_modules/@angular/cli/node_modules/cli-truncate": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz",
|
||||
|
|
@ -2220,6 +2326,20 @@
|
|||
"url": "https://github.com/sponsors/jonschlinkert"
|
||||
}
|
||||
},
|
||||
"node_modules/@angular/cli/node_modules/readdirp": {
|
||||
"version": "4.1.2",
|
||||
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz",
|
||||
"integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==",
|
||||
"optional": true,
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">= 14.18.0"
|
||||
},
|
||||
"funding": {
|
||||
"type": "individual",
|
||||
"url": "https://paulmillr.com/funding/"
|
||||
}
|
||||
},
|
||||
"node_modules/@angular/cli/node_modules/semver": {
|
||||
"version": "7.7.2",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
|
||||
|
|
@ -7455,6 +7575,22 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"node_modules/@schematics/angular/node_modules/chokidar": {
|
||||
"version": "4.0.3",
|
||||
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz",
|
||||
"integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
|
||||
"optional": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"readdirp": "^4.0.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 14.16.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://paulmillr.com/funding/"
|
||||
}
|
||||
},
|
||||
"node_modules/@schematics/angular/node_modules/json-schema-traverse": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
|
||||
|
|
@ -7473,6 +7609,20 @@
|
|||
"url": "https://github.com/sponsors/jonschlinkert"
|
||||
}
|
||||
},
|
||||
"node_modules/@schematics/angular/node_modules/readdirp": {
|
||||
"version": "4.1.2",
|
||||
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz",
|
||||
"integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==",
|
||||
"optional": true,
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">= 14.18.0"
|
||||
},
|
||||
"funding": {
|
||||
"type": "individual",
|
||||
"url": "https://paulmillr.com/funding/"
|
||||
}
|
||||
},
|
||||
"node_modules/@schematics/angular/node_modules/source-map": {
|
||||
"version": "0.7.6",
|
||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz",
|
||||
|
|
@ -10671,13 +10821,12 @@
|
|||
}
|
||||
},
|
||||
"node_modules/echarts": {
|
||||
"version": "5.4.3",
|
||||
"resolved": "https://registry.npmjs.org/echarts/-/echarts-5.4.3.tgz",
|
||||
"integrity": "sha512-mYKxLxhzy6zyTi/FaEbJMOZU1ULGEQHaeIeuMR5L+JnJTpz+YR03mnnpBhbR4+UYJAgiXgpyTVLffPAjOTLkZA==",
|
||||
"license": "Apache-2.0",
|
||||
"version": "6.1.0",
|
||||
"resolved": "https://registry.npmjs.org/echarts/-/echarts-6.1.0.tgz",
|
||||
"integrity": "sha512-q0yaFPggC9FUdsWH4blavRWFmxdrIodbkoKNAjJudAI6CA9gNPxHtV2RcZNEepZVlk4yvBYkOkbk6HIVpIyHZA==",
|
||||
"dependencies": {
|
||||
"tslib": "2.3.0",
|
||||
"zrender": "5.4.4"
|
||||
"zrender": "6.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/echarts/node_modules/tslib": {
|
||||
|
|
@ -18629,10 +18778,9 @@
|
|||
"license": "MIT"
|
||||
},
|
||||
"node_modules/zrender": {
|
||||
"version": "5.4.4",
|
||||
"resolved": "https://registry.npmjs.org/zrender/-/zrender-5.4.4.tgz",
|
||||
"integrity": "sha512-0VxCNJ7AGOMCWeHVyTrGzUgrK4asT4ml9PEkeGirAkKNYXYzoPJCLvmyfdoOXcjTHPs10OZVMfD1Rwg16AZyYw==",
|
||||
"license": "BSD-3-Clause",
|
||||
"version": "6.1.0",
|
||||
"resolved": "https://registry.npmjs.org/zrender/-/zrender-6.1.0.tgz",
|
||||
"integrity": "sha512-oEGMDB6pOP2S6OwRR4PdVv610zrjnA3Bh+JnSG12fYJlBKjtNAoEb5fSUoCOOINlH96I2fU38/A2UpRKs67xYQ==",
|
||||
"dependencies": {
|
||||
"tslib": "2.3.0"
|
||||
}
|
||||
|
|
@ -18640,8 +18788,7 @@
|
|||
"node_modules/zrender/node_modules/tslib": {
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz",
|
||||
"integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==",
|
||||
"license": "0BSD"
|
||||
"integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg=="
|
||||
}
|
||||
},
|
||||
"dependencies": {
|
||||
|
|
@ -18845,6 +18992,16 @@
|
|||
"ajv": "^8.0.0"
|
||||
}
|
||||
},
|
||||
"chokidar": {
|
||||
"version": "4.0.3",
|
||||
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz",
|
||||
"integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
|
||||
"optional": true,
|
||||
"peer": true,
|
||||
"requires": {
|
||||
"readdirp": "^4.0.1"
|
||||
}
|
||||
},
|
||||
"json-schema-traverse": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
|
||||
|
|
@ -18855,6 +19012,13 @@
|
|||
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
|
||||
"integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A=="
|
||||
},
|
||||
"readdirp": {
|
||||
"version": "4.1.2",
|
||||
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz",
|
||||
"integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==",
|
||||
"optional": true,
|
||||
"peer": true
|
||||
},
|
||||
"source-map": {
|
||||
"version": "0.7.6",
|
||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz",
|
||||
|
|
@ -19112,6 +19276,16 @@
|
|||
"ajv": "^8.0.0"
|
||||
}
|
||||
},
|
||||
"chokidar": {
|
||||
"version": "4.0.3",
|
||||
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz",
|
||||
"integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
|
||||
"optional": true,
|
||||
"peer": true,
|
||||
"requires": {
|
||||
"readdirp": "^4.0.1"
|
||||
}
|
||||
},
|
||||
"debug": {
|
||||
"version": "4.4.3",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
|
||||
|
|
@ -19192,6 +19366,13 @@
|
|||
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
|
||||
"integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A=="
|
||||
},
|
||||
"readdirp": {
|
||||
"version": "4.1.2",
|
||||
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz",
|
||||
"integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==",
|
||||
"optional": true,
|
||||
"peer": true
|
||||
},
|
||||
"semver": {
|
||||
"version": "7.7.2",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
|
||||
|
|
@ -19268,6 +19449,16 @@
|
|||
"ajv": "^8.0.0"
|
||||
}
|
||||
},
|
||||
"chokidar": {
|
||||
"version": "4.0.3",
|
||||
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz",
|
||||
"integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
|
||||
"optional": true,
|
||||
"peer": true,
|
||||
"requires": {
|
||||
"readdirp": "^4.0.1"
|
||||
}
|
||||
},
|
||||
"json-schema-traverse": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
|
||||
|
|
@ -19278,6 +19469,13 @@
|
|||
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
|
||||
"integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A=="
|
||||
},
|
||||
"readdirp": {
|
||||
"version": "4.1.2",
|
||||
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz",
|
||||
"integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==",
|
||||
"optional": true,
|
||||
"peer": true
|
||||
},
|
||||
"source-map": {
|
||||
"version": "0.7.6",
|
||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz",
|
||||
|
|
@ -19687,6 +19885,16 @@
|
|||
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz",
|
||||
"integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="
|
||||
},
|
||||
"chokidar": {
|
||||
"version": "4.0.3",
|
||||
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz",
|
||||
"integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
|
||||
"optional": true,
|
||||
"peer": true,
|
||||
"requires": {
|
||||
"readdirp": "^4.0.1"
|
||||
}
|
||||
},
|
||||
"cli-truncate": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz",
|
||||
|
|
@ -19734,6 +19942,13 @@
|
|||
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
|
||||
"integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A=="
|
||||
},
|
||||
"readdirp": {
|
||||
"version": "4.1.2",
|
||||
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz",
|
||||
"integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==",
|
||||
"optional": true,
|
||||
"peer": true
|
||||
},
|
||||
"semver": {
|
||||
"version": "7.7.2",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
|
||||
|
|
@ -22612,6 +22827,16 @@
|
|||
"ajv": "^8.0.0"
|
||||
}
|
||||
},
|
||||
"chokidar": {
|
||||
"version": "4.0.3",
|
||||
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz",
|
||||
"integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
|
||||
"optional": true,
|
||||
"peer": true,
|
||||
"requires": {
|
||||
"readdirp": "^4.0.1"
|
||||
}
|
||||
},
|
||||
"json-schema-traverse": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
|
||||
|
|
@ -22622,6 +22847,13 @@
|
|||
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
|
||||
"integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A=="
|
||||
},
|
||||
"readdirp": {
|
||||
"version": "4.1.2",
|
||||
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz",
|
||||
"integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==",
|
||||
"optional": true,
|
||||
"peer": true
|
||||
},
|
||||
"source-map": {
|
||||
"version": "0.7.6",
|
||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz",
|
||||
|
|
@ -24919,12 +25151,12 @@
|
|||
}
|
||||
},
|
||||
"echarts": {
|
||||
"version": "5.4.3",
|
||||
"resolved": "https://registry.npmjs.org/echarts/-/echarts-5.4.3.tgz",
|
||||
"integrity": "sha512-mYKxLxhzy6zyTi/FaEbJMOZU1ULGEQHaeIeuMR5L+JnJTpz+YR03mnnpBhbR4+UYJAgiXgpyTVLffPAjOTLkZA==",
|
||||
"version": "6.1.0",
|
||||
"resolved": "https://registry.npmjs.org/echarts/-/echarts-6.1.0.tgz",
|
||||
"integrity": "sha512-q0yaFPggC9FUdsWH4blavRWFmxdrIodbkoKNAjJudAI6CA9gNPxHtV2RcZNEepZVlk4yvBYkOkbk6HIVpIyHZA==",
|
||||
"requires": {
|
||||
"tslib": "2.3.0",
|
||||
"zrender": "5.4.4"
|
||||
"zrender": "6.1.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"tslib": {
|
||||
|
|
@ -30309,9 +30541,9 @@
|
|||
"integrity": "sha512-XE96n56IQpJM7NAoXswY3XRLcWFW83xe0BiAOeMD7K5k5xecOeul3Qcpx6GqEeeHNkW5DWL5zOyTbEfB4eti8w=="
|
||||
},
|
||||
"zrender": {
|
||||
"version": "5.4.4",
|
||||
"resolved": "https://registry.npmjs.org/zrender/-/zrender-5.4.4.tgz",
|
||||
"integrity": "sha512-0VxCNJ7AGOMCWeHVyTrGzUgrK4asT4ml9PEkeGirAkKNYXYzoPJCLvmyfdoOXcjTHPs10OZVMfD1Rwg16AZyYw==",
|
||||
"version": "6.1.0",
|
||||
"resolved": "https://registry.npmjs.org/zrender/-/zrender-6.1.0.tgz",
|
||||
"integrity": "sha512-oEGMDB6pOP2S6OwRR4PdVv610zrjnA3Bh+JnSG12fYJlBKjtNAoEb5fSUoCOOINlH96I2fU38/A2UpRKs67xYQ==",
|
||||
"requires": {
|
||||
"tslib": "2.3.0"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -82,7 +82,7 @@
|
|||
"bootstrap": "~5.3.8",
|
||||
"clipboard": "^2.0.11",
|
||||
"domino": "^2.1.6",
|
||||
"echarts": "~5.4.0",
|
||||
"echarts": "~6.1.0",
|
||||
"ngx-echarts": "~20.0.2",
|
||||
"ngx-infinite-scroll": "^20.0.0",
|
||||
"qrcode": "1.5.1",
|
||||
|
|
|
|||
|
|
@ -45,15 +45,289 @@
|
|||
<h3 i18n="about.sponsors.enterprise.withRocket">Enterprise Sponsors 🚀</h3>
|
||||
<div class="wrapper">
|
||||
<a href="https://spiral.xyz/" target="_blank" title="Spiral">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="-115 -15 879 679" style="background-color: rgb(27,20,100)" class="image">
|
||||
<svg class="image not-rounded" width="155" height="180" viewBox="0 0 155 180" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_441_342)">
|
||||
<path d="M91.4267 0H78.4761C77.2348 0 76.2285 1.01085 76.2285 2.25779V15.267C76.2285 16.514 77.2348 17.5248 78.4761 17.5248H91.4267C92.6681 17.5248 93.6744 16.514 93.6744 15.267V2.25779C93.6744 1.01085 92.6681 0 91.4267 0Z" fill="url(#paint0_linear_441_342)"/>
|
||||
<path d="M75.8447 2.78125H62.8941C61.6528 2.78125 60.6465 3.7921 60.6465 5.03904V18.0483C60.6465 19.2952 61.6528 20.3061 62.8941 20.3061H75.8447C77.086 20.3061 78.0923 19.2952 78.0923 18.0483V5.03904C78.0923 3.7921 77.086 2.78125 75.8447 2.78125Z" fill="url(#paint1_linear_441_342)"/>
|
||||
<path d="M62.1494 7.43164H49.1988C47.9575 7.43164 46.9512 8.44249 46.9512 9.68943V22.6987C46.9512 23.9456 47.9575 24.9565 49.1988 24.9565H62.1494C63.3907 24.9565 64.397 23.9456 64.397 22.6987V9.68943C64.397 8.44249 63.3907 7.43164 62.1494 7.43164Z" fill="url(#paint2_linear_441_342)"/>
|
||||
<path d="M50.2959 13.7324H37.3453C36.1039 13.7324 35.0977 14.7433 35.0977 15.9902V28.9995C35.0977 30.2464 36.1039 31.2573 37.3453 31.2573H50.2959C51.5372 31.2573 52.5435 30.2464 52.5435 28.9995V15.9902C52.5435 14.7433 51.5372 13.7324 50.2959 13.7324Z" fill="url(#paint3_linear_441_342)"/>
|
||||
<path d="M40.2373 21.4707H27.2867C26.0454 21.4707 25.0391 22.4815 25.0391 23.7285V36.7377C25.0391 37.9847 26.0454 38.9955 27.2867 38.9955H40.2373C41.4786 38.9955 42.4849 37.9847 42.4849 36.7377V23.7285C42.4849 22.4815 41.4786 21.4707 40.2373 21.4707Z" fill="url(#paint4_linear_441_342)"/>
|
||||
<path d="M31.9346 30.4238H18.9839C17.7426 30.4238 16.7363 31.4347 16.7363 32.6816V45.6909C16.7363 46.9378 17.7426 47.9487 18.9839 47.9487H31.9346C33.1759 47.9487 34.1822 46.9378 34.1822 45.6909V32.6816C34.1822 31.4347 33.1759 30.4238 31.9346 30.4238Z" fill="url(#paint5_linear_441_342)"/>
|
||||
<path d="M25.3389 40.375H12.3882C11.1469 40.375 10.1406 41.3858 10.1406 42.6328V55.642C10.1406 56.889 11.1469 57.8998 12.3882 57.8998H25.3389C26.5802 57.8998 27.5865 56.889 27.5865 55.642V42.6328C27.5865 41.3858 26.5802 40.375 25.3389 40.375Z" fill="url(#paint6_linear_441_342)"/>
|
||||
<path d="M20.415 51.1055H7.46441C6.22309 51.1055 5.2168 52.1163 5.2168 53.3633V66.3725C5.2168 67.6195 6.22309 68.6303 7.46441 68.6303H20.415C21.6563 68.6303 22.6626 67.6195 22.6626 66.3725V53.3633C22.6626 52.1163 21.6563 51.1055 20.415 51.1055Z" fill="url(#paint7_linear_441_342)"/>
|
||||
<path d="M17.1103 62.4004H4.15972C2.9184 62.4004 1.91211 63.4112 1.91211 64.6582V77.6674C1.91211 78.9144 2.9184 79.9252 4.15972 79.9252H17.1103C18.3517 79.9252 19.3579 78.9144 19.3579 77.6674V64.6582C19.3579 63.4112 18.3517 62.4004 17.1103 62.4004Z" fill="url(#paint8_linear_441_342)"/>
|
||||
<path d="M15.3857 74.0391H2.43511C1.19379 74.0391 0.1875 75.0499 0.1875 76.2969V89.3061C0.1875 90.5531 1.19379 91.5639 2.43511 91.5639H15.3857C16.6271 91.5639 17.6333 90.5531 17.6333 89.3061V76.2969C17.6333 75.0499 16.6271 74.0391 15.3857 74.0391Z" fill="url(#paint9_linear_441_342)"/>
|
||||
<path d="M15.1982 85.8047H2.24761C1.00629 85.8047 0 86.8155 0 88.0625V101.072C0 102.319 1.00629 103.33 2.24761 103.33H15.1982C16.4396 103.33 17.4458 102.319 17.4458 101.072V88.0625C17.4458 86.8155 16.4396 85.8047 15.1982 85.8047Z" fill="url(#paint10_linear_441_342)"/>
|
||||
<path d="M16.5029 97.4785H3.5523C2.31098 97.4785 1.30469 98.4894 1.30469 99.7363V112.746C1.30469 113.992 2.31098 115.003 3.5523 115.003H16.5029C17.7442 115.003 18.7505 113.992 18.7505 112.746V99.7363C18.7505 98.4894 17.7442 97.4785 16.5029 97.4785Z" fill="url(#paint11_linear_441_342)"/>
|
||||
<path d="M19.2568 108.842H6.3062C5.06488 108.842 4.05859 109.853 4.05859 111.1V124.109C4.05859 125.356 5.06488 126.367 6.3062 126.367H19.2568C20.4981 126.367 21.5044 125.356 21.5044 124.109V111.1C21.5044 109.853 20.4981 108.842 19.2568 108.842Z" fill="url(#paint12_linear_441_342)"/>
|
||||
<path d="M23.417 119.678H10.4664C9.22504 119.678 8.21875 120.689 8.21875 121.936V134.945C8.21875 136.192 9.22504 137.203 10.4664 137.203H23.417C24.6583 137.203 25.6646 136.192 25.6646 134.945V121.936C25.6646 120.689 24.6583 119.678 23.417 119.678Z" fill="url(#paint13_linear_441_342)"/>
|
||||
<path d="M28.9385 129.771H15.9878C14.7465 129.771 13.7402 130.782 13.7402 132.029V145.039C13.7402 146.285 14.7465 147.296 15.9878 147.296H28.9385C30.1798 147.296 31.1861 146.285 31.1861 145.039V132.029C31.1861 130.782 30.1798 129.771 28.9385 129.771Z" fill="url(#paint14_linear_441_342)"/>
|
||||
<path d="M35.7783 138.9H22.8277C21.5864 138.9 20.5801 139.911 20.5801 141.158V154.167C20.5801 155.414 21.5864 156.425 22.8277 156.425H35.7783C37.0196 156.425 38.0259 155.414 38.0259 154.167V141.158C38.0259 139.911 37.0196 138.9 35.7783 138.9Z" fill="url(#paint15_linear_441_342)"/>
|
||||
<path d="M43.8955 146.848H30.9449C29.7036 146.848 28.6973 147.858 28.6973 149.105V162.115C28.6973 163.362 29.7036 164.372 30.9449 164.372H43.8955C45.1368 164.372 46.1431 163.362 46.1431 162.115V149.105C46.1431 147.858 45.1368 146.848 43.8955 146.848Z" fill="url(#paint16_linear_441_342)"/>
|
||||
<path d="M53.2412 153.398H40.2906C39.0493 153.398 38.043 154.409 38.043 155.656V168.665C38.043 169.912 39.0493 170.923 40.2906 170.923H53.2412C54.4825 170.923 55.4888 169.912 55.4888 168.665V155.656C55.4888 154.409 54.4825 153.398 53.2412 153.398Z" fill="url(#paint17_linear_441_342)"/>
|
||||
<path d="M63.7764 158.33H50.8257C49.5844 158.33 48.5781 159.341 48.5781 160.588V173.597C48.5781 174.844 49.5844 175.855 50.8257 175.855H63.7764C65.0177 175.855 66.024 174.844 66.024 173.597V160.588C66.024 159.341 65.0177 158.33 63.7764 158.33Z" fill="url(#paint18_linear_441_342)"/>
|
||||
<path d="M75.456 161.43H62.5054C61.2641 161.43 60.2578 162.441 60.2578 163.687V176.697C60.2578 177.944 61.2641 178.955 62.5054 178.955H75.456C76.6974 178.955 77.7036 177.944 77.7036 176.697V163.687C77.7036 162.441 76.6974 161.43 75.456 161.43Z" fill="url(#paint19_linear_441_342)"/>
|
||||
<path d="M88.3213 162.475H75.3707C74.1293 162.475 73.123 163.485 73.123 164.732V177.742C73.123 178.989 74.1293 179.999 75.3707 179.999H88.3213C89.5626 179.999 90.5689 178.989 90.5689 177.742V164.732C90.5689 163.485 89.5626 162.475 88.3213 162.475Z" fill="url(#paint20_linear_441_342)"/>
|
||||
<path d="M103.837 160.953H90.8863C89.645 160.953 88.6387 161.964 88.6387 163.211V176.22C88.6387 177.467 89.645 178.478 90.8863 178.478H103.837C105.078 178.478 106.085 177.467 106.085 176.22V163.211C106.085 161.964 105.078 160.953 103.837 160.953Z" fill="url(#paint21_linear_441_342)"/>
|
||||
<path d="M116.72 156.889H103.769C102.528 156.889 101.521 157.9 101.521 159.146V172.156C101.521 173.403 102.528 174.414 103.769 174.414H116.72C117.961 174.414 118.967 173.403 118.967 172.156V159.146C118.967 157.9 117.961 156.889 116.72 156.889Z" fill="url(#paint22_linear_441_342)"/>
|
||||
<path d="M127.212 150.824H114.261C113.02 150.824 112.014 151.835 112.014 153.082V166.091C112.014 167.338 113.02 168.349 114.261 168.349H127.212C128.453 168.349 129.46 167.338 129.46 166.091V153.082C129.46 151.835 128.453 150.824 127.212 150.824Z" fill="url(#paint23_linear_441_342)"/>
|
||||
<path d="M135.56 143.293H122.609C121.368 143.293 120.361 144.304 120.361 145.551V158.56C120.361 159.807 121.368 160.818 122.609 160.818H135.56C136.801 160.818 137.807 159.807 137.807 158.56V145.551C137.807 144.304 136.801 143.293 135.56 143.293Z" fill="url(#paint24_linear_441_342)"/>
|
||||
<path d="M142.009 134.836H129.058C127.817 134.836 126.811 135.847 126.811 137.094V150.103C126.811 151.35 127.817 152.361 129.058 152.361H142.009C143.25 152.361 144.256 151.35 144.256 150.103V137.094C144.256 135.847 143.25 134.836 142.009 134.836Z" fill="url(#paint25_linear_441_342)"/>
|
||||
<path d="M146.845 125.895H133.894C132.653 125.895 131.646 126.905 131.646 128.152V141.162C131.646 142.409 132.653 143.419 133.894 143.419H146.845C148.086 143.419 149.092 142.409 149.092 141.162V128.152C149.092 126.905 148.086 125.895 146.845 125.895Z" fill="url(#paint26_linear_441_342)"/>
|
||||
<path d="M150.925 114.148H137.974C136.733 114.148 135.727 115.159 135.727 116.406V129.415C135.727 130.662 136.733 131.673 137.974 131.673H150.925C152.166 131.673 153.172 130.662 153.172 129.415V116.406C153.172 115.159 152.166 114.148 150.925 114.148Z" fill="url(#paint27_linear_441_342)"/>
|
||||
<path d="M152.753 102.021H139.802C138.561 102.021 137.555 103.032 137.555 104.279V117.289C137.555 118.535 138.561 119.546 139.802 119.546H152.753C153.994 119.546 155.001 118.535 155.001 117.289V104.279C155.001 103.032 153.994 102.021 152.753 102.021Z" fill="url(#paint28_linear_441_342)"/>
|
||||
<path d="M152.292 89.877H139.341C138.1 89.877 137.094 90.8878 137.094 92.1347V105.144C137.094 106.391 138.1 107.402 139.341 107.402H152.292C153.533 107.402 154.54 106.391 154.54 105.144V92.1347C154.54 90.8878 153.533 89.877 152.292 89.877Z" fill="url(#paint29_linear_441_342)"/>
|
||||
<path d="M149.501 78.082H136.55C135.309 78.082 134.303 79.0929 134.303 80.3398V93.3491C134.303 94.596 135.309 95.6069 136.55 95.6069H149.501C150.742 95.6069 151.749 94.596 151.749 93.3491V80.3398C151.749 79.0929 150.742 78.082 149.501 78.082Z" fill="url(#paint30_linear_441_342)"/>
|
||||
<path d="M144.347 66.9961H131.396C130.155 66.9961 129.148 68.0069 129.148 69.2539V82.2631C129.148 83.5101 130.155 84.5209 131.396 84.5209H144.347C145.588 84.5209 146.594 83.5101 146.594 82.2631V69.2539C146.594 68.0069 145.588 66.9961 144.347 66.9961Z" fill="url(#paint31_linear_441_342)"/>
|
||||
<path d="M137.425 57.6875H124.474C123.233 57.6875 122.227 58.6983 122.227 59.9453V72.9545C122.227 74.2015 123.233 75.2123 124.474 75.2123H137.425C138.666 75.2123 139.672 74.2015 139.672 72.9545V59.9453C139.672 58.6983 138.666 57.6875 137.425 57.6875Z" fill="url(#paint32_linear_441_342)"/>
|
||||
<path d="M128.974 50.3164H116.023C114.782 50.3164 113.775 51.3273 113.775 52.5742V65.5835C113.775 66.8304 114.782 67.8412 116.023 67.8412H128.974C130.215 67.8412 131.221 66.8304 131.221 65.5835V52.5742C131.221 51.3273 130.215 50.3164 128.974 50.3164Z" fill="url(#paint33_linear_441_342)"/>
|
||||
<path d="M118.235 44.918H105.285C104.043 44.918 103.037 45.9288 103.037 47.1758V60.185C103.037 61.432 104.043 62.4428 105.285 62.4428H118.235C119.477 62.4428 120.483 61.432 120.483 60.185V47.1758C120.483 45.9288 119.477 44.918 118.235 44.918Z" fill="url(#paint34_linear_441_342)"/>
|
||||
<path d="M104.95 42.3691H91.9996C90.7582 42.3691 89.752 43.38 89.752 44.6269V57.6362C89.752 58.8831 90.7582 59.894 91.9996 59.894H104.95C106.191 59.894 107.198 58.8831 107.198 57.6362V44.6269C107.198 43.38 106.191 42.3691 104.95 42.3691Z" fill="url(#paint35_linear_441_342)"/>
|
||||
<path d="M90.5244 43.2051H77.5738C76.3325 43.2051 75.3262 44.2159 75.3262 45.4629V58.4721C75.3262 59.7191 76.3325 60.7299 77.5738 60.7299H90.5244C91.7657 60.7299 92.772 59.7191 92.772 58.4721V45.4629C92.772 44.2159 91.7657 43.2051 90.5244 43.2051Z" fill="url(#paint36_linear_441_342)"/>
|
||||
<path d="M78.5244 46.7148H65.5738C64.3325 46.7148 63.3262 47.7257 63.3262 48.9726V61.9819C63.3262 63.2288 64.3325 64.2397 65.5738 64.2397H78.5244C79.7657 64.2397 80.772 63.2288 80.772 61.9819V48.9726C80.772 47.7257 79.7657 46.7148 78.5244 46.7148Z" fill="url(#paint37_linear_441_342)"/>
|
||||
<path d="M68.8701 52.1504H55.9195C54.6782 52.1504 53.6719 53.1612 53.6719 54.4082V67.4174C53.6719 68.6644 54.6782 69.6752 55.9195 69.6752H68.8701C70.1114 69.6752 71.1177 68.6644 71.1177 67.4174V54.4082C71.1177 53.1612 70.1114 52.1504 68.8701 52.1504Z" fill="url(#paint38_linear_441_342)"/>
|
||||
<path d="M60.3564 60.0605H47.4058C46.1645 60.0605 45.1582 61.0714 45.1582 62.3183V75.3276C45.1582 76.5745 46.1645 77.5854 47.4058 77.5854H60.3564C61.5977 77.5854 62.604 76.5745 62.604 75.3276V62.3183C62.604 61.0714 61.5977 60.0605 60.3564 60.0605Z" fill="url(#paint39_linear_441_342)"/>
|
||||
<path d="M54.0986 70.5801H41.148C39.9067 70.5801 38.9004 71.5909 38.9004 72.8379V85.8471C38.9004 87.0941 39.9067 88.1049 41.148 88.1049H54.0986C55.3399 88.1049 56.3462 87.0941 56.3462 85.8471V72.8379C56.3462 71.5909 55.3399 70.5801 54.0986 70.5801Z" fill="url(#paint40_linear_441_342)"/>
|
||||
<path d="M51.1377 82.2695H38.1871C36.9457 82.2695 35.9395 83.2804 35.9395 84.5273V97.5366C35.9395 98.7835 36.9457 99.7944 38.1871 99.7944H51.1377C52.379 99.7944 53.3853 98.7835 53.3853 97.5366V84.5273C53.3853 83.2804 52.379 82.2695 51.1377 82.2695Z" fill="url(#paint41_linear_441_342)"/>
|
||||
<path d="M51.5322 94.291H38.5816C37.3403 94.291 36.334 95.3019 36.334 96.5488V109.558C36.334 110.805 37.3403 111.816 38.5816 111.816H51.5322C52.7735 111.816 53.7798 110.805 53.7798 109.558V96.5488C53.7798 95.3019 52.7735 94.291 51.5322 94.291Z" fill="url(#paint42_linear_441_342)"/>
|
||||
<path d="M55.3349 105.816H42.3843C41.143 105.816 40.1367 106.827 40.1367 108.074V121.083C40.1367 122.33 41.143 123.341 42.3843 123.341H55.3349C56.5763 123.341 57.5826 122.33 57.5826 121.083V108.074C57.5826 106.827 56.5763 105.816 55.3349 105.816Z" fill="url(#paint43_linear_441_342)"/>
|
||||
<path d="M62.5127 115.918H49.5621C48.3207 115.918 47.3145 116.929 47.3145 118.176V131.185C47.3145 132.432 48.3207 133.443 49.5621 133.443H62.5127C63.754 133.443 64.7603 132.432 64.7603 131.185V118.176C64.7603 116.929 63.754 115.918 62.5127 115.918Z" fill="url(#paint44_linear_441_342)"/>
|
||||
<path d="M71.6064 122.869H58.6558C57.4145 122.869 56.4082 123.88 56.4082 125.127V138.136C56.4082 139.383 57.4145 140.394 58.6558 140.394H71.6064C72.8477 140.394 73.854 139.383 73.854 138.136V125.127C73.854 123.88 72.8477 122.869 71.6064 122.869Z" fill="url(#paint45_linear_441_342)"/>
|
||||
<path d="M83.4931 126.576H70.5425C69.3012 126.576 68.2949 127.587 68.2949 128.834V141.843C68.2949 143.09 69.3012 144.101 70.5425 144.101H83.4931C84.7345 144.101 85.7408 143.09 85.7408 141.843V128.834C85.7408 127.587 84.7345 126.576 83.4931 126.576Z" fill="url(#paint46_linear_441_342)"/>
|
||||
<path d="M99.9697 125.127H87.0191C85.7778 125.127 84.7715 126.138 84.7715 127.385V140.394C84.7715 141.641 85.7778 142.652 87.0191 142.652H99.9697C101.211 142.652 102.217 141.641 102.217 140.394V127.385C102.217 126.138 101.211 125.127 99.9697 125.127Z" fill="url(#paint47_linear_441_342)"/>
|
||||
<path d="M111.558 117.775H98.607C97.3657 117.775 96.3594 118.786 96.3594 120.033V133.042C96.3594 134.289 97.3657 135.3 98.607 135.3H111.558C112.799 135.3 113.805 134.289 113.805 133.042V120.033C113.805 118.786 112.799 117.775 111.558 117.775Z" fill="url(#paint48_linear_441_342)"/>
|
||||
<path d="M117.044 107.164H104.093C102.852 107.164 101.846 108.175 101.846 109.422V122.431C101.846 123.678 102.852 124.689 104.093 124.689H117.044C118.285 124.689 119.292 123.678 119.292 122.431V109.422C119.292 108.175 118.285 107.164 117.044 107.164Z" fill="url(#paint49_linear_441_342)"/>
|
||||
<path d="M117.704 96.1035H104.753C103.512 96.1035 102.506 97.1144 102.506 98.3613V111.371C102.506 112.618 103.512 113.628 104.753 113.628H117.704C118.945 113.628 119.952 112.618 119.952 111.371V98.3613C119.952 97.1144 118.945 96.1035 117.704 96.1035Z" fill="url(#paint50_linear_441_342)"/>
|
||||
<path d="M114.815 87.4043H101.865C100.623 87.4043 99.6172 88.4151 99.6172 89.6621V102.671C99.6172 103.918 100.623 104.929 101.865 104.929H114.815C116.057 104.929 117.063 103.918 117.063 102.671V89.6621C117.063 88.4151 116.057 87.4043 114.815 87.4043Z" fill="url(#paint51_linear_441_342)"/>
|
||||
<path d="M106.394 80.1777H93.4429C92.2016 80.1777 91.1953 81.1886 91.1953 82.4355V95.4448C91.1953 96.6917 92.2016 97.7026 93.4429 97.7026H106.394C107.635 97.7026 108.641 96.6917 108.641 95.4448V82.4355C108.641 81.1886 107.635 80.1777 106.394 80.1777Z" fill="url(#paint52_linear_441_342)"/>
|
||||
<path d="M95.6553 78.6895H82.7046C81.4633 78.6895 80.457 79.7003 80.457 80.9472V93.9565C80.457 95.2034 81.4633 96.2143 82.7046 96.2143H95.6553C96.8966 96.2143 97.9029 95.2034 97.9029 93.9565V80.9472C97.9029 79.7003 96.8966 78.6895 95.6553 78.6895Z" fill="url(#paint53_linear_441_342)"/>
|
||||
<path d="M86.7842 87.9707H73.8335C72.5922 87.9707 71.5859 88.9816 71.5859 90.2285V103.238C71.5859 104.485 72.5922 105.496 73.8335 105.496H86.7842C88.0255 105.496 89.0318 104.485 89.0318 103.238V90.2285C89.0318 88.9816 88.0255 87.9707 86.7842 87.9707Z" fill="url(#paint54_linear_441_342)"/>
|
||||
</g>
|
||||
<defs>
|
||||
<style>.cls-1{fill:url(#linear-gradient);}</style>
|
||||
<linearGradient id="linear-gradient" x1="81.36" y1="311.35" x2="541.35" y2="311.35" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0.18" stop-color="blue"/>
|
||||
<stop offset="1" stop-color="#f0f"/>
|
||||
<linearGradient id="paint0_linear_441_342" x1="88.4919" y1="16.0496" x2="82.958" y2="4.76016" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#1317F5"/>
|
||||
<stop offset="1" stop-color="#FF00E1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint1_linear_441_342" x1="72.9076" y1="18.8286" x2="67.376" y2="7.53915" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#1317F5"/>
|
||||
<stop offset="1" stop-color="#FF00E1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint2_linear_441_342" x1="59.2145" y1="23.479" x2="53.6807" y2="12.1895" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#1317F5"/>
|
||||
<stop offset="1" stop-color="#FF00E1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint3_linear_441_342" x1="47.3588" y1="29.782" x2="41.8249" y2="18.4926" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#1317F5"/>
|
||||
<stop offset="1" stop-color="#FF00E1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint4_linear_441_342" x1="37.3024" y1="37.5181" x2="31.7686" y2="26.2286" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#1317F5"/>
|
||||
<stop offset="1" stop-color="#FF00E1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint5_linear_441_342" x1="28.9997" y1="46.4712" x2="23.4658" y2="35.184" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#1317F5"/>
|
||||
<stop offset="1" stop-color="#FF00E1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint6_linear_441_342" x1="22.404" y1="56.4224" x2="16.8701" y2="45.1352" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#1317F5"/>
|
||||
<stop offset="1" stop-color="#FF00E1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint7_linear_441_342" x1="17.4779" y1="67.1528" x2="11.9463" y2="55.8656" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#1317F5"/>
|
||||
<stop offset="1" stop-color="#FF00E1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint8_linear_441_342" x1="14.1732" y1="78.45" x2="8.63936" y2="67.1605" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#1317F5"/>
|
||||
<stop offset="1" stop-color="#FF00E1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint9_linear_441_342" x1="12.4486" y1="90.0864" x2="6.917" y2="78.797" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#1317F5"/>
|
||||
<stop offset="1" stop-color="#FF00E1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint10_linear_441_342" x1="12.2611" y1="101.852" x2="6.72725" y2="90.5626" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#1317F5"/>
|
||||
<stop offset="1" stop-color="#FF00E1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint11_linear_441_342" x1="13.5658" y1="113.528" x2="8.03194" y2="102.239" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#1317F5"/>
|
||||
<stop offset="1" stop-color="#FF00E1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint12_linear_441_342" x1="16.3219" y1="124.891" x2="10.7881" y2="113.602" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#1317F5"/>
|
||||
<stop offset="1" stop-color="#FF00E1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint13_linear_441_342" x1="20.4799" y1="135.727" x2="14.9483" y2="124.44" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#1317F5"/>
|
||||
<stop offset="1" stop-color="#FF00E1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint14_linear_441_342" x1="26.0013" y1="145.821" x2="20.4697" y2="134.532" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#1317F5"/>
|
||||
<stop offset="1" stop-color="#FF00E1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint15_linear_441_342" x1="32.8412" y1="154.95" x2="27.3096" y2="143.661" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#1317F5"/>
|
||||
<stop offset="1" stop-color="#FF00E1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint16_linear_441_342" x1="40.9584" y1="162.897" x2="35.4245" y2="151.608" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#1317F5"/>
|
||||
<stop offset="1" stop-color="#FF00E1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint17_linear_441_342" x1="50.3063" y1="169.446" x2="44.7725" y2="158.159" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#1317F5"/>
|
||||
<stop offset="1" stop-color="#FF00E1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint18_linear_441_342" x1="60.8392" y1="174.38" x2="55.3054" y2="163.09" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#1317F5"/>
|
||||
<stop offset="1" stop-color="#FF00E1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint19_linear_441_342" x1="72.5212" y1="177.477" x2="66.9873" y2="166.19" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#1317F5"/>
|
||||
<stop offset="1" stop-color="#FF00E1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint20_linear_441_342" x1="85.3842" y1="178.522" x2="79.8525" y2="167.235" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#1317F5"/>
|
||||
<stop offset="1" stop-color="#FF00E1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint21_linear_441_342" x1="100.902" y1="177" x2="95.3682" y2="165.713" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#1317F5"/>
|
||||
<stop offset="1" stop-color="#FF00E1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint22_linear_441_342" x1="113.785" y1="172.938" x2="108.251" y2="161.649" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#1317F5"/>
|
||||
<stop offset="1" stop-color="#FF00E1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint23_linear_441_342" x1="124.275" y1="166.872" x2="118.743" y2="155.584" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#1317F5"/>
|
||||
<stop offset="1" stop-color="#FF00E1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint24_linear_441_342" x1="132.625" y1="159.34" x2="127.091" y2="148.053" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#1317F5"/>
|
||||
<stop offset="1" stop-color="#FF00E1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint25_linear_441_342" x1="139.072" y1="150.883" x2="133.538" y2="139.594" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#1317F5"/>
|
||||
<stop offset="1" stop-color="#FF00E1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint26_linear_441_342" x1="143.91" y1="141.944" x2="138.376" y2="130.655" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#1317F5"/>
|
||||
<stop offset="1" stop-color="#FF00E1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint27_linear_441_342" x1="147.988" y1="130.196" x2="142.454" y2="118.909" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#1317F5"/>
|
||||
<stop offset="1" stop-color="#FF00E1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint28_linear_441_342" x1="149.818" y1="118.071" x2="144.284" y2="106.782" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#1317F5"/>
|
||||
<stop offset="1" stop-color="#FF00E1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint29_linear_441_342" x1="149.357" y1="105.927" x2="143.823" y2="94.6394" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#1317F5"/>
|
||||
<stop offset="1" stop-color="#FF00E1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint30_linear_441_342" x1="146.566" y1="94.1317" x2="141.032" y2="82.8422" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#1317F5"/>
|
||||
<stop offset="1" stop-color="#FF00E1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint31_linear_441_342" x1="141.412" y1="83.0457" x2="135.878" y2="71.7563" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#1317F5"/>
|
||||
<stop offset="1" stop-color="#FF00E1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint32_linear_441_342" x1="134.488" y1="73.7349" x2="128.954" y2="62.4477" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#1317F5"/>
|
||||
<stop offset="1" stop-color="#FF00E1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint33_linear_441_342" x1="126.036" y1="66.3638" x2="120.503" y2="55.0766" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#1317F5"/>
|
||||
<stop offset="1" stop-color="#FF00E1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint34_linear_441_342" x1="115.3" y1="60.9653" x2="109.767" y2="49.6781" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#1317F5"/>
|
||||
<stop offset="1" stop-color="#FF00E1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint35_linear_441_342" x1="102.015" y1="58.4165" x2="96.4814" y2="47.127" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#1317F5"/>
|
||||
<stop offset="1" stop-color="#FF00E1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint36_linear_441_342" x1="87.5873" y1="59.2547" x2="82.0557" y2="47.9652" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#1317F5"/>
|
||||
<stop offset="1" stop-color="#FF00E1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint37_linear_441_342" x1="75.5873" y1="62.7622" x2="70.0534" y2="51.475" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#1317F5"/>
|
||||
<stop offset="1" stop-color="#FF00E1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint38_linear_441_342" x1="65.9352" y1="68.2" x2="60.4014" y2="56.9105" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#1317F5"/>
|
||||
<stop offset="1" stop-color="#FF00E1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint39_linear_441_342" x1="57.4193" y1="76.1079" x2="51.8855" y2="64.8185" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#1317F5"/>
|
||||
<stop offset="1" stop-color="#FF00E1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint40_linear_441_342" x1="51.1615" y1="86.6275" x2="45.6276" y2="75.3402" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#1317F5"/>
|
||||
<stop offset="1" stop-color="#FF00E1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint41_linear_441_342" x1="48.2028" y1="98.3192" x2="42.6689" y2="87.0297" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#1317F5"/>
|
||||
<stop offset="1" stop-color="#FF00E1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint42_linear_441_342" x1="48.5951" y1="110.341" x2="43.0612" y2="99.0512" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#1317F5"/>
|
||||
<stop offset="1" stop-color="#FF00E1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint43_linear_441_342" x1="52.3978" y1="121.866" x2="46.864" y2="110.577" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#1317F5"/>
|
||||
<stop offset="1" stop-color="#FF00E1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint44_linear_441_342" x1="59.5756" y1="131.968" x2="54.0417" y2="120.68" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#1317F5"/>
|
||||
<stop offset="1" stop-color="#FF00E1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint45_linear_441_342" x1="68.6693" y1="138.917" x2="63.1377" y2="127.629" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#1317F5"/>
|
||||
<stop offset="1" stop-color="#FF00E1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint46_linear_441_342" x1="80.5583" y1="142.626" x2="75.0244" y2="131.336" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#1317F5"/>
|
||||
<stop offset="1" stop-color="#FF00E1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint47_linear_441_342" x1="97.0326" y1="141.177" x2="91.4987" y2="129.887" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#1317F5"/>
|
||||
<stop offset="1" stop-color="#FF00E1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint48_linear_441_342" x1="108.623" y1="133.823" x2="103.089" y2="122.536" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#1317F5"/>
|
||||
<stop offset="1" stop-color="#FF00E1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint49_linear_441_342" x1="114.107" y1="123.214" x2="108.573" y2="111.924" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#1317F5"/>
|
||||
<stop offset="1" stop-color="#FF00E1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint50_linear_441_342" x1="114.767" y1="112.151" x2="109.235" y2="100.864" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#1317F5"/>
|
||||
<stop offset="1" stop-color="#FF00E1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint51_linear_441_342" x1="111.881" y1="103.454" x2="106.349" y2="92.1644" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#1317F5"/>
|
||||
<stop offset="1" stop-color="#FF00E1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint52_linear_441_342" x1="103.456" y1="96.2274" x2="97.9248" y2="84.9379" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#1317F5"/>
|
||||
<stop offset="1" stop-color="#FF00E1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint53_linear_441_342" x1="92.7204" y1="94.7368" x2="87.1865" y2="83.4474" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#1317F5"/>
|
||||
<stop offset="1" stop-color="#FF00E1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint54_linear_441_342" x1="83.8471" y1="104.02" x2="78.3132" y2="92.7309" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#1317F5"/>
|
||||
<stop offset="1" stop-color="#FF00E1"/>
|
||||
</linearGradient>
|
||||
<clipPath id="clip0_441_342">
|
||||
<rect width="155" height="180" fill="white"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
<path class="cls-1" d="M326.4,572.09C201.2,572.09,141,503,112.48,445,84.26,387.47,81.89,330.44,81.69,322.31c-4.85-77,41-231.78,249.58-271.2a28.05,28.05,0,0,1,10.41,55.13c-213.12,40.28-204.44,206-204,213,0,.53.06,1.06.07,1.6C137.9,328.74,142.85,516,326.4,516,394.74,516,443,486.6,470,428.63c24.48-52.74,19.29-112.45-13.52-155.83-22.89-30.27-52.46-45-90.38-45-34.46,0-63.47,9.88-86.21,29.37A91.5,91.5,0,0,0,248,322.3c-1.41,25.4,7.14,49.36,24.07,67.49C287.27,406,305,413.9,326.4,413.9c27.46,0,45.52-9,53.66-26.81,8.38-18.3,3.61-38.93-.19-43.33-9.11-10-18.69-13.68-22.48-13-2.53.43-5.78,4.61-8.48,10.92a28,28,0,0,1-51.58-22c14.28-33.44,37.94-42,50.76-44.2,24.78-4.18,52.17,7.3,73.34,30.65s25.51,68.55,10.15,103.22C421.54,432,394.52,470,326.4,470c-36.72,0-69.67-14.49-95.29-41.92C203.64,398.68,189.77,360,192,319.19a149.1,149.1,0,0,1,51.31-104.6c33.19-28.45,74.48-42.87,122.71-42.87,55.12,0,101.85,23.25,135.12,67.23,45.36,60,52.9,141.71,19.66,213.3C495.45,506.92,441.12,572.09,326.4,572.09Z"/>
|
||||
</svg>
|
||||
<span>Spiral</span>
|
||||
</a>
|
||||
|
|
|
|||
|
|
@ -220,6 +220,7 @@ export class AccelerationFeesGraphComponent implements OnInit, OnChanges, OnDest
|
|||
},
|
||||
},
|
||||
legend: {
|
||||
top: 'top',
|
||||
data: [
|
||||
{
|
||||
name: this.totalBidBoostLabel,
|
||||
|
|
|
|||
|
|
@ -211,6 +211,7 @@ export class AddressGraphComponent implements OnChanges, OnDestroy {
|
|||
},
|
||||
graphic: graphicElements.length > 0 ? graphicElements : undefined,
|
||||
legend: (this.showLegend && !this.stateService.isAnyTestnet()) ? {
|
||||
top: 'top',
|
||||
data: [
|
||||
{
|
||||
name: $localize`:@@7e69426bd97a606d8ae6026762858e6e7c86a1fd:Balance`,
|
||||
|
|
@ -451,6 +452,7 @@ export class AddressGraphComponent implements OnChanges, OnDestroy {
|
|||
},
|
||||
graphic: graphicElements.length > 0 ? graphicElements : undefined,
|
||||
legend: {
|
||||
top: 'top',
|
||||
selected: this.selected,
|
||||
},
|
||||
dataZoom: this.allowZoom ? [{
|
||||
|
|
@ -490,15 +492,15 @@ export class AddressGraphComponent implements OnChanges, OnDestroy {
|
|||
// Add a point at today's date to make the graph end at the current time
|
||||
extendedSummary.unshift({ time: Date.now() / 1000, value: 0 });
|
||||
|
||||
let maxTime = Date.now() / 1000;
|
||||
|
||||
const timeStep = 0.001;
|
||||
const oneHour = 60 * 60;
|
||||
// Fill gaps longer than interval
|
||||
for (let i = 0; i < extendedSummary.length - 1; i++) {
|
||||
if (extendedSummary[i].time > maxTime) {
|
||||
extendedSummary[i].time = maxTime - 30;
|
||||
if (extendedSummary[i].height !== undefined && extendedSummary[i + 1].height === extendedSummary[i].height) {
|
||||
extendedSummary[i + 1].time = extendedSummary[i].time;
|
||||
} else if (extendedSummary[i + 1].time >= extendedSummary[i].time) {
|
||||
extendedSummary[i + 1].time = extendedSummary[i].time - timeStep;
|
||||
}
|
||||
maxTime = extendedSummary[i].time;
|
||||
const hours = Math.floor((extendedSummary[i].time - extendedSummary[i + 1].time) / oneHour);
|
||||
if (hours > 1) {
|
||||
for (let j = 1; j < hours; j++) {
|
||||
|
|
|
|||
|
|
@ -281,6 +281,7 @@ export class BlockFeeRatesGraphComponent implements OnInit {
|
|||
},
|
||||
},
|
||||
legend: (this.widget || data.series.length === 0) ? undefined : {
|
||||
top: 'top',
|
||||
padding: [10, 75],
|
||||
data: data.legends,
|
||||
selected: JSON.parse(this.storageService.getValue('fee_rates_legend') || 'null') ?? {
|
||||
|
|
|
|||
|
|
@ -187,6 +187,7 @@ export class BlockFeesGraphComponent implements OnInit {
|
|||
}
|
||||
},
|
||||
legend: data.blockFees.length === 0 ? undefined : {
|
||||
top: 'top',
|
||||
data: [
|
||||
{
|
||||
name: feesBtcLabel,
|
||||
|
|
|
|||
|
|
@ -240,6 +240,7 @@ export class BlockFeesSubsidyGraphComponent implements OnInit {
|
|||
}
|
||||
],
|
||||
legend: this.data.blockFees.length === 0 ? undefined : {
|
||||
top: 'top',
|
||||
data: [
|
||||
{
|
||||
name: this.subsidyLabel,
|
||||
|
|
|
|||
|
|
@ -183,6 +183,7 @@ export class BlockRewardsGraphComponent implements OnInit {
|
|||
}
|
||||
},
|
||||
legend: data.blockRewards.length === 0 ? undefined : {
|
||||
top: 'top',
|
||||
data: [
|
||||
{
|
||||
name: 'Rewards BTC',
|
||||
|
|
|
|||
|
|
@ -182,7 +182,7 @@ export class BlockSizesWeightsGraphComponent implements OnInit {
|
|||
}
|
||||
},
|
||||
legend: data.sizes.length === 0 ? undefined : {
|
||||
padding: 10,
|
||||
top: 'top',
|
||||
data: [
|
||||
{
|
||||
name: $localize`:@@7faaaa08f56427999f3be41df1093ce4089bbd75:Size`,
|
||||
|
|
|
|||
|
|
@ -287,6 +287,7 @@ export class HashrateChartComponent implements OnInit {
|
|||
}
|
||||
},
|
||||
legend: (this.widget || data.hashrates.length === 0) ? undefined : {
|
||||
top: 'top',
|
||||
data: [
|
||||
{
|
||||
name: $localize`:@@79a9dc5b1caca3cbeb1733a19515edacc5fc7920:Hashrate`,
|
||||
|
|
|
|||
|
|
@ -250,6 +250,7 @@ export class HashrateChartPoolsComponent implements OnInit {
|
|||
}
|
||||
},
|
||||
legend: (this.isMobile() || data.series.length === 0) ? undefined : {
|
||||
top: 'top',
|
||||
data: data.legends
|
||||
},
|
||||
yAxis: data.series.length === 0 ? undefined : {
|
||||
|
|
|
|||
|
|
@ -240,6 +240,7 @@ export class PoolComponent implements OnInit, OnDestroy {
|
|||
}
|
||||
},
|
||||
legend: {
|
||||
top: 'top',
|
||||
data: [
|
||||
{
|
||||
name: $localize`:@@79a9dc5b1caca3cbeb1733a19515edacc5fc7920:Hashrate`,
|
||||
|
|
|
|||
|
|
@ -402,6 +402,7 @@ export class TreasuriesGraphComponent implements OnInit, OnChanges, OnDestroy {
|
|||
|
||||
this.chartOptions = {
|
||||
legend: {
|
||||
top: 'top',
|
||||
selected: this.selectedWallets,
|
||||
}
|
||||
};
|
||||
|
|
|
|||
|
|
@ -200,7 +200,7 @@ export class LightningStatisticsChartComponent implements OnInit, OnChanges {
|
|||
}
|
||||
},
|
||||
legend: this.widget || data.channel_count.length === 0 ? undefined : {
|
||||
padding: 10,
|
||||
top: 'top',
|
||||
data: [
|
||||
{
|
||||
name: $localize`:@@807cf11e6ac1cde912496f764c176bdfdd6b7e19:Channels`,
|
||||
|
|
|
|||
|
|
@ -713,7 +713,7 @@ function isNonStandardLegacySigops(tx: Transaction, height?: number, network?: s
|
|||
// A witness program is any valid scriptpubkey that consists of a 1-byte push opcode
|
||||
// followed by a data push between 2 and 40 bytes.
|
||||
// https://github.com/bitcoin/bitcoin/blob/2c79abc7ad4850e9e3ba32a04c530155cda7f980/src/script/script.cpp#L224-L240
|
||||
function isWitnessProgram(scriptpubkey: string): false | { version: number, program: string } {
|
||||
export function isWitnessProgram(scriptpubkey: string): false | { version: number, program: string } {
|
||||
if (scriptpubkey.length < 8 || scriptpubkey.length > 84) {
|
||||
return false;
|
||||
}
|
||||
|
|
@ -1456,6 +1456,11 @@ function fromBuffer(buffer: Uint8Array, network: string, inputs?: PsbtKeyValueMa
|
|||
export type PsbtKeyValue = { keyData: Uint8Array; value: Uint8Array; };
|
||||
export type PsbtKeyValueMap = Map<number, PsbtKeyValue[]>;
|
||||
|
||||
export const PSBT_GLOBAL = {
|
||||
UNSIGNED_TX: 0x00,
|
||||
GENERIC_SIGNED_MESSAGE: 0x09,
|
||||
};
|
||||
|
||||
export const PSBT_IN = {
|
||||
NON_WITNESS_UTXO: 0x00,
|
||||
WITNESS_UTXO: 0x01,
|
||||
|
|
@ -1601,9 +1606,10 @@ function decodePsbt(psbtBuffer: Uint8Array): { rawTx: Uint8Array; inputs: PsbtKe
|
|||
* @param rawTx - The unsigned transaction as Uint8Array
|
||||
* @param inputs - Array of input maps containing key-value pairs for each input
|
||||
* @param outputs - Array of output maps containing key-value pairs for each output
|
||||
* @param globals - Global key-value pairs for the PSBT
|
||||
* @returns PSBT buffer as Uint8Array
|
||||
*/
|
||||
export function encodePsbt(rawTx: Uint8Array, inputs: PsbtKeyValueMap[], outputs: PsbtKeyValueMap[]): Uint8Array {
|
||||
export function encodePsbt(rawTx: Uint8Array, inputs: PsbtKeyValueMap[], outputs: PsbtKeyValueMap[], globals: PsbtKeyValueMap = new Map()): Uint8Array {
|
||||
const result: number[] = [];
|
||||
|
||||
// Magic bytes: "psbt" in ASCII
|
||||
|
|
@ -1633,7 +1639,15 @@ export function encodePsbt(rawTx: Uint8Array, inputs: PsbtKeyValueMap[], outputs
|
|||
|
||||
// GLOBAL MAP
|
||||
// Add unsigned transaction (key type 0x00)
|
||||
writeKeyValue(0x00, new Uint8Array(), rawTx);
|
||||
writeKeyValue(PSBT_GLOBAL.UNSIGNED_TX, new Uint8Array(), rawTx);
|
||||
for (const [keyType, items] of globals) {
|
||||
if (keyType === PSBT_GLOBAL.UNSIGNED_TX) {
|
||||
throw new Error('PSBT global map must not include UNSIGNED_TX (0x00); provide it via rawTx');
|
||||
}
|
||||
for (const record of items) {
|
||||
writeKeyValue(keyType, record.keyData, record.value);
|
||||
}
|
||||
}
|
||||
|
||||
// End global map
|
||||
result.push(0x00);
|
||||
|
|
|
|||
|
|
@ -6,9 +6,6 @@
|
|||
@reboot sleep 35 ; screen -dmS liquidv1 /elements/electrs/start liquid
|
||||
@reboot sleep 45 ; screen -dmS liquidtestnet /elements/electrs/start liquidtestnet
|
||||
|
||||
# hourly asset update and electrs restart
|
||||
6 * * * * cd $HOME/asset_registry_db && git pull --quiet origin master && cd $HOME/asset_registry_testnet_db && git pull --quiet origin master && killall electrs
|
||||
|
||||
# daily update of popular-scripts
|
||||
32 03 * * * $HOME/electrs/start liquid popular-scripts >/dev/null 2>&1
|
||||
33 03 * * * $HOME/electrs/start liquidtestnet popular-scripts >/dev/null 2>&1
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
#!/usr/bin/env zsh
|
||||
delay=0.15
|
||||
delay=0.25
|
||||
hostname=$(hostname)
|
||||
slugs=(`curl -sSL https://${hostname}/api/v1/mining/pools/3y|jq -r -S '(.pools[].slug)'`)
|
||||
|
||||
|
|
@ -137,7 +137,7 @@ warmURLs=(
|
|||
'/api/v1/lightning/nodes/isp/34197' `# SHRD SARL`
|
||||
'/api/v1/lightning/nodes/isp/42275' `# Three Fourteen SASU`
|
||||
'/api/v1/lightning/nodes/isp/16276' `# OVH SAS`
|
||||
'/api/v1/lightning/nodes/isp/10796,11351,11426,11427,12271,20001,2$delay,33363' `# Spectrum`
|
||||
'/api/v1/lightning/nodes/isp/10796,11351,11426,11427,12271,20001,20115,33363' `# Spectrum` \
|
||||
'/api/v1/lightning/nodes/isp/701' `# Verizon`
|
||||
'/api/v1/lightning/nodes/isp/12876' `# Scaleway`
|
||||
'/api/v1/lightning/nodes/isp/33915' `# Ziggo`
|
||||
|
|
@ -175,6 +175,9 @@ do
|
|||
for url in $warmURLs
|
||||
do
|
||||
warm "https://${hostname}${url}"
|
||||
warm "https://${hostname}/testnet${url}"
|
||||
warm "https://${hostname}/testnet4${url}"
|
||||
warm "https://${hostname}/signet${url}"
|
||||
sleep $delay # delay between queries to not DoS mariadb
|
||||
done
|
||||
|
||||
|
|
|
|||
|
|
@ -90,8 +90,8 @@ location @mempool-liquid-api-v1-cache-warm {
|
|||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
|
||||
proxy_cache_background_update off;
|
||||
proxy_cache_use_stale error;
|
||||
proxy_cache_background_update on;
|
||||
proxy_cache_use_stale updating;
|
||||
proxy_cache apiwarm;
|
||||
proxy_cache_valid 200 10s;
|
||||
proxy_redirect off;
|
||||
|
|
|
|||
|
|
@ -94,10 +94,10 @@ location @mempool-liquidtestnet-api-v1-cache-warm {
|
|||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
|
||||
proxy_cache_background_update off;
|
||||
proxy_cache_use_stale error;
|
||||
proxy_cache_background_update on;
|
||||
proxy_cache_use_stale updating;
|
||||
proxy_cache apiwarm;
|
||||
proxy_cache_valid 200 10s;
|
||||
proxy_cache_valid 200 30s;
|
||||
proxy_redirect off;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -100,8 +100,8 @@ location @mempool-signet-api-v1-cache-warm {
|
|||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
|
||||
proxy_cache_background_update off;
|
||||
proxy_cache_use_stale error;
|
||||
proxy_cache_background_update on;
|
||||
proxy_cache_use_stale updating;
|
||||
proxy_cache apiwarm;
|
||||
proxy_cache_valid 200 10s;
|
||||
proxy_redirect off;
|
||||
|
|
|
|||
|
|
@ -100,11 +100,13 @@ location @mempool-testnet-api-v1-cache-warm {
|
|||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
|
||||
proxy_cache_background_update off;
|
||||
proxy_cache_use_stale error;
|
||||
proxy_cache_background_update on;
|
||||
proxy_cache_use_stale updating;
|
||||
proxy_cache apiwarm;
|
||||
proxy_cache_valid 200 10s;
|
||||
proxy_cache_valid 200 30s;
|
||||
proxy_redirect off;
|
||||
|
||||
expires 120s;
|
||||
}
|
||||
|
||||
location @mempool-testnet-api-v1-cache-normal {
|
||||
|
|
|
|||
|
|
@ -100,10 +100,10 @@ location @mempool-testnet4-api-v1-cache-warm {
|
|||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
|
||||
proxy_cache_background_update off;
|
||||
proxy_cache_use_stale error;
|
||||
proxy_cache_background_update on;
|
||||
proxy_cache_use_stale updating;
|
||||
proxy_cache apiwarm;
|
||||
proxy_cache_valid 200 10s;
|
||||
proxy_cache_valid 200 30s;
|
||||
proxy_redirect off;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue