3434import org .tron .common .runtime .vm .program .InternalTransaction .ExecutorType ;
3535import org .tron .common .runtime .vm .program .Program ;
3636import org .tron .common .runtime .vm .program .Program .JVMStackOverFlowException ;
37+ import org .tron .common .runtime .vm .program .Program .OutOfResourceException ;
3738import org .tron .common .runtime .vm .program .ProgramPrecompile ;
3839import org .tron .common .runtime .vm .program .ProgramResult ;
3940import org .tron .common .runtime .vm .program .invoke .ProgramInvoke ;
@@ -500,10 +501,12 @@ public void go() {
500501 long saveCodeEnergy = getLength (code ) * EnergyCost .getInstance ().getCREATE_DATA ();
501502 long afterSpend = program .getEnergyLimitLeft ().longValue () - saveCodeEnergy ;
502503 if (afterSpend < 0 ) {
503- result .setException (
504- Program .Exception
505- .notEnoughSpendEnergy ("No energy to save just created contract code" ,
506- saveCodeEnergy , program .getEnergyLimitLeft ().longValue ()));
504+ if (null == result .getException ()) {
505+ result .setException (
506+ Program .Exception
507+ .notEnoughSpendEnergy ("save just created contract code" ,
508+ saveCodeEnergy , program .getEnergyLimitLeft ().longValue ()));
509+ }
507510 } else {
508511 result .spendEnergy (saveCodeEnergy );
509512 // have saveCode in create()
@@ -529,6 +532,12 @@ public void go() {
529532 deposit .commit ();
530533 }
531534 } catch (JVMStackOverFlowException e ) {
535+ program .spendAllEnergy ();
536+ result .setException (e );
537+ runtimeError = result .getException ().getMessage ();
538+ logger .error ("runtime error is :{}" , result .getException ().getMessage ());
539+ } catch (OutOfResourceException e ) {
540+ program .spendAllEnergy ();
532541 result .setException (e );
533542 runtimeError = result .getException ().getMessage ();
534543 logger .error ("runtime error is :{}" , result .getException ().getMessage ());
0 commit comments