Skip to content

Commit

Permalink
filling fixes
Browse files Browse the repository at this point in the history
Signed-off-by: Ignacio Hagopian <[email protected]>
  • Loading branch information
jsign committed Oct 15, 2024
1 parent 4b91d84 commit 9635cc1
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 41 deletions.
92 changes: 52 additions & 40 deletions core/vm/instructions.go
Original file line number Diff line number Diff line change
Expand Up @@ -817,18 +817,21 @@ func opCall(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byt
if interpreter.evm.chainRules.IsEIP4762 && !transfersValue && !chargeCallVariantEIP4762(interpreter.evm, scope) {
return nil, ErrOutOfGas
}
memSize, err := getMemSize(interpreter.table[CALL], scope.Stack)
if err != nil {
return nil, err
}
dynamicCost, err := gasCall(interpreter.evm, scope.Contract, scope.Stack, scope.Memory, memSize)
if err != nil || !scope.Contract.UseGas(dynamicCost) {
return nil, ErrOutOfGas
}
if memSize > 0 {
scope.Memory.Resize(memSize)
if interpreter.evm.chainRules.IsEIP4762 {
memSize, err := getMemSize(interpreter.table[CALL], scope.Stack)
if err != nil {
return nil, err
}
dynamicCost, err := gasCall(interpreter.evm, scope.Contract, scope.Stack, scope.Memory, memSize)
if err != nil || !scope.Contract.UseGas(dynamicCost) {
return nil, ErrOutOfGas
}
if memSize > 0 {
scope.Memory.Resize(memSize)
}
}

var err error
interpreter.evm.callGasTemp, err = callGas(interpreter.evm.chainRules.IsEIP150, scope.Contract.Gas, 0, scope.Stack.Back(0))
if err != nil {
return nil, err
Expand Down Expand Up @@ -881,17 +884,20 @@ func opCallCode(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([
if interpreter.evm.chainRules.IsEIP4762 && !chargeCallVariantEIP4762(interpreter.evm, scope) {
return nil, ErrOutOfGas
}
memSize, err := getMemSize(interpreter.table[CALLCODE], scope.Stack)
if err != nil {
return nil, err
}
dynamicCost, err := gasCallCode(interpreter.evm, scope.Contract, scope.Stack, scope.Memory, memSize)
if err != nil || !scope.Contract.UseGas(dynamicCost) {
return nil, ErrOutOfGas
}
if memSize > 0 {
scope.Memory.Resize(memSize)
if interpreter.evm.chainRules.IsEIP4762 {
memSize, err := getMemSize(interpreter.table[CALLCODE], scope.Stack)
if err != nil {
return nil, err
}
dynamicCost, err := gasCallCode(interpreter.evm, scope.Contract, scope.Stack, scope.Memory, memSize)
if err != nil || !scope.Contract.UseGas(dynamicCost) {
return nil, ErrOutOfGas
}
if memSize > 0 {
scope.Memory.Resize(memSize)
}
}
var err error
interpreter.evm.callGasTemp, err = callGas(interpreter.evm.chainRules.IsEIP150, scope.Contract.Gas, 0, scope.Stack.Back(0))
if err != nil {
return nil, err
Expand Down Expand Up @@ -938,17 +944,20 @@ func opDelegateCall(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext
if interpreter.evm.chainRules.IsEIP4762 && !chargeCallVariantEIP4762(interpreter.evm, scope) {
return nil, ErrOutOfGas
}
memSize, err := getMemSize(interpreter.table[DELEGATECALL], scope.Stack)
if err != nil {
return nil, err
}
dynamicCost, err := gasDelegateCall(interpreter.evm, scope.Contract, scope.Stack, scope.Memory, memSize)
if err != nil || !scope.Contract.UseGas(dynamicCost) {
return nil, ErrOutOfGas
}
if memSize > 0 {
scope.Memory.Resize(memSize)
if interpreter.evm.chainRules.IsEIP4762 {
memSize, err := getMemSize(interpreter.table[DELEGATECALL], scope.Stack)
if err != nil {
return nil, err
}
dynamicCost, err := gasDelegateCall(interpreter.evm, scope.Contract, scope.Stack, scope.Memory, memSize)
if err != nil || !scope.Contract.UseGas(dynamicCost) {
return nil, ErrOutOfGas
}
if memSize > 0 {
scope.Memory.Resize(memSize)
}
}
var err error
interpreter.evm.callGasTemp, err = callGas(interpreter.evm.chainRules.IsEIP150, scope.Contract.Gas, 0, scope.Stack.Back(0))
if err != nil {
return nil, err
Expand Down Expand Up @@ -989,17 +998,20 @@ func opStaticCall(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext)
return nil, ErrOutOfGas
}

memSize, err := getMemSize(interpreter.table[STATICCALL], scope.Stack)
if err != nil {
return nil, err
}
dynamicCost, err := gasCall(interpreter.evm, scope.Contract, scope.Stack, scope.Memory, memSize)
if err != nil || !scope.Contract.UseGas(dynamicCost) {
return nil, ErrOutOfGas
}
if memSize > 0 {
scope.Memory.Resize(memSize)
if interpreter.evm.chainRules.IsEIP4762 {
memSize, err := getMemSize(interpreter.table[STATICCALL], scope.Stack)
if err != nil {
return nil, err
}
dynamicCost, err := gasStaticCall(interpreter.evm, scope.Contract, scope.Stack, scope.Memory, memSize)
if err != nil || !scope.Contract.UseGas(dynamicCost) {
return nil, ErrOutOfGas
}
if memSize > 0 {
scope.Memory.Resize(memSize)
}
}
var err error
interpreter.evm.callGasTemp, err = callGas(interpreter.evm.chainRules.IsEIP150, scope.Contract.Gas, 0, scope.Stack.Back(0))
if err != nil {
return nil, err
Expand Down
2 changes: 1 addition & 1 deletion core/vm/interpreter.go
Original file line number Diff line number Diff line change
Expand Up @@ -234,7 +234,7 @@ func (in *EVMInterpreter) Run(contract *Contract, input []byte, readOnly bool) (
logged = true
}
// TODO(hack): remove if conditions
if op != CALL && op != CALLCODE && op != DELEGATECALL && op != STATICCALL && memorySize > 0 {
if (!in.evm.chainRules.IsEIP4762 || (op != CALL && op != CALLCODE && op != DELEGATECALL && op != STATICCALL)) && memorySize > 0 {
mem.Resize(memorySize)
}
} else if debug {
Expand Down

0 comments on commit 9635cc1

Please sign in to comment.