@fairmint/canton-node-sdk
Version:
Canton Node SDK
124 lines (112 loc) • 4.45 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
}
storage = ${_storage}
storage = {
config {
properties = {
serverName = ${CANTON_DOMAIN_POSTGRES_SERVER}
portNumber = ${CANTON_DOMAIN_POSTGRES_PORT}
databaseName = "cantonnet"
databaseName = ${?CANTON_SEQUENCER_POSTGRES_DB}
currentSchema = "sequencer"
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
# higher size than the max pool size of cometbft
payload-queue-size = 2500
}
throughput-cap {
enabled = true
messages = {
confirmation-request = {
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 proofs are considered topology events as well
global-tps-cap = 200
per-client-tps-cap = 10
global-kbps-cap = 2000
per-client-kbps-cap = 500
}
}
}
}
config {
cometbft-node-host = ${SEQUENCER_DRIVER_COMETBFT_HOST}
cometbft-node-port = ${SEQUENCER_DRIVER_COMETBFT_PORT}
health-check-attempts = 100000
}
type = "CometBFT"
}
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,
}
}
}
}