Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions apps/backend/src/modules/config/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,9 @@ function applyDerivedSettings(settings: SettingsSchema): SettingsSchema {
// If prune > 0 -> txindex must be off
if (newSettings['prune'] > 0) newSettings['txindex'] = false

// If datacarrier is off -> datacarriersize must be 0
if (!newSettings['datacarrier']) newSettings['datacarriersize'] = 0

// If proxy is on, but onlynet doesn't include clearnet and tor -> disable proxy
if (
newSettings['proxy'] &&
Expand Down
10 changes: 8 additions & 2 deletions libs/settings/settings.meta.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ interface NumberOption extends BaseOption {
step?: number
default: number
unit?: string
disabledWhen?: Record<string, (v: unknown) => boolean>
disabledMessage?: string
}

interface BooleanOption extends BaseOption {
Expand Down Expand Up @@ -304,9 +306,13 @@ export const settingsMetadata = {
kind: 'number',
label: 'Max Allowed Size of Arbitrary Data in Transactions',
bitcoinLabel: 'datacarriersize',
description: 'Set the maximum size of the data in OP_RETURN outputs (in bytes) that your node will relay.',
subDescription: 'Note: datacarrier must be enabled for this setting to take effect.',
description: 'Set the maximum size of the data in OP_RETURN outputs (in bytes) that your node will relay. Only values 0, 42, or 83 bytes are allowed.',
subDescription: '⚠ This setting is automatically set to 0 when datacarrier is disabled.',
default: 83,
disabledWhen: {
datacarrier: (v: unknown) => v === false,
},
disabledMessage: 'automatically set to 0 when datacarrier is disabled',
},

permitbaremultisig: {
Expand Down
10 changes: 10 additions & 0 deletions libs/settings/settings.schema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -56,5 +56,15 @@ for (const key of Object.keys(settingsMetadata) as Array<keyof typeof settingsMe
}
}

// Custom validation: restrict datacarriersize to only 0, 42, or 83 bytes
if (schemaMap.datacarriersize) {
schemaMap.datacarriersize = (schemaMap.datacarriersize as z.ZodNumber).refine(
(val: number) => val === 0 || val === 42 || val === 83,
{
message: 'datacarriersize must be 0, 42, or 83 bytes',
}
)
}

export const settingsSchema = z.object(schemaMap as Record<string, z.ZodTypeAny>)
export type SettingsSchema = z.infer<typeof settingsSchema>