Coder Social home page Coder Social logo

rsk-explorer-api's Introduction

Rsk Explorer API

Requisites

  • postgres
  • node: v16+
  • access to JSON/RPC interface of a rskj node >= 2.0.1 with this modules enabled: eth, net, web3, txpool, debug and trace.

Configuration steps

Section 1: Environment setup

  • create a database 'explorer_db'
  • create sql tables using the script prisma/rsk-explorer-database.sql
  • Install pm2:
    • npm install -g pm2
    • Enable pm2 log rotation: pm2 install pm2-logrotate
    • Enable log-rotation compression: pm2 set pm2-logrotate:compress true
    • For more options:
  • Configure database credentials, node urls, etc, in src/lib/defaultConfig.js file:
{
  source: {
    protocol: 'http',
    node: 'localhost',
    port: 4444,
    url: null
  },
  sourceRoutes: { // Nod3Router routes, used as default when source is an array of sources
    subscribe: 0, // delegates subscriptions to the first node
    rsk: 0, // delegates rsk module to the node that handle subscriptions
    trace: 1 // delegates trace_ module to the second node
  },
  db: {
    protocol: 'postgres://',
    databaseName: 'explorer_db',
    host: 'localhost',
    port: 5432,
    user: 'postgres',
    password: 12345678
  },
  api: {
    address: 'localhost',
    port: 3003,
    lastBlocks: 30,
    MIN_LIMIT: 10,
    LIMIT: 50,
    MAX_LIMIT: 500,
    MAX_PAGES: 10,
    allowUserEvents: false,
    exposeDoc: false,
    // All modules are enabled as default
    modules: setAllModules(true),
    delayedFields,
    allowCountQueries: false
  },
  blocks: {
    blocksQueueSize: 10,
    bcTipSize: 120,
    batchRequestSize: 20,
    debug: false,
    ports: [3010], // list of services ports, if the list runs out, the services will try to take the next  ports starting from the last
    address: '127.0.0.1',
    services
  },
  forceSaveBcStats: true,
  enableTxPoolFromApi: true
}

api

  • address [string] api server bind address
  • port [number] api server port
  • exposeDoc [boolean]: serve rsk-openapi-ui on /doc to render swagger.json
  • allowUserEvents [boolean]: allow contractVerifier

To enable contract verifier module:

The contractVerifier module requires a connection to a rsk-contract-verifier instance. The url must be provided on api section:

  • set api.allowUserEvents to true
  • add the contract verifier url inside api:
api:{
  //... other configs,
  contractVerifier: {
      url: 'ws://localhost:3008'
    },
  //... other configs
}

Section 3: Build process

Run commands:

  • npm install
  • npm run build
  • npx prisma generate

Start

  • Start block service: npm run start-blocks
  • Start api: npm run start-api

Note: an rsk node must be running in port or url specified in defaultConfig.js. Otherwise, blocks service will crash.

Section 4: Logs

To see block service logs:

  • npm run blocks-logs-raw (production)
  • npm run blocks-logs-pretty (development)

To see api logs:

  • npm run api-logs-raw (production)
  • npm run api-logs-pretty (development)

Section 5: Tools

Get a block:

  • node dist/tools/getBlock.js 4000 (print in console)
  • node dist/tools/getBlock.js 4000 --save (print in console and also store in database)

Get missing segments in database:

  • node dist/tools/missingSegments.js

Components

The logic in charge of indexing the blockchain in the database and maintaining data integrity consists of 4 services:

  • [blocks-checker-service]: ensures integrity of the most recent 120 blocks in database at the moment of running the service
  • [savetip-service]: requests blocks inside the tip size threshold (the top 120 newest, starting from latest block)
  • [live-syncer-service]: requests new blocks to the RSK node, starting from latest block
  • [static-syncer-service]: Stores immutable blocks (starting from latest - 120). To do so, it checks database gaps between already indexed blocks, and requests the missing ones by iterating the gaps

API server: HTTP/WS server

Development

Run api in development mode: npm run dev Run blocks in development mode:

  • npm run build
  • npx prisma generate
  • npm run blocks-start

Note Before uploading changes, remember to execute npm run build after upgrading version in package.version, so swagger docs compile the version number too.

rsk-explorer-api's People

Contributors

bryaniov avatar emiliorizzo avatar ezequiel-rodriguez avatar ida3m0n avatar ilanolkies avatar iovgomezdn avatar jesus-iov avatar jonathansmirnoff avatar kayseriiovlabs avatar lotteroantonio avatar nicov-iov avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

rsk-explorer-api's Issues

Automatically verify minimal proxy contracts following EIP 1167

EIP 1167 sets a standar for minimal proxy contracts
The exact bytecode of the standard clone contract is this: 363d3d373d3d3d363d73bebebebebebebebebebebebebebebebebebebebe5af43d82803e903d91602b57fd5bf3 wherein the bytes at indices 10 - 29 (inclusive, meaning bebebebebebebebebebebebebebebebebebebebe) are replaced with the 20 byte address of the master functionality contract.

We want the explorer to automatically identify and verify them, and indicate that they are a proxys and link them to the functionality contract used, so users can easily see the ABI and code of the functionality contract that they should use to interact with the proxy contract.

Show the information of block uncles

You can use
{"jsonrpc":"2.0","method":"eth_getUncleByBlockNumberAndIndex","params":["0x2a8280","0x1"],"id":1}
To get each uncle header.

The number of uncles per block is stored in the block header.

Contract deployment destination address should be null

rsk-explorer-api checks tx destination address = 0x0000000000000000000000000000000000000000 to identify contract deployments.

The correct value for destination address of contract deployments is null and transactions to 0x000..000 should be considered as normal value transactions (burned funds)

Right now the public rskj nodes are returning 0x00 instead of null

See: https://github.com/rsksmart/rsk-explorer-api/blob/master/src/lib/defaultConfig.js#L34

2 child-processes crashed in Docker due to memory leak error

Two crashed child-processes due to memory leak error:

rsk-explorer-api/src/services/txPool.js
rsk-explorer-api/src/services/blocks/blocksListener.js

view gke explorer-api-mainnet:

  1. blocks-stderr.log
events.js:174
      throw er; // Unhandled 'error' event
      ^
Error: read ECONNRESET
    at TCP.onStreamRead (internal/stream_base_commons.js:111:27)
Emitted 'error' event at:
    at Socket.socketErrorListener (_http_client.js:401:9)
    at Socket.emit (events.js:198:13)
    at emitErrorNT (internal/streams/destroy.js:91:8)
    at emitErrorAndCloseNT (internal/streams/destroy.js:59:3)
    at process._tickCallback (internal/process/next_tick.js:63:19)
{ Error: read ECONNRESET
    at TCP.onStreamRead (internal/stream_base_commons.js:111:27) errno: 'ECONNRESET', code: 'ECONNRESET', syscall: 'read' }

...

view gke explorer-api-testnet:

  1. blocks-stderr.log
FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
 1: 0x8fa090 node::Abort() [/usr/local/bin/node]
 2: 0x8fa0dc  [/usr/local/bin/node]
 3: 0xb0052e v8::Utils::ReportOOMFailure(v8::internal::Isolate*, char const*, bool) [/usr/local/bin/node]
 4: 0xb00764 v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, bool) [/usr/local/bin/node]
 5: 0xef4c72  [/usr/local/bin/node]
 6: 0xef4d78 v8::internal::Heap::CheckIneffectiveMarkCompact(unsigned long, double) [/usr/local/bin/node]
 7: 0xf00e52 v8::internal::Heap::PerformGarbageCollection(v8::internal::GarbageCollector, v8::GCCallbackFlags) [/usr/local/bin/node]
 8: 0xf01784 v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace, v8::internal::GarbageCollectionReason, v8::GCCallbackFlags) [/usr/local/bin/node]
 9: 0xf043f1 v8::internal::Heap::AllocateRawWithRetryOrFail(int, v8::internal::AllocationSpace, v8::internal::AllocationAlignment) [/usr/local/bin/node]
10: 0xecc6d5  [/usr/local/bin/node]
11: 0xed3f4a v8::internal::Factory::NewRawOneByteString(int, v8::internal::PretenureFlag) [/usr/local/bin/node]
12: 0xed425b v8::internal::Factory::NewStringFromOneByte(v8::internal::Vector<unsigned char const>, v8::internal::PretenureFlag) [/usr/local/bin/node]
13: 0xed4cad v8::internal::Factory::NewStringFromUtf8(v8::internal::Vector<char const>, v8::internal::PretenureFlag) [/usr/local/bin/node]
14: 0xb0e489 v8::String::NewFromUtf8(v8::Isolate*, char const*, v8::NewStringType, int) [/usr/local/bin/node]
15: 0x9c2708 node::StringBytes::Encode(v8::Isolate*, char const*, unsigned long, node::encoding, v8::Local<v8::Value>*) [/usr/local/bin/node]
16: 0x916680  [/usr/local/bin/node]
17: 0x2a73a409f721
Service error Error [ERR_IPC_CHANNEL_CLOSED]: Channel closed
    at ChildProcess.target.send (internal/child_process.js:636:16)
    at listenToMessage (/rsk-explorer-api/dist/services/blocks/index.js:47:19)
    at ChildProcess.service.on.msg (/rsk-explorer-api/dist/services/blocks/index.js:63:32)
    at ChildProcess.emit (events.js:198:13)
    at emit (internal/child_process.js:832:12)
    at process._tickCallback (internal/process/next_tick.js:63:19)

...

events.js:174
      throw er; // Unhandled 'error' event
      ^
Error: read ECONNRESET
    at TCP.onStreamRead (internal/stream_base_commons.js:111:27)
Emitted 'error' event at:
    at Socket.socketErrorListener (_http_client.js:401:9)
    at Socket.emit (events.js:198:13)
    at emitErrorNT (internal/streams/destroy.js:91:8)
    at emitErrorAndCloseNT (internal/streams/destroy.js:59:3)
    at process._tickCallback (internal/process/next_tick.js:63:19)
events.js:174
      throw er; // Unhandled 'error' event
      ^
Error: read ECONNRESET
    at TCP.onStreamRead (internal/stream_base_commons.js:111:27)
Emitted 'error' event at:
    at Socket.socketErrorListener (_http_client.js:401:9)
    at Socket.emit (events.js:198:13)
    at emitErrorNT (internal/streams/destroy.js:91:8)
    at emitErrorAndCloseNT (internal/streams/destroy.js:59:3)
    at process._tickCallback (internal/process/next_tick.js:63:19)

many Service error Error [ERR_IPC_CHANNEL_CLOSED]: Channel closed error

  1. blocks-stdout.log
{"name":"Blocks","hostname":"explorer-api-testnet-7c4ff5b959-8jmzm","pid":46,"level":30,"msg":"Checking db / LastBlock: 421707","time":"2020-03-14T05:16:58.263Z","v":0}
{"name":"Blocks","hostname":"explorer-api-testnet-7c4ff5b959-8jmzm","pid":46,"level":30,"msg":"Checking db / LastBlock: 421720","time":"2020-03-14T05:17:00.427Z","v":0}
{"name":"Blocks","hostname":"explorer-api-testnet-7c4ff5b959-8jmzm","pid":46,"level":30,"msg":"Checking db / LastBlock: 421735","time":"2020-03-14T05:17:02.492Z","v":0}
{"name":"Blocks","hostname":"explorer-api-testnet-7c4ff5b959-8jmzm","pid":46,"level":30,"msg":"Checking db / LastBlock: 421748","time":"2020-03-14T05:17:04.254Z","v":0}
{"name":"Blocks","hostname":"explorer-api-testnet-7c4ff5b959-8jmzm","pid":46,"level":30,"msg":"Checking db / LastBlock: 421762","time":"2020-03-14T05:17:06.761Z","v":0}
{"name":"Blocks","hostname":"explorer-api-testnet-7c4ff5b959-8jmzm","pid":46,"level":30,"msg":"Checking db / LastBlock: 421774","time":"2020-03-14T05:17:08.091Z","v":0}
{"name":"Blocks","hostname":"explorer-api-testnet-7c4ff5b959-8jmzm","pid":52,"level":50,"msg":"Error saving block summary","time":"2020-03-14T05:17:09.775Z","v":0}
{"name":"Blocks","hostname":"explorer-api-testnet-7c4ff5b959-8jmzm","pid":46,"level":30,"msg":"Checking db / LastBlock: 421786","time":"2020-03-14T05:17:10.602Z","v":0}
{"name":"Blocks","hostname":"explorer-api-testnet-7c4ff5b959-8jmzm","pid":46,"level":30,"msg":"Checking db / LastBlock: 421798","time":"2020-03-14T05:17:13.622Z","v":0}
{"name":"Blocks","hostname":"explorer-api-testnet-7c4ff5b959-8jmzm","pid":46,"level":30,"msg":"Checking db / LastBlock: 421810","time":"2020-03-14T05:17:15.763Z","v":0}
{"name":"Blocks","hostname":"explorer-api-testnet-7c4ff5b959-8jmzm","pid":46,"level":30,"msg":"Checking db / LastBlock: 421825","time":"2020-03-14T05:17:17.070Z","v":0}
{"name":"Blocks","hostname":"explorer-api-testnet-7c4ff5b959-8jmzm","pid":46,"level":30,"msg":"Checking db / LastBlock: 421839","time":"2020-03-14T05:17:19.532Z","v":0}
{"name":"Blocks","hostname":"explorer-api-testnet-7c4ff5b959-8jmzm","pid":46,"level":30,"msg":"Checking db / LastBlock: 421851","time":"2020-03-14T05:17:20.325Z","v":0}
{"name":"Blocks","hostname":"explorer-api-testnet-7c4ff5b959-8jmzm","pid":46,"level":30,"msg":"Checking db / LastBlock: 421863","time":"2020-03-14T05:17:23.679Z","v":0}
{"name":"Blocks","hostname":"explorer-api-testnet-7c4ff5b959-8jmzm","pid":46,"level":30,"msg":"Checking db / LastBlock: 421877","time":"2020-03-14T05:17:24.490Z","v":0}
{"name":"Blocks","hostname":"explorer-api-testnet-7c4ff5b959-8jmzm","pid":52,"level":50,"msg":"Error saving block summary","time":"2020-03-14T05:17:29.466Z","v":0}
{"name":"Blocks","hostname":"explorer-api-testnet-7c4ff5b959-8jmzm","pid":46,"level":30,"msg":"Checking db / LastBlock: 421891","time":"2020-03-14T05:17:30.035Z","v":0}
{"name":"Blocks","hostname":"explorer-api-testnet-7c4ff5b959-8jmzm","pid":46,"level":30,"msg":"Checking db / LastBlock: 421906","time":"2020-03-14T05:17:32.501Z","v":0}
{"name":"Blocks","hostname":"explorer-api-testnet-7c4ff5b959-8jmzm","pid":46,"level":30,"msg":"Checking db / LastBlock: 421920","time":"2020-03-14T05:17:34.235Z","v":0}
{"name":"Blocks","hostname":"explorer-api-testnet-7c4ff5b959-8jmzm","pid":46,"level":30,"msg":"Checking db / LastBlock: 421933","time":"2020-03-14T05:17:34.928Z","v":0}
{"name":"Blocks","hostname":"explorer-api-testnet-7c4ff5b959-8jmzm","pid":46,"level":30,"msg":"Checking db / LastBlock: 421945","time":"2020-03-14T05:17:38.590Z","v":0}
{"name":"Blocks","hostname":"explorer-api-testnet-7c4ff5b959-8jmzm","pid":46,"level":30,"msg":"Checking db / LastBlock: 421957","time":"2020-03-14T05:17:38.591Z","v":0}
{"name":"Blocks","hostname":"explorer-api-testnet-7c4ff5b959-8jmzm","pid":46,"level":30,"msg":"Checking db / LastBlock: 421969","time":"2020-03-14T05:17:42.523Z","v":0}
{"name":"Blocks","hostname":"explorer-api-testnet-7c4ff5b959-8jmzm","pid":46,"level":30,"msg":"Checking db / LastBlock: 421982","time":"2020-03-14T05:17:42.524Z","v":0}
{"name":"Blocks","hostname":"explorer-api-testnet-7c4ff5b959-8jmzm","pid":46,"level":30,"msg":"Checking db / LastBlock: 421994","time":"2020-03-14T05:17:42.580Z","v":0}
{"name":"Blocks","hostname":"explorer-api-testnet-7c4ff5b959-8jmzm","pid":46,"level":30,"msg":"Checking db / LastBlock: 422008","time":"2020-03-14T05:17:42.582Z","v":0}
<--- Last few GCs --->
[46:0x3f715c0]   617133 ms: Mark-sweep 1397.7 (1424.1) -> 1397.4 (1424.1) MB, 1082.4 / 0.0 ms  (average mu = 0.147, current mu = 0.046) allocation failure scavenge might not succeed
[46:0x3f715c0]   618159 ms: Mark-sweep 1398.1 (1424.1) -> 1397.7 (1424.6) MB, 1011.4 / 0.0 ms  (average mu = 0.085, current mu = 0.015) allocation failure scavenge might not succeed
<--- JS stacktrace --->
==== JS stack trace =========================================
    0: ExitFrame [pc: 0x2a73a409f721]
Security context: 0x0410042858a1 <JSObject>
    1: stringSlice(aka stringSlice) [0x975e3193351] [buffer.js:~589] [pc=0x2a73a40b2def](this=0x3f69fd0026f1 <undefined>,buf=0x3a81f99c1239 <Uint8Array map = 0x1f0ab5cfdb1>,encoding=0x041004
299e79 <String[4]: utf8>,start=85924,end=85934)
    2: deserializeObject(aka deserializeObject) [0x162e7b70cf01] [/rsk-explorer-api/node_modules/bson/lib/bson/parser/dese...

image

Determined from the code, the issue was caused by the 2 child processes.
It seems that the memory leak of the child process leads to a crash. In the current project architecture, the child process will not restart after the crash.

docker-compose deploy error

E: The repository 'http://ppa.launchpad.net/rsksmart/rskj/ubuntu focal Release' does not have a Release file.
ERROR: Service 'rsk-node' failed to build: The command '/bin/sh -c add-apt-repository -y ppa:rsksmart/rskj && apt-get update && (echo rskj shared/accepted-rsk-license-v1-1 select true | /usr/bin/debconf-set-selections )&& apt-get install -y --no-install-recommends rskj && apt-get clean && rm -rf /var/lib/apt/lists/* && rm -f /etc/rsk/node.conf && ln -s /etc/rsk/regtest.conf /etc/rsk/node.conf && rm -f /etc/rsk/regtest.conf' returned a non-zero code: 100

blocks service - VM execution errors

While syncing data from private MainNet node.

Method name call Error: VM execution error: transaction reverted Method totalSupply call Error: VM execution error: transaction reverted Method symbol call Error: VM execution error: transaction reverted Method decimals call Error: VM execution error: transaction reverted Method balanceOf call Error: VM execution error: transaction reverted

Change the status of pending txs to oudated based on sender's nonce

Hi!
The explorer shows 2 transaction stuck forever yesterday (can't be mined because nonce 542 and 544 were already used after script re-run),
both of them are in status pendingg in rsk explorer, but can't be found in blockscout
1)
https://explorer.rsk.co/tx/0xeac0103b97a5a35685f09ffd868067196d8eb8f1c8a44e0a054ceec1cee81cc0
https://blockscout.com/rsk/mainnet/search?q=0xeac0103b97a5a35685f09ffd868067196d8eb8f1c8a44e0a054ceec1cee81cc0
2)
https://explorer.rsk.co/tx/0xba5818a971cfc420b953232af3e290b4eff9b1e25cb9023425ab59213f01f141
https://blockscout.com/rsk/mainnet/search?q=0xba5818a971cfc420b953232af3e290b4eff9b1e25cb9023425ab59213f01f141
These txs were left in the node's rsk explorer mempool but they will never be mined, they sould be removed from the mempool and would not see them again in the RSK explorer.
The strange thing is that the tx is still showed as pending in the RSK explorer and has not disappeared already, but it should.
So the issue is in the explorer?
It shouldn't last that long. Each node has a parameter of: after X time the pending transactions are removed. And that time X is just a few minutes that you remember. So, either some node associated with the explorer has a very high X OR THE EXPLORER on his account is sent to remember that transaction as pending, and does not release it again.
What should be seen is if there are transactions with the same sender and nonce, which were mined, and these, as similar transactions that competed with those, were the ones that lost.

Implement rsk-contract-verifier

  • Add api module to manage verification requests
  • Add UserEvents module to route the messages between rsk-explorer-api and rsk-contract-verifier

Bitcoin to Rsk Block

Hi,

The documentation isn't clear on this and I think this might be the best place to get clarification. Is there a way for me to link out to https://explorer.rsk.co/ using a txid from the bitcoin blockchain?

Add linking proxy posibilities

Etherscan allows to see the implementation abi trough the proxy to facilitate the user experience.
For example https://etherscan.io/address/0x12ed69359919fc775bc2674860e8fe2d2b6a7b5d#code
after using the Is this a proxy? button and verifying it https://etherscan.io/proxyContractChecker?a=0x12eD69359919Fc775bC2674860E8Fe2d2b6a7B5D
we see the implementation abi and code instead of the proxy.
While the same in RSK only shows the proxy as it does not link with the implementation https://explorer.rsk.co/address/0x9d11937e2179dc5270aa86a3f8143232d6da0e69

Patch reorgs

Check if block is in main chain before overwrite

When the event decoder fails it blocks the import of the entire block.

rsk-contract-parser fails to decode some events for contracts using ABI 2.0.
rsk-explorer-api should catch and log the error and use the generic ABI to decode these events to avoid blocking the import of the entire block.
After that rsk-contract-parser should be fixed to decode these events.

Forks and reorgs

It should be consider the situation where the explorer receives a block as best block, but then a fork occurs.

Error with service

Preconditions

OS: Ubuntu 18.04
Node: v13.3.0
Mongo: v4.2.1
RSK Node: Testnet

Steps to reproduce

  • Install
  • Run node dist/services/blocks

Actual result

After a few minutes running, throws this error:

events.js:196
      throw er; // Unhandled 'error' event
      ^
Error: read ECONNRESET
    at TCP.onStreamRead (internal/stream_base_commons.js:204:27)
Emitted 'error' event on ClientRequest instance at:
    at Socket.socketErrorListener (_http_client.js:420:9)
    at Socket.emit (events.js:219:5)
    at emitErrorNT (internal/streams/destroy.js:84:8)
    at processTicksAndRejections (internal/process/task_queues.js:84:21) {
  errno: -104,
  code: 'ECONNRESET',
  syscall: 'read'
}
events.js:196
      throw er; // Unhandled 'error' event
      ^
...

Error: socket hang up
    at connResetException (internal/errors.js:581:14)
    at Socket.socketOnEnd (_http_client.js:451:23)
    at Socket.emit (events.js:224:7)
    at endReadableNT (_stream_readable.js:1206:12)
    at processTicksAndRejections (internal/process/task_queues.js:84:21)
Emitted 'error' event on ClientRequest instance at:
    at Socket.socketOnEnd (_http_client.js:451:9)
    at Socket.emit (events.js:224:7)
    at endReadableNT (_stream_readable.js:1206:12)
    at processTicksAndRejections (internal/process/task_queues.js:84:21) {
  code: 'ECONNRESET'
}

Before restarting the service, it happens again:

Error: connect ECONNREFUSED 127.0.0.1:4444
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1136:16) {
  errno: -111,
  code: 'ECONNREFUSED',
  syscall: 'connect',
  address: '127.0.0.1',
  port: 4444
}

Add API call to get account & token balances

It would be great if the user could get an account balance in rBTC, and also the tokens balance, providing the contract address.

I currently do this through Blockscout, but lately, they have not been updating their database, and the results are "old" results.

Get rBTC balance:
https://blockscout.com/rsk/mainnet/api?module=account&action=balance&address=0x2

Get BPRO balance:
https://blockscout.com/rsk/mainnet/api?module=account&action=tokenbalance&contractaddress=0x440cd83c160de5c96ddb20246815ea44c7abbca8&address=0x2

blocks service - Service error Error [ERR_IPC_CHANNEL_CLOSED]

rsk-explorer-api v 1.0.2

While syncing data from private MainNet node.

Service error Error [ERR_IPC_CHANNEL_CLOSED]: Channel closed at ChildProcess.target.send (internal/child_process.js:636:16) at send (/home/martin/Desktop/projects/rsk-explorer-api/src/services/blocks/index.js:41:19) at ChildProcess.parseMessage (/home/martin/Desktop/projects/rsk-explorer-api/src/services/blocks/index.js:57:32) at ChildProcess.emit (events.js:198:13) at ChildProcess.EventEmitter.emit (domain.js:448:20) at emit (internal/child_process.js:832:12) at process._tickCallback (internal/process/next_tick.js:63:19

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.