Un portefeuille de contrats intelligents sécurisé, modulaire et évolutif permettant l'adoption massive du Web3
________ ________ ________ ________
| __ | __ | __ \ _____
| / | | | ___/ / |
__ __ _ _ / / /
| \ | / /_/__
_ ______ _ _ _ _ _ _ \ _ \ ________
| _______ | | __ | | __ | | __ | | __ | _______ |
La modularité est l'un des principes clés du génie logiciel. L'architecture et le code modulaires permettent une réutilisabilité élevée, une maintenabilité et des tests faciles, une interdépendance moindre entre les composants et, surtout, fournissent un objectif et des fonctionnalités simples qui réduisent les bogues de code et les problèmes de sécurité.
Barz considère également la modularité comme le principe clé dans l'ensemble de l'architecture et au niveau du code.
Pour plus de modularité, nous imposons la norme EIP-2535 Diamond, Multi-Facet Proxy et fournissons chaque ensemble de fonctionnalités dans une seule facette attachée à Diamond (Barz). Ces modules comprennent :
Chacun de ces modules peut être attaché et détaché par le propriétaire quand il le souhaite.
Barz détache le stockage de chaque module via FacetStorage
, et les modules Barz n'accéderont qu'au FacetStorage
dont le module a besoin. Cela réduit les risques d'accès au stockage inutile et de modification indésirable du stockage à partir des modules, en particulier lors de la mise à niveau de l'implémentation. Avec cette architecture de détachement du stockage utilisé par chaque module, Barz aide à empêcher chaque module d'avoir des collisions de stockage, ce qui réduit l'introduction de vulnérabilité potentielle dans le modèle de proxy.
L'architecture de Barz offre également des avantages lors des mises à niveau. Alors que le modèle de proxy conventionnel nécessite de mettre à niveau l'ensemble de l'implémentation logique pour en mettre à niveau une partie, Barz n'a besoin que du remplacement des modules pertinents en conséquence, ce qui introduit une évolutivité modulaire aux comptes.
L'architecture modulaire permet de décomposer le code en modules plus petits, ce qui contribue à isoler et à limiter les fonctionnalités de chaque module. Cela permet de réduire la surface d’attaque et de limiter les dommages potentiels causés par une faille de sécurité dans un module. Ceci est maximisé avec l'architecture de Barz consistant à accéder uniquement au stockage dont le module a besoin.
Contrairement à d'autres architectures évolutives qui nécessitent une mise à niveau de l'ensemble du contrat logique ou de l'ensemble du module contenant l'ensemble des fonctionnalités, l'architecture de Barz prend en charge l'évolutivité modulaire pour chaque fonction, permettant une modularité et une évolutivité maximales dans le contrat de portefeuille.
À ce titre, notre contrat de compte « Barz » prend en charge le système de signatures multiples. Les utilisateurs pourront modifier le schéma de signature de manière très transparente grâce aux appels de fonction sur le contrat de compte. Cela permet aux utilisateurs de disposer de plusieurs options d'UX de portefeuille, par exemple :
Utilisateurs souhaitant une interaction transparente et aucune sauvegarde de clé privée. Ils peuvent utiliser ECDSA sur le schéma de signature Secp256r1 et utiliser la clé d'accès ("WebAuthn") pour protéger en toute sécurité leur clé privée dans le gestionnaire de mots de passe (par exemple, le trousseau iCloud).
Les utilisateurs souhaitant utiliser le style de portefeuille conventionnel ou les portefeuilles matériels peuvent souhaiter utiliser le schéma de signature ECDSA("Secp256k1") pour la vérification de la signature.
Actuellement, nous prenons en charge 2 schémas de signature (ECDSA sur les courbes Secp256k1 et Secp256r1), cependant, nous continuerons à étendre notre prise en charge de plusieurs schémas de signature différents, notamment BLS et PQC, etc.
Ceci est rendu possible par une architecture modulaire dans laquelle des facettes de signature sont attachées et détachées de la facette du compte en fonction des préférences de l'utilisateur concernant l'UX que chaque schéma de signature pourrait fournir.
Lors de la mise à jour du schéma de signature, la fonction de mise à jour doit vérifier les éléments suivants :
yarn
yarn compile
yarn test
yarn size
forge test