restrict CREATE2 and SELFDESTRUCT

This commit is contained in:
Hadrien Croubois 2024-02-18 22:08:02 +01:00
parent aea7e6f069
commit dd756eb47d
No known key found for this signature in database
GPG key ID: B53810561A746A06

View file

@ -624,6 +624,11 @@ func opCreate(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]b
}
func opCreate2(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) {
if interpreter.evm.TxContext.Is5806 {
if scope.Contract.CodeHash == types.EmptyCodeHash || scope.Contract.CodeHash == (common.Hash{}) {
return nil, ErrEip5806Write
}
}
if interpreter.readOnly {
return nil, ErrWriteProtection
}
@ -805,6 +810,11 @@ func opStop(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byt
}
func opSelfdestruct(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) {
if interpreter.evm.TxContext.Is5806 {
if scope.Contract.CodeHash == types.EmptyCodeHash || scope.Contract.CodeHash == (common.Hash{}) {
return nil, ErrEip5806Write
}
}
if interpreter.readOnly {
return nil, ErrWriteProtection
}
@ -820,6 +830,11 @@ func opSelfdestruct(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext
}
func opSelfdestruct6780(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) {
if interpreter.evm.TxContext.Is5806 {
if scope.Contract.CodeHash == types.EmptyCodeHash || scope.Contract.CodeHash == (common.Hash{}) {
return nil, ErrEip5806Write
}
}
if interpreter.readOnly {
return nil, ErrWriteProtection
}