github.com/turingchain2020/turingchain@v1.1.21/types/cfg.go (about)

     1  // Copyright Turing Corp. 2018 All Rights Reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package types
     6  
     7  import "github.com/turingchain2020/turingchain/common/crypto"
     8  
     9  // Config 配置信息
    10  type Config struct {
    11  	Title          string         `json:"title,omitempty"`
    12  	Version        string         `json:"version,omitempty"`
    13  	Log            *Log           `json:"log,omitempty"`
    14  	Store          *Store         `json:"store,omitempty"`
    15  	Consensus      *Consensus     `json:"consensus,omitempty"`
    16  	Mempool        *Mempool       `json:"memPool,omitempty"`
    17  	BlockChain     *BlockChain    `json:"blockChain,omitempty"`
    18  	Wallet         *Wallet        `json:"wallet,omitempty"`
    19  	P2P            *P2P           `json:"p2p,omitempty"`
    20  	RPC            *RPC           `json:"rpc,omitempty"`
    21  	Exec           *Exec          `json:"exec,omitempty"`
    22  	TestNet        bool           `json:"testNet,omitempty"`
    23  	FixTime        bool           `json:"fixTime,omitempty"`
    24  	TxHeight       bool           `json:"txHeight,omitempty"`
    25  	Pprof          *Pprof         `json:"pprof,omitempty"`
    26  	Fork           *ForkList      `json:"fork,omitempty"`
    27  	Health         *HealthCheck   `json:"health,omitempty"`
    28  	CoinSymbol     string         `json:"coinSymbol,omitempty"`
    29  	EnableParaFork bool           `json:"enableParaFork,omitempty"`
    30  	Metrics        *Metrics       `json:"metrics,omitempty"`
    31  	ChainID        int32          `json:"chainID,omitempty"`
    32  	AddrVer        byte           `json:"addrVer,omitempty"`
    33  	Crypto         *crypto.Config `json:"crypto,omitempty"`
    34  	NtpHosts       []string       `json:"ntpHosts,omitempty"`
    35  }
    36  
    37  //ConfigSubModule 子模块的配置
    38  type ConfigSubModule struct {
    39  	Store     map[string][]byte
    40  	Exec      map[string][]byte
    41  	Consensus map[string][]byte
    42  	Wallet    map[string][]byte
    43  	Mempool   map[string][]byte
    44  	Metrics   map[string][]byte
    45  	P2P       map[string][]byte
    46  	Crypto    map[string][]byte
    47  }
    48  
    49  // subModule 子模块结构体
    50  type subModule struct {
    51  	Store     map[string]interface{}
    52  	Exec      map[string]interface{}
    53  	Consensus map[string]interface{}
    54  	Wallet    map[string]interface{}
    55  	Mempool   map[string]interface{}
    56  	Metrics   map[string]interface{}
    57  	P2P       map[string]interface{}
    58  	Crypto    map[string]interface{}
    59  }
    60  
    61  // ForkList fork列表配置
    62  type ForkList struct {
    63  	System map[string]int64
    64  	Sub    map[string]map[string]int64
    65  }
    66  
    67  // Log 日志配置
    68  type Log struct {
    69  	// 日志级别,支持debug(dbug)/info/warn/error(eror)/crit
    70  	Loglevel        string `json:"loglevel,omitempty"`
    71  	LogConsoleLevel string `json:"logConsoleLevel,omitempty"`
    72  	// 日志文件名,可带目录,所有生成的日志文件都放到此目录下
    73  	LogFile string `json:"logFile,omitempty"`
    74  	// 单个日志文件的最大值(单位:兆)
    75  	MaxFileSize uint32 `json:"maxFileSize,omitempty"`
    76  	// 最多保存的历史日志文件个数
    77  	MaxBackups uint32 `json:"maxBackups,omitempty"`
    78  	// 最多保存的历史日志消息(单位:天)
    79  	MaxAge uint32 `json:"maxAge,omitempty"`
    80  	// 日志文件名是否使用本地事件(否则使用UTC时间)
    81  	LocalTime bool `json:"localTime,omitempty"`
    82  	// 历史日志文件是否压缩(压缩格式为gz)
    83  	Compress bool `json:"compress,omitempty"`
    84  	// 是否打印调用源文件和行号
    85  	CallerFile bool `json:"callerFile,omitempty"`
    86  	// 是否打印调用方法
    87  	CallerFunction bool `json:"callerFunction,omitempty"`
    88  }
    89  
    90  // Mempool 配置
    91  type Mempool struct {
    92  	// mempool队列名称,可配,timeline,score,price
    93  	Name string `json:"name,omitempty"`
    94  	// mempool缓存容量大小,默认10240
    95  	PoolCacheSize int64 `json:"poolCacheSize,omitempty"`
    96  	ForceAccept   bool  `json:"forceAccept,omitempty"`
    97  	// 每个账户在mempool中得最大交易数量,默认100
    98  	MaxTxNumPerAccount int64 `json:"maxTxNumPerAccount,omitempty"`
    99  	MaxTxLast          int64 `json:"maxTxLast,omitempty"`
   100  	IsLevelFee         bool  `json:"isLevelFee,omitempty"`
   101  	// 最小单元交易费,这个没有默认值,必填,一般是100000
   102  	MinTxFeeRate int64 `json:"minTxFeeRate,omitempty"`
   103  	// 最大单元交易费, 默认1e7
   104  	MaxTxFeeRate int64 `json:"maxTxFeeRate,omitempty"`
   105  	// 单笔最大交易费, 默认1e9
   106  	MaxTxFee int64 `json:"maxTxFee,omitempty"`
   107  	// 目前execCheck效率较低,支持关闭交易execCheck,提升性能
   108  	DisableExecCheck bool `json:"disableExecCheck,omitempty"`
   109  }
   110  
   111  // Consensus 配置
   112  type Consensus struct {
   113  	// 共识名称 :solo, ticket, raft, tendermint, para
   114  	Name string `json:"name,omitempty"`
   115  	// 创世区块时间(UTC时间)
   116  	GenesisBlockTime int64 `json:"genesisBlockTime,omitempty"`
   117  	// 是否开启挖矿,开启挖矿才能创建区块
   118  	Minerstart bool `json:"minerstart,omitempty"`
   119  	// 创世交易地址
   120  	Genesis     string `json:"genesis,omitempty"`
   121  	HotkeyAddr  string `json:"hotkeyAddr,omitempty"`
   122  	ForceMining bool   `json:"forceMining,omitempty"`
   123  	// 配置挖矿的合约名单
   124  	MinerExecs []string `json:"minerExecs,omitempty"`
   125  	// 最优区块选择
   126  	EnableBestBlockCmp bool `json:"enableBestBlockCmp,omitempty"`
   127  }
   128  
   129  // Wallet 配置
   130  type Wallet struct {
   131  	// 交易发送最低手续费,单位0.00000001TRC(1e-8),默认100000,即0.001TRC
   132  	MinFee int64 `json:"minFee,omitempty"`
   133  	// walletdb驱动名
   134  	Driver string `json:"driver,omitempty"`
   135  	// walletdb路径
   136  	DbPath string `json:"dbPath,omitempty"`
   137  	// walletdb缓存大小
   138  	DbCache int32 `json:"dbCache,omitempty"`
   139  	// 钱包发送交易签名方式
   140  	SignType string `json:"signType,omitempty"`
   141  	CoinType string `json:"coinType,omitempty"`
   142  }
   143  
   144  // Store 配置
   145  type Store struct {
   146  	// 数据存储格式名称,目前支持mavl,kvdb,kvmvcc,mpt
   147  	Name string `json:"name,omitempty"`
   148  	// 数据存储驱动类别,目前支持leveldb,goleveldb,memdb,gobadgerdb,ssdb,pegasus
   149  	Driver string `json:"driver,omitempty"`
   150  	// 数据文件存储路径
   151  	DbPath string `json:"dbPath,omitempty"`
   152  	// Cache大小
   153  	DbCache int32 `json:"dbCache,omitempty"`
   154  	// 数据库版本
   155  	LocalDBVersion string `json:"localdbVersion,omitempty"`
   156  	// 数据库版本
   157  	StoreDBVersion string `json:"storedbVersion,omitempty"`
   158  }
   159  
   160  // BlockChain 配置
   161  type BlockChain struct {
   162  	// 分片存储中每个大块包含的区块数
   163  	ChunkblockNum int64 `json:"chunkblockNum,omitempty"`
   164  	// 缓存区块的个数
   165  	DefCacheSize int64 `json:"defCacheSize,omitempty"`
   166  	// 同步区块时一次最多申请获取的区块个数
   167  	MaxFetchBlockNum int64 `json:"maxFetchBlockNum,omitempty"`
   168  	// 向对端节点请求同步区块的时间间隔
   169  	TimeoutSeconds int64 `json:"timeoutSeconds,omitempty"`
   170  	BatchBlockNum  int64 `json:"batchBlockNum,omitempty"`
   171  	// 使用的数据库类型
   172  	Driver string `json:"driver,omitempty"`
   173  	// 数据库文件目录
   174  	DbPath string `json:"dbPath,omitempty"`
   175  	// 数据库缓存大小
   176  	DbCache             int32 `json:"dbCache,omitempty"`
   177  	IsStrongConsistency bool  `json:"isStrongConsistency,omitempty"`
   178  	// 是否为单节点
   179  	SingleMode bool `json:"singleMode,omitempty"`
   180  	// 同步区块批量写数据库时,是否需要立即写磁盘,非固态硬盘的电脑可以设置为false,以提高性能
   181  	Batchsync bool `json:"batchsync,omitempty"`
   182  	// 是否记录添加或者删除区块的序列,若节点作为主链节点,为平行链节点提供服务,需要设置为true
   183  	IsRecordBlockSequence bool `json:"isRecordBlockSequence,omitempty"`
   184  	// 是否为平行链节点
   185  	IsParaChain        bool `json:"isParaChain,omitempty"`
   186  	EnableTxQuickIndex bool `json:"enableTxQuickIndex,omitempty"`
   187  	// 升级storedb是否重新执行localdb
   188  	EnableReExecLocal bool `json:"enableReExecLocal,omitempty"`
   189  	// 区块回退
   190  	RollbackBlock int64 `json:"rollbackBlock,omitempty"`
   191  	// 回退是否保存区块
   192  	RollbackSave bool `json:"rollbackSave,omitempty"`
   193  	// 最新区块上链超时时间,单位秒。
   194  	OnChainTimeout int64 `json:"onChainTimeout,omitempty"`
   195  	// 使能精简localdb
   196  	EnableReduceLocaldb bool `json:"enableReduceLocaldb,omitempty"`
   197  	// 关闭分片存储,默认开启分片存储为false;平行链不需要分片需要修改此默认参数为true
   198  	DisableShard bool `protobuf:"varint,19,opt,name=disableShard" json:"disableShard,omitempty"`
   199  	// 使能从P2pStore中获取数据
   200  	EnableFetchP2pstore bool `json:"enableFetchP2pstore,omitempty"`
   201  	// 使能假设已删除已归档数据后,获取数据情况
   202  	EnableIfDelLocalChunk bool `json:"enableIfDelLocalChunk,omitempty"`
   203  	// 使能注册推送区块、区块头或交易回执
   204  	EnablePushSubscribe bool `json:"EnablePushSubscribe,omitempty"`
   205  	// 当前活跃区块的缓存数量
   206  	MaxActiveBlockNum int `json:"maxActiveBlockNum,omitempty"`
   207  	// 当前活跃区块的缓存大小M为单位
   208  	MaxActiveBlockSize int `json:"maxActiveBlockSize,omitempty"`
   209  
   210  	//HighAllowPackHeight 允许打包的High区块高度
   211  	HighAllowPackHeight int64 `json:"highAllowPackHeight,omitempty"`
   212  
   213  	//LowAllowPackHeight 允许打包的low区块高度
   214  	LowAllowPackHeight int64 `json:"lowAllowPackHeight,omitempty"`
   215  	//关闭blockchain 区块广播
   216  	DisableBlockBroadcast bool `json:"disableBlockBroadcast,omitempty"`
   217  	//关闭本地和ntp server的时钟偏移检查
   218  	DisableClockDriftCheck bool `json:"disableClockDriftCheck,omitempty"`
   219  }
   220  
   221  // P2P 配置
   222  type P2P struct {
   223  	// 使用的数据库类型
   224  	Driver string `json:"driver,omitempty"`
   225  	// 数据库文件目录
   226  	DbPath string `json:"dbPath,omitempty"`
   227  	// 数据库缓存大小
   228  	DbCache int32 `json:"dbCache,omitempty"`
   229  	// GRPC请求日志文件
   230  	GrpcLogFile string `json:"grpcLogFile,omitempty"`
   231  	// 是否启动P2P服务
   232  	Enable bool `json:"enable,omitempty"`
   233  	//是否等待Pid
   234  	WaitPid bool `json:"waitPid,omitempty"`
   235  	//指定p2p类型, 支持gossip, dht
   236  	Types []string `json:"types,omitempty"`
   237  }
   238  
   239  // RPC 配置
   240  type RPC struct {
   241  	// jrpc绑定地址
   242  	JrpcBindAddr string `json:"jrpcBindAddr,omitempty"`
   243  	// grpc绑定地址
   244  	GrpcBindAddr string `json:"grpcBindAddr,omitempty"`
   245  	// 白名单列表,允许访问的IP地址,默认是“*”,允许所有IP访问
   246  	Whitlist  []string `json:"whitlist,omitempty"`
   247  	Whitelist []string `json:"whitelist,omitempty"`
   248  	// jrpc方法请求白名单,默认是“*”,允许访问所有RPC方法
   249  	JrpcFuncWhitelist []string `json:"jrpcFuncWhitelist,omitempty"`
   250  	// grpc方法请求白名单,默认是“*”,允许访问所有RPC方法
   251  	GrpcFuncWhitelist []string `json:"grpcFuncWhitelist,omitempty"`
   252  	// jrpc方法请求黑名单,禁止调用黑名单里配置的rpc方法,一般和白名单配合使用,默认是空
   253  	JrpcFuncBlacklist []string `json:"jrpcFuncBlacklist,omitempty"`
   254  	// grpc方法请求黑名单,禁止调用黑名单里配置的rpc方法,一般和白名单配合使用,默认是空
   255  	GrpcFuncBlacklist []string `json:"grpcFuncBlacklist,omitempty"`
   256  	// 是否开启https
   257  	EnableTLS   bool `json:"enableTLS,omitempty"`
   258  	EnableTrace bool `json:"enableTrace,omitempty"`
   259  	// 证书文件,证书和私钥文件可以用cli工具生成
   260  	CertFile string `json:"certFile,omitempty"`
   261  	// 私钥文件
   262  	KeyFile string `json:"keyFile,omitempty"`
   263  	//basic auth 用户名
   264  	JrpcUserName string `json:"jrpcUserName,omitempty"`
   265  	//basic auth 用户密码
   266  	JrpcUserPasswd string `json:"jrpcUserPasswd,omitempty"`
   267  }
   268  
   269  // Exec 配置
   270  type Exec struct {
   271  	// 是否开启stat插件
   272  	EnableStat bool `json:"enableStat,omitempty"`
   273  	// 是否开启MVCC插件
   274  	EnableMVCC       bool     `json:"enableMVCC,omitempty"`
   275  	DisableAddrIndex bool     `json:"disableAddrIndex,omitempty"`
   276  	Alias            []string `json:"alias,omitempty"`
   277  	// 是否保存token交易信息
   278  	SaveTokenTxList bool `json:"saveTokenTxList,omitempty"`
   279  }
   280  
   281  // Pprof 配置
   282  type Pprof struct {
   283  	ListenAddr string `json:"listenAddr,omitempty"`
   284  }
   285  
   286  // HealthCheck 配置
   287  type HealthCheck struct {
   288  	ListenAddr     string `json:"listenAddr,omitempty"`
   289  	CheckInterval  uint32 `json:"checkInterval,omitempty"`
   290  	UnSyncMaxTimes uint32 `json:"unSyncMaxTimes,omitempty"`
   291  }
   292  
   293  // Metrics 相关测量配置信息
   294  type Metrics struct {
   295  	EnableMetrics bool   `json:"enableMetrics,omitempty"`
   296  	DataEmitMode  string `json:"dataEmitMode,omitempty"`
   297  	Duration      int64  `json:"duration,omitempty"`
   298  	URL           string `json:"url,omitempty"`
   299  	DatabaseName  string `json:"databaseName,omitempty"`
   300  	Username      string `json:"username,omitempty"`
   301  	Password      string `json:"password,omitempty"`
   302  	Namespace     string `json:"namespace,omitempty"`
   303  }