# Copyright (c) 2007-2013 Alysson Bessani, Eduardo Alchieri, Paulo Sousa, and the authors indicated in the @author tags # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. ############################################ ####### Communication Configurations ####### ############################################ #HMAC algorithm used to authenticate messages between processes ('HmacSHA512' is the default value) system.communication.hmacAlgorithm = HmacSHA512 #Algorithm to generate secret keys used to generate MACs ('PBKDF2WithHmacSHA1' is the default value) system.communication.secretKeyAlgorithm = PBKDF2WithHmacSHA1 #Signature algorithm used to verify clients requests and to perform the authenticated Diffie-Hellman exchange during #replica start-up ('SHA512withRSA' is the default value). This parameter is overriden in the event that a custom key loader is supplied system.communication.signatureAlgorithm = SHA512withRSA # Algorithm used to compute hashes ('SHA-512' is the default value) system.communication.hashAlgorithm = SHA-512 #HMAC algorithm provider ('SunJCE' is the default value) system.communication.hmacAlgorithmProvider = SunJCE #Secret keys algorith provider ('SunJCE' is the default value) system.communication.secretKeyAlgorithmProvider = SunJCE #Signature algorithm provider ('SunRsaSign' is the default value) system.communication.signatureAlgorithmProvider = SunRsaSign #Hash algorithm provider ('SUN' is the default value) system.communication.hashAlgorithmProvider = SUN #Specify if the communication system should use a thread to send data (true or false) system.communication.useSenderThread = true #Force all processes to use the same public/private keys pair and secret key. This is useful when deploying experiments #and benchmarks, but must not be used in production systems. This parameter will only work with the default key loader. system.communication.defaultkeys = true #IP address this replica should bind to. If this parameter does not have a valid ip address, #the replica will fetch the host address on its own. If config/hosts.config specifies the #loopback address for the host machine, this parameter is overriden by that system.communication.bindaddress = auto #Timeout used at client-side in case a malicous replica refuses to acknowledge that a write to a netty channel #has complete, in miliseconds. Set to -1 to ignore acknowledgment. system.communication.clienttimeout = 1000 #Timeout used at client-side in case a malicous replica refuses to acknowledge that a write to a netty channel #has complete, in miliseconds. Set to -1 to ignore acknowledgment. system.communication.replicatimeout = 1000 ############################################ ### Replication Algorithm Configurations ### ############################################ #Number of servers in the group system.servers.num = 4 #Maximum number of faulty replicas system.servers.f = 1 #Timeout to asking for a client request. This value should be greater than the batch timeout system.totalordermulticast.timeout = 2000 #Batch timeout. If set to any non-positive integer value, the next consensus instance #is triggered as soon as (1) the previous one is finished, and (2) any number new requests arrive, #without waiting to accumulate more requests for the batch. This value should be lower than the request timeout system.totalordermulticast.batchtimeout = -1 #Maximum batch size (in number of messages) system.totalordermulticast.maxbatchsize = 400 #Number of nonces (for non-determinism actions) generated system.totalordermulticast.nonces = 10 #if verification of leader-generated timestamps are increasing #it can only be used on systems in which the network clocks #are synchronized system.totalordermulticast.verifyTimestamps = false #Quantity of messages that can be stored in the receive queue of the communication system system.communication.inQueueSize = 500000 # Quantity of messages that can be stored in the send queue of each replica system.communication.outQueueSize = 500000 #Set to 1 if SMaRt should use signatures, set to 0 if otherwise system.communication.useSignatures = 0 #Set to 1 if clients should use MAC vectors, set to 0 if otherwise system.communication.useMACs = 1 #Print information about the replica when it is shutdown system.shutdownhook = true #Force all replicas to deliver to the application the same number of requests per batch. #This is not the same batch used during the ordering protocol system.samebatchsize = false #Set to 'macvector' to use MAC vectors in the consensus proof, 'signatures' to use digital signatures system.totalordermulticast.prooftype = signatures #Timeout associated to each request invoked by a client, in miliseconds system.totalordermulticast.invoketimeout = 40000 ############################################ ######### Control Flow Mechanism ########### ############################################ #Enable/disable control flow mechanism system.controlflow.controlflow = false #Maximum number of total pending requests that each replica can hold. Set to -1 to disable. system.controlflow.maxpendingreqs = 500000 #Preferred number of total pending requests. Once each replica hold up to this many requests, #it accepts requests again from clients. It must be lower than system.totalordermulticast.maxpendingreqs system.controlflow.preferredpendingreqs = 250000 #Maximum number of total pending decisions that each replica can hold. Set to -1 to disable. system.controlflow.maxpendingdecs = 200 #Preferred number of total pending decisions. Once each replica hold up to this many decisions, #it accepts requests again from clients. It must be lower than system.totalordermulticast.maxpendingdecs system.controlflow.preferredpendingdecs = 100 #Maximum number of total pending replies that each replica can hold. Set to -1 to disable. system.controlflow.maxpendingreps = 2000 #Preferred number of total pending replies. Once each replica hold up to this many replies, #it accepts requests again from clients. It must be lower than system.totalordermulticast.maxpendingreps system.controlflow.preferredpendingreps = 1000 #Maximum used memory that each replica should reach, in bytes. Set to -1 to disable. system.controlflow.maxusedmemory = 524288000 #Preferred used memory, in bytes. Once each replica decreses its memory to this amount, #it accepts requests again from clients. It must be lower than system.totalordermulticast.maxusedmemory system.controlflow.preferredusedmemory = 393216000 #Timeout for the client-side retrying mechanism, in miliseconds system.controlflow.timeout = 1000 ############################################ ###### State Transfer Configurations ####### ############################################ #Activate the state transfer protocol ('true' to activate, 'false' to de-activate) system.totalordermulticast.state_transfer = true #Maximum ahead-of-time message not discarded system.totalordermulticast.highMark = 10000 #Maximum ahead-of-time message not discarded when the replica is still on EID 0 (after which the state transfer is triggered) system.totalordermulticast.revival_highMark = 10 #Number of ahead-of-time messages necessary to trigger the state transfer after a request timeout occurs system.totalordermulticast.timeout_highMark = 200 ############################################ ###### Log and Checkpoint Configurations ### ############################################ system.totalordermulticast.log = true system.totalordermulticast.log_parallel = false system.totalordermulticast.log_to_disk = false system.totalordermulticast.sync_log = false #Period at which BFT-SMaRt requests the state to the application (for the state transfer state protocol) system.totalordermulticast.checkpoint_period = 1000 system.totalordermulticast.global_checkpoint_period = 120000 system.totalordermulticast.checkpoint_to_disk = false system.totalordermulticast.sync_ckp = false ############################################ ###### Reconfiguration Configurations ###### ############################################ #Replicas ID for the initial view, separated by a comma. # The number of replicas in this parameter should be equal to that specified in 'system.servers.num' system.initial.view = 0,1,2,3 #The ID of the trust third party (TTP) system.ttp.id = 7002 #This sets if the system will function in Byzantine or crash-only mode. Set to "true" to support Byzantine faults system.bft = true