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
├── onlyBoundToken modifier (caller must be bound)
132
137
└── for each rule in _rules:
133
138
rule.transferred(spender, from, to, value) // reverts if disallowed
@@ -136,10 +141,20 @@ Token operation → RuleEngine.transferred(spender, from, to, value) ← used
136
141
├── onlyBoundToken modifier
137
142
└── for each rule in _rules:
138
143
rule.transferred(from, to, value)
144
+
145
+
RuleEngine.created(to, value) ← ERC-3643 mint entry point
146
+
├── onlyBoundToken modifier
147
+
└── calls _transferred(address(0), to, value)
148
+
149
+
RuleEngine.destroyed(from, value) ← ERC-3643 burn entry point
150
+
├── onlyBoundToken modifier
151
+
└── calls _transferred(from, address(0), value)
139
152
```
140
153
141
154
Since CMTAT v3.3.0, mint (`from == address(0)`) and burn (`to == address(0)`) also go through the 4-argument overload with the operator as `spender`. Rules that check `spender` must skip or adapt that check for mint/burn to avoid blocking those operations unintentionally.
142
155
156
+
`created` and `destroyed` use the 3-argument `_transferred` path (no spender), consistent with the ERC-3643 spec which does not carry a spender for mint/burn.
157
+
143
158
View path: `detectTransferRestriction()` iterates rules, returns first non-zero code.
├── onlyBoundToken modifier (caller must be bound)
132
137
└── for each rule in _rules:
133
138
rule.transferred(spender, from, to, value) // reverts if disallowed
@@ -136,10 +141,20 @@ Token operation → RuleEngine.transferred(spender, from, to, value) ← used
136
141
├── onlyBoundToken modifier
137
142
└── for each rule in _rules:
138
143
rule.transferred(from, to, value)
144
+
145
+
RuleEngine.created(to, value) ← ERC-3643 mint entry point
146
+
├── onlyBoundToken modifier
147
+
└── calls _transferred(address(0), to, value)
148
+
149
+
RuleEngine.destroyed(from, value) ← ERC-3643 burn entry point
150
+
├── onlyBoundToken modifier
151
+
└── calls _transferred(from, address(0), value)
139
152
```
140
153
141
154
Since CMTAT v3.3.0, mint (`from == address(0)`) and burn (`to == address(0)`) also go through the 4-argument overload with the operator as `spender`. Rules that check `spender` must skip or adapt that check for mint/burn to avoid blocking those operations unintentionally.
142
155
156
+
`created` and `destroyed` use the 3-argument `_transferred` path (no spender), consistent with the ERC-3643 spec which does not carry a spender for mint/burn.
157
+
143
158
View path: `detectTransferRestriction()` iterates rules, returns first non-zero code.
0 commit comments