From 2bca994bc8836d6b410fef3d1ec2821be42cad43 Mon Sep 17 00:00:00 2001 From: Marco Walz Date: Mon, 29 Jun 2026 18:04:32 +0200 Subject: [PATCH 1/2] docs: clarify how to change the SNS token transfer fee Submitting ManageNervousSystemParameters with transaction_fee_e8s only updates Governance's stored parameter; it does not change the actual ledger transfer fee. The native path is a ManageLedgerParameters proposal, which updates the ledger and syncs Governance automatically. - Add a caution under ManageNervousSystemParameters - Note in ManageLedgerParameters that transfer_fee is the field to use - Fix the transaction_fee_e8s reference row so it is not misleading --- docs/guides/governance/managing.md | 8 ++++++++ docs/references/sns-settings.md | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/docs/guides/governance/managing.md b/docs/guides/governance/managing.md index e79643df..8ed4d13c 100644 --- a/docs/guides/governance/managing.md +++ b/docs/guides/governance/managing.md @@ -121,6 +121,12 @@ type NervousSystemParameters = record { }; ``` +:::caution[Changing the SNS token transfer fee] +Do not use `ManageNervousSystemParameters.transaction_fee_e8s` to change the SNS token transfer fee. This field updates only Governance's stored parameter; it does not update the SNS ledger canister, so the actual fee charged on transfers is unchanged. + +To change the actual ledger transfer fee, submit a [`ManageLedgerParameters`](#manageledgerparameters) proposal with `transfer_fee` set. On successful execution, the ledger fee is updated and Governance's `transaction_fee_e8s` is synced to the same value automatically. +::: + For a description of each parameter and its effect, see the [SNS settings reference](../../references/sns-settings.md). ### ManageSnsMetadata @@ -155,6 +161,8 @@ quill send message.json Updates ledger parameters: transfer fee, token name, token symbol, or token logo. Fields set to `null` remain unchanged. +Use `transfer_fee` here to change the SNS token transfer fee; this is the only proposal that updates the actual fee charged by the ledger. On successful execution, it also syncs Governance's `NervousSystemParameters.transaction_fee_e8s` to the same value, so a separate `ManageNervousSystemParameters` proposal is not needed. + ```bash quill sns \ make-proposal $PROPOSAL_NEURON_ID \ diff --git a/docs/references/sns-settings.md b/docs/references/sns-settings.md index 66e83cda..a7d0778a 100644 --- a/docs/references/sns-settings.md +++ b/docs/references/sns-settings.md @@ -43,7 +43,7 @@ For background, see [SNS framework](../concepts/sns-framework.md). | Parameter | Type | Description | |---|---|---| -| `transaction_fee_e8s` | `nat64` | Per-transfer fee on the SNS ledger, in e8s. Does not apply to minting or burning. | +| `transaction_fee_e8s` | `nat64` | Governance's stored copy of the per-transfer ledger fee, in e8s. Does not apply to minting or burning. Do not set this field via `ManageNervousSystemParameters` to change the fee: it updates only Governance's copy, not the ledger. Change the fee with a `ManageLedgerParameters` proposal instead, which updates the ledger and syncs this field automatically (see [Managing an SNS](../guides/governance/managing.md#manageledgerparameters)). | ## Voting reward settings From f7977eb172e1bc5fa79ee0543931a895ca7cf793 Mon Sep 17 00:00:00 2001 From: Bjoern Assmann Date: Mon, 29 Jun 2026 18:26:47 +0200 Subject: [PATCH 2/2] docs: strengthen caution that desyncing transaction_fee_e8s breaks neuron operations --- docs/guides/governance/managing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/guides/governance/managing.md b/docs/guides/governance/managing.md index 8ed4d13c..4e2fe904 100644 --- a/docs/guides/governance/managing.md +++ b/docs/guides/governance/managing.md @@ -122,7 +122,7 @@ type NervousSystemParameters = record { ``` :::caution[Changing the SNS token transfer fee] -Do not use `ManageNervousSystemParameters.transaction_fee_e8s` to change the SNS token transfer fee. This field updates only Governance's stored parameter; it does not update the SNS ledger canister, so the actual fee charged on transfers is unchanged. +Do not use `ManageNervousSystemParameters.transaction_fee_e8s` to change the SNS token transfer fee. This field updates only Governance's stored parameter, not the SNS ledger canister. Worse, because Governance uses this stored value as the fee for its own neuron-operation transfers (disbursing, splitting, staking maturity, and so on), setting it to a value that differs from the ledger's actual fee will cause those transfers to be rejected by the ledger (`BadFee`), breaking neuron operations. To change the actual ledger transfer fee, submit a [`ManageLedgerParameters`](#manageledgerparameters) proposal with `transfer_fee` set. On successful execution, the ledger fee is updated and Governance's `transaction_fee_e8s` is synced to the same value automatically. :::