Skip to content

Commit

Permalink
Misc:
Browse files Browse the repository at this point in the history
- Updated dependencies, including removing "bitcoin-core" in favor of a self-maintained fork "btc-rpc-client" (forked from bitcoin-core v3.0) which fixes a dependency-based security vulnerability there; the bitcoin-core-v3.0 bump changes the callback structure of the library so changes have been made adding "await" for rpc-client calls
- Fix some parameter-parsing problems with /rpc-browser and /rpc-terminal tools
  • Loading branch information
janoside committed Jun 1, 2021
1 parent c4888d9 commit 1503361
Show file tree
Hide file tree
Showing 9 changed files with 474 additions and 567 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
* Misc UI/UX tweaks
* Update bootstrap: v5.0.0-beta3 -> v5.0.1
* Update chart.js: v2.9.3 -> v3.2.1
* Updated dependencies


##### v3.1.1
Expand Down
2 changes: 1 addition & 1 deletion app.js
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ const simpleGit = require('simple-git');
const utils = require("./app/utils.js");
const moment = require("moment");
const Decimal = require('decimal.js');
const bitcoinCore = require("bitcoin-core");
const bitcoinCore = require("btc-rpc-client");
const pug = require("pug");
const momentDurationFormat = require("moment-duration-format");
const coreApi = require("./app/api/coreApi.js");
Expand Down
2 changes: 1 addition & 1 deletion app/api/coreApi.js
Original file line number Diff line number Diff line change
Expand Up @@ -715,7 +715,7 @@ function getUtxo(txid, outputIndex) {

}).then(function(result) {
// to avoid cache misses, rpcApi.getUtxo returns "0" instead of null
if (result == "0") {
if (typeof result == "string" && result == "0") {
resolve(null);

return;
Expand Down
104 changes: 48 additions & 56 deletions app/api/rpcApi.js
Original file line number Diff line number Diff line change
Expand Up @@ -431,49 +431,45 @@ function getRpcData(cmd, verifyingConnection=false) {
return new Promise(function(resolve, reject) {
debugLog(`RPC: ${cmd}`);

let rpcCall = function(callback) {
let rpcCall = async function(callback) {
var client = (cmd == "gettxoutsetinfo" ? global.rpcClientNoTimeout : global.rpcClient);

client.command(cmd, function(err, result, resHeaders) {
try {
if (err) {
try {
const result = await client.command(cmd);//, function(err, result, resHeaders) {

if (Array.isArray(result) && result.length == 1) {
var result0 = result[0];

if (result0 && result0.name && result0.name == "RpcError") {
logStats(cmd, false, new Date().getTime() - startTime, false);

throw new Error(`RpcError: type=failure-01`);
throw new Error(`RpcError: type=errorResponse-01`);
}
}

if (Array.isArray(result) && result.length == 1) {
var result0 = result[0];

if (result0 && result0.name && result0.name == "RpcError") {
logStats(cmd, false, new Date().getTime() - startTime, false);

throw new Error(`RpcError: type=errorResponse-01`);
}
}
if (result.name && result.name == "RpcError") {
logStats(cmd, false, new Date().getTime() - startTime, false);

if (result.name && result.name == "RpcError") {
logStats(cmd, false, new Date().getTime() - startTime, false);
throw new Error(`RpcError: type=errorResponse-02`);
}

throw new Error(`RpcError: type=errorResponse-02`);
}
resolve(result);

resolve(result);
logStats(cmd, false, new Date().getTime() - startTime, true);

logStats(cmd, false, new Date().getTime() - startTime, true);
callback();

callback();
} catch (err) {
err.userData = {error:err, request:cmd};

} catch (e) {
e.userData = {error:err, request:cmd, result:result};
utils.logError("9u4278t5h7rfhgf", err, {error:err, request:cmd});

utils.logError("9u4278t5h7rfhgf", e, {error:err, request:cmd, result:result});
logStats(cmd, false, new Date().getTime() - startTime, false);

reject(e);
reject(err);

callback();
}
});
callback();
}
};

rpcQueue.push({rpcCall:rpcCall});
Expand All @@ -490,47 +486,43 @@ function getRpcDataWithParams(request, verifyingConnection=false) {
return new Promise(function(resolve, reject) {
debugLog(`RPC: ${JSON.stringify(request)}`);

let rpcCall = function(callback) {
global.rpcClient.command([request], function(err, result, resHeaders) {
try {
if (err != null) {
logStats(request.method, true, new Date().getTime() - startTime, false);
let rpcCall = async function(callback) {
try {
const result = await global.rpcClient.command([request]);//, function(err, result, resHeaders) {

throw new Error(`RpcError: type=failure-02`);
}

if (Array.isArray(result) && result.length == 1) {
var result0 = result[0];
if (Array.isArray(result) && result.length == 1) {
var result0 = result[0];

if (result0 && result0.name && result0.name == "RpcError") {
logStats(request.method, true, new Date().getTime() - startTime, false);
if (result0 && result0.name && result0.name == "RpcError") {
logStats(request.method, true, new Date().getTime() - startTime, false);

throw new Error(`RpcError: type=errorResponse-03`);
}
throw new Error(`RpcError: type=errorResponse-03`);
}
}

if (result.name && result.name == "RpcError") {
logStats(request.method, true, new Date().getTime() - startTime, false);
if (result.name && result.name == "RpcError") {
logStats(request.method, true, new Date().getTime() - startTime, false);

throw new Error(`RpcError: type=errorResponse-04`);
}
throw new Error(`RpcError: type=errorResponse-04`);
}

resolve(result[0]);
resolve(result[0]);

logStats(request.method, true, new Date().getTime() - startTime, true);
logStats(request.method, true, new Date().getTime() - startTime, true);

callback();
callback();

} catch (e) {
e.userData = {error:err, request:request, result:result};
} catch (err) {
err.userData = {error:err, request:request};

utils.logError("283h7ewsede", e, {error:err, request:request, result:result});
utils.logError("283h7ewsede", err, {error:err, request:request});

reject(e);
logStats(request.method, true, new Date().getTime() - startTime, false);

callback();
}
});
reject(err);

callback();
}
};

rpcQueue.push({rpcCall:rpcCall});
Expand Down
7 changes: 6 additions & 1 deletion app/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -961,6 +961,10 @@ function objectProperties(obj) {
return props;
}

function objHasProperty(obj, name) {
return Object.prototype.hasOwnProperty.call(obj, name);
}

function iterateProperties(obj, action) {
for (const [key, value] of Object.entries(obj)) {
action([key, value]);
Expand Down Expand Up @@ -1012,5 +1016,6 @@ module.exports = {
timePromise: timePromise,
startTimeNanos: startTimeNanos,
dtMillis: dtMillis,
objectProperties: objectProperties
objectProperties: objectProperties,
objHasProperty: objHasProperty
};
Loading

0 comments on commit 1503361

Please sign in to comment.