L'un des EIP les moins connus du récent hard fork de Dencun est l'EIP-6780, qui a supprimé la plupart des fonctionnalités de l'opcode SELFDESTRUCT.
Cet EIP est un exemple clé d'une partie souvent sous-estimée du développement du protocole Ethereum : l'effort visant à simplifier le protocole en supprimant la complexité et en ajoutant de nouvelles garanties de sécurité. Il s’agit d’une partie importante de ce que j’appelle « PURGE » : des projets visant à rationaliser Ethereum et à éliminer la dette technique. Il y aura davantage d'EIP dans un esprit similaire, il est donc utile de comprendre comment l'EIP-6780 atteint ses objectifs et quels autres EIP pourraient être effacés lors des futures purges.
EIP-6780 affine la fonctionnalité de SELFDESTRUCT, qui limite l'opcode permettant de détruire un contrat à être exécuté uniquement lorsque le contrat existe lors d'une transaction. Cela évite les abus de la fonction de destruction du contrat SELFDESTRUCT et les problèmes potentiels causés par l'effacement du code et le stockage. Bien que cela n'impose pas une spécification plus stricte, cela introduit deux nouvelles variables pour ce faire : si elle existe pendant la transaction et si le contrat est appelé. Ce changement garantit que les contrats ne peuvent être créés et les accords signés qu'au cours de la même période de négociation pour une plus grande fiabilité.
1. Après EIP-6780, il existe un nombre maximum d'emplacements de stockage pouvant être modifiés en un seul bloc (environ : limite de gaz / 5000).
2. Si le contrat a un code non vide au début d'une transaction ou d'un bloc, il aura le même code à la fin de cette transaction ou de ce bloc.
Auparavant, aucun de ces invariants n'était vrai :
1. AUTODESTRUCTION
Les contrats avec un grand nombre d'emplacements de stockage peuvent libérer un nombre illimité d'emplacements de stockage au sein d'un seul bloc. Cela rendra la mise en œuvre des arbres Verkle plus difficile et rendra les implémentations des clients Ethereum plus complexes car elles nécessiteront du code supplémentaire pour gérer efficacement ce cas particulier. 1、SELFDESTRUCT
拥有大量存储槽的合约可以在单个区块内清除无限数量的存储槽。这将使Verkle树的实现变得更加困难,并且使以太坊客户端的实现变得更加复杂,因为它们需要额外的代码来有效地处理这种特殊情况。
合约的代码可以通过SELFDESTRUCT从非空变为为空,实际上合约甚至可以在之后立即使用不同的代码重新创建。这使得账户抽象中的交易验证更加困难,因为交易验证需要使用交易中的代码库而不容易受到DoS攻击的影响。
现在,这些不变量都是True,使得构建以太坊客户端和其他类型的基础设施变得更加容易。几年后,希望未来的EIP能够完成这项工作并SELFDESTRUCT
完全消除。
Geth 最近删除了数千行代码,删除了对pre-merge PoW网络的支持。
这个 EIP正式体现了这样一个事实:我们不再需要代码来担心“空帐户”(请参阅:EIP-161 ,它引入了这个概念作为上海 DoS 攻击修复的一部分)
Dencun 中 blob 的存储窗口为 18 天,这意味着以太坊节点只需要约 50 GB 来存储 blob 数据,并且此数量不会随着时间的推移而增加
前两个显著改善了客户端开发人员的体验。后者显著提高了节点运营商的寿命。
预编译是以太坊合约,它没有 EVM 代码,而是具有必须由客户端自己直接实现的逻辑。这个想法是,预编译可用于实现无法在 EVM 中有效实现的复杂形式的密码学。
如今,预编译的使用非常成功,特别是通过椭圆曲线预编译启用基于 ZK-SNARK 的应用程序。然而,还有其他很少使用的预编译:
RIPEMD-160
:引入哈希函数是为了支持与比特币更好的兼容性
Identity
:返回与其输入相同的输出的预编译
BLAKE2
:引入哈希函数是为了支持与 Zcash 更好的兼容性
MODEXP
引入非常大的模幂以支持基于 RSA 的加密
事实证明,对这些预编译的需求远远低于预期。Identity
SELFDESTRUCT
. RIPEMD-160
: des fonctions de hachage ont été introduites pour prendre en charge une meilleure compatibilité avec Bitcoin 🎜🎜🎜🎜Identity
: une précompilation qui renvoie une sortie identique à son entrée 🎜🎜🎜🎜BLAKE2
: des fonctions de hachage ont été introduites pour prendre en charge une meilleure compatibilité avec Zcash 🎜🎜🎜🎜MODEXPIntroduction d'une très grande exponentiation modulaire pour prendre en charge RSA -cryptage basé sur 🎜🎜🎜 Il s'avère que le besoin de ces précompilations était bien moindre que prévu. <code>Identity
est largement utilisé car c'est le moyen le plus simple de copier des données, mais depuis Dencun, l'opcode MCOPY l'a remplacé. Malheureusement, ces précompilations sont une énorme source de bugs de consensus et une énorme source de problèmes pour les nouvelles implémentations EVM, y compris les circuits ZK-SNARK, les implémentations conviviales pour la vérification formelle, etc. 🎜🎜Il existe deux manières de supprimer ces précompilations : 🎜🎜🎜🎜 Supprimez simplement les précompilations, par exemple. EIP-7266 a supprimé BLAKE2. C'est simple, mais cela brisera toute application qui l'utilise encore. 🎜🎜🎜🎜Remplacez la précompilation par un bloc de code EVM qui fait la même chose (bien qu'inévitablement à un coût de gaz plus élevé), par ex. Ce projet d'EIP fait cela pour la précompilation d'identité. C'est plus difficile, mais cela ne brisera certainement pas les applications qui l'utilisent (sauf dans de rares cas, le coût du gaz du nouveau code EVM dépasse la limite de gaz du bloc pour certaines entrées) 🎜De nos jours, chaque nœud Ethereum est censé stocker tous les blocs historiques de manière permanente. Cela a longtemps été considéré comme une approche très inutile et rend inutilement difficile l’exécution d’un nœud Ethereum en raison des besoins de stockage élevés. À Dencun, nous avons introduit des blobs, qui ne doivent être stockés que pendant environ 18 jours. Avec EIP-4444, après un certain temps, les blocs Ethereum seront également supprimés du nœud Ethereum par défaut.
Une question clé qui doit être résolue est la suivante : si l'ancien historique n'est pas stocké par chaque nœud, alors qu'est-ce qui est utilisé pour le stocker ? En fait, de grandes entités telles que les explorateurs de blocs le feront. Cependant, il est également possible et pas difficile de créer un protocole p2p pour stocker et transférer ces informations, qui est plus optimisé pour la tâche.
La blockchain Ethereum est permanente, mais exiger que chaque nœud stocke toutes les données pour toujours est une manière très « exagérée » d'atteindre cette permanence.
Une approche consiste à créer un simple réseau torrent peer-to-peer pour l'histoire ancienne. L’autre est un protocole plus explicitement optimisé pour une utilisation avec Ethereum, tel que Portal Network.
Ou, au format mème :
Réduire la quantité de stockage requise pour exécuter un nœud Ethereum pourrait considérablement augmenter le nombre de personnes souhaitant devenir un nœud. EIP-4444 peut également réduire le temps de synchronisation des nœuds, ce qui simplifie également le flux de travail pour de nombreux opérateurs de nœuds. Par conséquent, EIP-4444 peut grandement améliorer la décentralisation des nœuds Ethereum. Potentiellement, si chaque nœud stockait une petite partie de l’historique par défaut, nous pourrions même stocker à peu près le même nombre de copies de chaque historique spécifique sur le réseau qu’aujourd’hui.
Pour citer directement ce projet d'EIP :
Les journaux ont été initialement introduits pour permettre aux applications d'enregistrer des informations sur les événements en chaîne afin que les applications décentralisées (dapps) puissent facilement interroger ces informations. À l'aide des filtres Bloom, une dapp pourra parcourir rapidement l'historique, identifier plusieurs blocs contenant des journaux pertinents pour son application, puis identifier rapidement quelles transactions individuelles disposent des journaux requis.
En fait, ce mécanisme est trop lent. Presque tous les dapps qui accèdent à l'historique n'aboutissent pas via des appels RPC vers des nœuds Ethereum (ou même des nœuds hébergés à distance), mais via des services de protocole supplémentaires centralisés.
Que pouvons-nous faire ? Nous pouvons supprimer le filtre Bloom et simplifier LOG
操作码,这样它所做的就是创建一个将哈希值放入状态的值。然后,我们可以构建单独的协议,使用 ZK-SNARK 和增量可验证计算(IVC)来生成可证明正确的“日志树”,它表示给定的所有日志的易于搜索的表topic
, et les applications qui nécessitent une journalisation et souhaitent une décentralisation peuvent utiliser ces protocoles distincts.
Aujourd'hui, une grande partie de la structure des blocs d'Ethereum (y compris les transactions et les reçus) est toujours stockée dans un format obsolète basé sur les arbres RLP et Merkle Patricia. Cela rend inutilement difficile le développement d’applications utilisant ces données.
La couche de consensus Ethereum est passée à la couche de consensus SimpleSerialize (SSZ) plus propre et plus efficace :
Source : https://eth2book.info/altair/part2/building_blocks/merkleization/
Cependant, nous avons encore besoin de Complete la conversion et déplacez la couche d’exécution vers la même structure.
Les principaux avantages du SSZ comprennent :
La spécification est plus simple et plus claire
Par rapport à l'arbre Merkle Patricia à six fourchettes du statu quo, la longueur des épreuves Merkle est 4 fois plus courte dans la plupart des cas
Par rapport aux épreuves Merkle extrêmes, leur longueur est limitée par rapport aux pires scénarios longs (par exemple, code de contrat de preuve ou sortie de reçu long)
Pas besoin d'implémenter un code de manipulation de bits complexe (obligatoire pour RLP)
Pour Cas d'utilisation de ZK-SNARK, il est souvent possible de réutiliser des implémentations existantes construites autour d'arbres Merkle binaires
Trois types de structures de données cryptographiques existent aujourd'hui dans Ethereum : les arbres binaires SHA256, les listes de hachage SHA3 RLP et les arbres Patricia hexadécimaux. Une fois la transition vers SSZ terminée, il ne nous restera que deux : les arbres binaires SHA256 et les arbres Verkle. À long terme, une fois que nous serons suffisamment bons dans les hachages SNARKing, nous remplacerons probablement les arbres binaires SHA256 et Verkle par des arbres binaires Merkle qui utilisent des hachages compatibles SNARK (une structure de données cryptographiques qui fonctionne pour tous les arbres Ethereum).
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!