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
The config file is a JSON file representing the root `IsmNode`. The `"type"` field selects the ISM variant; all field names are camelCase.
66
+
The config file is a JSON file representing the root `IsmNode`. The `"type"` field selects the ISM variant. Variant names are camelCase; field names within variants are snake_case (matching the Rust struct fields exactly).
67
67
68
68
#### Leaf nodes
69
69
@@ -75,17 +75,12 @@ The config file is a JSON file representing the root `IsmNode`. The `"type"` fie
75
75
}
76
76
```
77
77
78
-
**`multisigMessageId`** — ECDSA threshold multisig over `CheckpointWithMessageId`, one validator set per origin domain.
78
+
**`multisigMessageId`** — ECDSA threshold multisig over `CheckpointWithMessageId`. Flat validators/threshold for a single validator set; use a `routing` or `fallbackRouting` parent to select different sets per origin domain.
79
79
```json
80
80
{
81
81
"type": "multisigMessageId",
82
-
"domainConfigs": [
83
-
{
84
-
"origin": 1000,
85
-
"validators": ["0xabc123...", "0xdef456..."],
86
-
"threshold": 2
87
-
}
88
-
]
82
+
"validators": ["0xabc123...", "0xdef456..."],
83
+
"threshold": 2
89
84
}
90
85
```
91
86
@@ -99,70 +94,107 @@ The config file is a JSON file representing the root `IsmNode`. The `"type"` fie
99
94
{ "type": "pausable", "paused": false }
100
95
```
101
96
97
+
**`rateLimited`** — token-bucket rate limiter. Rejects messages once the bucket is empty; the bucket refills over time up to `max_capacity`. `recipient` is an optional H256 address used to restrict which message recipient this node applies to.
**`routing`** — routes to a sub-ISM based on the message's origin domain. Falls back to `defaultIsm` if the origin has no explicit route.
123
+
**`routing`** — routes to a per-domain sub-ISM based on the message's origin domain. Returns an error if no ISM is configured for the incoming origin. Use `fallbackRouting` if you need a catch-all.
124
+
125
+
The `domains` object maps decimal domain ID strings to ISM configs. During `deploy`/`update` each entry is submitted as a separate `SetDomainIsm` transaction.
**`amountRouting`** — routes based on the token amount in `body[32..64]` (big-endian u256, TokenMessage format). Routes to `upper` if `amount >= threshold`, else `lower`.
140
+
**`fallbackRouting`** — like `routing`, but falls back to a statically-configured ISM program (`fallback_ism`) when the message's origin domain has no explicit override. The fallback ISM must be another deployed composite ISM program.
141
+
```json
142
+
{
143
+
"type": "fallbackRouting",
144
+
"fallback_ism": "<base58 Pubkey of fallback composite ISM program>",
> `domains` is optional (omitted when empty). When no per-domain ISM matches, the fallback ISM's `VerifyMetadataSpec` / `VerifyAccountMetas` / `Verify` are called via CPI.
152
+
153
+
**`amountRouting`** — routes based on the token transfer amount in `body[32..64]` (big-endian u256, TokenMessage format). Routes to `upper` if `amount >= threshold`, else `lower`. `threshold` is a decimal string representing the u256.
0 commit comments