如何读取日志

徒步旅行例子

我们首先创建到应用程序的三个连接(内存池、共识和查询)(在本例中本地运行 kvstore)。

  1. I[10-04|13:54:27.364] Starting multiAppConn module=proxy impl=multiAppConn
  2. I[10-04|13:54:27.366] Starting localClient module=abci-client connection=query impl=localClient
  3. I[10-04|13:54:27.366] Starting localClient module=abci-client connection=mempool impl=localClient
  4. I[10-04|13:54:27.367] Starting localClient module=abci-client connection=consensus impl=localClient

然后,Tendermint Core 和应用程序执行握手。

  1. I[10-04|13:54:27.367] ABCI Handshake module=consensus appHeight=90 appHash=E0FBAFBF6FCED8B9786DDFEB1A0D4FA2501BADAD
  2. I[10-04|13:54:27.368] ABCI Replay Blocks module=consensus appHeight=90 storeHeight=90 stateHeight=90
  3. I[10-04|13:54:27.368] Completed ABCI Handshake - Tendermint and App are synced module=consensus appHeight=90 appHash=E0FBAFBF6FCED8B9786DDFEB1A0D4FA2501BADAD

在此之后,我们启动更多的事情,比如事件开关、反应器,并执行 UPNP 发现来检测 IP 地址。

  1. I[10-04|13:54:27.374] Starting EventSwitch module=types impl=EventSwitch
  2. I[10-04|13:54:27.375] This node is a validator module=consensus
  3. I[10-04|13:54:27.379] Starting Node module=main impl=Node
  4. I[10-04|13:54:27.381] Local listener module=p2p ip=:: port=26656
  5. I[10-04|13:54:27.382] Getting UPNP external address module=p2p
  6. I[10-04|13:54:30.386] Could not perform UPNP discover module=p2p err="write udp4 0.0.0.0:38238->239.255.255.250:1900: i/o timeout"
  7. I[10-04|13:54:30.386] Starting DefaultListener module=p2p impl=Listener(@10.0.2.15:26656)
  8. I[10-04|13:54:30.387] Starting P2P Switch module=p2p impl="P2P Switch"
  9. I[10-04|13:54:30.387] Starting MempoolReactor module=mempool impl=MempoolReactor
  10. I[10-04|13:54:30.387] Starting BlockchainReactor module=blockchain impl=BlockchainReactor
  11. I[10-04|13:54:30.387] Starting ConsensusReactor module=consensus impl=ConsensusReactor
  12. I[10-04|13:54:30.387] ConsensusReactor module=consensus fastSync=false
  13. I[10-04|13:54:30.387] Starting ConsensusState module=consensus impl=ConsensusState
  14. I[10-04|13:54:30.387] Starting WAL module=consensus wal=/home/vagrant/.tendermint/data/cs.wal/wal impl=WAL
  15. I[10-04|13:54:30.388] Starting TimeoutTicker module=consensus impl=TimeoutTicker

注意第二行,Tendermint Core 报告“这个节点是一个验证者”。它也可以只是一个观察者(普通节点)。

接下来,我们将重播来自 WAL 的所有消息。

  1. I[10-04|13:54:30.390] Catchup by replaying consensus messages module=consensus height=91
  2. I[10-04|13:54:30.390] Replay: New Step module=consensus height=91 round=0 step=RoundStepNewHeight
  3. I[10-04|13:54:30.390] Replay: Done module=consensus

“已启动节点”消息表示一切准备就绪。

  1. I[10-04|13:54:30.391] Starting RPC HTTP server on tcp socket 0.0.0.0:26657 module=rpc-server
  2. I[10-04|13:54:30.392] Started node module=main nodeInfo="NodeInfo{id: DF22D7C92C91082324A1312F092AA1DA197FA598DBBFB6526E, moniker: anonymous, network: test-chain-3MNw2N [remote , listen 10.0.2.15:26656], version: 0.11.0-10f361fc ([wire_version=0.6.2 p2p_version=0.5.0 consensus_version=v1/0.2.2 rpc_version=0.7.0/3 tx_index=on rpc_addr=tcp://0.0.0.0:26657])}"

接下来是一个标准块创建周期,我们进入一个新轮,提出一个块,获得超过 2/3 的预投票,然后预提交,最后有机会提交一个块。详情请参阅共识概览拜占庭共识算法

  1. I[10-04|13:54:30.393] enterNewRound(91/0). Current: 91/0/RoundStepNewHeight module=consensus
  2. I[10-04|13:54:30.393] enterPropose(91/0). Current: 91/0/RoundStepNewRound module=consensus
  3. I[10-04|13:54:30.393] enterPropose: Our turn to propose module=consensus proposer=125B0E3C5512F5C2B0E1109E31885C4511570C42 privValidator="PrivValidator{125B0E3C5512F5C2B0E1109E31885C4511570C42 LH:90, LR:0, LS:3}"
  4. I[10-04|13:54:30.394] Signed proposal module=consensus height=91 round=0 proposal="Proposal{91/0 1:21B79872514F (-1,:0:000000000000) {/10EDEDD7C84E.../}}"
  5. I[10-04|13:54:30.397] Received complete proposal block module=consensus height=91 hash=F671D562C7B9242900A286E1882EE64E5556FE9E
  6. I[10-04|13:54:30.397] enterPrevote(91/0). Current: 91/0/RoundStepPropose module=consensus
  7. I[10-04|13:54:30.397] enterPrevote: ProposalBlock is valid module=consensus height=91 round=0
  8. I[10-04|13:54:30.398] Signed and pushed vote module=consensus height=91 round=0 vote="Vote{0:125B0E3C5512 91/00/1(Prevote) F671D562C7B9 {/89047FFC21D8.../}}" err=null
  9. I[10-04|13:54:30.401] Added to prevote module=consensus vote="Vote{0:125B0E3C5512 91/00/1(Prevote) F671D562C7B9 {/89047FFC21D8.../}}" prevotes="VoteSet{H:91 R:0 T:1 +2/3:F671D562C7B9242900A286E1882EE64E5556FE9E:1:21B79872514F BA{1:X} map[]}"
  10. I[10-04|13:54:30.401] enterPrecommit(91/0). Current: 91/0/RoundStepPrevote module=consensus
  11. I[10-04|13:54:30.401] enterPrecommit: +2/3 prevoted proposal block. Locking module=consensus hash=F671D562C7B9242900A286E1882EE64E5556FE9E
  12. I[10-04|13:54:30.402] Signed and pushed vote module=consensus height=91 round=0 vote="Vote{0:125B0E3C5512 91/00/2(Precommit) F671D562C7B9 {/80533478E41A.../}}" err=null
  13. I[10-04|13:54:30.404] Added to precommit module=consensus vote="Vote{0:125B0E3C5512 91/00/2(Precommit) F671D562C7B9 {/80533478E41A.../}}" precommits="VoteSet{H:91 R:0 T:2 +2/3:F671D562C7B9242900A286E1882EE64E5556FE9E:1:21B79872514F BA{1:X} map[]}"
  14. I[10-04|13:54:30.404] enterCommit(91/0). Current: 91/0/RoundStepPrecommit module=consensus
  15. I[10-04|13:54:30.405] Finalizing commit of block with 0 txs module=consensus height=91 hash=F671D562C7B9242900A286E1882EE64E5556FE9E root=E0FBAFBF6FCED8B9786DDFEB1A0D4FA2501BADAD
  16. I[10-04|13:54:30.405] Block{
  17. Header{
  18. ChainID: test-chain-3MNw2N
  19. Height: 91
  20. Time: 2017-10-04 13:54:30.393 +0000 UTC
  21. NumTxs: 0
  22. LastBlockID: F15AB8BEF9A6AAB07E457A6E16BC410546AA4DC6:1:D505DA273544
  23. LastCommit: 56FEF2EFDB8B37E9C6E6D635749DF3169D5F005D
  24. Data:
  25. Validators: CE25FBFF2E10C0D51AA1A07C064A96931BC8B297
  26. App: E0FBAFBF6FCED8B9786DDFEB1A0D4FA2501BADAD
  27. }#F671D562C7B9242900A286E1882EE64E5556FE9E
  28. Data{
  29. }#
  30. Commit{
  31. BlockID: F15AB8BEF9A6AAB07E457A6E16BC410546AA4DC6:1:D505DA273544
  32. Precommits: Vote{0:125B0E3C5512 90/00/2(Precommit) F15AB8BEF9A6 {/FE98E2B956F0.../}}
  33. }#56FEF2EFDB8B37E9C6E6D635749DF3169D5F005D
  34. }#F671D562C7B9242900A286E1882EE64E5556FE9E module=consensus
  35. I[10-04|13:54:30.408] Executed block module=state height=91 validTxs=0 invalidTxs=0
  36. I[10-04|13:54:30.410] Committed state module=state height=91 txs=0 hash=E0FBAFBF6FCED8B9786DDFEB1A0D4FA2501BADAD
  37. I[10-04|13:54:30.410] Recheck txs module=mempool numtxs=0 height=91

模块列表

以下是您可能在 Tendermint 的日志中遇到的模块列表,并简要介绍了它们的功能。

  • abci-client应用程序开发指南所述,Tendermint 是 ABCI 的客户端,负责维护3个连接:内存池,共识和查询。Tendermint Core使用的代码可以在这里找到。
  • blockchain 提供用于在节点之间存储和交换块的存储、池(一组节点)和反应器。
  • consensus Tendermint Core 的核心,即实现了共识算法。包括两个“子模块”:wal (write-ahead logging) 以确保数据完整性和 replay 重播从崩溃中恢复的块和消息。
  • events 简单的事件通知系统。事件列表可以在这里找到。您可以通过调用 subscribe RPC方法订阅它们。更多信息请参考RPC文档
  • mempool 内存池模块处理来自节点或应用程序的所有传入交易。
  • p2p 提供围绕点对点通信的抽象。有关详细信息,请查看 README
  • rpc Tendermint’s RPC
  • rpc-server RPC 服务器。有关实现详情,请参阅 doc.go
  • state 表示最新的状态和执行子模块,它针对应用程序执行块。
  • types 用于处理它们的公开的类型和方法的集合。