In this work we explore ways to restrict the ability to call Solidity smart
contract functions for a specified duration. We describe methods to restrict
functions from being called twice in the same transaction, block, or time
period. This is related to the notion of non-reentrant functions, which are
functions that can be called within a previous execution. These methods can be
used to restrict interactions with entire sets of functions of smart contracts.
We are motivated to revisit this topic for two reasons. First, we note that
sixteen real-world smart contracts exploits in 2023 resulting in over 136MUSDlostorstolenthatcouldhavebeenpreventedbyrestrictingfunctioncalls.Aspartofthissurvey,wedissectanewclassofexploitthatinvolvesso−calledread−onlyreentrancy:exploitsthatre−enterread−onlyfunctionstomakesmartcontractstateinconsistentinordertoenabletheirexploitation.Second,whilesomeoftheseapproachesaresimple,theymaynotalwaysbehavethesameacrossdifferentblockchainsthatsupportSolidity.