From f9adb821f0799474d97c35a5de465457d9f13082 Mon Sep 17 00:00:00 2001 From: Sergiy Lavrynenko Date: Mon, 26 Sep 2022 18:02:32 +0100 Subject: [PATCH 001/257] JS-only IMA agent, early alpha version --- agent/cli.js | 24 ++++++++++- agent/main.js | 74 +++++++++++++++++++++++++++++++++ agent/utils.js | 31 +++++++++++++- npms/skale-observer/observer.js | 7 +++- npms/skale-owasp/owasp-util.js | 4 +- test/agent-test.js | 7 ++++ 6 files changed, 140 insertions(+), 7 deletions(-) diff --git a/agent/cli.js b/agent/cli.js index 91aab5b44..2f38fd9d4 100644 --- a/agent/cli.js +++ b/agent/cli.js @@ -387,7 +387,7 @@ function parse( joExternalHandlers, argv ) { console.log( soi + cc.debug( "--" ) + cc.bright( "bls-verify" ) + cc.sunny( "=" ) + cc.note( "path" ) + cc.debug( "..............." ) + cc.debug( "Optional parameter, specifies path to " ) + cc.note( "verify_bls" ) + cc.debug( " application." ) ); // console.log( cc.sunny( "MONITORING" ) + cc.info( " options:" ) ); - console.log( soi + cc.debug( "--" ) + cc.bright( "monitoring-port" ) + cc.sunny( "=" ) + cc.note( "number" ) + cc.debug( "........" ) + cc.notice( "Run " ) + cc.note( "monitoring web socket RPC server" ) + cc.notice( " on specified port. " ) + cc.debug( "By default monitoring server is " ) + cc.error( "disabled" ) + cc.notice( "." ) ); + console.log( soi + cc.debug( "--" ) + cc.bright( "monitoring-port" ) + cc.sunny( "=" ) + cc.note( "number" ) + cc.debug( "........" ) + cc.notice( "Run " ) + cc.note( "monitoring web socket RPC server" ) + cc.notice( " on specified port. " ) + cc.debug( "Specify " ) + cc.sunny( "0" ) + cc.debug( " to " ) + cc.error( "disable" ) + cc.notice( "." ) + cc.debug( " By default monitoring server is " ) + cc.error( "disabled" ) + cc.notice( "." ) ); // console.log( cc.sunny( "GAS REIMBURSEMENT" ) + cc.info( " options:" ) ); console.log( soi + cc.debug( "--" ) + cc.bright( "reimbursement-chain" ) + cc.sunny( "=" ) + cc.note( "name" ) + cc.debug( "......" ) + cc.notice( "Specifies chain name." ) ); @@ -406,6 +406,11 @@ function parse( joExternalHandlers, argv ) { console.log( soi + cc.debug( "--" ) + cc.bright( "enable-oracle" ) + cc.debug( "................." ) + cc.success( "Enable" ) + cc.notice( " call to " ) + cc.note( "Oracle" ) + cc.notice( " to compute " ) + cc.note( "gas price" ) + cc.notice( " for " ) + cc.attention( "gas reimbursement" ) + cc.notice( ". " ) + cc.debug( "Default mode" ) + cc.notice( "." ) ); console.log( soi + cc.debug( "--" ) + cc.bright( "disable-oracle" ) + cc.debug( "................" ) + cc.error( "Disable" ) + cc.notice( " call to " ) + cc.note( "Oracle" ) + cc.notice( " to compute " ) + cc.note( "gas price" ) + cc.notice( " for " ) + cc.attention( "gas reimbursement" ) + cc.notice( "." ) ); // + console.log( cc.sunny( "IMA JSON RPC SERVER" ) + cc.info( " options:" ) ); + console.log( soi + cc.debug( "--" ) + cc.bright( "json-rpc-port" ) + cc.sunny( "=" ) + cc.note( "number" ) + cc.debug( ".........." ) + cc.notice( "Run " ) + cc.note( "IMA JSON RPC server" ) + cc.notice( " on specified " ) + cc.note( "port" ) + cc.notice( "." ) + cc.debug( " Specify " ) + cc.sunny( "0" ) + cc.debug( " to " ) + cc.error( "disable" ) + cc.notice( "." ) + cc.debug( " Defaut is " ) + cc.sunny( "14999" ) + cc.notice( "." ) ); + console.log( soi + cc.debug( "--" ) + cc.bright( "cross-ima" ) + cc.debug( "....................." ) + cc.success( "Enable" ) + cc.notice( " calls to " ) + cc.note( "IMA JSON RPC servers" ) + cc.notice( " to compute " ) + cc.note( "BLS signature parts" ) + cc.notice( " and operation state inside time frames. " ) + cc.debug( "Default mode" ) + cc.notice( "." ) ); + console.log( soi + cc.debug( "--" ) + cc.bright( "no-cross-ima" ) + cc.debug( ".................." ) + cc.error( "Disable" ) + cc.notice( " calls to " ) + cc.note( "IMA JSON RPC servers" ) + cc.notice( " to compute " ) + cc.note( "BLS signature parts" ) + cc.notice( " and operation state inside time frames. " ) + cc.debug( "Use calls to " ) + cc.attention( "skaled" ) + cc.debug( " instead" ) + cc.notice( "." ) ); + // console.log( cc.sunny( "TEST" ) + cc.info( " options:" ) ); console.log( soi + cc.debug( "--" ) + cc.bright( "browse-s-chain" ) + cc.debug( "................" ) + cc.notice( "Download own " ) + cc.note( "S-Chain" ) + cc.notice( " network information." ) ); console.log( soi + cc.debug( "--" ) + cc.bright( "browse-skale-network" ) + cc.debug( ".........." ) + cc.notice( "Download entire " ) + cc.note( "SKALE network" ) + cc.notice( " description." ) ); @@ -1128,7 +1133,7 @@ function parse( joExternalHandlers, argv ) { continue; } if( joArg.name == "monitoring-port" ) { - owaspUtils.verifyArgumentIsIntegerIpPortNumber( joArg ); + owaspUtils.verifyArgumentIsIntegerIpPortNumber( joArg, true ); imaState.nMonitoringPort = owaspUtils.toInteger( joArg.value ); continue; } @@ -1186,6 +1191,19 @@ function parse( joExternalHandlers, argv ) { IMA.setEnabledOracle( false ); continue; } + if( joArg.name == "json-rpc-port" ) { + owaspUtils.verifyArgumentIsIntegerIpPortNumber( joArg, true ); + imaState.nJsonRpcPort = owaspUtils.toInteger( joArg.value ); + continue; + } + if( joArg.name == "cross-ima" ) { + imaState.isCrossImaBlsMode = true; + continue; + } + if( joArg.name == "no-cross-ima" ) { + imaState.isCrossImaBlsMode = false; + continue; + } if( joArg.name == "s2s-forward" ) { IMA.setForwardS2S(); continue; @@ -2248,6 +2266,8 @@ function ima_common_init() { log.write( cc.info( "SKALE network re-discovery interval is" ) + cc.debug( "..............." ) + ( imaState.s2s_opts.secondsToReDiscoverSkaleNetwork ? cc.info( imaState.s2s_opts.secondsToReDiscoverSkaleNetwork.toString() ) : cc.error( "disabled" ) ) + "\n" ); log.write( cc.info( "S<->S transfer mode is" ) + cc.debug( "..............................." ) + IMA.get_S2S_transfer_mode_description_colorized() + "\n" ); } // if( isPrintGathered ) + log.write( cc.info( "IMA JSON RPC server port is" ) + cc.debug( "...,,,,,,,,,,,............" ) + ( ( imaState.nJsonRpcPort > 0 ) ? cc.info( imaState.nJsonRpcPort ) : cc.error( "disabled" ) ) + "\n" ); + log.write( cc.info( "Cross-IMA mode is" ) + cc.debug( "...................................." ) + ( imaState.isCrossImaBlsMode ? cc.success( "enabled" ) : cc.error( "disabled" ) ) + "\n" ); } // // diff --git a/agent/main.js b/agent/main.js index 3c89d7563..3dcbcc324 100644 --- a/agent/main.js +++ b/agent/main.js @@ -281,6 +281,9 @@ global.imaState = { "secondsToReDiscoverSkaleNetwork": 1 * 60 * 60 // seconts to re-discover SKALE network, 0 to disable }, + "nJsonRpcPort": 14999, // 0 to disable + "isCrossImaBlsMode": true, + "arrActions": [] // array of actions to run }; @@ -2217,6 +2220,77 @@ if( imaState.nMonitoringPort > 0 ) { ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +let g_ws_server_ima = null; + +if( imaState.nJsonRpcPort > 0 ) { + const strLogPrefix = cc.attention( "JSON RPC" ) + " " + cc.sunny( ">>" ) + " "; + if( IMA.verbose_get() >= IMA.RV_VERBOSE.trace ) + log.write( strLogPrefix + cc.normal( "Will start JSON RPC WS server on port " ) + cc.info( imaState.nJsonRpcPort ) + "\n" ); + g_ws_server_ima = new ws.Server( { port: 0 + imaState.nJsonRpcPort } ); + g_ws_server_ima.on( "connection", function( ws_peer, req ) { + const ip = req.socket.remoteAddress; + if( IMA.verbose_get() >= IMA.RV_VERBOSE.trace ) + log.write( strLogPrefix + cc.normal( "New connection from " ) + cc.info( ip ) + "\n" ); + ws_peer.on( "message", function( message ) { + const joAnswer = { + method: null, + id: null, + error: null + }; + try { + const joMessage = JSON.parse( message ); + if( IMA.verbose_get() >= IMA.RV_VERBOSE.trace ) + log.write( strLogPrefix + cc.normal( "Message from " ) + cc.info( ip ) + cc.normal( ": " ) + cc.j( joMessage ) + "\n" ); + if( ! ( "method" in joMessage ) ) + throw new Error( "\"method\" field was not specified" ); + joAnswer.method = joMessage.method; + if( ! ( "id" in joMessage ) ) + throw new Error( "\"id\" field was not specified" ); + joAnswer.id = joMessage.id; + switch ( joMessage.method ) { + case "echo": + case "ping": + // call: { "id": 1, "method": "echo" } + // answer: { "id": 1, "method": "echo", "error": null } + // call: { "id": 1, "method": "ping" } + // answer: { "id": 1, "method": "ping", "error": null } + break; + case "get_schain_network_info": + // call: { "id": 1, "method": "get_schain_network_info" } + // answer: { "id": 1, "method": "get_schain_network_info", "error": null, "schain_network_info": ... } + joAnswer.schain_network_info = imaState.joSChainNetworkInfo; + break; + default: + throw new Error( "Unknown method name \"" + joMessage.method + "\" was specified" ); + } // switch( joMessage.method ) + } catch ( err ) { + if( IMA.verbose_get() >= IMA.RV_VERBOSE.error ) { + log.write( strLogPrefix + + cc.error( "Bad message from " ) + cc.info( ip ) + cc.error( ": " ) + cc.warning( message ) + + cc.error( ", error is: " ) + cc.warning( err ) + "\n" + ); + } + } + try { + if( IMA.verbose_get() >= IMA.RV_VERBOSE.trace ) + log.write( strLogPrefix + cc.normal( "Answer to " ) + cc.info( ip ) + cc.normal( ": " ) + cc.j( joAnswer ) + "\n" ); + ws_peer.send( JSON.stringify( joAnswer ) ); + } catch ( err ) { + if( IMA.verbose_get() >= IMA.RV_VERBOSE.error ) { + log.write( strLogPrefix + + cc.error( "Failed to sent answer to " ) + cc.info( ip ) + + cc.error( ", error is: " ) + cc.warning( err ) + "\n" + ); + } + } + } ); + // ws_peer.send( "something" ); + } ); +} // if( imaState.nJsonRpcPort > 0 ) + +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + async function do_the_job() { const strLogPrefix = cc.info( "Job 1:" ) + " "; let idxAction = 0; diff --git a/agent/utils.js b/agent/utils.js index e9e7201e5..4c34b11a3 100644 --- a/agent/utils.js +++ b/agent/utils.js @@ -397,6 +397,34 @@ function compose_schain_node_url( joNode ) { return ""; } +function compose_ima_agent_node_url( joNode ) { + let nPort = -1; + if( "imaAgentRpcPort" in joNode && typeof joNode.imaAgentRpcPort === "number" && joNode.imaAgentRpcPort > 0 ) + nPort = joNode.imaAgentRpcPort; + // PROPOSAL = 0 + // CATCHUP = 1 + // WS_JSON = 2 + // HTTP_JSON = 3 + // BINARY_CONSENSUS = 4 + // ZMQ_BROADCAST = 5 + // IMA_MONITORING = 6 + // WSS_JSON = 7 + // HTTPS_JSON = 8 + // INFO_HTTP_JSON = 9 + // IMA_AGENT_JSON = 10 + if( nPort < 0 && "httpRpcPort" in joNode && typeof joNode.httpRpcPort === "number" && joNode.httpRpcPort > 0 ) + nPort = joNode.httpRpcPort - 3 + 10; + if( nPort < 0 && "wsRpcPort" in joNode && typeof joNode.wsRpcPort === "number" && joNode.wsRpcPort > 0 ) + nPort = joNode.wsRpcPort - 2 + 10; + if( nPort < 0 && "httpsRpcPort" in joNode && typeof joNode.httpsRpcPort === "number" && joNode.httpsRpcPort > 0 ) + nPort = joNode.httpsRpcPort - 8 + 10; + if( nPort < 0 && "wssRpcPort" in joNode && typeof joNode.wssRpcPort === "number" && joNode.wssRpcPort > 0 ) + nPort = joNode.wssRpcPort - 7 + 10; + if( nPort > 0 ) + return "ws://" + joNode.ip + ":" + joNode.imaAgentRpcPort; + return ""; +} + //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// @@ -433,5 +461,6 @@ module.exports = { check_key_exist_in_abi: check_key_exist_in_abi, check_keys_exist_in_abi: check_keys_exist_in_abi, // - compose_schain_node_url: compose_schain_node_url + compose_schain_node_url: compose_schain_node_url, + compose_ima_agent_node_url: compose_ima_agent_node_url }; // module.exports diff --git a/npms/skale-observer/observer.js b/npms/skale-observer/observer.js index 21b702d86..62fb0faf0 100644 --- a/npms/skale-observer/observer.js +++ b/npms/skale-observer/observer.js @@ -101,6 +101,7 @@ function compose_endpoints( jo_schain, node_dict, endpoint_type ) { node_dict["ws_endpoint_" + endpoint_type] = "ws://" + node_dict[endpoint_type] + ":" + jo_schain.data.computed.ports.wsRpcPort; node_dict["wss_endpoint_" + endpoint_type] = "wss://" + node_dict[endpoint_type] + ":" + jo_schain.data.computed.ports.wssRpcPort; node_dict["info_http_endpoint_" + endpoint_type] = "http://" + node_dict[endpoint_type] + ":" + jo_schain.data.computed.ports.infoHttpRpcPort; + node_dict["ima_agent_endpoint_" + endpoint_type] = "http://" + node_dict[endpoint_type] + ":" + jo_schain.data.computed.ports.imaAgentRpcPort; } const SkaledPorts = { @@ -113,7 +114,8 @@ const SkaledPorts = { IMA_MONITORING: 6, WSS_JSON: 7, HTTPS_JSON: 8, - INFO_HTTP_JSON: 9 + INFO_HTTP_JSON: 9, + IMA_AGENT_JSON: 10 }; function calc_ports( jo_schain, schain_base_port ) { @@ -123,7 +125,8 @@ function calc_ports( jo_schain, schain_base_port ) { httpsRpcPort: schain_base_port + SkaledPorts.HTTPS_JSON, wsRpcPort: schain_base_port + SkaledPorts.WS_JSON, wssRpcPort: schain_base_port + SkaledPorts.WSS_JSON, - infoHttpRpcPort: schain_base_port + SkaledPorts.INFO_HTTP_JSON + infoHttpRpcPort: schain_base_port + SkaledPorts.INFO_HTTP_JSON, + imaAgentRpcPort: schain_base_port + SkaledPorts.IMA_AGENT_JSON }; } diff --git a/npms/skale-owasp/owasp-util.js b/npms/skale-owasp/owasp-util.js index c7e51d941..6e2e7cd92 100644 --- a/npms/skale-owasp/owasp-util.js +++ b/npms/skale-owasp/owasp-util.js @@ -285,12 +285,12 @@ function verifyArgumentIsInteger( joArg ) { } } -function verifyArgumentIsIntegerIpPortNumber( joArg ) { +function verifyArgumentIsIntegerIpPortNumber( joArg, isEnableZero ) { try { verifyArgumentIsInteger( joArg ); if( joArg.value < 0 ) throw new Error( "Port number " + joArg.value + " cannot be negative" ); - if( joArg.value < 1 ) + if( ( !isEnableZero ) && joArg.value < 1 ) throw new Error( "Port number " + joArg.value + " too small" ); if( joArg.value > 65535 ) throw new Error( "Port number " + joArg.value + " too big" ); diff --git a/test/agent-test.js b/test/agent-test.js index 2ff55e927..810635e92 100644 --- a/test/agent-test.js +++ b/test/agent-test.js @@ -226,6 +226,9 @@ global.imaState = { "secondsToReDiscoverSkaleNetwork": 10 * 60 // seconts to re-discover SKALE network, 0 to disable }, + "nJsonRpcPort": 14999, // 0 to disable + "isCrossImaBlsMode": true, + "arrActions": [] // array of actions to run }; @@ -748,6 +751,10 @@ describe( "Agent Utils Module", function() { assert.equal( imaUtils.compose_schain_node_url( { ip6: "::1", wssRpcPort6: 3456 } ), "wss://[::1]:3456" ); } ); + it( "Compose IMA Agent URL", function() { + assert.equal( imaUtils.compose_ima_agent_node_url( { ip: "127.0.0.1", httpRpcPort: 14999 } ), "http://127.0.0.1:14999" ); + } ); + } ); describe( "Byte array manipulation helpers", function() { From da465524f4fc4f196e4e5d108e68f3951eb9c615 Mon Sep 17 00:00:00 2001 From: Sergiy Lavrynenko Date: Tue, 27 Sep 2022 19:52:27 +0100 Subject: [PATCH 002/257] transient commit, working on JS only IMA agent --- agent/bls.js | 98 +++++++++++++++++++++++++++++++++++++++++++++----- agent/cli.js | 6 ++-- agent/main.js | 22 +++++++----- agent/utils.js | 2 +- 4 files changed, 107 insertions(+), 21 deletions(-) diff --git a/agent/bls.js b/agent/bls.js index 187138a33..497775ba5 100644 --- a/agent/bls.js +++ b/agent/bls.js @@ -30,6 +30,7 @@ const child_process = require( "child_process" ); const shell = require( "shelljs" ); const { Keccak } = require( "sha3" ); +const { cc } = require( "./utils" ); function init() { owaspUtils.owaspAddUsageRef(); @@ -811,7 +812,10 @@ async function do_sign_messages_impl( fn ) { let bHaveResultReportCalled = false; - const strLogPrefix = cc.bright( strDirection ) + " " + cc.info( "Sign msgs:" ) + " "; + const strLogPrefix = + cc.bright( strDirection ) + " " + cc.info( "Sign msgs via " ) + + cc.attention( imaState.isCrossImaBlsMode ? "IMA agent" : "skaled" ) + + cc.info( ":" ) + " "; const joGatheringTracker = { nCountReceived: 0, // including errors nCountErrors: 0, @@ -913,7 +917,9 @@ async function do_sign_messages_impl( break; } const joNode = jarrNodes[i]; - const strNodeURL = imaUtils.compose_schain_node_url( joNode ); + const strNodeURL = imaState.isCrossImaBlsMode + ? imaUtils.compose_ima_agent_node_url( joNode ) + : imaUtils.compose_schain_node_url( joNode ); const strNodeDescColorized = cc.u( strNodeURL ) + " " + cc.normal( "(" ) + cc.bright( i ) + cc.normal( "/" ) + cc.bright( jarrNodes.length ) + cc.normal( ", ID " ) + cc.info( joNode.nodeID ) + cc.normal( ")" ) + cc.normal( ", " ) + cc.notice( "sequence ID" ) + cc.normal( " is " ) + cc.attention( sequence_id ); @@ -925,7 +931,7 @@ async function do_sign_messages_impl( const strErrorMessage = strLogPrefix + cc.fatal( "CRITICAL ERROR:" ) + cc.error( " JSON RPC call to S-Chain node " ) + strNodeDescColorized + - cc.error( " failed, RPC call was not created, error: " ) + cc.warning( err ) + + cc.error( " failed, RPC call was not created, error is: " ) + cc.warning( err.toString() ) + cc.error( ", " ) + cc.notice( "sequence ID" ) + cc.error( " is " ) + cc.attention( sequence_id ) + "\n"; log.write( strErrorMessage ); @@ -986,7 +992,7 @@ async function do_sign_messages_impl( const strErrorMessage = strLogPrefix + cc.fatal( "CRITICAL ERROR:" ) + cc.error( " JSON RPC call to S-Chain node " ) + strNodeDescColorized + - cc.error( " failed, RPC call reported error: " ) + cc.warning( err ) + + cc.error( " failed, RPC call reported error: " ) + cc.warning( err.toString() ) + cc.error( ", " ) + cc.notice( "sequence ID" ) + cc.error( " is " ) + cc.attention( sequence_id ) + "\n"; log.write( strErrorMessage ); @@ -1229,7 +1235,7 @@ async function do_sign_messages_impl( bHaveResultReportCalled = true; await fn( "Failed to gather BLS signatures in " + jarrNodes.length + " node(s), trakcer data is: " + - JSON.stringify( joGatheringTracker ) + ", error: " + errGathering.toString(), + JSON.stringify( joGatheringTracker ) + ", error is: " + errGathering.toString(), jarrMessages, null ).catch( ( err ) => { @@ -1255,7 +1261,7 @@ async function do_sign_messages_impl( const strErrorMessage = cc.error( "Problem(6) in BLS sign result handler, not enough successful BLS signature parts(" ) + cc.info( cntSuccess ) + cc.error( ") and timeout reached, error details: " ) + - cc.warning( err ) + "\n"; + cc.warning( err.toString() ) + "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); details.exposeDetailsTo( log, strGatheredDetailsName, false ); @@ -1397,7 +1403,7 @@ async function do_sign_u256( u256, details, fn ) { const strErrorMessage = strLogPrefix + cc.fatal( "CRITICAL ERROR:" ) + cc.error( " JSON RPC call to S-Chain node " ) + strNodeDescColorized + - cc.error( " failed, RPC call was not created, error: " ) + cc.warning( err ) + "\n"; + cc.error( " failed, RPC call was not created, error is: " ) + cc.warning( err.toString() ) + "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); return; @@ -1418,7 +1424,7 @@ async function do_sign_u256( u256, details, fn ) { const strErrorMessage = strLogPrefix + cc.fatal( "CRITICAL ERROR:" ) + cc.error( " JSON RPC call to S-Chain node " ) + strNodeDescColorized + - cc.error( " failed, RPC call reported error: " ) + cc.warning( err ) + "\n"; + cc.error( " failed, RPC call reported error: " ) + cc.warning( err.toString() ) + "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); return; @@ -1627,10 +1633,84 @@ async function do_sign_u256( u256, details, fn ) { details.write( strLogPrefix + cc.debug( "Completed signing u256 procedure " ) + "\n" ); } +async function handle_skale_call_via_redirect( joCallData ) { + const sequence_id = owaspUtils.remove_starting_0x( get_w3().utils.soliditySha3( log.generate_timestamp_string( null, false ) ) ); + const strLogPrefix = ""; + const strNodeURL = imaState.strURL_s_chain; + const rpcCallOpts = null; + let joRetVal = { }; + const details = log.createMemoryStream( true ); + let isSuccess = false; + try { + await rpcCall.create( strNodeURL, rpcCallOpts, async function( joCall, err ) { + if( err ) { + const strErrorMessage = + strLogPrefix + cc.fatal( "CRITICAL ERROR:" ) + + cc.error( " JSON RPC call to S-Chain failed, RPC call was not created, error is: " ) + cc.warning( err.toString() ) + "\n"; + log.write( strErrorMessage ); + details.write( strErrorMessage ); + throw new Error( "JSON RPC call to S-Chain failed, RPC call was not created, error is: " + err.toString() ); + } + details.write( strLogPrefix + cc.debug( "Will invoke " ) + cc.info( "S-Chain" ) + cc.debug( " with call data " ) + cc.j( joCallData ) + "\n" ); + await joCall.call( joCallData, async function( joIn, joOut, err ) { + if( err ) { + const strErrorMessage = + strLogPrefix + cc.fatal( "CRITICAL ERROR:" ) + + cc.error( " JSON RPC call to S-Chain failed, RPC call reported error: " ) + cc.warning( err.toString() ) + "\n"; + log.write( strErrorMessage ); + details.write( strErrorMessage ); + throw new Error( "JSON RPC call to S-Chain failed, RPC call reported error: " + err.toString() ); + } + details.write( strLogPrefix + cc.debug( "Call to " ) + cc.info( "S-Chain" ) + cc.debug( " done, answer is: " ) + cc.j( joOut ) + "\n" ); + if( joOut.result == null || joOut.result == undefined || ( !typeof joOut.result == "object" ) ) { + let strThrowMessage = ""; + if( "error" in joOut && "message" in joOut.error ) { + const strErrorMessage = + strLogPrefix + cc.fatal( "Wallet CRITICAL ERROR:" ) + " " + + cc.error( "S-Chain reported wallet error: " ) + cc.warning( joOut.error.message ) + + cc.error( ", " ) + cc.notice( "sequence ID" ) + cc.error( " is " ) + cc.attention( sequence_id ) + + "\n"; + log.write( strErrorMessage ); + details.write( strErrorMessage ); + strThrowMessage = "S-Chain reported wallet error: " + joOut.error.message + ", sequence ID is " + sequence_id; + } else { + const strErrorMessage = + strLogPrefix + cc.fatal( "Wallet CRITICAL ERROR:" ) + " " + + cc.error( "JSON RPC call to S-Chain failed with " ) + cc.warning( "unknown wallet error" ) + + cc.error( ", " ) + cc.notice( "sequence ID" ) + cc.error( " is " ) + cc.attention( sequence_id ) + + "\n"; + log.write( strErrorMessage ); + details.write( strErrorMessage ); + strThrowMessage = "JSON RPC call to S-Chain failed with \"unknown wallet error\", sequence ID is " + sequence_id; + } + throw new Error( strThrowMessage ); + } + isSuccess = true; + joRetVal = joOut; // joOut.result + } ); // joCall.call ... + } ); // rpcCall.create ... + } catch ( err ) { + isSuccess = false; + const strError = err.toString(); + joRetVal.error = strError; + const strErrorMessage = + strLogPrefix + cc.fatal( "CRITICAL ERROR:" ) + " " + + cc.error( "JSON RPC call finished with error: " ) + cc.warning( strError ) + + "\n"; + log.write( strErrorMessage ); + details.write( strErrorMessage ); + } + details.exposeDetailsTo( log, "handle_skale_call_via_redirect()", isSuccess ); + details.close(); + return joRetVal; +} + module.exports = { init: init, do_sign_messages_m2s: do_sign_messages_m2s, do_sign_messages_s2m: do_sign_messages_s2m, do_sign_messages_s2s: do_sign_messages_s2s, - do_sign_u256: do_sign_u256 + do_sign_u256: do_sign_u256, + handle_skale_imaVerifyAndSign: handle_skale_call_via_redirect, + handle_skale_imaBSU256: handle_skale_call_via_redirect }; // module.exports diff --git a/agent/cli.js b/agent/cli.js index 9b2776da3..2fa41a80b 100644 --- a/agent/cli.js +++ b/agent/cli.js @@ -407,9 +407,9 @@ function parse( joExternalHandlers, argv ) { console.log( soi + cc.debug( "--" ) + cc.bright( "disable-oracle" ) + cc.debug( "................" ) + cc.error( "Disable" ) + cc.notice( " call to " ) + cc.note( "Oracle" ) + cc.notice( " to compute " ) + cc.note( "gas price" ) + cc.notice( " for " ) + cc.attention( "gas reimbursement" ) + cc.notice( "." ) ); // console.log( cc.sunny( "IMA JSON RPC SERVER" ) + cc.info( " options:" ) ); - console.log( soi + cc.debug( "--" ) + cc.bright( "json-rpc-port" ) + cc.sunny( "=" ) + cc.note( "number" ) + cc.debug( ".........." ) + cc.notice( "Run " ) + cc.note( "IMA JSON RPC server" ) + cc.notice( " on specified " ) + cc.note( "port" ) + cc.notice( "." ) + cc.debug( " Specify " ) + cc.sunny( "0" ) + cc.debug( " to " ) + cc.error( "disable" ) + cc.notice( "." ) + cc.debug( " Defaut is " ) + cc.sunny( "14999" ) + cc.notice( "." ) ); - console.log( soi + cc.debug( "--" ) + cc.bright( "cross-ima" ) + cc.debug( "....................." ) + cc.success( "Enable" ) + cc.notice( " calls to " ) + cc.note( "IMA JSON RPC servers" ) + cc.notice( " to compute " ) + cc.note( "BLS signature parts" ) + cc.notice( " and operation state inside time frames. " ) + cc.debug( "Default mode" ) + cc.notice( "." ) ); - console.log( soi + cc.debug( "--" ) + cc.bright( "no-cross-ima" ) + cc.debug( ".................." ) + cc.error( "Disable" ) + cc.notice( " calls to " ) + cc.note( "IMA JSON RPC servers" ) + cc.notice( " to compute " ) + cc.note( "BLS signature parts" ) + cc.notice( " and operation state inside time frames. " ) + cc.debug( "Use calls to " ) + cc.attention( "skaled" ) + cc.debug( " instead" ) + cc.notice( "." ) ); + console.log( soi + cc.debug( "--" ) + cc.bright( "json-rpc-port" ) + cc.sunny( "=" ) + cc.note( "number" ) + cc.debug( ".........." ) + cc.notice( "Run " ) + cc.note( "IMA JSON RPC server" ) + cc.notice( " on specified " ) + cc.note( "port" ) + cc.notice( "." ) + cc.debug( " Specify " ) + cc.sunny( "0" ) + cc.debug( " to " ) + cc.error( "disable" ) + cc.notice( "." ) + cc.debug( " Defaut is " ) + cc.sunny( "0" ) + cc.notice( "." ) ); + console.log( soi + cc.debug( "--" ) + cc.bright( "cross-ima" ) + cc.debug( "....................." ) + cc.success( "Enable" ) + cc.notice( " calls to " ) + cc.note( "IMA JSON RPC servers" ) + cc.notice( " to compute " ) + cc.note( "BLS signature parts" ) + cc.notice( " and operation state inside time frames." ) + cc.debug( "Use calls to " ) + cc.attention( "IMA Agent" ) + cc.notice( "." ) ); + console.log( soi + cc.debug( "--" ) + cc.bright( "no-cross-ima" ) + cc.debug( ".................." ) + cc.error( "Disable" ) + cc.notice( " calls to " ) + cc.note( "IMA JSON RPC servers" ) + cc.notice( " to compute " ) + cc.note( "BLS signature parts" ) + cc.notice( " and operation state inside time frames. " ) + cc.debug( "Use calls to " ) + cc.attention( "skaled" ) + cc.notice( "." ) + cc.debug( " Default mode" ) + cc.notice( "." ) ); // console.log( cc.sunny( "TEST" ) + cc.info( " options:" ) ); console.log( soi + cc.debug( "--" ) + cc.bright( "browse-s-chain" ) + cc.debug( "................" ) + cc.notice( "Download own " ) + cc.note( "S-Chain" ) + cc.notice( " network information." ) ); diff --git a/agent/main.js b/agent/main.js index 9ece66fd7..4941f1183 100644 --- a/agent/main.js +++ b/agent/main.js @@ -281,8 +281,8 @@ global.imaState = { "secondsToReDiscoverSkaleNetwork": 1 * 60 * 60 // seconts to re-discover SKALE network, 0 to disable }, - "nJsonRpcPort": 14999, // 0 to disable - "isCrossImaBlsMode": true, + "nJsonRpcPort": 0, // 0 to disable + "isCrossImaBlsMode": false, "arrActions": [] // array of actions to run }; @@ -2231,8 +2231,8 @@ if( imaState.nJsonRpcPort > 0 ) { const ip = req.socket.remoteAddress; if( IMA.verbose_get() >= IMA.RV_VERBOSE.trace ) log.write( strLogPrefix + cc.normal( "New connection from " ) + cc.info( ip ) + "\n" ); - ws_peer.on( "message", function( message ) { - const joAnswer = { + ws_peer.on( "message", async function( message ) { + let joAnswer = { method: null, id: null, error: null @@ -2255,10 +2255,16 @@ if( imaState.nJsonRpcPort > 0 ) { // call: { "id": 1, "method": "ping" } // answer: { "id": 1, "method": "ping", "error": null } break; - case "get_schain_network_info": - // call: { "id": 1, "method": "get_schain_network_info" } - // answer: { "id": 1, "method": "get_schain_network_info", "error": null, "schain_network_info": ... } - joAnswer.schain_network_info = imaState.joSChainNetworkInfo; + // case "get_schain_network_info": + // // call: { "id": 1, "method": "get_schain_network_info" } + // // answer: { "id": 1, "method": "get_schain_network_info", "error": null, "schain_network_info": ... } + // joAnswer.schain_network_info = imaState.joSChainNetworkInfo; + // break; + case "skale_imaVerifyAndSign": + joAnswer = await imaBLS.handle_skale_imaVerifyAndSign( joMessage ); + break; + case "skale_imaBSU256": + joAnswer = await imaBLS.handle_skale_imaBSU256( joMessage ); break; default: throw new Error( "Unknown method name \"" + joMessage.method + "\" was specified" ); diff --git a/agent/utils.js b/agent/utils.js index 4c34b11a3..aba3ab8dd 100644 --- a/agent/utils.js +++ b/agent/utils.js @@ -421,7 +421,7 @@ function compose_ima_agent_node_url( joNode ) { if( nPort < 0 && "wssRpcPort" in joNode && typeof joNode.wssRpcPort === "number" && joNode.wssRpcPort > 0 ) nPort = joNode.wssRpcPort - 7 + 10; if( nPort > 0 ) - return "ws://" + joNode.ip + ":" + joNode.imaAgentRpcPort; + return "ws://" + joNode.ip + ":" + nPort; return ""; } From 8c8e25fac06be3db8cc428b47d7f03a729bd49f0 Mon Sep 17 00:00:00 2001 From: Sergiy Lavrynenko Date: Wed, 28 Sep 2022 19:38:34 +0100 Subject: [PATCH 003/257] transient commit, working on JS only IMA agent --- agent/bls.js | 159 ++++++++++++++++++++++++++++++++++++++++++++++---- agent/main.js | 12 ++-- 2 files changed, 154 insertions(+), 17 deletions(-) diff --git a/agent/bls.js b/agent/bls.js index 497775ba5..d3dc9aad4 100644 --- a/agent/bls.js +++ b/agent/bls.js @@ -1010,7 +1010,7 @@ async function do_sign_messages_impl( "\n" ); if( joOut.result == null || joOut.result == undefined || ( !typeof joOut.result == "object" ) ) { ++joGatheringTracker.nCountErrors; - if( "error" in joOut && "message" in joOut.error ) { + if( ( "error" in joOut ) && ( typeof joOut.error == "object" ) && ( "message" in joOut.error ) ) { const strErrorMessage = strLogPrefix + cc.fatal( "Wallet CRITICAL ERROR:" ) + " " + cc.error( "S-Chain node " ) + strNodeDescColorized + @@ -1436,7 +1436,7 @@ async function do_sign_u256( u256, details, fn ) { "\n" ); if( joOut.result == null || joOut.result == undefined || ( !typeof joOut.result == "object" ) ) { ++joGatheringTracker.nCountErrors; - if( "error" in joOut && "message" in joOut.error ) { + if( ( "error" in joOut ) && ( typeof joOut.error == "object" ) && ( "message" in joOut.error ) ) { const strErrorMessage = strLogPrefix + cc.fatal( "Wallet CRITICAL ERROR:" ) + " " + cc.error( "S-Chain node " ) + strNodeDescColorized + @@ -1664,7 +1664,7 @@ async function handle_skale_call_via_redirect( joCallData ) { details.write( strLogPrefix + cc.debug( "Call to " ) + cc.info( "S-Chain" ) + cc.debug( " done, answer is: " ) + cc.j( joOut ) + "\n" ); if( joOut.result == null || joOut.result == undefined || ( !typeof joOut.result == "object" ) ) { let strThrowMessage = ""; - if( "error" in joOut && "message" in joOut.error ) { + if( ( "error" in joOut ) && ( typeof joOut.error == "object" ) && ( "message" in joOut.error ) ) { const strErrorMessage = strLogPrefix + cc.fatal( "Wallet CRITICAL ERROR:" ) + " " + cc.error( "S-Chain reported wallet error: " ) + cc.warning( joOut.error.message ) + @@ -1672,21 +1672,101 @@ async function handle_skale_call_via_redirect( joCallData ) { "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); - strThrowMessage = "S-Chain reported wallet error: " + joOut.error.message + ", sequence ID is " + sequence_id; - } else { + details.write( strErrorMessage ); + strThrowMessage = "JSON RPC call to S-Chain failed with \"unknown wallet error\", sequence ID is " + sequence_id; + } + throw new Error( strThrowMessage ); + } + isSuccess = true; + joRetVal = joOut; // joOut.result + } ); // joCall.call ... + } ); // rpcCall.create ... + } catch ( err ) { + isSuccess = false; + const strError = err.toString(); + joRetVal.error = strError; + const strErrorMessage = + strLogPrefix + cc.fatal( "CRITICAL ERROR:" ) + " " + + cc.error( "JSON RPC call finished with error: " ) + cc.warning( strError ) + + "\n"; + log.write( strErrorMessage ); + details.write( strErrorMessage ); + } + details.exposeDetailsTo( log, "handle_skale_call_via_redirect()", isSuccess ); + details.close(); + return joRetVal; +} + +async function handle_skale_imaVerifyAndSign( joCallData ) { + const strLogPrefix = ""; + const details = log.createMemoryStream( true ); + let isSuccess = false; + try { + // + const nIdxCurrentMsgBlockStart = joCallData.params.startMessageIdx; + const strFromChainName = jojoRetVal.CallData.params.srcChainName; + const jarrMessages = joCallData.params.messages; + const nThreshold = discover_bls_threshold( imaState.joSChainNetworkInfo ); + const nParticipants = discover_bls_participants( imaState.joSChainNetworkInfo ); + details.write( strLogPrefix + cc.debug( "Discovered BLS threshold is " ) + cc.info( nThreshold ) + cc.debug( "." ) + "\n" ); + details.write( strLogPrefix + cc.debug( "Discovered number of BLS participants is " ) + cc.info( nParticipants ) + cc.debug( "." ) + "\n" ); + const strMessageHash = owaspUtils.remove_starting_0x( keccak256_message( jarrMessages, nIdxCurrentMsgBlockStart, strFromChainName ) ); + details.write( strLogPrefix + cc.debug( "Message hash to sign is " ) + cc.info( strMessageHash ) + "\n" ); + // + const strURL = imaState.joAccount_s_chain.strSgxURL; // TO-FIX: verify we have SGX connection parameters + const keyShareName = imaState.joAccount_s_chain.strSgxKeyName; // TO-FIX: verify we have SGX connection parameters + const signerIndex = imaState.joAccount_s_chain.nNodeNumber; + await rpcCall.create( strURL, rpcCallOpts, async function( joCall, err ) { + if( err ) { + const strErrorMessage = + strLogPrefix + cc.fatal( "CRITICAL ERROR:" ) + + cc.error( " JSON RPC call to SGX failed, RPC call was not created, error is: " ) + cc.warning( err.toString() ) + "\n"; + log.write( strErrorMessage ); + details.write( strErrorMessage ); + throw new Error( "JSON RPC call to SGX failed, RPC call was not created, error is: " + err.toString() ); + } + const joCallSGX = { + method: "blsSignMessageHash", + // type: "BLSSignReq", + params: { + keyShareName: keyShareName, + messageHash: strMessageHash, + n: nParticipants, + t: nThreshold, + signerIndex: signerIndex + 1 // 1-based + } + }; + details.write( strLogPrefix + cc.debug( "Will invoke " ) + cc.info( "SGX" ) + cc.debug( " with call data " ) + cc.j( joCallSGX ) + "\n" ); + await joCall.call( joCallSGX, async function( joIn, joOut, err ) { + if( err ) { + const strErrorMessage = + strLogPrefix + cc.fatal( "CRITICAL ERROR:" ) + + cc.error( " JSON RPC call to SGX failed, RPC call reported error: " ) + cc.warning( err.toString() ) + "\n"; + log.write( strErrorMessage ); + details.write( strErrorMessage ); + throw new Error( "JSON RPC call to SGX failed, RPC call reported error: " + err.toString() ); + } + details.write( strLogPrefix + cc.debug( "Call to " ) + cc.info( "SGX" ) + cc.debug( " done, answer is: " ) + cc.j( joOut ) + "\n" ); + if( joOut.result == null || joOut.result == undefined || ( !typeof joOut.result == "object" ) ) { + let strThrowMessage = ""; + if( ( "error" in joOut ) && ( typeof joOut.error == "object" ) && ( "message" in joOut.error ) ) { const strErrorMessage = strLogPrefix + cc.fatal( "Wallet CRITICAL ERROR:" ) + " " + - cc.error( "JSON RPC call to S-Chain failed with " ) + cc.warning( "unknown wallet error" ) + + cc.error( "SGX reported wallet error: " ) + cc.warning( joOut.error.message ) + cc.error( ", " ) + cc.notice( "sequence ID" ) + cc.error( " is " ) + cc.attention( sequence_id ) + "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); - strThrowMessage = "JSON RPC call to S-Chain failed with \"unknown wallet error\", sequence ID is " + sequence_id; + details.write( strErrorMessage ); + strThrowMessage = "JSON RPC call to SGX failed with \"unknown wallet error\", sequence ID is " + sequence_id; } throw new Error( strThrowMessage ); } isSuccess = true; - joRetVal = joOut; // joOut.result + const joSignResult = ( "result" in joOut ) ? joOut.result : joOut; + joRetVal.signResult = joSignResult; + if( "qa" in joCallData ) + joRetVal.qa = joCallData.qa; } ); // joCall.call ... } ); // rpcCall.create ... } catch ( err ) { @@ -1695,22 +1775,79 @@ async function handle_skale_call_via_redirect( joCallData ) { joRetVal.error = strError; const strErrorMessage = strLogPrefix + cc.fatal( "CRITICAL ERROR:" ) + " " + - cc.error( "JSON RPC call finished with error: " ) + cc.warning( strError ) + + cc.error( "IMA messages verifier/signer error: " ) + cc.warning( strError ) + "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); } - details.exposeDetailsTo( log, "handle_skale_call_via_redirect()", isSuccess ); + details.exposeDetailsTo( log, "IMA messages verifier/signer", isSuccess ); details.close(); return joRetVal; } +/* + +2022-09-28 12:46:22.936: JSON RPC: <<< message from ::ffff:127.0.0.1: +{ + "method":"skale_imaVerifyAndSign", + "params":{ + "direction":"S2S", + "startMessageIdx":11, + "dstChainName":"Bob1000", + "srcChainName":"Bob1001", + "messages":[ + { + "sender":"0xD2aaA00900000000000000000000000000000000", + "destinationContract":"0xD2aaA00900000000000000000000000000000000", + "data":"0x0000000000000000000000000000000000000000000000000000000000000009000000000000000000000000dedd5a997604ade31542e8a3d6aaa280e348aef10000000000000000000000007aa5e36aa15e93d10f4f26357c30f052dacdde5f000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000003e8", + "savedBlockNumberForOptimizations":448 + } + ], + "qa":{ + "skaled_no":0, + "sequence_id":"9cef78ef82228cce2e4ed4bee0c485acca0f368c1d7ae94aa235d26c0b778db3", + "ts":"2022-09-28 12:46:22.934" + } + }, + "jsonrpc":"2.0", + "id":3937967578497932 +} + +--- --- --- --- --- GATHERED SUCCESS DETAILS FOR LATEST( (handle_skale_call_via_redirect()) action (BEGIN) --- --- ------ --- + +2022-09-28 12:46:22.938: Will invoke S-Chain with call data { method: "skale_imaVerifyAndSign", params: { direction: "S2S", startMessageIdx: 11, dstChainName: "Bob1000", srcChainName: "Bob1001", messages: [{ sender: "0xD2aaA00900000000000000000000000000000000", destinationContract: "0xD2aaA00900000000000000000000000000000000", data: "0x0000000000000000000000000000000000000000000000000000000000000009000000000000000000000000dedd5a997604ade31542e8a3d6aaa280e348aef10000000000000000000000007aa5e36aa15e93d10f4f26357c30f052dacdde5f000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000003e8", savedBlockNumberForOptimizations: 448}], qa: { skaled_no: 0, sequence_id: "9cef78ef82228cce2e4ed4bee0c485acca0f368c1d7ae94aa235d26c0b778db3", ts: "2022-09-28 12:46:22.934"}}, jsonrpc: "2.0", id: 3937967578497932} +2022-09-28 12:46:23.052: Call to S-Chain done, answer is: { id: 3937967578497932, jsonrpc: "2.0", result: { qa: { sequence_id: "9cef78ef82228cce2e4ed4bee0c485acca0f368c1d7ae94aa235d26c0b778db3", skaled_no: 0, ts: "2022-09-28 12:46:22.934"}, signResult: { errorMessage: "", signatureShare: "17478565975047244907103895167228083798921988971796902124088684491074746004285:15031994568930252855707831149520060050211430984917981813828217031708710584295:16774908233857298972544743177670408960120003931859857609581436687829921077359:0", status: 0, type: "BLSSignRsp"}}} + +--- --- --- --- --- GATHERED SUCCESS DETAILS FOR LATEST( (handle_skale_call_via_redirect()) action (END) --- --- --- --- --- + +2022-09-28 12:46:23.053: JSON RPC: >>> answer to ::ffff:127.0.0.1: +{ + "id":3937967578497932, + "jsonrpc":"2.0", + "result":{ + "qa":{ + "sequence_id":"9cef78ef82228cce2e4ed4bee0c485acca0f368c1d7ae94aa235d26c0b778db3", + "skaled_no":0, + "ts":"2022-09-28 12:46:22.934" + }, + "signResult":{ + "errorMessage":"", + "signatureShare":"17478565975047244907103895167228083798921988971796902124088684491074746004285:15031994568930252855707831149520060050211430984917981813828217031708710584295:16774908233857298972544743177670408960120003931859857609581436687829921077359:0", + "status":0, + "type":"BLSSignRsp" + } + } +} + + */ + module.exports = { init: init, do_sign_messages_m2s: do_sign_messages_m2s, do_sign_messages_s2m: do_sign_messages_s2m, do_sign_messages_s2s: do_sign_messages_s2s, do_sign_u256: do_sign_u256, - handle_skale_imaVerifyAndSign: handle_skale_call_via_redirect, + // handle_skale_imaVerifyAndSign: handle_skale_call_via_redirect, + handle_skale_imaVerifyAndSign: handle_skale_imaVerifyAndSign, handle_skale_imaBSU256: handle_skale_call_via_redirect }; // module.exports diff --git a/agent/main.js b/agent/main.js index 4941f1183..7a81f5456 100644 --- a/agent/main.js +++ b/agent/main.js @@ -2094,7 +2094,7 @@ async function discover_s_chain_network( fnAfter, isSilent, joPrevSChainNetworkI let g_ws_server_monitoring = null; if( imaState.nMonitoringPort > 0 ) { - const strLogPrefix = cc.attention( "Monitoring" ) + " " + cc.sunny( ">>" ) + " "; + const strLogPrefix = cc.attention( "Monitoring:" ) + " "; if( IMA.verbose_get() >= IMA.RV_VERBOSE.trace ) log.write( strLogPrefix + cc.normal( "Will start monitoring WS server on port " ) + cc.info( imaState.nMonitoringPort ) + "\n" ); g_ws_server_monitoring = new ws.Server( { port: 0 + imaState.nMonitoringPort } ); @@ -2111,7 +2111,7 @@ if( imaState.nMonitoringPort > 0 ) { try { const joMessage = JSON.parse( message ); if( IMA.verbose_get() >= IMA.RV_VERBOSE.trace ) - log.write( strLogPrefix + cc.normal( "Message from " ) + cc.info( ip ) + cc.normal( ": " ) + cc.j( joMessage ) + "\n" ); + log.write( strLogPrefix + cc.sunny( "<<<" ) + " " + cc.normal( "message from " ) + cc.info( ip ) + cc.normal( ": " ) + cc.j( joMessage ) + "\n" ); if( ! ( "method" in joMessage ) ) throw new Error( "\"method\" field was not specified" ); joAnswer.method = joMessage.method; @@ -2202,7 +2202,7 @@ if( imaState.nMonitoringPort > 0 ) { } try { if( IMA.verbose_get() >= IMA.RV_VERBOSE.trace ) - log.write( strLogPrefix + cc.normal( "Answer to " ) + cc.info( ip ) + cc.normal( ": " ) + cc.j( joAnswer ) + "\n" ); + log.write( strLogPrefix + cc.sunny( ">>>" ) + " " + cc.normal( "answer to " ) + cc.info( ip ) + cc.normal( ": " ) + cc.j( joAnswer ) + "\n" ); ws_peer.send( JSON.stringify( joAnswer ) ); } catch ( err ) { if( IMA.verbose_get() >= IMA.RV_VERBOSE.error ) { @@ -2223,7 +2223,7 @@ if( imaState.nMonitoringPort > 0 ) { let g_ws_server_ima = null; if( imaState.nJsonRpcPort > 0 ) { - const strLogPrefix = cc.attention( "JSON RPC" ) + " " + cc.sunny( ">>" ) + " "; + const strLogPrefix = cc.attention( "JSON RPC:" ) + " "; if( IMA.verbose_get() >= IMA.RV_VERBOSE.trace ) log.write( strLogPrefix + cc.normal( "Will start JSON RPC WS server on port " ) + cc.info( imaState.nJsonRpcPort ) + "\n" ); g_ws_server_ima = new ws.Server( { port: 0 + imaState.nJsonRpcPort } ); @@ -2240,7 +2240,7 @@ if( imaState.nJsonRpcPort > 0 ) { try { const joMessage = JSON.parse( message ); if( IMA.verbose_get() >= IMA.RV_VERBOSE.trace ) - log.write( strLogPrefix + cc.normal( "Message from " ) + cc.info( ip ) + cc.normal( ": " ) + cc.j( joMessage ) + "\n" ); + log.write( strLogPrefix + cc.sunny( "<<<" ) + " " + cc.normal( "message from " ) + cc.info( ip ) + cc.normal( ": " ) + cc.j( joMessage ) + "\n" ); if( ! ( "method" in joMessage ) ) throw new Error( "\"method\" field was not specified" ); joAnswer.method = joMessage.method; @@ -2279,7 +2279,7 @@ if( imaState.nJsonRpcPort > 0 ) { } try { if( IMA.verbose_get() >= IMA.RV_VERBOSE.trace ) - log.write( strLogPrefix + cc.normal( "Answer to " ) + cc.info( ip ) + cc.normal( ": " ) + cc.j( joAnswer ) + "\n" ); + log.write( strLogPrefix + cc.sunny( ">>>" ) + " " + cc.normal( "answer to " ) + cc.info( ip ) + cc.normal( ": " ) + cc.j( joAnswer ) + "\n" ); ws_peer.send( JSON.stringify( joAnswer ) ); } catch ( err ) { if( IMA.verbose_get() >= IMA.RV_VERBOSE.error ) { From 180e24001f1c65df2edb79ea817b184346962d9e Mon Sep 17 00:00:00 2001 From: Sergiy Lavrynenko Date: Fri, 30 Sep 2022 13:01:12 +0100 Subject: [PATCH 004/257] transient commit, working on JS only IMA agent --- agent/bls.js | 205 +++++++++++++++----------------- agent/cli.js | 4 +- agent/main.js | 2 +- agent/oracle.js | 18 +-- npms/skale-ima/index.js | 36 +++--- npms/skale-observer/observer.js | 12 +- npms/skale-owasp/owasp-util.js | 30 ++++- 7 files changed, 161 insertions(+), 146 deletions(-) diff --git a/agent/bls.js b/agent/bls.js index d3dc9aad4..7d185a77d 100644 --- a/agent/bls.js +++ b/agent/bls.js @@ -31,6 +31,7 @@ const child_process = require( "child_process" ); const shell = require( "shelljs" ); const { Keccak } = require( "sha3" ); const { cc } = require( "./utils" ); +const owaspUtil = require( "../npms/skale-owasp/owasp-util" ); function init() { owaspUtils.owaspAddUsageRef(); @@ -45,7 +46,7 @@ async function with_timeout( strDescription, promise, seconds ) { let result_err = null, isComplete = false; promise.catch( function( err ) { isComplete = true; - result_err = new Error( strDescription + "error: " + err.toString() ); + result_err = new Error( strDescription + "error: " + owaspUtil.extract_error_message( err ) ); } ).finally( function() { isComplete = true; } ); @@ -362,7 +363,7 @@ function perform_bls_glue( // fnShellRestore(); } catch ( err ) { - const s1 = strLogPrefix + cc.fatal( "BLS glue CRITICAL ERROR:" ) + cc.error( " error description is: " ) + cc.warning( err.toString() ) + "\n"; + const s1 = strLogPrefix + cc.fatal( "BLS glue CRITICAL ERROR:" ) + cc.error( " error description is: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n"; const s2 = strLogPrefix + cc.error( "BLS glue output is:\n" ) + cc.notice( strOutput ) + "\n"; log.write( s1 ); details.write( s1 ); @@ -461,7 +462,7 @@ function perform_bls_glue_u256( details, u256, arrSignResults ) { // fnShellRestore(); } catch ( err ) { - const s1 = strLogPrefix + cc.fatal( "BLS glue CRITICAL ERROR:" ) + cc.error( " error description is: " ) + cc.warning( err.toString() ) + "\n"; + const s1 = strLogPrefix + cc.fatal( "BLS glue CRITICAL ERROR:" ) + cc.error( " error description is: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n"; const s2 = strLogPrefix + cc.error( "BLS glue output is:\n" ) + cc.notice( strOutput ) + "\n"; log.write( s1 ); details.write( s1 ); @@ -525,7 +526,7 @@ function perform_bls_verify_i( fnShellRestore(); return true; } catch ( err ) { - const s1 = strLogPrefix + cc.fatal( "CRITICAL ERROR:" ) + cc.error( " BLS node " ) + cc.notice( "#" ) + cc.info( nZeroBasedNodeIndex ) + cc.error( " verify error:" ) + cc.normal( " error description is: " ) + cc.warning( err.toString() ) + "\n"; + const s1 = strLogPrefix + cc.fatal( "CRITICAL ERROR:" ) + cc.error( " BLS node " ) + cc.notice( "#" ) + cc.info( nZeroBasedNodeIndex ) + cc.error( " verify error:" ) + cc.normal( " error description is: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n"; const s2 = strLogPrefix + cc.error( "CRITICAL ERROR:" ) + cc.error( " BLS node " ) + cc.notice( "#" ) + cc.info( nZeroBasedNodeIndex ) + cc.error( " verify output is:\n" ) + cc.notice( strOutput ) + "\n"; log.write( s1 ); details.write( s1 ); @@ -574,7 +575,7 @@ function perform_bls_verify_i_u256( details, nZeroBasedNodeIndex, joResultFromNo fnShellRestore(); return true; } catch ( err ) { - const s1 = strLogPrefix + cc.fatal( "CRITICAL ERROR:" ) + cc.error( " BLS u256 node " ) + cc.notice( "#" ) + cc.info( nZeroBasedNodeIndex ) + cc.error( " verify error:" ) + cc.normal( " error description is: " ) + cc.warning( err.toString() ) + "\n"; + const s1 = strLogPrefix + cc.fatal( "CRITICAL ERROR:" ) + cc.error( " BLS u256 node " ) + cc.notice( "#" ) + cc.info( nZeroBasedNodeIndex ) + cc.error( " verify error:" ) + cc.normal( " error description is: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n"; const s2 = strLogPrefix + cc.error( "CRITICAL ERROR:" ) + cc.error( " BLS u256 node " ) + cc.notice( "#" ) + cc.info( nZeroBasedNodeIndex ) + cc.error( " verify output is:\n" ) + cc.notice( strOutput ) + "\n"; log.write( s1 ); details.write( s1 ); @@ -643,7 +644,7 @@ function perform_bls_verify( fnShellRestore(); return true; } catch ( err ) { - const s1 = strLogPrefix + cc.fatal( "BLS/summary verify CRITICAL ERROR:" ) + cc.normal( " error description is: " ) + cc.warning( err.toString() ) + "\n"; + const s1 = strLogPrefix + cc.fatal( "BLS/summary verify CRITICAL ERROR:" ) + cc.normal( " error description is: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n"; const s2 = strLogPrefix + cc.error( "BLS/summary verify output is:\n" ) + cc.notice( strOutput ) + "\n"; log.write( s1 ); details.write( s1 ); @@ -701,7 +702,7 @@ function perform_bls_verify_u256( details, joGlueResult, u256, joCommonPublicKey fnShellRestore(); return true; } catch ( err ) { - const s1 = strLogPrefix + cc.fatal( "BLS u256/summary verify CRITICAL ERROR:" ) + cc.normal( " error description is: " ) + cc.warning( err.toString() ) + "\n"; + const s1 = strLogPrefix + cc.fatal( "BLS u256/summary verify CRITICAL ERROR:" ) + cc.normal( " error description is: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n"; const s2 = strLogPrefix + cc.error( "BLS u256/summary verify output is:\n" ) + cc.notice( strOutput ) + "\n"; log.write( s1 ); details.write( s1 ); @@ -785,7 +786,7 @@ async function check_correctness_of_messages_to_sign( details, strLogPrefix, str cc.error( " Correctness validation failed for message " ) + cc.info( idxMessage ) + cc.error( " sent to " ) + cc.info( joChainName ) + cc.error( ", message is: " ) + cc.j( joMessage ) + - cc.error( ", error information: " ) + cc.warning( err.toString() ) + + cc.error( ", error information: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n"; log.write( s ); details.write( s ); @@ -931,7 +932,7 @@ async function do_sign_messages_impl( const strErrorMessage = strLogPrefix + cc.fatal( "CRITICAL ERROR:" ) + cc.error( " JSON RPC call to S-Chain node " ) + strNodeDescColorized + - cc.error( " failed, RPC call was not created, error is: " ) + cc.warning( err.toString() ) + + cc.error( " failed, RPC call was not created, error is: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + cc.error( ", " ) + cc.notice( "sequence ID" ) + cc.error( " is " ) + cc.attention( sequence_id ) + "\n"; log.write( strErrorMessage ); @@ -992,7 +993,7 @@ async function do_sign_messages_impl( const strErrorMessage = strLogPrefix + cc.fatal( "CRITICAL ERROR:" ) + cc.error( " JSON RPC call to S-Chain node " ) + strNodeDescColorized + - cc.error( " failed, RPC call reported error: " ) + cc.warning( err.toString() ) + + cc.error( " failed, RPC call reported error: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + cc.error( ", " ) + cc.notice( "sequence ID" ) + cc.error( " is " ) + cc.attention( sequence_id ) + "\n"; log.write( strErrorMessage ); @@ -1010,25 +1011,15 @@ async function do_sign_messages_impl( "\n" ); if( joOut.result == null || joOut.result == undefined || ( !typeof joOut.result == "object" ) ) { ++joGatheringTracker.nCountErrors; - if( ( "error" in joOut ) && ( typeof joOut.error == "object" ) && ( "message" in joOut.error ) ) { - const strErrorMessage = - strLogPrefix + cc.fatal( "Wallet CRITICAL ERROR:" ) + " " + - cc.error( "S-Chain node " ) + strNodeDescColorized + - cc.error( " reported wallet error: " ) + cc.warning( joOut.error.message ) + - cc.error( ", " ) + cc.notice( "sequence ID" ) + cc.error( " is " ) + cc.attention( sequence_id ) + - "\n"; - log.write( strErrorMessage ); - details.write( strErrorMessage ); - } else { - const strErrorMessage = - strLogPrefix + cc.fatal( "Wallet CRITICAL ERROR:" ) + " " + - cc.error( "JSON RPC call to S-Chain node " ) + strNodeDescColorized + - cc.error( " failed with " ) + cc.warning( "unknown wallet error" ) + - cc.error( ", " ) + cc.notice( "sequence ID" ) + cc.error( " is " ) + cc.attention( sequence_id ) + - "\n"; - log.write( strErrorMessage ); - details.write( strErrorMessage ); - } + const strErrorMessage = + strLogPrefix + cc.fatal( "Wallet CRITICAL ERROR:" ) + " " + + cc.error( "S-Chain node " ) + strNodeDescColorized + + cc.error( " reported wallet error: " ) + + cc.warning( owaspUtil.extract_error_message( joOut, "unknown wallet error(1)" ) ) + + cc.error( ", " ) + cc.notice( "sequence ID" ) + cc.error( " is " ) + cc.attention( sequence_id ) + + "\n"; + log.write( strErrorMessage ); + details.write( strErrorMessage ); return; } details.write( strLogPrefix + cc.normal( "Node " ) + cc.info( joNode.nodeID ) + cc.normal( " sign result: " ) + cc.j( joOut.result ? joOut.result : null ) + "\n" ); @@ -1079,7 +1070,7 @@ async function do_sign_messages_impl( const strErrorMessage = strLogPrefixA + cc.error( "S-Chain node " ) + strNodeDescColorized + cc.error( " sign " ) + cc.error( " CRITICAL ERROR:" ) + cc.error( " partial signature fail from with index " ) + cc.info( nZeroBasedNodeIndex ) + - cc.error( ", error is " ) + cc.warning( err.toString() ) + + cc.error( ", error is " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + cc.error( ", " ) + cc.notice( "sequence ID" ) + cc.error( " is " ) + cc.attention( sequence_id ) + "\n"; log.write( strErrorMessage ); @@ -1110,7 +1101,7 @@ async function do_sign_messages_impl( const strErrorMessage = strLogPrefix + cc.error( "S-Chain node " ) + strNodeDescColorized + " " + cc.fatal( "CRITICAL ERROR:" ) + cc.error( " signature fail from node " ) + cc.info( joNode.nodeID ) + - cc.error( ", error is " ) + cc.warning( err.toString() ) + + cc.error( ", error is " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + cc.error( ", " ) + cc.notice( "sequence ID" ) + cc.error( " is " ) + cc.attention( sequence_id ) + "\n"; log.write( strErrorMessage ); @@ -1167,10 +1158,10 @@ async function do_sign_messages_impl( log.write( cc.debug( "Will call sending function (fn)" ) + "\n" ); details.write( cc.debug( "Will call sending function (fn) for " ) + "\n" ); /*await*/ fn( strError, jarrMessages, joGlueResult ).catch( ( err ) => { - const strErrorMessage = cc.error( "Problem(2) in BLS sign result handler: " ) + cc.warning( err.toString() ) + "\n"; + const strErrorMessage = cc.error( "Problem(2) in BLS sign result handler: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); - errGathering = "Problem(2) in BLS sign result handler: " + err.toString(); + errGathering = "Problem(2) in BLS sign result handler: " + owaspUtil.extract_error_message( err ); return; } ); bHaveResultReportCalled = true; @@ -1186,13 +1177,13 @@ async function do_sign_messages_impl( /*await*/ fn( "signature error(2), got " + joGatheringTracker.nCountErrors + " errors(s) for " + jarrNodes.length + " node(s)", jarrMessages, null ).catch( ( err ) => { const strErrorMessage = cc.error( "Problem(3) in BLS sign result handler, not enough successful BLS signature parts(" ) + - cc.info( cntSuccess ) + cc.error( " when all attempts done, error details: " ) + cc.warning( err.toString() ) + + cc.info( cntSuccess ) + cc.error( " when all attempts done, error details: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); errGathering = "Problem(3) in BLS sign result handler, not enough successful BLS signature parts(" + - cntSuccess + " when all attempts done, error details: " + err.toString(); + cntSuccess + " when all attempts done, error details: " + owaspUtil.extract_error_message( err ); reject( new Error( errGathering ) ); } ); bHaveResultReportCalled = true; @@ -1204,12 +1195,12 @@ async function do_sign_messages_impl( const strErrorMessage = cc.error( "Problem(4) in BLS sign result handler, not enough successful BLS signature parts(" ) + cc.info( cntSuccess ) + cc.error( ") and timeout reached, error details: " ) + - cc.warning( err.toString() ) + "\n"; + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); errGathering = "Problem(4) in BLS sign result handler, not enough successful BLS signature parts(" + - cntSuccess + ") and timeout reached, error details: " + err.toString(); + cntSuccess + ") and timeout reached, error details: " + owaspUtil.extract_error_message( err ); reject( new Error( errGathering ) ); } ); bHaveResultReportCalled = true; @@ -1223,7 +1214,7 @@ async function do_sign_messages_impl( details.write( cc.success( "BLS verification and sending promise awaited." ) + "\n" ); log.write( cc.success( "BLS verification and sending promise awaited." ) + "\n" ); } ).catch( err => { - const strErrorMessage = cc.error( "Failed to verify BLS and send message : " ) + cc.warning( err.toString() ) + "\n"; + const strErrorMessage = cc.error( "Failed to verify BLS and send message : " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); } ); @@ -1242,7 +1233,7 @@ async function do_sign_messages_impl( const strErrorMessage = cc.error( "Problem(5) in BLS sign result handler, not enough successful BLS signature parts(" ) + cc.info( cntSuccess ) + cc.error( ") and timeout reached, error details: " ) + - cc.warning( err.toString() ) + "\n"; + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); details.exposeDetailsTo( log, strGatheredDetailsName, false ); @@ -1253,7 +1244,7 @@ async function do_sign_messages_impl( return; } if( ! bHaveResultReportCalled ) { - const strErrorMessage = cc.error( "Failed BLS sign result awaiting(2): " ) + cc.warning( err.toString() ) + "\n"; + const strErrorMessage = cc.error( "Failed BLS sign result awaiting(2): " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); bHaveResultReportCalled = true; @@ -1261,7 +1252,7 @@ async function do_sign_messages_impl( const strErrorMessage = cc.error( "Problem(6) in BLS sign result handler, not enough successful BLS signature parts(" ) + cc.info( cntSuccess ) + cc.error( ") and timeout reached, error details: " ) + - cc.warning( err.toString() ) + "\n"; + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); details.exposeDetailsTo( log, strGatheredDetailsName, false ); @@ -1270,14 +1261,14 @@ async function do_sign_messages_impl( } ); } } catch ( err ) { - const strErrorMessage = cc.error( "Failed BLS sign due to generic flow exception: " ) + cc.warning( err.toString() ) + "\n"; + const strErrorMessage = cc.error( "Failed BLS sign due to generic flow exception: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n"; log.write( strErrorMessage ); if( details ) details.write( strErrorMessage ); if( ! bHaveResultReportCalled ) { bHaveResultReportCalled = true; - await fn( "Failed BLS sign due to exception: " + err.toString(), jarrMessages, null ).catch( ( err ) => { - const strErrorMessage = cc.error( "Failed BLS sign due to error-erporting callback exception: " ) + cc.warning( err.toString() ) + "\n"; + await fn( "Failed BLS sign due to exception: " + owaspUtil.extract_error_message( err ), jarrMessages, null ).catch( ( err ) => { + const strErrorMessage = cc.error( "Failed BLS sign due to error-erporting callback exception: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n"; log.write( strErrorMessage ); if( details ) { details.write( strErrorMessage ); @@ -1403,7 +1394,7 @@ async function do_sign_u256( u256, details, fn ) { const strErrorMessage = strLogPrefix + cc.fatal( "CRITICAL ERROR:" ) + cc.error( " JSON RPC call to S-Chain node " ) + strNodeDescColorized + - cc.error( " failed, RPC call was not created, error is: " ) + cc.warning( err.toString() ) + "\n"; + cc.error( " failed, RPC call was not created, error is: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); return; @@ -1424,7 +1415,7 @@ async function do_sign_u256( u256, details, fn ) { const strErrorMessage = strLogPrefix + cc.fatal( "CRITICAL ERROR:" ) + cc.error( " JSON RPC call to S-Chain node " ) + strNodeDescColorized + - cc.error( " failed, RPC call reported error: " ) + cc.warning( err.toString() ) + "\n"; + cc.error( " failed, RPC call reported error: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); return; @@ -1436,21 +1427,14 @@ async function do_sign_u256( u256, details, fn ) { "\n" ); if( joOut.result == null || joOut.result == undefined || ( !typeof joOut.result == "object" ) ) { ++joGatheringTracker.nCountErrors; - if( ( "error" in joOut ) && ( typeof joOut.error == "object" ) && ( "message" in joOut.error ) ) { - const strErrorMessage = - strLogPrefix + cc.fatal( "Wallet CRITICAL ERROR:" ) + " " + - cc.error( "S-Chain node " ) + strNodeDescColorized + - cc.error( " reported wallet error: " ) + cc.warning( joOut.error.message ) + "\n"; - log.write( strErrorMessage ); - details.write( strErrorMessage ); - } else { - const strErrorMessage = - strLogPrefix + cc.fatal( "Wallet CRITICAL ERROR:" ) + " " + - cc.error( "JSON RPC call to S-Chain node " ) + strNodeDescColorized + - cc.error( " failed with " ) + cc.warning( "unknown wallet error" ) + "\n"; - log.write( strErrorMessage ); - details.write( strErrorMessage ); - } + const strErrorMessage = + strLogPrefix + cc.fatal( "Wallet CRITICAL ERROR:" ) + " " + + cc.error( "S-Chain node " ) + strNodeDescColorized + + cc.error( " reported wallet error: " ) + + cc.warning( owaspUtil.extract_error_message( joOut, "unknown wallet error(2)" ) ) + + "\n"; + log.write( strErrorMessage ); + details.write( strErrorMessage ); return; } details.write( strLogPrefix + cc.normal( "Node " ) + cc.info( joNode.nodeID ) + cc.normal( " sign result: " ) + cc.j( joOut.result ? joOut.result : null ) + "\n" ); @@ -1494,7 +1478,7 @@ async function do_sign_u256( u256, details, fn ) { const strErrorMessage = strLogPrefixA + cc.error( "S-Chain node " ) + strNodeDescColorized + cc.error( " sign " ) + cc.error( " CRITICAL ERROR:" ) + cc.error( " partial signature fail from with index " ) + cc.info( nZeroBasedNodeIndex ) + - cc.error( ", error is " ) + cc.warning( err.toString() ) + "\n"; + cc.error( ", error is " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); } @@ -1523,7 +1507,7 @@ async function do_sign_u256( u256, details, fn ) { const strErrorMessage = strLogPrefix + cc.error( "S-Chain node " ) + strNodeDescColorized + " " + cc.fatal( "CRITICAL ERROR:" ) + cc.error( " signature fail from node " ) + cc.info( joNode.nodeID ) + - cc.error( ", error is " ) + cc.warning( err.toString() ) + "\n"; + cc.error( ", error is " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); } @@ -1567,10 +1551,10 @@ async function do_sign_u256( u256, details, fn ) { log.write( cc.debug( "Will call sending function (fn)" ) + "\n" ); details.write( cc.debug( "Will call sending function (fn) for " ) + "\n" ); /*await*/ fn( strError, u256, joGlueResult ).catch( ( err ) => { - const strErrorMessage = cc.error( "Problem(2) in BLS u256 sign result handler: " ) + cc.warning( err.toString() ) + "\n"; + const strErrorMessage = cc.error( "Problem(2) in BLS u256 sign result handler: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); - errGathering = "Problem(2) in BLS u256 sign result handler: " + err.toString(); + errGathering = "Problem(2) in BLS u256 sign result handler: " + owaspUtil.extract_error_message( err ); } ); if( strError ) { errGathering = strError; @@ -1584,13 +1568,13 @@ async function do_sign_u256( u256, details, fn ) { /*await*/ fn( "signature error(2, u256), got " + joGatheringTracker.nCountErrors + " errors(s) for " + jarrNodes.length + " node(s)", u256, null ).catch( ( err ) => { const strErrorMessage = cc.error( "Problem(3) in BLS u256 sign result handler, not enough successful BLS signature parts(" ) + - cc.info( cntSuccess ) + cc.error( " when all attempts done, error details: " ) + cc.warning( err.toString() ) + + cc.info( cntSuccess ) + cc.error( " when all attempts done, error details: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); errGathering = "Problem(3) in BLS u256 sign result handler, not enough successful BLS signature parts(" + - cntSuccess + " when all attempts done, error details: " + err.toString(); + cntSuccess + " when all attempts done, error details: " + owaspUtil.extract_error_message( err ); reject( new Error( errGathering ) ); } ); return; @@ -1601,12 +1585,12 @@ async function do_sign_u256( u256, details, fn ) { const strErrorMessage = cc.error( "Problem(4) in BLS u256 sign result handler, not enough successful BLS signature parts(" ) + cc.info( cntSuccess ) + cc.error( ") and timeout reached, error details: " ) + - cc.warning( err.toString() ) + "\n"; + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); errGathering = "Problem(4) in BLS u256 sign result handler, not enough successful BLS signature parts(" + - cntSuccess + ") and timeout reached, error details: " + err.toString(); + cntSuccess + ") and timeout reached, error details: " + owaspUtil.extract_error_message( err ); reject( new Error( errGathering ) ); } ); return; @@ -1619,7 +1603,7 @@ async function do_sign_u256( u256, details, fn ) { details.write( cc.info( "BLS u256 sign promise awaited." ) + "\n" ); log.write( cc.info( "BLS u256 sign promise awaited." ) + "\n" ); } ).catch( err => { - const strErrorMessage = cc.error( "Failed to verify BLS and send message : " ) + cc.warning( err.toString() ) + "\n"; + const strErrorMessage = cc.error( "Failed to verify BLS and send message : " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); } ); @@ -1646,36 +1630,33 @@ async function handle_skale_call_via_redirect( joCallData ) { if( err ) { const strErrorMessage = strLogPrefix + cc.fatal( "CRITICAL ERROR:" ) + - cc.error( " JSON RPC call to S-Chain failed, RPC call was not created, error is: " ) + cc.warning( err.toString() ) + "\n"; + cc.error( " JSON RPC call to S-Chain failed, RPC call was not created, error is: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); - throw new Error( "JSON RPC call to S-Chain failed, RPC call was not created, error is: " + err.toString() ); + throw new Error( "JSON RPC call to S-Chain failed, RPC call was not created, error is: " + owaspUtil.extract_error_message( err ) ); } details.write( strLogPrefix + cc.debug( "Will invoke " ) + cc.info( "S-Chain" ) + cc.debug( " with call data " ) + cc.j( joCallData ) + "\n" ); await joCall.call( joCallData, async function( joIn, joOut, err ) { if( err ) { const strErrorMessage = strLogPrefix + cc.fatal( "CRITICAL ERROR:" ) + - cc.error( " JSON RPC call to S-Chain failed, RPC call reported error: " ) + cc.warning( err.toString() ) + "\n"; + cc.error( " JSON RPC call to S-Chain failed, RPC call reported error: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); - throw new Error( "JSON RPC call to S-Chain failed, RPC call reported error: " + err.toString() ); + throw new Error( "JSON RPC call to S-Chain failed, RPC call reported error: " + owaspUtil.extract_error_message( err ) ); } details.write( strLogPrefix + cc.debug( "Call to " ) + cc.info( "S-Chain" ) + cc.debug( " done, answer is: " ) + cc.j( joOut ) + "\n" ); if( joOut.result == null || joOut.result == undefined || ( !typeof joOut.result == "object" ) ) { - let strThrowMessage = ""; - if( ( "error" in joOut ) && ( typeof joOut.error == "object" ) && ( "message" in joOut.error ) ) { - const strErrorMessage = - strLogPrefix + cc.fatal( "Wallet CRITICAL ERROR:" ) + " " + - cc.error( "S-Chain reported wallet error: " ) + cc.warning( joOut.error.message ) + - cc.error( ", " ) + cc.notice( "sequence ID" ) + cc.error( " is " ) + cc.attention( sequence_id ) + - "\n"; - log.write( strErrorMessage ); - details.write( strErrorMessage ); - details.write( strErrorMessage ); - strThrowMessage = "JSON RPC call to S-Chain failed with \"unknown wallet error\", sequence ID is " + sequence_id; - } - throw new Error( strThrowMessage ); + const strErrorMessage = + strLogPrefix + cc.fatal( "Wallet CRITICAL ERROR:" ) + " " + + cc.error( "S-Chain reported wallet error: " ) + + cc.warning( owaspUtil.extract_error_message( joOut, "unknown wallet error(3)" ) ) + + cc.error( ", " ) + cc.notice( "sequence ID" ) + cc.error( " is " ) + cc.attention( sequence_id ) + + "\n"; + log.write( strErrorMessage ); + details.write( strErrorMessage ); + details.write( strErrorMessage ); + throw new Error( "JSON RPC call to S-Chain failed with \"unknown wallet error(3)\", sequence ID is " + sequence_id ); } isSuccess = true; joRetVal = joOut; // joOut.result @@ -1683,7 +1664,7 @@ async function handle_skale_call_via_redirect( joCallData ) { } ); // rpcCall.create ... } catch ( err ) { isSuccess = false; - const strError = err.toString(); + const strError = owaspUtil.extract_error_message( err ); joRetVal.error = strError; const strErrorMessage = strLogPrefix + cc.fatal( "CRITICAL ERROR:" ) + " " + @@ -1700,11 +1681,13 @@ async function handle_skale_call_via_redirect( joCallData ) { async function handle_skale_imaVerifyAndSign( joCallData ) { const strLogPrefix = ""; const details = log.createMemoryStream( true ); + let joRetVal = { }; let isSuccess = false; try { // + details.write( strLogPrefix + cc.debug( "Will verify and sign " ) + cc.j( joCallData ) + "\n" ); const nIdxCurrentMsgBlockStart = joCallData.params.startMessageIdx; - const strFromChainName = jojoRetVal.CallData.params.srcChainName; + const strFromChainName = joCallData.params.srcChainName; const jarrMessages = joCallData.params.messages; const nThreshold = discover_bls_threshold( imaState.joSChainNetworkInfo ); const nParticipants = discover_bls_participants( imaState.joSChainNetworkInfo ); @@ -1713,17 +1696,24 @@ async function handle_skale_imaVerifyAndSign( joCallData ) { const strMessageHash = owaspUtils.remove_starting_0x( keccak256_message( jarrMessages, nIdxCurrentMsgBlockStart, strFromChainName ) ); details.write( strLogPrefix + cc.debug( "Message hash to sign is " ) + cc.info( strMessageHash ) + "\n" ); // - const strURL = imaState.joAccount_s_chain.strSgxURL; // TO-FIX: verify we have SGX connection parameters - const keyShareName = imaState.joAccount_s_chain.strSgxKeyName; // TO-FIX: verify we have SGX connection parameters + const strURL = imaState.joAccount_s_chain.strSgxURL + ? imaState.joAccount_s_chain.strSgxURL + : imaState.joAccount_main_net.strSgxURL; + if( ! strURL ) + throw new Error( "SGX URL is unknown, cannot verify IMA message(s)" ); + const keyShareName = imaState.joAccount_s_chain.strSgxKeyName; + if( ! strURL ) + throw new Error( "SGX keyshare name is unknown, cannot verify IMA message(s)" ); const signerIndex = imaState.joAccount_s_chain.nNodeNumber; + const rpcCallOpts = null; await rpcCall.create( strURL, rpcCallOpts, async function( joCall, err ) { if( err ) { const strErrorMessage = strLogPrefix + cc.fatal( "CRITICAL ERROR:" ) + - cc.error( " JSON RPC call to SGX failed, RPC call was not created, error is: " ) + cc.warning( err.toString() ) + "\n"; + cc.error( " JSON RPC call to SGX failed, RPC call was not created, error is: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); - throw new Error( "JSON RPC call to SGX failed, RPC call was not created, error is: " + err.toString() ); + throw new Error( "JSON RPC call to SGX failed, RPC call was not created, error is: " + owaspUtil.extract_error_message( err ) ); } const joCallSGX = { method: "blsSignMessageHash", @@ -1741,26 +1731,23 @@ async function handle_skale_imaVerifyAndSign( joCallData ) { if( err ) { const strErrorMessage = strLogPrefix + cc.fatal( "CRITICAL ERROR:" ) + - cc.error( " JSON RPC call to SGX failed, RPC call reported error: " ) + cc.warning( err.toString() ) + "\n"; + cc.error( " JSON RPC call to SGX failed, RPC call reported error: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); - throw new Error( "JSON RPC call to SGX failed, RPC call reported error: " + err.toString() ); + throw new Error( "JSON RPC call to SGX failed, RPC call reported error: " + owaspUtil.extract_error_message( err ) ); } details.write( strLogPrefix + cc.debug( "Call to " ) + cc.info( "SGX" ) + cc.debug( " done, answer is: " ) + cc.j( joOut ) + "\n" ); if( joOut.result == null || joOut.result == undefined || ( !typeof joOut.result == "object" ) ) { - let strThrowMessage = ""; - if( ( "error" in joOut ) && ( typeof joOut.error == "object" ) && ( "message" in joOut.error ) ) { - const strErrorMessage = - strLogPrefix + cc.fatal( "Wallet CRITICAL ERROR:" ) + " " + - cc.error( "SGX reported wallet error: " ) + cc.warning( joOut.error.message ) + - cc.error( ", " ) + cc.notice( "sequence ID" ) + cc.error( " is " ) + cc.attention( sequence_id ) + - "\n"; - log.write( strErrorMessage ); - details.write( strErrorMessage ); - details.write( strErrorMessage ); - strThrowMessage = "JSON RPC call to SGX failed with \"unknown wallet error\", sequence ID is " + sequence_id; - } - throw new Error( strThrowMessage ); + const strErrorMessage = + strLogPrefix + cc.fatal( "Wallet CRITICAL ERROR:" ) + " " + + cc.error( "SGX reported wallet error: " ) + + cc.warning( owaspUtil.extract_error_message( joOut, "unknown wallet error(4)" ) ) + + cc.error( ", " ) + cc.notice( "sequence ID" ) + cc.error( " is " ) + cc.attention( sequence_id ) + + "\n"; + log.write( strErrorMessage ); + details.write( strErrorMessage ); + details.write( strErrorMessage ); + throw new Error( "JSON RPC call to SGX failed with \"unknown wallet error(4)\", sequence ID is " + sequence_id ); } isSuccess = true; const joSignResult = ( "result" in joOut ) ? joOut.result : joOut; @@ -1771,7 +1758,7 @@ async function handle_skale_imaVerifyAndSign( joCallData ) { } ); // rpcCall.create ... } catch ( err ) { isSuccess = false; - const strError = err.toString(); + const strError = owaspUtil.extract_error_message( err ); joRetVal.error = strError; const strErrorMessage = strLogPrefix + cc.fatal( "CRITICAL ERROR:" ) + " " + diff --git a/agent/cli.js b/agent/cli.js index 2fa41a80b..b721a48c6 100644 --- a/agent/cli.js +++ b/agent/cli.js @@ -1281,7 +1281,7 @@ function getWeb3FromURL( strURL, log ) { } catch ( err ) { log.write( cc.fatal( "CRITICAL ERROR:" ) + cc.error( " Failed to create " ) + cc.attention( "Web3" ) + cc.error( " connection to " ) + cc.info( strURL ) + - cc.error( ": " ) + cc.warning( err.toString() ) + "\n" ); + cc.error( ": " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n" ); w3 = null; } return w3; @@ -1302,7 +1302,7 @@ async function async_check_url_at_startup( u, name ) { } catch ( err ) { details.write( cc.fatal( "ERROR:" ) + cc.error( " Failed to check URL " ) + - cc.u( u ) + cc.error( " connectivity for " ) + cc.info( name ) + cc.error( " at start-up, error is: " ) + cc.warning( err.toString() ) + + cc.u( u ) + cc.error( " connectivity for " ) + cc.info( name ) + cc.error( " at start-up, error is: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n" ); } // details.exposeDetailsTo( log, "async_check_url_at_startup( \"" + u + "\", \"" + name + "\" )", true ); diff --git a/agent/main.js b/agent/main.js index 7a81f5456..cd1cd70fa 100644 --- a/agent/main.js +++ b/agent/main.js @@ -2643,7 +2643,7 @@ async function single_transfer_loop() { log.write( strLogPrefix + cc.debug( "Completed: " ) + cc.tf( bResult ) + "\n" ); return bResult; } catch ( err ) { - log.write( strLogPrefix + cc.fatal( "Exception:" ) + + cc.error( err.toString() ) + "\n" ); + log.write( strLogPrefix + cc.fatal( "Exception:" ) + + cc.error( owaspUtil.extract_error_message( err ) ) + "\n" ); } g_is_single_transfer_loop = false; return false; diff --git a/agent/oracle.js b/agent/oracle.js index a1fd223af..385e3ed8a 100644 --- a/agent/oracle.js +++ b/agent/oracle.js @@ -90,9 +90,9 @@ function oracle_get_gas_price( oracleOpts, details ) { cntAttempts = 1; rpcCall.create( url, callOpts || { }, async function( joCall, err ) { if( err ) { - details.write( cc.fatal( "CRITICAL ORACLE CALL ERROR:" ) + cc.error( " RPC connection problem for url " ) + cc.u( url ) + cc.error( ", error description: " ) + cc.warning( err.toString() ) + "\n" ); + details.write( cc.fatal( "CRITICAL ORACLE CALL ERROR:" ) + cc.error( " RPC connection problem for url " ) + cc.u( url ) + cc.error( ", error description: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n" ); details.write( err.stack + "\n" ); - reject( new Error( "CRITICAL ORACLE CALL ERROR: RPC connection problem for url \"" + url + "\", error description: " + err.toString() ) ); + reject( new Error( "CRITICAL ORACLE CALL ERROR: RPC connection problem for url \"" + url + "\", error description: " + owaspUtil.extract_error_message( err ) ) ); return; } try { @@ -110,10 +110,10 @@ function oracle_get_gas_price( oracleOpts, details ) { await joCall.call( joIn, async function( joIn, joOut, err ) { if( err ) { if( isVerboseTraceDetails ) { - details.write( cc.fatal( "CRITICAL ORACLE CALL ERROR:" ) + cc.error( " JSON RPC call" ) + cc.debug( "(" ) + cc.attention( "oracle_submitRequest" ) + cc.normal( ")" ) + cc.error( " failed, error: " ) + cc.warning( err.toString() ) + "\n" ); + details.write( cc.fatal( "CRITICAL ORACLE CALL ERROR:" ) + cc.error( " JSON RPC call" ) + cc.debug( "(" ) + cc.attention( "oracle_submitRequest" ) + cc.normal( ")" ) + cc.error( " failed, error: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n" ); details.write( err.stack + "\n" ); } - reject( new Error( "CRITICAL ORACLE CALL ERROR: JSON RPC call(oracle_submitRequest) failed, error: " + err.toString() ) ); + reject( new Error( "CRITICAL ORACLE CALL ERROR: JSON RPC call(oracle_submitRequest) failed, error: " + owaspUtil.extract_error_message( err ) ) ); return; } if( isVerboseTraceDetails ) @@ -140,10 +140,10 @@ function oracle_get_gas_price( oracleOpts, details ) { await joCall.call( joIn, async function( joIn, joOut, err ) { if( err ) { if( isVerboseTraceDetails ) { - details.write( cc.fatal( "CRITICAL ORACLE CALL ERROR:" ) + cc.error( " JSON RPC call" ) + cc.debug( "(" ) + cc.attention( "oracle_checkResult" ) + cc.normal( ")" ) + cc.error( " failed, error: " ) + cc.warning( err.toString() ) + "\n" ); + details.write( cc.fatal( "CRITICAL ORACLE CALL ERROR:" ) + cc.error( " JSON RPC call" ) + cc.debug( "(" ) + cc.attention( "oracle_checkResult" ) + cc.normal( ")" ) + cc.error( " failed, error: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n" ); details.write( err.stack + "\n" ); } - //reject( new Error( "CRITICAL ORACLE CALL ERROR: JSON RPC call(oracle_checkResult) failed, error: " + err.toString() ) ); + //reject( new Error( "CRITICAL ORACLE CALL ERROR: JSON RPC call(oracle_checkResult) failed, error: " + owaspUtil.extract_error_message( err ) ) ); return; } if( isVerboseTraceDetails ) @@ -166,7 +166,7 @@ function oracle_get_gas_price( oracleOpts, details ) { return; } ); } catch ( err ) { - details.write( cc.fatal( "CRITICAL ORACLE CALL ERROR:" ) + cc.error( " RPC call" ) + cc.normal( "(" ) + cc.attention( "oracle_checkResult" ) + cc.normal( ")" ) + cc.error( " exception is: " ) + cc.warning( err.toString() ) + "\n" ); + details.write( cc.fatal( "CRITICAL ORACLE CALL ERROR:" ) + cc.error( " RPC call" ) + cc.normal( "(" ) + cc.attention( "oracle_checkResult" ) + cc.normal( ")" ) + cc.error( " exception is: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n" ); details.write( err.stack + "\n" ); reject( err ); return; @@ -177,14 +177,14 @@ function oracle_get_gas_price( oracleOpts, details ) { return; } ); } catch ( err ) { - details.write( cc.fatal( "CRITICAL ORACLE CALL ERROR:" ) + cc.error( " RPC call" ) + cc.normal( "(" ) + cc.attention( "oracle_submitRequest" ) + cc.normal( ")" ) + cc.error( " exception is: " ) + cc.warning( err.toString() ) + "\n" ); + details.write( cc.fatal( "CRITICAL ORACLE CALL ERROR:" ) + cc.error( " RPC call" ) + cc.normal( "(" ) + cc.attention( "oracle_submitRequest" ) + cc.normal( ")" ) + cc.error( " exception is: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n" ); details.write( err.stack + "\n" ); reject( err ); return; } } ); } catch ( err ) { - details.write( cc.fatal( "CRITICAL ORACLE CALL ERROR:" ) + cc.error( " RPC call object creation failed, error is: " ) + cc.warning( err.toString() ) + "\n" ); + details.write( cc.fatal( "CRITICAL ORACLE CALL ERROR:" ) + cc.error( " RPC call object creation failed, error is: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n" ); details.write( err.stack + "\n" ); reject( err ); return; diff --git a/npms/skale-ima/index.js b/npms/skale-ima/index.js index d8b3755be..aa759c4f1 100644 --- a/npms/skale-ima/index.js +++ b/npms/skale-ima/index.js @@ -192,7 +192,7 @@ async function get_web3_blockNumber( details, cntAttempts, w3, retValOnFail, thr cc.error( "Failed call attempt " ) + cc.info( idxAttempt ) + cc.error( " to " ) + cc.note( strFnName + "()" ) + cc.error( " via " ) + cc.u( u ) + - cc.error( ", error is: " ) + cc.warning( err.toString() ) + + cc.error( ", error is: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n" ); } ++ idxAttempt; @@ -222,7 +222,7 @@ async function get_web3_blockNumber( details, cntAttempts, w3, retValOnFail, thr cc.error( "Failed call attempt " ) + cc.info( idxAttempt ) + cc.error( " to " ) + cc.note( strFnName + "()" ) + cc.error( " via " ) + cc.u( u ) + - cc.error( ", error is: " ) + cc.warning( err.toString() ) + + cc.error( ", error is: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n" ); } ++ idxAttempt; @@ -257,7 +257,7 @@ async function get_web3_transactionCount( details, cntAttempts, w3, address, par cc.error( "Failed call attempt " ) + cc.info( idxAttempt ) + cc.error( " to " ) + cc.note( strFnName + "()" ) + cc.error( " via " ) + cc.u( u ) + - cc.error( ", error is: " ) + cc.warning( err.toString() ) + + cc.error( ", error is: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n" ); } ++ idxAttempt; @@ -287,7 +287,7 @@ async function get_web3_transactionCount( details, cntAttempts, w3, address, par cc.error( "Failed call attempt " ) + cc.info( idxAttempt ) + cc.error( " to " ) + cc.note( strFnName + "()" ) + cc.error( " via " ) + cc.u( u ) + - cc.error( ", error is: " ) + cc.warning( err.toString() ) + + cc.error( ", error is: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n" ); } ++ idxAttempt; @@ -322,7 +322,7 @@ async function get_web3_transactionReceipt( details, cntAttempts, w3, txHash, re cc.error( "Failed call attempt " ) + cc.info( idxAttempt ) + cc.error( " to " ) + cc.note( strFnName + "()" ) + cc.error( " via " ) + cc.u( u ) + - cc.error( ", error is: " ) + cc.warning( err.toString() ) + + cc.error( ", error is: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n" ); } ++ idxAttempt; @@ -352,7 +352,7 @@ async function get_web3_transactionReceipt( details, cntAttempts, w3, txHash, re cc.error( "Failed call attempt " ) + cc.info( idxAttempt ) + cc.error( " to " ) + cc.note( strFnName + "()" ) + cc.error( " via " ) + cc.u( u ) + - cc.error( ", error is: " ) + cc.warning( err.toString() ) + + cc.error( ", error is: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n" ); } ++ idxAttempt; @@ -393,9 +393,9 @@ async function get_web3_pastEvents( details, w3, cntAttempts, joContract, strEve cc.error( " to " ) + cc.note( strFnName + "()" ) + cc.error( " via " ) + cc.u( u ) + cc.error( ", from block " ) + cc.warning( nBlockFrom ) + cc.error( ", to block " ) + cc.warning( nBlockTo ) + - cc.error( ", error is: " ) + cc.warning( err.toString() ) + + cc.error( ", error is: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n" ); - if( err.toString().indexOf( strErrorTextAboutNotExistingEvent ) >= 0 ) { + if( owaspUtil.extract_error_message( err ).indexOf( strErrorTextAboutNotExistingEvent ) >= 0 ) { details.write( cc.error( "Did stopped calls to " ) + cc.note( strFnName + "()" ) + cc.error( " because event " ) + cc.notice( strEventName ) + @@ -439,9 +439,9 @@ async function get_web3_pastEvents( details, w3, cntAttempts, joContract, strEve cc.error( " to " ) + cc.note( strFnName + "()" ) + cc.error( " via " ) + cc.u( u ) + cc.error( ", from block " ) + cc.warning( nBlockFrom ) + cc.error( ", to block " ) + cc.warning( nBlockTo ) + - cc.error( ", error is: " ) + cc.warning( err.toString() ) + + cc.error( ", error is: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n" ); - if( err.toString().indexOf( strErrorTextAboutNotExistingEvent ) >= 0 ) { + if( owaspUtil.extract_error_message( err ).indexOf( strErrorTextAboutNotExistingEvent ) >= 0 ) { details.write( cc.error( "Did stopped calls to " ) + cc.note( strFnName + "()" ) + cc.error( " because event " ) + cc.notice( strEventName ) + @@ -552,7 +552,7 @@ async function get_web3_pastEventsIterative( details, w3, attempts, joContract, cc.error( "Got scan error during interative scan of " ) + cc.info( idxBlockSubRangeFrom ) + cc.error( "/" ) + cc.info( idxBlockSubRangeTo ) + cc.error( " block sub-range in " ) + cc.info( nBlockFrom ) + cc.error( "/" ) + cc.info( nBlockTo ) + - cc.error( " block range, error is: " ) + cc.warning( err.toString() ) + "\n" + cc.error( " block range, error is: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n" ); } idxBlockSubRangeFrom = idxBlockSubRangeTo; @@ -721,7 +721,7 @@ async function do_oracle_gas_price_setup( details.write( cc.error( "Failed to fetch " ) + cc.info( "Main Net gas price" ) + cc.error( " via call to " ) + cc.info( "Oracle" ) + - cc.error( ", error is: " ) + cc.warning( err.toString() ) + "\n" ); + cc.error( ", error is: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n" ); } } if( gasPriceOnMainNet === null ) { @@ -1141,8 +1141,8 @@ async function dry_run_call( details, w3, methodWithArguments, joAccount, strDRC details.write( strLogPrefix + cc.fatal( "CRITICAL DRY RUN FAIL" ) + " " + cc.error( " invoking the " ) + cc.info( strMethodName ) + cc.error( " method: " ) + - cc.warning( err.toString() ) + "\n" ); - return "CRITICAL DRY RUN FAIL invoking the \"" + strMethodName + "\" method: " + err.toString(); + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n" ); + return "CRITICAL DRY RUN FAIL invoking the \"" + strMethodName + "\" method: " + owaspUtil.extract_error_message( err ); } } return null; @@ -1418,7 +1418,7 @@ async function safe_sign_transaction_with_account( details, w3, tx, rawTx, joAcc strMsg = cc.fatal( "BAD ERROR:" ) + " " + cc.error( "TM - transaction was not sent, underlying error is: " ) + - cc.warning( err.toString() ); + cc.warning( owaspUtil.extract_error_message( err ) ); details.write( strPrefixDetails + strMsg + "\n" ); log.write( strPrefixLog + strMsg + "\n" ); // throw err; @@ -5673,7 +5673,7 @@ async function do_transfer( ++ cntFailedNodes; const strError = strLogPrefix + cc.fatal( strDirection + " message analysis error:" ) + " " + cc.error( "Failed to scan events on node " ) + cc.info( jo_node.name ) + - cc.error( ", error is: " ) + cc.warning( err.toString() ) + + cc.error( ", error is: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + cc.error( ", detailed node description is: " ) + cc.j( jo_node ) + "\n"; details.write( strError ); @@ -5716,7 +5716,7 @@ async function do_transfer( cc.error( "Failed to process events for " ) + cc.sunny( strDirection ) + cc.error( " message " ) + cc.info( idxMessage + 1 ) + cc.error( " on node " ) + cc.info( jo_node.name ) + cc.success( " using URL " ) + cc.info( jo_node.http_endpoint_ip ) + - cc.debug( ", error is: " ) + cc.warning( err.toString() ) + "\n"; + cc.debug( ", error is: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n"; details.write( strError ); if( verbose_get() >= RV_VERBOSE.fatal ) log.write( strError ); @@ -5970,7 +5970,7 @@ async function do_transfer( } ); // fn_sign_messages } catch ( err ) { const strError = strLogPrefix + cc.fatal( "CRITICAL ERROR:" ) + - cc.error( " Exception from sigining messages function: " ) + cc.error( err.toString() ); + cc.error( " Exception from sigining messages function: " ) + cc.error( owaspUtil.extract_error_message( err ) ); log.write( strError + "\n" ); details.write( strError + "\n" ); if( detailsB ) diff --git a/npms/skale-observer/observer.js b/npms/skale-observer/observer.js index 62fb0faf0..516e2e2ca 100644 --- a/npms/skale-observer/observer.js +++ b/npms/skale-observer/observer.js @@ -70,7 +70,7 @@ function getWeb3FromURL( strURL, log ) { } catch ( err ) { log.write( cc.fatal( "CRITICAL ERROR:" ) + cc.error( " Failed to create " ) + cc.attention( "Web3" ) + cc.error( " connection to " ) + cc.info( strURL ) + - cc.error( ": " ) + cc.warning( err.toString() ) ); + cc.error( ": " ) + cc.warning( owaspUtil.extract_error_message( err ) ) ); w3 = null; } return w3; @@ -310,7 +310,7 @@ async function load_schains_connected_only( w3_main_net, w3_s_chain, strChainNam arr_schains.push( jo_schain ); } catch ( err ) { if( opts && opts.details ) { - opts.details.write( cc.error( "Got error: " ) + cc.warning( err.toString() ) + "\n" ); + opts.details.write( cc.error( "Got error: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n" ); opts.details.write( err.stack ); } } @@ -346,7 +346,7 @@ async function check_connected_schains( strChainNameConnectedTo, arr_schains, ad } } catch ( err ) { if( opts && opts.details ) { - opts.details.write( cc.error( "Got error: " ) + cc.warning( err.toString() ) + "\n" ); + opts.details.write( cc.error( "Got error: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n" ); opts.details.write( err.stack ); } } @@ -458,7 +458,7 @@ async function cache_schains( strChainNameConnectedTo, w3_main_net, w3_s_chain, if( opts.fn_chache_changed ) opts.fn_chache_changed( g_arr_schains_cached, null ); // null - no error } catch ( err ) { - strError = err.toString(); + strError = owaspUtil.extract_error_message( err ); if( ! strError ) strError = "unknown exception during S-Chains download"; if( opts.fn_chache_changed ) @@ -614,7 +614,7 @@ async function discover_chain_id( strURL ) { const rpcCallOpts = null; await rpcCall.create( strURL, rpcCallOpts, async function( joCall, err ) { if( err ) { - //ret = "Failed to create RPC (" + strURL + ") call: " + err.toString(); + //ret = "Failed to create RPC (" + strURL + ") call: " + owaspUtil.extract_error_message( err ); return; } await joCall.call( { @@ -622,7 +622,7 @@ async function discover_chain_id( strURL ) { "params": [] }, async function( joIn, joOut, err ) { if( err ) { - //ret = "Failed to query RPC (" + strURL + ") for chain ID: " + err.toString(); + //ret = "Failed to query RPC (" + strURL + ") for chain ID: " + owaspUtil.extract_error_message( err ); return; } if( ! ( "result" in joOut && joOut.result ) ) { diff --git a/npms/skale-owasp/owasp-util.js b/npms/skale-owasp/owasp-util.js index 6e2e7cd92..39963c7d2 100644 --- a/npms/skale-owasp/owasp-util.js +++ b/npms/skale-owasp/owasp-util.js @@ -625,6 +625,33 @@ function w3_2_url( w3 ) { ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +function extract_error_message( jo, strDefaultErrorText ) { + strDefaultErrorText = strDefaultErrorText || "unknown error or error without a description"; + try { + if( ! jo ) + return strDefaultErrorText; + if( typeof jo != "object" ) + return strDefaultErrorText; + if( "error" in jo ) { + jo = jo.error; + if( typeof jo == "string" ) + return jo; + if( typeof jo != "object" ) + return strDefaultErrorText + "(" + jo.toString() + ")"; + } + if( "message" in jo ) { + jo = jo.message; + if( typeof jo == "string" ) + return jo; + } + strDefaultErrorText += "(" + jo.toString() + ")"; + } catch ( err ) { + } + return strDefaultErrorText; +} + +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// module.exports = { cc: cc, w3mod: w3mod, @@ -667,5 +694,6 @@ module.exports = { fn_address_impl_: fn_address_impl_, compute_chain_id_from_schain_name: compute_chain_id_from_schain_name, w3provider_2_url: w3provider_2_url, - w3_2_url: w3_2_url + w3_2_url: w3_2_url, + extract_error_message: extract_error_message }; // module.exports From 6c616cf01d85b4a3313d02e966c0745cee1ae2c1 Mon Sep 17 00:00:00 2001 From: Sergiy Lavrynenko Date: Fri, 30 Sep 2022 13:01:45 +0100 Subject: [PATCH 005/257] transient commit, working on JS only IMA agent --- agent/bls.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/agent/bls.js b/agent/bls.js index 7d185a77d..3b8d607b0 100644 --- a/agent/bls.js +++ b/agent/bls.js @@ -1681,7 +1681,7 @@ async function handle_skale_call_via_redirect( joCallData ) { async function handle_skale_imaVerifyAndSign( joCallData ) { const strLogPrefix = ""; const details = log.createMemoryStream( true ); - let joRetVal = { }; + const joRetVal = { }; let isSuccess = false; try { // @@ -1697,7 +1697,7 @@ async function handle_skale_imaVerifyAndSign( joCallData ) { details.write( strLogPrefix + cc.debug( "Message hash to sign is " ) + cc.info( strMessageHash ) + "\n" ); // const strURL = imaState.joAccount_s_chain.strSgxURL - ? imaState.joAccount_s_chain.strSgxURL + ? imaState.joAccount_s_chain.strSgxURL : imaState.joAccount_main_net.strSgxURL; if( ! strURL ) throw new Error( "SGX URL is unknown, cannot verify IMA message(s)" ); From 50fa39b5dece2a6b3b33f1ca56edb43c83450b0f Mon Sep 17 00:00:00 2001 From: Sergiy Lavrynenko Date: Mon, 3 Oct 2022 18:58:40 +0100 Subject: [PATCH 006/257] transient commit, working on JS only IMA agent --- agent/bls.js | 39 +++++++++++------- agent/cli.js | 35 ++++++++++++++++ agent/main.js | 72 ++++++++++++++++++++++++--------- npms/skale-observer/observer.js | 6 ++- test/agent-test.js | 9 +++-- 5 files changed, 124 insertions(+), 37 deletions(-) diff --git a/agent/bls.js b/agent/bls.js index 3b8d607b0..c2c5fa614 100644 --- a/agent/bls.js +++ b/agent/bls.js @@ -23,7 +23,7 @@ * @copyright SKALE Labs 2019-Present */ -// const fs = require( "fs" ); +const fs = require( "fs" ); // const path = require( "path" ); // const url = require( "url" ); // const os = require( "os" ); @@ -1261,7 +1261,9 @@ async function do_sign_messages_impl( } ); } } catch ( err ) { - const strErrorMessage = cc.error( "Failed BLS sign due to generic flow exception: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n"; + const strErrorMessage = + cc.error( "Failed BLS sign due to generic flow exception: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + + cc.error( ", call stack is: " ) + "\n" + err.stack() + "\n"; log.write( strErrorMessage ); if( details ) details.write( strErrorMessage ); @@ -1696,17 +1698,26 @@ async function handle_skale_imaVerifyAndSign( joCallData ) { const strMessageHash = owaspUtils.remove_starting_0x( keccak256_message( jarrMessages, nIdxCurrentMsgBlockStart, strFromChainName ) ); details.write( strLogPrefix + cc.debug( "Message hash to sign is " ) + cc.info( strMessageHash ) + "\n" ); // - const strURL = imaState.joAccount_s_chain.strSgxURL - ? imaState.joAccount_s_chain.strSgxURL - : imaState.joAccount_main_net.strSgxURL; - if( ! strURL ) - throw new Error( "SGX URL is unknown, cannot verify IMA message(s)" ); - const keyShareName = imaState.joAccount_s_chain.strSgxKeyName; - if( ! strURL ) - throw new Error( "SGX keyshare name is unknown, cannot verify IMA message(s)" ); + let joAccount = imaState.joAccount_s_chain; + if( ! joAccount.strURL ) { + joAccount = imaState.joAccount_main_net; + if( ! joAccount.strSgxURL ) + throw new Error( "SGX URL is unknown, cannot verify IMA message(s)" ); + if( ! joAccount.strBlsKeyName ) + throw new Error( "BLS keys name is unknown, cannot sign IMA message(s)" ); + } + let rpcCallOpts = null; + if( "strPathSslKey" in joAccount && typeof joAccount.strPathSslKey == "string" && joAccount.strPathSslKey.length > 0 && + "strPathSslCert" in joAccount && typeof joAccount.strPathSslCert == "string" && joAccount.strPathSslCert.length > 0 + ) { + rpcCallOpts = { + "cert": fs.readFileSync( joAccount.strPathSslCert, "utf8" ), + "key": fs.readFileSync( joAccount.strPathSslKey, "utf8" ) + }; + // details.write( cc.debug( "Will sign via SGX with SSL options " ) + cc.j( rpcCallOpts ) + "\n" ); + } const signerIndex = imaState.joAccount_s_chain.nNodeNumber; - const rpcCallOpts = null; - await rpcCall.create( strURL, rpcCallOpts, async function( joCall, err ) { + await rpcCall.create( joAccount.strSgxURL, rpcCallOpts, async function( joCall, err ) { if( err ) { const strErrorMessage = strLogPrefix + cc.fatal( "CRITICAL ERROR:" ) + @@ -1719,11 +1730,11 @@ async function handle_skale_imaVerifyAndSign( joCallData ) { method: "blsSignMessageHash", // type: "BLSSignReq", params: { - keyShareName: keyShareName, + keyShareName: joAccount.strBlsKeyName, messageHash: strMessageHash, n: nParticipants, t: nThreshold, - signerIndex: signerIndex + 1 // 1-based + signerIndex: signerIndex + 0 // 1-based } }; details.write( strLogPrefix + cc.debug( "Will invoke " ) + cc.info( "SGX" ) + cc.debug( " with call data " ) + cc.j( joCallSGX ) + "\n" ); diff --git a/agent/cli.js b/agent/cli.js index b721a48c6..60d6e4f65 100644 --- a/agent/cli.js +++ b/agent/cli.js @@ -241,6 +241,9 @@ function parse( joExternalHandlers, argv ) { console.log( soi + cc.debug( "--" ) + cc.bright( "sgx-ecdsa-key-main-net" ) + cc.sunny( "=" ) + cc.error( "name" ) + cc.debug( "..." ) + cc.attention( "SGX/ECDSA key name" ) + cc.notice( " for " ) + cc.note( "Main-net" ) + cc.notice( ". Value is automatically loaded from the " ) + cc.warning( "SGX_KEY_ETHEREUM" ) + cc.notice( " environment variable if not specified." ) ); console.log( soi + cc.debug( "--" ) + cc.bright( "sgx-ecdsa-key-s-chain" ) + cc.sunny( "=" ) + cc.error( "name" ) + cc.debug( "...." ) + cc.attention( "SGX/ECDSA key name" ) + cc.notice( " for " ) + cc.note( "S-chain" ) + cc.notice( ". Value is automatically loaded from the " ) + cc.warning( "SGX_KEY_S_CHAIN" ) + cc.notice( " environment variable if not specified." ) ); console.log( soi + cc.debug( "--" ) + cc.bright( "sgx-ecdsa-key-t-chain" ) + cc.sunny( "=" ) + cc.error( "name" ) + cc.debug( "...." ) + cc.attention( "SGX/ECDSA key name" ) + cc.notice( " for " ) + cc.note( "S<->S Target S-chain" ) + cc.notice( ". Value is automatically loaded from the " ) + cc.warning( "SGX_KEY_S_CHAIN_TARGET" ) + cc.notice( " environment variable if not specified." ) ); + console.log( soi + cc.debug( "--" ) + cc.bright( "sgx-bls-key-main-net" ) + cc.sunny( "=" ) + cc.error( "name" ) + cc.debug( "....." ) + cc.attention( "SGX/BLS key name" ) + cc.notice( " for " ) + cc.note( "Main-net" ) + cc.notice( ". Value is automatically loaded from the " ) + cc.warning( "BLS_KEY_ETHEREUM" ) + cc.notice( " environment variable if not specified." ) ); + console.log( soi + cc.debug( "--" ) + cc.bright( "sgx-bls-key-s-chain" ) + cc.sunny( "=" ) + cc.error( "name" ) + cc.debug( "......" ) + cc.attention( "SGX/BLS key name" ) + cc.notice( " for " ) + cc.note( "S-chain" ) + cc.notice( ". Value is automatically loaded from the " ) + cc.warning( "BLS_KEY_S_CHAIN" ) + cc.notice( " environment variable if not specified." ) ); + console.log( soi + cc.debug( "--" ) + cc.bright( "sgx-bls-key-t-chain" ) + cc.sunny( "=" ) + cc.error( "name" ) + cc.debug( "......" ) + cc.attention( "SGX/BLS key name" ) + cc.notice( " for " ) + cc.note( "S<->S Target S-chain" ) + cc.notice( ". Value is automatically loaded from the " ) + cc.warning( "BLS_KEY_S_CHAIN_TARGET" ) + cc.notice( " environment variable if not specified." ) ); // console.log( soi + cc.debug( "--" ) + cc.bright( "sgx-ssl-key-main-net" ) + cc.sunny( "=" ) + cc.attention( "path" ) + cc.debug( "....." ) + cc.notice( "Path to " ) + cc.note( "SSL key file" ) + cc.notice( " for " ) + cc.bright( "SGX wallet" ) + cc.notice( " of " ) + cc.note( "Main-net" ) + cc.notice( ". Value is automatically loaded from the " ) + cc.warning( "SGX_SSL_KEY_FILE_ETHEREUM" ) + cc.notice( " environment variable if not specified." ) ); console.log( soi + cc.debug( "--" ) + cc.bright( "sgx-ssl-key-s-chain" ) + cc.sunny( "=" ) + cc.attention( "path" ) + cc.debug( "......" ) + cc.notice( "Path to " ) + cc.note( "SSL key file" ) + cc.notice( " for " ) + cc.bright( "SGX wallet" ) + cc.notice( " of " ) + cc.note( "S-chain" ) + cc.notice( ". Value is automatically loaded from the " ) + cc.warning( "SGX_SSL_KEY_FILE_S_CHAIN" ) + cc.notice( " environment variable if not specified." ) ); @@ -584,6 +587,21 @@ function parse( joExternalHandlers, argv ) { imaState.joAccount_t_chain.strSgxKeyName = joArg.value; continue; } + if( joArg.name == "sgx-bls-key-main-net" ) { + owaspUtils.verifyArgumentWithNonEmptyValue( joArg ); + imaState.joAccount_main_net.strBlsKeyName = joArg.value; + continue; + } + if( joArg.name == "sgx-bls-key-s-chain" ) { + owaspUtils.verifyArgumentWithNonEmptyValue( joArg ); + imaState.joAccount_s_chain.strBlsKeyName = joArg.value; + continue; + } + if( joArg.name == "sgx-bls-key-t-chain" ) { + owaspUtils.verifyArgumentWithNonEmptyValue( joArg ); + imaState.joAccount_t_chain.strBlsKeyName = joArg.value; + continue; + } // if( joArg.name == "sgx-ssl-key-main-net" ) { owaspUtils.verifyArgumentIsPathToExistingFile( joArg ); @@ -2100,6 +2118,23 @@ function ima_common_init() { try { ensure_have_chain_credentials( "S<->S Target S-Chain", imaState.joAccount_t_chain, false, isPrintGathered && isPrintSecurityValues ); } catch ( err ) {} + if( isPrintGathered && isPrintSecurityValues ) { + if( imaState.joAccount_main_net.strBlsKeyName ) { + ensure_have_value( "BLS/Main Net key name", imaState.joAccount_main_net.strBlsKeyName, false, isPrintGathered, null, ( x ) => { + return cc.attention( x ); + } ); + } + if( imaState.joAccount_s_chain.strBlsKeyName ) { + ensure_have_value( "BLS/S-Chain key name", imaState.joAccount_s_chain.strBlsKeyName, false, isPrintGathered, null, ( x ) => { + return cc.attention( x ); + } ); + } + if( imaState.joAccount_t_chain.strBlsKeyName ) { + ensure_have_value( "BLS/Target S-Chain key name", imaState.joAccount_t_chain.strBlsKeyName, false, isPrintGathered, null, ( x ) => { + return cc.attention( x ); + } ); + } + } // // ensure_have_value( "Amount of wei to transfer", imaState.nAmountOfWei, false, isPrintGathered, null, ( x ) => { diff --git a/agent/main.js b/agent/main.js index cd1cd70fa..e5ea1ed91 100644 --- a/agent/main.js +++ b/agent/main.js @@ -224,7 +224,8 @@ global.imaState = { "strSgxURL": owaspUtils.toStringURL( process.env.SGX_URL_ETHEREUM ), "strSgxKeyName": owaspUtils.toStringURL( process.env.SGX_KEY_ETHEREUM ), "strPathSslKey": ( process.env.SGX_SSL_KEY_FILE_ETHEREUM || "" ).toString().trim(), - "strPathSslCert": ( process.env.SGX_SSL_CERT_FILE_ETHEREUM || "" ).toString().trim() + "strPathSslCert": ( process.env.SGX_SSL_CERT_FILE_ETHEREUM || "" ).toString().trim(), + "strBlsKeyName": owaspUtils.toStringURL( process.env.BLS_KEY_ETHEREUM ) }, "joAccount_s_chain": { "privateKey": owaspUtils.toEthPrivateKey( process.env.PRIVATE_KEY_FOR_SCHAIN ), @@ -234,7 +235,8 @@ global.imaState = { "strSgxURL": owaspUtils.toStringURL( process.env.SGX_URL_S_CHAIN ), "strSgxKeyName": owaspUtils.toStringURL( process.env.SGX_KEY_S_CHAIN ), "strPathSslKey": ( process.env.SGX_SSL_KEY_FILE_S_CHAIN || "" ).toString().trim(), - "strPathSslCert": ( process.env.SGX_SSL_CERT_FILE_S_CHAIN || "" ).toString().trim() + "strPathSslCert": ( process.env.SGX_SSL_CERT_FILE_S_CHAIN || "" ).toString().trim(), + "strBlsKeyName": owaspUtils.toStringURL( process.env.BLS_KEY_S_CHAIN ) }, "joAccount_t_chain": { "privateKey": owaspUtils.toEthPrivateKey( process.env.PRIVATE_KEY_FOR_SCHAIN_TARGET ), @@ -244,7 +246,8 @@ global.imaState = { "strSgxURL": owaspUtils.toStringURL( process.env.SGX_URL_S_CHAIN_TARGET ), "strSgxKeyName": owaspUtils.toStringURL( process.env.SGX_KEY_S_CHAIN_TARGET ), "strPathSslKey": ( process.env.SGX_SSL_KEY_FILE_S_CHAIN_TARGET || "" ).toString().trim(), - "strPathSslCert": ( process.env.SGX_SSL_CERT_FILE_S_CHAIN_TARGET || "" ).toString().trim() + "strPathSslCert": ( process.env.SGX_SSL_CERT_FILE_S_CHAIN_TARGET || "" ).toString().trim(), + "strBlsKeyName": owaspUtils.toStringURL( process.env.BLS_KEY_T_CHAIN ) }, // @@ -2231,12 +2234,13 @@ if( imaState.nJsonRpcPort > 0 ) { const ip = req.socket.remoteAddress; if( IMA.verbose_get() >= IMA.RV_VERBOSE.trace ) log.write( strLogPrefix + cc.normal( "New connection from " ) + cc.info( ip ) + "\n" ); - ws_peer.on( "message", async function( message ) { - let joAnswer = { + ws_peer.on( "message", function( message ) { + const joAnswer = { method: null, id: null, error: null }; + let isSkipMode = false; try { const joMessage = JSON.parse( message ); if( IMA.verbose_get() >= IMA.RV_VERBOSE.trace ) @@ -2261,10 +2265,40 @@ if( imaState.nJsonRpcPort > 0 ) { // joAnswer.schain_network_info = imaState.joSChainNetworkInfo; // break; case "skale_imaVerifyAndSign": - joAnswer = await imaBLS.handle_skale_imaVerifyAndSign( joMessage ); + // joAnswer = await imaBLS.handle_skale_imaVerifyAndSign( joMessage ); + isSkipMode = true; + imaBLS.handle_skale_imaVerifyAndSign( joMessage ).then( function( joAnswer ) { + try { + if( IMA.verbose_get() >= IMA.RV_VERBOSE.trace ) + log.write( strLogPrefix + cc.sunny( ">>>" ) + " " + cc.normal( "answer to " ) + cc.info( ip ) + cc.normal( ": " ) + cc.j( joAnswer ) + "\n" ); + ws_peer.send( JSON.stringify( joAnswer ) ); + } catch ( err ) { + if( IMA.verbose_get() >= IMA.RV_VERBOSE.error ) { + log.write( strLogPrefix + + cc.error( "Failed to sent answer to " ) + cc.info( ip ) + + cc.error( ", error is: " ) + cc.warning( err ) + "\n" + ); + } + } + } ); break; case "skale_imaBSU256": - joAnswer = await imaBLS.handle_skale_imaBSU256( joMessage ); + // joAnswer = await imaBLS.handle_skale_imaBSU256( joMessage ); + isSkipMode = true; + imaBLS.handle_skale_imaBSU256( joMessage ).then( function( joAnswer ) { + try { + if( IMA.verbose_get() >= IMA.RV_VERBOSE.trace ) + log.write( strLogPrefix + cc.sunny( ">>>" ) + " " + cc.normal( "answer to " ) + cc.info( ip ) + cc.normal( ": " ) + cc.j( joAnswer ) + "\n" ); + ws_peer.send( JSON.stringify( joAnswer ) ); + } catch ( err ) { + if( IMA.verbose_get() >= IMA.RV_VERBOSE.error ) { + log.write( strLogPrefix + + cc.error( "Failed to sent answer to " ) + cc.info( ip ) + + cc.error( ", error is: " ) + cc.warning( err ) + "\n" + ); + } + } + } ); break; default: throw new Error( "Unknown method name \"" + joMessage.method + "\" was specified" ); @@ -2277,18 +2311,20 @@ if( imaState.nJsonRpcPort > 0 ) { ); } } - try { - if( IMA.verbose_get() >= IMA.RV_VERBOSE.trace ) - log.write( strLogPrefix + cc.sunny( ">>>" ) + " " + cc.normal( "answer to " ) + cc.info( ip ) + cc.normal( ": " ) + cc.j( joAnswer ) + "\n" ); - ws_peer.send( JSON.stringify( joAnswer ) ); - } catch ( err ) { - if( IMA.verbose_get() >= IMA.RV_VERBOSE.error ) { - log.write( strLogPrefix + - cc.error( "Failed to sent answer to " ) + cc.info( ip ) + - cc.error( ", error is: " ) + cc.warning( err ) + "\n" - ); + if( ! isSkipMode ) { + try { + if( IMA.verbose_get() >= IMA.RV_VERBOSE.trace ) + log.write( strLogPrefix + cc.sunny( ">>>" ) + " " + cc.normal( "answer to " ) + cc.info( ip ) + cc.normal( ": " ) + cc.j( joAnswer ) + "\n" ); + ws_peer.send( JSON.stringify( joAnswer ) ); + } catch ( err ) { + if( IMA.verbose_get() >= IMA.RV_VERBOSE.error ) { + log.write( strLogPrefix + + cc.error( "Failed to sent answer to " ) + cc.info( ip ) + + cc.error( ", error is: " ) + cc.warning( err ) + "\n" + ); + } } - } + } // if( ! isSkipMode ) } ); // ws_peer.send( "something" ); } ); diff --git a/npms/skale-observer/observer.js b/npms/skale-observer/observer.js index 516e2e2ca..f89f7bb99 100644 --- a/npms/skale-observer/observer.js +++ b/npms/skale-observer/observer.js @@ -540,7 +540,8 @@ async function ensure_have_worker( opts ) { "strSgxURL": opts.imaState.joAccount_main_net.strSgxURL, "strSgxKeyName": opts.imaState.joAccount_main_net.strSgxKeyName, "strPathSslKey": opts.imaState.joAccount_main_net.strPathSslKey, - "strPathSslCert": opts.imaState.joAccount_main_net.strPathSslCert + "strPathSslCert": opts.imaState.joAccount_main_net.strPathSslCert, + "strBlsKeyName": opts.imaState.joAccount_main_net.strBlsKeyName }, "joAccount_s_chain": { "privateKey": opts.imaState.joAccount_s_chain.privateKey, @@ -550,7 +551,8 @@ async function ensure_have_worker( opts ) { "strSgxURL": opts.imaState.joAccount_s_chain.strSgxURL, "strSgxKeyName": opts.imaState.joAccount_s_chain.strSgxKeyName, "strPathSslKey": opts.imaState.joAccount_s_chain.strPathSslKey, - "strPathSslCert": opts.imaState.joAccount_s_chain.strPathSslCert + "strPathSslCert": opts.imaState.joAccount_s_chain.strPathSslCert, + "strBlsKeyName": opts.imaState.joAccount_s_chain.strBlsKeyName }, // "tc_main_net": IMA.tc_main_net, // "tc_s_chain": IMA.tc_s_chain, diff --git a/test/agent-test.js b/test/agent-test.js index 810635e92..b45863221 100644 --- a/test/agent-test.js +++ b/test/agent-test.js @@ -187,7 +187,8 @@ global.imaState = { "strSgxURL": owaspUtils.toStringURL( process.env.SGX_URL_ETHEREUM ), "strSgxKeyName": owaspUtils.toStringURL( process.env.SGX_KEY_ETHEREUM ), "strPathSslKey": ( process.env.SGX_SSL_KEY_FILE_ETHEREUM || "" ).toString().trim(), - "strPathSslCert": ( process.env.SGX_SSL_CERT_FILE_ETHEREUM || "" ).toString().trim() + "strPathSslCert": ( process.env.SGX_SSL_CERT_FILE_ETHEREUM || "" ).toString().trim(), + "strBlsKeyName": owaspUtils.toStringURL( process.env.BLS_KEY_ETHEREUM ) }, "joAccount_s_chain": { "privateKey": owaspUtils.toEthPrivateKey( process.env.PRIVATE_KEY_FOR_SCHAIN ), @@ -196,7 +197,8 @@ global.imaState = { "strSgxURL": owaspUtils.toStringURL( process.env.SGX_URL_S_CHAIN ), "strSgxKeyName": owaspUtils.toStringURL( process.env.SGX_KEY_S_CHAIN ), "strPathSslKey": ( process.env.SGX_SSL_KEY_FILE_S_CHAIN || "" ).toString().trim(), - "strPathSslCert": ( process.env.SGX_SSL_CERT_FILE_S_CHAIN || "" ).toString().trim() + "strPathSslCert": ( process.env.SGX_SSL_CERT_FILE_S_CHAIN || "" ).toString().trim(), + "strBlsKeyName": owaspUtils.toStringURL( process.env.BLS_KEY_S_CHAIN ) }, "joAccount_t_chain": { "privateKey": owaspUtils.toEthPrivateKey( process.env.PRIVATE_KEY_FOR_SCHAIN_TARGET ), @@ -205,7 +207,8 @@ global.imaState = { "strSgxURL": owaspUtils.toStringURL( process.env.SGX_URL_S_CHAIN_TARGET ), "strSgxKeyName": owaspUtils.toStringURL( process.env.SGX_KEY_S_CHAIN_TARGET ), "strPathSslKey": ( process.env.SGX_SSL_KEY_FILE_S_CHAIN_TARGET || "" ).toString().trim(), - "strPathSslCert": ( process.env.SGX_SSL_CERT_FILE_S_CHAIN_TARGET || "" ).toString().trim() + "strPathSslCert": ( process.env.SGX_SSL_CERT_FILE_S_CHAIN_TARGET || "" ).toString().trim(), + "strBlsKeyName": owaspUtils.toStringURL( process.env.BLS_KEY_T_CHAIN ) }, // From b8f512f8209d3dd18b223056bd491ef7d4ec5930 Mon Sep 17 00:00:00 2001 From: Sergiy Lavrynenko Date: Mon, 3 Oct 2022 20:14:57 +0100 Subject: [PATCH 007/257] JS only IMA agent, first working version --- agent/bls.js | 24 +++++++-------------- agent/main.js | 59 ++++++++++++++++++--------------------------------- 2 files changed, 29 insertions(+), 54 deletions(-) diff --git a/agent/bls.js b/agent/bls.js index c2c5fa614..75bcddf4b 100644 --- a/agent/bls.js +++ b/agent/bls.js @@ -1097,7 +1097,7 @@ async function do_sign_messages_impl( ++joGatheringTracker.nCountErrors; } } catch ( err ) { - ++nCountErrors; + ++joGatheringTracker.nCountErrors; const strErrorMessage = strLogPrefix + cc.error( "S-Chain node " ) + strNodeDescColorized + " " + cc.fatal( "CRITICAL ERROR:" ) + cc.error( " signature fail from node " ) + cc.info( joNode.nodeID ) + @@ -1505,7 +1505,7 @@ async function do_sign_u256( u256, details, fn ) { ++joGatheringTracker.nCountErrors; } } catch ( err ) { - ++nCountErrors; + ++joGatheringTracker.nCountErrors; const strErrorMessage = strLogPrefix + cc.error( "S-Chain node " ) + strNodeDescColorized + " " + cc.fatal( "CRITICAL ERROR:" ) + cc.error( " signature fail from node " ) + cc.info( joNode.nodeID ) + @@ -1748,21 +1748,13 @@ async function handle_skale_imaVerifyAndSign( joCallData ) { throw new Error( "JSON RPC call to SGX failed, RPC call reported error: " + owaspUtil.extract_error_message( err ) ); } details.write( strLogPrefix + cc.debug( "Call to " ) + cc.info( "SGX" ) + cc.debug( " done, answer is: " ) + cc.j( joOut ) + "\n" ); - if( joOut.result == null || joOut.result == undefined || ( !typeof joOut.result == "object" ) ) { - const strErrorMessage = - strLogPrefix + cc.fatal( "Wallet CRITICAL ERROR:" ) + " " + - cc.error( "SGX reported wallet error: " ) + - cc.warning( owaspUtil.extract_error_message( joOut, "unknown wallet error(4)" ) ) + - cc.error( ", " ) + cc.notice( "sequence ID" ) + cc.error( " is " ) + cc.attention( sequence_id ) + - "\n"; - log.write( strErrorMessage ); - details.write( strErrorMessage ); - details.write( strErrorMessage ); - throw new Error( "JSON RPC call to SGX failed with \"unknown wallet error(4)\", sequence ID is " + sequence_id ); - } + let joSignResult = joOut; + if( joOut.result != null && joOut.result != undefined && typeof joOut.result == "object" ) + joSignResult = joOut.result; + if( joOut.signResult != null && joOut.signResult != undefined && typeof joOut.signResult == "object" ) + joSignResult = joOut.signResult; isSuccess = true; - const joSignResult = ( "result" in joOut ) ? joOut.result : joOut; - joRetVal.signResult = joSignResult; + joRetVal.result = { signResult: joSignResult }; if( "qa" in joCallData ) joRetVal.qa = joCallData.qa; } ); // joCall.call ... diff --git a/agent/main.js b/agent/main.js index e5ea1ed91..e35a15748 100644 --- a/agent/main.js +++ b/agent/main.js @@ -2251,6 +2251,22 @@ if( imaState.nJsonRpcPort > 0 ) { if( ! ( "id" in joMessage ) ) throw new Error( "\"id\" field was not specified" ); joAnswer.id = joMessage.id; + const fn_send_answer = function( joAnswer ) { + try { + joAnswer.method = joMessage.method; + joAnswer.id = joMessage.id; + if( IMA.verbose_get() >= IMA.RV_VERBOSE.trace ) + log.write( strLogPrefix + cc.sunny( ">>>" ) + " " + cc.normal( "answer to " ) + cc.info( ip ) + cc.normal( ": " ) + cc.j( joAnswer ) + "\n" ); + ws_peer.send( JSON.stringify( joAnswer ) ); + } catch ( err ) { + if( IMA.verbose_get() >= IMA.RV_VERBOSE.error ) { + log.write( strLogPrefix + + cc.error( "Failed to sent answer to " ) + cc.info( ip ) + + cc.error( ", error is: " ) + cc.warning( err ) + "\n" + ); + } + } + }; switch ( joMessage.method ) { case "echo": case "ping": @@ -2268,36 +2284,14 @@ if( imaState.nJsonRpcPort > 0 ) { // joAnswer = await imaBLS.handle_skale_imaVerifyAndSign( joMessage ); isSkipMode = true; imaBLS.handle_skale_imaVerifyAndSign( joMessage ).then( function( joAnswer ) { - try { - if( IMA.verbose_get() >= IMA.RV_VERBOSE.trace ) - log.write( strLogPrefix + cc.sunny( ">>>" ) + " " + cc.normal( "answer to " ) + cc.info( ip ) + cc.normal( ": " ) + cc.j( joAnswer ) + "\n" ); - ws_peer.send( JSON.stringify( joAnswer ) ); - } catch ( err ) { - if( IMA.verbose_get() >= IMA.RV_VERBOSE.error ) { - log.write( strLogPrefix + - cc.error( "Failed to sent answer to " ) + cc.info( ip ) + - cc.error( ", error is: " ) + cc.warning( err ) + "\n" - ); - } - } + fn_send_answer( joAnswer ); } ); break; case "skale_imaBSU256": // joAnswer = await imaBLS.handle_skale_imaBSU256( joMessage ); isSkipMode = true; imaBLS.handle_skale_imaBSU256( joMessage ).then( function( joAnswer ) { - try { - if( IMA.verbose_get() >= IMA.RV_VERBOSE.trace ) - log.write( strLogPrefix + cc.sunny( ">>>" ) + " " + cc.normal( "answer to " ) + cc.info( ip ) + cc.normal( ": " ) + cc.j( joAnswer ) + "\n" ); - ws_peer.send( JSON.stringify( joAnswer ) ); - } catch ( err ) { - if( IMA.verbose_get() >= IMA.RV_VERBOSE.error ) { - log.write( strLogPrefix + - cc.error( "Failed to sent answer to " ) + cc.info( ip ) + - cc.error( ", error is: " ) + cc.warning( err ) + "\n" - ); - } - } + fn_send_answer( joAnswer ); } ); break; default: @@ -2311,20 +2305,9 @@ if( imaState.nJsonRpcPort > 0 ) { ); } } - if( ! isSkipMode ) { - try { - if( IMA.verbose_get() >= IMA.RV_VERBOSE.trace ) - log.write( strLogPrefix + cc.sunny( ">>>" ) + " " + cc.normal( "answer to " ) + cc.info( ip ) + cc.normal( ": " ) + cc.j( joAnswer ) + "\n" ); - ws_peer.send( JSON.stringify( joAnswer ) ); - } catch ( err ) { - if( IMA.verbose_get() >= IMA.RV_VERBOSE.error ) { - log.write( strLogPrefix + - cc.error( "Failed to sent answer to " ) + cc.info( ip ) + - cc.error( ", error is: " ) + cc.warning( err ) + "\n" - ); - } - } - } // if( ! isSkipMode ) + if( ! isSkipMode ) + fn_send_answer( joAnswer ); + // if( ! isSkipMode ) } ); // ws_peer.send( "something" ); } ); From 2ca10469e870178cda172ecf89f26b3ecc519072 Mon Sep 17 00:00:00 2001 From: Sergiy Lavrynenko Date: Mon, 3 Oct 2022 20:24:32 +0100 Subject: [PATCH 008/257] transient commit, working on JS only IMA agent --- agent/bls.js | 98 ++++++++++++++++----------------- agent/cli.js | 4 +- agent/main.js | 2 +- agent/oracle.js | 18 +++--- npms/skale-ima/index.js | 36 ++++++------ npms/skale-observer/observer.js | 12 ++-- 6 files changed, 85 insertions(+), 85 deletions(-) diff --git a/agent/bls.js b/agent/bls.js index 75bcddf4b..406c3048b 100644 --- a/agent/bls.js +++ b/agent/bls.js @@ -46,7 +46,7 @@ async function with_timeout( strDescription, promise, seconds ) { let result_err = null, isComplete = false; promise.catch( function( err ) { isComplete = true; - result_err = new Error( strDescription + "error: " + owaspUtil.extract_error_message( err ) ); + result_err = new Error( strDescription + "error: " + owaspUtils.extract_error_message( err ) ); } ).finally( function() { isComplete = true; } ); @@ -363,7 +363,7 @@ function perform_bls_glue( // fnShellRestore(); } catch ( err ) { - const s1 = strLogPrefix + cc.fatal( "BLS glue CRITICAL ERROR:" ) + cc.error( " error description is: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n"; + const s1 = strLogPrefix + cc.fatal( "BLS glue CRITICAL ERROR:" ) + cc.error( " error description is: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n"; const s2 = strLogPrefix + cc.error( "BLS glue output is:\n" ) + cc.notice( strOutput ) + "\n"; log.write( s1 ); details.write( s1 ); @@ -462,7 +462,7 @@ function perform_bls_glue_u256( details, u256, arrSignResults ) { // fnShellRestore(); } catch ( err ) { - const s1 = strLogPrefix + cc.fatal( "BLS glue CRITICAL ERROR:" ) + cc.error( " error description is: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n"; + const s1 = strLogPrefix + cc.fatal( "BLS glue CRITICAL ERROR:" ) + cc.error( " error description is: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n"; const s2 = strLogPrefix + cc.error( "BLS glue output is:\n" ) + cc.notice( strOutput ) + "\n"; log.write( s1 ); details.write( s1 ); @@ -526,7 +526,7 @@ function perform_bls_verify_i( fnShellRestore(); return true; } catch ( err ) { - const s1 = strLogPrefix + cc.fatal( "CRITICAL ERROR:" ) + cc.error( " BLS node " ) + cc.notice( "#" ) + cc.info( nZeroBasedNodeIndex ) + cc.error( " verify error:" ) + cc.normal( " error description is: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n"; + const s1 = strLogPrefix + cc.fatal( "CRITICAL ERROR:" ) + cc.error( " BLS node " ) + cc.notice( "#" ) + cc.info( nZeroBasedNodeIndex ) + cc.error( " verify error:" ) + cc.normal( " error description is: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n"; const s2 = strLogPrefix + cc.error( "CRITICAL ERROR:" ) + cc.error( " BLS node " ) + cc.notice( "#" ) + cc.info( nZeroBasedNodeIndex ) + cc.error( " verify output is:\n" ) + cc.notice( strOutput ) + "\n"; log.write( s1 ); details.write( s1 ); @@ -575,7 +575,7 @@ function perform_bls_verify_i_u256( details, nZeroBasedNodeIndex, joResultFromNo fnShellRestore(); return true; } catch ( err ) { - const s1 = strLogPrefix + cc.fatal( "CRITICAL ERROR:" ) + cc.error( " BLS u256 node " ) + cc.notice( "#" ) + cc.info( nZeroBasedNodeIndex ) + cc.error( " verify error:" ) + cc.normal( " error description is: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n"; + const s1 = strLogPrefix + cc.fatal( "CRITICAL ERROR:" ) + cc.error( " BLS u256 node " ) + cc.notice( "#" ) + cc.info( nZeroBasedNodeIndex ) + cc.error( " verify error:" ) + cc.normal( " error description is: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n"; const s2 = strLogPrefix + cc.error( "CRITICAL ERROR:" ) + cc.error( " BLS u256 node " ) + cc.notice( "#" ) + cc.info( nZeroBasedNodeIndex ) + cc.error( " verify output is:\n" ) + cc.notice( strOutput ) + "\n"; log.write( s1 ); details.write( s1 ); @@ -644,7 +644,7 @@ function perform_bls_verify( fnShellRestore(); return true; } catch ( err ) { - const s1 = strLogPrefix + cc.fatal( "BLS/summary verify CRITICAL ERROR:" ) + cc.normal( " error description is: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n"; + const s1 = strLogPrefix + cc.fatal( "BLS/summary verify CRITICAL ERROR:" ) + cc.normal( " error description is: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n"; const s2 = strLogPrefix + cc.error( "BLS/summary verify output is:\n" ) + cc.notice( strOutput ) + "\n"; log.write( s1 ); details.write( s1 ); @@ -702,7 +702,7 @@ function perform_bls_verify_u256( details, joGlueResult, u256, joCommonPublicKey fnShellRestore(); return true; } catch ( err ) { - const s1 = strLogPrefix + cc.fatal( "BLS u256/summary verify CRITICAL ERROR:" ) + cc.normal( " error description is: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n"; + const s1 = strLogPrefix + cc.fatal( "BLS u256/summary verify CRITICAL ERROR:" ) + cc.normal( " error description is: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n"; const s2 = strLogPrefix + cc.error( "BLS u256/summary verify output is:\n" ) + cc.notice( strOutput ) + "\n"; log.write( s1 ); details.write( s1 ); @@ -786,7 +786,7 @@ async function check_correctness_of_messages_to_sign( details, strLogPrefix, str cc.error( " Correctness validation failed for message " ) + cc.info( idxMessage ) + cc.error( " sent to " ) + cc.info( joChainName ) + cc.error( ", message is: " ) + cc.j( joMessage ) + - cc.error( ", error information: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + + cc.error( ", error information: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n"; log.write( s ); details.write( s ); @@ -932,7 +932,7 @@ async function do_sign_messages_impl( const strErrorMessage = strLogPrefix + cc.fatal( "CRITICAL ERROR:" ) + cc.error( " JSON RPC call to S-Chain node " ) + strNodeDescColorized + - cc.error( " failed, RPC call was not created, error is: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + + cc.error( " failed, RPC call was not created, error is: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + cc.error( ", " ) + cc.notice( "sequence ID" ) + cc.error( " is " ) + cc.attention( sequence_id ) + "\n"; log.write( strErrorMessage ); @@ -993,7 +993,7 @@ async function do_sign_messages_impl( const strErrorMessage = strLogPrefix + cc.fatal( "CRITICAL ERROR:" ) + cc.error( " JSON RPC call to S-Chain node " ) + strNodeDescColorized + - cc.error( " failed, RPC call reported error: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + + cc.error( " failed, RPC call reported error: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + cc.error( ", " ) + cc.notice( "sequence ID" ) + cc.error( " is " ) + cc.attention( sequence_id ) + "\n"; log.write( strErrorMessage ); @@ -1015,7 +1015,7 @@ async function do_sign_messages_impl( strLogPrefix + cc.fatal( "Wallet CRITICAL ERROR:" ) + " " + cc.error( "S-Chain node " ) + strNodeDescColorized + cc.error( " reported wallet error: " ) + - cc.warning( owaspUtil.extract_error_message( joOut, "unknown wallet error(1)" ) ) + + cc.warning( owaspUtils.extract_error_message( joOut, "unknown wallet error(1)" ) ) + cc.error( ", " ) + cc.notice( "sequence ID" ) + cc.error( " is " ) + cc.attention( sequence_id ) + "\n"; log.write( strErrorMessage ); @@ -1070,7 +1070,7 @@ async function do_sign_messages_impl( const strErrorMessage = strLogPrefixA + cc.error( "S-Chain node " ) + strNodeDescColorized + cc.error( " sign " ) + cc.error( " CRITICAL ERROR:" ) + cc.error( " partial signature fail from with index " ) + cc.info( nZeroBasedNodeIndex ) + - cc.error( ", error is " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + + cc.error( ", error is " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + cc.error( ", " ) + cc.notice( "sequence ID" ) + cc.error( " is " ) + cc.attention( sequence_id ) + "\n"; log.write( strErrorMessage ); @@ -1101,7 +1101,7 @@ async function do_sign_messages_impl( const strErrorMessage = strLogPrefix + cc.error( "S-Chain node " ) + strNodeDescColorized + " " + cc.fatal( "CRITICAL ERROR:" ) + cc.error( " signature fail from node " ) + cc.info( joNode.nodeID ) + - cc.error( ", error is " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + + cc.error( ", error is " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + cc.error( ", " ) + cc.notice( "sequence ID" ) + cc.error( " is " ) + cc.attention( sequence_id ) + "\n"; log.write( strErrorMessage ); @@ -1158,10 +1158,10 @@ async function do_sign_messages_impl( log.write( cc.debug( "Will call sending function (fn)" ) + "\n" ); details.write( cc.debug( "Will call sending function (fn) for " ) + "\n" ); /*await*/ fn( strError, jarrMessages, joGlueResult ).catch( ( err ) => { - const strErrorMessage = cc.error( "Problem(2) in BLS sign result handler: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n"; + const strErrorMessage = cc.error( "Problem(2) in BLS sign result handler: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); - errGathering = "Problem(2) in BLS sign result handler: " + owaspUtil.extract_error_message( err ); + errGathering = "Problem(2) in BLS sign result handler: " + owaspUtils.extract_error_message( err ); return; } ); bHaveResultReportCalled = true; @@ -1177,13 +1177,13 @@ async function do_sign_messages_impl( /*await*/ fn( "signature error(2), got " + joGatheringTracker.nCountErrors + " errors(s) for " + jarrNodes.length + " node(s)", jarrMessages, null ).catch( ( err ) => { const strErrorMessage = cc.error( "Problem(3) in BLS sign result handler, not enough successful BLS signature parts(" ) + - cc.info( cntSuccess ) + cc.error( " when all attempts done, error details: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + + cc.info( cntSuccess ) + cc.error( " when all attempts done, error details: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); errGathering = "Problem(3) in BLS sign result handler, not enough successful BLS signature parts(" + - cntSuccess + " when all attempts done, error details: " + owaspUtil.extract_error_message( err ); + cntSuccess + " when all attempts done, error details: " + owaspUtils.extract_error_message( err ); reject( new Error( errGathering ) ); } ); bHaveResultReportCalled = true; @@ -1195,12 +1195,12 @@ async function do_sign_messages_impl( const strErrorMessage = cc.error( "Problem(4) in BLS sign result handler, not enough successful BLS signature parts(" ) + cc.info( cntSuccess ) + cc.error( ") and timeout reached, error details: " ) + - cc.warning( owaspUtil.extract_error_message( err ) ) + "\n"; + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); errGathering = "Problem(4) in BLS sign result handler, not enough successful BLS signature parts(" + - cntSuccess + ") and timeout reached, error details: " + owaspUtil.extract_error_message( err ); + cntSuccess + ") and timeout reached, error details: " + owaspUtils.extract_error_message( err ); reject( new Error( errGathering ) ); } ); bHaveResultReportCalled = true; @@ -1214,7 +1214,7 @@ async function do_sign_messages_impl( details.write( cc.success( "BLS verification and sending promise awaited." ) + "\n" ); log.write( cc.success( "BLS verification and sending promise awaited." ) + "\n" ); } ).catch( err => { - const strErrorMessage = cc.error( "Failed to verify BLS and send message : " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n"; + const strErrorMessage = cc.error( "Failed to verify BLS and send message : " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); } ); @@ -1233,7 +1233,7 @@ async function do_sign_messages_impl( const strErrorMessage = cc.error( "Problem(5) in BLS sign result handler, not enough successful BLS signature parts(" ) + cc.info( cntSuccess ) + cc.error( ") and timeout reached, error details: " ) + - cc.warning( owaspUtil.extract_error_message( err ) ) + "\n"; + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); details.exposeDetailsTo( log, strGatheredDetailsName, false ); @@ -1244,7 +1244,7 @@ async function do_sign_messages_impl( return; } if( ! bHaveResultReportCalled ) { - const strErrorMessage = cc.error( "Failed BLS sign result awaiting(2): " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n"; + const strErrorMessage = cc.error( "Failed BLS sign result awaiting(2): " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); bHaveResultReportCalled = true; @@ -1252,7 +1252,7 @@ async function do_sign_messages_impl( const strErrorMessage = cc.error( "Problem(6) in BLS sign result handler, not enough successful BLS signature parts(" ) + cc.info( cntSuccess ) + cc.error( ") and timeout reached, error details: " ) + - cc.warning( owaspUtil.extract_error_message( err ) ) + "\n"; + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); details.exposeDetailsTo( log, strGatheredDetailsName, false ); @@ -1262,15 +1262,15 @@ async function do_sign_messages_impl( } } catch ( err ) { const strErrorMessage = - cc.error( "Failed BLS sign due to generic flow exception: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + + cc.error( "Failed BLS sign due to generic flow exception: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + cc.error( ", call stack is: " ) + "\n" + err.stack() + "\n"; log.write( strErrorMessage ); if( details ) details.write( strErrorMessage ); if( ! bHaveResultReportCalled ) { bHaveResultReportCalled = true; - await fn( "Failed BLS sign due to exception: " + owaspUtil.extract_error_message( err ), jarrMessages, null ).catch( ( err ) => { - const strErrorMessage = cc.error( "Failed BLS sign due to error-erporting callback exception: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n"; + await fn( "Failed BLS sign due to exception: " + owaspUtils.extract_error_message( err ), jarrMessages, null ).catch( ( err ) => { + const strErrorMessage = cc.error( "Failed BLS sign due to error-erporting callback exception: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n"; log.write( strErrorMessage ); if( details ) { details.write( strErrorMessage ); @@ -1396,7 +1396,7 @@ async function do_sign_u256( u256, details, fn ) { const strErrorMessage = strLogPrefix + cc.fatal( "CRITICAL ERROR:" ) + cc.error( " JSON RPC call to S-Chain node " ) + strNodeDescColorized + - cc.error( " failed, RPC call was not created, error is: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n"; + cc.error( " failed, RPC call was not created, error is: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); return; @@ -1417,7 +1417,7 @@ async function do_sign_u256( u256, details, fn ) { const strErrorMessage = strLogPrefix + cc.fatal( "CRITICAL ERROR:" ) + cc.error( " JSON RPC call to S-Chain node " ) + strNodeDescColorized + - cc.error( " failed, RPC call reported error: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n"; + cc.error( " failed, RPC call reported error: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); return; @@ -1433,7 +1433,7 @@ async function do_sign_u256( u256, details, fn ) { strLogPrefix + cc.fatal( "Wallet CRITICAL ERROR:" ) + " " + cc.error( "S-Chain node " ) + strNodeDescColorized + cc.error( " reported wallet error: " ) + - cc.warning( owaspUtil.extract_error_message( joOut, "unknown wallet error(2)" ) ) + + cc.warning( owaspUtils.extract_error_message( joOut, "unknown wallet error(2)" ) ) + "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); @@ -1480,7 +1480,7 @@ async function do_sign_u256( u256, details, fn ) { const strErrorMessage = strLogPrefixA + cc.error( "S-Chain node " ) + strNodeDescColorized + cc.error( " sign " ) + cc.error( " CRITICAL ERROR:" ) + cc.error( " partial signature fail from with index " ) + cc.info( nZeroBasedNodeIndex ) + - cc.error( ", error is " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n"; + cc.error( ", error is " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); } @@ -1509,7 +1509,7 @@ async function do_sign_u256( u256, details, fn ) { const strErrorMessage = strLogPrefix + cc.error( "S-Chain node " ) + strNodeDescColorized + " " + cc.fatal( "CRITICAL ERROR:" ) + cc.error( " signature fail from node " ) + cc.info( joNode.nodeID ) + - cc.error( ", error is " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n"; + cc.error( ", error is " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); } @@ -1553,10 +1553,10 @@ async function do_sign_u256( u256, details, fn ) { log.write( cc.debug( "Will call sending function (fn)" ) + "\n" ); details.write( cc.debug( "Will call sending function (fn) for " ) + "\n" ); /*await*/ fn( strError, u256, joGlueResult ).catch( ( err ) => { - const strErrorMessage = cc.error( "Problem(2) in BLS u256 sign result handler: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n"; + const strErrorMessage = cc.error( "Problem(2) in BLS u256 sign result handler: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); - errGathering = "Problem(2) in BLS u256 sign result handler: " + owaspUtil.extract_error_message( err ); + errGathering = "Problem(2) in BLS u256 sign result handler: " + owaspUtils.extract_error_message( err ); } ); if( strError ) { errGathering = strError; @@ -1570,13 +1570,13 @@ async function do_sign_u256( u256, details, fn ) { /*await*/ fn( "signature error(2, u256), got " + joGatheringTracker.nCountErrors + " errors(s) for " + jarrNodes.length + " node(s)", u256, null ).catch( ( err ) => { const strErrorMessage = cc.error( "Problem(3) in BLS u256 sign result handler, not enough successful BLS signature parts(" ) + - cc.info( cntSuccess ) + cc.error( " when all attempts done, error details: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + + cc.info( cntSuccess ) + cc.error( " when all attempts done, error details: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); errGathering = "Problem(3) in BLS u256 sign result handler, not enough successful BLS signature parts(" + - cntSuccess + " when all attempts done, error details: " + owaspUtil.extract_error_message( err ); + cntSuccess + " when all attempts done, error details: " + owaspUtils.extract_error_message( err ); reject( new Error( errGathering ) ); } ); return; @@ -1587,12 +1587,12 @@ async function do_sign_u256( u256, details, fn ) { const strErrorMessage = cc.error( "Problem(4) in BLS u256 sign result handler, not enough successful BLS signature parts(" ) + cc.info( cntSuccess ) + cc.error( ") and timeout reached, error details: " ) + - cc.warning( owaspUtil.extract_error_message( err ) ) + "\n"; + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); errGathering = "Problem(4) in BLS u256 sign result handler, not enough successful BLS signature parts(" + - cntSuccess + ") and timeout reached, error details: " + owaspUtil.extract_error_message( err ); + cntSuccess + ") and timeout reached, error details: " + owaspUtils.extract_error_message( err ); reject( new Error( errGathering ) ); } ); return; @@ -1605,7 +1605,7 @@ async function do_sign_u256( u256, details, fn ) { details.write( cc.info( "BLS u256 sign promise awaited." ) + "\n" ); log.write( cc.info( "BLS u256 sign promise awaited." ) + "\n" ); } ).catch( err => { - const strErrorMessage = cc.error( "Failed to verify BLS and send message : " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n"; + const strErrorMessage = cc.error( "Failed to verify BLS and send message : " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); } ); @@ -1632,27 +1632,27 @@ async function handle_skale_call_via_redirect( joCallData ) { if( err ) { const strErrorMessage = strLogPrefix + cc.fatal( "CRITICAL ERROR:" ) + - cc.error( " JSON RPC call to S-Chain failed, RPC call was not created, error is: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n"; + cc.error( " JSON RPC call to S-Chain failed, RPC call was not created, error is: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); - throw new Error( "JSON RPC call to S-Chain failed, RPC call was not created, error is: " + owaspUtil.extract_error_message( err ) ); + throw new Error( "JSON RPC call to S-Chain failed, RPC call was not created, error is: " + owaspUtils.extract_error_message( err ) ); } details.write( strLogPrefix + cc.debug( "Will invoke " ) + cc.info( "S-Chain" ) + cc.debug( " with call data " ) + cc.j( joCallData ) + "\n" ); await joCall.call( joCallData, async function( joIn, joOut, err ) { if( err ) { const strErrorMessage = strLogPrefix + cc.fatal( "CRITICAL ERROR:" ) + - cc.error( " JSON RPC call to S-Chain failed, RPC call reported error: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n"; + cc.error( " JSON RPC call to S-Chain failed, RPC call reported error: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); - throw new Error( "JSON RPC call to S-Chain failed, RPC call reported error: " + owaspUtil.extract_error_message( err ) ); + throw new Error( "JSON RPC call to S-Chain failed, RPC call reported error: " + owaspUtils.extract_error_message( err ) ); } details.write( strLogPrefix + cc.debug( "Call to " ) + cc.info( "S-Chain" ) + cc.debug( " done, answer is: " ) + cc.j( joOut ) + "\n" ); if( joOut.result == null || joOut.result == undefined || ( !typeof joOut.result == "object" ) ) { const strErrorMessage = strLogPrefix + cc.fatal( "Wallet CRITICAL ERROR:" ) + " " + cc.error( "S-Chain reported wallet error: " ) + - cc.warning( owaspUtil.extract_error_message( joOut, "unknown wallet error(3)" ) ) + + cc.warning( owaspUtils.extract_error_message( joOut, "unknown wallet error(3)" ) ) + cc.error( ", " ) + cc.notice( "sequence ID" ) + cc.error( " is " ) + cc.attention( sequence_id ) + "\n"; log.write( strErrorMessage ); @@ -1666,7 +1666,7 @@ async function handle_skale_call_via_redirect( joCallData ) { } ); // rpcCall.create ... } catch ( err ) { isSuccess = false; - const strError = owaspUtil.extract_error_message( err ); + const strError = owaspUtils.extract_error_message( err ); joRetVal.error = strError; const strErrorMessage = strLogPrefix + cc.fatal( "CRITICAL ERROR:" ) + " " + @@ -1721,10 +1721,10 @@ async function handle_skale_imaVerifyAndSign( joCallData ) { if( err ) { const strErrorMessage = strLogPrefix + cc.fatal( "CRITICAL ERROR:" ) + - cc.error( " JSON RPC call to SGX failed, RPC call was not created, error is: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n"; + cc.error( " JSON RPC call to SGX failed, RPC call was not created, error is: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); - throw new Error( "JSON RPC call to SGX failed, RPC call was not created, error is: " + owaspUtil.extract_error_message( err ) ); + throw new Error( "JSON RPC call to SGX failed, RPC call was not created, error is: " + owaspUtils.extract_error_message( err ) ); } const joCallSGX = { method: "blsSignMessageHash", @@ -1742,10 +1742,10 @@ async function handle_skale_imaVerifyAndSign( joCallData ) { if( err ) { const strErrorMessage = strLogPrefix + cc.fatal( "CRITICAL ERROR:" ) + - cc.error( " JSON RPC call to SGX failed, RPC call reported error: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n"; + cc.error( " JSON RPC call to SGX failed, RPC call reported error: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); - throw new Error( "JSON RPC call to SGX failed, RPC call reported error: " + owaspUtil.extract_error_message( err ) ); + throw new Error( "JSON RPC call to SGX failed, RPC call reported error: " + owaspUtils.extract_error_message( err ) ); } details.write( strLogPrefix + cc.debug( "Call to " ) + cc.info( "SGX" ) + cc.debug( " done, answer is: " ) + cc.j( joOut ) + "\n" ); let joSignResult = joOut; @@ -1761,7 +1761,7 @@ async function handle_skale_imaVerifyAndSign( joCallData ) { } ); // rpcCall.create ... } catch ( err ) { isSuccess = false; - const strError = owaspUtil.extract_error_message( err ); + const strError = owaspUtils.extract_error_message( err ); joRetVal.error = strError; const strErrorMessage = strLogPrefix + cc.fatal( "CRITICAL ERROR:" ) + " " + diff --git a/agent/cli.js b/agent/cli.js index 60d6e4f65..1f2c59f7b 100644 --- a/agent/cli.js +++ b/agent/cli.js @@ -1299,7 +1299,7 @@ function getWeb3FromURL( strURL, log ) { } catch ( err ) { log.write( cc.fatal( "CRITICAL ERROR:" ) + cc.error( " Failed to create " ) + cc.attention( "Web3" ) + cc.error( " connection to " ) + cc.info( strURL ) + - cc.error( ": " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n" ); + cc.error( ": " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n" ); w3 = null; } return w3; @@ -1320,7 +1320,7 @@ async function async_check_url_at_startup( u, name ) { } catch ( err ) { details.write( cc.fatal( "ERROR:" ) + cc.error( " Failed to check URL " ) + - cc.u( u ) + cc.error( " connectivity for " ) + cc.info( name ) + cc.error( " at start-up, error is: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + + cc.u( u ) + cc.error( " connectivity for " ) + cc.info( name ) + cc.error( " at start-up, error is: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n" ); } // details.exposeDetailsTo( log, "async_check_url_at_startup( \"" + u + "\", \"" + name + "\" )", true ); diff --git a/agent/main.js b/agent/main.js index e35a15748..716c773bb 100644 --- a/agent/main.js +++ b/agent/main.js @@ -2662,7 +2662,7 @@ async function single_transfer_loop() { log.write( strLogPrefix + cc.debug( "Completed: " ) + cc.tf( bResult ) + "\n" ); return bResult; } catch ( err ) { - log.write( strLogPrefix + cc.fatal( "Exception:" ) + + cc.error( owaspUtil.extract_error_message( err ) ) + "\n" ); + log.write( strLogPrefix + cc.fatal( "Exception:" ) + + cc.error( owaspUtils.extract_error_message( err ) ) + "\n" ); } g_is_single_transfer_loop = false; return false; diff --git a/agent/oracle.js b/agent/oracle.js index 385e3ed8a..809e45bb6 100644 --- a/agent/oracle.js +++ b/agent/oracle.js @@ -90,9 +90,9 @@ function oracle_get_gas_price( oracleOpts, details ) { cntAttempts = 1; rpcCall.create( url, callOpts || { }, async function( joCall, err ) { if( err ) { - details.write( cc.fatal( "CRITICAL ORACLE CALL ERROR:" ) + cc.error( " RPC connection problem for url " ) + cc.u( url ) + cc.error( ", error description: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n" ); + details.write( cc.fatal( "CRITICAL ORACLE CALL ERROR:" ) + cc.error( " RPC connection problem for url " ) + cc.u( url ) + cc.error( ", error description: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n" ); details.write( err.stack + "\n" ); - reject( new Error( "CRITICAL ORACLE CALL ERROR: RPC connection problem for url \"" + url + "\", error description: " + owaspUtil.extract_error_message( err ) ) ); + reject( new Error( "CRITICAL ORACLE CALL ERROR: RPC connection problem for url \"" + url + "\", error description: " + owaspUtils.extract_error_message( err ) ) ); return; } try { @@ -110,10 +110,10 @@ function oracle_get_gas_price( oracleOpts, details ) { await joCall.call( joIn, async function( joIn, joOut, err ) { if( err ) { if( isVerboseTraceDetails ) { - details.write( cc.fatal( "CRITICAL ORACLE CALL ERROR:" ) + cc.error( " JSON RPC call" ) + cc.debug( "(" ) + cc.attention( "oracle_submitRequest" ) + cc.normal( ")" ) + cc.error( " failed, error: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n" ); + details.write( cc.fatal( "CRITICAL ORACLE CALL ERROR:" ) + cc.error( " JSON RPC call" ) + cc.debug( "(" ) + cc.attention( "oracle_submitRequest" ) + cc.normal( ")" ) + cc.error( " failed, error: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n" ); details.write( err.stack + "\n" ); } - reject( new Error( "CRITICAL ORACLE CALL ERROR: JSON RPC call(oracle_submitRequest) failed, error: " + owaspUtil.extract_error_message( err ) ) ); + reject( new Error( "CRITICAL ORACLE CALL ERROR: JSON RPC call(oracle_submitRequest) failed, error: " + owaspUtils.extract_error_message( err ) ) ); return; } if( isVerboseTraceDetails ) @@ -140,10 +140,10 @@ function oracle_get_gas_price( oracleOpts, details ) { await joCall.call( joIn, async function( joIn, joOut, err ) { if( err ) { if( isVerboseTraceDetails ) { - details.write( cc.fatal( "CRITICAL ORACLE CALL ERROR:" ) + cc.error( " JSON RPC call" ) + cc.debug( "(" ) + cc.attention( "oracle_checkResult" ) + cc.normal( ")" ) + cc.error( " failed, error: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n" ); + details.write( cc.fatal( "CRITICAL ORACLE CALL ERROR:" ) + cc.error( " JSON RPC call" ) + cc.debug( "(" ) + cc.attention( "oracle_checkResult" ) + cc.normal( ")" ) + cc.error( " failed, error: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n" ); details.write( err.stack + "\n" ); } - //reject( new Error( "CRITICAL ORACLE CALL ERROR: JSON RPC call(oracle_checkResult) failed, error: " + owaspUtil.extract_error_message( err ) ) ); + //reject( new Error( "CRITICAL ORACLE CALL ERROR: JSON RPC call(oracle_checkResult) failed, error: " + owaspUtils.extract_error_message( err ) ) ); return; } if( isVerboseTraceDetails ) @@ -166,7 +166,7 @@ function oracle_get_gas_price( oracleOpts, details ) { return; } ); } catch ( err ) { - details.write( cc.fatal( "CRITICAL ORACLE CALL ERROR:" ) + cc.error( " RPC call" ) + cc.normal( "(" ) + cc.attention( "oracle_checkResult" ) + cc.normal( ")" ) + cc.error( " exception is: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n" ); + details.write( cc.fatal( "CRITICAL ORACLE CALL ERROR:" ) + cc.error( " RPC call" ) + cc.normal( "(" ) + cc.attention( "oracle_checkResult" ) + cc.normal( ")" ) + cc.error( " exception is: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n" ); details.write( err.stack + "\n" ); reject( err ); return; @@ -177,14 +177,14 @@ function oracle_get_gas_price( oracleOpts, details ) { return; } ); } catch ( err ) { - details.write( cc.fatal( "CRITICAL ORACLE CALL ERROR:" ) + cc.error( " RPC call" ) + cc.normal( "(" ) + cc.attention( "oracle_submitRequest" ) + cc.normal( ")" ) + cc.error( " exception is: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n" ); + details.write( cc.fatal( "CRITICAL ORACLE CALL ERROR:" ) + cc.error( " RPC call" ) + cc.normal( "(" ) + cc.attention( "oracle_submitRequest" ) + cc.normal( ")" ) + cc.error( " exception is: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n" ); details.write( err.stack + "\n" ); reject( err ); return; } } ); } catch ( err ) { - details.write( cc.fatal( "CRITICAL ORACLE CALL ERROR:" ) + cc.error( " RPC call object creation failed, error is: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n" ); + details.write( cc.fatal( "CRITICAL ORACLE CALL ERROR:" ) + cc.error( " RPC call object creation failed, error is: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n" ); details.write( err.stack + "\n" ); reject( err ); return; diff --git a/npms/skale-ima/index.js b/npms/skale-ima/index.js index aa759c4f1..e30f308e8 100644 --- a/npms/skale-ima/index.js +++ b/npms/skale-ima/index.js @@ -192,7 +192,7 @@ async function get_web3_blockNumber( details, cntAttempts, w3, retValOnFail, thr cc.error( "Failed call attempt " ) + cc.info( idxAttempt ) + cc.error( " to " ) + cc.note( strFnName + "()" ) + cc.error( " via " ) + cc.u( u ) + - cc.error( ", error is: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + + cc.error( ", error is: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n" ); } ++ idxAttempt; @@ -222,7 +222,7 @@ async function get_web3_blockNumber( details, cntAttempts, w3, retValOnFail, thr cc.error( "Failed call attempt " ) + cc.info( idxAttempt ) + cc.error( " to " ) + cc.note( strFnName + "()" ) + cc.error( " via " ) + cc.u( u ) + - cc.error( ", error is: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + + cc.error( ", error is: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n" ); } ++ idxAttempt; @@ -257,7 +257,7 @@ async function get_web3_transactionCount( details, cntAttempts, w3, address, par cc.error( "Failed call attempt " ) + cc.info( idxAttempt ) + cc.error( " to " ) + cc.note( strFnName + "()" ) + cc.error( " via " ) + cc.u( u ) + - cc.error( ", error is: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + + cc.error( ", error is: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n" ); } ++ idxAttempt; @@ -287,7 +287,7 @@ async function get_web3_transactionCount( details, cntAttempts, w3, address, par cc.error( "Failed call attempt " ) + cc.info( idxAttempt ) + cc.error( " to " ) + cc.note( strFnName + "()" ) + cc.error( " via " ) + cc.u( u ) + - cc.error( ", error is: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + + cc.error( ", error is: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n" ); } ++ idxAttempt; @@ -322,7 +322,7 @@ async function get_web3_transactionReceipt( details, cntAttempts, w3, txHash, re cc.error( "Failed call attempt " ) + cc.info( idxAttempt ) + cc.error( " to " ) + cc.note( strFnName + "()" ) + cc.error( " via " ) + cc.u( u ) + - cc.error( ", error is: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + + cc.error( ", error is: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n" ); } ++ idxAttempt; @@ -352,7 +352,7 @@ async function get_web3_transactionReceipt( details, cntAttempts, w3, txHash, re cc.error( "Failed call attempt " ) + cc.info( idxAttempt ) + cc.error( " to " ) + cc.note( strFnName + "()" ) + cc.error( " via " ) + cc.u( u ) + - cc.error( ", error is: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + + cc.error( ", error is: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n" ); } ++ idxAttempt; @@ -393,9 +393,9 @@ async function get_web3_pastEvents( details, w3, cntAttempts, joContract, strEve cc.error( " to " ) + cc.note( strFnName + "()" ) + cc.error( " via " ) + cc.u( u ) + cc.error( ", from block " ) + cc.warning( nBlockFrom ) + cc.error( ", to block " ) + cc.warning( nBlockTo ) + - cc.error( ", error is: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + + cc.error( ", error is: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n" ); - if( owaspUtil.extract_error_message( err ).indexOf( strErrorTextAboutNotExistingEvent ) >= 0 ) { + if( owaspUtils.extract_error_message( err ).indexOf( strErrorTextAboutNotExistingEvent ) >= 0 ) { details.write( cc.error( "Did stopped calls to " ) + cc.note( strFnName + "()" ) + cc.error( " because event " ) + cc.notice( strEventName ) + @@ -439,9 +439,9 @@ async function get_web3_pastEvents( details, w3, cntAttempts, joContract, strEve cc.error( " to " ) + cc.note( strFnName + "()" ) + cc.error( " via " ) + cc.u( u ) + cc.error( ", from block " ) + cc.warning( nBlockFrom ) + cc.error( ", to block " ) + cc.warning( nBlockTo ) + - cc.error( ", error is: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + + cc.error( ", error is: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n" ); - if( owaspUtil.extract_error_message( err ).indexOf( strErrorTextAboutNotExistingEvent ) >= 0 ) { + if( owaspUtils.extract_error_message( err ).indexOf( strErrorTextAboutNotExistingEvent ) >= 0 ) { details.write( cc.error( "Did stopped calls to " ) + cc.note( strFnName + "()" ) + cc.error( " because event " ) + cc.notice( strEventName ) + @@ -552,7 +552,7 @@ async function get_web3_pastEventsIterative( details, w3, attempts, joContract, cc.error( "Got scan error during interative scan of " ) + cc.info( idxBlockSubRangeFrom ) + cc.error( "/" ) + cc.info( idxBlockSubRangeTo ) + cc.error( " block sub-range in " ) + cc.info( nBlockFrom ) + cc.error( "/" ) + cc.info( nBlockTo ) + - cc.error( " block range, error is: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n" + cc.error( " block range, error is: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n" ); } idxBlockSubRangeFrom = idxBlockSubRangeTo; @@ -721,7 +721,7 @@ async function do_oracle_gas_price_setup( details.write( cc.error( "Failed to fetch " ) + cc.info( "Main Net gas price" ) + cc.error( " via call to " ) + cc.info( "Oracle" ) + - cc.error( ", error is: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n" ); + cc.error( ", error is: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n" ); } } if( gasPriceOnMainNet === null ) { @@ -1141,8 +1141,8 @@ async function dry_run_call( details, w3, methodWithArguments, joAccount, strDRC details.write( strLogPrefix + cc.fatal( "CRITICAL DRY RUN FAIL" ) + " " + cc.error( " invoking the " ) + cc.info( strMethodName ) + cc.error( " method: " ) + - cc.warning( owaspUtil.extract_error_message( err ) ) + "\n" ); - return "CRITICAL DRY RUN FAIL invoking the \"" + strMethodName + "\" method: " + owaspUtil.extract_error_message( err ); + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n" ); + return "CRITICAL DRY RUN FAIL invoking the \"" + strMethodName + "\" method: " + owaspUtils.extract_error_message( err ); } } return null; @@ -1418,7 +1418,7 @@ async function safe_sign_transaction_with_account( details, w3, tx, rawTx, joAcc strMsg = cc.fatal( "BAD ERROR:" ) + " " + cc.error( "TM - transaction was not sent, underlying error is: " ) + - cc.warning( owaspUtil.extract_error_message( err ) ); + cc.warning( owaspUtils.extract_error_message( err ) ); details.write( strPrefixDetails + strMsg + "\n" ); log.write( strPrefixLog + strMsg + "\n" ); // throw err; @@ -5673,7 +5673,7 @@ async function do_transfer( ++ cntFailedNodes; const strError = strLogPrefix + cc.fatal( strDirection + " message analysis error:" ) + " " + cc.error( "Failed to scan events on node " ) + cc.info( jo_node.name ) + - cc.error( ", error is: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + + cc.error( ", error is: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + cc.error( ", detailed node description is: " ) + cc.j( jo_node ) + "\n"; details.write( strError ); @@ -5716,7 +5716,7 @@ async function do_transfer( cc.error( "Failed to process events for " ) + cc.sunny( strDirection ) + cc.error( " message " ) + cc.info( idxMessage + 1 ) + cc.error( " on node " ) + cc.info( jo_node.name ) + cc.success( " using URL " ) + cc.info( jo_node.http_endpoint_ip ) + - cc.debug( ", error is: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n"; + cc.debug( ", error is: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n"; details.write( strError ); if( verbose_get() >= RV_VERBOSE.fatal ) log.write( strError ); @@ -5970,7 +5970,7 @@ async function do_transfer( } ); // fn_sign_messages } catch ( err ) { const strError = strLogPrefix + cc.fatal( "CRITICAL ERROR:" ) + - cc.error( " Exception from sigining messages function: " ) + cc.error( owaspUtil.extract_error_message( err ) ); + cc.error( " Exception from sigining messages function: " ) + cc.error( owaspUtils.extract_error_message( err ) ); log.write( strError + "\n" ); details.write( strError + "\n" ); if( detailsB ) diff --git a/npms/skale-observer/observer.js b/npms/skale-observer/observer.js index f89f7bb99..298d2a41f 100644 --- a/npms/skale-observer/observer.js +++ b/npms/skale-observer/observer.js @@ -70,7 +70,7 @@ function getWeb3FromURL( strURL, log ) { } catch ( err ) { log.write( cc.fatal( "CRITICAL ERROR:" ) + cc.error( " Failed to create " ) + cc.attention( "Web3" ) + cc.error( " connection to " ) + cc.info( strURL ) + - cc.error( ": " ) + cc.warning( owaspUtil.extract_error_message( err ) ) ); + cc.error( ": " ) + cc.warning( owaspUtils.extract_error_message( err ) ) ); w3 = null; } return w3; @@ -310,7 +310,7 @@ async function load_schains_connected_only( w3_main_net, w3_s_chain, strChainNam arr_schains.push( jo_schain ); } catch ( err ) { if( opts && opts.details ) { - opts.details.write( cc.error( "Got error: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n" ); + opts.details.write( cc.error( "Got error: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n" ); opts.details.write( err.stack ); } } @@ -346,7 +346,7 @@ async function check_connected_schains( strChainNameConnectedTo, arr_schains, ad } } catch ( err ) { if( opts && opts.details ) { - opts.details.write( cc.error( "Got error: " ) + cc.warning( owaspUtil.extract_error_message( err ) ) + "\n" ); + opts.details.write( cc.error( "Got error: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n" ); opts.details.write( err.stack ); } } @@ -458,7 +458,7 @@ async function cache_schains( strChainNameConnectedTo, w3_main_net, w3_s_chain, if( opts.fn_chache_changed ) opts.fn_chache_changed( g_arr_schains_cached, null ); // null - no error } catch ( err ) { - strError = owaspUtil.extract_error_message( err ); + strError = owaspUtils.extract_error_message( err ); if( ! strError ) strError = "unknown exception during S-Chains download"; if( opts.fn_chache_changed ) @@ -616,7 +616,7 @@ async function discover_chain_id( strURL ) { const rpcCallOpts = null; await rpcCall.create( strURL, rpcCallOpts, async function( joCall, err ) { if( err ) { - //ret = "Failed to create RPC (" + strURL + ") call: " + owaspUtil.extract_error_message( err ); + //ret = "Failed to create RPC (" + strURL + ") call: " + owaspUtils.extract_error_message( err ); return; } await joCall.call( { @@ -624,7 +624,7 @@ async function discover_chain_id( strURL ) { "params": [] }, async function( joIn, joOut, err ) { if( err ) { - //ret = "Failed to query RPC (" + strURL + ") for chain ID: " + owaspUtil.extract_error_message( err ); + //ret = "Failed to query RPC (" + strURL + ") for chain ID: " + owaspUtils.extract_error_message( err ); return; } if( ! ( "result" in joOut && joOut.result ) ) { From 319bbc3fb318a977281caddd0188d6dffc6f79f5 Mon Sep 17 00:00:00 2001 From: Sergiy Lavrynenko Date: Tue, 11 Oct 2022 16:24:06 +0100 Subject: [PATCH 009/257] Added IMA message verfication into skale_imaVerifyAndSign handler --- agent/bls.js | 29 ++++++++++++++++++++++++++++- npms/skale-ima/index.js | 2 +- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/agent/bls.js b/agent/bls.js index 406c3048b..d7343eeb9 100644 --- a/agent/bls.js +++ b/agent/bls.js @@ -31,7 +31,7 @@ const child_process = require( "child_process" ); const shell = require( "shelljs" ); const { Keccak } = require( "sha3" ); const { cc } = require( "./utils" ); -const owaspUtil = require( "../npms/skale-owasp/owasp-util" ); +const owaspUtils = require( "../npms/skale-owasp/owasp-util" ); function init() { owaspUtils.owaspAddUsageRef(); @@ -1690,6 +1690,7 @@ async function handle_skale_imaVerifyAndSign( joCallData ) { details.write( strLogPrefix + cc.debug( "Will verify and sign " ) + cc.j( joCallData ) + "\n" ); const nIdxCurrentMsgBlockStart = joCallData.params.startMessageIdx; const strFromChainName = joCallData.params.srcChainName; + const strDirection = joCallData.params.direction; const jarrMessages = joCallData.params.messages; const nThreshold = discover_bls_threshold( imaState.joSChainNetworkInfo ); const nParticipants = discover_bls_participants( imaState.joSChainNetworkInfo ); @@ -1698,6 +1699,32 @@ async function handle_skale_imaVerifyAndSign( joCallData ) { const strMessageHash = owaspUtils.remove_starting_0x( keccak256_message( jarrMessages, nIdxCurrentMsgBlockStart, strFromChainName ) ); details.write( strLogPrefix + cc.debug( "Message hash to sign is " ) + cc.info( strMessageHash ) + "\n" ); // + const joExtraSignOpts = null; + if( strDirection == "S2S" ) { + // joCallData.params.dstChainName + // joCallData.params.srcChainName + const strSChainNameSrc = joCallData.params.srcChainName; + const arr_schains_cached = skale_observer.get_last_cached_schains(); + if( ( !arr_schains_cached ) || arr_schains_cached.length == 0 ) + throw new Error( "Could not handle S2S skale_imaVerifyAndSign(1), no S-Chains in SKALE NETWORK observer cached yet, try again later" ); + const jo_schain_src = null; + let strUrlSrcSChain = null; + for( let idxChain = 0; idxChain < arr_schains_cached.length; ++ idxChain ) { + const jo_schain = arr_schains_cached[idxSChain]; + if( jo_schain.data.name.toString() == strSChainNameSrc.toString() ) { + strUrlSrcSChain = skale_observer.pick_random_schain_w3_url( jo_schain ); + break; + } + } // for( let idxChain = 0; idxChain < arr_schains_cached.length; ++ idxChain ) + if( jo_schain_src == null || strUrlSrcSChain == null || ( !strUrlSrcSChain.length ) ) + throw new Error( "Could not handle S2S skale_imaVerifyAndSign(2), no S-Chains in SKALE NETWORK observer cached yet, try again later" ); + joExtraSignOpts.skale_observer = skale_observer; + joExtraSignOpts.w3_src = skale_observer.getWeb3FromURL( strUrlSrcSChain, details ); // ???????????????????????????????????????????????????? + joExtraSignOpts.chain_id_src = jo_schain_src.data.computed.schain_id; + joExtraSignOpts.cid_dst = jo_schain_src.data.computed.chainId; + } + await check_correctness_of_messages_to_sign( details, strLogPrefix, strDirection, jarrMessages, nIdxCurrentMsgBlockStart, joExtraSignOpts ); + // let joAccount = imaState.joAccount_s_chain; if( ! joAccount.strURL ) { joAccount = imaState.joAccount_main_net; diff --git a/npms/skale-ima/index.js b/npms/skale-ima/index.js index e30f308e8..2a66dc638 100644 --- a/npms/skale-ima/index.js +++ b/npms/skale-ima/index.js @@ -1550,7 +1550,7 @@ async function safe_send_signed_transaction( details, w3, serializedTx, strActio details.write( strPrefixDetails + strMsg + "\n" ); log.write( strPrefixLog + strMsg + "\n" ); const strTX = "0x" + serializedTx.toString( "hex" ); // strTX is string starting from "0x" - details.write( strLogPrefix + cc.debug( "....signed raw TX is " ) + cc.j( strTX ) + "\n" ); + details.write( strLogPrefix + cc.debug( "....signed raw TX is " ) + cc.info( strTX ) + "\n" ); let joReceipt = null; let bHaveReceipt = false; try { From 33dec68a99b155c50dfca24fdb2d60ac54bb6623 Mon Sep 17 00:00:00 2001 From: Sergiy Lavrynenko Date: Tue, 11 Oct 2022 16:42:53 +0100 Subject: [PATCH 010/257] Added IMA message verfication into skale_imaVerifyAndSign handler --- agent/bls.js | 4 ++-- npms/skale-ima/index.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/agent/bls.js b/agent/bls.js index d7343eeb9..701a91012 100644 --- a/agent/bls.js +++ b/agent/bls.js @@ -1709,13 +1709,13 @@ async function handle_skale_imaVerifyAndSign( joCallData ) { throw new Error( "Could not handle S2S skale_imaVerifyAndSign(1), no S-Chains in SKALE NETWORK observer cached yet, try again later" ); const jo_schain_src = null; let strUrlSrcSChain = null; - for( let idxChain = 0; idxChain < arr_schains_cached.length; ++ idxChain ) { + for( let idxSChain = 0; idxSChain < arr_schains_cached.length; ++ idxSChain ) { const jo_schain = arr_schains_cached[idxSChain]; if( jo_schain.data.name.toString() == strSChainNameSrc.toString() ) { strUrlSrcSChain = skale_observer.pick_random_schain_w3_url( jo_schain ); break; } - } // for( let idxChain = 0; idxChain < arr_schains_cached.length; ++ idxChain ) + } // for( let idxSChain = 0; idxSChain < arr_schains_cached.length; ++ idxSChain ) if( jo_schain_src == null || strUrlSrcSChain == null || ( !strUrlSrcSChain.length ) ) throw new Error( "Could not handle S2S skale_imaVerifyAndSign(2), no S-Chains in SKALE NETWORK observer cached yet, try again later" ); joExtraSignOpts.skale_observer = skale_observer; diff --git a/npms/skale-ima/index.js b/npms/skale-ima/index.js index 2a66dc638..50b3f3125 100644 --- a/npms/skale-ima/index.js +++ b/npms/skale-ima/index.js @@ -1550,7 +1550,7 @@ async function safe_send_signed_transaction( details, w3, serializedTx, strActio details.write( strPrefixDetails + strMsg + "\n" ); log.write( strPrefixLog + strMsg + "\n" ); const strTX = "0x" + serializedTx.toString( "hex" ); // strTX is string starting from "0x" - details.write( strLogPrefix + cc.debug( "....signed raw TX is " ) + cc.info( strTX ) + "\n" ); + details.write( strLogPrefix + cc.debug( "....signed raw TX is " ) + cc.attention( strTX ) + "\n" ); let joReceipt = null; let bHaveReceipt = false; try { From a65fc4cc753a768f14457e897647fe7af3329407 Mon Sep 17 00:00:00 2001 From: Sergiy Lavrynenko Date: Tue, 11 Oct 2022 17:16:49 +0100 Subject: [PATCH 011/257] Added IMA message verfication into skale_imaVerifyAndSign handler --- agent/bls.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/agent/bls.js b/agent/bls.js index 701a91012..394dac4f8 100644 --- a/agent/bls.js +++ b/agent/bls.js @@ -1716,7 +1716,7 @@ async function handle_skale_imaVerifyAndSign( joCallData ) { break; } } // for( let idxSChain = 0; idxSChain < arr_schains_cached.length; ++ idxSChain ) - if( jo_schain_src == null || strUrlSrcSChain == null || ( !strUrlSrcSChain.length ) ) + if( jo_schain_src == null || strUrlSrcSChain == null || strUrlSrcSChain.length == 0 ) throw new Error( "Could not handle S2S skale_imaVerifyAndSign(2), no S-Chains in SKALE NETWORK observer cached yet, try again later" ); joExtraSignOpts.skale_observer = skale_observer; joExtraSignOpts.w3_src = skale_observer.getWeb3FromURL( strUrlSrcSChain, details ); // ???????????????????????????????????????????????????? From c3ad648cfb36707feba233a873a86905313124e7 Mon Sep 17 00:00:00 2001 From: Sergiy Lavrynenko Date: Tue, 11 Oct 2022 17:47:46 +0100 Subject: [PATCH 012/257] unit test fix --- test/agent-test.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/test/agent-test.js b/test/agent-test.js index b45863221..e38113f6b 100644 --- a/test/agent-test.js +++ b/test/agent-test.js @@ -755,7 +755,11 @@ describe( "Agent Utils Module", function() { } ); it( "Compose IMA Agent URL", function() { - assert.equal( imaUtils.compose_ima_agent_node_url( { ip: "127.0.0.1", httpRpcPort: 14999 } ), "http://127.0.0.1:14999" ); + // HTTP_JSON = 3 + // IMA_AGENT_JSON = 10 + // so... distance is 10 - 3 = 7 + // as result, 14999 + 7 = 15006 + assert.equal( imaUtils.compose_ima_agent_node_url( { ip: "127.0.0.1", httpRpcPort: 14999 } ), "http://127.0.0.1:15006" ); } ); } ); From fb3bae7d776ef25745d5e2edd261987b148fc2ff Mon Sep 17 00:00:00 2001 From: Sergiy Lavrynenko Date: Tue, 11 Oct 2022 17:50:32 +0100 Subject: [PATCH 013/257] runtime fix --- agent/bls.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/agent/bls.js b/agent/bls.js index 394dac4f8..b3e5ba2cd 100644 --- a/agent/bls.js +++ b/agent/bls.js @@ -1707,11 +1707,11 @@ async function handle_skale_imaVerifyAndSign( joCallData ) { const arr_schains_cached = skale_observer.get_last_cached_schains(); if( ( !arr_schains_cached ) || arr_schains_cached.length == 0 ) throw new Error( "Could not handle S2S skale_imaVerifyAndSign(1), no S-Chains in SKALE NETWORK observer cached yet, try again later" ); - const jo_schain_src = null; - let strUrlSrcSChain = null; + let jo_schain_src = null, strUrlSrcSChain = null; for( let idxSChain = 0; idxSChain < arr_schains_cached.length; ++ idxSChain ) { const jo_schain = arr_schains_cached[idxSChain]; if( jo_schain.data.name.toString() == strSChainNameSrc.toString() ) { + jo_schain_src = jo_schain; strUrlSrcSChain = skale_observer.pick_random_schain_w3_url( jo_schain ); break; } From 43516f8f5921c6e0a7de76ad3f7bfe05bda30424 Mon Sep 17 00:00:00 2001 From: Sergiy Lavrynenko Date: Tue, 11 Oct 2022 18:31:40 +0100 Subject: [PATCH 014/257] runtime fix --- agent/bls.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/agent/bls.js b/agent/bls.js index b3e5ba2cd..fa6244262 100644 --- a/agent/bls.js +++ b/agent/bls.js @@ -1699,7 +1699,7 @@ async function handle_skale_imaVerifyAndSign( joCallData ) { const strMessageHash = owaspUtils.remove_starting_0x( keccak256_message( jarrMessages, nIdxCurrentMsgBlockStart, strFromChainName ) ); details.write( strLogPrefix + cc.debug( "Message hash to sign is " ) + cc.info( strMessageHash ) + "\n" ); // - const joExtraSignOpts = null; + let joExtraSignOpts = null; if( strDirection == "S2S" ) { // joCallData.params.dstChainName // joCallData.params.srcChainName @@ -1718,10 +1718,12 @@ async function handle_skale_imaVerifyAndSign( joCallData ) { } // for( let idxSChain = 0; idxSChain < arr_schains_cached.length; ++ idxSChain ) if( jo_schain_src == null || strUrlSrcSChain == null || strUrlSrcSChain.length == 0 ) throw new Error( "Could not handle S2S skale_imaVerifyAndSign(2), no S-Chains in SKALE NETWORK observer cached yet, try again later" ); - joExtraSignOpts.skale_observer = skale_observer; - joExtraSignOpts.w3_src = skale_observer.getWeb3FromURL( strUrlSrcSChain, details ); // ???????????????????????????????????????????????????? - joExtraSignOpts.chain_id_src = jo_schain_src.data.computed.schain_id; - joExtraSignOpts.cid_dst = jo_schain_src.data.computed.chainId; + joExtraSignOpts = { + skale_observer: skale_observer, + w3_src: skale_observer.getWeb3FromURL( strUrlSrcSChain, details ), + chain_id_src: jo_schain_src.data.computed.schain_id, + cid_dst: jo_schain_src.data.computed.chainId + }; } await check_correctness_of_messages_to_sign( details, strLogPrefix, strDirection, jarrMessages, nIdxCurrentMsgBlockStart, joExtraSignOpts ); // From 430f313bc4c92f7fbcdafd05179143d222bb55f7 Mon Sep 17 00:00:00 2001 From: Sergiy Lavrynenko Date: Tue, 11 Oct 2022 18:32:43 +0100 Subject: [PATCH 015/257] unit test fix --- test/agent-test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/agent-test.js b/test/agent-test.js index e38113f6b..f5f6d669b 100644 --- a/test/agent-test.js +++ b/test/agent-test.js @@ -759,7 +759,7 @@ describe( "Agent Utils Module", function() { // IMA_AGENT_JSON = 10 // so... distance is 10 - 3 = 7 // as result, 14999 + 7 = 15006 - assert.equal( imaUtils.compose_ima_agent_node_url( { ip: "127.0.0.1", httpRpcPort: 14999 } ), "http://127.0.0.1:15006" ); + assert.equal( imaUtils.compose_ima_agent_node_url( { ip: "127.0.0.1", httpRpcPort: 14999 } ), "ws://127.0.0.1:15006" ); } ); } ); From e55d70356c8191b8d706d620f8abc7340ceccb3e Mon Sep 17 00:00:00 2001 From: Sergiy Lavrynenko Date: Wed, 12 Oct 2022 19:05:40 +0100 Subject: [PATCH 016/257] better web socket handling --- agent/rpc-call.js | 64 ++++++++++++++++++++++++++++++++++------------- 1 file changed, 46 insertions(+), 18 deletions(-) diff --git a/agent/rpc-call.js b/agent/rpc-call.js index cb703d3ae..a3fb8da16 100644 --- a/agent/rpc-call.js +++ b/agent/rpc-call.js @@ -29,9 +29,17 @@ const net = require( "net" ); const g_nConnectionTimeoutSeconds = 60; +function rpc_call_init() { + owaspUtils.owaspAddUsageRef(); +} + +function validateURL( x ) { + return owaspUtils.validateURL( x ); +} + function is_http_url( strURL ) { try { - if( !owaspUtils.validateURL( strURL ) ) + if( !validateURL( strURL ) ) return false; const u = new URL( strURL ); if( u.protocol == "http:" || u.protocol == "https:" ) @@ -43,7 +51,7 @@ function is_http_url( strURL ) { function is_ws_url( strURL ) { try { - if( !owaspUtils.validateURL( strURL ) ) + if( !validateURL( strURL ) ) return false; const u = new URL( strURL ); if( u.protocol == "ws:" || u.protocol == "wss:" ) @@ -53,10 +61,6 @@ function is_ws_url( strURL ) { return false; } -function rpc_call_init() { - owaspUtils.owaspAddUsageRef(); -} - async function wait_web_socket_is_open( socket, fnDone, fnStep ) { fnDone = fnDone || async function( nStep ) {}; fnDone = fnStep || async function( nStep ) { return true; }; @@ -93,29 +97,37 @@ async function wait_web_socket_is_open( socket, fnDone, fnStep ) { } async function do_connect( joCall, opts, fn ) { + let wsConn = joCall.wsConn ? joCall.wsConn : null; try { fn = fn || async function() {}; - if( !owaspUtils.validateURL( joCall.url ) ) + if( !validateURL( joCall.url ) ) throw new Error( "JSON RPC CALLER cannot connect web socket to invalid URL: " + joCall.url ); if( is_ws_url( joCall.url ) ) { let strWsError = null; - joCall.wsConn = new ws( joCall.url ); - joCall.wsConn.on( "open", async function() { + wsConn = new ws( joCall.url ); + joCall.wsConn = wsConn; + wsConn.on( "open", async function() { await fn( joCall, null ); } ); - joCall.wsConn.on( "close", async function() { + wsConn.on( "close", async function() { strWsError = "web socket was closed, please check provided URL is valid and accessible"; - joCall.wsConn = 0; + joCall.wsConn = null; } ); - joCall.wsConn.on( "error", async function( err ) { + wsConn.on( "error", async function( err ) { strWsError = err.toString() || "internal web socket error"; log.write( cc.u( joCall.url ) + cc.error( " web socket error: " ) + cc.warning( err.toString() ) + "\n" ); + joCall.wsConn = null; + wsConn.close(); + do_reconnect_ws_step( joCall, opts ); } ); - joCall.wsConn.on( "fail", async function( err ) { + wsConn.on( "fail", async function( err ) { strWsError = err.toString() || "internal web socket failure"; log.write( cc.u( joCall.url ) + cc.error( " web socket fail: " ) + cc.warning( err.toString() ) + "\n" ); + joCall.wsConn = null; + wsConn.close(); + do_reconnect_ws_step( joCall, opts ); } ); - joCall.wsConn.on( "message", async function incoming( data ) { + wsConn.on( "message", async function incoming( data ) { // log.write( cc.info( "WS message " ) + cc.attention( data ) + "\n" ); const joOut = JSON.parse( data ); if( joOut.id in joCall.mapPendingByCallID ) { @@ -129,7 +141,7 @@ async function do_connect( joCall, opts, fn ) { await entry.fn( entry.joIn, joOut, null ); } } ); - await wait_web_socket_is_open( joCall.wsConn, + await wait_web_socket_is_open( wsConn, async function( nStep ) { // done }, async function( nStep ) { // step @@ -155,12 +167,13 @@ async function do_connect( joCall, opts, fn ) { joCall.wsConn = null; await fn( joCall, err ); } + return joCall; } async function do_connect_if_needed( joCall, opts, fn ) { try { fn = fn || async function() {}; - if( !owaspUtils.validateURL( joCall.url ) ) + if( !validateURL( joCall.url ) ) throw new Error( "JSON RPC CALLER cannot connect web socket to invalid URL: " + joCall.url ); if( is_ws_url( joCall.url ) && ( !joCall.wsConn ) ) { await joCall.reconnect( fn ); @@ -170,6 +183,20 @@ async function do_connect_if_needed( joCall, opts, fn ) { } catch ( err ) { await fn( joCall, err ); } + return joCall; +} + +async function do_reconnect_ws_step( joCall, opts, fn ) { + if( ! opts.isAutoReconnect ) + return; + fn = fn || async function() {}; + do_connect( joCall, opts, async function( joCall, err ) { + if( err ) { + do_reconnect_ws_step( joCall, opts ); + return; + } + await fn( joCall, null ); + } ); } const impl_sleep = ( milliseconds ) => { return new Promise( resolve => setTimeout( resolve, milliseconds ) ); }; @@ -194,7 +221,7 @@ async function do_call( joCall, joIn, fn ) { joCall.wsConn.send( JSON.stringify( joIn ) ); } else { // console.log( "--- --- --- call URL is", joCall.url ); - if( !owaspUtils.validateURL( joCall.url ) ) { + if( !validateURL( joCall.url ) ) { // throw new Error( "JSON RPC CALLER cannot do query post to invalid URL: " + joCall.url ); await fn( joIn, null, "JSON RPC CALLER cannot do query post to invalid URL: " + joCall.url ); return; @@ -263,7 +290,7 @@ async function do_call( joCall, joIn, fn ) { } async function rpc_call_create( strURL, opts, fn ) { - if( !owaspUtils.validateURL( strURL ) ) + if( !validateURL( strURL ) ) throw new Error( "JSON RPC CALLER cannot create a call object invalid URL: " + strURL ); fn = fn || async function() {}; if( !( strURL && typeof strURL == "string" && strURL.length > 0 ) ) @@ -291,6 +318,7 @@ async function rpc_call_create( strURL, opts, fn ) { } }; await do_connect( joCall, opts, fn ); + return joCall; } function generate_random_integer_in_range( min, max ) { From 5235749e9d34a7c8bd5a9fe3ca84a7c2bcf2c450 Mon Sep 17 00:00:00 2001 From: Sergiy Lavrynenko Date: Thu, 13 Oct 2022 13:02:32 +0100 Subject: [PATCH 017/257] Force disconnect from SGX when no longer needed --- agent/bls.js | 10 +++++++++- agent/rpc-call.js | 40 +++++++++++++++++++++++++++++++++------- 2 files changed, 42 insertions(+), 8 deletions(-) diff --git a/agent/bls.js b/agent/bls.js index fa6244262..97dc900d7 100644 --- a/agent/bls.js +++ b/agent/bls.js @@ -937,6 +937,7 @@ async function do_sign_messages_impl( "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); + await rpcCall.disconnect(); return; } let targetChainName = ""; @@ -958,8 +959,10 @@ async function do_sign_messages_impl( fromChainName = "" + joExtraSignOpts.chain_id_src; // targetChainURL = owaspUtils.w3_2_url( joExtraSignOpts.w3_dst ); // fromChainURL = owaspUtils.w3_2_url( joExtraSignOpts.w3_src ); - } else + } else { + await rpcCall.disconnect(); throw new Error( "CRITICAL ERROR: Failed do_sign_messages_impl() with unknown directon \"" + strDirection + "\"" ); + } const joParams = { direction: "" + strDirection, @@ -998,6 +1001,7 @@ async function do_sign_messages_impl( "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); + await rpcCall.disconnect(); return; } details.write( @@ -1020,6 +1024,7 @@ async function do_sign_messages_impl( "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); + await rpcCall.disconnect(); return; } details.write( strLogPrefix + cc.normal( "Node " ) + cc.info( joNode.nodeID ) + cc.normal( " sign result: " ) + cc.j( joOut.result ? joOut.result : null ) + "\n" ); @@ -1040,6 +1045,7 @@ async function do_sign_messages_impl( cc.debug( " because " ) + cc.info( nThreshold ) + cc.debug( "/" ) + cc.info( nCountOfBlsPartsToCollect ) + cc.debug( " threshold number of BLS signature parts already gathered" ) + "\n" ); + await rpcCall.disconnect(); return; } const arrTmp = joOut.result.signResult.signatureShare.split( ":" ); @@ -1107,7 +1113,9 @@ async function do_sign_messages_impl( log.write( strErrorMessage ); details.write( strErrorMessage ); } + await rpcCall.disconnect(); } ); // joCall.call ... + await rpcCall.disconnect(); } ); // rpcCall.create ... } // for( let i = 0; i < jarrNodes.length; ++i ) diff --git a/agent/rpc-call.js b/agent/rpc-call.js index a3fb8da16..72d4b2f41 100644 --- a/agent/rpc-call.js +++ b/agent/rpc-call.js @@ -187,7 +187,9 @@ async function do_connect_if_needed( joCall, opts, fn ) { } async function do_reconnect_ws_step( joCall, opts, fn ) { - if( ! opts.isAutoReconnect ) + if( ! joCall.isAutoReconnect ) + return; + if( joCall.isDisconnectMode ) return; fn = fn || async function() {}; do_connect( joCall, opts, async function( joCall, err ) { @@ -199,7 +201,25 @@ async function do_reconnect_ws_step( joCall, opts, fn ) { } ); } -const impl_sleep = ( milliseconds ) => { return new Promise( resolve => setTimeout( resolve, milliseconds ) ); }; +async function do_disconnect( joCall, fn ) { + fn = fn || async function() {}; + try { + joCall.isDisconnectMode = true; + const wsConn = joCall.wsConn ? joCall.wsConn : null; + joCall.wsConn = null; + if( wsConn ) + wsConn.close(); + joCall.isDisconnectMode = false; + try { + await fn( joCall, null ); + } catch ( err ) { + } + } catch ( err ) { + await await fn( joCall, err ); + } +} + +const do_sleep = ( milliseconds ) => { return new Promise( resolve => setTimeout( resolve, milliseconds ) ); }; async function do_call( joCall, joIn, fn ) { // console.log( "--- --- --- initial joIn is", joIn ); @@ -269,17 +289,17 @@ async function do_call( joCall, joIn, fn ) { } ); for( let idxWait = 0; ! bCompleteFlag; ++ idxWait ) { if( idxWait < 50 ) - await impl_sleep( 5 ); + await do_sleep( 5 ); else if( idxWait < 100 ) - await impl_sleep( 10 ); + await do_sleep( 10 ); else if( idxWait < 1000 ) - await impl_sleep( 100 ); + await do_sleep( 100 ); else { const nLastWaitPeriod = 200; if( ( idxWait - 1000 ) * nLastWaitPeriod > g_nConnectionTimeoutSeconds ) bCompleteFlag = true; else - await impl_sleep( nLastWaitPeriod ); + await do_sleep( nLastWaitPeriod ); } } // for( let idxWait = 0; ! bCompleteFlag; ++ idxWait ) try { @@ -300,6 +320,8 @@ async function rpc_call_create( strURL, opts, fn ) { "joRpcOptions": opts ? opts : null, "mapPendingByCallID": { }, "wsConn": null, + "isAutoReconnect": opts.isAutoReconnect ? true : false, + "isDisconnectMode": false, "reconnect": async function( fnAfter ) { await do_connect( joCall, fnAfter ); }, @@ -315,6 +337,9 @@ async function rpc_call_create( strURL, opts, fn ) { } await do_call( joCall, joIn, fnAfter ); } ); + }, + "disconnect": async function( fnAfter ) { + await do_disconnect( joCall, fnAfter ); } }; await do_connect( joCall, opts, fn ); @@ -473,5 +498,6 @@ module.exports = { get_valid_host_and_port: get_valid_host_and_port, check_tcp_promise: check_tcp_promise, check_tcp: check_tcp, - check_url: check_url + check_url: check_url, + sleep: do_sleep }; // module.exports From 610506f7213f10d5531af3093b499c7771056df6 Mon Sep 17 00:00:00 2001 From: Sergiy Lavrynenko Date: Thu, 13 Oct 2022 13:17:48 +0100 Subject: [PATCH 018/257] disconnectable RPC calls --- agent/bls.js | 24 +++++++++++++++++------- agent/main.js | 11 +++++++++++ agent/oracle.js | 10 +++++++++- npms/skale-ima/index.js | 16 ++++++++++++++++ npms/skale-observer/observer.js | 4 ++++ 5 files changed, 57 insertions(+), 8 deletions(-) diff --git a/agent/bls.js b/agent/bls.js index 97dc900d7..7bd2596da 100644 --- a/agent/bls.js +++ b/agent/bls.js @@ -937,7 +937,7 @@ async function do_sign_messages_impl( "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); - await rpcCall.disconnect(); + await joCall.disconnect(); return; } let targetChainName = ""; @@ -960,7 +960,7 @@ async function do_sign_messages_impl( // targetChainURL = owaspUtils.w3_2_url( joExtraSignOpts.w3_dst ); // fromChainURL = owaspUtils.w3_2_url( joExtraSignOpts.w3_src ); } else { - await rpcCall.disconnect(); + await joCall.disconnect(); throw new Error( "CRITICAL ERROR: Failed do_sign_messages_impl() with unknown directon \"" + strDirection + "\"" ); } @@ -1001,7 +1001,7 @@ async function do_sign_messages_impl( "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); - await rpcCall.disconnect(); + await joCall.disconnect(); return; } details.write( @@ -1024,7 +1024,7 @@ async function do_sign_messages_impl( "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); - await rpcCall.disconnect(); + await joCall.disconnect(); return; } details.write( strLogPrefix + cc.normal( "Node " ) + cc.info( joNode.nodeID ) + cc.normal( " sign result: " ) + cc.j( joOut.result ? joOut.result : null ) + "\n" ); @@ -1045,7 +1045,7 @@ async function do_sign_messages_impl( cc.debug( " because " ) + cc.info( nThreshold ) + cc.debug( "/" ) + cc.info( nCountOfBlsPartsToCollect ) + cc.debug( " threshold number of BLS signature parts already gathered" ) + "\n" ); - await rpcCall.disconnect(); + await joCall.disconnect(); return; } const arrTmp = joOut.result.signResult.signatureShare.split( ":" ); @@ -1113,9 +1113,8 @@ async function do_sign_messages_impl( log.write( strErrorMessage ); details.write( strErrorMessage ); } - await rpcCall.disconnect(); + await joCall.disconnect(); } ); // joCall.call ... - await rpcCall.disconnect(); } ); // rpcCall.create ... } // for( let i = 0; i < jarrNodes.length; ++i ) @@ -1407,6 +1406,7 @@ async function do_sign_u256( u256, details, fn ) { cc.error( " failed, RPC call was not created, error is: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); + await joCall.disconnect(); return; } details.write( @@ -1428,6 +1428,7 @@ async function do_sign_u256( u256, details, fn ) { cc.error( " failed, RPC call reported error: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); + await joCall.disconnect(); return; } details.write( @@ -1445,6 +1446,7 @@ async function do_sign_u256( u256, details, fn ) { "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); + await joCall.disconnect(); return; } details.write( strLogPrefix + cc.normal( "Node " ) + cc.info( joNode.nodeID ) + cc.normal( " sign result: " ) + cc.j( joOut.result ? joOut.result : null ) + "\n" ); @@ -1521,6 +1523,7 @@ async function do_sign_u256( u256, details, fn ) { log.write( strErrorMessage ); details.write( strErrorMessage ); } + await joCall.disconnect(); } ); // joCall.call ... } ); // rpcCall.create ... } @@ -1643,6 +1646,7 @@ async function handle_skale_call_via_redirect( joCallData ) { cc.error( " JSON RPC call to S-Chain failed, RPC call was not created, error is: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); + await joCall.disconnect(); throw new Error( "JSON RPC call to S-Chain failed, RPC call was not created, error is: " + owaspUtils.extract_error_message( err ) ); } details.write( strLogPrefix + cc.debug( "Will invoke " ) + cc.info( "S-Chain" ) + cc.debug( " with call data " ) + cc.j( joCallData ) + "\n" ); @@ -1653,6 +1657,7 @@ async function handle_skale_call_via_redirect( joCallData ) { cc.error( " JSON RPC call to S-Chain failed, RPC call reported error: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); + await joCall.disconnect(); throw new Error( "JSON RPC call to S-Chain failed, RPC call reported error: " + owaspUtils.extract_error_message( err ) ); } details.write( strLogPrefix + cc.debug( "Call to " ) + cc.info( "S-Chain" ) + cc.debug( " done, answer is: " ) + cc.j( joOut ) + "\n" ); @@ -1666,10 +1671,12 @@ async function handle_skale_call_via_redirect( joCallData ) { log.write( strErrorMessage ); details.write( strErrorMessage ); details.write( strErrorMessage ); + await joCall.disconnect(); throw new Error( "JSON RPC call to S-Chain failed with \"unknown wallet error(3)\", sequence ID is " + sequence_id ); } isSuccess = true; joRetVal = joOut; // joOut.result + await joCall.disconnect(); } ); // joCall.call ... } ); // rpcCall.create ... } catch ( err ) { @@ -1761,6 +1768,7 @@ async function handle_skale_imaVerifyAndSign( joCallData ) { cc.error( " JSON RPC call to SGX failed, RPC call was not created, error is: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); + await joCall.disconnect(); throw new Error( "JSON RPC call to SGX failed, RPC call was not created, error is: " + owaspUtils.extract_error_message( err ) ); } const joCallSGX = { @@ -1782,6 +1790,7 @@ async function handle_skale_imaVerifyAndSign( joCallData ) { cc.error( " JSON RPC call to SGX failed, RPC call reported error: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); + await joCall.disconnect(); throw new Error( "JSON RPC call to SGX failed, RPC call reported error: " + owaspUtils.extract_error_message( err ) ); } details.write( strLogPrefix + cc.debug( "Call to " ) + cc.info( "SGX" ) + cc.debug( " done, answer is: " ) + cc.j( joOut ) + "\n" ); @@ -1794,6 +1803,7 @@ async function handle_skale_imaVerifyAndSign( joCallData ) { joRetVal.result = { signResult: joSignResult }; if( "qa" in joCallData ) joRetVal.qa = joCallData.qa; + await joCall.disconnect(); } ); // joCall.call ... } ); // rpcCall.create ... } catch ( err ) { diff --git a/agent/main.js b/agent/main.js index 716c773bb..479bbc6bf 100644 --- a/agent/main.js +++ b/agent/main.js @@ -1389,6 +1389,7 @@ imaCLI.parse( { await rpcCall.create( imaState.strURL_s_chain, rpcCallOpts, async function( joCall, err ) { if( err ) { console.log( cc.fatal( "CRITICAL ERROR:" ) + cc.error( " JSON RPC call to S-Chain failed" ) ); + await joCall.disconnect(); process.exit( 156 ); } await joCall.call( { @@ -1399,6 +1400,7 @@ imaCLI.parse( { }, async function( joIn, joOut, err ) { if( err ) { console.log( cc.fatal( "CRITICAL ERROR:" ) + cc.error( " JSON RPC call to S-Chain failed, error: " ) + cc.warning( err ) ); + await joCall.disconnect(); process.exit( 157 ); } log.write( strLogPrefix + cc.normal( "S-Chain network information: " ) + cc.j( joOut.result ) + "\n" ); @@ -1417,6 +1419,7 @@ imaCLI.parse( { await rpcCall.create( strNodeURL, rpcCallOpts, async function( joCall, err ) { if( err ) { console.log( cc.fatal( "CRITICAL ERROR:" ) + cc.error( " JSON RPC call to S-Chain failed" ) ); + await joCall.disconnect(); process.exit( 158 ); } await joCall.call( { @@ -1432,7 +1435,9 @@ imaCLI.parse( { } log.write( strLogPrefix + cc.normal( "Node " ) + cc.info( joNode.nodeID ) + cc.normal( " IMA information: " ) + cc.j( joOut.result ) + "\n" ); //process.exit( 0 ); + await joCall.disconnect(); } ); + await joCall.disconnect(); } ); } //process.exit( 0 ); @@ -1442,6 +1447,7 @@ imaCLI.parse( { process.exit( 0 ); } }, 100 ); + await joCall.disconnect(); } ); } ); return true; @@ -1855,6 +1861,7 @@ async function discover_s_chain_network( fnAfter, isSilent, joPrevSChainNetworkI ); } fnAfter( err, null ); + await joCall.disconnect(); return; } await joCall.call( { @@ -1872,6 +1879,7 @@ async function discover_s_chain_network( fnAfter, isSilent, joPrevSChainNetworkI ); } fnAfter( err, null ); + await joCall.disconnect(); return; } if( ( !isSilent ) && IMA.verbose_get() >= IMA.RV_VERBOSE.trace ) @@ -1890,6 +1898,7 @@ async function discover_s_chain_network( fnAfter, isSilent, joPrevSChainNetworkI ); } fnAfter( err2, null ); + await joCall.disconnect(); return; } const jarrNodes = joSChainNetworkInfo.network; @@ -1945,6 +1954,7 @@ async function discover_s_chain_network( fnAfter, isSilent, joPrevSChainNetworkI } // fnAfter( err, null ); ++ cntFailed; + await joCall.disconnect(); return; } joCall.call( { @@ -2075,6 +2085,7 @@ async function discover_s_chain_network( fnAfter, isSilent, joPrevSChainNetworkI ); } }, nWaitStepMilliseconds ); + await joCall.disconnect(); } ); } ); } catch ( err ) { diff --git a/agent/oracle.js b/agent/oracle.js index 809e45bb6..12592c19e 100644 --- a/agent/oracle.js +++ b/agent/oracle.js @@ -93,6 +93,7 @@ function oracle_get_gas_price( oracleOpts, details ) { details.write( cc.fatal( "CRITICAL ORACLE CALL ERROR:" ) + cc.error( " RPC connection problem for url " ) + cc.u( url ) + cc.error( ", error description: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n" ); details.write( err.stack + "\n" ); reject( new Error( "CRITICAL ORACLE CALL ERROR: RPC connection problem for url \"" + url + "\", error description: " + owaspUtils.extract_error_message( err ) ) ); + await joCall.disconnect(); return; } try { @@ -114,6 +115,7 @@ function oracle_get_gas_price( oracleOpts, details ) { details.write( err.stack + "\n" ); } reject( new Error( "CRITICAL ORACLE CALL ERROR: JSON RPC call(oracle_submitRequest) failed, error: " + owaspUtils.extract_error_message( err ) ) ); + await joCall.disconnect(); return; } if( isVerboseTraceDetails ) @@ -122,6 +124,7 @@ function oracle_get_gas_price( oracleOpts, details ) { details.write( cc.fatal( "CRITICAL ORACLE CALL ERROR:" ) + cc.error( " bad unexpecected result" ) + cc.normal( "(" ) + cc.attention( "oracle_submitRequest" ) + cc.normal( ")" ) + "\n" ); details.write( err.stack + "\n" ); reject( new Error( "CRITICAL ORACLE CALL ERROR: bad unexpecected result(oracle_submitRequest)" ) ); + await joCall.disconnect(); return; } for( let idxAttempt = 0; idxAttempt < cntAttempts; ++idxAttempt ) { @@ -144,6 +147,7 @@ function oracle_get_gas_price( oracleOpts, details ) { details.write( err.stack + "\n" ); } //reject( new Error( "CRITICAL ORACLE CALL ERROR: JSON RPC call(oracle_checkResult) failed, error: " + owaspUtils.extract_error_message( err ) ) ); + await joCall.disconnect(); return; } if( isVerboseTraceDetails ) @@ -154,6 +158,7 @@ function oracle_get_gas_price( oracleOpts, details ) { details.write( err.stack + "\n" ); } // reject( new Error( "CRITICAL ORACLE CALL ERROR: bad unexpecected result(oracle_checkResult)" ) ); + await joCall.disconnect(); return; } const joResult = JSON.parse( joOut.result ); @@ -163,25 +168,28 @@ function oracle_get_gas_price( oracleOpts, details ) { if( isVerbose ) details.write( cc.success( "success, computed " ) + cc.sunny( "Gas Price" ) + cc.success( "=" ) + cc.info( gp.toString() ) + cc.success( "=" ) + cc.info( "0x" + gp.toString( 16 ) ) + "\n" ); resolve( gp ); + await joCall.disconnect(); return; } ); } catch ( err ) { details.write( cc.fatal( "CRITICAL ORACLE CALL ERROR:" ) + cc.error( " RPC call" ) + cc.normal( "(" ) + cc.attention( "oracle_checkResult" ) + cc.normal( ")" ) + cc.error( " exception is: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n" ); details.write( err.stack + "\n" ); reject( err ); + await joCall.disconnect(); return; } } // for( let idxAttempt = 0; idxAttempt < cntAttempts; ++idxAttempt ) details.write( cc.fatal( "CRITICAL ORACLE CALL ERROR:" ) + cc.error( " RPC call" ) + cc.normal( "(" ) + cc.attention( "oracle_checkResult" ) + cc.normal( ")" ) + cc.error( " all attempts timed out" ) + "\n" ); reject( new Error( "RPC call(oracle_checkResult) all attempts timed out" ) ); + await joCall.disconnect(); return; } ); } catch ( err ) { details.write( cc.fatal( "CRITICAL ORACLE CALL ERROR:" ) + cc.error( " RPC call" ) + cc.normal( "(" ) + cc.attention( "oracle_submitRequest" ) + cc.normal( ")" ) + cc.error( " exception is: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n" ); details.write( err.stack + "\n" ); reject( err ); - return; } + await joCall.disconnect(); } ); } catch ( err ) { details.write( cc.fatal( "CRITICAL ORACLE CALL ERROR:" ) + cc.error( " RPC call object creation failed, error is: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n" ); diff --git a/npms/skale-ima/index.js b/npms/skale-ima/index.js index 50b3f3125..d5d1bfe83 100644 --- a/npms/skale-ima/index.js +++ b/npms/skale-ima/index.js @@ -1354,6 +1354,7 @@ async function safe_sign_transaction_with_account( details, w3, tx, rawTx, joAcc if( verbose_get() >= RV_VERBOSE.error ) log.write( s ); details.write( s ); + await joCall.disconnect(); return; } const txAdjusted = JSON.parse( JSON.stringify( rawTx ) ); // tx // rawTx @@ -1375,6 +1376,7 @@ async function safe_sign_transaction_with_account( details, w3, tx, rawTx, joAcc if( verbose_get() >= RV_VERBOSE.error ) log.write( s ); details.write( s ); + await joCall.disconnect(); return; } details.write( cc.debug( "Transaction Manager sign-and-send result is: " ) + cc.j( joOut ) + "\n" ); @@ -1387,6 +1389,7 @@ async function safe_sign_transaction_with_account( details, w3, tx, rawTx, joAcc details.write( s ); return; } + await joCall.disconnect(); } ); } ); await sleep( 5000 ); @@ -1446,6 +1449,7 @@ async function safe_sign_transaction_with_account( details, w3, tx, rawTx, joAcc if( verbose_get() >= RV_VERBOSE.error ) log.write( s ); details.write( s ); + await joCall.disconnect(); return; } const msgHash = tx.hash( false ); @@ -1466,6 +1470,7 @@ async function safe_sign_transaction_with_account( details, w3, tx, rawTx, joAcc if( verbose_get() >= RV_VERBOSE.error ) log.write( s ); details.write( s ); + await joCall.disconnect(); return; } details.write( cc.debug( "SGX wallet ECDSA sign result is: " ) + cc.j( joOut ) + "\n" ); @@ -1504,6 +1509,7 @@ async function safe_sign_transaction_with_account( details, w3, tx, rawTx, joAcc tx.r = joNeededResult.r; tx.s = joNeededResult.s; details.write( cc.debug( "Resulting adjusted transaction is: " ) + cc.j( tx ) + "\n" ); + await joCall.disconnect(); } ); } ); await sleep( 3000 ); @@ -4775,6 +4781,7 @@ async function async_pending_tx_start( details, w3, w3_opposite, chain_id, chain if( verbose_get() >= RV_VERBOSE.error ) log.write( s ); details.write( s ); + await joCall.disconnect(); return; } const joIn = { @@ -4790,15 +4797,18 @@ async function async_pending_tx_start( details, w3, w3_opposite, chain_id, chain if( verbose_get() >= RV_VERBOSE.error ) log.write( s ); details.write( s ); + await joCall.disconnect(); return; } details.write( cc.debug( "Pending work start result is: " ) + cc.j( joOut ) + "\n" ); if( joOut && "result" in joOut && "success" in joOut.result ) { if( joOut.result.success ) { details.write( strLogPrefix + cc.success( "Success, pending work start reported" ) + "\n" ); + await joCall.disconnect(); return; } else { details.write( strLogPrefix + cc.warning( "Pending work start was not reported with success" ) + "\n" ); + await joCall.disconnect(); return; } } else { @@ -4806,6 +4816,7 @@ async function async_pending_tx_start( details, w3, w3_opposite, chain_id, chain if( verbose_get() >= RV_VERBOSE.error ) log.write( s ); details.write( s ); + await joCall.disconnect(); return; } } ); @@ -4836,6 +4847,7 @@ async function async_pending_tx_complete( details, w3, w3_opposite, chain_id, ch if( verbose_get() >= RV_VERBOSE.error ) log.write( s ); details.write( s ); + await joCall.disconnect(); return; } const joIn = { @@ -4851,14 +4863,17 @@ async function async_pending_tx_complete( details, w3, w3_opposite, chain_id, ch if( verbose_get() >= RV_VERBOSE.error ) log.write( s ); details.write( s ); + await joCall.disconnect(); return; } details.write( cc.debug( "Pending work complete result is: " ) + cc.j( joOut ) + "\n" ); if( joOut && "result" in joOut && "success" in joOut.result ) { if( joOut.result.success ) { details.write( strLogPrefix + cc.success( "Success, pending work complete reported" ) + "\n" ); + await joCall.disconnect(); return; } else { + await joCall.disconnect(); details.write( strLogPrefix + cc.warning( "Pending work complete was not reported with success" ) + "\n" ); return; } @@ -4867,6 +4882,7 @@ async function async_pending_tx_complete( details, w3, w3_opposite, chain_id, ch if( verbose_get() >= RV_VERBOSE.error ) log.write( s ); details.write( s ); + await joCall.disconnect(); return; } } ); diff --git a/npms/skale-observer/observer.js b/npms/skale-observer/observer.js index 298d2a41f..fbb73f565 100644 --- a/npms/skale-observer/observer.js +++ b/npms/skale-observer/observer.js @@ -617,6 +617,7 @@ async function discover_chain_id( strURL ) { await rpcCall.create( strURL, rpcCallOpts, async function( joCall, err ) { if( err ) { //ret = "Failed to create RPC (" + strURL + ") call: " + owaspUtils.extract_error_message( err ); + await joCall.disconnect(); return; } await joCall.call( { @@ -625,13 +626,16 @@ async function discover_chain_id( strURL ) { }, async function( joIn, joOut, err ) { if( err ) { //ret = "Failed to query RPC (" + strURL + ") for chain ID: " + owaspUtils.extract_error_message( err ); + await joCall.disconnect(); return; } if( ! ( "result" in joOut && joOut.result ) ) { //ret = "Failed to query RPC (" + strURL + ") for chain ID, got bad result: " + JSON.stringify( joOut ); + await joCall.disconnect(); return; } ret = joOut.result; + await joCall.disconnect(); } ); // joCall.call ... } ); // rpcCall.create ... return ret; From 2c207714b7270176045572b1a01e87d729629523 Mon Sep 17 00:00:00 2001 From: Sergiy Lavrynenko Date: Thu, 13 Oct 2022 19:53:54 +0100 Subject: [PATCH 019/257] disconnectable RPC calls --- agent/bls.js | 12 ++++++++---- agent/main.js | 10 ++++++---- agent/oracle.js | 11 ++++++----- agent/rpc-call.js | 2 +- npms/skale-ima/index.js | 12 ++++++++---- npms/skale-observer/observer.js | 3 ++- 6 files changed, 31 insertions(+), 19 deletions(-) diff --git a/agent/bls.js b/agent/bls.js index 7bd2596da..50fa655bd 100644 --- a/agent/bls.js +++ b/agent/bls.js @@ -937,7 +937,8 @@ async function do_sign_messages_impl( "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); - await joCall.disconnect(); + if( joCall ) + await joCall.disconnect(); return; } let targetChainName = ""; @@ -1406,7 +1407,8 @@ async function do_sign_u256( u256, details, fn ) { cc.error( " failed, RPC call was not created, error is: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); - await joCall.disconnect(); + if( joCall ) + await joCall.disconnect(); return; } details.write( @@ -1646,7 +1648,8 @@ async function handle_skale_call_via_redirect( joCallData ) { cc.error( " JSON RPC call to S-Chain failed, RPC call was not created, error is: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); - await joCall.disconnect(); + if( joCall ) + await joCall.disconnect(); throw new Error( "JSON RPC call to S-Chain failed, RPC call was not created, error is: " + owaspUtils.extract_error_message( err ) ); } details.write( strLogPrefix + cc.debug( "Will invoke " ) + cc.info( "S-Chain" ) + cc.debug( " with call data " ) + cc.j( joCallData ) + "\n" ); @@ -1768,7 +1771,8 @@ async function handle_skale_imaVerifyAndSign( joCallData ) { cc.error( " JSON RPC call to SGX failed, RPC call was not created, error is: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); - await joCall.disconnect(); + if( joCall ) + await joCall.disconnect(); throw new Error( "JSON RPC call to SGX failed, RPC call was not created, error is: " + owaspUtils.extract_error_message( err ) ); } const joCallSGX = { diff --git a/agent/main.js b/agent/main.js index 479bbc6bf..66bc900a7 100644 --- a/agent/main.js +++ b/agent/main.js @@ -1389,7 +1389,8 @@ imaCLI.parse( { await rpcCall.create( imaState.strURL_s_chain, rpcCallOpts, async function( joCall, err ) { if( err ) { console.log( cc.fatal( "CRITICAL ERROR:" ) + cc.error( " JSON RPC call to S-Chain failed" ) ); - await joCall.disconnect(); + if( joCall ) + await joCall.disconnect(); process.exit( 156 ); } await joCall.call( { @@ -1437,7 +1438,6 @@ imaCLI.parse( { //process.exit( 0 ); await joCall.disconnect(); } ); - await joCall.disconnect(); } ); } //process.exit( 0 ); @@ -1861,7 +1861,8 @@ async function discover_s_chain_network( fnAfter, isSilent, joPrevSChainNetworkI ); } fnAfter( err, null ); - await joCall.disconnect(); + if( joCall ) + await joCall.disconnect(); return; } await joCall.call( { @@ -1954,7 +1955,8 @@ async function discover_s_chain_network( fnAfter, isSilent, joPrevSChainNetworkI } // fnAfter( err, null ); ++ cntFailed; - await joCall.disconnect(); + if( joCall ) + await joCall.disconnect(); return; } joCall.call( { diff --git a/agent/oracle.js b/agent/oracle.js index 12592c19e..60ad6a5af 100644 --- a/agent/oracle.js +++ b/agent/oracle.js @@ -92,8 +92,9 @@ function oracle_get_gas_price( oracleOpts, details ) { if( err ) { details.write( cc.fatal( "CRITICAL ORACLE CALL ERROR:" ) + cc.error( " RPC connection problem for url " ) + cc.u( url ) + cc.error( ", error description: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n" ); details.write( err.stack + "\n" ); + if( joCall ) + await joCall.disconnect(); reject( new Error( "CRITICAL ORACLE CALL ERROR: RPC connection problem for url \"" + url + "\", error description: " + owaspUtils.extract_error_message( err ) ) ); - await joCall.disconnect(); return; } try { @@ -114,8 +115,8 @@ function oracle_get_gas_price( oracleOpts, details ) { details.write( cc.fatal( "CRITICAL ORACLE CALL ERROR:" ) + cc.error( " JSON RPC call" ) + cc.debug( "(" ) + cc.attention( "oracle_submitRequest" ) + cc.normal( ")" ) + cc.error( " failed, error: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n" ); details.write( err.stack + "\n" ); } - reject( new Error( "CRITICAL ORACLE CALL ERROR: JSON RPC call(oracle_submitRequest) failed, error: " + owaspUtils.extract_error_message( err ) ) ); await joCall.disconnect(); + reject( new Error( "CRITICAL ORACLE CALL ERROR: JSON RPC call(oracle_submitRequest) failed, error: " + owaspUtils.extract_error_message( err ) ) ); return; } if( isVerboseTraceDetails ) @@ -123,8 +124,8 @@ function oracle_get_gas_price( oracleOpts, details ) { if( !( "result" in joOut && typeof joOut.result == "string" && joOut.result.length > 0 ) ) { details.write( cc.fatal( "CRITICAL ORACLE CALL ERROR:" ) + cc.error( " bad unexpecected result" ) + cc.normal( "(" ) + cc.attention( "oracle_submitRequest" ) + cc.normal( ")" ) + "\n" ); details.write( err.stack + "\n" ); - reject( new Error( "CRITICAL ORACLE CALL ERROR: bad unexpecected result(oracle_submitRequest)" ) ); await joCall.disconnect(); + reject( new Error( "CRITICAL ORACLE CALL ERROR: bad unexpecected result(oracle_submitRequest)" ) ); return; } for( let idxAttempt = 0; idxAttempt < cntAttempts; ++idxAttempt ) { @@ -146,8 +147,8 @@ function oracle_get_gas_price( oracleOpts, details ) { details.write( cc.fatal( "CRITICAL ORACLE CALL ERROR:" ) + cc.error( " JSON RPC call" ) + cc.debug( "(" ) + cc.attention( "oracle_checkResult" ) + cc.normal( ")" ) + cc.error( " failed, error: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n" ); details.write( err.stack + "\n" ); } - //reject( new Error( "CRITICAL ORACLE CALL ERROR: JSON RPC call(oracle_checkResult) failed, error: " + owaspUtils.extract_error_message( err ) ) ); await joCall.disconnect(); + //reject( new Error( "CRITICAL ORACLE CALL ERROR: JSON RPC call(oracle_checkResult) failed, error: " + owaspUtils.extract_error_message( err ) ) ); return; } if( isVerboseTraceDetails ) @@ -157,8 +158,8 @@ function oracle_get_gas_price( oracleOpts, details ) { details.write( cc.fatal( "CRITICAL ORACLE CALL ERROR:" ) + cc.error( " bad unexpecected result" ) + cc.normal( "(" ) + cc.attention( "oracle_checkResult" ) + cc.normal( ")" ) + "\n" ); details.write( err.stack + "\n" ); } - // reject( new Error( "CRITICAL ORACLE CALL ERROR: bad unexpecected result(oracle_checkResult)" ) ); await joCall.disconnect(); + // reject( new Error( "CRITICAL ORACLE CALL ERROR: bad unexpecected result(oracle_checkResult)" ) ); return; } const joResult = JSON.parse( joOut.result ); diff --git a/agent/rpc-call.js b/agent/rpc-call.js index 72d4b2f41..c956b70a7 100644 --- a/agent/rpc-call.js +++ b/agent/rpc-call.js @@ -320,7 +320,7 @@ async function rpc_call_create( strURL, opts, fn ) { "joRpcOptions": opts ? opts : null, "mapPendingByCallID": { }, "wsConn": null, - "isAutoReconnect": opts.isAutoReconnect ? true : false, + "isAutoReconnect": ( opts && "isAutoReconnect" in opts && opts.isAutoReconnect ) ? true : false, "isDisconnectMode": false, "reconnect": async function( fnAfter ) { await do_connect( joCall, fnAfter ); diff --git a/npms/skale-ima/index.js b/npms/skale-ima/index.js index d5d1bfe83..5038d22fe 100644 --- a/npms/skale-ima/index.js +++ b/npms/skale-ima/index.js @@ -1354,7 +1354,8 @@ async function safe_sign_transaction_with_account( details, w3, tx, rawTx, joAcc if( verbose_get() >= RV_VERBOSE.error ) log.write( s ); details.write( s ); - await joCall.disconnect(); + if( joCall ) + await joCall.disconnect(); return; } const txAdjusted = JSON.parse( JSON.stringify( rawTx ) ); // tx // rawTx @@ -1449,7 +1450,8 @@ async function safe_sign_transaction_with_account( details, w3, tx, rawTx, joAcc if( verbose_get() >= RV_VERBOSE.error ) log.write( s ); details.write( s ); - await joCall.disconnect(); + if( joCall ) + await joCall.disconnect(); return; } const msgHash = tx.hash( false ); @@ -4781,7 +4783,8 @@ async function async_pending_tx_start( details, w3, w3_opposite, chain_id, chain if( verbose_get() >= RV_VERBOSE.error ) log.write( s ); details.write( s ); - await joCall.disconnect(); + if( joCall ) + await joCall.disconnect(); return; } const joIn = { @@ -4847,7 +4850,8 @@ async function async_pending_tx_complete( details, w3, w3_opposite, chain_id, ch if( verbose_get() >= RV_VERBOSE.error ) log.write( s ); details.write( s ); - await joCall.disconnect(); + if( joCall ) + await joCall.disconnect(); return; } const joIn = { diff --git a/npms/skale-observer/observer.js b/npms/skale-observer/observer.js index fbb73f565..5e07e750d 100644 --- a/npms/skale-observer/observer.js +++ b/npms/skale-observer/observer.js @@ -617,7 +617,8 @@ async function discover_chain_id( strURL ) { await rpcCall.create( strURL, rpcCallOpts, async function( joCall, err ) { if( err ) { //ret = "Failed to create RPC (" + strURL + ") call: " + owaspUtils.extract_error_message( err ); - await joCall.disconnect(); + if( joCall ) + await joCall.disconnect(); return; } await joCall.call( { From 68ffddb46d03cb3b1c76b543472a037adddff3a1 Mon Sep 17 00:00:00 2001 From: Sergiy Lavrynenko Date: Thu, 13 Oct 2022 20:39:57 +0100 Subject: [PATCH 020/257] code cleanup --- agent/bls.js | 56 ---------------------------------------------------- 1 file changed, 56 deletions(-) diff --git a/agent/bls.js b/agent/bls.js index 50fa655bd..1fe92ab36 100644 --- a/agent/bls.js +++ b/agent/bls.js @@ -1826,62 +1826,6 @@ async function handle_skale_imaVerifyAndSign( joCallData ) { return joRetVal; } -/* - -2022-09-28 12:46:22.936: JSON RPC: <<< message from ::ffff:127.0.0.1: -{ - "method":"skale_imaVerifyAndSign", - "params":{ - "direction":"S2S", - "startMessageIdx":11, - "dstChainName":"Bob1000", - "srcChainName":"Bob1001", - "messages":[ - { - "sender":"0xD2aaA00900000000000000000000000000000000", - "destinationContract":"0xD2aaA00900000000000000000000000000000000", - "data":"0x0000000000000000000000000000000000000000000000000000000000000009000000000000000000000000dedd5a997604ade31542e8a3d6aaa280e348aef10000000000000000000000007aa5e36aa15e93d10f4f26357c30f052dacdde5f000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000003e8", - "savedBlockNumberForOptimizations":448 - } - ], - "qa":{ - "skaled_no":0, - "sequence_id":"9cef78ef82228cce2e4ed4bee0c485acca0f368c1d7ae94aa235d26c0b778db3", - "ts":"2022-09-28 12:46:22.934" - } - }, - "jsonrpc":"2.0", - "id":3937967578497932 -} - ---- --- --- --- --- GATHERED SUCCESS DETAILS FOR LATEST( (handle_skale_call_via_redirect()) action (BEGIN) --- --- ------ --- - -2022-09-28 12:46:22.938: Will invoke S-Chain with call data { method: "skale_imaVerifyAndSign", params: { direction: "S2S", startMessageIdx: 11, dstChainName: "Bob1000", srcChainName: "Bob1001", messages: [{ sender: "0xD2aaA00900000000000000000000000000000000", destinationContract: "0xD2aaA00900000000000000000000000000000000", data: "0x0000000000000000000000000000000000000000000000000000000000000009000000000000000000000000dedd5a997604ade31542e8a3d6aaa280e348aef10000000000000000000000007aa5e36aa15e93d10f4f26357c30f052dacdde5f000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000003e8", savedBlockNumberForOptimizations: 448}], qa: { skaled_no: 0, sequence_id: "9cef78ef82228cce2e4ed4bee0c485acca0f368c1d7ae94aa235d26c0b778db3", ts: "2022-09-28 12:46:22.934"}}, jsonrpc: "2.0", id: 3937967578497932} -2022-09-28 12:46:23.052: Call to S-Chain done, answer is: { id: 3937967578497932, jsonrpc: "2.0", result: { qa: { sequence_id: "9cef78ef82228cce2e4ed4bee0c485acca0f368c1d7ae94aa235d26c0b778db3", skaled_no: 0, ts: "2022-09-28 12:46:22.934"}, signResult: { errorMessage: "", signatureShare: "17478565975047244907103895167228083798921988971796902124088684491074746004285:15031994568930252855707831149520060050211430984917981813828217031708710584295:16774908233857298972544743177670408960120003931859857609581436687829921077359:0", status: 0, type: "BLSSignRsp"}}} - ---- --- --- --- --- GATHERED SUCCESS DETAILS FOR LATEST( (handle_skale_call_via_redirect()) action (END) --- --- --- --- --- - -2022-09-28 12:46:23.053: JSON RPC: >>> answer to ::ffff:127.0.0.1: -{ - "id":3937967578497932, - "jsonrpc":"2.0", - "result":{ - "qa":{ - "sequence_id":"9cef78ef82228cce2e4ed4bee0c485acca0f368c1d7ae94aa235d26c0b778db3", - "skaled_no":0, - "ts":"2022-09-28 12:46:22.934" - }, - "signResult":{ - "errorMessage":"", - "signatureShare":"17478565975047244907103895167228083798921988971796902124088684491074746004285:15031994568930252855707831149520060050211430984917981813828217031708710584295:16774908233857298972544743177670408960120003931859857609581436687829921077359:0", - "status":0, - "type":"BLSSignRsp" - } - } -} - - */ - module.exports = { init: init, do_sign_messages_m2s: do_sign_messages_m2s, From 3ffb1557e08a390fbf7e8a3c1e4ef2a841a2154c Mon Sep 17 00:00:00 2001 From: Sergiy Lavrynenko Date: Thu, 13 Oct 2022 21:16:52 +0100 Subject: [PATCH 021/257] basic Oracle U256 signing implementation --- agent/bls.js | 241 +++++++++++++++++++++++++++++++++++--------------- agent/main.js | 2 - 2 files changed, 172 insertions(+), 71 deletions(-) diff --git a/agent/bls.js b/agent/bls.js index 1fe92ab36..c7e6d5a7b 100644 --- a/agent/bls.js +++ b/agent/bls.js @@ -1393,7 +1393,9 @@ async function do_sign_u256( u256, details, fn ) { details.write( strLogPrefix + cc.debug( "Will(u256) collect " ) + cc.info( nCountOfBlsPartsToCollect ) + cc.debug( " from " ) + cc.info( jarrNodes.length ) + cc.debug( " nodes" ) + "\n" ); for( let i = 0; i < jarrNodes.length; ++i ) { const joNode = jarrNodes[i]; - const strNodeURL = imaUtils.compose_schain_node_url( joNode ); + const strNodeURL = imaState.isCrossImaBlsMode + ? imaUtils.compose_ima_agent_node_url( joNode ) + : imaUtils.compose_schain_node_url( joNode ); const strNodeDescColorized = cc.u( strNodeURL ) + " " + cc.normal( "(" ) + cc.bright( i ) + cc.normal( "/" ) + cc.bright( jarrNodes.length ) + cc.normal( ", ID " ) + cc.info( joNode.nodeID ) + cc.normal( ")" ); const rpcCallOpts = null; @@ -1418,7 +1420,7 @@ async function do_sign_u256( u256, details, fn ) { await joCall.call( { method: "skale_imaBSU256", params: { - valueToSign: u256 + valueToSign: u256 // must be 0x string, came from outside 0x string } }, async function( joIn, joOut, err ) { ++joGatheringTracker.nCountReceived; // including errors @@ -1632,71 +1634,71 @@ async function do_sign_u256( u256, details, fn ) { details.write( strLogPrefix + cc.debug( "Completed signing u256 procedure " ) + "\n" ); } -async function handle_skale_call_via_redirect( joCallData ) { - const sequence_id = owaspUtils.remove_starting_0x( get_w3().utils.soliditySha3( log.generate_timestamp_string( null, false ) ) ); - const strLogPrefix = ""; - const strNodeURL = imaState.strURL_s_chain; - const rpcCallOpts = null; - let joRetVal = { }; - const details = log.createMemoryStream( true ); - let isSuccess = false; - try { - await rpcCall.create( strNodeURL, rpcCallOpts, async function( joCall, err ) { - if( err ) { - const strErrorMessage = - strLogPrefix + cc.fatal( "CRITICAL ERROR:" ) + - cc.error( " JSON RPC call to S-Chain failed, RPC call was not created, error is: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n"; - log.write( strErrorMessage ); - details.write( strErrorMessage ); - if( joCall ) - await joCall.disconnect(); - throw new Error( "JSON RPC call to S-Chain failed, RPC call was not created, error is: " + owaspUtils.extract_error_message( err ) ); - } - details.write( strLogPrefix + cc.debug( "Will invoke " ) + cc.info( "S-Chain" ) + cc.debug( " with call data " ) + cc.j( joCallData ) + "\n" ); - await joCall.call( joCallData, async function( joIn, joOut, err ) { - if( err ) { - const strErrorMessage = - strLogPrefix + cc.fatal( "CRITICAL ERROR:" ) + - cc.error( " JSON RPC call to S-Chain failed, RPC call reported error: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n"; - log.write( strErrorMessage ); - details.write( strErrorMessage ); - await joCall.disconnect(); - throw new Error( "JSON RPC call to S-Chain failed, RPC call reported error: " + owaspUtils.extract_error_message( err ) ); - } - details.write( strLogPrefix + cc.debug( "Call to " ) + cc.info( "S-Chain" ) + cc.debug( " done, answer is: " ) + cc.j( joOut ) + "\n" ); - if( joOut.result == null || joOut.result == undefined || ( !typeof joOut.result == "object" ) ) { - const strErrorMessage = - strLogPrefix + cc.fatal( "Wallet CRITICAL ERROR:" ) + " " + - cc.error( "S-Chain reported wallet error: " ) + - cc.warning( owaspUtils.extract_error_message( joOut, "unknown wallet error(3)" ) ) + - cc.error( ", " ) + cc.notice( "sequence ID" ) + cc.error( " is " ) + cc.attention( sequence_id ) + - "\n"; - log.write( strErrorMessage ); - details.write( strErrorMessage ); - details.write( strErrorMessage ); - await joCall.disconnect(); - throw new Error( "JSON RPC call to S-Chain failed with \"unknown wallet error(3)\", sequence ID is " + sequence_id ); - } - isSuccess = true; - joRetVal = joOut; // joOut.result - await joCall.disconnect(); - } ); // joCall.call ... - } ); // rpcCall.create ... - } catch ( err ) { - isSuccess = false; - const strError = owaspUtils.extract_error_message( err ); - joRetVal.error = strError; - const strErrorMessage = - strLogPrefix + cc.fatal( "CRITICAL ERROR:" ) + " " + - cc.error( "JSON RPC call finished with error: " ) + cc.warning( strError ) + - "\n"; - log.write( strErrorMessage ); - details.write( strErrorMessage ); - } - details.exposeDetailsTo( log, "handle_skale_call_via_redirect()", isSuccess ); - details.close(); - return joRetVal; -} +// async function handle_skale_call_via_redirect( joCallData ) { +// const sequence_id = owaspUtils.remove_starting_0x( get_w3().utils.soliditySha3( log.generate_timestamp_string( null, false ) ) ); +// const strLogPrefix = ""; +// const strNodeURL = imaState.strURL_s_chain; +// const rpcCallOpts = null; +// let joRetVal = { }; +// const details = log.createMemoryStream( true ); +// let isSuccess = false; +// try { +// await rpcCall.create( strNodeURL, rpcCallOpts, async function( joCall, err ) { +// if( err ) { +// const strErrorMessage = +// strLogPrefix + cc.fatal( "CRITICAL ERROR:" ) + +// cc.error( " JSON RPC call to S-Chain failed, RPC call was not created, error is: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n"; +// log.write( strErrorMessage ); +// details.write( strErrorMessage ); +// if( joCall ) +// await joCall.disconnect(); +// throw new Error( "JSON RPC call to S-Chain failed, RPC call was not created, error is: " + owaspUtils.extract_error_message( err ) ); +// } +// details.write( strLogPrefix + cc.debug( "Will invoke " ) + cc.info( "S-Chain" ) + cc.debug( " with call data " ) + cc.j( joCallData ) + "\n" ); +// await joCall.call( joCallData, async function( joIn, joOut, err ) { +// if( err ) { +// const strErrorMessage = +// strLogPrefix + cc.fatal( "CRITICAL ERROR:" ) + +// cc.error( " JSON RPC call to S-Chain failed, RPC call reported error: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n"; +// log.write( strErrorMessage ); +// details.write( strErrorMessage ); +// await joCall.disconnect(); +// throw new Error( "JSON RPC call to S-Chain failed, RPC call reported error: " + owaspUtils.extract_error_message( err ) ); +// } +// details.write( strLogPrefix + cc.debug( "Call to " ) + cc.info( "S-Chain" ) + cc.debug( " done, answer is: " ) + cc.j( joOut ) + "\n" ); +// if( joOut.result == null || joOut.result == undefined || ( !typeof joOut.result == "object" ) ) { +// const strErrorMessage = +// strLogPrefix + cc.fatal( "Wallet CRITICAL ERROR:" ) + " " + +// cc.error( "S-Chain reported wallet error: " ) + +// cc.warning( owaspUtils.extract_error_message( joOut, "unknown wallet error(3)" ) ) + +// cc.error( ", " ) + cc.notice( "sequence ID" ) + cc.error( " is " ) + cc.attention( sequence_id ) + +// "\n"; +// log.write( strErrorMessage ); +// details.write( strErrorMessage ); +// details.write( strErrorMessage ); +// await joCall.disconnect(); +// throw new Error( "JSON RPC call to S-Chain failed with \"unknown wallet error(3)\", sequence ID is " + sequence_id ); +// } +// isSuccess = true; +// joRetVal = joOut; // joOut.result +// await joCall.disconnect(); +// } ); // joCall.call ... +// } ); // rpcCall.create ... +// } catch ( err ) { +// isSuccess = false; +// const strError = owaspUtils.extract_error_message( err ); +// joRetVal.error = strError; +// const strErrorMessage = +// strLogPrefix + cc.fatal( "CRITICAL ERROR:" ) + " " + +// cc.error( "JSON RPC call finished with error: " ) + cc.warning( strError ) + +// "\n"; +// log.write( strErrorMessage ); +// details.write( strErrorMessage ); +// } +// details.exposeDetailsTo( log, "handle_skale_call_via_redirect()", isSuccess ); +// details.close(); +// return joRetVal; +// } async function handle_skale_imaVerifyAndSign( joCallData ) { const strLogPrefix = ""; @@ -1749,7 +1751,7 @@ async function handle_skale_imaVerifyAndSign( joCallData ) { if( ! joAccount.strURL ) { joAccount = imaState.joAccount_main_net; if( ! joAccount.strSgxURL ) - throw new Error( "SGX URL is unknown, cannot verify IMA message(s)" ); + throw new Error( "SGX URL is unknown, cannot sign IMA message(s)" ); if( ! joAccount.strBlsKeyName ) throw new Error( "BLS keys name is unknown, cannot sign IMA message(s)" ); } @@ -1826,6 +1828,106 @@ async function handle_skale_imaVerifyAndSign( joCallData ) { return joRetVal; } +async function handle_skale_imaBSU256( joCallData ) { + const strLogPrefix = ""; + const details = log.createMemoryStream( true ); + const joRetVal = { }; + let isSuccess = false; + try { + // + details.write( strLogPrefix + cc.debug( "Will BSU256-sign " ) + cc.j( joCallData ) + "\n" ); + const nThreshold = discover_bls_threshold( imaState.joSChainNetworkInfo ); + const nParticipants = discover_bls_participants( imaState.joSChainNetworkInfo ); + details.write( strLogPrefix + cc.debug( "Discovered BLS threshold is " ) + cc.info( nThreshold ) + cc.debug( "." ) + "\n" ); + details.write( strLogPrefix + cc.debug( "Discovered number of BLS participants is " ) + cc.info( nParticipants ) + cc.debug( "." ) + "\n" ); + // + details.write( strLogPrefix + cc.debug( "BSU256 value is " ) + cc.info( joCallData.params.valueToSign ) + "\n" ); + let arrBytes = imaUtils.hexToBytes( joCallData.params.valueToSign, false ); + arrBytes = a2ha( arrBytes ); + const strMessageHash = owaspUtils.remove_starting_0x( imaUtils.bytesToHex( arrBytes, false ) ); + details.write( strLogPrefix + cc.debug( "BSU256-hash to sign is " ) + cc.info( strMessageHash ) + "\n" ); + // + let joAccount = imaState.joAccount_s_chain; + if( ! joAccount.strURL ) { + joAccount = imaState.joAccount_main_net; + if( ! joAccount.strSgxURL ) + throw new Error( "SGX URL is unknown, cannot sign U256" ); + if( ! joAccount.strBlsKeyName ) + throw new Error( "BLS keys name is unknown, cannot sign U256" ); + } + let rpcCallOpts = null; + if( "strPathSslKey" in joAccount && typeof joAccount.strPathSslKey == "string" && joAccount.strPathSslKey.length > 0 && + "strPathSslCert" in joAccount && typeof joAccount.strPathSslCert == "string" && joAccount.strPathSslCert.length > 0 + ) { + rpcCallOpts = { + "cert": fs.readFileSync( joAccount.strPathSslCert, "utf8" ), + "key": fs.readFileSync( joAccount.strPathSslKey, "utf8" ) + }; + // details.write( cc.debug( "Will sign via SGX with SSL options " ) + cc.j( rpcCallOpts ) + "\n" ); + } + const signerIndex = imaState.joAccount_s_chain.nNodeNumber; + await rpcCall.create( joAccount.strSgxURL, rpcCallOpts, async function( joCall, err ) { + if( err ) { + const strErrorMessage = + strLogPrefix + cc.fatal( "CRITICAL ERROR:" ) + + cc.error( " JSON RPC call to SGX failed, RPC call was not created, error is: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n"; + log.write( strErrorMessage ); + details.write( strErrorMessage ); + if( joCall ) + await joCall.disconnect(); + throw new Error( "JSON RPC call to SGX failed, RPC call was not created, error is: " + owaspUtils.extract_error_message( err ) ); + } + const joCallSGX = { + method: "blsSignMessageHash", + // type: "BLSSignReq", + params: { + keyShareName: joAccount.strBlsKeyName, + messageHash: strMessageHash, + n: nParticipants, + t: nThreshold, + signerIndex: signerIndex + 0 // 1-based + } + }; + details.write( strLogPrefix + cc.debug( "Will invoke " ) + cc.info( "SGX" ) + cc.debug( " with call data " ) + cc.j( joCallSGX ) + "\n" ); + await joCall.call( joCallSGX, async function( joIn, joOut, err ) { + if( err ) { + const strErrorMessage = + strLogPrefix + cc.fatal( "CRITICAL ERROR:" ) + + cc.error( " JSON RPC call to SGX failed, RPC call reported error: " ) + cc.warning( owaspUtils.extract_error_message( err ) ) + "\n"; + log.write( strErrorMessage ); + details.write( strErrorMessage ); + await joCall.disconnect(); + throw new Error( "JSON RPC call to SGX failed, RPC call reported error: " + owaspUtils.extract_error_message( err ) ); + } + details.write( strLogPrefix + cc.debug( "Call to " ) + cc.info( "SGX" ) + cc.debug( " done, answer is: " ) + cc.j( joOut ) + "\n" ); + let joSignResult = joOut; + if( joOut.result != null && joOut.result != undefined && typeof joOut.result == "object" ) + joSignResult = joOut.result; + if( joOut.signResult != null && joOut.signResult != undefined && typeof joOut.signResult == "object" ) + joSignResult = joOut.signResult; + isSuccess = true; + joRetVal.result = { signResult: joSignResult }; + if( "qa" in joCallData ) + joRetVal.qa = joCallData.qa; + await joCall.disconnect(); + } ); // joCall.call ... + } ); // rpcCall.create ... + } catch ( err ) { + isSuccess = false; + const strError = owaspUtils.extract_error_message( err ); + joRetVal.error = strError; + const strErrorMessage = + strLogPrefix + cc.fatal( "CRITICAL ERROR:" ) + " " + + cc.error( "BSU256-signer error: " ) + cc.warning( strError ) + + "\n"; + log.write( strErrorMessage ); + details.write( strErrorMessage ); + } + details.exposeDetailsTo( log, "BSU256-signer", isSuccess ); + details.close(); + return joRetVal; +} + module.exports = { init: init, do_sign_messages_m2s: do_sign_messages_m2s, @@ -1834,5 +1936,6 @@ module.exports = { do_sign_u256: do_sign_u256, // handle_skale_imaVerifyAndSign: handle_skale_call_via_redirect, handle_skale_imaVerifyAndSign: handle_skale_imaVerifyAndSign, - handle_skale_imaBSU256: handle_skale_call_via_redirect + // handle_skale_imaBSU256: handle_skale_call_via_redirect + handle_skale_imaBSU256: handle_skale_imaBSU256 }; // module.exports diff --git a/agent/main.js b/agent/main.js index 66bc900a7..cc91d37c9 100644 --- a/agent/main.js +++ b/agent/main.js @@ -2562,8 +2562,6 @@ async function single_transfer_loop() { return true; } - if( IMA.verbose_get() >= IMA.RV_VERBOSE.information ) - log.write( strLogPrefix + cc.debug( "Will invoke Oracle gas price setup..." ) + "\n" ); let b0 = true; if( IMA.getEnabledOracle() ) { if( IMA.verbose_get() >= IMA.RV_VERBOSE.information ) From 7b13e5941bfed1bb9df729ded1ded20c2fd9e1cd Mon Sep 17 00:00:00 2001 From: Sergiy Lavrynenko Date: Thu, 13 Oct 2022 21:27:42 +0100 Subject: [PATCH 022/257] code cleanup --- agent/main.js | 9 --------- 1 file changed, 9 deletions(-) diff --git a/agent/main.js b/agent/main.js index cc91d37c9..2573f2c52 100644 --- a/agent/main.js +++ b/agent/main.js @@ -2283,16 +2283,7 @@ if( imaState.nJsonRpcPort > 0 ) { switch ( joMessage.method ) { case "echo": case "ping": - // call: { "id": 1, "method": "echo" } - // answer: { "id": 1, "method": "echo", "error": null } - // call: { "id": 1, "method": "ping" } - // answer: { "id": 1, "method": "ping", "error": null } break; - // case "get_schain_network_info": - // // call: { "id": 1, "method": "get_schain_network_info" } - // // answer: { "id": 1, "method": "get_schain_network_info", "error": null, "schain_network_info": ... } - // joAnswer.schain_network_info = imaState.joSChainNetworkInfo; - // break; case "skale_imaVerifyAndSign": // joAnswer = await imaBLS.handle_skale_imaVerifyAndSign( joMessage ); isSkipMode = true; From a6e064b707002998790b108ddd75b6f07a76bab7 Mon Sep 17 00:00:00 2001 From: Sergiy Lavrynenko Date: Thu, 13 Oct 2022 22:12:19 +0100 Subject: [PATCH 023/257] improved Oracle U256 signing implementation --- agent/bls.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/agent/bls.js b/agent/bls.js index c7e6d5a7b..1e4e5d642 100644 --- a/agent/bls.js +++ b/agent/bls.js @@ -552,6 +552,7 @@ function perform_bls_verify_i_u256( details, nZeroBasedNodeIndex, joResultFromNo let strOutput = ""; try { shell.cd( strActionDir ); + // const joMsg = { message: keccak256_u256( u256, true ) }; details.write( strLogPrefix + cc.debug( "BLS u256 node " ) + cc.notice( "#" ) + cc.info( nZeroBasedNodeIndex ) + cc.debug( " verify message " ) + cc.j( joMsg ) + cc.debug( " composed from " ) + cc.j( u256 ) + cc.debug( " using glue " ) + cc.j( joResultFromNode ) + cc.debug( " and public key " ) + cc.j( joPublicKey ) + "\n" ); const strSignResultFileName = strActionDir + "/sign-result" + nZeroBasedNodeIndex + ".json"; @@ -1835,17 +1836,16 @@ async function handle_skale_imaBSU256( joCallData ) { let isSuccess = false; try { // - details.write( strLogPrefix + cc.debug( "Will BSU256-sign " ) + cc.j( joCallData ) + "\n" ); + details.write( strLogPrefix + cc.debug( "Will U256-BLS-sign " ) + cc.j( joCallData ) + "\n" ); const nThreshold = discover_bls_threshold( imaState.joSChainNetworkInfo ); const nParticipants = discover_bls_participants( imaState.joSChainNetworkInfo ); details.write( strLogPrefix + cc.debug( "Discovered BLS threshold is " ) + cc.info( nThreshold ) + cc.debug( "." ) + "\n" ); details.write( strLogPrefix + cc.debug( "Discovered number of BLS participants is " ) + cc.info( nParticipants ) + cc.debug( "." ) + "\n" ); // - details.write( strLogPrefix + cc.debug( "BSU256 value is " ) + cc.info( joCallData.params.valueToSign ) + "\n" ); - let arrBytes = imaUtils.hexToBytes( joCallData.params.valueToSign, false ); - arrBytes = a2ha( arrBytes ); - const strMessageHash = owaspUtils.remove_starting_0x( imaUtils.bytesToHex( arrBytes, false ) ); - details.write( strLogPrefix + cc.debug( "BSU256-hash to sign is " ) + cc.info( strMessageHash ) + "\n" ); + const u256 = joCallData.params.valueToSign; + details.write( strLogPrefix + cc.debug( "U256 original value is " ) + cc.info( u256 ) + "\n" ); + const strMessageHash = keccak256_u256( u256, true ); + details.write( strLogPrefix + cc.debug( "haso of U256 value to sign is " ) + cc.info( strMessageHash ) + "\n" ); // let joAccount = imaState.joAccount_s_chain; if( ! joAccount.strURL ) { @@ -1918,12 +1918,12 @@ async function handle_skale_imaBSU256( joCallData ) { joRetVal.error = strError; const strErrorMessage = strLogPrefix + cc.fatal( "CRITICAL ERROR:" ) + " " + - cc.error( "BSU256-signer error: " ) + cc.warning( strError ) + + cc.error( "U256-BLS-signer error: " ) + cc.warning( strError ) + "\n"; log.write( strErrorMessage ); details.write( strErrorMessage ); } - details.exposeDetailsTo( log, "BSU256-signer", isSuccess ); + details.exposeDetailsTo( log, "U256-BLS-signer", isSuccess ); details.close(); return joRetVal; } From 5dbfe9c2aed12bd65d12af5423d7b5588ba650fb Mon Sep 17 00:00:00 2001 From: Sergiy Lavrynenko Date: Wed, 26 Oct 2022 18:46:55 +0100 Subject: [PATCH 024/257] Detached PTX(pendint transaction analysis) --- npms/skale-ima/index.js | 302 +++------------------------------------ npms/skale-ima/pow | Bin 14547824 -> 0 bytes npms/skale-ima/ptx.js | 308 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 324 insertions(+), 286 deletions(-) delete mode 100755 npms/skale-ima/pow create mode 100644 npms/skale-ima/ptx.js diff --git a/npms/skale-ima/index.js b/npms/skale-ima/index.js index 5038d22fe..78dd00fe7 100644 --- a/npms/skale-ima/index.js +++ b/npms/skale-ima/index.js @@ -43,6 +43,8 @@ cc.enable( false ); log.addStdout(); // log.add( strFilePath, nMaxSizeBeforeRotation, nMaxFilesCount ); // example: log output to file +const ptx = require( "./ptx.js" ); + const owaspUtils = require( "../skale-owasp/owasp-util.js" ); const { getWeb3FromURL } = require( "../../agent/cli.js" ); @@ -854,7 +856,7 @@ async function do_oracle_gas_price_setup( } ); print_gas_usage_report_from_array( "(intermediate result) ORACLE GAS PRICE SETUP ", jarrReceipts ); // if( optsPendingTxAnalysis && "isEnabled" in optsPendingTxAnalysis && optsPendingTxAnalysis.isEnabled ) - // await async_pending_tx_complete( details, w3_schain, w3_main_net, chain_id_schain, chain_id_mainnet, "" + joReceipt.transactionHash ); + // await ptx.complete( details, w3_schain, w3_main_net, chain_id_schain, chain_id_mainnet, "" + joReceipt.transactionHash ); } save_transfer_success( "oracle" ); } ); @@ -4769,279 +4771,6 @@ function parseIntOrHex( s ) { ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -async function async_pending_tx_start( details, w3, w3_opposite, chain_id, chain_id_opposite, txHash ) { - const strLogPrefix = ""; - try { - if( chain_id == "Mainnet" ) { - details.write( strLogPrefix + cc.debug( "Reporting pending transaction " ) + cc.notice( txHash ) + + cc.debug( " start from " ) + cc.u( owaspUtils.w3_2_url( w3 ) ) + cc.debug( "..." ) + "\n" ); - const strNodeURL = owaspUtils.w3_2_url( w3_opposite ); - details.write( strLogPrefix + cc.debug( "Will report pending work cache to " ) + cc.u( strNodeURL ) + cc.debug( "..." ) + "\n" ); - const rpcCallOpts = null; - await rpcCall.create( strNodeURL, rpcCallOpts, async function( joCall, err ) { - if( err ) { - const s = cc.fatal( "PENDING WORK START ERROR:" ) + cc.error( " JSON RPC call to S-Chain node failed" ) + "\n"; - if( verbose_get() >= RV_VERBOSE.error ) - log.write( s ); - details.write( s ); - if( joCall ) - await joCall.disconnect(); - return; - } - const joIn = { - method: "skale_imaTxnInsert", - params: { - hash: "" + txHash - } - }; - details.write( cc.debug( "Starting pending work with " ) + cc.j( joIn ) + "\n" ); - await joCall.call( joIn, async function( joIn, joOut, err ) { - if( err ) { - const s = cc.fatal( "PENDING WORK START ERROR:" ) + cc.error( " JSON RPC call to S-Chain node, error: " ) + cc.warning( err ) + "\n"; - if( verbose_get() >= RV_VERBOSE.error ) - log.write( s ); - details.write( s ); - await joCall.disconnect(); - return; - } - details.write( cc.debug( "Pending work start result is: " ) + cc.j( joOut ) + "\n" ); - if( joOut && "result" in joOut && "success" in joOut.result ) { - if( joOut.result.success ) { - details.write( strLogPrefix + cc.success( "Success, pending work start reported" ) + "\n" ); - await joCall.disconnect(); - return; - } else { - details.write( strLogPrefix + cc.warning( "Pending work start was not reported with success" ) + "\n" ); - await joCall.disconnect(); - return; - } - } else { - const s = cc.fatal( "PENDING WORK START ERROR:" ) + cc.error( " JSON RPC call to S-Chain node, returned bad answer: " ) + cc.j( joOut ) + "\n"; - if( verbose_get() >= RV_VERBOSE.error ) - log.write( s ); - details.write( s ); - await joCall.disconnect(); - return; - } - } ); - } ); - } - } catch ( err ) { - const s = - strLogPrefix + cc.error( "PENDING WORK START ERROR: API call error from " ) + cc.u( owaspUtils.w3_2_url( w3 ) ) + - cc.error( ": " ) + cc.error( err ) + - "\n"; - if( verbose_get() >= RV_VERBOSE.error ) - log.write( s ); - details.write( s ); - } -} - -async function async_pending_tx_complete( details, w3, w3_opposite, chain_id, chain_id_opposite, txHash ) { - const strLogPrefix = ""; - try { - if( chain_id == "Mainnet" ) { - details.write( strLogPrefix + cc.debug( "Reporting pending transaction " ) + cc.notice( txHash ) + + cc.debug( " completion from " ) + cc.u( owaspUtils.w3_2_url( w3 ) ) + cc.debug( "..." ) + "\n" ); - const strNodeURL = owaspUtils.w3_2_url( w3_opposite ); - details.write( strLogPrefix + cc.debug( "Will report pending work cache to " ) + cc.u( strNodeURL ) + cc.debug( "..." ) + "\n" ); - const rpcCallOpts = null; - await rpcCall.create( strNodeURL, rpcCallOpts, async function( joCall, err ) { - if( err ) { - const s = cc.fatal( "PENDING WORK COMPLETE ERROR:" ) + cc.error( " JSON RPC call to S-Chain node failed" ) + "\n"; - if( verbose_get() >= RV_VERBOSE.error ) - log.write( s ); - details.write( s ); - if( joCall ) - await joCall.disconnect(); - return; - } - const joIn = { - method: "skale_imaTxnErase", - params: { - hash: "" + txHash - } - }; - details.write( cc.debug( "Completing pending work with " ) + cc.j( joIn ) + "\n" ); - await joCall.call( joIn, async function( joIn, joOut, err ) { - if( err ) { - const s = cc.fatal( "PENDING WORK COMPLETE ERROR:" ) + cc.error( " JSON RPC call to S-Chain node, error: " ) + cc.warning( err ) + "'n"; - if( verbose_get() >= RV_VERBOSE.error ) - log.write( s ); - details.write( s ); - await joCall.disconnect(); - return; - } - details.write( cc.debug( "Pending work complete result is: " ) + cc.j( joOut ) + "\n" ); - if( joOut && "result" in joOut && "success" in joOut.result ) { - if( joOut.result.success ) { - details.write( strLogPrefix + cc.success( "Success, pending work complete reported" ) + "\n" ); - await joCall.disconnect(); - return; - } else { - await joCall.disconnect(); - details.write( strLogPrefix + cc.warning( "Pending work complete was not reported with success" ) + "\n" ); - return; - } - } else { - const s = cc.fatal( "PENDING WORK COMPLETE ERROR:" ) + cc.error( " JSON RPC call to S-Chain node, returned bad answer: " ) + cc.j( joOut ) + "\n"; - if( verbose_get() >= RV_VERBOSE.error ) - log.write( s ); - details.write( s ); - await joCall.disconnect(); - return; - } - } ); - } ); - - } - } catch ( err ) { - const s = - strLogPrefix + cc.error( "PENDING WORK COMPLETE ERROR: API call error from " ) + cc.u( owaspUtils.w3_2_url( w3 ) ) + - cc.error( ": " ) + cc.error( err ) + - "\n"; - if( verbose_get() >= RV_VERBOSE.error ) - log.write( s ); - details.write( s ); - } -} - -// function isIterable( value ) { -// return Symbol.iterator in Object( value ); -// } - -async function async_pending_tx_scanner( details, w3, w3_opposite, chain_id, chain_id_opposite, cb ) { - cb = cb || function( tx ) { }; - const strLogPrefix = ""; - try { - details.write( strLogPrefix + cc.debug( "Scanning pending transactions from " ) + cc.u( owaspUtils.w3_2_url( w3 ) ) + cc.debug( "..." ) + "\n" ); - if( chain_id == "Mainnet" ) { - const strNodeURL = owaspUtils.w3_2_url( w3_opposite ); - details.write( strLogPrefix + cc.debug( "Using pending work cache from " ) + cc.u( strNodeURL ) + cc.debug( "..." ) + "\n" ); - let havePendingWorkInfo = false; - const rpcCallOpts = null; - await rpcCall.create( strNodeURL, rpcCallOpts, async function( joCall, err ) { - if( err ) { - const s = cc.fatal( "PENDING WORK CACHE ERROR:" ) + cc.error( " JSON RPC call to S-Chain node failed" ) + "\n"; - if( verbose_get() >= RV_VERBOSE.error ) - log.write( s ); - details.write( s ); - return; - } - const joIn = { - method: "skale_imaTxnListAll", - params: {} - }; - details.write( cc.debug( "Calling pending work cache with " ) + cc.j( joIn ) + "\n" ); - await joCall.call( joIn, async function( joIn, joOut, err ) { - if( err ) { - havePendingWorkInfo = true; - const s = cc.fatal( "PENDING WORK CACHE ERROR:" ) + cc.error( " JSON RPC call to S-Chain node, error: " ) + cc.warning( err ); - if( verbose_get() >= RV_VERBOSE.error ) - log.write( s ); - details.write( s ); - return; - } - details.write( cc.debug( "Pending work cache result is: " ) + cc.j( joOut ) + "\n" ); - if( joOut && "result" in joOut && "success" in joOut.result ) { - if( joOut.result.success && "allTrackedTXNs" in joOut.result && joOut.result.allTrackedTXNs.length > 0 ) { - details.write( strLogPrefix + cc.debug( "Got " ) + cc.j( joOut.result.allTrackedTXNs.length ) + cc.debug( " pending transaction(s)" ) + "\n" ); - let cntReviewedTNXs = 0; - for( const joTXE of joOut.result.allTrackedTXNs ) { - ++ cntReviewedTNXs; - const joTX = { - hash: "" + joTXE.hash, - to: "holder.value.MessageProxy" - }; - const isContinue = cb( joTX ); - if( ! isContinue ) - break; - } - details.write( strLogPrefix + cc.debug( "Reviewed " ) + cc.info( cntReviewedTNXs ) + cc.debug( " pending transaction(s)" ) + "\n" ); - havePendingWorkInfo = true; - return; - } else { - details.write( strLogPrefix + cc.debug( "Reviewed " ) + cc.info( 0 ) + cc.debug( " pending transaction(s)" ) + "\n" ); - havePendingWorkInfo = true; - return; - } - } else { - const s = cc.fatal( "PENDING WORK CACHE ERROR:" ) + cc.error( " JSON RPC call to S-Chain node, returned bad answer: " ) + cc.j( joOut ); - if( verbose_get() >= RV_VERBOSE.error ) - log.write( s ); - details.write( s ); - havePendingWorkInfo = true; - return; - } - } ); - } ); - let nWaitAttempt = 0; - while( ! havePendingWorkInfo ) { - await sleep( 3000 ); - ++ nWaitAttempt; - if( nWaitAttempt >= 10 ) { - havePendingWorkInfo = true; // workaround for es-lint - const s = cc.fatal( "PENDING WORK CACHE ERROR:" ) + cc.error( " Wait timeout" ) + "\n"; - if( verbose_get() >= RV_VERBOSE.error ) - log.write( s ); - details.write( s ); - break; - } - } - } else { // if( chain_id == "Mainnet" ) - const mapTXs = {}; - let tx_idx = 0; - while( true ) { - let have_next_tx = false; - await w3.eth.getTransactionFromBlock( "pending", tx_idx, function( err, rslt ) { - try { - if( err ) - return; - if( ! rslt ) - return; - if( typeof rslt != "object" ) - return; - have_next_tx = true; - const hash = "" + rslt.hash; - if( hash in mapTXs ) - return; - mapTXs[hash] = rslt; - // details.write( strLogPrefix + cc.debug( "Got pending transaction: " ) + cc.j( rslt ) + "\n" ); - const isContinue = cb( rslt ); - if( ! isContinue ) { - have_next_tx = false; - return; - } - } catch ( err ) { - if( verbose_get() >= RV_VERBOSE.error ) { - const s = - strLogPrefix + cc.error( "PENDING TRANSACTIONS ENUMERATION HANDLER ERROR: from " ) + cc.u( owaspUtils.w3_2_url( w3 ) ) + - cc.error( ": " ) + cc.error( err ) + - "\n"; - if( verbose_get() >= RV_VERBOSE.error ) - log.write( s ); - details.write( s ); - } - } - } ); - if( ! have_next_tx ) - break; - ++ tx_idx; - } - details.write( strLogPrefix + cc.debug( "Got " ) + cc.j( Object.keys( mapTXs ).length ) + cc.debug( " pending transaction(s)" ) + "\n" ); - } // else from if( chain_id == "Mainnet" ) - } catch ( err ) { - const s = - strLogPrefix + cc.error( "PENDING TRANSACTIONS SCAN ERROR: API call error from " ) + cc.u( owaspUtils.w3_2_url( w3 ) ) + - cc.error( ": " ) + cc.error( err ) + - "\n"; - if( verbose_get() >= RV_VERBOSE.error ) - log.write( s ); - details.write( s ); - } -} - -///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - async function find_out_reference_log_record( details, w3, jo_message_proxy, nBlockId, nMessageNumberToFind, isVerbose ) { const strLogPrefix = ""; const bnMessageNumberToFind = w3.utils.toBN( nMessageNumberToFind.toString() ); @@ -5498,7 +5227,7 @@ async function do_transfer( let wasIgnoredPTX = false; try { const strShortMessageProxyAddressToCompareWith = owaspUtils.remove_starting_0x( jo_message_proxy_dst.options.address ).toLowerCase(); - await async_pending_tx_scanner( details, w3_dst, w3_src, chain_id_dst, chain_id_src, function( joTX ) { + await ptx.scanner( details, w3_dst, w3_src, chain_id_dst, chain_id_src, function( joTX ) { if( "to" in joTX ) { if( joTX.to == "holder.value.MessageProxy" ) { joFoundPendingTX = joTX; @@ -5525,7 +5254,7 @@ async function do_transfer( await sleep( optsPendingTxAnalysis.nTimeoutSecondsBeforeSecondAttempt * 1000 ); // joFoundPendingTX = null; - await async_pending_tx_scanner( w3_dst, w3_src, chain_id_dst, chain_id_src, function( joTX ) { + await ptx.scanner( w3_dst, w3_src, chain_id_dst, chain_id_src, function( joTX ) { if( "to" in joTX ) { if( joTX.to == "holder.value.MessageProxy" ) { joFoundPendingTX = joTX; @@ -5913,10 +5642,10 @@ async function do_transfer( let joReceipt = null; if( joPostIncomingMessagesSR.joACI.isAutoSend ) { // - // NOTICE: async_pending_tx_start()/ async_pending_tx_complete() must be called only in do_transfer() + // NOTICE: ptx.start()/ ptx.complete() must be called only in do_transfer() // if( optsPendingTxAnalysis && "isEnabled" in optsPendingTxAnalysis && optsPendingTxAnalysis.isEnabled ) - await async_pending_tx_start( detailsB, w3_dst, w3_src, chain_id_dst, chain_id_src, "" + joPostIncomingMessagesSR.txHashSent ); + await ptx.start( detailsB, w3_dst, w3_src, chain_id_dst, chain_id_src, "" + joPostIncomingMessagesSR.txHashSent ); joReceipt = await get_web3_transactionReceipt( detailsB, 10, w3_dst, joPostIncomingMessagesSR.txHashSent ); } else { const serializedTx_postIncomingMessages = tx_postIncomingMessages.serialize(); @@ -5933,10 +5662,10 @@ async function do_transfer( } ); print_gas_usage_report_from_array( "(intermediate result) TRANSFER " + chain_id_src + " -> " + chain_id_dst, jarrReceipts ); // - // NOTICE: async_pending_tx_start()/ async_pending_tx_complete() must be called only in do_transfer() + // NOTICE: ptx.start()/ ptx.complete() must be called only in do_transfer() // if( optsPendingTxAnalysis && "isEnabled" in optsPendingTxAnalysis && optsPendingTxAnalysis.isEnabled ) - await async_pending_tx_complete( detailsB, w3_dst, w3_src, chain_id_dst, chain_id_src, "" + joReceipt.transactionHash ); + await ptx.complete( detailsB, w3_dst, w3_src, chain_id_dst, chain_id_src, "" + joReceipt.transactionHash ); } cntProcessed += cntAccumulatedForBlock; // @@ -6430,7 +6159,7 @@ async function mintERC20( let joReceipt = null; if( joSR.joACI.isAutoSend ) { // if( optsPendingTxAnalysis && "isEnabled" in optsPendingTxAnalysis && optsPendingTxAnalysis.isEnabled ) - // await async_pending_tx_start( details, w3, w3, cid, cid, "" + joSR.txHashSent ); + // await ptx.start( details, w3, w3, cid, cid, "" + joSR.txHashSent ); joReceipt = await get_web3_transactionReceipt( details, 10, w3, joSR.txHashSent ); } else { const serializedTx_mint = tx_mint.serialize(); @@ -6526,7 +6255,7 @@ async function mintERC721( let joReceipt = null; if( joSR.joACI.isAutoSend ) { // if( optsPendingTxAnalysis && "isEnabled" in optsPendingTxAnalysis && optsPendingTxAnalysis.isEnabled ) - // await async_pending_tx_start( details, w3, w3, cid, cid, "" + joSR.txHashSent ); + // await ptx.start( details, w3, w3, cid, cid, "" + joSR.txHashSent ); joReceipt = await get_web3_transactionReceipt( details, 10, w3, joSR.txHashSent ); } else { const serializedTx_mint = tx_mint.serialize(); @@ -6625,7 +6354,7 @@ async function mintERC1155( let joReceipt = null; if( joSR.joACI.isAutoSend ) { // if( optsPendingTxAnalysis && "isEnabled" in optsPendingTxAnalysis && optsPendingTxAnalysis.isEnabled ) - // await async_pending_tx_start( details, w3, w3, cid, cid, "" + joSR.txHashSent ); + // await ptx.start( details, w3, w3, cid, cid, "" + joSR.txHashSent ); joReceipt = await get_web3_transactionReceipt( details, 10, w3, joSR.txHashSent ); } else { const serializedTx_mint = tx_mint.serialize(); @@ -6721,7 +6450,7 @@ async function burnERC20( let joReceipt = null; if( joSR.joACI.isAutoSend ) { // if( optsPendingTxAnalysis && "isEnabled" in optsPendingTxAnalysis && optsPendingTxAnalysis.isEnabled ) - // await async_pending_tx_start( details, w3, w3, cid, cid, "" + joSR.txHashSent ); + // await ptx.start( details, w3, w3, cid, cid, "" + joSR.txHashSent ); joReceipt = await get_web3_transactionReceipt( details, 10, w3, joSR.txHashSent ); } else { const serializedTx_burn = tx_burn.serialize(); @@ -6817,7 +6546,7 @@ async function burnERC721( let joReceipt = null; if( joSR.joACI.isAutoSend ) { // if( optsPendingTxAnalysis && "isEnabled" in optsPendingTxAnalysis && optsPendingTxAnalysis.isEnabled ) - // await async_pending_tx_start( details, w3, w3, cid, cid, "" + joSR.txHashSent ); + // await ptx.start( details, w3, w3, cid, cid, "" + joSR.txHashSent ); joReceipt = await get_web3_transactionReceipt( details, 10, w3, joSR.txHashSent ); } else { const serializedTx_burn = tx_burn.serialize(); @@ -6915,7 +6644,7 @@ async function burnERC1155( let joReceipt = null; if( joSR.joACI.isAutoSend ) { // if( optsPendingTxAnalysis && "isEnabled" in optsPendingTxAnalysis && optsPendingTxAnalysis.isEnabled ) - // await async_pending_tx_start( details, w3, w3, cid, cid, "" + joSR.txHashSent ); + // await ptx.start( details, w3, w3, cid, cid, "" + joSR.txHashSent ); joReceipt = await get_web3_transactionReceipt( details, 10, w3, joSR.txHashSent ); } else { const serializedTx_burn = tx_burn.serialize(); @@ -6949,6 +6678,7 @@ module.exports.longSeparator = g_mtaStrLongSeparator; module.exports.noop = noop; module.exports.cc = cc; module.exports.log = log; +module.exports.ptx = ptx; module.exports.sleep = sleep; module.exports.owaspUtils = owaspUtils; module.exports.w3mod = w3mod; diff --git a/npms/skale-ima/pow b/npms/skale-ima/pow deleted file mode 100755 index cff13c5ed1378868c24d01c34cc7210dc10a241e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14547824 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∋(V2_es1JTevbHO-}IcX!%t1uPvn=MmOQt| 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 `2N!Rn|A*s)rq1Ia9-xGkdslrh$*P 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�q>ij1e{0#CqxN&J?c}y$I%A` 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

7~`Oqp{x3u^T-87hBai_90IL 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 z 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

`fWj^EtK$0 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

kQ}Axb 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