1.3.1. 概述

天玄链节点服务中,每个节点包含一个主配置 thanos-chain.conf ,日志管理配置 logback.xml ,创世块配置 genesis.json 以及节点身份配置 nodeInfo.properties

  • thanos-chain.conf:主配置文件。包括节点网络配置、共识配置、账本配置文件路径、SSL 密钥库配置、密码算法等信息。
  • logback.xml:日志管理配置文件。包括日志存放路径、日志生成规则等。
  • genesis.json:创世块配置文件。包括组网节点身份信息、创世区块相关信息等。
  • nodeInfo.properties:节点身份配置文件。包括本节点的名称、所属机构、节点私钥、节点 ID 等。

1.3.2. 主配置文件 thanos-chain.conf

thanos-chain.conf 主要包括了 networkconcesusresourcetls 等配置项。配置内容示例如下:

network {
    peer.rpc.ip = 127.0.0.1
    peer.bind.ip = 0.0.0.0
    peer.listen.discoveryPort = 30303
    peer.listen.rpcPort = 9080
    peer.channel.read.timeout = 60
    peer.discovery = {
        # List of the seed peers to start
        # the search for online peers
        ip.list = [
            "127.0.0.1:30304"
        ]
    }
    // need consistency pattern of each node
    transferDataEncrypt = 1

    // default false
    epollSupport = false

    nettyPoolByteBuf = false

    gateway {
        localListenAddress = 7580
        remoteServiceAddress = "127.0.0.1:7180"
        pushTxsQueueSize = 6
    }
}

consensus {
    // 1 = MultipleOrderedProposers;
    // 2 = RotatingProposer;
    proposerType = 2
    contiguousRounds = 1
    maxPackSize = 50000
    maxCommitEventNumInMemory = 100
    maxPrunedEventsInMemory = 4
//    reimportUnCommitEvent = true
    poolLimit = 3000
    roundTimeoutBaseMS = 5000
    parallelProcessorNum = 8
}

state {
    checkTimeoutMS = 1500
    maxCommitBlockInMemory = 5
}

resource {
    database {
        needEncrypt = false
        encryptAlg = AES
        # place to save physical livenessStorage files
        # must use absolute path
        dir = "/root/thanos-chain/node0/database"
    }
    logConfigPath = "/root/thanos-chain/node0/resource/chain-logback.xml"
}

vm.structured {
  trace = false
  dir = vmtrace
  initStorageLimit = 10000
}

#tls settings, such as path of keystore,truststore,etc
tls {
    keyPath = "/root/thanos-chain/node1/resource/tls/node.key"
    certsPath = "/root/thanos-chain/node1/resource/tls/chain.crt"
}

1.3.2.1. 配置 network

  • peer.rpc.ip:节点的 rpc 地址,用于和其他节点通信。通常填本机的外网或内网地址。
  • peer.bind.ip:节点绑定的 ip 地址,通常固定为 0.0.0.0
  • peer.listen.discoveryPort:节点监听的 p2p 端口号,主要用于收发【节点发现】消息(底层 udp 协议实现)。
  • peer.listen.rpcPort:节点监听的 rpc 端口号,主要用于收发【共识】消息(底层 tcp 协议实现)。
  • peer.channel.read.timeout:节点间通道超时时间。
  • peer.discovery.ip.list:待连接节点的 ip 列表。
  • transferDataEncryptchannel 通信是否加密,全节点统一。
  • epollSupport:是否启用 EpollEventLoopGroup 实现 JavaNIO 。默认为 false ,表示不启动。当 linux 系统支持 epoll 模式时,可将该项置为 true ,提高性能。
  • nettyPoolByteBuf:底层通讯字节是否池化,建议为 true
  • gateway.localListenAddress:链节点用于监听链网关发送交易的端口。
  • gateway.remoteServiceAddress:与该链节点交互的链网关的 ip 地址和端口号。
  • gateway.pushTxsQueueSize:接收 gateway 打包交易个数的队列大小,建议为 16 。

1.3.2.2. 配置 consensus

  • proposerType: 提案类型,目前仅支持轮循提案,值为 2
  • contiguousRounds:主节点正常共识时连续共识的轮数,超过该轮数需要切换主节点。
  • maxPackSize:一轮共识中交易最大打包量。
  • maxCommitEventNumInMemory:内存中最多存储的已共识事件数。
  • maxPrunedEventsInMemory:内存中最多存储的裁剪事件数。
  • reimportUnCommitEvent:是否重新共识未共识成功的交易。
  • poolLimit:交易池交易数量限制。
  • roundTimeoutBaseMSChain BFT 的每轮共识超时基数,建议为 5000 (即 5 秒) 。
  • parallelProcessorNumDAG 并行处理交易的 cpu 个数。

1.3.2.3. 配置 state

  • checkTimeoutMS:异步共识的检测超时时间,建议为 1500 (毫秒) 。
  • maxCommitBlockInMemory:内存中保留已共识成功的 block 数量。

1.3.2.4. 配置 resource

  • database.needEncrypt:账本信息是否需要加密存储。
  • database.encryptAlg:账本信息加密存储时采用的加密算法。如果无需加密,可忽视该配置项。
  • database.dir:账本信息存放路径。
  • logConfigPath:日志管理配置文件 logback.xml 所在路径。

1.3.2.5. 配置 tls

  • keyPath:节点的私钥文件 node.key 所在路径。
  • certsPath:节点的证书链 chain.crt 所在路径。

1.3.3. 日志管理配置文件 chain-logback.xml

chain-logback.xml 指定了节点日志的存放位置和生成规则。配置内容示例如下:

<?xml version="1.0" encoding="UTF-8"?>

<configuration>

    <!-- Be sure to flush latest logs on exit -->
    <shutdownHook class="ch.qos.logback.core.hook.DelayingShutdownHook"/>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} %p [%c{1}]  %m%n</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>TRACE</level>
        </filter>
    </appender>

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>./logs/thanos-chain.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- rollover hourly -->
            <fileNamePattern>./logs/thanos-chain-%d{yyyy-MM-dd-'h'HH}.log</fileNamePattern>
            <!-- ~1 month -->
            <maxHistory>720</maxHistory>
            <totalSizeCap>50GB</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} %p [%c{1}]  %m%n</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>TRACE</level>
        </filter>
    </appender>

    <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
        <!-- Don't discard INFO, DEBUG, TRACE events in case of queue is 80% full -->
        <discardingThreshold>0</discardingThreshold>
        <!-- Default is 256 -->
        <!-- Logger will block incoming events (log calls) until queue will free some space -->
        <!-- (the smaller value -> flush occurs often) -->
        <queueSize>100</queueSize>

        <appender-ref ref="FILE" />
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>TRACE</level>
        </filter>
    </appender>

    <root level="TRACE">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="ASYNC"/>
    </root>

    <logger name="main" level="TRACE"/>
    <logger name="gateway" level="INFO"/>
    <logger name="consensus" level="INFO"/>
    <logger name="network" level="INFO"/>
    <logger name="state" level="INFO"/>
    <logger name="tx-pool" level="INFO"/>
    <logger name="rlp" level="ERROR"/>
    <logger name="utils" level="DEBUG"/>
    <logger name="crypto" level="ERROR"/>
    <logger name="thanos-worker" level="DEBUG"/>
    <logger name="executor" level="DEBUG"/>
    <logger name="VM" level="INFO"/>
    <logger name="sync-layer2" level="DEBUG"/>
    <logger name="sync" level="DEBUG"/>
    <logger name="state-verify" level="DEBUG"/>
    <logger name="ledger" level="DEBUG"/>
    <logger name="discover" level="DEBUG"/>
    <logger name="db" level="DEBUG"/>
    <logger name="general" level="DEBUG"/>
    <logger name="repository" level="INFO"/>
    <logger name="java.nio" level="ERROR"/>
    <logger name="io.netty" level="ERROR"/>
    <logger name="io.grpc" level="ERROR"/>

</configuration>

1.3.3.1. 配置打印的日志组件

通过 \ 标签 指定打印的日志组件。在上述示例文件中,指定了三个日志组件:STDOUTFILEASYNC

1)STDOUT 日志组件: 采用 ch.qos.logback.core.ConsoleAppender 组件,将日志打印到控制台中。其中,<encoder> 标签 对日志进行格式化。

2)FILE 日志组件:采用 ch.qos.logback.core.rolling.RollingFileAppender 组件,将日志滚动记录到文件中。其中,\ 标签指定了日志文件名,\ 指定了滚动策略。 示例中采用 TimeBasedRollingPolicy 滚动策略,即根据时间进行滚动。其中 \ 指定了滚动日志文件名,\ 控制保留的日志文件最大数量。

3)ASYNC 日志组件: 采用 ch.qos.logback.classic.AsyncAppender 组件,负责异步记录日志。该组件仅充当事件分派器,必须搭配其他 appender 使用,示例文件中搭配 FILE 日志组件,表示将日志事件异步记录到文件中。

此外,可通过 \ 标签,指定日志的打印等级。并通过 \ 标签指定生效的日志组件。

1.3.3.2. 配置打印的日志等级

通过 \ 标签 指定相应类的日志等级。

1.3.4. 创世块配置文件 genesis.json

genesis.json 主要包括了 validatorVerifiersalloc 以及和创世区块相关配置。配置内容示例如下:

{
  "validatorVerifiers": {
    "302a300506032b65700321001537a67922d21fb10681456efad62578e5f26328ac94a3e9136c68f5aa7a777d": {
      "consensusVotingPower": 1,
      "shardingNum": 1,
      "name": "xiaoming",
      "agency": "agency01",
      "caHash": "caHash01"
    },
    "302a300506032b6570032100d767bd96e2dd0d3807bf87fb3a09bcef1db36d8313dffdc801e19efa6d6dc7f0": {
      "consensusVotingPower": 1,
      "shardingNum": 1,
      "name": "xiaoming01",
      "agency": "agency02",
      "caHash": "caHash02"
    }
  },
  "committeeAddrs": [],
  "operationsStaffAddrs": [],
  "voteThreshold": "2/3",
  "alloc": {
    "5db10750e8caff27f906b41c71b3471057dd2004": {
      "balance": "1606938044258990275541962092341162602522202993782792835301376"
    },
    "31e2e1ed11951c7091dfba62cd4b7145e947219c": {
      "balance": "1606938044258990275541962092341162602522202993782792835301376"
    },
    "ee0250c19ad59305b2bdb61f34b45b72fe37154f": {
      "balance": "1606938044258990275541962092341162602522202993782792835301376"
    }
  },
  "maxShardingNum": 1024,
  "shardingNum": 0,
  "nonce": "0x0000000000000000",
  "difficulty": "0x100000",
  "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "coinbase": "0x0000000000000000000000000000000000000000",
  "timestamp": "0x00",
  "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa",
  "gasLimit": "0x1000000000",
  "startEventNumber": "12"
}

1.3.4.1. 配置 validatorVerifiers

validatorVerifiers 包括了组网节点的身份信息,k-v 对形式。key 是组网节点的公钥字符串,value 包括以下字段:

  • consensusVotingPower:节点的共识投票权重。
  • shardingNum:节点所处分片。目前可忽略。
  • name:节点名称。
  • agency:节点所属机构。
  • caHash:节点证书序列号。目前可忽略。

1.3.4.2. 配置 committeeAddrs

committeeAddrs 包括了管理链的节点的委员会的公钥信息。

1.3.4.3. 配置 operationsStaffAddrs

operationsStaffAddrs 包括了链操作者白名单。

1.3.4.4. 配置 voteThreshold

委员会决策的门阀值。

1.3.4.5. 配置 alloc

alloc 包括了创世区块的合约状态。目前可忽略。

1.3.4.6. 配置创世块相关信息

  • maxShardingNum:分片最大数量。
  • shardingNum:本节点所属分片。
  • nonce:创世块的 nonce 值。
  • difficulty:创世块的计算难度 (目前可忽略) 。
  • mixhash:创世块的混合 hash (目前可忽略)。
  • coinbase:创世块的 coinbase (目前可忽略) 。
  • timestamp:创世块的时间戳。
  • parentHash:创世块的父区块 hash
  • extraData:创世块的附加数据 (目前可忽略) 。
  • gasLimit:交易执行消耗的最大 gas 值。
  • startEventNumber:初始块高。

1.3.5. 节点身份配置文件 nodeInfo.properties

nodeInfo.properties 主要包括了节点身份信息。配置内容示例如下:

#ed25519
name=xiaoming
agency=agency01
caHash=caHash01
nodeIdPrivateKey=e82aa7abc528720865d6ff2f19175305dd75c9943602e266957bff1eecf10b1b
nodeId=1537a67922d21fb10681456efad62578e5f26328ac94a3e9136c68f5aa7a777d1537a67922d21fb10681456efad62578e5f26328ac94a3e9136c68f5aa7a777d
#publicKey=302a300506032b65700321001537a67922d21fb10681456efad62578e5f26328ac94a3e9136c68f5aa7a777d

#Encrypt/Decrypt
#AES
nodeEncryptKey=c9ec17b81d5abf18b979693faacbf917
#SM4
#nodeEncryptKey=a77ce8a55dbc209f052d6be716963ec2
  • name:节点信息。
  • agency:节点所属结构。
  • caHash:节点证书序列号 (目前可忽略) 。
  • nodeIdPrivateKey:节点私钥字符串 (16 进制) 。
  • nodeId:节点 Id 字符串。
  • nodeEncryptKey:账本信息加密存储时采用的加密私钥,需要与 database.encryptAlg 配置项指定的加密算法一致 (如果无需加密,可忽视该配置项) 。
Copyright © netease 2024 all right reserved,powered by Gitbook文档修订时间: 2024-10-12 17:03:52

results matching ""

    No results matching ""