Skip to content
Snippets Groups Projects

Oneshot accounts

Merged Pascal Engélibert requested to merge poc-oneshot-accounts into master

Add lighter accounts that can be consumed only once.

Je n'ai pas encore fait les tests unitaires car la config de mock est assez longue à faire. Mais les tests d'intégration sont là.

Est-ce que l'ordre des deposit_event importe ? Si non, le code des calls peut être un peu factorisé sans coût.

Edited by Pascal Engélibert

Merge request reports

Loading
Loading

Activity

Filter activity
  • Approvals
  • Assignees & reviewers
  • Comments (from bots)
  • Comments (from users)
  • Commits & branches
  • Edits
  • Labels
  • Lock status
  • Mentions
  • Merge request status
  • Tracking
  • Éloïs
  • Éloïs
  • Éloïs
  • Est-ce que l'ordre des deposit_event importe ? Si non, le code des calls peut être un peu factorisé sans coût.

    Non on s'en fou, va y factorise le code :)

    Je n'ai pas encore fait les tests unitaires car la config de mock est assez longue à faire

    Si tu peut prendre le temps de le faire dans cette PR ce serait bien :smile:

    Il faudrait aussi un test end2end, car j'ai peur qu'on est des soucis lors de la consommation d'un oneshot account du fait que le compte n'existe pas du point de vue de la pallet sytem !

  • added 1 commit

    • e775eae8 - feat(duniter-account): finalized PoC oneshot account

    Compare with previous version

  • Éloïs
  • Éloïs
  • Éloïs
  • Éloïs
  • @tuxmain évite de rajouter le suffixe 1 dans tout ce qui apparais au monde extérieur, comme les nom des call et de leurs paramètres :)

    On le fait uniquement dons le code interne.

    • Resolved by Éloïs

      @tuxmain pour les call qui consomment un oneshot account, il faut empecher substrate de créer un compte via l'incrément du nonce. Pour ce faire, je propose de créer notre propre wrapper DuniterCheckNonce<Inner: SignedExtension>(Inner) et dans l'impl du trait SignedExtension réécrire uniquement le comportement de la méthode pre_dispath dans le cas d'un call qui consomme un oneshot account. Il faut bien sur être transparent en appelant la méthode de Inner dans tout les autres cas.

      Cherche les occurences à CheckNonce dans la codebase et tu verra ou est ce que c'est injecté pour chaque runtime :smile:

      Edited by Éloïs
  • added 18 commits

    Compare with previous version

  • added 1 commit

    • 0406fec8 - feat(duniter-account): finalized PoC oneshot account

    Compare with previous version

  • added 74 commits

    Compare with previous version

  • @librelois Je crois qu'il ne reste qu'à faire prendre les frais sur le oneshot account plutôt que sur le compte normal.

    Juste pour confirmer : il faut utiliser un OnChargeTransaction custom, c'est ça ?

    Il faut aussi décider, pour consume_oneshot_account_two_dests, si on prend les frais sur un destinataire, ou également sur les deux, ou avec un ratio défini par l'utilisateur. Je dirais que sur un seul c'est plus pratique pour l'utilisateur et plus rapide à calculer.

  • added RN-runtime label

    • Resolved by Éloïs

      @tuxmain il faut créer une implémentation du trait pallet_transaction_payment::OnChargeTransaction dans la pallet oneshot_account qui doit prentre un générique Inner et apeller Inner dans tous les cas sauf si le call est censé être émis par un oneshot account. Si le call est consé être émis par un oneshot account il faut prélever les fauis au oneshot account, pas au destinataire. Il ne faut jamais prelever des frais à un compte qui n'a pas signé pour ça, ce serait une grave faille de sécurité.

      Edited by Éloïs
    • Resolved by Éloïs

      @tuxmain aussi je pense qu'il faut déplacer tout ça dans une nouvelle pallet oneshot_account , et bouger également le CheckNonce dedans. Oui c'est plus dur mais ça me semble être un découplage essentiel. La fonctionnalité "onethot account" que nous ajoutons ici n'est pas spécifique à duniter, donc ça doit être dans sa propre pallet, pallet qu'on pourra d'ailleurs extraire dans son propre dépôt à l'avenir quand elle sera mature.

  • Loading
  • Loading
  • Loading
  • Loading
  • Loading
  • Loading
  • Loading
  • Loading
  • Loading
  • Loading
  • Please register or sign in to reply
    Loading