internal/ethapi: better error logic

This commit is contained in:
Marius van der Wijden
2020-05-19 09:28:18 +02:00
committed by Péter Szilágyi
parent 92bee6b037
commit 024e5a74f2
2 changed files with 14 additions and 17 deletions

View File

@ -360,15 +360,14 @@ func (b *SimulatedBackend) CallContract(ctx context.Context, call ethereum.CallM
if err != nil { if err != nil {
return nil, err return nil, err
} }
// If the result contains a revert reason, unpack and return it. // If the result contains a revert reason, try to unpack and return it.
if res.Err != nil && len(res.Revert()) > 0 { if res.Err != nil && len(res.Revert()) > 0 {
reason, err := abi.UnpackRevert(res.Revert()) reason, err := abi.UnpackRevert(res.Revert())
if err != nil { if err == nil {
return nil, err
}
return nil, fmt.Errorf("execution reverted: %v", reason) return nil, fmt.Errorf("execution reverted: %v", reason)
} }
return res.Return(), nil }
return res.Return(), res.Err
} }
// PendingCallContract executes a contract call on the pending state. // PendingCallContract executes a contract call on the pending state.
@ -381,15 +380,14 @@ func (b *SimulatedBackend) PendingCallContract(ctx context.Context, call ethereu
if err != nil { if err != nil {
return nil, err return nil, err
} }
// If the result contains a revert reason, unpack and return it. // If the result contains a revert reason, try to unpack and return it.
if res.Err != nil && len(res.Revert()) > 0 { if res.Err != nil && len(res.Revert()) > 0 {
reason, err := abi.UnpackRevert(res.Revert()) reason, err := abi.UnpackRevert(res.Revert())
if err != nil { if err == nil {
return nil, err
}
return nil, fmt.Errorf("execution reverted: %v", reason) return nil, fmt.Errorf("execution reverted: %v", reason)
} }
return res.Return(), nil }
return res.Return(), res.Err
} }
// PendingNonceAt implements PendingStateReader.PendingNonceAt, retrieving // PendingNonceAt implements PendingStateReader.PendingNonceAt, retrieving

View File

@ -861,15 +861,14 @@ func DoCall(ctx context.Context, b Backend, args CallArgs, blockNrOrHash rpc.Blo
if evm.Cancelled() { if evm.Cancelled() {
return nil, fmt.Errorf("execution aborted (timeout = %v)", timeout) return nil, fmt.Errorf("execution aborted (timeout = %v)", timeout)
} }
// If the result contains a revert reason, unpack and return it. // If the result contains a revert reason, try to unpack and return it.
if result.Err != nil && len(result.Revert()) > 0 { if res.Err != nil && len(res.Revert()) > 0 {
reason, err := abi.UnpackRevert(result.Revert()) reason, err := abi.UnpackRevert(res.Revert())
if err != nil { if err == nil {
return nil, err
}
return nil, fmt.Errorf("execution reverted: %v", reason) return nil, fmt.Errorf("execution reverted: %v", reason)
} }
return result, err }
return result, res.Err
} }
// Call executes the given transaction on the state for the given block number. // Call executes the given transaction on the state for the given block number.