Skip to content

Instantly share code, notes, and snippets.

@JoshOrndorff
Last active September 18, 2018 14:42
Show Gist options
  • Save JoshOrndorff/3c88838d9a283ed9e6132b5806181b4f to your computer and use it in GitHub Desktop.
Save JoshOrndorff/3c88838d9a283ed9e6132b5806181b4f to your computer and use it in GitHub Desktop.
RNode Log Message Guide -- Early draft

RNode Log Message Guide

RNode version 0.6.4

The RNode software is quickly developing a reputation for being verbose. All that output is helpful for developers debugging and also for validators and node operators monitoring the health of their node. But it isn't valuable if you don't know how to read it.

Here I'll summarize the main interactions your node has, and translate the most common and useful log messages.

Starting up

At startup your node generates any necessary files that don't already exist, gets familiar with your network configuration, and reports some useful information about itself.

[main] INFO  c.r.n.configuration.Configuration$ - Using configuration file: .../rnode.toml
[main] WARN  c.r.n.configuration.Configuration$ - Configuration file .../rnode.toml not found

RNode looks for configuration options in a configuration file. It is telling you where it looked for that file and whether or not it was found. In this case it wasn't.

[main] INFO c.r.n.configuration.Configuration$ - Starting with profile default There are two profiles, default, and docker. You probably only want profile docker if you're actually running docker.

INFO - trying to open ports using UPnP....
INFO - No gateway devices found
INFO - No need to open any port

RNode uses UPnP to reach the internet when behind a router. In this case there was no router. If you have a router you'll see more output here

[node-io-9] INFO  c.r.node.configuration.Configuration - flag --host was not provided, guessing your external IP address
[node-io-9] INFO  c.r.node.configuration.Configuration - guessed ... from source: AmazonAWS service

You can use the --host flag to set a hostname for your system. When in doubt it's better not to use --host because ip address detection almost always works, as it has here.

Using data_dir: .../.rnode RNode always needs a data directory (or data_dir) It tells you what directory it is using to avoid any possible confusion.

No certificate found at path .../.rnode/node.certificate.pem
Generating a X.509 certificate for the node
Generating a PEM secret key for the node

RNode needs a TLS certificate. In this case it hasn't found one so it generates a new one.

[node-io-9] INFO coop.rchain.node.NodeRuntime - RChain Node 0.6.4 (7d632567a616e6e63d4fca081191afae0a4d458d) Tells you what version of RNode you're running. Git hash is included because sometimes the same version number is used multiple times 🤦

[node-io-9] INFO  o.h.b.c.nio1.NIO1SocketServerGroup - Service bound to address /0:0:0:0:0:0:0:0:40402
[node-io-9] INFO  org.http4s.server.blaze.BlazeBuilder -   _   _   _        _ _     
[node-io-9] INFO  org.http4s.server.blaze.BlazeBuilder -  | |_| |_| |_ _ __| | | ___
[node-io-9] INFO  org.http4s.server.blaze.BlazeBuilder -  | ' \  _|  _| '_ \_  _(_-<
[node-io-9] INFO  org.http4s.server.blaze.BlazeBuilder -  |_||_\__|\__| .__/ |_|/__/
[node-io-9] INFO  org.http4s.server.blaze.BlazeBuilder -              |_|
[node-io-9] INFO  org.http4s.server.blaze.BlazeBuilder - http4s v0.19.0-M1 on blaze v0.14.0-M3 started at http://[0:0:0:0:0:0:0:0]:40402/

TODO Not totally sure about these. There is one for port 40402 and another for the diagnostics port 40403

[node-io-9] INFO  coop.rchain.node.api.GrpcServer$ - gRPC server started, listening on
[node-io-9] INFO  coop.rchain.node.NodeRuntime - Listening for traffic on rnode://...:40400.

RNode is letting you know what ports and addresses it is listening on. It is actually a bug that the first line is incomplete

Peer Discovery

In a peer to peer network, you begin by calling up one other node that you know about. Once you've connected to that first peer, you ask it where you can find some other peers to connect to. At the same time new peers may also be calling you.

[grpc-default-executor-114] INFO coop.rchain.comm.rp.Connect$ - Initialize protocol handshake to rnode://... You're reaching out to a peer that you've heard of trying to establish a connection

[main-io-43] DEBUG c.r.comm.transport.TcpTransportLayer - Creating new channel to peer rnode://... ???

[grpc-default-executor-112] DEBUG c.r.comm.transport.TcpTransportLayer - Disconnecting from peer rnode://... ???

[grpc-default-executor-0] INFO coop.rchain.comm.rp.Connect$ - Peers: 24. Your peer-count has changed to 24. This message does not tell you whether you gained or lost a peer to reach 24.

Genesis Protocol

When a network first launches like the testnet launch in Berlin, the genesis validators must all agree on the state of the genesis block. There is a special protocol for proposing and signing a genesis block.

[grpc-default-executor-98] INFO c.r.c.util.comm.CasperPacketHandler$ - Received ApprovedBlock message while in GenesisValidatorHandler state. Your node received an Approved Block (completed genesis block) while it was still expecting to receive a candidate that it could compare to expectations. You've probably used the --genesis-validator flag after the genesis ceremony was complete.

[grpc-default-executor-98] WARN coop.rchain.casper.Validate$ - Received invalid ApprovedBlock message not containing enough valid signatures. You've received an approved block that many other validators have signed off on. But it doesn't match your expectations. You've either made a mistake launching your genesis validator node, or a cartel of validators is succeeding in overtaking the network.

[grpc-default-executor-98] INFO c.r.c.util.comm.CasperPacketHandler$ - Invalid ApprovedBlock received; refusing to add. You've received an approved block that doesn't match your expectations. It will not be added to the DAG.

[node-io-394] INFO c.r.c.u.comm.BlockApproverProtocol - Received expected candidate from rnode://... Approval sent in response. The bootstrap node has sent you a candidate for the genesis block that matches your expectations. Your node has crytographically signed this candidate and reported back to the standalone node who is collecting signatures.

[grpc-default-executor-2] WARN c.r.c.u.comm.BlockApproverProtocol - Received unexpected candidate from rnode://... because: Candidate deploys do not match expected deploys. The bootstrap node has sent you a candidate for the genesis block that does not match your expectations. In this case the mismatch was in deploys, but it could also be in timestamp, or required signatures. Because it didn't match your expectations, you have not signed the block. You've either made a mistake launching your genesis validator, or a malicious standalone node it attempting to launch a network with different parameters.

[node-io-10] INFO  c.rchain.casper.util.comm.CommUtil$ - Sending request for ApprovedBlock to rnode://...
[grpc-default-executor-2] INFO  c.rchain.casper.util.comm.CommUtil$ - Received response from rnode://... Processing...
[grpc-default-executor-2] INFO  c.r.c.util.comm.CasperPacketHandler$ - Valid ApprovedBlock received!

If you join the network as a validator after the genesis ceremony is complete, you need to get the approved block from a peer who knows about it -- probably a genesis validator.

Casper

When a validator proposes a new block, they send it to all of their connected peers. In order for the block to make it around the network validators must relay blocks. When you hear of a block that you don't have yet, you ask your peers whether they have it. You'll see messages about peers sending you blocks and asking you whether you have blocks.

[node-io-371] WARN coop.rchain.casper.Validate$ - Ignoring block b0cfe2168d... because block creator 84aa8570bd... has 0 weight. You've received a block, but the person who created it is not a validator (has 0 weight) so you're not adding the block to your DAG

[node-io-94] INFO c.rchain.casper.MultiParentCasper$ - New fork-choice tip is block eb6e09cf0c.... The fork-choice rule has determined that the block whose hash starts with eb6e is the new tip. Your DAG has been updated accordingly

[node-io-389] INFO c.rchain.casper.comm.CommUtil$ - Requested missing block ... from peers Your node heard of a block that it hasn't yet seen. It has asked all of its active peers whether any of them have seen the block and is hoping to receive news of it.

[node-io-389] INFO c.rchain.casper.comm.CasperPacketHandler$ - Received block with missing elements Your node has received a block that ???

Block....... is already being processed by another thread You received the same block twice in rapid succession. The first receipt is currently being added to your DAG, but is not done yet. If there had been more time between the two receipts of the block, you would have received the Received block again message.

[node-io-389] INFO c.rchain.casper.comm..CasperPacketHandler$ - Received block ... again You've received a block that you already knew about. Most likely two different peers have gossiped you the same block.

[grpc-default-executor-98] WARN c.r.c.util.comm.CasperPacketHandler$ - MultiParentCasper instance not created. ???

GRPC Related

If your grpc interface is exposed you may receive deploys of outside code or evaluations of off-chain rholang code.

[grpc-default-executor-6] INFO c.rchain.casper.MultiParentCasper$ - Received Deploy #... Code was deployed to your validator node. It is waiting in a queue on your node and will be packaged up into a block in the future. For now, you may need to force a propose if you actually want the code to mvoe around the network.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment