cresettings

package
v0.11.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 20, 2026 License: MIT Imports: 7 Imported by: 14

README

CRE Settings

---
title: Legend
---
flowchart
    bound{{Bound}}
    gate[/Gate\]
    queue[[Queue]]
    rate[\Rate/]
    resource([Resource])
    time>Time]
    
    bound:::bound
    gate:::gate
    queue:::queue
    rate:::rate
    resource:::resource
    time:::time

    classDef bound stroke:#f00
    classDef gate stroke:#0f0
    classDef queue stroke:#00f
    classDef rate stroke:#ff0
    classDef resource stroke:#f0f
    classDef time stroke:#0ff
---
title: Limits
---
flowchart
    subgraph handleRequest[httpServer/websocketServer.handleRequest]
        GatewayIncomingPayloadSizeLimit{{GatewayIncomingPayloadSizeLimit}}:::bound
%%        TODO GatewayVaultManagementEnabled
    end

    subgraph HandleNodeMessage[gatewayHandler.HandleNodeMessage]
%%      DON nodes → gateway (separate from the inbound trigger flow)
        GatewayHTTPGlobalRate[\GatewayHTTPGlobalRate/]:::rate
        GatewayHTTPPerNodeRate[\GatewayHTTPPerNodeRate/]:::rate
    end
%%    WorkflowLimit - Deprecated
%%    TODO unused
%%    PerOrg.ZeroBalancePruningTimeout

    subgraph Store.FetchWorkflowArtifacts
        PerWorkflow.WASMConfigSizeLimit{{PerWorkflow.WASMConfigSizeLimit}}:::bound
        PerWorkflow.WASMBinarySizeLimit{{PerWorkflow.WASMBinarySizeLimit}}:::bound
        PerWorkflow.WASMSecretsSizeLimit{{PerWorkflow.WASMSecretsSizeLimit}}:::bound
    end

    subgraph host.NewModule
        PerWorkflow.WASMCompressedBinarySizeLimit{{PerWorkflow.WASMCompressedBinarySizeLimit}}:::bound
    end
    
    subgraph Engine.init
        WorkflowExecutionConcurrencyLimit([WorkflowExecutionConcurrencyLimit]):::resource
        PerOwner.WorkflowExecutionConcurrencyLimit([PerOwner.WorkflowExecutionConcurrencyLimit]):::resource

        WorkflowExecutionConcurrencyLimit-->PerOwner.WorkflowExecutionConcurrencyLimit
    end
    
    subgraph Engine.runTriggerSubscriptionPhase
        TriggerRegistrationStatusUpdateTimeout([TriggerRegistrationStatusUpdateTimeout]):::time
        PerWorkflow.TriggerSubscriptionTimeout>PerWorkflow.TriggerSubscriptionTimeout]:::time
        PerWorkflow.WASMMemoryLimit{{PerWorkflow.WASMMemoryLimit}}:::bound
        PerWorkflow.TriggerRegistrationsTimeout>PerWorkflow.TriggerRegistrationsTimeout]:::time
        PerWorkflow.TriggerSubscriptionLimit{{PerWorkflow.TriggerSubscriptionLimit}}:::bound
        
        PerWorkflow.TriggerSubscriptionTimeout-->PerWorkflow.WASMMemoryLimit-->PerWorkflow.TriggerSubscriptionLimit-->PerWorkflow.TriggerRegistrationsTimeout
    end

    subgraph triggers
        direction TB

        subgraph PerWorkflow.CRONTrigger
            PerWorkflow.CRONTrigger.FastestScheduleInterval>FastestScheduleInterval]:::time
        end
        subgraph PerWorkflow.HTTPTrigger
            PerWorkflow.HTTPTrigger.RateLimit[\RateLimit/]:::rate
        end
        subgraph PerWorkflow.LogTrigger
            direction LR

            PerWorkflow.LogTrigger.EventRateLimit[\EventRateLimit/]:::rate
            PerWorkflow.LogTrigger.EventSizeLimit{{EventSizeLimit}}:::bound
            PerWorkflow.LogTrigger.FilterAddressLimit{{FilterAddressLimit}}:::bound
            PerWorkflow.LogTrigger.FilterTopicsPerSlotLimit{{FilterTopicsPerSlotLimit}}:::bound
        end
    end

    subgraph Engine.handleAllTriggerEvents
        PerWorkflow.TriggerEventQueueLimit[[PerWorkflow.TriggerEventQueueLimit]]:::queue
        PerWorkflow.TriggerEventQueueTimeout>PerWorkflow.TriggerEventQueueTimeout]:::time
        PerWorkflow.ExecutionConcurrencyLimit([PerWorkflow.ExecutionConcurrencyLimit]):::resource

        PerWorkflow.TriggerEventQueueLimit-->PerWorkflow.TriggerEventQueueTimeout-->PerWorkflow.ExecutionConcurrencyLimit
    end

    subgraph Engine.startExecution
        direction TB
    
        subgraph logs
            PerWorkflow.LogLineLimit{{PerWorkflow.LogLineLimit}}:::bound
            PerWorkflow.LogEventLimit{{PerWorkflow.LogEventLimit}}:::bound
        end
        
        PerWorkflow.ExecutionTimeout>PerWorkflow.ExecutionTimeout]:::time
        PerWorkflow.ExecutionResponseLimit{{PerWorkflow.ExecutionResponseLimit}}:::bound
        PerWorkflow.ExecutionTimestampsEnabled[/PerWorkflow.ExecutionTimestampsEnabled\]:::gate
        PerWorkflow.FeatureMultiTriggerExecutionIDsActiveAt[/PerWorkflow.FeatureMultiTriggerExecutionIDsActiveAt\]:::gate
        PerWorkflow.FeatureMultiTriggerExecutionIDsActivePeriod[/PerWorkflow.FeatureMultiTriggerExecutionIDsActivePeriod\]:::gate

        PerWorkflow.ExecutionTimestampsEnabled-->PerWorkflow.FeatureMultiTriggerExecutionIDsActivePeriod-->PerWorkflow.ExecutionTimeout-->PerWorkflow.ExecutionResponseLimit
    end
        
    subgraph ExecutionHelper.GetSecrets
        PerWorkflow.SecretsConcurrencyLimit([PerWorkflow.SecretsConcurrencyLimit]):::resource
    end
    subgraph ExecutionHelper.CallCapability
        PerWorkflow.ChainAllowed[/PerWorkflow.ChainAllowed\]:::gate
        PerWorkflow.CapabilityConcurrencyLimit([PerWorkflow.CapabilityConcurrencyLimit]):::resource
        PerWorkflow.CapabilityCallTimeout>PerWorkflow.CapabilityCallTimeout]:::time
        
        PerWorkflow.ChainAllowed-->PerWorkflow.CapabilityConcurrencyLimit-->PerWorkflow.CapabilityCallTimeout
    end
    
    subgraph actions
        direction TB
        
        subgraph PerWorkflow.ChainWrite
            direction LR

            PerWorkflow.ChainWrite.TargetsLimit{{TargetsLimit}}:::bound
            PerWorkflow.ChainWrite.ReportSizeLimit{{ReportSizeLimit}}:::bound

            subgraph EVM
                PerWorkflow.ChainWrite.EVM.GasLimit{{GasLimit}}:::bound
%%                PerWorkflow.ChainWrite.EVM.TransactionGasLimit - Deprecated
            end
        end
        subgraph PerWorkflow.ChainRead
            direction LR
            PerWorkflow.ChainRead.CallLimit{{CallLimit}}:::bound
            PerWorkflow.ChainRead.LogQueryBlockLimit{{LogQueryBlockLimit}}:::bound
            PerWorkflow.ChainRead.PayloadSizeLimit{{PayloadSizeLimit}}:::bound
        end
        subgraph PerWorkflow.Consensus
            PerWorkflow.Consensus.ObservationSizeLimit{{ObservationSizeLimit}}:::bound
            PerWorkflow.Consensus.CallLimit{{CallLimit}}:::bound
        end
        subgraph PerWorkflow.HTTPAction
            direction LR

            PerWorkflow.HTTPAction.CallLimit{{CallLimit}}:::bound
            PerWorkflow.HTTPAction.CacheAgeLimit{{CacheAgeLimit}}:::bound
            PerWorkflow.HTTPAction.ConnectionTimeout{{ConnectionTimeout}}:::bound
            PerWorkflow.HTTPAction.RequestSizeLimit{{RequestSizeLimit}}:::bound
            PerWorkflow.HTTPAction.ResponseSizeLimit{{ResponseSizeLimit}}:::bound
        end
        subgraph PerWorkflow.ConfidentialHTTP
            direction LR

            PerWorkflow.ConfidentialHTTP.CallLimit{{CallLimit}}:::bound
            PerWorkflow.ConfidentialHTTP.ConnectionTimeout{{ConnectionTimeout}}:::bound
            PerWorkflow.ConfidentialHTTP.RequestSizeLimit{{RequestSizeLimit}}:::bound
            PerWorkflow.ConfidentialHTTP.ResponseSizeLimit{{ResponseSizeLimit}}:::bound
        end
        subgraph PerWorkflow.Secrets
            PerWorkflow.Secrets.CallLimit{{CallLimit}}:::bound
        end
    end
    subgraph vault
        VaultCiphertextSizeLimit{{VaultCiphertextSizeLimit}}:::bound
        VaultShareSizeLimit{{VaultShareSizeLimit}}:::bound
        VaultIdentifierKeySizeLimit{{VaultIdentifierKeySizeLimit}}:::bound
        VaultIdentifierOwnerSizeLimit{{VaultIdentifierOwnerSizeLimit}}:::bound
        VaultIdentifierNamespaceSizeLimit{{VaultIdentifierNamespaceSizeLimit}}:::bound
        VaultPluginBatchSizeLimit{{VaultPluginBatchSizeLimit}}:::bound
        VaultRequestBatchSizeLimit{{VaultRequestBatchSizeLimit}}:::bound
        VaultMaxQuerySizeLimit{{VaultMaxQuerySizeLimit}}:::bound
        VaultMaxObservationSizeLimit{{VaultMaxObservationSizeLimit}}:::bound
        VaultMaxReportsPlusPrecursorSizeLimit{{VaultMaxReportsPlusPrecursorSizeLimit}}:::bound
        VaultMaxReportSizeLimit{{VaultMaxReportSizeLimit}}:::bound
        VaultMaxReportCount{{VaultMaxReportCount}}:::bound
        VaultMaxKeyValueModifiedKeysPlusValuesSizeLimit{{VaultMaxKeyValueModifiedKeysPlusValuesSizeLimit}}:::bound
        VaultMaxKeyValueModifiedKeys{{VaultMaxKeyValueModifiedKeys}}:::bound
        VaultMaxBlobPayloadSizeLimit{{VaultMaxBlobPayloadSizeLimit}}:::bound
        VaultMaxPerOracleUnexpiredBlobCumulativePayloadSizeLimit{{VaultMaxPerOracleUnexpiredBlobCumulativePayloadSizeLimit}}:::bound
        VaultMaxPerOracleUnexpiredBlobCount{{VaultMaxPerOracleUnexpiredBlobCount}}:::bound
        PerOwner.VaultSecretsLimit{{PerOwner.VaultSecretsLimit}}:::bound
    end

    handleRequest-->Store.FetchWorkflowArtifacts-->host.NewModule-->Engine.init-->Engine.runTriggerSubscriptionPhase-->triggers-->Engine.handleAllTriggerEvents-->Engine.startExecution
    Engine.startExecution-->ExecutionHelper.CallCapability-->actions
    Engine.startExecution-->PerWorkflow.SecretsConcurrencyLimit-->vault

%%  DON nodes → gateway is a separate entry point, not connected to the trigger/execution chain above
    HandleNodeMessage

    classDef bound stroke:#f00
    classDef gate stroke:#0f0
    classDef queue stroke:#00f
    classDef rate stroke:#ff0
    classDef resource stroke:#f0f
    classDef time stroke:#0ff

Documentation

Overview

Package cresettings contains configurable settings definitions for nodes in the CRE. Environment Variables:

  • CL_CRE_SETTINGS_DEFAULT: defaults like in ./defaults.json - initializes Default
  • CL_CRE_SETTINGS: scoped settings like in ../settings/testdata/config.json - initializes DefaultGetter

Index

Constants

View Source
const (
	EnvNameSettings        = "CL_CRE_SETTINGS"
	EnvNameSettingsDefault = "CL_CRE_SETTINGS_DEFAULT"
)

Variables

View Source
var Default = Schema{
	WorkflowLimit:                          Int(200),
	WorkflowExecutionConcurrencyLimit:      Int(200),
	GatewayIncomingPayloadSizeLimit:        Size(1 * config.MByte),
	GatewayVaultManagementEnabled:          Bool(true),
	GatewayHTTPGlobalRate:                  Rate(rate.Limit(500), 500),
	GatewayHTTPPerNodeRate:                 Rate(rate.Limit(100), 100),
	TriggerRegistrationStatusUpdateTimeout: Duration(0 * time.Second),

	VaultCiphertextSizeLimit:          Size(2 * config.KByte),
	VaultIdentifierKeySizeLimit:       Size(64 * config.Byte),
	VaultIdentifierOwnerSizeLimit:     Size(64 * config.Byte),
	VaultIdentifierNamespaceSizeLimit: Size(64 * config.Byte),
	VaultPluginBatchSizeLimit:         Int(10),
	VaultRequestBatchSizeLimit:        Int(10),
	VaultShareSizeLimit:               Size(600 * config.Byte),

	VaultMaxQuerySizeLimit:       Size(102400 * config.Byte),
	VaultMaxObservationSizeLimit: Size(512 * config.KByte),

	VaultMaxReportsPlusPrecursorSizeLimit: Size(2 * config.MByte),
	VaultMaxReportSizeLimit:               Size(2 * config.MByte),
	VaultMaxReportCount:                   Int(10),

	VaultMaxKeyValueModifiedKeysPlusValuesSizeLimit: Size(1468006 * config.Byte),

	VaultMaxKeyValueModifiedKeys: Int(300),

	VaultMaxBlobPayloadSizeLimit: Size(25600 * config.Byte),

	VaultMaxPerOracleUnexpiredBlobCumulativePayloadSizeLimit: Size(31457280 * config.Byte),
	VaultMaxPerOracleUnexpiredBlobCount:                      Int(1000),

	PerOrg: Orgs{
		ZeroBalancePruningTimeout: Duration(24 * time.Hour),
	},
	PerOwner: Owners{
		WorkflowExecutionConcurrencyLimit: Int(5),

		VaultSecretsLimit: Int(100),
	},
	PerWorkflow: Workflows{
		TriggerRegistrationsTimeout:   Duration(10 * time.Second),
		TriggerEventQueueLimit:        Int(50),
		TriggerEventQueueTimeout:      Duration(10 * time.Minute),
		TriggerSubscriptionTimeout:    Duration(15 * time.Second),
		TriggerSubscriptionLimit:      Int(10),
		CapabilityConcurrencyLimit:    Int(30),
		CapabilityCallTimeout:         Duration(3 * time.Minute),
		SecretsConcurrencyLimit:       Int(5),
		ExecutionConcurrencyLimit:     Int(5),
		ExecutionTimeout:              Duration(5 * time.Minute),
		ExecutionResponseLimit:        Size(100 * config.KByte),
		ExecutionTimestampsEnabled:    Bool(false),
		WASMMemoryLimit:               Size(100 * config.MByte),
		WASMBinarySizeLimit:           Size(100 * config.MByte),
		WASMCompressedBinarySizeLimit: Size(20 * config.MByte),
		WASMConfigSizeLimit:           Size(config.MByte),
		WASMSecretsSizeLimit:          Size(config.MByte),
		LogLineLimit:                  Size(config.KByte),
		LogEventLimit:                 Int(1_000),
		ChainAllowed: PerChainSelector(Bool(false), map[string]bool{

			"12922642891491394802": true,

			"3379446385462418246": true,

			"12463857294658392847": true,
		}),

		CRONTrigger: cronTrigger{
			FastestScheduleInterval: Duration(30 * time.Second),
		},
		HTTPTrigger: httpTrigger{
			RateLimit: Rate(rate.Every(30*time.Second), 3),
		},
		LogTrigger: logTrigger{
			EventRateLimit:           Rate(rate.Every(time.Minute/10), 10),
			FilterAddressLimit:       Int(5),
			FilterTopicsPerSlotLimit: Int(10),
			EventSizeLimit:           Size(5 * config.KByte),
		},

		ChainWrite: chainWrite{
			TargetsLimit:    Int(10),
			ReportSizeLimit: Size(5 * config.KByte),
			EVM: evmChainWrite{
				TransactionGasLimit: Uint64(5_000_000),
				GasLimit: PerChainSelector(Uint64(5_000_000), map[string]uint64{

					"3379446385462418246": 10_000_000,

					"12922642891491394802": 50_000_000,
				}),
			},
		},
		ChainRead: chainRead{
			CallLimit:          Int(15),
			LogQueryBlockLimit: Uint64(100),
			PayloadSizeLimit:   Size(5 * config.KByte),
		},
		Consensus: consensus{
			ObservationSizeLimit: Size(100 * config.KByte),
			CallLimit:            Int(20),
		},
		HTTPAction: httpAction{
			CallLimit:         Int(5),
			CacheAgeLimit:     Duration(10 * time.Minute),
			ConnectionTimeout: Duration(10 * time.Second),
			RequestSizeLimit:  Size(10 * config.KByte),
			ResponseSizeLimit: Size(100 * config.KByte),
		},
		ConfidentialHTTP: confidentialHTTP{
			CallLimit:         Int(5),
			ConnectionTimeout: Duration(10 * time.Second),
			RequestSizeLimit:  Size(10 * config.KByte),
			ResponseSizeLimit: Size(100 * config.KByte),
		},
		Secrets: secrets{
			CallLimit: Int(5),
		},

		FeatureMultiTriggerExecutionIDsActiveAt: Time(time.Date(2100, 1, 1, 0, 0, 0, 0, time.UTC)),
		FeatureMultiTriggerExecutionIDsActivePeriod: TimeRange(
			time.Date(2100, 1, 1, 0, 0, 0, 0, time.UTC),
			time.Date(2101, 1, 1, 0, 0, 0, 0, time.UTC)),
	},
}
View Source
var DefaultGetter Getter

DefaultGetter is a default settings getter populated from the env var CL_CRE_SETTINGS if set, otherwise it is nil.

Functions

This section is empty.

Types

type Orgs added in v0.9.1

type Orgs struct {
	ZeroBalancePruningTimeout Setting[time.Duration]
}

type Owners added in v0.9.1

type Owners struct {
	WorkflowExecutionConcurrencyLimit Setting[int] `unit:"{workflow}"`
	VaultSecretsLimit                 Setting[int] `unit:"{secret}"`
}

type Schema added in v0.9.1

type Schema struct {
	WorkflowLimit                          Setting[int] `unit:"{workflow}"` // Deprecated
	WorkflowExecutionConcurrencyLimit      Setting[int] `unit:"{workflow}"`
	GatewayIncomingPayloadSizeLimit        Setting[config.Size]
	GatewayVaultManagementEnabled          Setting[bool]
	GatewayHTTPGlobalRate                  Setting[config.Rate]
	GatewayHTTPPerNodeRate                 Setting[config.Rate]
	TriggerRegistrationStatusUpdateTimeout Setting[time.Duration]

	VaultCiphertextSizeLimit          Setting[config.Size]
	VaultShareSizeLimit               Setting[config.Size]
	VaultIdentifierKeySizeLimit       Setting[config.Size]
	VaultIdentifierOwnerSizeLimit     Setting[config.Size]
	VaultIdentifierNamespaceSizeLimit Setting[config.Size]
	VaultPluginBatchSizeLimit         Setting[int] `unit:"{request}"`
	VaultRequestBatchSizeLimit        Setting[int] `unit:"{request}"`

	VaultMaxQuerySizeLimit                                   Setting[config.Size]
	VaultMaxObservationSizeLimit                             Setting[config.Size]
	VaultMaxReportsPlusPrecursorSizeLimit                    Setting[config.Size]
	VaultMaxReportSizeLimit                                  Setting[config.Size]
	VaultMaxReportCount                                      Setting[int]
	VaultMaxKeyValueModifiedKeysPlusValuesSizeLimit          Setting[config.Size]
	VaultMaxKeyValueModifiedKeys                             Setting[int]
	VaultMaxBlobPayloadSizeLimit                             Setting[config.Size]
	VaultMaxPerOracleUnexpiredBlobCumulativePayloadSizeLimit Setting[config.Size]
	VaultMaxPerOracleUnexpiredBlobCount                      Setting[int]

	PerOrg      Orgs      `scope:"org"`
	PerOwner    Owners    `scope:"owner"`
	PerWorkflow Workflows `scope:"workflow"`
}
var Config Schema

Deprecated: use Default

type Workflows added in v0.9.1

type Workflows struct {
	TriggerRegistrationsTimeout Setting[time.Duration]
	TriggerSubscriptionTimeout  Setting[time.Duration]
	TriggerSubscriptionLimit    Setting[int] `unit:"{subscription}"`
	TriggerEventQueueLimit      Setting[int] `unit:"{trigger}"`
	TriggerEventQueueTimeout    Setting[time.Duration]

	CapabilityConcurrencyLimit Setting[int] `unit:"{capability}"`
	CapabilityCallTimeout      Setting[time.Duration]

	SecretsConcurrencyLimit Setting[int] `unit:"{secret}"`

	ExecutionConcurrencyLimit  Setting[int] `unit:"{workflow}"`
	ExecutionTimeout           Setting[time.Duration]
	ExecutionResponseLimit     Setting[config.Size]
	ExecutionTimestampsEnabled Setting[bool]

	WASMMemoryLimit               Setting[config.Size]
	WASMBinarySizeLimit           Setting[config.Size]
	WASMCompressedBinarySizeLimit Setting[config.Size]
	WASMConfigSizeLimit           Setting[config.Size]
	WASMSecretsSizeLimit          Setting[config.Size]

	LogLineLimit  Setting[config.Size]
	LogEventLimit Setting[int] `unit:"{log}"`

	ChainAllowed SettingMap[bool]

	CRONTrigger cronTrigger
	HTTPTrigger httpTrigger
	LogTrigger  logTrigger

	ChainWrite       chainWrite
	ChainRead        chainRead
	Consensus        consensus
	HTTPAction       httpAction
	ConfidentialHTTP confidentialHTTP
	Secrets          secrets

	FeatureMultiTriggerExecutionIDsActiveAt     Setting[config.Timestamp] // Deprecated
	FeatureMultiTriggerExecutionIDsActivePeriod Setting[Range[config.Timestamp]]
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL