350 lines
14 KiB
Go
350 lines
14 KiB
Go
/*
|
|
Copyright IBM Corp. All Rights Reserved.
|
|
|
|
SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
package fabricconfig
|
|
|
|
import (
|
|
"time"
|
|
|
|
docker "github.com/fsouza/go-dockerclient"
|
|
)
|
|
|
|
type Core struct {
|
|
Logging *Logging `yaml:"logging,omitempty"`
|
|
Peer *Peer `yaml:"peer,omitempty"`
|
|
VM *VM `yaml:"vm,omitempty"`
|
|
Chaincode *Chaincode `yaml:"chaincode,omitempty"`
|
|
Ledger *Ledger `yaml:"ledger,omitempty"`
|
|
Operations *Operations `yaml:"operations,omitempty"`
|
|
Metrics *Metrics `yaml:"metrics,omitempty"`
|
|
}
|
|
|
|
type Logging struct {
|
|
Format string `yaml:"format,omitempty"`
|
|
|
|
ExtraProperties map[string]interface{} `yaml:",inline,omitempty"`
|
|
}
|
|
|
|
type Peer struct {
|
|
ID string `yaml:"id,omitempty"`
|
|
NetworkID string `yaml:"networkId,omitempty"`
|
|
ListenAddress string `yaml:"listenAddress,omitempty"`
|
|
ChaincodeListenAddress string `yaml:"ChaincodeListenAddress,omitempty"`
|
|
ChaincodeAddress string `yaml:"chaincodeAddress,omitempty"`
|
|
Address string `yaml:"address,omitempty"`
|
|
AddressAutoDetect bool `yaml:"addressAutoDetect"`
|
|
Keepalive *Keepalive `yaml:"keepalive,omitempty"`
|
|
Gossip *Gossip `yaml:"gossip,omitempty"`
|
|
Events *Events `yaml:"events,omitempty"`
|
|
TLS *TLS `yaml:"tls,omitempty"`
|
|
Authentication *Authentication `yaml:"authentication,omitempty"`
|
|
FileSystemPath string `yaml:"fileSystemPath,omitempty"`
|
|
BCCSP *BCCSP `yaml:"BCCSP,omitempty"`
|
|
MSPConfigPath string `yaml:"mspConfigPath,omitempty"`
|
|
LocalMSPID string `yaml:"localMspId,omitempty"`
|
|
Deliveryclient *DeliveryClient `yaml:"deliveryclient,omitempty"`
|
|
LocalMspType string `yaml:"localMspType,omitempty"`
|
|
Handlers *Handlers `yaml:"handlers,omitempty"`
|
|
ValidatorPoolSize int `yaml:"validatorPoolSize,omitempty"`
|
|
Discovery *Discovery `yaml:"discovery,omitempty"`
|
|
Limits *Limits `yaml:"limits,omitempty"`
|
|
|
|
ExtraProperties map[string]interface{} `yaml:",inline,omitempty"`
|
|
}
|
|
|
|
type Keepalive struct {
|
|
MinInterval time.Duration `yaml:"minInterval,omitempty"`
|
|
Client *ClientKeepalive `yaml:"client,omitempty"`
|
|
DeliveryClient *ClientKeepalive `yaml:"deliveryClient,omitempty"`
|
|
}
|
|
|
|
type ClientKeepalive struct {
|
|
Interval time.Duration `yaml:"interval,omitempty"`
|
|
Timeout time.Duration `yaml:"timeout,omitempty"`
|
|
}
|
|
|
|
type Gossip struct {
|
|
Bootstrap string `yaml:"bootstrap,omitempty"`
|
|
UseLeaderElection bool `yaml:"useLeaderElection"`
|
|
OrgLeader bool `yaml:"orgLeader"`
|
|
MembershipTrackerInterval time.Duration `yaml:"membershipTrackerInterval,omitempty"`
|
|
Endpoint string `yaml:"endpoint,omitempty"`
|
|
MaxBlockCountToStore int `yaml:"maxBlockCountToStore,omitempty"`
|
|
MaxPropagationBurstLatency time.Duration `yaml:"maxPropagationBurstLatency,omitempty"`
|
|
MaxPropagationBurstSize int `yaml:"maxPropagationBurstSize,omitempty"`
|
|
PropagateIterations int `yaml:"propagateIterations,omitempty"`
|
|
PropagatePeerNum int `yaml:"propagatePeerNum,omitempty"`
|
|
PullInterval time.Duration `yaml:"pullInterval,omitempty"`
|
|
PullPeerNum int `yaml:"pullPeerNum,omitempty"`
|
|
RequestStateInfoInterval time.Duration `yaml:"requestStateInfoInterval,omitempty"`
|
|
PublishStateInfoInterval time.Duration `yaml:"publishStateInfoInterval,omitempty"`
|
|
StateInfoRetentionInterval time.Duration `yaml:"stateInfoRetentionInterval,omitempty"`
|
|
PublishCertPeriod time.Duration `yaml:"publishCertPeriod,omitempty"`
|
|
DialTimeout time.Duration `yaml:"dialTimeout,omitempty"`
|
|
ConnTimeout time.Duration `yaml:"connTimeout,omitempty"`
|
|
RecvBuffSize int `yaml:"recvBuffSize,omitempty"`
|
|
SendBuffSize int `yaml:"sendBuffSize,omitempty"`
|
|
DigestWaitTime time.Duration `yaml:"digestWaitTime,omitempty"`
|
|
RequestWaitTime time.Duration `yaml:"requestWaitTime,omitempty"`
|
|
ResponseWaitTime time.Duration `yaml:"responseWaitTime,omitempty"`
|
|
AliveTimeInterval time.Duration `yaml:"aliveTimeInterval,omitempty"`
|
|
AliveExpirationTimeout time.Duration `yaml:"aliveExpirationTimeout,omitempty"`
|
|
ReconnectInterval time.Duration `yaml:"reconnectInterval,omitempty"`
|
|
MsgExpirationFactor int `yaml:"msgExpirationFactor,omitempty"`
|
|
MaxConnectionAttempts int `yaml:"maxConnectionAttempts,omitempty"`
|
|
ExternalEndpoint string `yaml:"externalEndpoint,omitempty"`
|
|
Election *GossipElection `yaml:"election,omitempty"`
|
|
PvtData *GossipPvtData `yaml:"pvtData,omitempty"`
|
|
State *GossipState `yaml:"state,omitempty"`
|
|
}
|
|
|
|
type GossipElection struct {
|
|
StartupGracePeriod time.Duration `yaml:"startupGracePeriod,omitempty"`
|
|
MembershipSampleInterval time.Duration `yaml:"membershipSampleInterval,omitempty"`
|
|
LeaderAliveThreshold time.Duration `yaml:"leaderAliveThreshold,omitempty"`
|
|
LeaderElectionDuration time.Duration `yaml:"leaderElectionDuration,omitempty"`
|
|
}
|
|
|
|
type GossipPvtData struct {
|
|
PullRetryThreshold time.Duration `yaml:"pullRetryThreshold,omitempty"`
|
|
TransientstoreMaxBlockRetention int `yaml:"transientstoreMaxBlockRetention,omitempty"`
|
|
PushAckTimeout time.Duration `yaml:"pushAckTimeout,omitempty"`
|
|
BtlPullMargin int `yaml:"btlPullMargin,omitempty"`
|
|
ReconcileBatchSize int `yaml:"reconcileBatchSize,omitempty"`
|
|
ReconcileSleepInterval time.Duration `yaml:"reconcileSleepInterval,omitempty"`
|
|
ReconciliationEnabled bool `yaml:"reconciliationEnabled"`
|
|
SkipPullingInvalidTransactionsDuringCommit bool `yaml:"skipPullingInvalidTransactionsDuringCommit"`
|
|
ImplicitCollDisseminationPolicy ImplicitCollDisseminationPolicy `yaml:"implicitCollectionDisseminationPolicy"`
|
|
}
|
|
|
|
type ImplicitCollDisseminationPolicy struct {
|
|
RequiredPeerCount int `yaml:"requiredPeerCount,omitempty"`
|
|
// do not tag omitempty in order to override MaxPeerCount default with 0
|
|
MaxPeerCount int `yaml:"maxPeerCount"`
|
|
}
|
|
|
|
type GossipState struct {
|
|
Enabled bool `yaml:"enabled"`
|
|
CheckInterval time.Duration `yaml:"checkInterval,omitempty"`
|
|
ResponseTimeout time.Duration `yaml:"responseTimeout,omitempty"`
|
|
BatchSize int `yaml:"batchSize,omitempty"`
|
|
BlockBufferSize int `yaml:"blockBufferSize,omitempty"`
|
|
MaxRetries int `yaml:"maxRetries,omitempty"`
|
|
}
|
|
|
|
type Events struct {
|
|
Address string `yaml:"address,omitempty"`
|
|
Buffersize int `yaml:"buffersize,omitempty"`
|
|
Timeout time.Duration `yaml:"timeout,omitempty"`
|
|
Timewindow time.Duration `yaml:"timewindow,omitempty"`
|
|
Keepalive *Keepalive `yaml:"keepalive,omitempty"`
|
|
}
|
|
|
|
type TLS struct {
|
|
Enabled bool `yaml:"enabled"`
|
|
ClientAuthRequired bool `yaml:"clientAuthRequired"`
|
|
CA *FileRef `yaml:"ca,omitempty"`
|
|
Cert *FileRef `yaml:"cert,omitempty"`
|
|
Key *FileRef `yaml:"key,omitempty"`
|
|
RootCert *FileRef `yaml:"rootcert,omitempty"`
|
|
ClientRootCAs *FilesRef `yaml:"clientRootCAs,omitempty"`
|
|
ClientKey *FileRef `yaml:"clientKey,omitempty"`
|
|
ClientCert *FileRef `yaml:"clientCert,omitempty"`
|
|
}
|
|
|
|
type FileRef struct {
|
|
File string `yaml:"file,omitempty"`
|
|
}
|
|
|
|
type FilesRef struct {
|
|
Files []string `yaml:"files,omitempty"`
|
|
}
|
|
|
|
type Authentication struct {
|
|
Timewindow time.Duration `yaml:"timewindow,omitempty"`
|
|
}
|
|
|
|
type BCCSP struct {
|
|
Default string `yaml:"Default,omitempty"`
|
|
SW *SoftwareProvider `yaml:"SW,omitempty"`
|
|
PKCS11 *PKCS11 `yaml:"PKCS11,omitempty"`
|
|
}
|
|
|
|
type SoftwareProvider struct {
|
|
Hash string `yaml:"Hash,omitempty"`
|
|
Security int `yaml:"Security,omitempty"`
|
|
}
|
|
|
|
type PKCS11 struct {
|
|
Hash string `yaml:"Hash,omitempty"`
|
|
Security int `yaml:"Security,omitempty"`
|
|
Pin string `yaml:"Pin,omitempty"`
|
|
Label string `yaml:"Label,omitempty"`
|
|
Library string `yaml:"Library,omitempty"`
|
|
|
|
AltID string `yaml:"AltID,omitempty"`
|
|
KeyIDs []KeyIDMapping `yaml:"KeyIDs,omitempty"`
|
|
}
|
|
|
|
type KeyIDMapping struct {
|
|
SKI string `yaml:"SKI,omitempty"`
|
|
ID string `yaml:"ID,omitempty"`
|
|
}
|
|
|
|
type DeliveryClient struct {
|
|
ReconnectTotalTimeThreshold time.Duration `yaml:"reconnectTotalTimeThreshold,omitempty"`
|
|
AddressOverrides []*AddressOverride `yaml:"addressOverrides,omitempty"`
|
|
}
|
|
|
|
type AddressOverride struct {
|
|
From string `yaml:"from"`
|
|
To string `yaml:"to"`
|
|
CACertsFile string `yaml:"caCertsFile"`
|
|
}
|
|
|
|
type Service struct {
|
|
Enabled bool `yaml:"enabled"`
|
|
ListenAddress string `yaml:"listenAddress,omitempty"`
|
|
}
|
|
|
|
type Handlers struct {
|
|
AuthFilters []Handler `yaml:"authFilters,omitempty"`
|
|
Decorators []Handler `yaml:"decorators,omitempty"`
|
|
Endorsers HandlerMap `yaml:"endorsers,omitempty"`
|
|
Validators HandlerMap `yaml:"validators,omitempty"`
|
|
}
|
|
|
|
type Handler struct {
|
|
Name string `yaml:"name,omitempty"`
|
|
Library string `yaml:"library,omitempty"`
|
|
}
|
|
|
|
type HandlerMap map[string]Handler
|
|
|
|
type Discovery struct {
|
|
Enabled bool `yaml:"enabled"`
|
|
AuthCacheEnabled bool `yaml:"authCacheEnabled"`
|
|
AuthCacheMaxSize int `yaml:"authCacheMaxSize,omitempty"`
|
|
AuthCachePurgeRetentionRatio float64 `yaml:"authCachePurgeRetentionRatio"`
|
|
OrgMembersAllowedAccess bool `yaml:"orgMembersAllowedAccess"`
|
|
}
|
|
|
|
type Limits struct {
|
|
Concurrency *Concurrency `yaml:"concurrency,omitempty"`
|
|
}
|
|
|
|
type Concurrency struct {
|
|
EndorserService int `yaml:"endorserService,omitempty"`
|
|
DeliverService int `yaml:"deliverService,omitempty"`
|
|
}
|
|
|
|
type VM struct {
|
|
Endpoint string `yaml:"endpoint,omitempty"`
|
|
Docker *Docker `yaml:"docker,omitempty"`
|
|
}
|
|
|
|
type Docker struct {
|
|
TLS *TLS `yaml:"tls,omitempty"`
|
|
AttachStdout bool `yaml:"attachStdout"`
|
|
HostConfig *docker.HostConfig `yaml:"hostConfig,omitempty"`
|
|
}
|
|
|
|
type Chaincode struct {
|
|
Builder string `yaml:"builder,omitempty"`
|
|
Pull bool `yaml:"pull"`
|
|
Golang *Golang `yaml:"golang,omitempty"`
|
|
Java *Java `yaml:"java,omitempty"`
|
|
Node *Node `yaml:"node,omitempty"`
|
|
InstallTimeout time.Duration `yaml:"installTimeout,omitempty"`
|
|
StartupTimeout time.Duration `yaml:"startupTimeout,omitempty"`
|
|
ExecuteTimeout time.Duration `yaml:"executeTimeout,omitempty"`
|
|
Mode string `yaml:"mode,omitempty"`
|
|
Keepalive int `yaml:"keepalive,omitempty"`
|
|
System SystemFlags `yaml:"system,omitempty"`
|
|
Logging *Logging `yaml:"logging,omitempty"`
|
|
ExternalBuilders []ExternalBuilder `yaml:"externalBuilders"`
|
|
|
|
ExtraProperties map[string]interface{} `yaml:",inline,omitempty"`
|
|
}
|
|
|
|
type Golang struct {
|
|
Runtime string `yaml:"runtime,omitempty"`
|
|
DynamicLink bool `yaml:"dynamicLink"`
|
|
|
|
ExtraProperties map[string]interface{} `yaml:",inline,omitempty"`
|
|
}
|
|
|
|
type Java struct {
|
|
ExtraProperties map[string]interface{} `yaml:",inline,omitempty"`
|
|
}
|
|
|
|
type Node struct {
|
|
ExtraProperties map[string]interface{} `yaml:",inline,omitempty"`
|
|
}
|
|
|
|
type ExternalBuilder struct {
|
|
PropagateEnvironment []string `yaml:"propagateEnvironment,omitempty"`
|
|
Name string `yaml:"name,omitempty"`
|
|
Path string `yaml:"path,omitempty"`
|
|
}
|
|
|
|
type SystemFlags struct {
|
|
NEWLIFECYCLE string `yaml:"_lifecycle,omitempty"`
|
|
CSCC string `yaml:"cscc,omitempty"`
|
|
LSCC string `yaml:"lscc,omitempty"`
|
|
ESCC string `yaml:"escc,omitempty"`
|
|
VSCC string `yaml:"vscc,omitempty"`
|
|
QSCC string `yaml:"qscc,omitempty"`
|
|
}
|
|
|
|
type Ledger struct {
|
|
// Blockchain - not sure if it's needed
|
|
State *StateConfig `yaml:"state,omitempty"`
|
|
History *HistoryConfig `yaml:"history,omitempty"`
|
|
PvtdataStore *PvtdataStore `yaml:"pvtdataStore,omitempty"`
|
|
}
|
|
|
|
type StateConfig struct {
|
|
StateDatabase string `yaml:"stateDatabase,omitempty"`
|
|
CouchDBConfig *CouchDBConfig `yaml:"couchDBConfig,omitempty"`
|
|
}
|
|
|
|
type CouchDBConfig struct {
|
|
CouchDBAddress string `yaml:"couchDBAddress,omitempty"`
|
|
Username string `yaml:"username,omitempty"`
|
|
Password string `yaml:"password,omitempty"`
|
|
MaxRetries int `yaml:"maxRetries,omitempty"`
|
|
MaxRetriesOnStartup int `yaml:"maxRetriesOnStartup,omitempty"`
|
|
RequestTimeout time.Duration `yaml:"requestTimeout,omitempty"`
|
|
QueryLimit int `yaml:"queryLimit,omitempty"`
|
|
MaxBatchUpdateSize int `yaml:"maxBatchUpdateSize,omitempty"`
|
|
}
|
|
|
|
type HistoryConfig struct {
|
|
EnableHistoryDatabase bool `yaml:"enableHistoryDatabase"`
|
|
}
|
|
|
|
type PvtdataStore struct {
|
|
DeprioritizedDataReconcilerInterval time.Duration
|
|
}
|
|
|
|
type Operations struct {
|
|
ListenAddress string `yaml:"listenAddress,omitempty"`
|
|
TLS *TLS `yaml:"tls"`
|
|
}
|
|
|
|
type Metrics struct {
|
|
Provider string `yaml:"provider"`
|
|
Statsd *Statsd `yaml:"statsd,omitempty"`
|
|
}
|
|
|
|
type Statsd struct {
|
|
Network string `yaml:"network,omitempty"`
|
|
Address string `yaml:"address,omitempty"`
|
|
WriteInterval time.Duration `yaml:"writeInterval,omitempty"`
|
|
Prefix string `yaml:"prefix,omitempty"`
|
|
}
|