From 0e6c23fdecbbc5ac07caffe8e45ae8d45abdc10f Mon Sep 17 00:00:00 2001 From: MicahMaphet Date: Sun, 29 Jun 2025 06:12:54 +0900 Subject: [PATCH 01/23] create chain page and added header with link to blocks --- packages/insight/src/Routing.tsx | 2 + .../insight/src/components/chain-header.tsx | 92 +++++++++++++++++++ .../insight/src/components/currency-tile.tsx | 6 +- packages/insight/src/pages/chain.tsx | 54 +++++++++++ packages/insight/src/pages/index.tsx | 3 - 5 files changed, 151 insertions(+), 6 deletions(-) create mode 100644 packages/insight/src/components/chain-header.tsx create mode 100644 packages/insight/src/pages/chain.tsx diff --git a/packages/insight/src/Routing.tsx b/packages/insight/src/Routing.tsx index 796f2eec62d..00859c9a290 100644 --- a/packages/insight/src/Routing.tsx +++ b/packages/insight/src/Routing.tsx @@ -1,6 +1,7 @@ import React, {lazy, Suspense} from 'react'; import {Navigate, Route, Routes} from 'react-router-dom'; import Home from './pages'; +import {ChainDetails} from './pages/chain'; const Blocks = lazy(() => import('./pages/blocks')); const Block = lazy(() => import('./pages/block')); const TransactionHash = lazy(() => import('./pages/transaction')); @@ -12,6 +13,7 @@ function Routing() { } /> + } /> } /> } /> } /> diff --git a/packages/insight/src/components/chain-header.tsx b/packages/insight/src/components/chain-header.tsx new file mode 100644 index 00000000000..85f62e39cf1 --- /dev/null +++ b/packages/insight/src/components/chain-header.tsx @@ -0,0 +1,92 @@ +import {FC, useEffect, useRef} from 'react'; +import {useApi} from 'src/api/api'; +import {buildTime, getApiRoot, getDefaultRefreshInterval} from 'src/utilities/helper-methods'; +import { Chart as ChartJS } from 'chart.js'; +import { colorCodes } from 'src/utilities/constants'; + + +const ChainHeader: FC<{currency: string, network: string}> = ({currency, network}) => { + const apiRoot = getApiRoot(currency); + const refreshInterval = getDefaultRefreshInterval(currency); + const {data, error} = useApi(`${apiRoot}/${currency}/mainnet/block?limit=1`, {refreshInterval}); + const {height, time, transactionCount, size} = data[0]; + + const {data: priceDetails} = useApi(`https://bitpay.com/rates/${currency}/usd`); + const {data: priceDisplay} = useApi( + `https://bitpay.com/currencies/prices?currencyPairs=["${currency}:USD"]`, + ); + + const chartRef = useRef(null); + const chartInstanceRef = useRef(null); + + const price = priceDetails?.data?.rate; + const priceList = priceDisplay?.data?.[0]?.priceDisplay || []; + + const chartData = { + labels: priceList, + datasets: [ + { + data: priceList, + fill: false, + spanGaps: true, + borderColor: colorCodes[currency], + borderWidth: 2, + pointRadius: 0, + }, + ], + }; + + const options = { + scales: { + x: {display: false}, + y: {display: false}, + }, + plugins: {legend: {display: false}}, + events: [], // disable default events + responsive: true, + maintainAspectRatio: false, + tension: 0.5, + }; + + useEffect(() => { + if (chartRef.current) { + if (chartInstanceRef.current) { + chartInstanceRef.current.destroy(); + } + + chartInstanceRef.current = new ChartJS(chartRef.current, { + type: 'line', + data: chartData, + options, + }); + } + + return () => { + chartInstanceRef.current?.destroy(); + }; + }, [chartData, options]); + + + return ( +
+
+ {currency} + {priceList.length > 0 && ( +
+ +
+ )} +
+
+ {price} USD + Height {height} + Mined {buildTime(time)} + Transaction {transactionCount} + Size {size} + +
+
+ ); +} + +export default ChainHeader; \ No newline at end of file diff --git a/packages/insight/src/components/currency-tile.tsx b/packages/insight/src/components/currency-tile.tsx index 5c831779d6d..782aeed5de1 100644 --- a/packages/insight/src/components/currency-tile.tsx +++ b/packages/insight/src/components/currency-tile.tsx @@ -197,12 +197,12 @@ const CurrencyTile: FC = ({currency}) => { const {height, time, transactionCount, size} = data[0]; const imgSrc = `https://bitpay.com/img/icon/currencies/${currency}.svg`; - const gotoAllBlocks = async () => { - await navigate(`/${currency}/mainnet/blocks`); + const gotoChain = async () => { + await navigate(`/${currency}/mainnet/chain`); }; return ( - + {`${currency}
diff --git a/packages/insight/src/pages/chain.tsx b/packages/insight/src/pages/chain.tsx new file mode 100644 index 00000000000..0e33c4a235b --- /dev/null +++ b/packages/insight/src/pages/chain.tsx @@ -0,0 +1,54 @@ +import { useEffect } from "react"; +import { useDispatch } from "react-redux"; +import { useNavigate, useParams } from "react-router-dom"; +import { useApi } from "src/api/api"; +import ChainHeader from "src/components/chain-header"; +import { changeCurrency, changeNetwork } from "src/store/app.actions"; +import { getApiRoot, getDefaultRefreshInterval, normalizeParams } from "src/utilities/helper-methods"; + + +export const ChainDetails = () => { + const params = useParams<{currency: string, network: string}>() + let {currency, network} = params; + + const navigate = useNavigate(); + const dispatch = useDispatch(); + + if (currency) { + const apiRoot = getApiRoot(currency); + const refreshInterval = getDefaultRefreshInterval(currency); + const {data, error} = useApi(`${apiRoot}/${currency}/mainnet/block?limit=1`, {refreshInterval}); + if (data) { + const {height, time, transactionCount, size} = data[0]; + + } + + } + + useEffect(() => { + if (!currency || !network) return; + + const normalizedParams = normalizeParams(currency, network); + currency = normalizedParams.currency; + network = normalizedParams.network; + dispatch(changeCurrency(currency)); + dispatch(changeNetwork(network)); + + }, [currency, network]); + + const {data: priceDetails} = useApi(`https://bitpay.com/rates/${currency}/usd`); + const price = priceDetails?.data?.rate; + + const gotoBlocks = async () => { + await navigate(`/${currency}/mainnet/blocks`); + } + + return ( + <> + {currency && network && } +
+
Go to full block list
+
+ + ); +} diff --git a/packages/insight/src/pages/index.tsx b/packages/insight/src/pages/index.tsx index f24f49be01b..072433425be 100644 --- a/packages/insight/src/pages/index.tsx +++ b/packages/insight/src/pages/index.tsx @@ -1,5 +1,4 @@ import {SUPPORTED_CURRENCIES} from '../utilities/constants'; -import {SecondaryTitle} from '../assets/styles/titles'; import CurrencyTile from '../components/currency-tile'; import Masonry from 'react-masonry-css'; import {motion} from 'framer-motion'; @@ -24,8 +23,6 @@ const Home: React.FC = () => { return ( - Latest Blocks - Date: Tue, 8 Jul 2025 23:21:38 +0900 Subject: [PATCH 02/23] added block list to chain page --- packages/insight/src/pages/chain.tsx | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/packages/insight/src/pages/chain.tsx b/packages/insight/src/pages/chain.tsx index 0e33c4a235b..74524bf0075 100644 --- a/packages/insight/src/pages/chain.tsx +++ b/packages/insight/src/pages/chain.tsx @@ -1,10 +1,11 @@ -import { useEffect } from "react"; -import { useDispatch } from "react-redux"; -import { useNavigate, useParams } from "react-router-dom"; -import { useApi } from "src/api/api"; -import ChainHeader from "src/components/chain-header"; -import { changeCurrency, changeNetwork } from "src/store/app.actions"; -import { getApiRoot, getDefaultRefreshInterval, normalizeParams } from "src/utilities/helper-methods"; +import { useEffect } from 'react'; +import { useDispatch } from 'react-redux'; +import { useNavigate, useParams } from 'react-router-dom'; +import { useApi } from 'src/api/api'; +import ChainHeader from 'src/components/chain-header'; +import { changeCurrency, changeNetwork } from 'src/store/app.actions'; +import { getApiRoot, getDefaultRefreshInterval, normalizeParams } from 'src/utilities/helper-methods'; +import Blocks from './blocks'; export const ChainDetails = () => { @@ -46,8 +47,16 @@ export const ChainDetails = () => { return ( <> {currency && network && } -
-
Go to full block list
+
+
+ Fee +
+
+
+
Go to full block list
+
+ +
); From 56ba11e313257ee96dc86b36f15fe209976a67ab Mon Sep 17 00:00:00 2001 From: Gabriel Date: Mon, 7 Jul 2025 15:57:38 -0300 Subject: [PATCH 03/23] [REF] replace oneinch with coingecko for token lists --- packages/bitcore-wallet-service/src/config.ts | 3 +- .../src/lib/common/defaults.ts | 2 +- .../src/lib/expressapp.ts | 3 +- .../bitcore-wallet-service/src/lib/server.ts | 74 ++++++++++++++++++- .../src/transactions/sol/index.ts | 2 +- 5 files changed, 78 insertions(+), 6 deletions(-) diff --git a/packages/bitcore-wallet-service/src/config.ts b/packages/bitcore-wallet-service/src/config.ts index 6b29352f3f3..cd8b22940cf 100644 --- a/packages/bitcore-wallet-service/src/config.ts +++ b/packages/bitcore-wallet-service/src/config.ts @@ -466,7 +466,8 @@ const Config = (): any => { // referrerFee: 'one_inch_referrer_fee', // min: 0; max: 3; (represents percentage) // }, // coinGecko: { - // api: 'https://api.coingecko.com/api', + // api: 'https://pro-api.coingecko.com/api/', + // apiKey: 'coin_gecko_api_key', // }, // moralis: { // apiKey: 'moralis_api_key_here', diff --git a/packages/bitcore-wallet-service/src/lib/common/defaults.ts b/packages/bitcore-wallet-service/src/lib/common/defaults.ts index 78c917fd155..3c8fbcbd77a 100644 --- a/packages/bitcore-wallet-service/src/lib/common/defaults.ts +++ b/packages/bitcore-wallet-service/src/lib/common/defaults.ts @@ -294,7 +294,7 @@ export const Defaults = { ONE_INCH_CACHE_DURATION: 1 * 60 * 1000, // Coingecko token rates cache duration (in ms) - COIN_GECKO_CACHE_DURATION: 5 * 60 * 1000, + COIN_GECKO_CACHE_DURATION: 1 * 24 * 60 * 60 * 1000, // Max allowed timespan for notification queries in seconds MAX_NOTIFICATIONS_TIMESPAN: 60 * 60 * 24 * 14, // ~ 2 weeks diff --git a/packages/bitcore-wallet-service/src/lib/expressapp.ts b/packages/bitcore-wallet-service/src/lib/expressapp.ts index a85a96aaf81..3b4aae47872 100644 --- a/packages/bitcore-wallet-service/src/lib/expressapp.ts +++ b/packages/bitcore-wallet-service/src/lib/expressapp.ts @@ -2228,8 +2228,7 @@ export class ExpressApp { } catch (ex) { return returnError(ex, res, req); } - server.externalServices.oneInch - .oneInchGetTokens(req) + server.coinGeckoGetTokens(req) .then(response => { res.json(response); }) diff --git a/packages/bitcore-wallet-service/src/lib/server.ts b/packages/bitcore-wallet-service/src/lib/server.ts index 8edb295ce7b..042b14d2ce5 100644 --- a/packages/bitcore-wallet-service/src/lib/server.ts +++ b/packages/bitcore-wallet-service/src/lib/server.ts @@ -5273,6 +5273,7 @@ export class WalletService implements IWalletService { const credentials = { API: config.coinGecko.api, + API_KEY: config.coinGecko.apiKey, }; return credentials; @@ -5312,8 +5313,79 @@ export class WalletService implements IWalletService { ); }); } -} + coinGeckoGetTokens(req): Promise { + return new Promise((resolve, reject) => { + const chain = req.params?.['chain'] || 'ethereum'; + const cacheKey = `cgTokenList:${chain}`; + const credentials = this.coinGeckoGetCredentials(); + + this.storage.checkAndUseGlobalCache(cacheKey, Defaults.COIN_GECKO_CACHE_DURATION, (err, values, oldvalues) => { + if (err) logger.warn('Cache check failed', err); + if (values) return resolve(values); + + const assetPlatformMap = { + eth: 'ethereum', + matic: 'polygon-pos', + pol: 'polygon-pos', + arb: 'arbitrum-one', + base: 'base', + op: 'optimistic-ethereum', + sol: 'solana', + }; + + const assetId = assetPlatformMap[chain]; + if (!assetId) return reject(new Error(`Unsupported chain '${chain}'`)); + + const URL: string = `${credentials.API}/v3/token_lists/${assetId}/all.json`; + const headers = { + 'Content-Type': 'application/json', + 'Accept': 'application/json', + 'x-cg-pro-api-key': credentials.API_KEY + }; + + this.request.get( + URL, + { + headers, + json: true + }, + (err, data) => { + const tokens = data?.body?.tokens; + const status = data?.body?.status; + if (err) { + logger.warn('An error occured while retrieving the token list', err); + if (oldvalues) { + logger.warn('Using old cached values'); + return resolve(oldvalues); + } + return reject(err.body ?? err); + } else if (status?.error_code === 429 && oldvalues) { + return resolve(oldvalues); + } else { + if (!tokens) { + if (oldvalues) { + logger.warn('No token list available... using old cached values'); + return resolve(oldvalues); + } + return reject(new Error(`Could not get tokens list. Code: ${status?.error_code}. Error: ${status?.error_message || 'Unknown error'}`)); + } + const updatedTokens = tokens.map(token => { + if (token.logoURI?.includes('/thumb/')) { + token.logoURI = token.logoURI.replace('/thumb/', '/large/'); + } + return token; + }); + this.storage.storeGlobalCache(cacheKey, updatedTokens, storeErr => { + if (storeErr) logger.warn('Could not cache token list', storeErr); + return resolve(updatedTokens); + }); + } + }); + }); + }); + } +} export function checkRequired(obj, args, cb?: (e: any) => void) { const missing = Utils.getMissingFields(obj, args); diff --git a/packages/crypto-wallet-core/src/transactions/sol/index.ts b/packages/crypto-wallet-core/src/transactions/sol/index.ts index 522799fc9d3..6d3f5d26ce4 100644 --- a/packages/crypto-wallet-core/src/transactions/sol/index.ts +++ b/packages/crypto-wallet-core/src/transactions/sol/index.ts @@ -1,5 +1,5 @@ import * as SolComputeBudget from '@solana-program/compute-budget'; -import * as SolComputeMemo from "@solana-program/memo"; +import * as SolComputeMemo from '@solana-program/memo'; import * as SolSystem from '@solana-program/system'; import * as SolKit from '@solana/kit' import { Key } from '../../derivation'; From 180c2a1ac964a65f608e4c819dcde2a38a0d9af3 Mon Sep 17 00:00:00 2001 From: Justin Langston Date: Tue, 8 Jul 2025 14:23:11 -0400 Subject: [PATCH 04/23] v10.10.6 --- lerna.json | 2 +- packages/bitcore-client/package-lock.json | 4 ++-- packages/bitcore-client/package.json | 4 ++-- packages/bitcore-node/package-lock.json | 4 ++-- packages/bitcore-node/package.json | 8 ++++---- packages/bitcore-tss/package-lock.json | 4 ++-- packages/bitcore-tss/package.json | 4 ++-- packages/bitcore-wallet-client/package-lock.json | 8 ++++---- packages/bitcore-wallet-client/package.json | 6 +++--- packages/bitcore-wallet-service/package-lock.json | 6 +++--- packages/bitcore-wallet-service/package.json | 4 ++-- packages/bitcore-wallet/package-lock.json | 4 ++-- packages/bitcore-wallet/package.json | 4 ++-- packages/crypto-wallet-core/package-lock.json | 4 ++-- packages/crypto-wallet-core/package.json | 2 +- 15 files changed, 34 insertions(+), 34 deletions(-) diff --git a/lerna.json b/lerna.json index 7fae21c8d26..eb7b43b2dfe 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { "lerna": "2.9.1", - "version": "10.10.5", + "version": "10.10.6", "packages": ["packages/[^insight]*"] } diff --git a/packages/bitcore-client/package-lock.json b/packages/bitcore-client/package-lock.json index 884bad20dda..bb6836a2450 100644 --- a/packages/bitcore-client/package-lock.json +++ b/packages/bitcore-client/package-lock.json @@ -1,12 +1,12 @@ { "name": "bitcore-client", - "version": "10.10.5", + "version": "10.10.6", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "bitcore-client", - "version": "10.10.5", + "version": "10.10.6", "dependencies": { "async": "2.5.0", "bcrypt": "5.1.0", diff --git a/packages/bitcore-client/package.json b/packages/bitcore-client/package.json index 3253704f3fc..e454d48f254 100644 --- a/packages/bitcore-client/package.json +++ b/packages/bitcore-client/package.json @@ -1,7 +1,7 @@ { "name": "bitcore-client", "description": "Wallet client for Bitcore node", - "version": "10.10.5", + "version": "10.10.6", "author": "Justin Langston ", "main": "./ts_build/src/index.js", "types": "./ts_build/src/index.d.ts", @@ -28,7 +28,7 @@ "bcrypt": "5.1.0", "bitcore-mnemonic": "^10.10.5", "commander": "11.1.0", - "crypto-wallet-core": "^10.10.5", + "crypto-wallet-core": "^10.10.6", "level-js": "4.0.2", "leveldown": "6.1.1", "levelup": "4.3.2", diff --git a/packages/bitcore-node/package-lock.json b/packages/bitcore-node/package-lock.json index 7cf14abe1ee..ca3497a87ad 100644 --- a/packages/bitcore-node/package-lock.json +++ b/packages/bitcore-node/package-lock.json @@ -1,12 +1,12 @@ { "name": "bitcore-node", - "version": "10.10.5", + "version": "10.10.6", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "bitcore-node", - "version": "10.10.5", + "version": "10.10.6", "license": "MIT", "dependencies": { "abi-decoder": "2.4.0", diff --git a/packages/bitcore-node/package.json b/packages/bitcore-node/package.json index 5a9051bf584..1e22fb625f3 100644 --- a/packages/bitcore-node/package.json +++ b/packages/bitcore-node/package.json @@ -4,7 +4,7 @@ "engines": { "node": ">=18.0.0" }, - "version": "10.10.5", + "version": "10.10.6", "author": "Justin Langston ", "contributors": [ "Justin Langston ", @@ -90,7 +90,7 @@ }, "dependencies": { "abi-decoder": "2.4.0", - "bitcore-client": "^10.10.5", + "bitcore-client": "^10.10.6", "bitcore-lib": "^10.10.5", "bitcore-lib-cash": "^10.10.5", "bitcore-lib-doge": "^10.10.5", @@ -98,10 +98,10 @@ "bitcore-p2p": "^10.10.5", "bitcore-p2p-cash": "^10.10.5", "bitcore-p2p-doge": "^10.10.5", - "bitcore-wallet-client": "^10.10.5", + "bitcore-wallet-client": "^10.10.6", "cors": "2.8.4", "crypto-rpc": "https://github.com/bitpay/crypto-rpc.git#370b201c98f4616b378290dc30486df5c1c769e0", - "crypto-wallet-core": "^10.10.5", + "crypto-wallet-core": "^10.10.6", "express": "4.19.2", "lodash": "4.17.11", "mongodb": "3.6.12", diff --git a/packages/bitcore-tss/package-lock.json b/packages/bitcore-tss/package-lock.json index b210fcfd10a..5e0c3b869e2 100644 --- a/packages/bitcore-tss/package-lock.json +++ b/packages/bitcore-tss/package-lock.json @@ -1,12 +1,12 @@ { "name": "bitcore-tss", - "version": "10.10.5", + "version": "10.10.6", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "bitcore-tss", - "version": "10.10.5", + "version": "10.10.6", "license": "MIT", "dependencies": { "@bitgo/sdk-lib-mpc": "^10.1.2" diff --git a/packages/bitcore-tss/package.json b/packages/bitcore-tss/package.json index 37a07858730..43127536183 100644 --- a/packages/bitcore-tss/package.json +++ b/packages/bitcore-tss/package.json @@ -1,6 +1,6 @@ { "name": "bitcore-tss", - "version": "10.10.5", + "version": "10.10.6", "description": "Bitcore Library for Threshold Signature Schemes", "main": "index.js", "type": "commonjs", @@ -31,7 +31,7 @@ "@wdio/spec-reporter": "^9.11.0", "assert": "^2.1.0", "browserify": "^17.0.1", - "crypto-wallet-core": "^10.10.5", + "crypto-wallet-core": "^10.10.6", "mocha": "11.1.0", "webdriverio": "^9.12.0", "webpack": "^5.98.0", diff --git a/packages/bitcore-wallet-client/package-lock.json b/packages/bitcore-wallet-client/package-lock.json index f7497fe55fa..284a7823ebf 100644 --- a/packages/bitcore-wallet-client/package-lock.json +++ b/packages/bitcore-wallet-client/package-lock.json @@ -1,19 +1,19 @@ { "name": "bitcore-wallet-client", - "version": "10.10.5", + "version": "10.10.6", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "bitcore-wallet-client", - "version": "10.10.5", + "version": "10.10.6", "license": "MIT", "dependencies": { "ajv": "6.12.0", "async": "0.9.2", "bip38": "1.4.0", "bitcore-mnemonic": "^10.10.5", - "crypto-wallet-core": "^10.10.5", + "crypto-wallet-core": "^10.10.6", "json-stable-stringify": "1.0.1", "preconditions": "2.2.3", "sjcl": "1.0.3", @@ -25,7 +25,7 @@ "devDependencies": { "@types/lodash": "^4.14.136", "@types/node": "22.14.1", - "bitcore-wallet-service": "^10.10.5", + "bitcore-wallet-service": "^10.10.6", "browserify": "^13.1.0", "chai": "^1.9.1", "coveralls": "^3.0.2", diff --git a/packages/bitcore-wallet-client/package.json b/packages/bitcore-wallet-client/package.json index 828295d0af8..2210dcafaff 100644 --- a/packages/bitcore-wallet-client/package.json +++ b/packages/bitcore-wallet-client/package.json @@ -2,7 +2,7 @@ "name": "bitcore-wallet-client", "description": "Client for bitcore-wallet-service", "author": "BitPay Inc", - "version": "10.10.5", + "version": "10.10.6", "license": "MIT", "main": "ts_build/index.js", "types": "ts_build/index.d.js", @@ -31,7 +31,7 @@ "async": "0.9.2", "bip38": "1.4.0", "bitcore-mnemonic": "^10.10.5", - "crypto-wallet-core": "^10.10.5", + "crypto-wallet-core": "^10.10.6", "json-stable-stringify": "1.0.1", "preconditions": "2.2.3", "sjcl": "1.0.3", @@ -43,7 +43,7 @@ "devDependencies": { "@types/lodash": "^4.14.136", "@types/node": "22.14.1", - "bitcore-wallet-service": "^10.10.5", + "bitcore-wallet-service": "^10.10.6", "browserify": "^13.1.0", "chai": "^1.9.1", "coveralls": "^3.0.2", diff --git a/packages/bitcore-wallet-service/package-lock.json b/packages/bitcore-wallet-service/package-lock.json index 60a372971d8..1bf4e117329 100644 --- a/packages/bitcore-wallet-service/package-lock.json +++ b/packages/bitcore-wallet-service/package-lock.json @@ -1,12 +1,12 @@ { "name": "bitcore-wallet-service", - "version": "10.10.5", + "version": "10.10.6", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "bitcore-wallet-service", - "version": "10.10.5", + "version": "10.10.6", "license": "MIT", "dependencies": { "@sendgrid/mail": "6.5.4", @@ -18,7 +18,7 @@ "bitcore-lib-ltc": "^10.10.5", "compression": "1.7.4", "cors": "2.8.5", - "crypto-wallet-core": "^10.10.5", + "crypto-wallet-core": "^10.10.6", "email-validator": "1.2.3", "express": "4.19.2", "express-rate-limit": "2.14.2", diff --git a/packages/bitcore-wallet-service/package.json b/packages/bitcore-wallet-service/package.json index 8c73da22d65..9a764033e56 100644 --- a/packages/bitcore-wallet-service/package.json +++ b/packages/bitcore-wallet-service/package.json @@ -2,7 +2,7 @@ "name": "bitcore-wallet-service", "description": "A service for Mutisig HD Bitcoin Wallets", "author": "BitPay Inc", - "version": "10.10.5", + "version": "10.10.6", "license": "MIT", "main": "ts_build/index.js", "types": "./ts_build/index.d.ts", @@ -50,7 +50,7 @@ "bitcore-lib-ltc": "^10.10.5", "compression": "1.7.4", "cors": "2.8.5", - "crypto-wallet-core": "^10.10.5", + "crypto-wallet-core": "^10.10.6", "email-validator": "1.2.3", "express": "4.19.2", "express-rate-limit": "2.14.2", diff --git a/packages/bitcore-wallet/package-lock.json b/packages/bitcore-wallet/package-lock.json index 4ae13fd566d..2c5532d965b 100644 --- a/packages/bitcore-wallet/package-lock.json +++ b/packages/bitcore-wallet/package-lock.json @@ -1,12 +1,12 @@ { "name": "bitcore-wallet", - "version": "10.10.5", + "version": "10.10.6", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "bitcore-wallet", - "version": "10.10.5", + "version": "10.10.6", "dependencies": { "async": "^2.5.0", "commander": "^2.6.0", diff --git a/packages/bitcore-wallet/package.json b/packages/bitcore-wallet/package.json index d5967261741..5c3aa92fd69 100644 --- a/packages/bitcore-wallet/package.json +++ b/packages/bitcore-wallet/package.json @@ -2,7 +2,7 @@ "name": "bitcore-wallet", "description": "A CLI Mutisig HD Bitcoin Wallet, demo for Bitcore Wallet Service", "author": "BitPay Inc", - "version": "10.10.5", + "version": "10.10.6", "private": true, "keywords": [ "bitcoin", @@ -20,7 +20,7 @@ "dependencies": { "async": "^2.5.0", "bitcore-lib": "^10.10.5", - "bitcore-wallet-client": "^10.10.5", + "bitcore-wallet-client": "^10.10.6", "commander": "^2.6.0", "lodash": "^3.3.1", "moment": "^2.9.0", diff --git a/packages/crypto-wallet-core/package-lock.json b/packages/crypto-wallet-core/package-lock.json index 53534df1f12..806e17cdfd2 100644 --- a/packages/crypto-wallet-core/package-lock.json +++ b/packages/crypto-wallet-core/package-lock.json @@ -1,12 +1,12 @@ { "name": "crypto-wallet-core", - "version": "10.10.5", + "version": "10.10.6", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "crypto-wallet-core", - "version": "10.10.5", + "version": "10.10.6", "license": "MIT", "dependencies": { "@solana-program/compute-budget": "^0.7.0", diff --git a/packages/crypto-wallet-core/package.json b/packages/crypto-wallet-core/package.json index 7739c9d772d..dc9540a31bf 100644 --- a/packages/crypto-wallet-core/package.json +++ b/packages/crypto-wallet-core/package.json @@ -1,6 +1,6 @@ { "name": "crypto-wallet-core", - "version": "10.10.5", + "version": "10.10.6", "description": "A multi-currency support library for address derivation, private key creation, and transaction creation", "main": "./ts_build/src/index.js", "types": "./ts_build/src/index.d.ts", From 6bcac67b0debcb1c3b091a1149704191ea668bdc Mon Sep 17 00:00:00 2001 From: Sayrix <43046854+Sayrix@users.noreply.github.com> Date: Tue, 1 Jul 2025 17:59:37 +0200 Subject: [PATCH 05/23] prevent redefine _getX/Y From https://github.com/bitpay/bitcore/pull/3205 --- packages/bitcore-lib/lib/crypto/point.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/bitcore-lib/lib/crypto/point.js b/packages/bitcore-lib/lib/crypto/point.js index 762431a8afa..bf29c12a26b 100644 --- a/packages/bitcore-lib/lib/crypto/point.js +++ b/packages/bitcore-lib/lib/crypto/point.js @@ -81,6 +81,7 @@ Point.getP = function() { return ec.curve.p.clone(); }; +if (!Point.prototype._getX) Point.prototype._getX = Point.prototype.getX; /** @@ -93,6 +94,7 @@ Point.prototype.getX = function getX() { return new BN(this._getX().toArray()); }; +if (!Point.prototype._getY) Point.prototype._getY = Point.prototype.getY; /** From ce76c31e61c90ab9fa9ea9cbbebd5d8a63e1fef9 Mon Sep 17 00:00:00 2001 From: lyambo Date: Thu, 3 Jul 2025 10:31:02 -0400 Subject: [PATCH 06/23] verify prePublishRaw tx --- packages/bitcore-wallet-client/src/lib/verifier.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/bitcore-wallet-client/src/lib/verifier.ts b/packages/bitcore-wallet-client/src/lib/verifier.ts index 51d3a644b90..0890b598e30 100644 --- a/packages/bitcore-wallet-client/src/lib/verifier.ts +++ b/packages/bitcore-wallet-client/src/lib/verifier.ts @@ -217,8 +217,13 @@ export class Verifier { ' Signature: ', txp.proposalSignature ); - if (!Utils.verifyMessage(hash, txp.proposalSignature, creatorSigningPubKey)) - return false; + + const verified = Utils.verifyMessage(hash, txp.proposalSignature, creatorSigningPubKey); + if (!verified && !txp.prePublishRaw) + return false; + + if (!verified && txp.prePublishRaw && !Utils.verifyMessage(txp.prePublishRaw, txp.proposalSignature, creatorSigningPubKey)) + return false; if (Constants.UTXO_CHAINS.includes(chain)) { if (!this.checkAddress(credentials, txp.changeAddress)) { From 6ccb7d9d17d6d7afa947ea5c0a1bd68edceb328d Mon Sep 17 00:00:00 2001 From: lyambo Date: Thu, 3 Jul 2025 10:33:59 -0400 Subject: [PATCH 07/23] Adding sourceAddress for SPL proposals --- packages/bitcore-wallet-service/src/lib/model/txproposal.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/bitcore-wallet-service/src/lib/model/txproposal.ts b/packages/bitcore-wallet-service/src/lib/model/txproposal.ts index 046d18d38d8..e487112a3ce 100644 --- a/packages/bitcore-wallet-service/src/lib/model/txproposal.ts +++ b/packages/bitcore-wallet-service/src/lib/model/txproposal.ts @@ -37,6 +37,7 @@ export interface ITxProposal { amount: number; address: string; toAddress?: string; + sourceAddress?: string; message?: string; data?: string; gasLimit?: number; @@ -118,6 +119,7 @@ export class TxProposal { amount: number; address?: string; toAddress?: string; + sourceAddress?: string; message?: string; data?: string; gasLimit?: number; @@ -214,6 +216,7 @@ export class TxProposal { const out: any = {}; if (output.amount !== undefined) out.amount = output.amount; if (output.toAddress !== undefined) out.toAddress = output.toAddress; + if (output.sourceAddress !== undefined) out.sourceAddress = output.sourceAddress; if (output.message !== undefined) out.message = output.message; if (output.data !== undefined) out.data = output.data; if (output.gasLimit !== undefined) out.gasLimit = output.gasLimit; From 46ebbd762dc09374fc6bd9e36f5b52c0215861e6 Mon Sep 17 00:00:00 2001 From: lyambo Date: Thu, 3 Jul 2025 11:32:14 -0400 Subject: [PATCH 08/23] add all recipients by default --- .../bitcore-wallet-client/src/lib/common/utils.ts | 10 +++++++++- .../bitcore-wallet-service/src/lib/chain/sol/index.ts | 11 ++--------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/packages/bitcore-wallet-client/src/lib/common/utils.ts b/packages/bitcore-wallet-client/src/lib/common/utils.ts index ddbb4862330..e20fcd06bb8 100644 --- a/packages/bitcore-wallet-client/src/lib/common/utils.ts +++ b/packages/bitcore-wallet-client/src/lib/common/utils.ts @@ -441,7 +441,7 @@ export class Utils { return t; } else { - // ETH ERC20 XRP + // ETH ERC20 XRP SOL const { data, destinationTag, @@ -511,6 +511,14 @@ export class Utils { }); unsignedTxs.push(rawTx); } + } else if (chainName === 'SOL') { + const rawTx = Transactions.create({ + ...txp, + tag: destinationTag ? Number(destinationTag) : undefined, + chain: _chain, + recipients, + }); + unsignedTxs.push(rawTx); } else { for (let index = 0; index < recipients.length; index++) { const rawTx = Transactions.create({ diff --git a/packages/bitcore-wallet-service/src/lib/chain/sol/index.ts b/packages/bitcore-wallet-service/src/lib/chain/sol/index.ts index c20bd1a5b09..30f5605d0df 100644 --- a/packages/bitcore-wallet-service/src/lib/chain/sol/index.ts +++ b/packages/bitcore-wallet-service/src/lib/chain/sol/index.ts @@ -118,20 +118,13 @@ export class SolChain implements IChain { if (data) { recipients[0].data = data; } - const unsignedTxs = []; - for (let index = 0; index < recipients.length; index++) { - let params = { - ...recipients[index], - recipients: [recipients[index]] - }; - unsignedTxs.push(Transactions.create({ ...txp, chain, ...params })); - } + const unsignedTxs = [Transactions.create({ ...txp, chain, recipients })]; const tx = { uncheckedSerialize: () => unsignedTxs, txid: () => txp.txid, toObject: () => { - let ret = _.clone(txp) + const ret = _.clone(txp); ret.outputs[0].satoshis = ret.outputs[0].amount; return ret; }, From b324db6fcfd73583c52d526e505466d0b9880a1c Mon Sep 17 00:00:00 2001 From: lyambo Date: Thu, 3 Jul 2025 14:18:11 -0400 Subject: [PATCH 09/23] feedback --- packages/bitcore-wallet-client/src/lib/common/utils.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/bitcore-wallet-client/src/lib/common/utils.ts b/packages/bitcore-wallet-client/src/lib/common/utils.ts index e20fcd06bb8..c6be7e89c20 100644 --- a/packages/bitcore-wallet-client/src/lib/common/utils.ts +++ b/packages/bitcore-wallet-client/src/lib/common/utils.ts @@ -514,7 +514,6 @@ export class Utils { } else if (chainName === 'SOL') { const rawTx = Transactions.create({ ...txp, - tag: destinationTag ? Number(destinationTag) : undefined, chain: _chain, recipients, }); From 8c2b6bb8738f6f5f13694428b10b4c666ddc8666 Mon Sep 17 00:00:00 2001 From: Justin Langston Date: Mon, 21 Jul 2025 11:01:29 -0400 Subject: [PATCH 10/23] v10.10.7 --- lerna.json | 2 +- packages/bitcore-client/package-lock.json | 4 ++-- packages/bitcore-client/package.json | 6 +++--- packages/bitcore-lib/package-lock.json | 4 ++-- packages/bitcore-lib/package.json | 2 +- packages/bitcore-mnemonic/package-lock.json | 4 ++-- packages/bitcore-mnemonic/package.json | 4 ++-- packages/bitcore-node/package-lock.json | 4 ++-- packages/bitcore-node/package.json | 14 +++++++------- packages/bitcore-p2p-cash/package-lock.json | 4 ++-- packages/bitcore-p2p-cash/package.json | 4 ++-- packages/bitcore-p2p/package-lock.json | 4 ++-- packages/bitcore-p2p/package.json | 4 ++-- packages/bitcore-tss/package-lock.json | 4 ++-- packages/bitcore-tss/package.json | 6 +++--- packages/bitcore-wallet-client/package-lock.json | 10 +++++----- packages/bitcore-wallet-client/package.json | 8 ++++---- packages/bitcore-wallet-service/package-lock.json | 8 ++++---- packages/bitcore-wallet-service/package.json | 6 +++--- packages/bitcore-wallet/package-lock.json | 4 ++-- packages/bitcore-wallet/package.json | 6 +++--- packages/crypto-wallet-core/package-lock.json | 6 +++--- packages/crypto-wallet-core/package.json | 4 ++-- 23 files changed, 61 insertions(+), 61 deletions(-) diff --git a/lerna.json b/lerna.json index eb7b43b2dfe..be8d63354b3 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { "lerna": "2.9.1", - "version": "10.10.6", + "version": "10.10.7", "packages": ["packages/[^insight]*"] } diff --git a/packages/bitcore-client/package-lock.json b/packages/bitcore-client/package-lock.json index bb6836a2450..5e1c8c79442 100644 --- a/packages/bitcore-client/package-lock.json +++ b/packages/bitcore-client/package-lock.json @@ -1,12 +1,12 @@ { "name": "bitcore-client", - "version": "10.10.6", + "version": "10.10.7", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "bitcore-client", - "version": "10.10.6", + "version": "10.10.7", "dependencies": { "async": "2.5.0", "bcrypt": "5.1.0", diff --git a/packages/bitcore-client/package.json b/packages/bitcore-client/package.json index e454d48f254..08eeb040d51 100644 --- a/packages/bitcore-client/package.json +++ b/packages/bitcore-client/package.json @@ -1,7 +1,7 @@ { "name": "bitcore-client", "description": "Wallet client for Bitcore node", - "version": "10.10.6", + "version": "10.10.7", "author": "Justin Langston ", "main": "./ts_build/src/index.js", "types": "./ts_build/src/index.d.ts", @@ -26,9 +26,9 @@ "JSONStream": "~1.3.1", "async": "2.5.0", "bcrypt": "5.1.0", - "bitcore-mnemonic": "^10.10.5", + "bitcore-mnemonic": "^10.10.7", "commander": "11.1.0", - "crypto-wallet-core": "^10.10.6", + "crypto-wallet-core": "^10.10.7", "level-js": "4.0.2", "leveldown": "6.1.1", "levelup": "4.3.2", diff --git a/packages/bitcore-lib/package-lock.json b/packages/bitcore-lib/package-lock.json index 16a5a126ac2..963d42bac9d 100644 --- a/packages/bitcore-lib/package-lock.json +++ b/packages/bitcore-lib/package-lock.json @@ -1,12 +1,12 @@ { "name": "bitcore-lib", - "version": "10.10.5", + "version": "10.10.7", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "bitcore-lib", - "version": "10.10.5", + "version": "10.10.7", "license": "MIT", "dependencies": { "bech32": "=2.0.0", diff --git a/packages/bitcore-lib/package.json b/packages/bitcore-lib/package.json index 5bada641807..e7164779c85 100644 --- a/packages/bitcore-lib/package.json +++ b/packages/bitcore-lib/package.json @@ -1,6 +1,6 @@ { "name": "bitcore-lib", - "version": "10.10.5", + "version": "10.10.7", "description": "A pure and powerful JavaScript Bitcoin library.", "author": "BitPay ", "main": "index.js", diff --git a/packages/bitcore-mnemonic/package-lock.json b/packages/bitcore-mnemonic/package-lock.json index a895916c633..b14f6651e84 100644 --- a/packages/bitcore-mnemonic/package-lock.json +++ b/packages/bitcore-mnemonic/package-lock.json @@ -1,12 +1,12 @@ { "name": "bitcore-mnemonic", - "version": "10.10.5", + "version": "10.10.7", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "bitcore-mnemonic", - "version": "10.10.5", + "version": "10.10.7", "license": "MIT", "dependencies": { "unorm": "^1.4.1" diff --git a/packages/bitcore-mnemonic/package.json b/packages/bitcore-mnemonic/package.json index 4a22d7ad0f9..82214a4eb8e 100644 --- a/packages/bitcore-mnemonic/package.json +++ b/packages/bitcore-mnemonic/package.json @@ -1,6 +1,6 @@ { "name": "bitcore-mnemonic", - "version": "10.10.5", + "version": "10.10.7", "description": "BIP39 Mnemonics implemented for Bitcore.", "author": "BitPay ", "main": "index.js", @@ -43,7 +43,7 @@ "mocha": "^5.2.0" }, "dependencies": { - "bitcore-lib": "^10.10.5", + "bitcore-lib": "^10.10.7", "unorm": "^1.4.1" }, "peerDependencies": { diff --git a/packages/bitcore-node/package-lock.json b/packages/bitcore-node/package-lock.json index ca3497a87ad..e2506f993f1 100644 --- a/packages/bitcore-node/package-lock.json +++ b/packages/bitcore-node/package-lock.json @@ -1,12 +1,12 @@ { "name": "bitcore-node", - "version": "10.10.6", + "version": "10.10.7", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "bitcore-node", - "version": "10.10.6", + "version": "10.10.7", "license": "MIT", "dependencies": { "abi-decoder": "2.4.0", diff --git a/packages/bitcore-node/package.json b/packages/bitcore-node/package.json index 1e22fb625f3..cb0151ac883 100644 --- a/packages/bitcore-node/package.json +++ b/packages/bitcore-node/package.json @@ -4,7 +4,7 @@ "engines": { "node": ">=18.0.0" }, - "version": "10.10.6", + "version": "10.10.7", "author": "Justin Langston ", "contributors": [ "Justin Langston ", @@ -90,18 +90,18 @@ }, "dependencies": { "abi-decoder": "2.4.0", - "bitcore-client": "^10.10.6", - "bitcore-lib": "^10.10.5", + "bitcore-client": "^10.10.7", + "bitcore-lib": "^10.10.7", "bitcore-lib-cash": "^10.10.5", "bitcore-lib-doge": "^10.10.5", "bitcore-lib-ltc": "^10.10.5", - "bitcore-p2p": "^10.10.5", - "bitcore-p2p-cash": "^10.10.5", + "bitcore-p2p": "^10.10.7", + "bitcore-p2p-cash": "^10.10.7", "bitcore-p2p-doge": "^10.10.5", - "bitcore-wallet-client": "^10.10.6", + "bitcore-wallet-client": "^10.10.7", "cors": "2.8.4", "crypto-rpc": "https://github.com/bitpay/crypto-rpc.git#370b201c98f4616b378290dc30486df5c1c769e0", - "crypto-wallet-core": "^10.10.6", + "crypto-wallet-core": "^10.10.7", "express": "4.19.2", "lodash": "4.17.11", "mongodb": "3.6.12", diff --git a/packages/bitcore-p2p-cash/package-lock.json b/packages/bitcore-p2p-cash/package-lock.json index e708f97342b..67768449699 100644 --- a/packages/bitcore-p2p-cash/package-lock.json +++ b/packages/bitcore-p2p-cash/package-lock.json @@ -1,12 +1,12 @@ { "name": "bitcore-p2p-cash", - "version": "10.10.5", + "version": "10.10.7", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "bitcore-p2p-cash", - "version": "10.10.5", + "version": "10.10.7", "license": "MIT", "dependencies": { "bloom-filter": "^0.2.0", diff --git a/packages/bitcore-p2p-cash/package.json b/packages/bitcore-p2p-cash/package.json index e3feff0f09a..ab88b91f207 100644 --- a/packages/bitcore-p2p-cash/package.json +++ b/packages/bitcore-p2p-cash/package.json @@ -1,6 +1,6 @@ { "name": "bitcore-p2p-cash", - "version": "10.10.5", + "version": "10.10.7", "description": "Interface to the bitcoin P2P network for bitcore", "author": "BitPay ", "main": "index.js", @@ -60,7 +60,7 @@ "url": "https://github.com/bitpay/bitcore-p2p.git" }, "dependencies": { - "bitcore-lib": "^10.10.5", + "bitcore-lib": "^10.10.7", "bitcore-lib-cash": "^10.10.5", "bloom-filter": "^0.2.0", "buffers": "bitpay/node-buffers#v0.1.2-bitpay", diff --git a/packages/bitcore-p2p/package-lock.json b/packages/bitcore-p2p/package-lock.json index c9980091bda..37c0066eb0b 100644 --- a/packages/bitcore-p2p/package-lock.json +++ b/packages/bitcore-p2p/package-lock.json @@ -1,12 +1,12 @@ { "name": "bitcore-p2p", - "version": "10.10.5", + "version": "10.10.7", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "bitcore-p2p", - "version": "10.10.5", + "version": "10.10.7", "license": "MIT", "dependencies": { "bloom-filter": "^0.2.0", diff --git a/packages/bitcore-p2p/package.json b/packages/bitcore-p2p/package.json index b80f6e158c4..69cd0e84720 100644 --- a/packages/bitcore-p2p/package.json +++ b/packages/bitcore-p2p/package.json @@ -1,6 +1,6 @@ { "name": "bitcore-p2p", - "version": "10.10.5", + "version": "10.10.7", "description": "Interface to the bitcoin P2P network for bitcore", "main": "index.js", "scripts": { @@ -19,7 +19,7 @@ "url": "https://github.com/bitpay/bitcore-p2p.git" }, "dependencies": { - "bitcore-lib": "^10.10.5", + "bitcore-lib": "^10.10.7", "bloom-filter": "^0.2.0", "buffers": "bitpay/node-buffers#v0.1.2-bitpay", "socks5-client": "^0.3.6" diff --git a/packages/bitcore-tss/package-lock.json b/packages/bitcore-tss/package-lock.json index 5e0c3b869e2..e0c498afd17 100644 --- a/packages/bitcore-tss/package-lock.json +++ b/packages/bitcore-tss/package-lock.json @@ -1,12 +1,12 @@ { "name": "bitcore-tss", - "version": "10.10.6", + "version": "10.10.7", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "bitcore-tss", - "version": "10.10.6", + "version": "10.10.7", "license": "MIT", "dependencies": { "@bitgo/sdk-lib-mpc": "^10.1.2" diff --git a/packages/bitcore-tss/package.json b/packages/bitcore-tss/package.json index 43127536183..681e3efdd24 100644 --- a/packages/bitcore-tss/package.json +++ b/packages/bitcore-tss/package.json @@ -1,6 +1,6 @@ { "name": "bitcore-tss", - "version": "10.10.6", + "version": "10.10.7", "description": "Bitcore Library for Threshold Signature Schemes", "main": "index.js", "type": "commonjs", @@ -22,7 +22,7 @@ "license": "MIT", "dependencies": { "@bitgo/sdk-lib-mpc": "^10.1.2", - "bitcore-lib": "^10.10.5" + "bitcore-lib": "^10.10.7" }, "devDependencies": { "@wdio/browser-runner": "^9.12.0", @@ -31,7 +31,7 @@ "@wdio/spec-reporter": "^9.11.0", "assert": "^2.1.0", "browserify": "^17.0.1", - "crypto-wallet-core": "^10.10.6", + "crypto-wallet-core": "^10.10.7", "mocha": "11.1.0", "webdriverio": "^9.12.0", "webpack": "^5.98.0", diff --git a/packages/bitcore-wallet-client/package-lock.json b/packages/bitcore-wallet-client/package-lock.json index 284a7823ebf..83bcc0b89cd 100644 --- a/packages/bitcore-wallet-client/package-lock.json +++ b/packages/bitcore-wallet-client/package-lock.json @@ -1,19 +1,19 @@ { "name": "bitcore-wallet-client", - "version": "10.10.6", + "version": "10.10.7", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "bitcore-wallet-client", - "version": "10.10.6", + "version": "10.10.7", "license": "MIT", "dependencies": { "ajv": "6.12.0", "async": "0.9.2", "bip38": "1.4.0", - "bitcore-mnemonic": "^10.10.5", - "crypto-wallet-core": "^10.10.6", + "bitcore-mnemonic": "^10.10.7", + "crypto-wallet-core": "^10.10.7", "json-stable-stringify": "1.0.1", "preconditions": "2.2.3", "sjcl": "1.0.3", @@ -25,7 +25,7 @@ "devDependencies": { "@types/lodash": "^4.14.136", "@types/node": "22.14.1", - "bitcore-wallet-service": "^10.10.6", + "bitcore-wallet-service": "^10.10.7", "browserify": "^13.1.0", "chai": "^1.9.1", "coveralls": "^3.0.2", diff --git a/packages/bitcore-wallet-client/package.json b/packages/bitcore-wallet-client/package.json index 2210dcafaff..3bb4eb4ee2f 100644 --- a/packages/bitcore-wallet-client/package.json +++ b/packages/bitcore-wallet-client/package.json @@ -2,7 +2,7 @@ "name": "bitcore-wallet-client", "description": "Client for bitcore-wallet-service", "author": "BitPay Inc", - "version": "10.10.6", + "version": "10.10.7", "license": "MIT", "main": "ts_build/index.js", "types": "ts_build/index.d.js", @@ -30,8 +30,8 @@ "ajv": "6.12.0", "async": "0.9.2", "bip38": "1.4.0", - "bitcore-mnemonic": "^10.10.5", - "crypto-wallet-core": "^10.10.6", + "bitcore-mnemonic": "^10.10.7", + "crypto-wallet-core": "^10.10.7", "json-stable-stringify": "1.0.1", "preconditions": "2.2.3", "sjcl": "1.0.3", @@ -43,7 +43,7 @@ "devDependencies": { "@types/lodash": "^4.14.136", "@types/node": "22.14.1", - "bitcore-wallet-service": "^10.10.6", + "bitcore-wallet-service": "^10.10.7", "browserify": "^13.1.0", "chai": "^1.9.1", "coveralls": "^3.0.2", diff --git a/packages/bitcore-wallet-service/package-lock.json b/packages/bitcore-wallet-service/package-lock.json index 1bf4e117329..02345a69036 100644 --- a/packages/bitcore-wallet-service/package-lock.json +++ b/packages/bitcore-wallet-service/package-lock.json @@ -1,24 +1,24 @@ { "name": "bitcore-wallet-service", - "version": "10.10.6", + "version": "10.10.7", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "bitcore-wallet-service", - "version": "10.10.6", + "version": "10.10.7", "license": "MIT", "dependencies": { "@sendgrid/mail": "6.5.4", "abi-decoder": "2.4.0", "async": "0.9.2", - "bitcore-lib": "^10.10.5", + "bitcore-lib": "^10.10.7", "bitcore-lib-cash": "^10.10.5", "bitcore-lib-doge": "^10.10.5", "bitcore-lib-ltc": "^10.10.5", "compression": "1.7.4", "cors": "2.8.5", - "crypto-wallet-core": "^10.10.6", + "crypto-wallet-core": "^10.10.7", "email-validator": "1.2.3", "express": "4.19.2", "express-rate-limit": "2.14.2", diff --git a/packages/bitcore-wallet-service/package.json b/packages/bitcore-wallet-service/package.json index 9a764033e56..8510ac28002 100644 --- a/packages/bitcore-wallet-service/package.json +++ b/packages/bitcore-wallet-service/package.json @@ -2,7 +2,7 @@ "name": "bitcore-wallet-service", "description": "A service for Mutisig HD Bitcoin Wallets", "author": "BitPay Inc", - "version": "10.10.6", + "version": "10.10.7", "license": "MIT", "main": "ts_build/index.js", "types": "./ts_build/index.d.ts", @@ -44,13 +44,13 @@ "@sendgrid/mail": "6.5.4", "abi-decoder": "2.4.0", "async": "0.9.2", - "bitcore-lib": "^10.10.5", + "bitcore-lib": "^10.10.7", "bitcore-lib-cash": "^10.10.5", "bitcore-lib-doge": "^10.10.5", "bitcore-lib-ltc": "^10.10.5", "compression": "1.7.4", "cors": "2.8.5", - "crypto-wallet-core": "^10.10.6", + "crypto-wallet-core": "^10.10.7", "email-validator": "1.2.3", "express": "4.19.2", "express-rate-limit": "2.14.2", diff --git a/packages/bitcore-wallet/package-lock.json b/packages/bitcore-wallet/package-lock.json index 2c5532d965b..df28b57d98f 100644 --- a/packages/bitcore-wallet/package-lock.json +++ b/packages/bitcore-wallet/package-lock.json @@ -1,12 +1,12 @@ { "name": "bitcore-wallet", - "version": "10.10.6", + "version": "10.10.7", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "bitcore-wallet", - "version": "10.10.6", + "version": "10.10.7", "dependencies": { "async": "^2.5.0", "commander": "^2.6.0", diff --git a/packages/bitcore-wallet/package.json b/packages/bitcore-wallet/package.json index 5c3aa92fd69..4d53b475c71 100644 --- a/packages/bitcore-wallet/package.json +++ b/packages/bitcore-wallet/package.json @@ -2,7 +2,7 @@ "name": "bitcore-wallet", "description": "A CLI Mutisig HD Bitcoin Wallet, demo for Bitcore Wallet Service", "author": "BitPay Inc", - "version": "10.10.6", + "version": "10.10.7", "private": true, "keywords": [ "bitcoin", @@ -19,8 +19,8 @@ }, "dependencies": { "async": "^2.5.0", - "bitcore-lib": "^10.10.5", - "bitcore-wallet-client": "^10.10.6", + "bitcore-lib": "^10.10.7", + "bitcore-wallet-client": "^10.10.7", "commander": "^2.6.0", "lodash": "^3.3.1", "moment": "^2.9.0", diff --git a/packages/crypto-wallet-core/package-lock.json b/packages/crypto-wallet-core/package-lock.json index 806e17cdfd2..10f69740cf0 100644 --- a/packages/crypto-wallet-core/package-lock.json +++ b/packages/crypto-wallet-core/package-lock.json @@ -1,12 +1,12 @@ { "name": "crypto-wallet-core", - "version": "10.10.6", + "version": "10.10.7", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "crypto-wallet-core", - "version": "10.10.6", + "version": "10.10.7", "license": "MIT", "dependencies": { "@solana-program/compute-budget": "^0.7.0", @@ -14,7 +14,7 @@ "@solana-program/system": "^0.7.0", "@solana-program/token": "^0.5.1", "@solana/kit": "^2.1.0", - "bitcore-lib": "^10.10.5", + "bitcore-lib": "^10.10.7", "bitcore-lib-cash": "^10.10.5", "bitcore-lib-doge": "^10.10.5", "bitcore-lib-ltc": "^10.10.5", diff --git a/packages/crypto-wallet-core/package.json b/packages/crypto-wallet-core/package.json index dc9540a31bf..faac1e1de51 100644 --- a/packages/crypto-wallet-core/package.json +++ b/packages/crypto-wallet-core/package.json @@ -1,6 +1,6 @@ { "name": "crypto-wallet-core", - "version": "10.10.6", + "version": "10.10.7", "description": "A multi-currency support library for address derivation, private key creation, and transaction creation", "main": "./ts_build/src/index.js", "types": "./ts_build/src/index.d.ts", @@ -28,7 +28,7 @@ "@solana-program/system": "^0.7.0", "@solana-program/token": "^0.5.1", "@solana/kit": "^2.1.0", - "bitcore-lib": "^10.10.5", + "bitcore-lib": "^10.10.7", "bitcore-lib-cash": "^10.10.5", "bitcore-lib-doge": "^10.10.5", "bitcore-lib-ltc": "^10.10.5", From c5506ee9f83e1dc3446b2ed6e365f132bf9ae450 Mon Sep 17 00:00:00 2001 From: Mike Hume Date: Tue, 15 Jul 2025 13:52:52 -0400 Subject: [PATCH 11/23] feat(templates): removes horizontal rule from email --- .../bitcore-wallet-service/templates/en/new_outgoing_tx.html | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/bitcore-wallet-service/templates/en/new_outgoing_tx.html b/packages/bitcore-wallet-service/templates/en/new_outgoing_tx.html index 55d2944cda1..21717f3f497 100644 --- a/packages/bitcore-wallet-service/templates/en/new_outgoing_tx.html +++ b/packages/bitcore-wallet-service/templates/en/new_outgoing_tx.html @@ -6,8 +6,6 @@

{{title}}

-
-
A Payment of {{amount}} has been sent from your wallet. -
\ No newline at end of file +
From 9a891a602b17497e4eb2b09e2b88577883c014ec Mon Sep 17 00:00:00 2001 From: Gabriel Date: Mon, 21 Jul 2025 11:30:12 -0300 Subject: [PATCH 12/23] [FIX] select inputs when replaceTxByFee - reuse one original input --- .../src/lib/chain/btc/index.ts | 22 ++++++--- .../bitcore-wallet-service/test/chain/btc.js | 45 +++++++++++++++++++ 2 files changed, 61 insertions(+), 6 deletions(-) diff --git a/packages/bitcore-wallet-service/src/lib/chain/btc/index.ts b/packages/bitcore-wallet-service/src/lib/chain/btc/index.ts index b0475028755..5c89101acac 100644 --- a/packages/bitcore-wallet-service/src/lib/chain/btc/index.ts +++ b/packages/bitcore-wallet-service/src/lib/chain/btc/index.ts @@ -605,7 +605,11 @@ export class BtcChain implements IChain { }); }; - const select = (utxos, coin, cb) => { + const select = (utxos, requiredInputs, cb) => { + let requiredTxids = []; + if (requiredInputs.length > 0 && txp.replaceTxByFee) { + requiredTxids = _.map(requiredInputs, 'txid'); + } let totalValueInUtxos = _.sumBy(utxos, 'satoshis'); if (totalValueInUtxos < txpAmount) { logger.debug( @@ -620,6 +624,7 @@ export class BtcChain implements IChain { // remove utxos not economically worth to send utxos = _.filter(utxos, utxo => { + if (requiredTxids.includes(utxo.txid)) return true; if (utxo.satoshis <= feePerInput) return false; return true; }); @@ -657,10 +662,15 @@ export class BtcChain implements IChain { return utxo.satoshis > bigInputThreshold; }); - const bigInputs = _.sortBy(partitions[0], 'satoshis'); - const smallInputs = _.sortBy(partitions[1], utxo => { - return -utxo.satoshis; - }); + + const bigInputs = _.sortBy(partitions[0], [ + utxo => !requiredTxids.includes(utxo.txid), + 'satoshis' + ]); + const smallInputs = _.sortBy(partitions[1], [ + utxo => !requiredTxids.includes(utxo.txid), + utxo => -utxo.satoshis + ]); logger.debug('Considering ' + bigInputs.length + ' big inputs (' + Utils.formatUtxos(bigInputs) + ')'); logger.debug('Considering ' + smallInputs.length + ' small inputs (' + Utils.formatUtxos(smallInputs) + ')'); @@ -861,7 +871,7 @@ export class BtcChain implements IChain { lastGroupLength = candidateUtxos.length; - select(candidateUtxos, txp.coin, (err, selectedInputs, selectedFee) => { + select(candidateUtxos, txp.inputs, (err, selectedInputs, selectedFee) => { if (err) { // logger.debug('No inputs selected on this group: ', err); selectionError = err; diff --git a/packages/bitcore-wallet-service/test/chain/btc.js b/packages/bitcore-wallet-service/test/chain/btc.js index 2574f4801b5..c788091f1ce 100644 --- a/packages/bitcore-wallet-service/test/chain/btc.js +++ b/packages/bitcore-wallet-service/test/chain/btc.js @@ -11,6 +11,7 @@ const { BtcChain } = require('../../ts_build/lib/chain/btc'); const { TxProposal } = require('../../ts_build/lib/model/txproposal'); const { Common } = require('../../ts_build/lib/common'); +const helpers = require('../integration/helpers'); const Constants = Common.Constants; const segWitToAddress = 'BC1QW508D6QEJXTDG4Y5R3ZARVARY0C5XW7KV8F3T4'; //'bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq'; @@ -208,6 +209,50 @@ describe('Chain BTC', function() { }); + describe('#selectTxInputs', function() { + let wallet; + let server; + let utxos; + let btc; + + before(function(done) { + helpers.before(function(res) { + btc = new BtcChain(); + done(); + }); + }); + + beforeEach(function(done) { + helpers.beforeEach(function() { + helpers.createAndJoinWallet(2, 3, {}, function(s, w) { + wallet = w; + server = s; + helpers.stubUtxos(server, wallet, [1, 2, 3, 4, 5], {}, function(u) { + utxos = u; + done(); + }); + }); + }); + }); + + after(helpers.after); + + it('should not filter out provided inputs', function(done) { + const txp = TxProposal.fromObj(aTXP()); + txp.walletId = wallet.id; + // set inputs as 2 largest utxos since selectTxInputs will spend smaller inputs first + const inputs = utxos.sort((a, b) => a.satoshis - b.satoshis).slice(-2); + txp.inputs = inputs; + txp.replaceTxByFee = true; + txp.feePerKb = 10000; // 10 sats/byte + btc.selectTxInputs(server, txp, wallet, {}, function(err) { + const txpOutpoints = txp.inputs.map(i => `${i.txid}:${i.vout}`); + const expectedOutpoints = inputs.map(i => `${i.txid}:${i.vout}`); + txpOutpoints.some(outpoint => expectedOutpoints.includes(outpoint)).should.equal(true, 'Expected resulting txp to include some provided inputs'); + done(); + }); + }); + }); }); From f77b0837eddd92fc2bd89855f7c634e715a8d9ae Mon Sep 17 00:00:00 2001 From: MicahMaphet Date: Tue, 15 Jul 2025 03:43:19 +0900 Subject: [PATCH 13/23] removed unused lodash imports --- packages/bitcore-client/src/encryption.ts | 1 - packages/bitcore-node/src/modules/index.ts | 2 -- packages/bitcore-node/src/modules/ripple/models/transaction.ts | 1 - packages/bitcore-node/test/integration/ethereum/csp.spec.ts | 1 - packages/bitcore-node/test/integration/matic/csp.spec.ts | 1 - packages/bitcore-node/test/verification/db-verify-headers.ts | 1 - packages/bitcore-wallet-service/src/bcmonitor/bcmonitor.ts | 1 - .../bitcore-wallet-service/src/externalServices/changelly.ts | 1 - packages/bitcore-wallet-service/src/externalServices/moonpay.ts | 1 - packages/bitcore-wallet-service/src/externalServices/oneInch.ts | 1 - packages/bitcore-wallet-service/src/externalServices/ramp.ts | 1 - packages/bitcore-wallet-service/src/externalServices/simplex.ts | 1 - .../bitcore-wallet-service/src/externalServices/thorswap.ts | 1 - packages/bitcore-wallet-service/src/externalServices/wyre.ts | 1 - packages/bitcore-wallet-service/src/lib/model/session.ts | 1 - 15 files changed, 16 deletions(-) diff --git a/packages/bitcore-client/src/encryption.ts b/packages/bitcore-client/src/encryption.ts index 0145acb128a..bd4ca3556ad 100644 --- a/packages/bitcore-client/src/encryption.ts +++ b/packages/bitcore-client/src/encryption.ts @@ -19,7 +19,6 @@ export function shaHash(data, algo = 'sha256') { const SHA512 = data => shaHash(data, 'sha512'); const SHA256 = data => shaHash(data, 'sha256'); const algo = 'aes-256-cbc'; -const _ = require('lodash'); export function encryptEncryptionKey(encryptionKey, password) { const password_hash = Buffer.from(SHA512(password)); diff --git a/packages/bitcore-node/src/modules/index.ts b/packages/bitcore-node/src/modules/index.ts index 00c6682611d..6649d9f82f4 100644 --- a/packages/bitcore-node/src/modules/index.ts +++ b/packages/bitcore-node/src/modules/index.ts @@ -1,5 +1,3 @@ -import _ from 'lodash'; - import logger from '../logger'; import { ChainStateProvider } from '../providers/chain-state'; import { Libs } from '../providers/libs'; diff --git a/packages/bitcore-node/src/modules/ripple/models/transaction.ts b/packages/bitcore-node/src/modules/ripple/models/transaction.ts index 420c0db14ac..68b7759b162 100644 --- a/packages/bitcore-node/src/modules/ripple/models/transaction.ts +++ b/packages/bitcore-node/src/modules/ripple/models/transaction.ts @@ -1,5 +1,4 @@ import { ObjectID } from 'bson'; -import * as _ from 'lodash'; import { LoggifyClass } from '../../../decorators/Loggify'; import logger from '../../../logger'; import { MongoBound } from '../../../models/base'; diff --git a/packages/bitcore-node/test/integration/ethereum/csp.spec.ts b/packages/bitcore-node/test/integration/ethereum/csp.spec.ts index e46570c0347..10e7ffb085a 100644 --- a/packages/bitcore-node/test/integration/ethereum/csp.spec.ts +++ b/packages/bitcore-node/test/integration/ethereum/csp.spec.ts @@ -1,7 +1,6 @@ import { ObjectId } from 'bson'; import { expect } from 'chai'; import { Request, Response } from 'express-serve-static-core'; -import _ from 'lodash'; import * as sinon from 'sinon'; import { Transform, Writable } from 'stream'; import Web3 from 'web3'; diff --git a/packages/bitcore-node/test/integration/matic/csp.spec.ts b/packages/bitcore-node/test/integration/matic/csp.spec.ts index 75feb05fa94..581cedad1bf 100644 --- a/packages/bitcore-node/test/integration/matic/csp.spec.ts +++ b/packages/bitcore-node/test/integration/matic/csp.spec.ts @@ -1,7 +1,6 @@ import { ObjectId } from 'bson'; import { expect } from 'chai'; import { Request, Response } from 'express-serve-static-core'; -import _ from 'lodash'; import * as sinon from 'sinon'; import { Transform, Writable } from 'stream'; import Web3 from 'web3'; diff --git a/packages/bitcore-node/test/verification/db-verify-headers.ts b/packages/bitcore-node/test/verification/db-verify-headers.ts index 71ce799ee48..b491fb3ef1c 100644 --- a/packages/bitcore-node/test/verification/db-verify-headers.ts +++ b/packages/bitcore-node/test/verification/db-verify-headers.ts @@ -1,6 +1,5 @@ #!/usr/bin/env node -import * as _ from 'lodash'; import { IBlock } from '../../src/types/Block'; import { BitcoinBlockStorage } from '../../src/models/block'; import { Modules } from '../../src/modules'; diff --git a/packages/bitcore-wallet-service/src/bcmonitor/bcmonitor.ts b/packages/bitcore-wallet-service/src/bcmonitor/bcmonitor.ts index bb853d99c64..05ebc50a8c3 100644 --- a/packages/bitcore-wallet-service/src/bcmonitor/bcmonitor.ts +++ b/packages/bitcore-wallet-service/src/bcmonitor/bcmonitor.ts @@ -1,5 +1,4 @@ #!/usr/bin/env node -import _ from 'lodash'; import config from '../config'; import { BlockchainMonitor } from '../lib/blockchainmonitor'; import logger from '../lib/logger'; diff --git a/packages/bitcore-wallet-service/src/externalServices/changelly.ts b/packages/bitcore-wallet-service/src/externalServices/changelly.ts index 445c5ba3d3f..ae9b77d3eaf 100644 --- a/packages/bitcore-wallet-service/src/externalServices/changelly.ts +++ b/packages/bitcore-wallet-service/src/externalServices/changelly.ts @@ -1,5 +1,4 @@ import * as crypto from 'crypto'; -import * as _ from 'lodash'; import * as request from 'request'; import config from '../config'; import { ClientError } from '../lib/errors/clienterror'; diff --git a/packages/bitcore-wallet-service/src/externalServices/moonpay.ts b/packages/bitcore-wallet-service/src/externalServices/moonpay.ts index 10827a444fe..d5d1e63bcda 100644 --- a/packages/bitcore-wallet-service/src/externalServices/moonpay.ts +++ b/packages/bitcore-wallet-service/src/externalServices/moonpay.ts @@ -1,4 +1,3 @@ -import * as _ from 'lodash'; import * as request from 'request'; import config from '../config'; import { ClientError } from '../lib/errors/clienterror'; diff --git a/packages/bitcore-wallet-service/src/externalServices/oneInch.ts b/packages/bitcore-wallet-service/src/externalServices/oneInch.ts index 34e05ff7225..aba8defdffc 100644 --- a/packages/bitcore-wallet-service/src/externalServices/oneInch.ts +++ b/packages/bitcore-wallet-service/src/externalServices/oneInch.ts @@ -1,7 +1,6 @@ import { Constants as ConstantsCWC, } from 'crypto-wallet-core'; -import * as _ from 'lodash'; import * as request from 'request'; import config from '../config'; import { Defaults } from '../lib/common/defaults'; diff --git a/packages/bitcore-wallet-service/src/externalServices/ramp.ts b/packages/bitcore-wallet-service/src/externalServices/ramp.ts index c38ca985dbd..3825768b8d9 100644 --- a/packages/bitcore-wallet-service/src/externalServices/ramp.ts +++ b/packages/bitcore-wallet-service/src/externalServices/ramp.ts @@ -1,4 +1,3 @@ -import * as _ from 'lodash'; import * as request from 'request'; import config from '../config'; import { Utils } from '../lib/common/utils'; diff --git a/packages/bitcore-wallet-service/src/externalServices/simplex.ts b/packages/bitcore-wallet-service/src/externalServices/simplex.ts index 680c89d816d..cc1d60bc128 100644 --- a/packages/bitcore-wallet-service/src/externalServices/simplex.ts +++ b/packages/bitcore-wallet-service/src/externalServices/simplex.ts @@ -1,4 +1,3 @@ -import * as _ from 'lodash'; import * as request from 'request'; import config from '../config'; import { Utils } from '../lib/common/utils'; diff --git a/packages/bitcore-wallet-service/src/externalServices/thorswap.ts b/packages/bitcore-wallet-service/src/externalServices/thorswap.ts index 0f8ff41b110..012deb2c893 100644 --- a/packages/bitcore-wallet-service/src/externalServices/thorswap.ts +++ b/packages/bitcore-wallet-service/src/externalServices/thorswap.ts @@ -1,4 +1,3 @@ -import * as _ from 'lodash'; import * as request from 'request'; import config from '../config'; import { ClientError } from '../lib/errors/clienterror'; diff --git a/packages/bitcore-wallet-service/src/externalServices/wyre.ts b/packages/bitcore-wallet-service/src/externalServices/wyre.ts index 24cdf4e6d61..235315e64e4 100644 --- a/packages/bitcore-wallet-service/src/externalServices/wyre.ts +++ b/packages/bitcore-wallet-service/src/externalServices/wyre.ts @@ -1,4 +1,3 @@ -import * as _ from 'lodash'; import * as request from 'request'; import config from '../config'; import { ClientError } from '../lib/errors/clienterror'; diff --git a/packages/bitcore-wallet-service/src/lib/model/session.ts b/packages/bitcore-wallet-service/src/lib/model/session.ts index 76a4f9c0376..b9cbcacf989 100644 --- a/packages/bitcore-wallet-service/src/lib/model/session.ts +++ b/packages/bitcore-wallet-service/src/lib/model/session.ts @@ -1,4 +1,3 @@ -import _ from 'lodash'; import { Common } from '../common'; const Uuid = require('uuid'); From e5dcf2822b5848edbaada27238c269e798c524e9 Mon Sep 17 00:00:00 2001 From: Justin Langston Date: Tue, 22 Jul 2025 11:21:55 -0400 Subject: [PATCH 14/23] v10.10.8 --- lerna.json | 2 +- packages/bitcore-client/package-lock.json | 4 ++-- packages/bitcore-client/package.json | 2 +- packages/bitcore-node/package-lock.json | 4 ++-- packages/bitcore-node/package.json | 6 +++--- packages/bitcore-wallet-client/package-lock.json | 6 +++--- packages/bitcore-wallet-client/package.json | 4 ++-- packages/bitcore-wallet-service/package-lock.json | 4 ++-- packages/bitcore-wallet-service/package.json | 2 +- packages/bitcore-wallet/package-lock.json | 4 ++-- packages/bitcore-wallet/package.json | 4 ++-- 11 files changed, 21 insertions(+), 21 deletions(-) diff --git a/lerna.json b/lerna.json index be8d63354b3..923c5e4a29c 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { "lerna": "2.9.1", - "version": "10.10.7", + "version": "10.10.8", "packages": ["packages/[^insight]*"] } diff --git a/packages/bitcore-client/package-lock.json b/packages/bitcore-client/package-lock.json index 5e1c8c79442..e04c762ffe2 100644 --- a/packages/bitcore-client/package-lock.json +++ b/packages/bitcore-client/package-lock.json @@ -1,12 +1,12 @@ { "name": "bitcore-client", - "version": "10.10.7", + "version": "10.10.8", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "bitcore-client", - "version": "10.10.7", + "version": "10.10.8", "dependencies": { "async": "2.5.0", "bcrypt": "5.1.0", diff --git a/packages/bitcore-client/package.json b/packages/bitcore-client/package.json index 08eeb040d51..6ca778f3663 100644 --- a/packages/bitcore-client/package.json +++ b/packages/bitcore-client/package.json @@ -1,7 +1,7 @@ { "name": "bitcore-client", "description": "Wallet client for Bitcore node", - "version": "10.10.7", + "version": "10.10.8", "author": "Justin Langston ", "main": "./ts_build/src/index.js", "types": "./ts_build/src/index.d.ts", diff --git a/packages/bitcore-node/package-lock.json b/packages/bitcore-node/package-lock.json index e2506f993f1..2bc2420217d 100644 --- a/packages/bitcore-node/package-lock.json +++ b/packages/bitcore-node/package-lock.json @@ -1,12 +1,12 @@ { "name": "bitcore-node", - "version": "10.10.7", + "version": "10.10.8", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "bitcore-node", - "version": "10.10.7", + "version": "10.10.8", "license": "MIT", "dependencies": { "abi-decoder": "2.4.0", diff --git a/packages/bitcore-node/package.json b/packages/bitcore-node/package.json index cb0151ac883..01ec122cd07 100644 --- a/packages/bitcore-node/package.json +++ b/packages/bitcore-node/package.json @@ -4,7 +4,7 @@ "engines": { "node": ">=18.0.0" }, - "version": "10.10.7", + "version": "10.10.8", "author": "Justin Langston ", "contributors": [ "Justin Langston ", @@ -90,7 +90,7 @@ }, "dependencies": { "abi-decoder": "2.4.0", - "bitcore-client": "^10.10.7", + "bitcore-client": "^10.10.8", "bitcore-lib": "^10.10.7", "bitcore-lib-cash": "^10.10.5", "bitcore-lib-doge": "^10.10.5", @@ -98,7 +98,7 @@ "bitcore-p2p": "^10.10.7", "bitcore-p2p-cash": "^10.10.7", "bitcore-p2p-doge": "^10.10.5", - "bitcore-wallet-client": "^10.10.7", + "bitcore-wallet-client": "^10.10.8", "cors": "2.8.4", "crypto-rpc": "https://github.com/bitpay/crypto-rpc.git#370b201c98f4616b378290dc30486df5c1c769e0", "crypto-wallet-core": "^10.10.7", diff --git a/packages/bitcore-wallet-client/package-lock.json b/packages/bitcore-wallet-client/package-lock.json index 83bcc0b89cd..be2ea21cfd4 100644 --- a/packages/bitcore-wallet-client/package-lock.json +++ b/packages/bitcore-wallet-client/package-lock.json @@ -1,12 +1,12 @@ { "name": "bitcore-wallet-client", - "version": "10.10.7", + "version": "10.10.8", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "bitcore-wallet-client", - "version": "10.10.7", + "version": "10.10.8", "license": "MIT", "dependencies": { "ajv": "6.12.0", @@ -25,7 +25,7 @@ "devDependencies": { "@types/lodash": "^4.14.136", "@types/node": "22.14.1", - "bitcore-wallet-service": "^10.10.7", + "bitcore-wallet-service": "^10.10.8", "browserify": "^13.1.0", "chai": "^1.9.1", "coveralls": "^3.0.2", diff --git a/packages/bitcore-wallet-client/package.json b/packages/bitcore-wallet-client/package.json index 3bb4eb4ee2f..29bbd73ce1f 100644 --- a/packages/bitcore-wallet-client/package.json +++ b/packages/bitcore-wallet-client/package.json @@ -2,7 +2,7 @@ "name": "bitcore-wallet-client", "description": "Client for bitcore-wallet-service", "author": "BitPay Inc", - "version": "10.10.7", + "version": "10.10.8", "license": "MIT", "main": "ts_build/index.js", "types": "ts_build/index.d.js", @@ -43,7 +43,7 @@ "devDependencies": { "@types/lodash": "^4.14.136", "@types/node": "22.14.1", - "bitcore-wallet-service": "^10.10.7", + "bitcore-wallet-service": "^10.10.8", "browserify": "^13.1.0", "chai": "^1.9.1", "coveralls": "^3.0.2", diff --git a/packages/bitcore-wallet-service/package-lock.json b/packages/bitcore-wallet-service/package-lock.json index 02345a69036..ef84099f610 100644 --- a/packages/bitcore-wallet-service/package-lock.json +++ b/packages/bitcore-wallet-service/package-lock.json @@ -1,12 +1,12 @@ { "name": "bitcore-wallet-service", - "version": "10.10.7", + "version": "10.10.8", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "bitcore-wallet-service", - "version": "10.10.7", + "version": "10.10.8", "license": "MIT", "dependencies": { "@sendgrid/mail": "6.5.4", diff --git a/packages/bitcore-wallet-service/package.json b/packages/bitcore-wallet-service/package.json index 8510ac28002..b871c1c5bd0 100644 --- a/packages/bitcore-wallet-service/package.json +++ b/packages/bitcore-wallet-service/package.json @@ -2,7 +2,7 @@ "name": "bitcore-wallet-service", "description": "A service for Mutisig HD Bitcoin Wallets", "author": "BitPay Inc", - "version": "10.10.7", + "version": "10.10.8", "license": "MIT", "main": "ts_build/index.js", "types": "./ts_build/index.d.ts", diff --git a/packages/bitcore-wallet/package-lock.json b/packages/bitcore-wallet/package-lock.json index df28b57d98f..5e6da55826c 100644 --- a/packages/bitcore-wallet/package-lock.json +++ b/packages/bitcore-wallet/package-lock.json @@ -1,12 +1,12 @@ { "name": "bitcore-wallet", - "version": "10.10.7", + "version": "10.10.8", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "bitcore-wallet", - "version": "10.10.7", + "version": "10.10.8", "dependencies": { "async": "^2.5.0", "commander": "^2.6.0", diff --git a/packages/bitcore-wallet/package.json b/packages/bitcore-wallet/package.json index 4d53b475c71..8bdedf1914d 100644 --- a/packages/bitcore-wallet/package.json +++ b/packages/bitcore-wallet/package.json @@ -2,7 +2,7 @@ "name": "bitcore-wallet", "description": "A CLI Mutisig HD Bitcoin Wallet, demo for Bitcore Wallet Service", "author": "BitPay Inc", - "version": "10.10.7", + "version": "10.10.8", "private": true, "keywords": [ "bitcoin", @@ -20,7 +20,7 @@ "dependencies": { "async": "^2.5.0", "bitcore-lib": "^10.10.7", - "bitcore-wallet-client": "^10.10.7", + "bitcore-wallet-client": "^10.10.8", "commander": "^2.6.0", "lodash": "^3.3.1", "moment": "^2.9.0", From cd2a8ae74363ab811f36a35a1a2c614f59e5f149 Mon Sep 17 00:00:00 2001 From: lyambo Date: Fri, 25 Jul 2025 11:13:26 -0400 Subject: [PATCH 15/23] add feePerKb to Solana getFee --- .../bitcore-wallet-service/src/lib/chain/sol/index.ts | 8 +++++--- packages/bitcore-wallet-service/src/lib/server.ts | 4 +++- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/packages/bitcore-wallet-service/src/lib/chain/sol/index.ts b/packages/bitcore-wallet-service/src/lib/chain/sol/index.ts index 30f5605d0df..7900c865cb3 100644 --- a/packages/bitcore-wallet-service/src/lib/chain/sol/index.ts +++ b/packages/bitcore-wallet-service/src/lib/chain/sol/index.ts @@ -89,8 +89,10 @@ export class SolChain implements IChain { getFee(server, wallet, opts) { return new Promise(resolve => { - const numSignatures = opts.signatures || 1; - return resolve({ fee: 5000 * numSignatures }); + const numSignatures = opts.numSignatures || 1; + const feePerKb = 5000; // Fee per signature in lamports + const fee = feePerKb * numSignatures; + return resolve({ fee, feePerKb }); }); } @@ -176,7 +178,7 @@ export class SolChain implements IChain { server.getBalance({}, (err, balance) => { if (err) return cb(err); const { availableAmount } = balance; - const sigs = opts.signatures || 1; + const sigs = opts.numSignatures || 1; let fee = sigs * 5000 return cb(null, { utxosBelowFee: 0, diff --git a/packages/bitcore-wallet-service/src/lib/server.ts b/packages/bitcore-wallet-service/src/lib/server.ts index 042b14d2ce5..a762a746345 100644 --- a/packages/bitcore-wallet-service/src/lib/server.ts +++ b/packages/bitcore-wallet-service/src/lib/server.ts @@ -2355,7 +2355,8 @@ export class WalletService implements IWalletService { { feePerKb: opts.feePerKb, excludeUnconfirmedUtxos: !!opts.excludeUnconfirmedUtxos, - returnInputs: true + returnInputs: true, + numSignatures: opts.numSignatures }, (err, info) => { if (err) return next(err); @@ -2574,6 +2575,7 @@ export class WalletService implements IWalletService { * @param {string} opts.memo - Optional. Solana transaction memo * @param {number} opts.decimals - Optional. Numbet of decimal of a desited token * @param {string} opts.fromAta - Optional. ATA addres of the sender (Solana) + * * @param {number} opts.numSignatures - Optional. Number of signatures required for the transation. For Solana fee calculation. * @param {Boolean} opts.refreshOnPublish - Optional. Allows publish function to refresh txp data * @returns {TxProposal} Transaction proposal. outputs address format will use the same format as inpunt. */ From 06bee9ffecebbf9a4b6d7913cf69206e2691815a Mon Sep 17 00:00:00 2001 From: lyambo Date: Fri, 25 Jul 2025 11:48:12 -0400 Subject: [PATCH 16/23] add solana base fee to defaults --- packages/bitcore-wallet-service/src/lib/chain/sol/index.ts | 4 ++-- packages/bitcore-wallet-service/src/lib/common/defaults.ts | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/bitcore-wallet-service/src/lib/chain/sol/index.ts b/packages/bitcore-wallet-service/src/lib/chain/sol/index.ts index 7900c865cb3..1e21937c066 100644 --- a/packages/bitcore-wallet-service/src/lib/chain/sol/index.ts +++ b/packages/bitcore-wallet-service/src/lib/chain/sol/index.ts @@ -90,7 +90,7 @@ export class SolChain implements IChain { getFee(server, wallet, opts) { return new Promise(resolve => { const numSignatures = opts.numSignatures || 1; - const feePerKb = 5000; // Fee per signature in lamports + const feePerKb = Defaults.SOL_BASE_FEE; // Fee per signature in lamports const fee = feePerKb * numSignatures; return resolve({ fee, feePerKb }); }); @@ -179,7 +179,7 @@ export class SolChain implements IChain { if (err) return cb(err); const { availableAmount } = balance; const sigs = opts.numSignatures || 1; - let fee = sigs * 5000 + const fee = sigs * Defaults.SOL_BASE_FEE return cb(null, { utxosBelowFee: 0, amountBelowFee: 0, diff --git a/packages/bitcore-wallet-service/src/lib/common/defaults.ts b/packages/bitcore-wallet-service/src/lib/common/defaults.ts index 3c8fbcbd77a..4e1d6e4339b 100644 --- a/packages/bitcore-wallet-service/src/lib/common/defaults.ts +++ b/packages/bitcore-wallet-service/src/lib/common/defaults.ts @@ -412,6 +412,8 @@ export const Defaults = { // SOL has a non-refundable rent fee / balance MIN_SOL_BALANCE: 1002240, + SOL_BASE_FEE: 5000, + // Time to get the latest push notification subscriptions. In ms. PUSH_NOTIFICATION_SUBS_TIME: 10 * 60 * 1000, // 10 min. From 3814bee33719b1b99282896e4c18edc97063bb4c Mon Sep 17 00:00:00 2001 From: lyambo Date: Fri, 25 Jul 2025 13:54:50 -0400 Subject: [PATCH 17/23] lint --- packages/bitcore-wallet-service/src/lib/server.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/bitcore-wallet-service/src/lib/server.ts b/packages/bitcore-wallet-service/src/lib/server.ts index a762a746345..455a2872065 100644 --- a/packages/bitcore-wallet-service/src/lib/server.ts +++ b/packages/bitcore-wallet-service/src/lib/server.ts @@ -2575,7 +2575,7 @@ export class WalletService implements IWalletService { * @param {string} opts.memo - Optional. Solana transaction memo * @param {number} opts.decimals - Optional. Numbet of decimal of a desited token * @param {string} opts.fromAta - Optional. ATA addres of the sender (Solana) - * * @param {number} opts.numSignatures - Optional. Number of signatures required for the transation. For Solana fee calculation. + * @param {number} opts.numSignatures - Optional. Number of signatures required for the transation. For Solana fee calculation. * @param {Boolean} opts.refreshOnPublish - Optional. Allows publish function to refresh txp data * @returns {TxProposal} Transaction proposal. outputs address format will use the same format as inpunt. */ From 2f8941ffba584680fa642b6c3dcca2f3f4d3c6f1 Mon Sep 17 00:00:00 2001 From: Justin Langston Date: Fri, 25 Jul 2025 14:20:22 -0400 Subject: [PATCH 18/23] v10.10.9 --- lerna.json | 2 +- packages/bitcore-node/package-lock.json | 4 ++-- packages/bitcore-node/package.json | 4 ++-- packages/bitcore-wallet-client/package-lock.json | 6 +++--- packages/bitcore-wallet-client/package.json | 4 ++-- packages/bitcore-wallet-service/package-lock.json | 4 ++-- packages/bitcore-wallet-service/package.json | 2 +- packages/bitcore-wallet/package-lock.json | 4 ++-- packages/bitcore-wallet/package.json | 4 ++-- 9 files changed, 17 insertions(+), 17 deletions(-) diff --git a/lerna.json b/lerna.json index 923c5e4a29c..14333176f52 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { "lerna": "2.9.1", - "version": "10.10.8", + "version": "10.10.9", "packages": ["packages/[^insight]*"] } diff --git a/packages/bitcore-node/package-lock.json b/packages/bitcore-node/package-lock.json index 2bc2420217d..287cc417ce6 100644 --- a/packages/bitcore-node/package-lock.json +++ b/packages/bitcore-node/package-lock.json @@ -1,12 +1,12 @@ { "name": "bitcore-node", - "version": "10.10.8", + "version": "10.10.9", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "bitcore-node", - "version": "10.10.8", + "version": "10.10.9", "license": "MIT", "dependencies": { "abi-decoder": "2.4.0", diff --git a/packages/bitcore-node/package.json b/packages/bitcore-node/package.json index 01ec122cd07..cee1d6bb5a5 100644 --- a/packages/bitcore-node/package.json +++ b/packages/bitcore-node/package.json @@ -4,7 +4,7 @@ "engines": { "node": ">=18.0.0" }, - "version": "10.10.8", + "version": "10.10.9", "author": "Justin Langston ", "contributors": [ "Justin Langston ", @@ -98,7 +98,7 @@ "bitcore-p2p": "^10.10.7", "bitcore-p2p-cash": "^10.10.7", "bitcore-p2p-doge": "^10.10.5", - "bitcore-wallet-client": "^10.10.8", + "bitcore-wallet-client": "^10.10.9", "cors": "2.8.4", "crypto-rpc": "https://github.com/bitpay/crypto-rpc.git#370b201c98f4616b378290dc30486df5c1c769e0", "crypto-wallet-core": "^10.10.7", diff --git a/packages/bitcore-wallet-client/package-lock.json b/packages/bitcore-wallet-client/package-lock.json index be2ea21cfd4..64d1ee2c1a0 100644 --- a/packages/bitcore-wallet-client/package-lock.json +++ b/packages/bitcore-wallet-client/package-lock.json @@ -1,12 +1,12 @@ { "name": "bitcore-wallet-client", - "version": "10.10.8", + "version": "10.10.9", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "bitcore-wallet-client", - "version": "10.10.8", + "version": "10.10.9", "license": "MIT", "dependencies": { "ajv": "6.12.0", @@ -25,7 +25,7 @@ "devDependencies": { "@types/lodash": "^4.14.136", "@types/node": "22.14.1", - "bitcore-wallet-service": "^10.10.8", + "bitcore-wallet-service": "^10.10.9", "browserify": "^13.1.0", "chai": "^1.9.1", "coveralls": "^3.0.2", diff --git a/packages/bitcore-wallet-client/package.json b/packages/bitcore-wallet-client/package.json index 29bbd73ce1f..b5a45e92165 100644 --- a/packages/bitcore-wallet-client/package.json +++ b/packages/bitcore-wallet-client/package.json @@ -2,7 +2,7 @@ "name": "bitcore-wallet-client", "description": "Client for bitcore-wallet-service", "author": "BitPay Inc", - "version": "10.10.8", + "version": "10.10.9", "license": "MIT", "main": "ts_build/index.js", "types": "ts_build/index.d.js", @@ -43,7 +43,7 @@ "devDependencies": { "@types/lodash": "^4.14.136", "@types/node": "22.14.1", - "bitcore-wallet-service": "^10.10.8", + "bitcore-wallet-service": "^10.10.9", "browserify": "^13.1.0", "chai": "^1.9.1", "coveralls": "^3.0.2", diff --git a/packages/bitcore-wallet-service/package-lock.json b/packages/bitcore-wallet-service/package-lock.json index ef84099f610..f97b4b571ea 100644 --- a/packages/bitcore-wallet-service/package-lock.json +++ b/packages/bitcore-wallet-service/package-lock.json @@ -1,12 +1,12 @@ { "name": "bitcore-wallet-service", - "version": "10.10.8", + "version": "10.10.9", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "bitcore-wallet-service", - "version": "10.10.8", + "version": "10.10.9", "license": "MIT", "dependencies": { "@sendgrid/mail": "6.5.4", diff --git a/packages/bitcore-wallet-service/package.json b/packages/bitcore-wallet-service/package.json index b871c1c5bd0..47e69d1807e 100644 --- a/packages/bitcore-wallet-service/package.json +++ b/packages/bitcore-wallet-service/package.json @@ -2,7 +2,7 @@ "name": "bitcore-wallet-service", "description": "A service for Mutisig HD Bitcoin Wallets", "author": "BitPay Inc", - "version": "10.10.8", + "version": "10.10.9", "license": "MIT", "main": "ts_build/index.js", "types": "./ts_build/index.d.ts", diff --git a/packages/bitcore-wallet/package-lock.json b/packages/bitcore-wallet/package-lock.json index 5e6da55826c..8606b63cf69 100644 --- a/packages/bitcore-wallet/package-lock.json +++ b/packages/bitcore-wallet/package-lock.json @@ -1,12 +1,12 @@ { "name": "bitcore-wallet", - "version": "10.10.8", + "version": "10.10.9", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "bitcore-wallet", - "version": "10.10.8", + "version": "10.10.9", "dependencies": { "async": "^2.5.0", "commander": "^2.6.0", diff --git a/packages/bitcore-wallet/package.json b/packages/bitcore-wallet/package.json index 8bdedf1914d..45f6e54e11d 100644 --- a/packages/bitcore-wallet/package.json +++ b/packages/bitcore-wallet/package.json @@ -2,7 +2,7 @@ "name": "bitcore-wallet", "description": "A CLI Mutisig HD Bitcoin Wallet, demo for Bitcore Wallet Service", "author": "BitPay Inc", - "version": "10.10.8", + "version": "10.10.9", "private": true, "keywords": [ "bitcoin", @@ -20,7 +20,7 @@ "dependencies": { "async": "^2.5.0", "bitcore-lib": "^10.10.7", - "bitcore-wallet-client": "^10.10.8", + "bitcore-wallet-client": "^10.10.9", "commander": "^2.6.0", "lodash": "^3.3.1", "moment": "^2.9.0", From ec13fa59139ed5e1aabf9867172c67a9c80916e7 Mon Sep 17 00:00:00 2001 From: MicahMaphet Date: Mon, 28 Jul 2025 22:18:07 -0400 Subject: [PATCH 19/23] moved block list (now 10 blocks) to the right and linting --- packages/insight/src/pages/chain.tsx | 133 +++++++++++++++++---------- 1 file changed, 82 insertions(+), 51 deletions(-) diff --git a/packages/insight/src/pages/chain.tsx b/packages/insight/src/pages/chain.tsx index 74524bf0075..04b02f0769b 100644 --- a/packages/insight/src/pages/chain.tsx +++ b/packages/insight/src/pages/chain.tsx @@ -1,63 +1,94 @@ -import { useEffect } from 'react'; -import { useDispatch } from 'react-redux'; -import { useNavigate, useParams } from 'react-router-dom'; -import { useApi } from 'src/api/api'; +import {useEffect, useState} from 'react'; +import {useDispatch} from 'react-redux'; +import {useNavigate, useParams} from 'react-router-dom'; +import {fetcher} from 'src/api/api'; import ChainHeader from 'src/components/chain-header'; -import { changeCurrency, changeNetwork } from 'src/store/app.actions'; -import { getApiRoot, getDefaultRefreshInterval, normalizeParams } from 'src/utilities/helper-methods'; -import Blocks from './blocks'; +import {changeCurrency, changeNetwork} from 'src/store/app.actions'; +import {getApiRoot, getFormattedDate, normalizeParams, sleep} from 'src/utilities/helper-methods'; +import {BlocksType} from 'src/utilities/models'; +import nProgress from 'nprogress'; +import Info from 'src/components/info'; +const getBlocksUrl = (currency: string, network: string) => { + return `${getApiRoot(currency)}/${currency}/${network}/block?limit=10`; +}; export const ChainDetails = () => { - const params = useParams<{currency: string, network: string}>() - let {currency, network} = params; + const params = useParams<{currency: string; network: string}>(); + const [blocksList, setBlocksList] = useState(); + const [error, setError] = useState(''); + let {currency, network} = params; - const navigate = useNavigate(); - const dispatch = useDispatch(); + const navigate = useNavigate(); + const dispatch = useDispatch(); - if (currency) { - const apiRoot = getApiRoot(currency); - const refreshInterval = getDefaultRefreshInterval(currency); - const {data, error} = useApi(`${apiRoot}/${currency}/mainnet/block?limit=1`, {refreshInterval}); - if (data) { - const {height, time, transactionCount, size} = data[0]; + useEffect(() => { + if (!currency || !network) return; + nProgress.start(); + const _normalizeParams = normalizeParams(currency, network); - } + currency = _normalizeParams.currency; + network = _normalizeParams.network; - } + dispatch(changeCurrency(currency)); + dispatch(changeNetwork(network)); - useEffect(() => { - if (!currency || !network) return; + Promise.all([fetcher(getBlocksUrl(currency, network)), sleep(500)]) + .then(([data]) => { + setBlocksList(data); + }) + .catch((e: any) => { + setError(e.message || 'Something went wrong. Please try again later.'); + }) + .finally(() => { + nProgress.done(); + }); + }, [currency, network]); - const normalizedParams = normalizeParams(currency, network); - currency = normalizedParams.currency; - network = normalizedParams.network; - dispatch(changeCurrency(currency)); - dispatch(changeNetwork(network)); + const gotoBlocks = async () => { + await navigate(`/${currency}/mainnet/blocks`); + }; - }, [currency, network]); - - const {data: priceDetails} = useApi(`https://bitpay.com/rates/${currency}/usd`); - const price = priceDetails?.data?.rate; + const gotoSingleBlockDetailsView = async (hash: string) => { + await navigate(`/${currency}/${network}/block/${hash}`); + }; + + return ( + <> + {error ? : null} - const gotoBlocks = async () => { - await navigate(`/${currency}/mainnet/blocks`); - } - - return ( - <> - {currency && network && } -
-
- Fee -
-
-
-
Go to full block list
-
- -
-
- - ); -} +
+ {currency && network && } +
+
Go to full block list
+ + + + + + + + { + blocksList?.length ? + ( + {blocksList.map((block: BlocksType, index: number) => { + const {height, hash, transactionCount, time, size} = block; + return ( + gotoSingleBlockDetailsView(hash)}> + + + + + + ); + })} + + ): null} +
HeightTimestampTransactionsSize
{height}{getFormattedDate(time)}{transactionCount}{size}
+
+
+ + ); +}; From aa43033b5146149250b4c0d383746ea42b58a0f2 Mon Sep 17 00:00:00 2001 From: MicahMaphet Date: Tue, 29 Jul 2025 15:16:08 -0400 Subject: [PATCH 20/23] added view blocks buton to bottom of transactions and fee data block --- packages/insight/src/components/chain-header.tsx | 15 ++------------- packages/insight/src/pages/chain.tsx | 16 ++++++++++++---- 2 files changed, 14 insertions(+), 17 deletions(-) diff --git a/packages/insight/src/components/chain-header.tsx b/packages/insight/src/components/chain-header.tsx index 85f62e39cf1..2793c5b3477 100644 --- a/packages/insight/src/components/chain-header.tsx +++ b/packages/insight/src/components/chain-header.tsx @@ -1,16 +1,10 @@ import {FC, useEffect, useRef} from 'react'; import {useApi} from 'src/api/api'; -import {buildTime, getApiRoot, getDefaultRefreshInterval} from 'src/utilities/helper-methods'; import { Chart as ChartJS } from 'chart.js'; import { colorCodes } from 'src/utilities/constants'; const ChainHeader: FC<{currency: string, network: string}> = ({currency, network}) => { - const apiRoot = getApiRoot(currency); - const refreshInterval = getDefaultRefreshInterval(currency); - const {data, error} = useApi(`${apiRoot}/${currency}/mainnet/block?limit=1`, {refreshInterval}); - const {height, time, transactionCount, size} = data[0]; - const {data: priceDetails} = useApi(`https://bitpay.com/rates/${currency}/usd`); const {data: priceDisplay} = useApi( `https://bitpay.com/currencies/prices?currencyPairs=["${currency}:USD"]`, @@ -19,7 +13,7 @@ const ChainHeader: FC<{currency: string, network: string}> = ({currency, network const chartRef = useRef(null); const chartInstanceRef = useRef(null); - const price = priceDetails?.data?.rate; + const price = network === 'mainnet' ? priceDetails?.data?.rate : 0; const priceList = priceDisplay?.data?.[0]?.priceDisplay || []; const chartData = { @@ -68,7 +62,7 @@ const ChainHeader: FC<{currency: string, network: string}> = ({currency, network return ( -
+
{currency} {priceList.length > 0 && ( @@ -79,11 +73,6 @@ const ChainHeader: FC<{currency: string, network: string}> = ({currency, network
{price} USD - Height {height} - Mined {buildTime(time)} - Transaction {transactionCount} - Size {size} -
); diff --git a/packages/insight/src/pages/chain.tsx b/packages/insight/src/pages/chain.tsx index 04b02f0769b..a5ee1dfe06e 100644 --- a/packages/insight/src/pages/chain.tsx +++ b/packages/insight/src/pages/chain.tsx @@ -8,6 +8,7 @@ import {getApiRoot, getFormattedDate, normalizeParams, sleep} from 'src/utilitie import {BlocksType} from 'src/utilities/models'; import nProgress from 'nprogress'; import Info from 'src/components/info'; +import { BitPay } from 'src/assets/styles/colors'; const getBlocksUrl = (currency: string, network: string) => { return `${getApiRoot(currency)}/${currency}/${network}/block?limit=10`; @@ -57,10 +58,16 @@ export const ChainDetails = () => { <> {error ? : null} -
- {currency && network && } -
-
Go to full block list
+
+
+
+ {currency && network && } +
+
+ Fee: xxx +
+
+
@@ -87,6 +94,7 @@ export const ChainDetails = () => { ): null}
Height
+
... View all Blocks
From 158b00802d837662aa9c4a2ed4ea1c01295253e1 Mon Sep 17 00:00:00 2001 From: MicahMaphet Date: Tue, 29 Jul 2025 16:32:34 -0400 Subject: [PATCH 21/23] replaced table with block chain --- packages/insight/src/pages/chain.tsx | 87 +++++++++++++++++----------- 1 file changed, 52 insertions(+), 35 deletions(-) diff --git a/packages/insight/src/pages/chain.tsx b/packages/insight/src/pages/chain.tsx index a5ee1dfe06e..8821a4aa569 100644 --- a/packages/insight/src/pages/chain.tsx +++ b/packages/insight/src/pages/chain.tsx @@ -1,17 +1,18 @@ -import {useEffect, useState} from 'react'; +import React, {useEffect, useState} from 'react'; import {useDispatch} from 'react-redux'; import {useNavigate, useParams} from 'react-router-dom'; import {fetcher} from 'src/api/api'; import ChainHeader from 'src/components/chain-header'; import {changeCurrency, changeNetwork} from 'src/store/app.actions'; -import {getApiRoot, getFormattedDate, normalizeParams, sleep} from 'src/utilities/helper-methods'; +import {getApiRoot, normalizeParams, sleep} from 'src/utilities/helper-methods'; import {BlocksType} from 'src/utilities/models'; import nProgress from 'nprogress'; import Info from 'src/components/info'; import { BitPay } from 'src/assets/styles/colors'; +import { colorCodes } from 'src/utilities/constants'; const getBlocksUrl = (currency: string, network: string) => { - return `${getApiRoot(currency)}/${currency}/${network}/block?limit=10`; + return `${getApiRoot(currency)}/${currency}/${network}/block?limit=6`; }; export const ChainDetails = () => { @@ -54,47 +55,63 @@ export const ChainDetails = () => { await navigate(`/${currency}/${network}/block/${hash}`); }; + if (!currency || !network) + return null; + return ( <> {error ? : null}
-
+
- {currency && network && } +
-
- Fee: xxx +
+ Fee: xxx
-
- - - - - - - - { - blocksList?.length ? - ( - {blocksList.map((block: BlocksType, index: number) => { - const {height, hash, transactionCount, time, size} = block; - return ( - gotoSingleBlockDetailsView(hash)}> - - - - - - ); - })} - - ): null} -
HeightTimestampTransactionsSize
{height}{getFormattedDate(time)}{transactionCount}{size}
-
... View all Blocks
+
+
View all Blocks
+ { + blocksList?.length ? ( +
+ {blocksList.map((block: BlocksType, index: number) => { + const { height, hash, transactionCount, time, size } = block; + const milisecondsWhenMined = Date.now() - new Date(time).getTime(); + const minutesWhenMined = Math.floor(milisecondsWhenMined / 60000); + return ( + +
gotoSingleBlockDetailsView(hash)} + style={{ + border: '4px solid #333', + borderRadius: '10px', + padding: '1rem', + width: '100%', + maxWidth: '400px', + backgroundColor: 'transparent', + cursor: 'pointer', + textAlign: 'center', + boxShadow: '2px 2px 5px rgba(0,0,0,0.1)', + }} + > + +
{height}
+
{transactionCount} transactions
+
{size} bytes
+
mined {minutesWhenMined} minutes ago
+
+
+ + {index !== blocksList.length - 1 && ( +
|
+ )} +
+ ); + })} +
+ ): null}
From 09435bd33d74af355f64ae3f34556abd7b200376 Mon Sep 17 00:00:00 2001 From: MicahMaphet Date: Thu, 7 Aug 2025 12:08:30 -0400 Subject: [PATCH 22/23] added fee chart --- .../insight/src/components/chain-header.tsx | 140 +++++++++--------- packages/insight/src/pages/chain.tsx | 52 ++++++- 2 files changed, 119 insertions(+), 73 deletions(-) diff --git a/packages/insight/src/components/chain-header.tsx b/packages/insight/src/components/chain-header.tsx index 2793c5b3477..f4fb2a9bbf0 100644 --- a/packages/insight/src/components/chain-header.tsx +++ b/packages/insight/src/components/chain-header.tsx @@ -1,81 +1,83 @@ import {FC, useEffect, useRef} from 'react'; import {useApi} from 'src/api/api'; -import { Chart as ChartJS } from 'chart.js'; -import { colorCodes } from 'src/utilities/constants'; +import {Chart as ChartJS} from 'chart.js'; +import {colorCodes} from 'src/utilities/constants'; +const ChainHeader: FC<{currency: string; network: string}> = ({currency, network}) => { + const {data: priceDetails} = useApi(`https://bitpay.com/rates/${currency}/usd`); + const {data: priceDisplay} = useApi( + `https://bitpay.com/currencies/prices?currencyPairs=["${currency}:USD"]`, + ); -const ChainHeader: FC<{currency: string, network: string}> = ({currency, network}) => { - const {data: priceDetails} = useApi(`https://bitpay.com/rates/${currency}/usd`); - const {data: priceDisplay} = useApi( - `https://bitpay.com/currencies/prices?currencyPairs=["${currency}:USD"]`, - ); + const chartRef = useRef(null); + const chartInstanceRef = useRef(null); - const chartRef = useRef(null); - const chartInstanceRef = useRef(null); - - const price = network === 'mainnet' ? priceDetails?.data?.rate : 0; - const priceList = priceDisplay?.data?.[0]?.priceDisplay || []; + const price = network === 'mainnet' ? priceDetails?.data?.rate : 0; + const priceList = priceDisplay?.data?.[0]?.priceDisplay || []; - const chartData = { - labels: priceList, - datasets: [ - { - data: priceList, - fill: false, - spanGaps: true, - borderColor: colorCodes[currency], - borderWidth: 2, - pointRadius: 0, - }, - ], - }; + const chartData = { + labels: priceList, + datasets: [ + { + data: priceList, + fill: false, + spanGaps: true, + borderColor: colorCodes[currency], + borderWidth: 2, + pointRadius: 0, + }, + ], + }; - const options = { - scales: { - x: {display: false}, - y: {display: false}, - }, - plugins: {legend: {display: false}}, - events: [], // disable default events - responsive: true, - maintainAspectRatio: false, - tension: 0.5, - }; - - useEffect(() => { - if (chartRef.current) { - if (chartInstanceRef.current) { - chartInstanceRef.current.destroy(); - } + const options = { + scales: { + x: {display: false}, + y: {display: false}, + }, + plugins: {legend: {display: false}}, + events: [], // disable default events + responsive: true, + maintainAspectRatio: false, + tension: 0.5, + }; - chartInstanceRef.current = new ChartJS(chartRef.current, { - type: 'line', - data: chartData, - options, - }); - } + useEffect(() => { + if (chartRef.current) { + if (chartInstanceRef.current) { + chartInstanceRef.current.destroy(); + } - return () => { - chartInstanceRef.current?.destroy(); - }; - }, [chartData, options]); + chartInstanceRef.current = new ChartJS(chartRef.current, { + type: 'line', + data: chartData, + options, + }); + } + return () => { + chartInstanceRef.current?.destroy(); + }; + }, [chartData, options]); - return ( -
-
- {currency} - {priceList.length > 0 && ( -
- -
- )} -
-
- {price} USD -
-
- ); -} + return ( +
+
+ {currency} + {priceList.length > 0 && ( +
+ +
+ )} +
+
+ {price} USD +
+
+ ); +}; -export default ChainHeader; \ No newline at end of file +export default ChainHeader; diff --git a/packages/insight/src/pages/chain.tsx b/packages/insight/src/pages/chain.tsx index 8821a4aa569..843e970732b 100644 --- a/packages/insight/src/pages/chain.tsx +++ b/packages/insight/src/pages/chain.tsx @@ -1,4 +1,4 @@ -import React, {useEffect, useState} from 'react'; +import React, {useEffect, useRef, useState} from 'react'; import {useDispatch} from 'react-redux'; import {useNavigate, useParams} from 'react-router-dom'; import {fetcher} from 'src/api/api'; @@ -8,8 +8,9 @@ import {getApiRoot, normalizeParams, sleep} from 'src/utilities/helper-methods'; import {BlocksType} from 'src/utilities/models'; import nProgress from 'nprogress'; import Info from 'src/components/info'; -import { BitPay } from 'src/assets/styles/colors'; -import { colorCodes } from 'src/utilities/constants'; +import {BitPay, Slate} from 'src/assets/styles/colors'; +import {colorCodes} from 'src/utilities/constants'; +import {Chart as ChartJS} from 'chart.js'; const getBlocksUrl = (currency: string, network: string) => { return `${getApiRoot(currency)}/${currency}/${network}/block?limit=6`; @@ -23,6 +24,34 @@ export const ChainDetails = () => { const navigate = useNavigate(); const dispatch = useDispatch(); + + const feeRef = useRef(null); + const feeInstanceRef = useRef(null); + + const fees = [0, 1, 7, 3, 2, 1, 5]; + const feeData = { + labels: fees, + datasets: [ + { + data: fees, + borderColor: Slate, + borderWidth: 3, + pointRadius: 0, + } + ] + }; + + const options = { + scales: { + x: {display: false}, + y: {display: true}, + }, + plugins: {legend: {display: false}}, + events: [], // disable default events + responsive: true, + maintainAspectRatio: false, + tension: 0.1, + }; useEffect(() => { if (!currency || !network) return; @@ -45,6 +74,18 @@ export const ChainDetails = () => { .finally(() => { nProgress.done(); }); + + if (feeRef.current) { + if (feeInstanceRef.current) { + feeInstanceRef.current.destroy(); + } + + feeInstanceRef.current = new ChartJS(feeRef.current, { + type: 'line', + data: feeData, + options, + }); + } }, [currency, network]); const gotoBlocks = async () => { @@ -62,7 +103,7 @@ export const ChainDetails = () => { <> {error ? : null} -
+
@@ -70,6 +111,9 @@ export const ChainDetails = () => {
Fee: xxx
+
+ +
View all Blocks
From cf287768f12e87cd5d5d9c1310ed6fca1ace552d Mon Sep 17 00:00:00 2001 From: MicahMaphet Date: Thu, 7 Aug 2025 21:17:06 -0400 Subject: [PATCH 23/23] refactored chain-details page and added block tip fee --- packages/insight/src/Routing.tsx | 4 +- .../src/assets/images/block-group-dark.svg | 6 + .../src/assets/images/block-group-light.svg | 6 + .../insight/src/components/block-sample.tsx | 73 +++++++ .../insight/src/components/chain-header.tsx | 4 +- packages/insight/src/pages/chain.tsx | 194 ++++++------------ 6 files changed, 154 insertions(+), 133 deletions(-) create mode 100644 packages/insight/src/assets/images/block-group-dark.svg create mode 100644 packages/insight/src/assets/images/block-group-light.svg create mode 100644 packages/insight/src/components/block-sample.tsx diff --git a/packages/insight/src/Routing.tsx b/packages/insight/src/Routing.tsx index 00859c9a290..c0b337ac30b 100644 --- a/packages/insight/src/Routing.tsx +++ b/packages/insight/src/Routing.tsx @@ -1,7 +1,7 @@ import React, {lazy, Suspense} from 'react'; import {Navigate, Route, Routes} from 'react-router-dom'; import Home from './pages'; -import {ChainDetails} from './pages/chain'; +import Chain from './pages/chain'; const Blocks = lazy(() => import('./pages/blocks')); const Block = lazy(() => import('./pages/block')); const TransactionHash = lazy(() => import('./pages/transaction')); @@ -13,7 +13,7 @@ function Routing() { } /> - } /> + } /> } /> } /> } /> diff --git a/packages/insight/src/assets/images/block-group-dark.svg b/packages/insight/src/assets/images/block-group-dark.svg new file mode 100644 index 00000000000..f5acc9b52bf --- /dev/null +++ b/packages/insight/src/assets/images/block-group-dark.svg @@ -0,0 +1,6 @@ + + + blocks-group-line + + + \ No newline at end of file diff --git a/packages/insight/src/assets/images/block-group-light.svg b/packages/insight/src/assets/images/block-group-light.svg new file mode 100644 index 00000000000..c1149f7e09f --- /dev/null +++ b/packages/insight/src/assets/images/block-group-light.svg @@ -0,0 +1,6 @@ + + + blocks-group-line + + + \ No newline at end of file diff --git a/packages/insight/src/components/block-sample.tsx b/packages/insight/src/components/block-sample.tsx new file mode 100644 index 00000000000..b2099c9feec --- /dev/null +++ b/packages/insight/src/components/block-sample.tsx @@ -0,0 +1,73 @@ +import nProgress from 'nprogress'; +import React, {FC, useEffect, useState} from 'react'; +import {useNavigate} from 'react-router-dom'; +import {fetcher} from 'src/api/api'; +import Info from 'src/components/info'; +import {getApiRoot} from 'src/utilities/helper-methods'; +import {BlocksType} from 'src/utilities/models'; +import styled from 'styled-components'; + +const BlockChip = styled.div` + border: 4px solid ${({theme: {dark}}) => dark ? '#333' : '#ddd'}; + border-radius: 10px; + padding: 1rem; + width: 12rem; + max-width: 400px; + background-color: transparent; + cursor: pointer; + text-align: center; +`; + +const BlockSample: FC<{currency: string; network: string}> = ({currency, network}) => { + const navigate = useNavigate(); + + const [blocksList, setBlocksList] = useState(); + const [error, setError] = useState(''); + + useEffect(() => { + nProgress.start(); + Promise.all([fetcher(`${getApiRoot(currency)}/${currency}/${network}/block?limit=5`)]) + .then(([data]) => { + setBlocksList(data); + }) + .catch((e: any) => { + setError(e.message || 'Something went wrong. Please try again later.'); + }) + .finally(() => { + nProgress.done(); + }); + }, []); + + const gotoSingleBlockDetailsView = async (hash: string) => { + await navigate(`/${currency}/${network}/block/${hash}`); + }; + + if (error) return ; + if (!blocksList?.length) return null; + return ( +
+ {blocksList.map((block: BlocksType, index: number) => { + const {height, hash, transactionCount, time, size} = block; + const milisecondsWhenMined = Date.now() - new Date(time).getTime(); + const minutesWhenMined = Math.floor(milisecondsWhenMined / 60000); + return ( + + gotoSingleBlockDetailsView(hash)}> + +
{height}
+
{transactionCount} transactions
+
{size} bytes
+
mined {minutesWhenMined} minutes ago
+
+
+ {index !== blocksList.length - 1 && ( +
|
+ )} +
+ ); + })} +
+ ); +}; + +export default BlockSample; diff --git a/packages/insight/src/components/chain-header.tsx b/packages/insight/src/components/chain-header.tsx index f4fb2a9bbf0..f0b05a5ba0f 100644 --- a/packages/insight/src/components/chain-header.tsx +++ b/packages/insight/src/components/chain-header.tsx @@ -60,7 +60,7 @@ const ChainHeader: FC<{currency: string; network: string}> = ({currency, network }, [chartData, options]); return ( -
+
= ({currency, network style={{height: '100px'}} /> {priceList.length > 0 && ( -
+
)} diff --git a/packages/insight/src/pages/chain.tsx b/packages/insight/src/pages/chain.tsx index 843e970732b..c07dbe562a5 100644 --- a/packages/insight/src/pages/chain.tsx +++ b/packages/insight/src/pages/chain.tsx @@ -1,163 +1,99 @@ -import React, {useEffect, useRef, useState} from 'react'; -import {useDispatch} from 'react-redux'; +import BlockSample from 'src/components/block-sample'; +import React, {useEffect, useState} from 'react'; +import ChainHeader from '../components/chain-header'; import {useNavigate, useParams} from 'react-router-dom'; -import {fetcher} from 'src/api/api'; -import ChainHeader from 'src/components/chain-header'; +import {useDispatch} from 'react-redux'; import {changeCurrency, changeNetwork} from 'src/store/app.actions'; -import {getApiRoot, normalizeParams, sleep} from 'src/utilities/helper-methods'; -import {BlocksType} from 'src/utilities/models'; +import {getApiRoot, normalizeParams} from 'src/utilities/helper-methods'; +import styled, { useTheme } from 'styled-components'; +import {colorCodes, size} from 'src/utilities/constants'; +import {fetcher} from 'src/api/api'; +import BlockGroupDarkSvg from '../assets/images/block-group-dark.svg' +import BlockGroupLightSvg from '../assets/images/block-group-light.svg' import nProgress from 'nprogress'; -import Info from 'src/components/info'; -import {BitPay, Slate} from 'src/assets/styles/colors'; -import {colorCodes} from 'src/utilities/constants'; -import {Chart as ChartJS} from 'chart.js'; -const getBlocksUrl = (currency: string, network: string) => { - return `${getApiRoot(currency)}/${currency}/${network}/block?limit=6`; -}; +const HeaderDataContainer = styled.div` + width: 100%; + gap: 1rem; + display: flex; + flex-direction: column; + align-items: center; /* center on mobile by default */ -export const ChainDetails = () => { - const params = useParams<{currency: string; network: string}>(); - const [blocksList, setBlocksList] = useState(); - const [error, setError] = useState(''); - let {currency, network} = params; + @media screen and (min-width: ${size.mobileL}) { + flex-direction: row; + align-items: flex-start; + } +`; - const navigate = useNavigate(); +const BlocksLinkChip = styled.div` + display: flex; + border-radius: 10px; + font: menu; + width: 100%; + gap: 0.5rem; + padding: 0.2rem 0; + margin: 0.25rem 0; + justify-content: center; +` + +const Chain: React.FC = () => { + let {currency, network} = useParams<{currency: string; network: string}>(); const dispatch = useDispatch(); + const navigate = useNavigate(); + const [tipFee, setTipFee] = useState(); + const theme = useTheme(); - const feeRef = useRef(null); - const feeInstanceRef = useRef(null); - - const fees = [0, 1, 7, 3, 2, 1, 5]; - const feeData = { - labels: fees, - datasets: [ - { - data: fees, - borderColor: Slate, - borderWidth: 3, - pointRadius: 0, - } - ] - }; - - const options = { - scales: { - x: {display: false}, - y: {display: true}, - }, - plugins: {legend: {display: false}}, - events: [], // disable default events - responsive: true, - maintainAspectRatio: false, - tension: 0.1, - }; - useEffect(() => { if (!currency || !network) return; nProgress.start(); const _normalizeParams = normalizeParams(currency, network); - currency = _normalizeParams.currency; network = _normalizeParams.network; dispatch(changeCurrency(currency)); dispatch(changeNetwork(network)); - Promise.all([fetcher(getBlocksUrl(currency, network)), sleep(500)]) - .then(([data]) => { - setBlocksList(data); - }) - .catch((e: any) => { - setError(e.message || 'Something went wrong. Please try again later.'); - }) - .finally(() => { + Promise.all([ + fetcher(`${getApiRoot(currency)}/${currency}/${network}/block/tip/fee`) + ]) + .then(([fee]) => { + setTipFee(fee.mean.toFixed(5)); nProgress.done(); }); - - if (feeRef.current) { - if (feeInstanceRef.current) { - feeInstanceRef.current.destroy(); - } - - feeInstanceRef.current = new ChartJS(feeRef.current, { - type: 'line', - data: feeData, - options, - }); - } }, [currency, network]); const gotoBlocks = async () => { - await navigate(`/${currency}/mainnet/blocks`); + await navigate(`/${currency}/${network}/blocks`); }; - const gotoSingleBlockDetailsView = async (hash: string) => { - await navigate(`/${currency}/${network}/block/${hash}`); - }; - if (!currency || !network) - return null; + const BlockGroupIcon: React.FC = () => { + return ( + + ); + } + + if (!currency || !network) return null; return ( <> - {error ? : null} - -
-
-
- -
-
- Fee: xxx -
-
- -
+ +
+ + Tip Fee {tipFee} sats/byte
-
View all Blocks
- { - blocksList?.length ? ( -
- {blocksList.map((block: BlocksType, index: number) => { - const { height, hash, transactionCount, time, size } = block; - const milisecondsWhenMined = Date.now() - new Date(time).getTime(); - const minutesWhenMined = Math.floor(milisecondsWhenMined / 60000); - return ( - -
gotoSingleBlockDetailsView(hash)} - style={{ - border: '4px solid #333', - borderRadius: '10px', - padding: '1rem', - width: '100%', - maxWidth: '400px', - backgroundColor: 'transparent', - cursor: 'pointer', - textAlign: 'center', - boxShadow: '2px 2px 5px rgba(0,0,0,0.1)', - }} - > - -
{height}
-
{transactionCount} transactions
-
{size} bytes
-
mined {minutesWhenMined} minutes ago
-
-
- - {index !== blocksList.length - 1 && ( -
|
- )} -
- ); - })} -
- ): null} + + + View all Blocks + + +
-
+ ); -}; +} + +export default Chain; \ No newline at end of file