Conditions added (doc)

This commit is contained in:
NicolasCantu 2024-02-19 12:29:56 +01:00
parent 4bde880e80
commit 8c32624a2d
5 changed files with 225 additions and 200 deletions

View File

@ -146,7 +146,7 @@ Cette clé est d'abord décomposée, avant d'être partiellement distribuée. Vo
Encryption speudo code :
```
part1_spend_recover_enc=aes(SHA256(MDP, random_seed1), Part1)
part1_spend_recover_enc=aes(sha256(MDP+random_seed1), part1)
image1.addExif(part1_spend_recover_enc, random_seed1, random_seed2)
```
@ -159,10 +159,17 @@ image1.addExif(part1_spend_recover_enc, random_seed1, random_seed2)
Encryption speudo code :
```
part2_spend_recover_enc_shars=sss(aes(SHA256(MDP, random_seed2), Part2), nMembers, 80%)
part2_spend_recover_enc_shars=sss(aes(SHA256(MDP+random_seed2), part2), nMembers, 0.8)
```
2. Une `pre-id` qui identifie l'utilisateur est générée par le hash (SHA 256) de la `Part1` et du mot de passe de l'utilisateur.
Hash speudo code :
```
pre_id=sha256(part1_spend_recover_enc, MDP)
```
2. Une `pre-id Part1EncHash` qui identifie l'utilisateur est générée par le hash (SHA 256) de la `Part1` et du mot de passe de l'utilisateur.
3. Création d'un `RequestPrdKeyBackup` par membre (1 shard par membre), par `RequestPrd` :
@ -200,7 +207,7 @@ Dans l'ordre on réalise donc les opérations suivantes pour chaque membres :
5. Atttente de la réception des `RequestPrdResponse` en réponse aux `RequestPrdKeyBackup` (confirmations).
6. Recomposition de la clé pour confirmation depuis les shards reçus dans les `RequestPrdResponse`.
6.1. Déchiffrement par le mot de passe de `Part1Enc` depuis le cache.
6.2. Déchiffrement par secret partagé de chaque shard reçu dans `id_shard_info_enc_by_shared_secret` des `RequestPrdResponse` de chaque member du role `Member`du `ItemProcess`.
6.2. Déchiffrement par secret partagé de chaque shard reçu dans `id_shard_info_enc_by_shared_secret` des `RequestPrdResponse` de chaque member du `Role` `Member`du `ItemProcess`.
6.3. Recomposition de `Part2Enc` et déchiffrement par le mot de passe
6.4. Concaténation de `Part1` et `Part2`
@ -213,7 +220,7 @@ Pour être `onboard` dans un process, c'est-à-dire avoir un rôle, il faut :
###### Mise à jour de la liste des membres
Pour mettre à jour la liste des membres il faut envoyer un `RequestPrdUpdate` avec une nouvelle version du `RequestPcd` de la liste des membres, contenant l'objet `ItemMember` complet aux membres du role `member`. Ce `RequestPrd` devra recevoir des membres du rôle `Member` du `ItemProcess` les `RequestPrdResponse` correspondant aux critères de validation du `ItemProcess` .
Pour mettre à jour la liste des membres il faut envoyer un `RequestPrdUpdate` avec une nouvelle version du `RequestPcd` de la liste des membres, contenant l'objet `ItemMember` complet aux membres du `Role` `member`. Ce `RequestPrd` devra recevoir des membres du rôle `Member` du `ItemProcess` les `RequestPrdResponse` correspondant aux critères de validation du `ItemProcess` .
C'est à ce moment-là que l'on transmet toutes les clés privées dans l'objet `ItemMember`, en tant que `metadadata` privée (chiffrée par la clé de dépense du signet) dans un `RequestPcd` (et les `RequestPrdUpdate` correspondant).
@ -234,7 +241,7 @@ L'`ItemMember` est décrit dans la spécification [Specs-Datamodel.md](Specs-Dat
###### Mise à jour de la liste des process
Pour mettre à jour la liste des `ItemProcess` il faut envoyer un `RequestPrdUpdate` avec une nouvelle version du `RequestPcd` de la liste des process, contenant l'objet `ItemProcess` complet aux membres du role `ItemProcess` . Ce `RequestPrd` devra recevoir des membres du rôle `ItemProcess` du `ItemProcess` les `RequestPrdResponse` correspondant aux critères de validation du `ItemProcess` .
Pour mettre à jour la liste des `ItemProcess` il faut envoyer un `RequestPrdUpdate` avec une nouvelle version du `RequestPcd` de la liste des process, contenant l'objet `ItemProcess` complet aux membres du `Role` `ItemProcess` . Ce `RequestPrd` devra recevoir des membres du rôle `ItemProcess` du `ItemProcess` les `RequestPrdResponse` correspondant aux critères de validation du `ItemProcess` .
L'`ItemProcess` est décrit dans la spécification [Specs-Datamodel.md](Specs-Datamodel.md).
@ -280,7 +287,7 @@ Puis depuis la liste des membres du process, pour chacun des membres :
5. Attente de la validation (`RequestPrdResponse`) du `RequestPrdUpdate`.
6. Recomposition de la clé pour confirmation depuis les shards reçus dans les `RequestPrdResponse`.
6.1. Déchiffrement par le mot de passe de `Part1Enc` depuis le cache.
6.2. Déchiffrement par secret partagé de chaque shard reçu dans `id_shard_info_enc_by_shared_secret` des `RequestPrdResponse` de chaque member du role `Member`du `ItemProcess`.
6.2. Déchiffrement par secret partagé de chaque shard reçu dans `id_shard_info_enc_by_shared_secret` des `RequestPrdResponse` de chaque member du `Role` `Member`du `ItemProcess`.
6.3. Recomposition de `Part2Enc` et déchiffrement par le mot de passe
6.4. Concaténation de `Part1` et `Part2`

View File

@ -99,14 +99,14 @@ La création d'un `RequestPcd` suit plusieurs étapes :
5. Traitements communs aux `RequestPcd` et RequestPrd
| `request_type` | Notification user | `transaction SP` + `RequestPrdMessage` | `RequestPcd` to send | `request_type` send to | `RequestPcd` reply waiting | `RequestPrdResponse` reply waiting | `RequestPrdConfirm` reply waiting |
|-----------------------|-----------------------------------------------------------------------------------|----------------------------------------|----------------------|---------------------------------------------------------------|----------------------------|------------------------------------|-----------------------------------|
| `RequestPrdList` | No | Yes | No | all the members of the `item_name` role into to `ItemProcess` | Yes | Yes | Yes |
| `RequestPrdUpdate` | waiting `sig_value` | Yes | Yes | all the members of all role into to `ItemProcess` | No | Yes | Yes |
|-----------------------|-----------------------------------------------------------------------------------|----------------------------------------|----------------------|-----------------------------------------------------------------|----------------------------|------------------------------------|-----------------------------------|
| `RequestPrdList` | No | Yes | No | all the members of the `item_name` `Role` into to `ItemProcess` | Yes | Yes | Yes |
| `RequestPrdUpdate` | waiting `sig_value` | Yes | Yes | all the members of all `Role` into to `ItemProcess` | No | Yes | Yes |
| `RequestPrdMessage` | waiting `sig_value` + `message_public`, `message_confidential`, `message_private` | if no `raw_transaction_list` | No | a member of the `ItemProcess` | No | No | if no `raw_transaction_list` |
| `RequestPrdResponse` | waiting `sig_value` | Yes | No | See Received | No | No | Yes |
| `RequestPrdConfirm` | (option) Waiting `code_confirm_enc_by_shared_secret` | Yes | No | See Received | No | No | No |
| `RequestPrdKeyBackup` | No | No | No | all the members of the `SharedProcess` | No | Yes | No |
| `RequestPrdKeyHello` | No | Yes | No | all the members of all role into to `ItemProcess` | Yes | Yes | Yes |
| `RequestPrdKeyHello` | No | Yes | No | all the members of all `Role` into to `ItemProcess` | Yes | Yes | Yes |
### 5.2. <a name='Rception-1'></a>Réception
@ -120,9 +120,9 @@ La réception d'un `RequestPcd` suit plusieurs étapes :
6. Mise à jour du cache pour les traitement des RequestPrd.
| `request_type` | Notification user | `RequestPrdConfirm` to send | `RequestPcd` to send | `RequestPrdResponse` to send | `RequestPrdResponse` reply waiting | `RequestPrdConfirm` reply waiting (from `RequestPrdResponse` send ) |
|-----------------------|-----------------------------------|------------------------------|----------------------|---------------------------------------------------------------|------------------------------------|---------------------------------------------------------------------|
| `RequestPrdList` | No | Yes | Yes | all the members of the `item_name` role into to `ItemProcess` | No | Yes |
| `RequestPrdUpdate` | Info | Yes | No | all the members of all role into to `ItemProcess` | Yes (other members) | Yes |
|-----------------------|-----------------------------------|------------------------------|----------------------|-----------------------------------------------------------------|------------------------------------|---------------------------------------------------------------------|
| `RequestPrdList` | No | Yes | Yes | all the members of the `item_name` `Role` into to `ItemProcess` | No | Yes |
| `RequestPrdUpdate` | Info | Yes | No | all the members of all `Role` into to `ItemProcess` | Yes (other members) | Yes |
| `RequestPrdMessage` | Waiting `RequestPrdMessage` reply | if no `raw_transaction_list` | No | No | No | No |
| `RequestPrdResponse` | Info | Yes | No | No | No | No |
| `RequestPrdConfirm` | Info | No | No | No | No | No |
@ -239,7 +239,7 @@ Basé sur le `RequestPrd`. avec des additions pour spécifier les modifications
Essentiel pour les utilisateurs ou les processus nécessitant de mettre à jour des informations contractuelles ou des attributs d'items, assurant la pertinence et l'actualité des données dans le système.
Par exemple, mettre à jour la liste des membres permet d'ajouter de nouveaux utilisateurs sur un `ItemProcess` , la mise à jour de la liste des `ItemProcess` permettra de leur affecter un nouveau role.
Par exemple, mettre à jour la liste des membres permet d'ajouter de nouveaux utilisateurs sur un `ItemProcess` , la mise à jour de la liste des `ItemProcess` permettra de leur affecter un nouveau `Role`.
Les `RequestPrdUpdate` signalent au réseau via l'attribut `RequestPcd_new_version_hash` les nouvelles version des RequestPcd.
@ -330,7 +330,7 @@ Important pour les processus d'onboarding de nouveaux membres, de réinitialisat
1. Traitements des `RequestPrd`
2. Voir [Auth-Specs.md](Auth-Specs.md)
1. Renvoi des shards dans le champs le `shard_enc_by_sp_shared_secret` du `RequestPrdResponse` à envoyer
2. Envoi des `RequestPcd` relatif au role de l'utilisateur dans le `ItemProcess` et des `RequestPcd` avec l`item_name` égal à "process" en cache
2. Envoi des `RequestPcd` relatif au `Role` de l'utilisateur dans le `ItemProcess` et des `RequestPcd` avec l`item_name` égal à "process" en cache
## 14. <a name='ExemplesdeCode'></a>Exemples de Code

View File

@ -22,8 +22,19 @@
* 7. [Sécurisation des Communications](#ScurisationdesCommunications)
* 7.1. [Composition et Utilisation](#CompositionetUtilisation)
* 8. [Intégration et Orchestration des Processus](#IntgrationetOrchestrationdesProcessus)
* 9. [Exemples de Code](#ExemplesdeCode)
* 10. [Todo](#Todo)
* 9. [Condition RequestPrdAddressSet](#ConditionRequestPrdAddressSet)
* 9.1. [ Participants](#Participants)
* 9.2. [ Valeurs des signatures (`sig_value`)](#Valeursdessignaturessig_value)
* 9.3. [Minimums et maximums de valeurs "OK", "KO" et "NONE"](#MinimumsetmaximumsdevaleursOKKOetNONE)
* 9.4. [Minimums et maximums de scores](#Minimumsetmaximumsdescores)
* 10. [ConditionPublish : conditions de publication](#ConditionPublish:conditionsdepublication)
* 11. [ConditionPayment : conditions de paiement](#ConditionPayment:conditionsdepaiement)
* 12. [ConditionCommitment : conditions d'engagement](#ConditionCommitment:conditionsdengagement)
* 13. [ConditionDeposit : conditions de dépôt de garantie](#ConditionDeposit:conditionsdedptdegarantie)
* 14. [ConditionOrchestration : conditions d'orchestration des processus](#ConditionOrchestration:conditionsdorchestrationdesprocessus)
* 15. [ConditionCap : Conditions de passage d'un seuil minimum de paiements ou de déposits ou de d'engagement](#ConditionCap:Conditionsdepassagedunseuilminimumdepaiementsoudedpositsoudedengagement)
* 16. [Exemples de Code](#ExemplesdeCode)
* 17. [Todo](#Todo)
<!-- vscode-markdown-toc-config
numbering=true
@ -85,9 +96,9 @@ Concentre l'échange d'informations ou de demandes directement entre un émetteu
Ces modes supportent divers scénarios de communication, de la diffusion large d'informations ou de mises à jour, à des échanges directs pour des opérations spécifiques, offrant ainsi une flexibilité dans la gestion des flux d'informations.
# Role - Définition et Gestion des Rôles Spécifiques
# `Role` - Définition et Gestion des Rôles Spécifiques
La structure Role est fondamentale pour définir les caractéristiques et les exigences de chaque rôle au sein du système 4NK, y compris les permissions, les validations nécessaires, et les conditions spécifiques d'utilisation.
La structure `Role` est fondamentale pour définir les caractéristiques et les exigences de chaque rôle au sein du système 4NK, y compris les permissions, les validations nécessaires, et les conditions spécifiques d'utilisation.
#### 5.4.1. <a name='CompositionetFonction-1'></a>Composition et Fonction
@ -102,7 +113,7 @@ Cette structure permet une personnalisation détaillée des rôles au sein du sy
### 5.5. <a name='Role-DfinitionetGestiondesRlesSpcifiques'></a>Role - Définition et Gestion des Rôles Spécifiques
La structure Role est fondamentale pour définir les caractéristiques et les exigences de chaque rôle au sein du système 4NK, y compris les permissions, les validations nécessaires, et les conditions spécifiques d'utilisation.
La structure `Role` est fondamentale pour définir les caractéristiques et les exigences de chaque rôle au sein du système 4NK, y compris les permissions, les validations nécessaires, et les conditions spécifiques d'utilisation.
#### 5.5.1. <a name='CompositionetFonction-1'></a>Composition et Fonction
@ -141,20 +152,20 @@ La structure MetaData et ses sous-structures comme MetadataContractPublic, Metad
L'ItemProcess et ItemProcessPublicAttributeGroup offrent un cadre pour l'intégration et l'orchestration des processus dans le système 4NK, permettant la définition, la gestion et l'exécution de workflows complexes de manière sécurisée et efficace.
## Condition RequestPrdAddressSet
## 9. <a name='ConditionRequestPrdAddressSet'></a>Condition RequestPrdAddressSet
A l'issue d'un délai `validation_timeout` par `Role` et par * `request_prd_type`, les `RequestPrdRequest` sont collectés afin de vérifier les conditions de validation par roles sont définies en fonction des critères suivants :
Les membres concernés sont identifiés par leurs `adresse SP`.
`request_prd_type`
### Participants
### 9.1. <a name='Participants'></a> Participants
* `request_prd_sp_address_list`: Liste des `adresse SP` (cumulatif avec `from_role`)
* `request_prd_sp_address_required_list`: Liste des `adresse SP` requises (toutes valeurs confondues)
* `request_prd_sp_address_quota`: Quota minmum de `adresse SP` participantes (toutes valeurs confondues)
* `request_prd_sp_address_score_min`: Score minimal des membres participants (toutes valeurs confondues)
### Valeurs des signatures (`sig_value`)
### 9.2. <a name='Valeursdessignaturessig_value'></a> Valeurs des signatures (`sig_value`)
* (option)`request_prd_value_ok_list`: Liste des valeurs valant pour "OK"
* (option)`request_prd_value_ko_list`: Liste des valeurs valant pour "KO"
@ -163,74 +174,76 @@ Les membres concernés sont identifiés par leurs `adresse SP`.
* (option)`request_prd_value_auto_ko`: Valeur automatique valant pour "KO"
* (option)`request_prd_value_auto_none`: Valeur automatique valant pour "NONE"
### Minimums et maximums de valeurs "OK", "KO" et "NONE"
### 9.3. <a name='MinimumsetmaximumsdevaleursOKKOetNONE'></a>Minimums et maximums de valeurs "OK", "KO" et "NONE"
* (option)`request_prd_sp_address_value_min_per`: Pourcentage minimal de valeurs valant pour "OK"
* (option)`request_prd_sp_address_value_min_ok`: Nombre minimal de valeurs valant pour "OK"
*
* (option)`request_prd_sp_adddress_value_ok_min_per`: Pourcentage minimal de valeurs valant pour "OK"
* (option)`request_prd_sp_address_value_ok_max`: Nombre maximal de valeurs valant pour "OK"
*
* (option)`request_prd_sp_adderss_value_ko_max_per`: Pourcentage maximal de valeurs valant pour "KO"
* (option)`request_prd_sp_address_value_ko_max`: Nombre maximal de valeurs valant pour "OK"
*
* (option)`request_prd_sp_address_value_none_max`: Nombre maximal de valeurs valant pour "NONE"
* (option)`request_prd_sp_adderss_value_none_max_per`: Pourcentage maximal de valeurs valant pour "NONE"
### Minimums et maximums de scores
### 9.4. <a name='Minimumsetmaximumsdescores'></a>Minimums et maximums de scores
* (option)`request_prd_sp_address_score_min_min_ok`: Nombre de membres avec un score minimum et une valeur valant pour "OK"
* (option)`request_prd_sp_address_score_min_min_per`:: Pourcentage de membres avec un score minimum et une valeur valant pour "OK"
* (option)`request_prd_sp_address_value_min`: Valeur minimal valant pour "OK" (cas de nombres)
* (option) `from_role` : `address SP` de se `Role` (pour éviter de dupliquer les `addresse SP`)
* (option) `from_role` : `address SP` de ce `Role` (pour éviter de dupliquer les `addresse SP`)
## ConditionPublish : conditions de publication
## 10. <a name='ConditionPublish:conditionsdepublication'></a>ConditionPublish : conditions de publication
* `request_prd_type`
* `request_pcd_data_size_max_unit`
* `request_pcd_data_size_max_total`
* `request_pcd_number_min`
* `request_pcd_number_max`
* `request_pcd_amount_max_total`
* `Amount`
* `request_prd_waiting_timeout`
* `request_pcd_waiting_timeout`
* (option)`request_pcd_data_size_max_unit`: Taille maximale des données de chaque `RequestPcd` en Mo
* (option)`request_pcd_data_size_max_total`: Taille maximale des données des `RequestPcd` en Mo
* (option)`request_pcd_number_min`: Nombre minimum de publication de `RequestPcd`
* (option)`request_pcd_number_max`: Nombre maximum de publication de `RequestPcd`
* (option)`request_pcd_amount_max_total`: Montant maximum des montants dans les items des `RequestPcd`
* (option)`request_prd_waiting_timeout`: Délai d'attente pour la réception des `RequestPrd`
* (option)`request_pcd_waiting_timeout`: Délai d'attente pour la réception des `RequestPcd`
## ConditionPayment : conditions de paiement
* `request_prd_type`
* `payment_amount`
* `payment_method`
* `role_transaction`
## 14. <a name='ConditionOrchestration:conditionsdorchestrationdesprocessus'></a>ConditionOrchestration : conditions d'orchestration des processus
## ConditionCommitment : conditions d'engagement
* (option) `role_ok`: `Role` à vérifier en cas de résulats final "OK"
* (option) `role_ko`: `Role` à vérifier en cas de résulats final "KO"
* `request_prd_type`
* `role_artefact`
* `role_transaction`
## 11. <a name='ConditionPayment:conditionsdepaiement'></a>ConditionPayment : conditions de paiement
## ConditionDeposit : conditions de dépôt de garantie
* (option) `payment_method_list`: Liste des modes de paiement acceptés
* (option) `role_transaction` : voir `TransactionMode`
* `request_prd_type`
* `role_deposit`
* `role_transaction`
## 12. <a name='ConditionCommitment:conditionsdengagement'></a>ConditionCommitment : conditions d'engagement
## ConditionOrchestration : conditions d'orchestration des processus
* (option) `role_artefact`
* (option) `role_transaction` : voir `TransactionMode`
* `request_prd_type`
* `role_ok`
* `role_ko`
## 13. <a name='ConditionDeposit:conditionsdedptdegarantie'></a>ConditionDeposit : conditions de dépôt de garantie
## ConditionCap : Conditions de passage d'un seuil minimum de paiements ou de déposits ou de d'engagement
* (option) `role_deposit`
* (option) `role_transaction` : voir `TransactionMode`
* `request_prd_type`
* `role_deposit`
* `role_transaction`
## 15. <a name='ConditionCap:Conditionsdepassagedunseuilminimumdepaiementsoudedpositsoudedengagement'></a>ConditionCap : Conditions de passage d'un seuil minimum de paiements ou de déposits ou de d'engagement
## 9. <a name='ExemplesdeCode'></a>Exemples de Code
* (option) `role_deposit`
* (option) `role_transaction` : voir `TransactionMode`
## 10. <a name='Todo'></a>Todo
## TransactionMode
* `value`: Montant du paiement (objet `Amount` ou `Number`)
* `from_list` : Liste des adresses ou des rôles qui doivent opérer le paiement
* `from_type` : Soit "addresses" soit "roles"
* `from_method` : Méthode de distribution de la somme des prélèvements : "Amount divided" ou "Same Amount"
* `to_list` : Liste des adresses ou des rôles qui doivent recevoir le Versement
* `to_type` : Soit "addresses" soit "roles"
* `to_method` : Méthode de distribution de la somme des versements : "Amount divided" ou "Same Amount"
## 16. <a name='ExemplesdeCode'></a>Exemples de Code
## 17. <a name='Todo'></a>Todo
* [ ] Extraits de code illustrant l'utilisation des `RequestPcd` et `RequestPrd` dans des scénarios réels.
* [ ] Diagrammes de séquences

View File

@ -56,7 +56,7 @@ Une fois le `RequestPrd` finalisé, une transaction SP est réalisée, dans cett
1.10. Le hash d'un `Amount`de dépôt (le cas échéant)
1.11. Un hash d'un engagement externe ou d'un `Number` (le cas échéant)
Pour des raison de confidentialité, le role associé à l'`item_name` du `RequestPrd` peut définir (option) un salt pour la génération des hashs dans l'attribut `sp_output_salt_enc`.
Pour des raison de confidentialité, le `Role` associé à l'`item_name` du `RequestPrd` peut définir (option) un salt pour la génération des hashs dans l'attribut `sp_output_salt_enc`.
## 6. <a name='EnvoidelatransactionSP'></a>Envoi de la transaction SP
@ -68,7 +68,7 @@ Afin d'améliorer la rélisience du broadcast des transactions, la transaction e
### 6.1. <a name='DansunRequestPrdMessage'></a>Dans un `RequestPrdMessage`
Dans l'attribut `raw_transaction_list` du `RequestPrdMessage` associé à la transaction SP.
La transaction sera broadcastée par les noeuds de signet du membre du role `member` du `ItemProcess` concerné qui a reçu ce message, il devra alors avoir un noeud de signet pour le broadcast.
La transaction sera broadcastée par les noeuds de signet du membre du `Role` `member` du `ItemProcess` concerné qui a reçu ce message, il devra alors avoir un noeud de signet pour le broadcast.
### 6.2. <a name='DansunMessageduRequestPrdMessage'></a>Dans un `Message` du `RequestPrdMessage`

View File

@ -67,13 +67,14 @@
* 11. [Roles](#Roles)
* 11.1. [Role](#Role)
* 11.2. [Conditions](#Conditions)
* 11.2.1. [ConditionCap](#ConditionCap)
* 11.2.2. [ConditionCommitment](#ConditionCommitment)
* 11.2.3. [ConditionDeposit](#ConditionDeposit)
* 11.2.4. [ConditionOrchestration](#ConditionOrchestration)
* 11.2.5. [ConditionPayment](#ConditionPayment)
* 11.2.6. [Condition RequestPrdAddressSet](#ConditionRequestPrdAddressSet)
* 11.2.7. [ConditionPublish](#ConditionPublish)
* 11.2.1. [TransactionMode](#TransactionMode)
* 11.2.2. [ConditionPayment](#ConditionPayment)
* 11.2.3. [ConditionCommitment](#ConditionCommitment)
* 11.2.4. [ConditionDeposit](#ConditionDeposit)
* 11.2.5. [ConditionOrchestration](#ConditionOrchestration)
* 11.2.6. [ConditionCap](#ConditionCap)
* 11.2.7. [Condition RequestPrdAddressSet](#ConditionRequestPrdAddressSet)
* 11.2.8. [ConditionPublish](#ConditionPublish)
* 11.3. [RolesGroup](#RolesGroup)
* 11.3.1. [RoleArtefact](#RoleArtefact)
* 11.3.2. [RoleDeposit](#RoleDeposit)
@ -82,7 +83,6 @@
* 11.4. [RolePeer](#RolePeer)
* 11.4.1. [RolePayment](#RolePayment)
* 11.4.2. [RoleProcess](#RoleProcess)
* 11.5. [TransactionMode](#TransactionMode)
* 12. [12. Rust considerations](#Rustconsiderations)
* 12.1. [General Implications for Project Objects](#GeneralImplicationsforProjectObjects)
* 12.2. [Debug](#Debug)
@ -785,7 +785,9 @@ The `Roles` enum defines the various roles within the system, specifying respons
### 11.1. <a name='Role'></a>Role
The `Role` struct broadly defines a role within the system, encapsulating the general responsibilities, required security measures like two-factor authentication, validation timeouts, and conditions for action validation. This serves as a foundation for more specific role definitions, ensuring a flexible yet secure role-based access and action framework.
|--------------------------------------|-------------------------------|--------|------------------------------------------------------------------|
| Attribute Name | Type | Option | Description |
|---------------------------------------|-----------------------------------|--------|--------------------------------------------------------|
| `item` | ```Item``` | | The item associated with the role. |
| `sp_output_salt_enc` | ```string``` | | he salt encrypted for the hash in the sp outputs. |
| `required_2fa` | ```bool``` | | Indicates if two-factor authentication is required. |
@ -803,58 +805,75 @@ The `Role` struct broadly defines a role within the system, encapsulating the ge
### 11.2. <a name='Conditions'></a>Conditions
#### 11.2.1. <a name='ConditionCap'></a>ConditionCap
#### 11.2.1. <a name='TransactionMode'></a>TransactionMode
The `ConditionCap` struct represents a condition related to a deposit role and its associated transaction mode, indicating the requirements for transactions within this context.
`TransactionMode` and its specific types (Distribution, Direct) describe how transactions are handled within the system, whether through direct communication or distributed across multiple entities, influencing the flow and security of transactions.
| Attribute Name | Type | Option | Description |
|--------------------|-----------------------|--------|-----------------------------------------------------------|
| `request_prd_type` | ```String``` | | Type of prd request concerned by this conditions |
| `role_deposit` | ```String``` | | Represents the deposit role in the condition. |
| `role_transaction` | ```TransactionMode``` | | Specifies the transaction mode associated with this role. |
|------------------|------------------------|--------|------------------------------------------------------------------------------------------|
| `value` | ```Amount or Number``` | | Valeurs échangées |
| `hash_ok_list` | ```Vec<String>``` | Yes | Commitments de hash valant pour un résultat "OK" |
| `hash_ko_list` | ```Vec<String>``` | Yes | Commitments de hash valant pour un résultat "KO" |
| `hash_none_list` | ```Vec<String>``` | Yes | Commitments de hash valant pour un résultat "None" |
| `from_list` | ```Vec<String>``` | | Adresse silent payment ou role qui doit opérer le paiement |
| `from_type` | ```String``` | | Soit "addresses" soit "roles" |
| `from_method` | ```String``` | | Méthode de distribution de la somme des prélèvements : "Amount divided" ou "Same Amount" |
| `to_list` | ```Vec<String>``` | | Adresse silent payment ou role qui doit recevoir le Versement |
| `to_type` | ```String``` | | Soit "addresses" soit "roles" |
| `to_method` | ```String``` | | Méthode de distribution de la somme des versements : "Amount divided" ou "Same Amount" |
#### 11.2.2. <a name='ConditionCommitment'></a>ConditionCommitment
The `ConditionCommitment` struct specifies a condition involving an artefact role and transaction mode, defining how commitments are handled and verified.
| Attribute Name | Type | Option | Description |
|--------------------|-----------------------|--------|-----------------------------------------------------------|
| `request_prd_type` | ```String``` | | Type of prd request concerned by this conditions |
| `role_artefact` | ```String``` | | Represents the artefact role in the condition. |
| `role_transaction` | ```TransactionMode``` | | Specifies the transaction mode associated with this role. |
#### 11.2.3. <a name='ConditionDeposit'></a>ConditionDeposit
`ConditionDeposit` is similar to ConditionCap but specifically focuses on deposit-related transactions, establishing the criteria for deposit actions.
| Attribute Name | Type | Option | Description |
|--------------------|-----------------------|--------|-----------------------------------------------------------|
| `request_prd_type` | ```String``` | | Type of prd request concerned by this conditions |
| `role_deposit` | ```String``` | | Represents the deposit role in the condition. |
| `role_transaction` | ```TransactionMode``` | | Specifies the transaction mode associated with this role. |
#### 11.2.4. <a name='ConditionOrchestration'></a>ConditionOrchestration
`ConditionOrchestration` defines success and failure roles for orchestration conditions, guiding the flow of processes based on outcomes.
| Attribute Name | Type | Option | Description |
|--------------------|--------------|--------|----------------------------------------------------------|
| `request_prd_type` | ```String``` | | Type of prd request concerned by this conditions |
| `role_ok` | ```String``` | | Represents the successful outcome role in the condition. |
| `role_ko` | ```String``` | | Represents the failed outcome role in the condition. |
#### 11.2.5. <a name='ConditionPayment'></a>ConditionPayment
#### 11.2.2. <a name='ConditionPayment'></a>ConditionPayment
This struct outlines the conditions for payments, including the amount, payment method, and transaction mode, setting the parameters for financial transactions.
| Attribute Name | Type | Option | Description |
|--------------------|-----------------------|--------|-----------------------------------------------------------|
|----------------------------|----------------------------|--------|--------------------------------------------------------------------------------------------------|
| `request_prd_type` | ```String``` | | Type of prd request concerned by this conditions |
| `payment_amount` | ```String``` | | Represents the amount to be paid in the condition. |
| `payment_method` | ```PaymentMode``` | | Specifies the payment method to be used. |
| `role_transaction` | ```TransactionMode``` | | Specifies the transaction mode associated with this role. |
| `transaction_mode` | ```TransactionMode``` | | Specifies the transaction mode associated with this role. |
| `payment_proof_validation` | ```RequestPrdAddressSet``` | | Validation conditions + {sp_address_sender} and {sp_address_receiver} placehoders for Address SP |
#### 11.2.6. <a name='ConditionRequestPrdAddressSet'></a>Condition RequestPrdAddressSet
#### 11.2.3. <a name='ConditionCommitment'></a>ConditionCommitment
The `ConditionCommitment` struct specifies a condition involving an artefact role and transaction mode, defining how commitments are handled and verified.
| Attribute Name | Type | Option | Description |
|----------------------------|----------------------------|--------|--------------------------------------------------------------------------------------------------|
| `request_prd_type` | ```String``` | | Type of prd request concerned by this conditions |
| `transaction_mode` | ```TransactionMode``` | | Specifies the transaction mode associated with this role. |
| `payment_proof_validation` | ```RequestPrdAddressSet``` | | Validation conditions + {sp_address_sender} and {sp_address_receiver} placehoders for Address SP |
#### 11.2.4. <a name='ConditionDeposit'></a>ConditionDeposit
`ConditionDeposit` is similar to ConditionCap but specifically focuses on deposit-related transactions, establishing the criteria for deposit actions.
| Attribute Name | Type | Option | Description |
|----------------------------|----------------------------|--------|--------------------------------------------------------------------------------------------------|
| `request_prd_type` | ```String``` | | Type of prd request concerned by this conditions |
| `transaction_mode` | ```TransactionMode``` | | Specifies the transaction mode associated with this role. |
| `payment_proof_validation` | ```RequestPrdAddressSet``` | | Validation conditions + {sp_address_sender} and {sp_address_receiver} placehoders for Address SP |
#### 11.2.5. <a name='ConditionOrchestration'></a>ConditionOrchestration
`ConditionOrchestration` defines success and failure roles for orchestration conditions, guiding the flow of processes based on outcomes.
| Attribute Name | Type | Option | Description |
|----------------------------|----------------------------|--------|--------------------------------------------------------------------------------------------------|
| `request_prd_type` | ```String``` | | Type of prd request concerned by this conditions |
| `role_ok` | ```String``` | | Represents the successful outcome role in the condition. |
| `role_ko` | ```String``` | | Represents the failed outcome role in the condition. |
| `payment_proof_validation` | ```RequestPrdAddressSet``` | | Validation conditions + {sp_address_sender} and {sp_address_receiver} placehoders for Address SP |
#### 11.2.6. <a name='ConditionCap'></a>ConditionCap
The `ConditionCap` struct represents a condition related to a deposit role and its associated transaction mode, indicating the requirements for transactions within this context.
| Attribute Name | Type | Option | Description |
|----------------------------|----------------------------|--------|--------------------------------------------------------------------------------------------------|
| `request_prd_type` | ```String``` | | Type of prd request concerned by this conditions |
| `transaction_mode` | ```TransactionMode``` | | Specifies the transaction mode associated with this role. |
| `payment_proof_validation` | ```RequestPrdAddressSet``` | | Validation conditions + {sp_address_sender} and {sp_address_receiver} placehoders for Address SP |
#### 11.2.7. <a name='ConditionRequestPrdAddressSet'></a>Condition RequestPrdAddressSet
Condition `request_prdAddressSet` involves complex conditions based on RequestPrd addresses, including quotas, values, and scores, to determine condition fulfillment.
@ -872,7 +891,6 @@ Condition `request_prdAddressSet` involves complex conditions based on RequestPr
| `request_prd_value_auto_ko` | ```boolean``` | | Automatically consider values as KO. |
| `request_prd_value_auto_none` | ```boolean``` | | Automatically consider values as neutral or no-op. |
| `request_prd_sp_address_value_min` | ```i64``` | Yes | The minimum value for an address to be considered. |
| `request_prd_sp_address_value_min_per` | ```i64``` | Yes | The minimum percentage for the minimum address value. |
| `request_prd_sp_address_value_min_ok` | ```boolean``` | Yes | Indicates if the minimum address value is considered OK. |
| `request_prd_sp_adddress_value_ok_min_per` | ```i64``` | Yes | The minimum percentage for an address value to be OK. |
| `request_prd_sp_address_value_ok_max` | ```i64``` | Yes | The maximum value for an address to be considered OK. |
@ -885,7 +903,7 @@ Condition `request_prdAddressSet` involves complex conditions based on RequestPr
| `request_prd_sp_address_score_min_min_ok` | ```boolean``` | Yes | Indicates if the minimum score is considered OK. |
| `request_prd_sp_address_score_min_min_per` | ```i64``` | Yes | The minimum percentage for the minimum score. |
#### 11.2.7. <a name='ConditionPublish'></a>ConditionPublish
#### 11.2.8. <a name='ConditionPublish'></a>ConditionPublish
`ConditionPublish` sets the criteria for publishing actions, including data size limits, publication counts, and timeouts, to regulate content distribution.
@ -974,19 +992,6 @@ The `RolePayment` struct is dedicated to defining the role related to payments,
| `item_name` | ```String``` | | The name of the item associated with the process. |
| `role` | ```Role``` | | The role associated with this process. |
### 11.5. <a name='TransactionMode'></a>TransactionMode
`TransactionMode` and its specific types (Distribution, Direct) describe how transactions are handled within the system, whether through direct communication or distributed across multiple entities, influencing the flow and security of transactions.
| Attribute Name | Type | Option | Description |
|----------------|-------------------|--------|------------------------------------------------------------------------------------------|
| `from_list` | ```Vec<String>``` | | Adresse silent payment ou role qui doit opérer le paiement |
| `from_type` | ```String``` | | Soit "addresses" soit "roles" |
| `from_method` | ```String``` | | Méthode de distribution de la somme des prélèvements : "Amount divided" ou "Same Amount" |
| `to_list` | ```Vec<String>``` | | Adresse silent payment ou role qui doit recevoir le Versement |
| `to_type` | ```String``` | | Soit "addresses" soit "roles" |
| `to_method` | ```String``` | | Méthode de distribution de la somme des versements : "Amount divided" ou "Same Amount" |
## 12. <a name='Rustconsiderations'></a>12. Rust considerations
### 12.1. <a name='GeneralImplicationsforProjectObjects'></a> General Implications for Project Objects