EIP-3860은 Shapella 업그레이드의 상하이(Shanghai) 하드 포크의 일환으로 이더리움에서 initcode의 최대 크기 제한 변경과 32바이트 initcode 청크당 가스 요금 부과를 제안합니다. 이 제안은 initcode 길이에 비례하여 비용을 부과하여 initcode가 공정하게 요금이 부과되도록 하기 위해 만들어졌습니다.
2021년 7월 16일, 위험을 최소화하기 위해 initcode를 업데이트하는 EIP-3860이 생성되었습니다. initcode 크기에 대한 제한이 없다는 점은 일부 EVM 제안에 대해 장황한 논의를 야기하여 설계에 영향을 미치거나 기능의 지연 또는 취소를 초래하기도 했습니다. 이 제안은 코드 크기, 코드 오프셋 및 점프 오프셋과 같이 명시적인 제한을 설정하여 16비트에 맞춤으로써 EVM 엔진을 단순화하는 것을 목표로 합니다. [1][3]
Initcode는 새 계약 생성 중에 실행되는 코드이며, 현재 initcode의 최대값은 EIP-170에서 24576바이트로 설정되었습니다. 그러나 EIP-3860은 initcode의 새로운 최대값을 현재 최대 크기의 두 배인 49152바이트로 늘려야 한다고 제안합니다. 이 변경으로 최대 계약 크기가 두 배가 되고 계약이 더 정교한 기능을 갖게 됩니다. [1]
initcode 바이트당 가스 비용은 0.0625 가스가 추가되며, 계약에 가스를 배포하는 비용도 약간 증가합니다. 또한, 계약 생성 중 jumpdest 분석 비용을 나타내는 initcode의 32바이트 청크당 2의 추가 가스 비용이 있습니다. [2]
EIP-3860 제안은 이더리움 블록체인에 새로운 프로그램을 생성하기 위한 규칙을 설정합니다. 두 가지 중요한 규칙은 2의 비용인 INITCODE_WORD_COST와 허용되는 최대 코드 크기의 두 배인 MAX_INITCODE_SIZE입니다. 트랜잭션의 프로그램 코드가 MAX_INITCODE_SIZE보다 크면 트랜잭션이 무효입니다. 또한 프로그램 코드의 비용은 트랜잭션의 총 비용에 포함되며, 트랜잭션에 비용을 충당할 충분한 가스가 없으면 무효입니다. CREATE 및 CREATE2 명령어의 경우 프로그램 코드가 실행되기 전에 공제되는 추가 가스 비용이 있습니다. INITCODE_WORD_COST에 대한 비용 상수는 geth 1.10.9에서 KECCAK256 해싱을 기준으로 성능 벤치마크에 의해 결정됩니다. [2]