sdk_common/doc/PRD-PCD-Specs.md

115 lines
7.1 KiB
Markdown

<!-- vscode-markdown-toc -->
* 1. [Objectif](#Objectif)
* 2. [Portée](#Porte)
* 3. [3. Documents de référence](#Documentsderfrence)
* 3.1. [Worfklows](#Worfklows)
* 3.2. [Transverse](#Transverse)
* 3.3. [Structure des PCD et PRD et de leur attribut générique Request](#StructuredesPCDetPRDetdeleurattributgnriqueRequest)
* 3.4. [Structure et Fonction des PCD](#StructureetFonctiondesPCD)
* 3.4.1. [Structure de Base d'un PCD](#StructuredeBasedunPCD)
* 3.4.2. [L'attribut des listes PcdItemGenericEnc `item_list`](#LattributdeslistesPcdItemGenericEncitem_list)
* 3.5. [Types de PRD et Leur Fonction](#TypesdePRDetLeurFonction)
* 3.5.1. [Structure de RequestPrd](#StructuredeRequestPrd)
* 4. [Gestion et Échange des Documents](#GestionetchangedesDocuments)
* 4.1. [Création et Distribution](#CrationetDistribution)
* 4.2. [Validation et Mise à Jour](#ValidationetMiseJour)
* 5. [Exemples de Code](#ExemplesdeCode)
<!-- vscode-markdown-toc-config
numbering=true
autoSave=true
/vscode-markdown-toc-config -->
<!-- /vscode-markdown-toc --># PRD et PCD - Specs
## 1. <a name='Objectif'></a>Objectif
Le but de cette section est d'introduire les Portable Contract Document (PCD) et Portable Request Document (PRD) comme éléments fondamentaux du système 4NK. Ces documents jouent un rôle crucial dans la sécurisation des échanges de données et la gestion des identités numériques au sein d'un réseau décentralisé. Ils permettent de définir des contrats numériques, de gérer les permissions d'accès, et de faciliter les communications et les opéraations sécurisées entre les différents acteurs du réseau.
## 2. <a name='Porte'></a>Portée
La spécification couvre la conception, le développement, et l'application pratique des PCD et PRD. Elle vise à expliquer leur fonctionnement, leur structure, et la manière dont ils contribuent à l'écosystème 4NK en offrant une méthode sécurisée et efficace pour le partage d'informations et la validation des transactions. Les PCD et PRD encapsulent les données contractuelles et les requêtes dans un format standardisé, assurant l'intégrité, la confidentialité, l'authenticité et la validation des informations échangées.
## 3. <a name='Documentsderfrence'></a>3. Documents de référence
Voir [Doc_references.md](Doc_references.md).
### 3.3. <a name='StructuredesPCDetPRDetdeleurattributgnriqueRequest'></a>Requetes
### 3.4. <a name='StructureetFonctiondesPCD'></a>Structure et Fonction des PCD
#### 3.4.2. <a name='LattributdeslistesPcdItemGenericEncitem_list'></a>L'attribut des listes PcdItemGenericEnc `item_list`
### 3.5. <a name='TypesdePRDetLeurFonction'></a>Types de PRD et Leur Fonction
`RequestPrd`: Structure de base pour toutes les demandes, contenant des informations chiffrées essentielles pour l'interaction sécurisée entre les parties.
`RequestPrdList`, `RequestPrdMessage`, `RequestPrdUpdate`, etc.: Variations de `PRD` pour différentes actions, telles que l'envoi de messages, la mise à jour des informations contractuelles, ou la confirmation de transactions.
#### 3.5.1. <a name='StructuredeRequestPrd'></a>Structure de RequestPrd
##### RequestPrdList - Demande de Listes (PCD)
Utile pour les utilisateurs cherchant à consulter ou à explorer des listes de contrats, de membres, ou d'autres items dans le réseau.
##### RequestPrdMessage - Envoi de Messages
Le RequestPrdMessage facilite l'envoi de messages sécurisés entre utilisateurs ou entre utilisateurs et processus/contrats.
Permet la communication directe et sécurisée au sein du réseau, supportant des échanges d'informations critiques ou des notifications entre parties.
Les `PRDMessage` répondent aux `PRDMessage`.
##### RequestPrdUpdate - Mises à Jour de PCD
`RequestPrdUpdate` est conçu pour demander des mises à jour des listes via des nouvelles versions de `PCD`.
Basé sur le `RequestPrd`. avec des additions pour spécifier les modifications demandées, y compris de nouveaux attributs ou valeurs à mettre à jour :
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 `process`, la mise à jour de la liste des `process` permettra de leur affecter un nouveau role.
##### RequestPrdConfirm - Confirmation de Réception
Le RequestPrdConfirm est utilisé pour confirmer la réception et le traitement de demandes ou de transactions, jouant un rôle crucial dans la validation des actions au sein du réseau.
Les `PRDList`, `PRDUpdate`, `PRDMessage`, `PRDResponse` et `PRDKeyHello` reçoivent systématiquement un `PRDConfirm` depuis leur réception par le destinataire.
`code_confirm_enc_by_shared_secret`: Un code de confirmation chiffré qui valide l'authenticité et l'intégrité de la réponse, assurant que la confirmation est sécurisée et provient de la source attendue. Dans ce cas un output spécifique chiffré par la clé `KeyConfidential` précise ce code, à confirmer dans le PRDConfirm.
Crucial pour les processus qui nécessitent une confirmation explicite de réception ou d'acceptation, comme la finalisation d'une transaction ou la validation d'un changement d'état dans un contrat.
##### RequestPrdResponse - Répondre à une Demande
Le RequestPrdResponse permet de répondre spécifiquement à des PRD reçus, facilitant un échange interactif d'informations ou de décisions entre les parties.
Les PRDResponse répondent aux `PRDList`, `PRDUpdate`, `PRDKeyBackup` et `PRDKeyHello`.
Utilisé pour fournir des feedbacks, des confirmations, ou des instructions supplémentaires en réponse à des demandes initiales, supportant une communication bidirectionnelle sécurisée et vérifiable.
Aussi le moyen de demander des moyens de paiement ou de dépot ou de preuve, puis de partager le payload de ces actions.
##### RequestPrdKeyHelloBakcup
Le RequestPrdKeyHelloBakcup permet de demander la stockage de nouveaux shards associés à une `pre-id` .
##### RequestPrdKeyHello - Échange de Clés et d'Identités
RequestPrdKeyHello est conçu pour initier ou répondre à des demandes d'échange de clés ou d'informations d'identité, essentiel pour la gestion sécurisée des accès et des identités au sein du réseau.
Important pour les processus d'onboarding de nouveaux membres, de réinitialisation des accès, ou de renouvellement des clés, facilitant une intégration sécurisée et la mise à jour des identités dans le réseau.
## 4. <a name='GestionetchangedesDocuments'></a>Gestion et Échange des Documents
### 4.1. <a name='CrationetDistribution'></a>Création et Distribution
Procédure de création des PCD et PRD, leur chiffrement, et les mécanismes de distribution sécurisée à travers le réseau 4NK.
### 4.2. <a name='ValidationetMiseJour'></a>Validation et Mise à Jour
Processus de validation des informations contenues dans les PCD et PRD, ainsi que les procédures de mise à jour et de versioning des documents.
## 5. <a name='ExemplesdeCode'></a>Exemples de Code
Extraits de code illustrant l'utilisation des PCD et PRD dans des scénarios réels.