I added additional argument system that the external function can take, and with this fixed the DoS vulnerability of self-referencing (recursive) object by restricting the recursiveness of the execution (As a note, NonRecoverable just mean automatic rollback at the machine level cannot be done, but you can rollback to an older version of the machine and it would work :))