@@ -255,3 +255,45 @@ struct RequestOrder
255255 bytes sign;
256256}
257257```
258+
259+ ## Additional protocol concepts
260+
261+ ### Tag
262+
263+ The tag specifies the need or the availability of features that go beyond the
264+ specifications of the category. The tag is a requirement when it is part of an
265+ app order, a dataset order or a requester order. On the other hand, the tag in
266+ the workerpool order expresses the availability of the corresponding features.
267+
268+ Tags are 32 bytes (256 bits) long array where each bit corresponds to a feature.
269+
270+ ** Pre-defined tags:**
271+
272+ | ** Value** | ** Description** |
273+ | ------------------------------------------------------------------------------- | ---------------------- |
274+ | ` 0x0000000000000000000000000000000000000000000000000000000000000001 ` (` 0b0001 ` ) | TEE |
275+ | ` 0x0000000000000000000000000000000000000000000000000000000000000003 ` (` 0b0011 ` ) | TEE Scone |
276+ | ` 0x0000000000000000000000000000000000000000000000000000000000000005 ` (` 0b0101 ` ) | TEE Gramine |
277+ | ` 0x0000000000000000000000000000000000000000000000000000000000000009 ` (` 0b1001 ` ) | TEE TDX |
278+
279+ For orders matching, the worker pool order must enable all bits that enable in
280+ any of the app order, dataset order and requester order. Meaning that if the app
281+ order tag is ` 0x12 = 0x10 | 0x02 ` , the dataset order is ` 0x81 = 0x80 | 0x01 ` and
282+ the requester order is ` 0x03 = 0x02 | 0x01 ` , then the worker pool order must, at
283+ least, have a tag ` 0x93 = 0x80 | 0x10 | 0x02 | 0x01 ` .
284+
285+ ### Reward kitty
286+
287+ When a task fails, the requester gets a refund and the scheduler loses its
288+ stake. In order to remove an attack vector, the requester does not get any of
289+ the seized stake. If this was a feature, anyone could build a flawed application
290+ that would not reach consensus to drain money from the scheduler. This would
291+ force the scheduler to whitelist all applications thus reducing the usability of
292+ the platform. Seized stake from the scheduler goes into a specific account
293+ called the _ reward kitty_ . No one controls this account, nor can withdraw from
294+ it. However, the tokens are not burned. Whenever a task finalizes, the scheduler
295+ that organized the execution of this task receives a reward by the requester and
296+ also gets a small part of the reward kitty.
297+
298+ As described in the protocol parameters section, this reward is
299+ ` reward = kitty.percentage(KITTY_RATIO).max(KITTY_MIN).min(kitty) ` .
0 commit comments