Bonjour, après quelques discussion avec @kimamila, plusieurs approches syntaxiques pour g1lien se profilent.
Êtes vous plus emballé par une des version, l’autre, ou avez vous d’autres propositions ?
Tout du long, sont utilisé pour désigner les syntaxe les éléments suivant :
[partie optionnelle]
<donnée spécifique à remplacer>
Proposition n°1 (de @1000i100)
Une syntaxe concise (pour les humains et QRcode), la plus lisible possible (pour les néophytes), et simple à comprendre (pour les néophytes).
Tous les liens commencent par g1:
et peuvent être suivi par //
.
Il peut ensuite y avoir un ou plusieurs bloc de sens séparés par des /
. (paiement multi destinataire par exemple)
Un bloc de sens peut être :
- une référence à un compte (clef publique encodée en base58 ou uid s’il n’entre pas en collision avec une commande, ou autre name service dans le futur)
- une commande suivie de ses éventuels paramètres et sous-commandes séparés par
:
.
Voici à quoi pourrais ressembler les bloc de sens :
-
<wallet>
désigne un compte spécifique par n’importe le quel des mode de désignation pris en charge. (ce qui donne un lien complet du typeg1:<wallet>
) -
pubkey:<pubkey>
désigne un compte spécifique par sa clef publique -
uid:<uid>
désigne un compte spécifique par son uid -
ns:<ns>
désigne un compte spécifique par un système de name service à inventer. -
wallet:<uid or pubkey or ns>
désigne un compte spécifique par n’importe le quel des mode de désignation pris en charge. -
pay:<amount>:[to:]<wallet>[:ref:<comment>]
propose le paiement de<amount>
Ǧ1 à destination de<wallet>
éventuellement accompagné d’une référence de transaction<comment>
-
tip:<amount>:[to:]<wallet>
propose le paiement d’un pourboire de<amount>
Ǧ1 à destination de<wallet>
-
balance:<wallet>
affiche le nombre de Ǧ1 actuellement sur ce compte -
toSign:<documentB58Encoded>
propose un document prêt à signer. Il peut être transmis en QRCode à une application hors ligne qui effectue la signature avant de retransmettre le document signé. -
signed:<documentB58Encoded>
fourni un document signé, prêt à être envoyé en blockchain (dans la piscine) par une application relié à internet. -
verifyNode:<nodeUrlB58Encoded>
indique un noeud de référence qui sera utilisé par l’émeteur du g1lien pour vérifier que l’action à été effectué (permet d’accélérer la vérification si les documents sont envoyé aussi à ce noeud sans attendre la diffusion automatique entre piscine ou via la blockchain).
Exemple illustrant la simplicité pour un lien de paiement :
g1:pay:50:to:1000i100
voir pour la compacité :
g1:pay:50:1000i100
Proposition n°2 (de @kimamila), à base d’URI
S’inspirer au maximum de l’existant pour suivre les conventions qui permettrons aux développeur de s’y retrouver plus facilement. Les néophytes ne manipulerons pas les G1Lien eux même, il utiliseront des générateur de bouton de paiement ou assimilé, donc pas besoin de prioriser leur cas d’usage.
S’accorder uniquement sur la syntaxe des principaux cas d’usage, en veillant à leur simplicité d’implémentation, pour pouvoir mettre en place rapidement les G1Liens pour ces usages, quitte à étendre à d’autres cas de figures plus tard.
Références :
Proposition syntaxique :
Tous les liens commencent par g1:
et peuvent être suivi par //
.
Ensuite est désigné une ressources blockchain qui peut être :
g1://block/<number>[/]
g1://pubkey/<pubkey>[/]
g1://pubkey/<pubkey>/ballance[/]
g1:[//]<pubkey>[/]
Pour un g1lien orienté action, utiliser ?action=<action>[&<key>=<value>][...]
:
g1://pubkey/<targetPubkey>[/]?action=pay&amount=<amount>&ref=<comment>
-
g1:<targetPubkey>?<amount>[&<refComment>]
pour l’action la plus cumune, la version condensé est aussi géré.
Pour cibler des ressources de manière plus avancé :
g1://block?q=hash:<hash>
g1:[//]?q=uid:<uid>[?action=certify]
Limites actuelles de cette approche :
- le paiement multi-destinataire est proposé avec une syntaxe qui groupe les receveur et groupe les montant mais nécessite une gimnastique mental pou identifier à quel destinataire est associé quel paiement :
g1://<pubkey1>,<pubkey2>?amount=50,100
- les liens de paiement commence par la clef publique ce qui rend le montant moins lisible au survol du lien (lien qui peut être affiché tronqué en affichant que l début)
Avantage bonus : la syntaxe <pubkey>:<checksum>
n’entre pas en collision avec la syntaxe proposé par @kimamila alors qu’elle nécessiterais un changement de caractère séparateur pour celle de @1000i100.
A vos clavier !