forked from yvv/decision
Acte M1 exécuté : 8727315 en ligne (30/10, 15h45), Raison d'être publiée ; note du vote Ğ1 mise à jour après recherche
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,60 +1,88 @@
|
||||
# Voter avec sa clé Ğ1 — lier, signer, inscrire sur la chaîne
|
||||
# Voter avec sa clé Ğ1 — une transaction par vote
|
||||
|
||||
> Note d'orch, 2026-10-30, pour la « grande question du vote » de la revue d'Yvv : liaison
|
||||
> avec une transaction de 1 Ğ1 pour une inscription sur la chaîne ? autre moyen ? plugin
|
||||
> obligatoire ? complicité de Ğecko pour l'affichage ?
|
||||
> Note d'orch, 2026-10-30, pour la « grande question du vote » de la revue d'Yvv. Mise à jour
|
||||
> le même jour après sa décision et une recherche dans le code des portefeuilles (clones de
|
||||
> `trustinWallet/refs/`, dépôts git.duniter.org, indexeur, nœud rpc.duniter.org). Les sondes
|
||||
> sont dans `/tmp/ld-recherche-vote/` sur le poste d'orch.
|
||||
|
||||
## Le constat
|
||||
## La décision d'Yvv (2026-10-30)
|
||||
|
||||
Dans Monnaie libre, seuls les membres de la toile votent : une personne, une voix
|
||||
(CHANTIER.md). Le serveur ne reconnaît un membre que par la connexion Ğ1, qui passe par
|
||||
connect.monnaie-libre.fr. Cette connexion attend l'inscription de libreDecision auprès de
|
||||
poka (`DEMANDE-CONNECT.md`). D'ici là, toute identité vient d'une invitation, et **personne ne
|
||||
peut voter dans Monnaie libre**. C'est ce qu'Yvv a vu : « je ne peux pas voter dans l'ux ».
|
||||
- **Un vote = une transaction de 0,1 Ğ1**, signée par le portefeuille et embarquée dans le geste
|
||||
de vote : un seul geste.
|
||||
- Une personne, une voix. Cette voix s'exprime autant de fois que la personne le veut, et **le
|
||||
dernier vote fait foi**.
|
||||
- Seule la chaîne garantit l'intégrité d'un vote.
|
||||
- **Totaux seulement** : les noms ne s'affichent pas.
|
||||
- Portefeuilles visés : Ğ1Companion, Ğecko, et à terme trustinWallet.
|
||||
|
||||
## Vérifié le 2026-10-30 sur l'indexeur (indexer.duniter.org)
|
||||
**« Y a-t-il un autre moyen ? »** Signer son bulletin avec sa clé prouve qui a voté quoi. Mais
|
||||
seule la chaîne date les votes de façon indépendante du serveur : c'est elle qui dit lequel est
|
||||
« le dernier ». Elle empêche aussi le serveur d'oublier un vote. L'intuition tient.
|
||||
|
||||
- Les commentaires de transaction sont indexés (`TxComment` : `remark`, `authorId`,
|
||||
`blockNumber`, et les transferts qui le portent). Exemple réel : « Bienvenue dans la June ! »,
|
||||
bloc 3396077.
|
||||
- Un compte mène à son identité (`Account.identity`, `linkedIdentity`), donc au statut de
|
||||
membre.
|
||||
- Le serveur lit déjà la chaîne et l'indexeur pour la taille de la toile (`wot.rs`).
|
||||
## Ce qui est vérifié
|
||||
|
||||
Donc, sans plugin : une transaction commentée, faite depuis Ğecko ou Cesium², se lit côté
|
||||
serveur. On y retrouve le compte qui l'a signée, l'identité de ce compte et son statut de
|
||||
membre.
|
||||
- **Le commentaire d'un virement.** Les quatre portefeuilles (Cesium², Ğecko, Ğ1nkgo,
|
||||
Ğ1Companion) envoient le virement et le commentaire en une transaction indivisible :
|
||||
`utility.batchAll([balances.transferKeepAlive, system.remarkWithEvent(octets)])`.
|
||||
- **Les frais.** Une transaction de moins de 256 octets ne coûte rien tant que la chaîne est peu
|
||||
chargée. Mesuré sur le runtime 1101 : un virement de 0,1 Ğ1 avec un commentaire est gratuit
|
||||
jusqu'à 106 octets de commentaire, puis coûte 0,05 Ğ1.
|
||||
- **Le montant.** Le dépôt minimal est de 1 Ğ1. Un virement de 0,1 Ğ1 passe si le compte
|
||||
destinataire existe déjà et si l'émetteur garde au moins 1 Ğ1 après le virement. Un virement
|
||||
vers soi-même est refusé par les applis et ne laisse pas de trace de transfert.
|
||||
- **L'indexeur.** Il retrouve un commentaire par son empreinte (`hash`, blake2-256 des
|
||||
octets), avec son auteur et l'identité de l'auteur (index, nom, statut de membre), en environ
|
||||
1 s. Un bloc sort toutes les 6 s et la finalité vient 2 ou 3 blocs plus tard : un vote se voit
|
||||
en 6 à 12 s et devient définitif en 20 à 30 s.
|
||||
- **Une remarque seule**, sans virement, est indexée elle aussi, avec son auteur.
|
||||
- **L'indexeur de repli** configuré (`g1-squid.axiom-team.fr`) répond 502 le 30/10. Un seul
|
||||
indexeur répond.
|
||||
- **Ğ1Companion** (ManUtopiK, git.duniter.org/clients/g1companion, v0.1.5-test, dernier commit
|
||||
le 2026-04-19) n'offre aux pages que `window.g1.login`, une connexion sans signature. Il ne
|
||||
sait ni signer ni envoyer une transaction construite par une page. Un plan existe pour ajouter
|
||||
l'interface standard des extensions (`docs/INJECTED_WEB3_PLAN.md`).
|
||||
- **duniter-connect** (fork de polkadot{.js}, sur Firefox et Chrome) s'annonce comme une
|
||||
extension standard et **signe ce que la page construit**. Chaque site est autorisé par la
|
||||
personne. Ses limites :
|
||||
- la fenêtre de confirmation est peu lisible tant que la demande de fusion !4 est ouverte ;
|
||||
- elle affiche les adresses au format `5…` ;
|
||||
- une faille de confidentialité (CVSS 4,8) laisse un site lire la liste des comptes.
|
||||
- **Ğecko** accepte un lien profond et un QR code `g1://<adresse>?amount=0.1&comment=<texte>`,
|
||||
aussi sur ordinateur s'il y est installé. Il ne rend pas la main à la page : la confirmation se
|
||||
lit sur l'indexeur. Ğ1nkgo lit le même format, mais remplace par une espace tout signe hors
|
||||
`[A-Za-z0-9 .;:!?()-_@&<>%]`.
|
||||
- **g1vote** (git.duniter.org/tools/g1vote) fait voter par un virement vers une adresse « pour »
|
||||
ou une adresse « contre ». Le choix y est public. Il a servi au vote de la Licence v0.3.0. Sa
|
||||
liste de tâches prévoit « voter depuis l'interface grâce à duniter-connect ».
|
||||
|
||||
## Non vérifié
|
||||
## L'architecture proposée
|
||||
|
||||
- Qu'un portefeuille puisse envoyer un commentaire seul, sans transfert (une « remarque »).
|
||||
Tous les commentaires observés accompagnent un transfert.
|
||||
- Qu'un portefeuille accepte un virement vers soi-même.
|
||||
- Ce que Ğecko affiche d'une remarque sans transfert.
|
||||
- **Le bulletin scellé.** Le serveur calcule `H = empreinte(scrutin, bulletins, sel aléatoire
|
||||
de 128 bits)`. Le commentaire est `ld1:` suivi de 64 caractères hexadécimaux, soit 68 octets,
|
||||
en Ascii : gratuit, et le filtre de Ğ1nkgo le laisse intact. La chaîne montre qui a voté, quand
|
||||
et combien de fois, mais jamais le choix. Le serveur connaît les choix et n'affiche que les
|
||||
totaux. Chacun peut vérifier son propre vote avec son sel. Sans sel, un choix entre trois
|
||||
options se devinerait.
|
||||
- **Un vote groupé** (tout un document, une section, un article) tient en **une** transaction :
|
||||
l'empreinte couvre la liste des bulletins. Une seule remarque par transaction.
|
||||
- **Le dernier fait foi**, article par article, dans l'ordre de la chaîne (bloc, puis rang de
|
||||
l'événement).
|
||||
- **Qui vote.** Le vote compte pour l'identité Ğ1 du compte qui signe la transaction, membre de
|
||||
la toile. Il n'a donc plus besoin de la connexion Ğ1 : une personne venue par invitation vote
|
||||
avec son portefeuille. L'appartenance à la toile se relit sur la chaîne.
|
||||
- **Dans le navigateur** : la page construit la transaction avec polkadot-api (93 Ko gzip,
|
||||
chargé seulement au moment du vote) et la fait signer par l'extension, qui montre sa fenêtre
|
||||
de confirmation. La page l'envoie au nœud, puis le serveur la retrouve sur l'indexeur.
|
||||
Ğ1Companion et trustinWallet s'y brancheront le jour où ils offriront l'interface standard.
|
||||
- **Sur mobile** : un lien et un QR code Ğecko. Deux gestes (ouvrir, valider), puis la page
|
||||
attend la confirmation de l'indexeur.
|
||||
|
||||
## Les voies
|
||||
## À trancher
|
||||
|
||||
| Voie | Ce que fait la personne | Coût | Ce qu'on prouve | Dépend de |
|
||||
|---|---|---|---|---|
|
||||
| 1. Connexion Ğ1 (connect) | signe la connexion dans Ğecko | rien | la clé à chaque session ; les votes restent sur le serveur | poka |
|
||||
| 2. **Liaison par transaction** | une fois : un petit virement commenté d'un code à usage unique, vers un compte désigné | un virement, une fois | la clé, une fois pour toutes ; ensuite on vote ici | un compte destinataire |
|
||||
| 3. Une transaction par vote | un virement commenté par vote | un virement par vote ; un vote groupé = autant de virements | chaque vote, sur la chaîne, visible dans Ğecko | rien de plus, mais lourd |
|
||||
| 4. Bulletins signés, ancrés | signe ses bulletins (portefeuille ou extension) ; le serveur inscrit l'empreinte des bulletins par une remarque | presque rien | chaque vote, vérifiable par tous | la signature de messages par les portefeuilles (travaux de 1000i100 sur sso-connect, extension) |
|
||||
|
||||
## Recommandation
|
||||
|
||||
- **Maintenant : la voie 2.** Elle débloque le vote sans attendre personne, garde une
|
||||
personne, une voix (une identité Ğ1 ne se lie qu'à une identité ici) et marche avec les
|
||||
portefeuilles d'aujourd'hui. Le virement apparaît dans l'historique Ğecko de la personne.
|
||||
- **Quand connect répond : la voie 1** s'ajoute. Une identité déjà liée retrouve ses votes.
|
||||
- **Plus tard : la voie 4**, pour qu'on puisse vérifier chaque vote hors de notre serveur. Les
|
||||
votes sont déjà publiés avec le texte sur le dépôt git.
|
||||
- **La voie 3 est écartée** : un vote groupé (tout un document) coûterait des dizaines de
|
||||
virements.
|
||||
|
||||
## À trancher pour la voie 2
|
||||
|
||||
- Le compte destinataire et le montant (1 Ğ1 ?) : un compte libreDecision qu'Yvv crée dans
|
||||
Ğecko. Seule son adresse publique va dans la configuration du serveur.
|
||||
- La durée de vie du code (proposé : 24 h) et le délai de lecture (l'indexeur suit la chaîne à
|
||||
quelques blocs près).
|
||||
- La sécurité du vote face au secret : bulletin scellé (proposé) ou choix en clair.
|
||||
- L'extension du geste unique : duniter-connect maintenant, ou une contribution à Ğ1Companion
|
||||
d'abord.
|
||||
- Le compte qui reçoit les 0,1 Ğ1 : à qui il appartient, et ce que deviennent les sommes. Un
|
||||
seul compte pour tous les choix, sinon le choix se lit dans l'adresse. Il doit exister et
|
||||
tenir au moins 1 Ğ1.
|
||||
- Le premier essai réel est une vraie transaction : un acte « paye », du portefeuille d'Yvv.
|
||||
|
||||
Reference in New Issue
Block a user