@fairmint/canton-node-sdk
Version:
Canton Node SDK
132 lines (121 loc) • 5.38 kB
Plain Text
include required(file("/app/storage.conf"))
canton {
# required for key export
features {
enable-preview-commands = yes
}
parameters {
manual-start = no
non-standard-config = yes
timeouts.processing.slow-future-warn = 20.seconds
}
sequencers {
sequencer {
init = {
generate-topology-transactions-and-keys = false
identity.type = manual
}
sequencer-client {
acknowledgement-interval = 10m
}
storage = ${_storage}
storage.config.properties {
serverName = ${CANTON_DOMAIN_POSTGRES_SERVER}
portNumber = ${CANTON_DOMAIN_POSTGRES_PORT}
currentSchema = "sequencer"
databaseName = ${?CANTON_SEQUENCER_POSTGRES_DB}
user = ${?CANTON_DOMAIN_POSTGRES_USER}
password = ${?CANTON_DOMAIN_POSTGRES_PASSWORD}
}
monitoring.grpc-health-server {
address = "0.0.0.0"
port = 5061
}
public-api {
address = "0.0.0.0"
port = 5008
max-token-expiration-interval = ${?SEQUENCER_TOKEN_EXPIRATION_TIME}
# randomize to avoid issues with correlated failures
use-exponential-random-token-expiration = true
}
admin-api {
address = "0.0.0.0"
port = 5009
max-inbound-message-size = 104857600 # 100MB
limits.active {
"com.digitalasset.canton.topology.admin.v30.TopologyManagerReadService/GenesisState": 1,
"com.digitalasset.canton.topology.admin.v30.TopologyManagerReadService/GenesisStateV2": 1,
"com.digitalasset.canton.topology.admin.v30.TopologyManagerReadService/ExportTopologySnapshot": 1,
"com.digitalasset.canton.topology.admin.v30.TopologyManagerReadService/ExportTopologySnapshotV2": 1,
"com.digitalasset.canton.sequencer.admin.v30.SequencerAdministrationService/OnboardingState": 1,
"com.digitalasset.canton.sequencer.admin.v30.SequencerAdministrationService/OnboardingStateV2": 1
}
}
# Reduced time proof request interval here (default 24h)
# so that sequencer will not block other sequencers from pruning even there is lack of activities
# ref: https://github.com/DACH-NY/canton/issues/16371#issuecomment-1885005687
# Note that this needs to be shorter than the SEQUENCER_RETENTION_PERIOD
# or our own sequencer will prevent pruning.
# Time requests are much less expensive than Daml transactions
# so given our target load this is neglible.
time-tracker.min-observation-duration = 30m
parameters {
batching.max-pruning-time-interval = "10 minutes"
}
sequencer {
block {
writer {
type = high-throughput
// maximum memory the buffered events will occupy
buffered-events-max-memory = 200MiB // higher buffers for clients that have lagging subscriptions
buffered-events-preload-batch-size = 1000 // increase the number of events we load in each query during startup to reduce startup time
# increase payload queue size to have the same behavior as the cometbft sequencer
payload-queue-size = 2500
}
throughput-cap {
enabled = true
messages = {
confirmation-request = {
#Global TPS cap for this message type is 20. Over 60 seconds, this means the global usage is 1200.
#If over the past 60seconds, at least 90% of these 1200 messages are observed, every client gets 1200 / (1 + vActive), where vActive is the number of clients that have sent at least one #thing in the past 60seconds.
#If the usage was below 90%, then the client would be able to reach their allotted 5tps.
global-tps-cap = 20
per-client-tps-cap = 5
global-kbps-cap = 1000
per-client-kbps-cap = 400
}
topology = {
# really high values that more or less mean the topology caps are disabled because time advancing messages are topology transactions as well and they are not retried
# and if we throttle time advancing messages then we would actually get more time proofs which cannot be throttled currently
global-tps-cap = 200
per-client-tps-cap = 10
global-kbps-cap = 2000
per-client-kbps-cap = 500
}
}
}
}
config {
storage = ${_storage}
storage.config.properties {
serverName = ${?CANTON_DOMAIN_POSTGRES_SERVER}
serverName = ${?SEQUENCER_DRIVER_DATABASE_ADDRESS}
portNumber = ${CANTON_DOMAIN_POSTGRES_PORT}
currentSchema = "sequencer_driver"
databaseName = ${?CANTON_SEQUENCER_POSTGRES_DB}
user = ${?CANTON_DOMAIN_POSTGRES_USER}
password = ${?SEQUENCER_DRIVER_DATABASE_PASSWORD}
}
}
type = reference
}
sequencer-client {
use-new-connection-pool = false
}
public-api.limits.active = {
"com.digitalasset.canton.sequencer.api.v30.SequencerService/DownloadTopologyStateForInit" : 3,
"com.digitalasset.canton.sequencer.api.v30.SequencerService/Subscribe" : 1000,
}
}
}
}