최근 Dencun 하드 포크에서 덜 알려진 EIP 중 하나는 EIP-6780으로, opcode SELFDESTRUCT의 기능을 대부분 제거했습니다.
이 EIP는 이더리움 프로토콜 개발에서 종종 과소평가되는 부분, 즉 복잡성을 제거하고 새로운 보안 보장을 추가하여 프로토콜을 단순화하려는 노력의 핵심 예입니다. 이는 제가 "PURGE"라고 부르는 것, 즉 이더리움을 합리화하고 기술적 부채를 청산하는 프로젝트의 중요한 부분입니다. 유사한 정신으로 더 많은 EIP가 있을 것이므로 EIP-6780이 목표를 어떻게 달성하는지, 향후 퍼지에서 어떤 EIP가 삭제될 수 있는지 이해할 가치가 있습니다.
EIP-6780은 트랜잭션 중에 계약이 존재할 때만 실행되도록 계약을 파기하는 opcode를 제한하는 SELFDESTRUCT의 기능을 미세 조정합니다. 이를 통해 SELFDESTRUCT 계약 파기 기능의 남용과 코드 삭제 및 저장으로 인해 발생할 수 있는 문제를 방지할 수 있습니다. 이는 더 엄격한 사양을 적용하지는 않지만 두 가지 새로운 변수, 즉 트랜잭션 중에 존재하는지 여부와 계약이 호출되는지 여부를 도입합니다. 이러한 변경을 통해 동일한 거래 기간 내에만 계약을 생성하고 계약을 체결할 수 있어 신뢰성이 향상됩니다.
1. EIP-6780 이후에는 단일 블록에서 편집할 수 있는 최대 저장 슬롯 수가 있습니다(대략: 가스 한도 / 5000).
2. 계약서의 거래 또는 블록 시작 부분에 비어 있지 않은 코드가 있는 경우 해당 거래 또는 블록이 끝날 때에도 동일한 코드를 갖게 됩니다.
이전에는 다음 불변 사항 중 어느 것도 사실이 아니었습니다.
1.SELFDESTRUCT
저장 슬롯이 많은 계약은 단일 블록 내에서 무제한의 저장 슬롯을 지울 수 있습니다. 이로 인해 Verkle 트리의 구현이 더 어려워지고 이 특별한 경우를 효율적으로 처리하기 위해 추가 코드가 필요하므로 Ethereum 클라이언트 구현이 더 복잡해집니다. 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
: 해시 함수는 비트코인과의 더 나은 호환성을 지원하기 위해 도입되었습니다. 🎜🎜🎜🎜ID
: 사전 컴파일은 입력과 동일한 출력을 반환합니다. 🎜🎜🎜🎜BLAKE2
: Zcash와의 더 나은 호환성을 지원하기 위해 해시 함수가 도입되었습니다. 🎜🎜🎜🎜MODEXP
RSA를 지원하기 위해 매우 큰 모듈식 지수 도입 기반 암호화 🎜🎜🎜 이러한 사전 컴파일의 필요성은 예상보다 훨씬 낮은 것으로 나타났습니다. Identity
는 데이터를 복사하는 가장 쉬운 방법이기 때문에 널리 사용되지만 Dencun 이후 opcode MCOPY가 이를 대체했습니다. 불행하게도 이러한 사전 컴파일은 합의 버그의 거대한 소스이자 ZK-SNARK 회로, 공식 검증 친화적 구현 등을 포함한 새로운 EVM 구현에 대한 큰 고통의 소스입니다. 🎜🎜이러한 사전 컴파일을 제거하는 방법에는 두 가지가 있습니다. 🎜🎜🎜🎜 사전 컴파일만 제거하세요. EIP-7266은 BLAKE2를 제거했습니다. 이는 간단하지만 아직 사용 중인 모든 응용 프로그램이 중단됩니다. 🎜🎜🎜🎜사전 컴파일을 동일한 작업을 수행하는 EVM 코드 블록으로 대체합니다(물론 가스 비용은 더 높지만). 이 초안 EIP는 ID 사전 컴파일을 위해 이를 수행합니다. 이것은 더 어렵지만 이를 사용하는 애플리케이션이 거의 확실하게 중단되지 않습니다(드물게 새로운 EVM 코드의 가스 비용이 일부 입력에 대한 블록 가스 한도를 초과하지 않는 한) 🎜현재 모든 이더리움 노드는 모든 역사적 블록을 영구적으로 저장할 것으로 예상됩니다. 이는 오랫동안 매우 낭비적인 접근 방식으로 간주되어 왔으며 높은 저장 요구 사항으로 인해 Ethereum 노드 실행을 불필요하게 어렵게 만듭니다. Dencun에서는 약 18일 동안만 저장하면 되는 Blob을 도입했습니다. EIP-4444를 사용하면 일정 시간이 지나면 Ethereum 블록도 기본 Ethereum 노드에서 제거됩니다.
해결해야 할 핵심 질문은: 각 노드에서 이전 기록을 저장하지 않는 경우 이를 저장하는 데 무엇을 사용합니까? 실제로 블록 탐색기와 같은 대규모 엔터티가 이 작업을 수행합니다. 그러나 이 정보를 저장하고 전송하기 위해 p2p 프로토콜을 만드는 것도 가능하며 어렵지 않습니다. 이는 작업에 더 최적화되어 있습니다.
이더리움 블록체인은 영구적이지만 각 노드가 모든 데이터를 영원히 저장하도록 요구하는 것은 이러한 영속성을 달성하기 위한 매우 "과도한" 방법입니다.
한 가지 접근 방식은 오래된 역사에 대한 간단한 P2P 토렌트 네트워크입니다. 다른 하나는 Portal Network와 같이 Ethereum과 함께 사용하기 위해 보다 명시적으로 최적화된 프로토콜입니다.
또는 밈 형식:
이더리움 노드를 실행하는 데 필요한 저장 공간을 줄이면 노드가 되고자 하는 사람들의 수가 크게 늘어날 수 있습니다. EIP-4444는 또한 노드 동기화 시간을 줄여 많은 노드 운영자의 작업 흐름을 단순화합니다. 따라서 EIP-4444는 이더리움 노드의 분산화를 크게 향상시킬 수 있습니다. 잠재적으로 각 노드가 기본적으로 기록의 작은 부분을 저장했다면 오늘날과 마찬가지로 네트워크에 각 특정 기록의 복사본을 거의 동일한 수만큼 저장할 수도 있습니다.
이 EIP 초안에서 직접 인용:
로그는 원래 애플리케이션이 온체인 이벤트에 대한 정보를 기록하여 분산 애플리케이션(dapp)이 이 정보를 쉽게 쿼리할 수 있도록 하기 위해 도입되었습니다. 블룸 필터를 사용하면 dapp은 기록을 빠르게 탐색하고 애플리케이션과 관련된 로그가 포함된 여러 블록을 식별한 다음 필요한 로그가 있는 개별 트랜잭션을 빠르게 식별할 수 있습니다.
사실 이 메커니즘은 너무 느립니다. 기록에 액세스하는 거의 모든 dapp은 Ethereum 노드(또는 원격으로 호스팅되는 노드)에 대한 RPC 호출을 통하지 않고 중앙 집중식 추가 프로토콜 서비스를 통해 종료됩니다.
우리는 무엇을 할 수 있나요? 블룸 필터를 제거하고 단순화할 수 있으며 LOG
操作码,这样它所做的就是创建一个将哈希值放入状态的值。然后,我们可以构建单独的协议,使用 ZK-SNARK 和增量可验证计算(IVC)来生成可证明正确的“日志树”,它表示给定的所有日志的易于搜索的表topic
로깅이 필요하고 분산화를 원하는 애플리케이션은 이러한 별도의 프로토콜을 사용할 수 있습니다.
오늘날 이더리움의 블록 구조(거래 및 영수증 포함)의 대부분은 여전히 RLP 및 Merkle Patricia 트리를 기반으로 하는 오래된 형식을 사용하여 저장됩니다. 이로 인해 이 데이터를 사용하는 애플리케이션을 개발하는 것이 불필요하게 어려워집니다.
이더리움 합의 계층은 더 깨끗하고 효율적인 SimpleSerialize(SSZ)로 이동했습니다.
출처: https://eth2book.info/altair/part2/building_blocks/merkleization/
그러나 여전히 Complete가 필요합니다. 변환하고 실행 레이어를 동일한 구조로 이동합니다.
SSZ의 주요 장점은 다음과 같습니다.
사양이 더 간단하고 명확합니다.
머클 증명 길이는 현재 상태의 6-포크 머클 패트리샤 트리에 비해 대부분의 경우 4배 짧습니다.
비교 극단적인 Merkle 증명은 긴 최악의 시나리오(예: 증명 계약 코드 또는 긴 영수증 출력)에 비해 길이가 제한되어 있습니다.
복잡한 비트 조작 코드를 구현할 필요가 없습니다(RLP에 필요함)
ZK-SNARK 사용의 경우 경우에 따라 바이너리 머클 트리를 기반으로 구축된 기존 구현을 재사용하는 것이 가능한 경우가 많습니다.
현재 이더리움에는 SHA256 바이너리 트리, SHA3 RLP 해시 목록 및 16진수 패트리샤 트리라는 세 가지 유형의 암호화 데이터 구조가 존재합니다. SSZ로의 전환이 완료되면 SHA256 바이너리 트리와 Verkle 트리 두 개만 남게 됩니다. 장기적으로 SNARKing 해시가 충분히 능숙해지면 SHA256 바이너리 트리와 Verkle을 SNARK 친화적 해시(모든 이더리움에서 작동하는 암호화 데이터 구조) 트리를 사용하는 바이너리 Merkle 트리로 대체할 가능성이 높습니다.
위 내용은 Ethereum Purge 단계에서 무엇을 지워야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!