You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/guides/governance/managing.md
+8Lines changed: 8 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -121,6 +121,12 @@ type NervousSystemParameters = record {
121
121
};
122
122
```
123
123
124
+
:::caution[Changing the SNS token transfer fee]
125
+
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.
126
+
127
+
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.
128
+
:::
129
+
124
130
For a description of each parameter and its effect, see the [SNS settings reference](../../references/sns-settings.md).
125
131
126
132
### ManageSnsMetadata
@@ -155,6 +161,8 @@ quill send message.json
155
161
156
162
Updates ledger parameters: transfer fee, token name, token symbol, or token logo. Fields set to `null` remain unchanged.
157
163
164
+
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.
Copy file name to clipboardExpand all lines: docs/languages/motoko/reference/changelog.md
+44Lines changed: 44 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -8,6 +8,50 @@ sidebar:
8
8
9
9
# Motoko compiler changelog
10
10
11
+
## 1.11.0 (2026-06-29)
12
+
13
+
* motoko (`moc`)
14
+
15
+
* feat: `moc` now emits the standardized `target_features` Wasm custom section, so `binaryen`-based tools (`wasm-opt`, `ic-wasm optimize`, `dfx`'s `optimize`) accept and optimize Motoko output without per-tool feature flags. Previously these tools defaulted to MVP and rejected the `multivalue`/`bulk-memory`/`memory64` features moc relies on (#6214).
16
+
17
+
* feat: a `Float32` literal written with more precision than the type can hold now warns (M0266), suggesting the shortest equivalent: e.g. `0.123456789 : Float32` → `0.12345679`. The surplus digits were already silently discarded by rounding; the warning fires only on genuine excess (minimal literals like `0.1`/`3.14` stay quiet) (#6198).
18
+
19
+
* feat: allow requiring `system` capability for `mixin` definitions (#6211).
20
+
This makes the capability available in initializers and the `mixin` body.
21
+
`<system>` then needs to appear on the corresponding `include`.
22
+
23
+
* feat: allow effectful code in transient `let`s and in `actor`/`mixin` bodies with `--enhanced-migration` (#6191).
24
+
25
+
* bugfix: `--enhanced-migration` now also applies to `mixin`s and considers their stable fields when checking migrations (#6183).
26
+
27
+
## 1.10.1 (2026-06-24)
28
+
29
+
* motoko (`moc`)
30
+
31
+
* bugfix: M0223 ("redundant type instantiation") and M0237 ("implicit argument can be omitted") no longer emit suggestions that are individually valid but break compilation when applied together. In nested calls where an inner instantiation or implicit is only inferable thanks to an outer one (e.g. `List.fromArray(Array.tabulate(...))`), only a jointly-applicable subset is now suggested, so `mops check --fix` no longer rewrites the code into an M0098 type error. The check is conservative: a few genuinely-redundant cases may go unreported in exchange for soundness (#6209).
32
+
33
+
## 1.10.0 (2026-06-19)
34
+
35
+
* motoko (`moc`)
36
+
37
+
* feat: M0218 ("redundant `stable` keyword") now ships a machine-applicable edit, so `mops check --fix` removes the explicit `stable` keyword on fields of a `persistent actor` (#6175).
38
+
39
+
* feat: Permitting destructuring patterns against actor types: `let { foo } = a`, `func g({foo} : actor T) {}`, etc. (#6149).
40
+
41
+
* feat: `/// @deprecated M0235 <message>`: the caffeine deprecation warning (M0235) can now carry a free-text message, rendered as a `note:` sub-diagnostic at every use site. M0154 free-text deprecation messages now render the same way (#6153).
42
+
43
+
* perf: Multi-value Wasm codegen is now _on by default_, `--no-experimental-multi-value` flag disables (if not desired) (#6165).
44
+
45
+
* bugfix: M0237 (implicit argument can be omitted) only fires now when the suggested removal preserves the same type instantiation. Previously the edit could be rejected (M0098) (#6166).
46
+
47
+
* bugfix: M0236 dot-notation suggestion no longer fires for literal receivers: the `lit.f()` rewrite could misparse (`-1.1.isNaN()` → `-(1.1.isNaN())`), mis-lex (`0xff.abs` as a hex float), or fail to type-check when it lost a literal coercion (`Blob.isEmpty("\00")` → `"\00".isEmpty()`) (#6173).
48
+
49
+
* bugfix: M0236 dot-notation suggestion no longer fires when the receiver cannot be inferred or would infer to a different type causing the call to resolve to a different function (#6177).
50
+
51
+
* bugfix: Implicit argument derivation now resolves type variables that occur only in a covariant result position (e.g. JSON-style decoders `Text -> ?T`). Previously such a variable was solved to `None` (bottom), so the implicit had to be passed explicitly (#6186).
52
+
53
+
* bugfix: Diagnostic columns now count Unicode codepoints (matching editor displays and `rustc`), and JSON diagnostics gain `byte_start`/`byte_end` for encoding-independent edit anchors. Previously `mops check --fix` over-deleted on multi-byte lines (e.g. `Char.toNat32('京')` trimmed the trailing `)`) (#6168).
Copy file name to clipboardExpand all lines: docs/references/ic-interface-spec/abstract-behavior.md
+4-2Lines changed: 4 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -348,7 +348,8 @@ SignedDelegation = {
348
348
delegation : {
349
349
pubkey : PublicKey;
350
350
targets : [CanisterId] | Unrestricted;
351
-
expiration : Timestamp
351
+
expiration : Timestamp;
352
+
permissions : Queries | All | Unrestricted
352
353
};
353
354
signature : Signature
354
355
}
@@ -692,14 +693,15 @@ that represents Candid encoding; this is implicitly taking the method types, as
692
693
693
694
#### Envelope Authentication
694
695
695
-
The following predicate describes when an envelope `E` correctly signs the enclosed request with a key belonging to a user `U`, at time `T`: It returns which canister ids this envelope may be used at (as a set of principals).
696
+
The following predicate describes when an envelope `E` correctly signs the enclosed request with a key belonging to a user `U`, at time `T`: It returns which canister ids this envelope may be used at (as a set of principals). The predicate fails for update calls (requests of type `Request`) if any delegation in the chain restricts the sender to query calls and `read_state` requests (`permissions` field set to `Queries`, encoded as the text `"queries"`).
Copy file name to clipboardExpand all lines: docs/references/ic-interface-spec/https-interface.md
+9-1Lines changed: 9 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -545,6 +545,14 @@ Signing transactions can be delegated from one key to another one. If delegation
545
545
546
546
-`targets` (`array` of `CanisterId`, optional): If this field is set, the delegation only applies for requests sent to the canisters in the list. The list must contain no more than 1000 elements; otherwise, the request will not be accepted by the IC.
547
547
548
+
-`permissions` (`text`, optional): If this field is set, the delegation only applies for the kinds of requests permitted by its value. The following values are supported:
549
+
550
+
-`"queries"`: the delegation only applies for query calls and `read_state` requests. Requests to `/call` endpoints (i.e., update calls, including calls to query methods submitted as update calls) are not accepted by the IC if any delegation in the chain carries this value: a subsequent delegation cannot lift the restriction imposed by a previous one.
551
+
552
+
-`"all"`: the delegation applies for all kinds of requests; this is the same as omitting the field.
553
+
554
+
If this field is set to any other value, then the delegation is invalid and requests of any kind whose chain of delegations contains the delegation will not be accepted by the IC.
555
+
548
556
-`signature` (`blob`): Signature on the 32-byte [representation-independent hash](#hash-of-map) of the map contained in the `delegation` field as described in [Signatures](./index.md#signatures), using the 27 bytes `\x1Aic-request-auth-delegation` as the domain separator.
549
557
550
558
For the first delegation in the array, this signature is created with the key corresponding to the public key from the `sender_pubkey` field, all subsequent delegations are signed with the key corresponding to the public key contained in the preceding delegation.
@@ -571,7 +579,7 @@ Field values are hashed as follows:
571
579
572
580
- Binary blobs (`canister_id`, `arg`, `nonce`, `module`) are hashed as-is.
573
581
574
-
- Strings (`request_type`, `method_name`) are hashed by hashing their binary encoding in UTF-8, without a terminal `\x00`.
582
+
- Strings (`request_type`, `method_name`, `permissions`) are hashed by hashing their binary encoding in UTF-8, without a terminal `\x00`.
575
583
576
584
- Natural numbers (`compute_allocation`, `memory_allocation`, `ingress_expiry`) are hashed by hashing their binary encoding using the shortest form [Unsigned LEB128](https://en.wikipedia.org/wiki/LEB128#Unsigned_LEB128) encoding. For example, `0` should be encoded as a single zero byte `[0x00]` and `624485` should be encoded as byte sequence `[0xE5, 0x8E, 0x26]`.
Copy file name to clipboardExpand all lines: docs/references/ic-interface-spec/management-canister.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -640,7 +640,7 @@ In the replicated mode, the responses for all identical requests must match, too
640
640
641
641
For this reason, the calling canister can supply a transformation function, which the IC uses to let the canister sanitize the responses from such unique values. The transformation function is executed separately on the corresponding response received for a request (both in replicated and non-replicated modes). Only the transformed response will be available to the calling canister.
642
642
643
-
Currently, the `GET`, `HEAD`, and `POST` methods are supported for HTTP requests. Additionally, the `PUT`and `DELETE` methods are supported in non-replicated mode only. `PUT`and `DELETE` are restricted to non-replicated mode to avoid confusing race conditions that may occur with replicated execution.
643
+
Currently, the `GET`, `HEAD`, and `POST` methods are supported for HTTP requests. Additionally, the `PUT`, `DELETE`, and `PATCH` methods are supported in non-replicated mode only. `PUT`, `DELETE`, and `PATCH` are restricted to non-replicated mode to avoid confusing race conditions that may occur with replicated execution.
644
644
645
645
It is important to note the following for the usage of the `POST` method:
646
646
@@ -664,7 +664,7 @@ The following parameters should be supplied for the call:
664
664
665
665
-`max_response_bytes` - optional, specifies the maximal size of the response in bytes. If provided, the value must not exceed `2MB` (`2,000,000B`). The call will be charged based on this parameter. If not provided, the maximum of `2MB` will be used.
666
666
667
-
-`method` - currently, `GET`, `HEAD`, and `POST` are supported. Additionally, `PUT`and `DELETE` are supported in non-replicated mode only.
667
+
-`method` - currently, `GET`, `HEAD`, and `POST` are supported. Additionally, `PUT`, `DELETE`, and `PATCH` are supported in non-replicated mode only.
668
668
669
669
-`headers` - list of HTTP request headers and their corresponding values
Copy file name to clipboardExpand all lines: docs/references/sns-settings.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -43,7 +43,7 @@ For background, see [SNS framework](../concepts/sns-framework.md).
43
43
44
44
| Parameter | Type | Description |
45
45
|---|---|---|
46
-
|`transaction_fee_e8s`|`nat64`|Per-transfer fee on the SNS ledger, in e8s. Does not apply to minting or burning. |
46
+
|`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)). |
0 commit comments