add raw_transaction_list for messages and move payments attributs to RequestPRD (for all PRD)
This commit is contained in:
parent
8e96c3a035
commit
b6abd5867e
@ -4,16 +4,16 @@
|
||||
* 3. [3. Documents de référence](#Documentsderfrence)
|
||||
* 4. [Fonction des PCD](#FonctiondesPCD)
|
||||
* 5. [Fonction des PRD](#FonctiondesPRD)
|
||||
* 5.1. [RequestPrdList - Demande de Listes (PCD)](#RequestPrdList-DemandedeListesPCD)
|
||||
* 5.2. [RequestPrdMessage - Envoi de Messages](#RequestPrdMessage-EnvoideMessages)
|
||||
* 5.3. [RequestPrdUpdate - Mises à Jour de PCD](#RequestPrdUpdate-MisesJourdePCD)
|
||||
* 5.4. [RequestPrdConfirm - Confirmation de Réception](#RequestPrdConfirm-ConfirmationdeRception)
|
||||
* 5.5. [RequestPrdResponse - Répondre à une Demande](#RequestPrdResponse-RpondreuneDemande)
|
||||
* 5.6. [RequestPrdKeyHelloBakcup](#RequestPrdKeyHelloBakcup)
|
||||
* 5.7. [RequestPrdKeyHello - Échange de Clés et d'Identités](#RequestPrdKeyHello-changedeClsetdIdentits)
|
||||
* 5.1. [RequestPrdList - Demande de Listes (PCD)](#RequestPrdList-DemandedeListesPCD)
|
||||
* 5.2. [RequestPrdMessage - Envoi de Messages](#RequestPrdMessage-EnvoideMessages)
|
||||
* 5.3. [RequestPrdUpdate - Mises à Jour de PCD](#RequestPrdUpdate-MisesJourdePCD)
|
||||
* 5.4. [RequestPrdConfirm - Confirmation de Réception](#RequestPrdConfirm-ConfirmationdeRception)
|
||||
* 5.5. [RequestPrdResponse - Répondre à une Demande](#RequestPrdResponse-RpondreuneDemande)
|
||||
* 5.6. [RequestPrdKeyHelloBakcup](#RequestPrdKeyHelloBakcup)
|
||||
* 5.7. [RequestPrdKeyHello - Échange de Clés et d'Identités](#RequestPrdKeyHello-changedeClsetdIdentits)
|
||||
* 6. [Gestion et Échange des Documents](#GestionetchangedesDocuments)
|
||||
* 6.1. [Création et Distribution](#CrationetDistribution)
|
||||
* 6.2. [Validation et Mise à Jour](#ValidationetMiseJour)
|
||||
* 6.1. [Création et Distribution](#CrationetDistribution)
|
||||
* 6.2. [Validation et Mise à Jour](#ValidationetMiseJour)
|
||||
* 7. [Exemples de Code](#ExemplesdeCode)
|
||||
* 8. [Todo](#Todo)
|
||||
|
||||
@ -23,25 +23,37 @@
|
||||
/vscode-markdown-toc-config -->
|
||||
<!-- /vscode-markdown-toc --># PRD et PCD - Specs
|
||||
|
||||
## 1. <a name='Objectif'></a>Objectif
|
||||
## 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
|
||||
## 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
|
||||
## 3. <a name='Documentsderfrence'></a>3. Documents de référence
|
||||
|
||||
Voir [Doc_references.md](Doc_references.md).
|
||||
|
||||
## 4. <a name='FonctiondesPCD'></a>Fonction des PCD
|
||||
## 4. <a name='FonctiondesPCD'></a>Fonction des PCD
|
||||
|
||||
Les Portable Contract Documents (PCD) sont des documents JSON qui encapsulent les listes versionnées d'`Item` dont les attributs sont chiffrés soit en public, soit en confidentiel par rôles soit en privé (cf. [Specs-Security.md](Specs-Security.md)).
|
||||
|
||||
Les `Item` ainsi échangés via les PCD sont vérifiés par les `PRDResponse` afin de vérifier les validations de ces données et leurs conformités avec les `process` et les `members` concernés.
|
||||
|
||||
## 5. <a name='FonctiondesPRD'></a>Fonction des PRD
|
||||
### Création et envoi
|
||||
|
||||
La création d'un PCD suit plusieurs étapes :
|
||||
|
||||
1. **Chargement de la dernière version de la liste (PCD)**: Récupération de la dernière version de la liste du type d'`Item` à partir de la source de données, telle qu'une base de données ou un système de stockage.
|
||||
2. **Mise à jour**: Ajouts et modifications eventuelles des `Item`
|
||||
3. **Chiffrement des attributs**: Chiffrement des attributs de chaque Item selon les règles de confidentialité et de partage des clés (cf. [Specs-Security.md](Specs-Security.md)).
|
||||
4. **Chiffrement du PCD**: Chiffrement du PCD avec la clé `ProcessKey` du `process` concerné.
|
||||
5. **Création du message**: Création du `message` contenant le PCD chiffré, la preuve de travail, l'adresse de faucet
|
||||
6. **Sélection des relais pour le message**: Sélection de 4 relais pour le message selon l'historique des pings et des réponses retournées.
|
||||
7. **Envoi du message**: Envoi du message aux relais.
|
||||
|
||||
## 5. <a name='FonctiondesPRD'></a>Fonction des PRD
|
||||
|
||||
Les Portable Request Documents (PRD) sont des documents JSON qui encapsulent les valeurs de signatures et les clés de déchiffrement nécessaires à l'interprétation des PCD. Ils sont utilisés pour demander des actions spécifiques, telles que l'envoi de messages, la mise à jour des informations contractuelles, ou la confirmation de transactions.
|
||||
|
||||
@ -49,6 +61,18 @@ Les clés de chiffrement des attributs confidentiels par rôles des `Item` des P
|
||||
|
||||
Les PRD sont de plusieurs types tels que `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.
|
||||
|
||||
### Création et envoi
|
||||
|
||||
La création d'un PRD suit plusieurs étapes :
|
||||
|
||||
1. **Chargement des clés de chiffrement confidentiel'**: Récupération des clés de chiffrement confidentiel des attributs des items d'un PCD.
|
||||
2. **Chiffrement du PRD**: Chiffrement du PRD avec la clé `ProcessKey` du `process` concerné.
|
||||
3. **Création de l'adresse SP**: Création d'une adresse Silent Payment SP pour le paiement des frais de transaction depuis l'adresse signet de l'utilisateur décrit dans un objet `ItemMember` (cf. [Specs-Datamodel.md](Specs-Datamodel.md)) avec les outupts de la transaction Silent Payment SP correspondants au PRD et aux éventuels PCD associés.
|
||||
4. **Création du message**: Création du `message` contenant le PRD chiffré, la preuve de travail, l'adresse de faucet
|
||||
5. **Sélection des relais pour le message**: Sélection de 4 relais pour le message selon l'historique des pings et des réponses retournées.
|
||||
6. **Sélection des noeuds de signet pour la transaction silent Payment (SP)**: Sélection de 4 noeuds de signet pour l'envoi de la transaction Silent Payment SP.
|
||||
7. **Envoi du message**: Envoi du message aux relais et des transactions aux noeuds de signet.
|
||||
|
||||
## Fonction des transactions silent payment SP associées aux PRD
|
||||
|
||||
La clé `KeyConfidential` d'une transaction Silent Payment SP est utilisée pour chiffrer les PRD. Cette clé est échangée avec le destinataire via un Diffie-Hellman (cf. [Specs-Security.md](Specs-Security.md)) dans la transaction. Cette information est parrallèle aux PRD et permet une meilleur sécurité et confidentialité des échanges.
|
||||
@ -57,11 +81,11 @@ La transaction Silent Payment SP a aussi une fonction d'horodate et de preuve de
|
||||
|
||||
Les `PRDConfirm` qui sont des accusés automatiques de réception des PRD sont aussi associés à une transaction Silent Payment SP, ce qui permet d'ajouter les preuves de réception des demandes et des validations (ou non).
|
||||
|
||||
### 5.1. <a name='RequestPrdList-DemandedeListesPCD'></a>RequestPrdList - Demande de Listes (PCD)
|
||||
## 5.1. <a name='RequestPrdList-DemandedeListesPCD'></a>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.
|
||||
Utile pour les utilisateurs cherchant à consulter ou à explorer des listes de contrats, de membres, ou d'autres items dans le réseau. Chaque PCD liste des `Item` d'un même type, par exemple les `ItemProcess`, les `ItemMember`, les `ItemPeer`, les `ItemPayment`, etc.
|
||||
|
||||
### 5.2. <a name='RequestPrdMessage-EnvoideMessages'></a>RequestPrdMessage - Envoi de Messages
|
||||
## 5.2. <a name='RequestPrdMessage-EnvoideMessages'></a>RequestPrdMessage - Envoi de Messages
|
||||
|
||||
Le RequestPrdMessage facilite l'envoi de messages sécurisés entre utilisateurs ou entre utilisateurs et processus/contrats.
|
||||
|
||||
@ -69,7 +93,7 @@ Permet la communication directe et sécurisée au sein du réseau, supportant de
|
||||
|
||||
Les `PRDMessage` répondent aux `PRDMessage`.
|
||||
|
||||
### 5.3. <a name='RequestPrdUpdate-MisesJourdePCD'></a>RequestPrdUpdate - Mises à Jour de PCD
|
||||
## 5.3. <a name='RequestPrdUpdate-MisesJourdePCD'></a>RequestPrdUpdate - Mises à Jour de PCD
|
||||
|
||||
`RequestPrdUpdate` est conçu pour demander des mises à jour des listes via des nouvelles versions de `PCD`.
|
||||
|
||||
@ -79,7 +103,14 @@ Essentiel pour les utilisateurs ou les processus nécessitant de mettre à jour
|
||||
|
||||
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.
|
||||
|
||||
### 5.4. <a name='RequestPrdConfirm-ConfirmationdeRception'></a>RequestPrdConfirm - Confirmation de Réception
|
||||
Les `PRDUpdate` signalent au réseau via l'attribut `pcd_new_version_hash` les nouvelles version des PCD.
|
||||
|
||||
Les `PRDUpdate` signalent de façon confidentielle :
|
||||
|
||||
* soient des conditions ad'hoc déjà remplies via l'attribut `payment_pcd_hash_list`, `cap_pcd_hash_list`, `deposit_pcd_hash_list`, `commitment_pcd_hash_list` pour les paiements et preuves ad'hoc éventuellements associés aux PCD de la nouvelle version.
|
||||
* soient des appels pour recevoir les moyens de satisfaire ces conditions via les attributs `ask_payment_method`, `ask_deposit_method`, `ask_commitment_method`.
|
||||
|
||||
## 5.4. <a name='RequestPrdConfirm-ConfirmationdeRception'></a>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.
|
||||
|
||||
@ -89,39 +120,128 @@ Les `PRDList`, `PRDUpdate`, `PRDMessage`, `PRDResponse` et `PRDKeyHello` reçoiv
|
||||
|
||||
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.
|
||||
|
||||
### 5.5. <a name='RequestPrdResponse-RpondreuneDemande'></a>RequestPrdResponse - Répondre à une Demande
|
||||
## 5.5. <a name='RequestPrdResponse-RpondreuneDemande'></a>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.
|
||||
Le `PrdResponse` 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`.
|
||||
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.
|
||||
|
||||
### 5.6. <a name='RequestPrdKeyHelloBakcup'></a>RequestPrdKeyHelloBakcup
|
||||
L'attribut `sig_value` permet de donner une valeur aux signatures. Les valeurs des signatures sont définies par rôles dans les `ItemProcess` avec des valeurs valant pour `OK` ou `KO` pour `none` pour les validations des `PRD`.
|
||||
|
||||
Lorsque que la réponse fait référence à un PCD il est précisé dans `pcd_origin_hash`.
|
||||
|
||||
Les `PrdResponse` signalent de façon confidentielle :
|
||||
|
||||
* soient des conditions ad'hoc déjà remplies via l'attribut `payment_method_enc_by_shared_secret`, `deposit_method_enc_by_shared_secret`, `commitment_method_enc_by_shared_secret`, `commitment_pcd_hash_list` pour les paiements et preuves ad'hoc éventuellements associés aux PCD de la nouvelle version.
|
||||
* soient des appels pour recevoir les moyens de satisfaire ces conditions via les attributs `ask_payment_method`, `ask_deposit_method`, `ask_commitment_method`.
|
||||
|
||||
|
||||
|
||||
|
||||
certif_key_enc_by_shared_secret
|
||||
Option
|
||||
Yes
|
||||
Encrypted certification key, encrypted with a shared secret.
|
||||
|
||||
|
||||
shared_secret_key
|
||||
Option
|
||||
Yes
|
||||
Optional encryption key used for shared secrets.
|
||||
|
||||
|
||||
pcd_new_version_hash
|
||||
String
|
||||
|
||||
The hash of the new version of the PCD.
|
||||
|
||||
|
||||
payment_pcd_hash_list
|
||||
Vec
|
||||
|
||||
A list of hashes for payment-related PCDs.
|
||||
|
||||
|
||||
cap_pcd_hash_list
|
||||
Vec
|
||||
|
||||
A list of hashes for capability-related PCDs.
|
||||
|
||||
|
||||
deposit_pcd_hash_list
|
||||
Vec
|
||||
|
||||
A list of hashes for deposit-related PCDs.
|
||||
|
||||
|
||||
commitment_pcd_hash_list
|
||||
Vec
|
||||
|
||||
A list of hashes for commitment-related PCDs.
|
||||
|
||||
|
||||
ask_payment_method
|
||||
String
|
||||
|
||||
The requested payment method.
|
||||
|
||||
|
||||
ask_deposit_method
|
||||
String
|
||||
|
||||
The requested deposit method.
|
||||
|
||||
|
||||
ask_commitment_method
|
||||
String
|
||||
|
||||
The requested commitment method.
|
||||
|
||||
|
||||
device_footprint_enc_by_sp_shared_secret
|
||||
String
|
||||
|
||||
The device footprint encrypted by a service provider's shared secret.
|
||||
|
||||
|
||||
part_1_enc_hash_enc_by_sp_shared_secret
|
||||
String
|
||||
|
||||
The first part of the hash encrypted by a service provider's shared secret.
|
||||
|
||||
|
||||
shard_enc_by_sp_shared_secret
|
||||
String
|
||||
|
||||
The shard encrypted by a service provider's shared secret.
|
||||
|
||||
## 5.6. <a name='RequestPrdKeyHelloBakcup'></a>RequestPrdKeyHelloBakcup
|
||||
|
||||
Le RequestPrdKeyHelloBakcup permet de demander la stockage de nouveaux shards associés à une `pre-id` .
|
||||
|
||||
### 5.7. <a name='RequestPrdKeyHello-changedeClsetdIdentits'></a>RequestPrdKeyHello - Échange de Clés et d'Identités
|
||||
## 5.7. <a name='RequestPrdKeyHello-changedeClsetdIdentits'></a>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.
|
||||
|
||||
## 6. <a name='GestionetchangedesDocuments'></a>Gestion et Échange des Documents
|
||||
## 6. <a name='GestionetchangedesDocuments'></a>Gestion et Échange des Documents
|
||||
|
||||
### 6.1. <a name='CrationetDistribution'></a>Création et Distribution
|
||||
### 6.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.
|
||||
|
||||
### 6.2. <a name='ValidationetMiseJour'></a>Validation et Mise à Jour
|
||||
### 6.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.
|
||||
|
||||
## 7. <a name='ExemplesdeCode'></a>Exemples de Code
|
||||
## 7. <a name='ExemplesdeCode'></a>Exemples de Code
|
||||
|
||||
## 8. <a name='Todo'></a>Todo
|
||||
## 8. <a name='Todo'></a>Todo
|
||||
|
||||
* [ ] Extraits de code illustrant l'utilisation des PCD et PRD dans des scénarios réels.
|
||||
* [ ] Diagrammes de séquences
|
||||
|
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user