>웹3.0 >Ethereum Purge 단계에서 무엇을 지워야 합니까?

Ethereum Purge 단계에서 무엇을 지워야 합니까?

王林
王林앞으로
2024-04-08 09:25:21733검색

최근 Dencun 하드 포크에서 덜 알려진 EIP 중 하나는 EIP-6780으로, opcode SELFDESTRUCT의 기능을 대부분 제거했습니다.

Ethereum Purge 단계에서 무엇을 지워야 합니까?

이 EIP는 이더리움 프로토콜 개발에서 종종 과소평가되는 부분, 즉 복잡성을 제거하고 새로운 보안 보장을 추가하여 프로토콜을 단순화하려는 노력의 핵심 예입니다. 이는 제가 "PURGE"라고 부르는 것, 즉 이더리움을 합리화하고 기술적 부채를 청산하는 프로젝트의 중요한 부분입니다. 유사한 정신으로 더 많은 EIP가 있을 것이므로 EIP-6780이 목표를 어떻게 달성하는지, 향후 퍼지에서 어떤 EIP가 삭제될 수 있는지 이해할 가치가 있습니다.

EIP-6780은 어떻게 이더리움 프로토콜을 단순화합니까?

EIP-6780은 트랜잭션 중에 계약이 존재할 때만 실행되도록 계약을 파기하는 opcode를 제한하는 SELFDESTRUCT의 기능을 미세 조정합니다. 이를 통해 SELFDESTRUCT 계약 파기 기능의 남용과 코드 삭제 및 저장으로 인해 발생할 수 있는 문제를 방지할 수 있습니다. 이는 더 엄격한 사양을 적용하지는 않지만 두 가지 새로운 변수, 즉 트랜잭션 중에 존재하는지 여부와 계약이 호출되는지 여부를 도입합니다. 이러한 변경을 통해 동일한 거래 기간 내에만 계약을 생성하고 계약을 체결할 수 있어 신뢰성이 향상됩니다.

1. EIP-6780 이후에는 단일 블록에서 편집할 수 있는 최대 저장 슬롯 수가 있습니다(대략: 가스 한도 / 5000).

2. 계약서의 거래 또는 블록 시작 부분에 비어 있지 않은 코드가 있는 경우 해당 거래 또는 블록이 끝날 때에도 동일한 코드를 갖게 됩니다.

이전에는 다음 불변 사항 중 어느 것도 사실이 아니었습니다.

1.SELFDESTRUCT저장 슬롯이 많은 계약은 단일 블록 내에서 무제한의 저장 슬롯을 지울 수 있습니다. 이로 인해 Verkle 트리의 구현이 더 어려워지고 이 특별한 경우를 효율적으로 처리하기 위해 추가 코드가 필요하므로 Ethereum 클라이언트 구현이 더 복잡해집니다. 1、SELFDESTRUCT拥有大量存储槽的合约可以在单个区块内清除无限数量的存储槽。这将使Verkle树的实现变得更加困难,并且使以太坊客户端的实现变得更加复杂,因为它们需要额外的代码来有效地处理这种特殊情况。

合约的代码可以通过SELFDESTRUCT从非空变为为空,实际上合约甚至可以在之后立即使用不同的代码重新创建。这使得账户抽象中的交易验证更加困难,因为交易验证需要使用交易中的代码库而不容易受到DoS攻击的影响。

现在,这些不变量都是True,使得构建以太坊客户端和其他类型的基础设施变得更加容易。几年后,希望未来的EIP能够完成这项工作并SELFDESTRUCT完全消除。

哪些其他“purges”正在进行?

  • Geth 最近删除了数千行代码,删除了对pre-merge PoW网络的支持。

  • 这个 EIP正式体现了这样一个事实:我们不再需要代码来担心“空帐户”(请参阅:EIP-161 ,它引入了这个概念作为上海 DoS 攻击修复的一部分)

  • Dencun 中 blob 的存储窗口为 18 天,这意味着以太坊节点只需要约 50 GB 来存储 blob 数据,并且此数量不会随着时间的推移而增加

前两个显著改善了客户端开发人员的体验。后者显著提高了节点运营商的寿命。

还有哪些其他可能需要Purge的东西?

预编译(Precompiles)

预编译是以太坊合约,它没有 EVM 代码,而是具有必须由客户端自己直接实现的逻辑。这个想法是,预编译可用于实现无法在 EVM 中有效实现的复杂形式的密码学。

如今,预编译的使用非常成功,特别是通过椭圆曲线预编译启用基于 ZK-SNARK 的应用程序。然而,还有其他很少使用的预编译:

  • RIPEMD-160:引入哈希函数是为了支持与比特币更好的兼容性

  • Identity:返回与其输入相同的输出的预编译

  • BLAKE2:引入哈希函数是为了支持与 Zcash 更好的兼容性

  • MODEXP引入非常大的模幂以支持基于 RSA 的加密

事实证明,对这些预编译的需求远远低于预期。Identity

계약 코드는 SELFDESTRUCT를 통해 null이 아닌 코드에서 빈 코드로 변경될 수 있습니다. 실제로 계약은 이후 즉시 다른 코드로 다시 생성될 수도 있습니다. 이는 DoS 공격에 취약하지 않고 트랜잭션에서 코드 기반을 사용해야 하기 때문에 계정 추상화에서 트랜잭션 확인을 더욱 어렵게 만듭니다.

이러한 불변성은 이제 True이므로 Ethereum 클라이언트 및 기타 유형의 인프라를 더 쉽게 구축할 수 있습니다. 몇 년 안에 향후 EIP가 작업을 완료하고 SELFDESTRUCT를 완전히 제거할 수 있기를 바랍니다.
  • 또 어떤 "퍼지"가 진행되고 있나요?

  • Geth는 최근 수천 줄의 코드를 제거하여 사전 병합 PoW 네트워크에 대한 지원을 제거했습니다.

    🎜🎜이 EIP는 "빈 계정"을 걱정하기 위해 더 이상 코드가 필요하지 않다는 사실을 공식적으로 구현합니다(상하이 DoS 공격 수정의 일부로 이 개념을 도입한 EIP-161 참조). 🎜🎜🎜🎜Dencun 스토리지 Blob의 창은 18일입니다. 이는 Ethereum 노드가 Blob 데이터를 저장하는 데 약 50GB만 필요하며 이 양은 시간이 지나도 증가하지 않는다는 것을 의미합니다. 🎜🎜
🎜처음 두 개는 클라이언트 개발자 경험을 크게 향상시켰습니다. 후자는 노드 운영자의 수명을 크게 늘립니다. 🎜🎜제거해야 할 다른 항목은 무엇입니까? 🎜

프리컴파일

🎜프리컴파일은 EVM 코드가 없지만 클라이언트 자체에서 직접 구현해야 하는 로직이 있는 이더리움 계약입니다. 아이디어는 사전 컴파일을 사용하여 EVM에서 효율적으로 구현할 수 없는 복잡한 형태의 암호화를 구현할 수 있다는 것입니다. 🎜🎜요즘 사전 컴파일의 사용은 매우 성공적입니다. 특히 타원 곡선 사전 컴파일을 통해 ZK-SNARK 기반 애플리케이션을 활성화할 수 있습니다. 그러나 거의 사용되지 않는 다른 사전 컴파일도 있습니다. 🎜🎜🎜🎜RIPEMD-160: 해시 함수는 비트코인과의 더 나은 호환성을 지원하기 위해 도입되었습니다. 🎜🎜🎜🎜ID : 사전 컴파일은 입력과 동일한 출력을 반환합니다. 🎜🎜🎜🎜BLAKE2: Zcash와의 더 나은 호환성을 지원하기 위해 해시 함수가 도입되었습니다. 🎜🎜🎜🎜MODEXPRSA를 지원하기 위해 매우 큰 모듈식 지수 도입 기반 암호화 🎜🎜🎜 이러한 사전 컴파일의 필요성은 예상보다 훨씬 낮은 것으로 나타났습니다. Identity는 데이터를 복사하는 가장 쉬운 방법이기 때문에 널리 사용되지만 Dencun 이후 opcode MCOPY가 이를 대체했습니다. 불행하게도 이러한 사전 컴파일은 합의 버그의 거대한 소스이자 ZK-SNARK 회로, 공식 검증 친화적 구현 등을 포함한 새로운 EVM 구현에 대한 큰 고통의 소스입니다. 🎜🎜이러한 사전 컴파일을 제거하는 방법에는 두 가지가 있습니다. 🎜🎜🎜🎜 사전 컴파일만 제거하세요. EIP-7266은 BLAKE2를 제거했습니다. 이는 간단하지만 아직 사용 중인 모든 응용 프로그램이 중단됩니다. 🎜🎜🎜🎜사전 컴파일을 동일한 작업을 수행하는 EVM 코드 블록으로 대체합니다(물론 가스 비용은 더 높지만). 이 초안 EIP는 ID 사전 컴파일을 위해 이를 수행합니다. 이것은 더 어렵지만 이를 사용하는 애플리케이션이 거의 확실하게 중단되지 않습니다(드물게 새로운 EVM 코드의 가스 비용이 일부 입력에 대한 블록 가스 한도를 초과하지 않는 한) 🎜

역사적 블록(EIP-4444)

현재 모든 이더리움 노드는 모든 역사적 블록을 영구적으로 저장할 것으로 예상됩니다. 이는 오랫동안 매우 낭비적인 접근 방식으로 간주되어 왔으며 높은 저장 요구 사항으로 인해 Ethereum 노드 실행을 불필요하게 어렵게 만듭니다. Dencun에서는 약 18일 동안만 저장하면 되는 Blob을 도입했습니다. EIP-4444를 사용하면 일정 시간이 지나면 Ethereum 블록도 기본 Ethereum 노드에서 제거됩니다.

해결해야 할 핵심 질문은: 각 노드에서 이전 기록을 저장하지 않는 경우 이를 저장하는 데 무엇을 사용합니까? 실제로 블록 탐색기와 같은 대규모 엔터티가 이 작업을 수행합니다. 그러나 이 정보를 저장하고 전송하기 위해 p2p 프로토콜을 만드는 것도 가능하며 어렵지 않습니다. 이는 작업에 더 최적화되어 있습니다.

이더리움 블록체인은 영구적이지만 각 노드가 모든 데이터를 영원히 저장하도록 요구하는 것은 이러한 영속성을 달성하기 위한 매우 "과도한" 방법입니다.

한 가지 접근 방식은 오래된 역사에 대한 간단한 P2P 토렌트 네트워크입니다. 다른 하나는 Portal Network와 같이 Ethereum과 함께 사용하기 위해 보다 명시적으로 최적화된 프로토콜입니다.

또는 밈 형식:

Ethereum Purge 단계에서 무엇을 지워야 합니까?

이더리움 노드를 실행하는 데 필요한 저장 공간을 줄이면 노드가 되고자 하는 사람들의 수가 크게 늘어날 수 있습니다. EIP-4444는 또한 노드 동기화 시간을 줄여 많은 노드 운영자의 작업 흐름을 단순화합니다. 따라서 EIP-4444는 이더리움 노드의 분산화를 크게 향상시킬 수 있습니다. 잠재적으로 각 노드가 기본적으로 기록의 작은 부분을 저장했다면 오늘날과 마찬가지로 네트워크에 각 특정 기록의 복사본을 거의 동일한 수만큼 저장할 수도 있습니다.

로그 개혁

이 EIP 초안에서 직접 인용:

로그는 원래 애플리케이션이 온체인 이벤트에 대한 정보를 기록하여 분산 애플리케이션(dapp)이 이 정보를 쉽게 쿼리할 수 있도록 하기 위해 도입되었습니다. 블룸 필터를 사용하면 dapp은 기록을 빠르게 탐색하고 애플리케이션과 관련된 로그가 포함된 여러 블록을 식별한 다음 필요한 로그가 있는 개별 트랜잭션을 빠르게 식별할 수 있습니다.

사실 이 메커니즘은 너무 느립니다. 기록에 액세스하는 거의 모든 dapp은 Ethereum 노드(또는 원격으로 호스팅되는 노드)에 대한 RPC 호출을 통하지 않고 중앙 집중식 추가 프로토콜 서비스를 통해 종료됩니다.

우리는 무엇을 할 수 있나요? 블룸 필터를 제거하고 단순화할 수 있으며 LOG操作码,这样它所做的就是创建一个将哈希值放入状态的值。然后,我们可以构建单独的协议,使用 ZK-SNARK 和增量可验证计算(IVC)来生成可证明正确的“日志树”,它表示给定的所有日志的易于搜索的表topic 로깅이 필요하고 분산화를 원하는 애플리케이션은 이러한 별도의 프로토콜을 사용할 수 있습니다.

SSZ로 이동

오늘날 이더리움의 블록 구조(거래 및 영수증 포함)의 대부분은 여전히 ​​RLP 및 Merkle Patricia 트리를 기반으로 하는 오래된 형식을 사용하여 저장됩니다. 이로 인해 이 데이터를 사용하는 애플리케이션을 개발하는 것이 불필요하게 어려워집니다.

이더리움 합의 계층은 더 깨끗하고 효율적인 SimpleSerialize(SSZ)로 이동했습니다.

Ethereum Purge 단계에서 무엇을 지워야 합니까?

출처: 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 jb51.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제